{"version":3,"file":"angular8-yandex-maps.mjs","sources":["../tmp-esm2022/lib/typings/yandex-maps/index.js","../tmp-esm2022/lib/utils/event-manager/event-manager.js","../tmp-esm2022/lib/tokens/ya-config.js","../tmp-esm2022/lib/utils/zone/zone.js","../tmp-esm2022/lib/services/ya-api-loader/ya-api-loader.service.js","../tmp-esm2022/lib/utils/generate-random-id/generate-random-id.js","../tmp-esm2022/lib/components/ya-map/ya-map.component.js","../tmp-esm2022/lib/components/ya-geoobject/ya-geoobject.directive.js","../tmp-esm2022/lib/components/ya-placemark/ya-placemark.directive.js","../tmp-esm2022/lib/components/ya-clusterer/ya-clusterer.component.js","../tmp-esm2022/lib/components/ya-control/ya-control.directive.js","../tmp-esm2022/lib/components/ya-multiroute/ya-multiroute.directive.js","../tmp-esm2022/lib/components/ya-object-manager/ya-object-manager.directive.js","../tmp-esm2022/lib/components/ya-panorama/ya-panorama.directive.js","../tmp-esm2022/lib/angular-yandex-maps.module.js","../tmp-esm2022/lib/services/ya-geocoder/ya-geocoder.service.js","../tmp-esm2022/index.js","../tmp-esm2022/angular8-yandex-maps.js"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2xpYi90eXBpbmdzL3lhbmRleC1tYXBzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCxzREFBc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xyXG5cclxudHlwZSBQcmVmaXg8VHlwZSwgUD4gPSB7XHJcbiAgW1Byb3BlcnR5IGluIGtleW9mIFR5cGUgYXMgYCR7c3RyaW5nICYgUH0ke0NhcGl0YWxpemU8c3RyaW5nICYgUHJvcGVydHk+fWBdOiBUeXBlW1Byb3BlcnR5XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciBZYW5kZXguTWFwcy5cclxuICogRHVlIHRvIGluYWN0aXZpdHkgdGhlIHR5cGluZ3Mgd2VyZSBjb3BpZWQgYW5kIGltcHJvdmVkIGZyb20gdGhlIERlZmluaXRlbHlUeXBlZCByZXBvc2l0b3J5LlxyXG4gKiBEZWZpbml0aW9ucyBieTogRGVsYWdlbiA8aHR0cHM6Ly9naXRodWIuY29tL0RlbGFnZW4+IC8gZ2FzdHdvcmsxMyA8aHR0cHM6Ly9naXRodWIuY29tL2dhc3R3b3JrMTM+LlxyXG4gKiBAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AdHlwZXMveWFuZGV4LW1hcHNcclxuICogQGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL2NvbmNlcHRzL0Fib3V0Lmh0bWxcclxuICovXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBuYW1lc3BhY2UgeW1hcHMge1xyXG4gICAgaW50ZXJmYWNlIElDbGFzc0NvbnN0cnVjdG9yPFQ+IHtcclxuICAgICAgc3VwZXJjbGFzczogYW55O1xyXG5cclxuICAgICAgbmV3ICgpOiBUO1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgQ29udHJvbFNpbmdsZUtleSA9XHJcbiAgICAgIHwgJ2Z1bGxzY3JlZW5Db250cm9sJ1xyXG4gICAgICB8ICdnZW9sb2NhdGlvbkNvbnRyb2wnXHJcbiAgICAgIHwgJ3JvdXRlRWRpdG9yJ1xyXG4gICAgICB8ICdydWxlckNvbnRyb2wnXHJcbiAgICAgIHwgJ3NlYXJjaENvbnRyb2wnXHJcbiAgICAgIHwgJ3RyYWZmaWNDb250cm9sJ1xyXG4gICAgICB8ICd0eXBlU2VsZWN0b3InXHJcbiAgICAgIHwgJ3pvb21Db250cm9sJ1xyXG4gICAgICB8ICdyb3V0ZUJ1dHRvbkNvbnRyb2wnXHJcbiAgICAgIHwgJ3JvdXRlUGFuZWxDb250cm9sJztcclxuXHJcbiAgICB0eXBlIENvbnRyb2xTZXRLZXkgPVxyXG4gICAgICB8ICdzbWFsbE1hcERlZmF1bHRTZXQnXHJcbiAgICAgIHwgJ21lZGl1bU1hcERlZmF1bHRTZXQnXHJcbiAgICAgIHwgJ2xhcmdlTWFwRGVmYXVsdFNldCdcclxuICAgICAgfCAnZGVmYXVsdCc7XHJcblxyXG4gICAgdHlwZSBDb250cm9sS2V5ID0gQ29udHJvbFNpbmdsZUtleSB8IENvbnRyb2xTZXRLZXk7XHJcblxyXG4gICAgdHlwZSBPdmVybGF5S2V5ID1cclxuICAgICAgfCAnZGVmYXVsdCNwbGFjZW1hcmsnXHJcbiAgICAgIHwgJ2RlZmF1bHQjcGluJ1xyXG4gICAgICB8ICdkZWZhdWx0I2NpcmNsZSdcclxuICAgICAgfCAnZGVmYXVsdCNyZWN0YW5nbGUnXHJcbiAgICAgIHwgJ2RlZmF1bHQjcG9seWxpbmUnXHJcbiAgICAgIHwgJ2RlZmF1bHQjcG9seWdvbidcclxuICAgICAgfCAnaG90c3BvdCNwbGFjZW1hcmsnXHJcbiAgICAgIHwgJ2hvdHNwb3QjY2lyY2xlJ1xyXG4gICAgICB8ICdob3RzcG90I3JlY3RhbmdsZSdcclxuICAgICAgfCAnaG90c3BvdCNwb2x5bGluZSdcclxuICAgICAgfCAnaG90c3BvdCNwb2x5Z29uJ1xyXG4gICAgICB8ICdodG1sI2JhbGxvb24nXHJcbiAgICAgIHwgJ2h0bWwjaGludCdcclxuICAgICAgfCAnaHRtbCNwbGFjZW1hcmsnXHJcbiAgICAgIHwgJ2h0bWwjcmVjdGFuZ2xlJ1xyXG4gICAgICB8IHN0cmluZ1xyXG4gICAgICB8IElDbGFzc0NvbnN0cnVjdG9yPElPdmVybGF5PlxyXG4gICAgICB8ICgoXHJcbiAgICAgICAgICBnZW9tZXRyeTogSVBpeGVsTGluZVN0cmluZ0dlb21ldHJ5LFxyXG4gICAgICAgICAgZGF0YTogSURhdGFNYW5hZ2VyIHwgb2JqZWN0LFxyXG4gICAgICAgICAgb3B0aW9uczogb2JqZWN0LFxyXG4gICAgICAgICkgPT4gUHJvbWlzZTxzdHJpbmcgfCBJQ2xhc3NDb25zdHJ1Y3RvcjxJT3ZlcmxheT4+KTtcclxuXHJcbiAgICB0eXBlIEludGVyYWN0aXZpdHlNb2RlbEtleSA9XHJcbiAgICAgIHwgJ2RlZmF1bHQjb3BhcXVlJ1xyXG4gICAgICB8ICdkZWZhdWx0I2dlb09iamVjdCdcclxuICAgICAgfCAnZGVmYXVsdCNsYXllcidcclxuICAgICAgfCAnZGVmYXVsdCN0cmFuc3BhcmVudCdcclxuICAgICAgfCAnZGVmYXVsdCNzaWxlbnQnXHJcbiAgICAgIHwgc3RyaW5nO1xyXG5cclxuICAgIHR5cGUgUHJlc2V0V2l0aFRleHRLZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtHcmVlbkljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjcmVkSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyN2aW9sZXRJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtPcmFuZ2VJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsYWNrSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNuaWdodEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjeWVsbG93SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrQmx1ZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JlZW5JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3BpbmtJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI29yYW5nZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JheUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjbGlnaHRCbHVlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNicm93bkljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjb2xpdmVJY29uJztcclxuXHJcbiAgICB0eXBlIFByZXNldFdpdGhUZXh0U3RyZXRjaHlLZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya0dyZWVuU3RyZXRjaHlJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3JlZFN0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyN2aW9sZXRTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya09yYW5nZVN0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibGFja1N0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNuaWdodFN0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyN5ZWxsb3dTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya0JsdWVTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JlZW5TdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjcGlua1N0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNvcmFuZ2VTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JheVN0cmV0Y2h5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNsaWdodEJsdWVTdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYnJvd25TdHJldGNoeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjb2xpdmVTdHJldGNoeUljb24nO1xyXG5cclxuICAgIHR5cGUgUHJlc2V0RG90S2V5ID1cclxuICAgICAgfCAnaXNsYW5kcyNibHVlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrR3JlZW5Eb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3JlZERvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjdmlvbGV0RG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrT3JhbmdlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibGFja0RvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjbmlnaHREb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3llbGxvd0RvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya0JsdWVEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2dyZWVuRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNwaW5rRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNvcmFuZ2VEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2dyYXlEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2xpZ2h0Qmx1ZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYnJvd25Eb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI29saXZlRG90SWNvbic7XHJcblxyXG4gICAgdHlwZSBQcmVzZXRDaXJjbGVLZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtHcmVlbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjcmVkQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyN2aW9sZXRDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtPcmFuZ2VDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsYWNrQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNuaWdodENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjeWVsbG93Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrQmx1ZUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JlZW5DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3BpbmtDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI29yYW5nZUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JheUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjbGlnaHRCbHVlQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNicm93bkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjb2xpdmVDaXJjbGVJY29uJztcclxuXHJcbiAgICB0eXBlIFByZXNldENpcmNsZURvdEtleSA9XHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNpcmNsZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya0dyZWVuQ2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNyZWRDaXJjbGVEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI3Zpb2xldENpcmNsZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjZGFya09yYW5nZUNpcmNsZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmxhY2tDaXJjbGVEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI25pZ2h0Q2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyN5ZWxsb3dDaXJjbGVEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtCbHVlQ2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNncmVlbkNpcmNsZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjcGlua0NpcmNsZURvdEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjb3JhbmdlQ2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNncmF5Q2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNsaWdodEJsdWVDaXJjbGVEb3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2Jyb3duQ2lyY2xlRG90SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNvbGl2ZUNpcmNsZURvdEljb24nO1xyXG5cclxuICAgIHR5cGUgUHJlc2V0V2l0aEljb25LZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVBaXJwb3J0SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQXR0ZW50aW9uSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQXV0b0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUJhckljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUJhcmJlckljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUJlYWNoSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQmljeWNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUJpY3ljbGUySWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQm9va0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNhcldhc2hJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDaHJpc3RpYW5JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDaW5lbWFJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDaXJjdXNJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDb3VydEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZURlbGl2ZXJ5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRGlzY291bnRJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVEb2dJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVFZHVjYXRpb25JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVFbnRlcnRhaW5tZW50Q2VudGVySWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRmFjdG9yeUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUZhbWlseUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUZhc2hpb25JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVGb29kSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRnVlbFN0YXRpb25JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVHYXJkZW5JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVHb3Zlcm5tZW50SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlSGVhcnRJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVIb21lSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlSG90ZWxJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVIeWRyb0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUluZm9JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVMYXVuZHJ5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlTGVpc3VyZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZU1hc3NUcmFuc2l0SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlTWVkaWNhbEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZU1vbmV5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlTW91bnRhaW5JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVOaWdodENsdWJJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVPYnNlcnZhdGlvbkljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVBhcmtJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVQYXJraW5nSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUGVyc29uSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUG9ja2V0SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUG9vbEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVBvc3RJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVSYWlsd2F5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUmFwaWRUcmFuc2l0SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUmVwYWlyU2hvcEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVJ1bkljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVNjaWVuY2VJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVTaG9wcGluZ0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVNvdXZlbmlyc0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVNwb3J0SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlU3Rhckljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVRoZWF0ZXJJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVUb2lsZXRJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVVbmRlcnBhc3NJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVWZWdldGF0aW9uSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlVmlkZW9JY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVXYXN0ZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVdhdGVyUGFya0ljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVdhdGVyd2F5SWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlV29yc2hpcEljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVpvb0ljb24nO1xyXG5cclxuICAgIHR5cGUgUHJlc2V0V2l0aEljb25DaXJjbGVLZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVIb21lQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlU2NpZW5jZUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUFpcnBvcnRDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVBdHRlbnRpb25DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVBdXRvQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQmFyQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQmFyYmVyQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQmVhY2hDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVCaWN5Y2xlQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQmljeWNsZTJDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVCb29rQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlQ2FyV2FzaENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNocmlzdGlhbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNpbmVtYUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNpcmN1c0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUNvdXJ0Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRGVsaXZlcnlDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVEaXNjb3VudENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZURvZ0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUVkdWNhdGlvbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUVudGVydGFpbm1lbnRDZW50ZXJDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVGYWN0b3J5Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRmFtaWx5Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlRmFzaGlvbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUZvb2RDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVGdWVsU3RhdGlvbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUdhcmRlbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUdvdmVybm1lbnRDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVIZWFydENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUhvdGVsQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlSHlkcm9DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVJbmZvQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlTGF1bmRyeUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZUxlaXN1cmVDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVNYXNzVHJhbnNpdENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZU1lZGljYWxDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVNb25leUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZU1vdW50YWluQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlTmlnaHRDbHViQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlT2JzZXJ2YXRpb25DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVQYXJrQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUGFya2luZ0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVBlcnNvbkNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVBvY2tldENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVBvb2xDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVQb3N0Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlUmFpbHdheUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVJhcGlkVHJhbnNpdENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVJlcGFpclNob3BDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVSdW5DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVTaG9wcGluZ0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVNvdXZlbmlyc0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVNwb3J0Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlU3RhckNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVRoZWF0ZXJDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVUb2lsZXRDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVVbmRlcnBhc3NDaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVWZWdldGF0aW9uQ2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlVmlkZW9DaXJjbGVJY29uJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVXYXN0ZUNpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVdhdGVyUGFya0NpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVdhdGVyd2F5Q2lyY2xlSWNvbidcclxuICAgICAgfCAnaXNsYW5kcyNibHVlV29yc2hpcENpcmNsZUljb24nXHJcbiAgICAgIHwgJ2lzbGFuZHMjYmx1ZVpvb0NpcmNsZUljb24nO1xyXG5cclxuICAgIHR5cGUgUHJlc2V0UGljdG9ncmFtS2V5ID0gJ2lzbGFuZHMjZ2VvbG9jYXRpb25JY29uJztcclxuXHJcbiAgICB0eXBlIFByZXNldENsdXN0ZXJLZXkgPVxyXG4gICAgICB8ICdpc2xhbmRzI2JsdWVDbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjaW52ZXJ0ZWRCbHVlQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI3JlZENsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZFJlZENsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrT3JhbmdlQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkRGFya09yYW5nZUNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNuaWdodENsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZE5pZ2h0Q2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2RhcmtCbHVlQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkRGFya0JsdWVDbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjcGlua0NsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZFBpbmtDbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjZ3JheUNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZEdyYXlDbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjYnJvd25DbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjaW52ZXJ0ZWRCcm93bkNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNkYXJrR3JlZW5DbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjaW52ZXJ0ZWREYXJrR3JlZW5DbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjdmlvbGV0Q2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkVmlvbGV0Q2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2JsYWNrQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkQmxhY2tDbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjeWVsbG93Q2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkWWVsbG93Q2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2dyZWVuQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkR3JlZW5DbHVzdGVySWNvbnMnXHJcbiAgICAgIHwgJ2lzbGFuZHMjb3JhbmdlQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2ludmVydGVkT3JhbmdlQ2x1c3Rlckljb25zJ1xyXG4gICAgICB8ICdpc2xhbmRzI2xpZ2h0Qmx1ZUNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZExpZ2h0Qmx1ZUNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNvbGl2ZUNsdXN0ZXJJY29ucydcclxuICAgICAgfCAnaXNsYW5kcyNpbnZlcnRlZE9saXZlQ2x1c3Rlckljb25zJztcclxuXHJcbiAgICB0eXBlIFByZXNldEtleSA9XHJcbiAgICAgIHwgUHJlc2V0V2l0aFRleHRLZXlcclxuICAgICAgfCBQcmVzZXRXaXRoVGV4dFN0cmV0Y2h5S2V5XHJcbiAgICAgIHwgUHJlc2V0RG90S2V5XHJcbiAgICAgIHwgUHJlc2V0Q2lyY2xlS2V5XHJcbiAgICAgIHwgUHJlc2V0Q2lyY2xlRG90S2V5XHJcbiAgICAgIHwgUHJlc2V0V2l0aEljb25LZXlcclxuICAgICAgfCBQcmVzZXRXaXRoSWNvbkNpcmNsZUtleVxyXG4gICAgICB8IFByZXNldFBpY3RvZ3JhbUtleVxyXG4gICAgICB8IFByZXNldENsdXN0ZXJLZXlcclxuICAgICAgfCBzdHJpbmc7XHJcblxyXG4gICAgdHlwZSBJY29uTGF5b3V0S2V5ID0gJ2RlZmF1bHQjaW1hZ2UnIHwgJ2RlZmF1bHQjaW1hZ2VXaXRoQ29udGVudCcgfCBzdHJpbmc7XHJcblxyXG4gICAgdHlwZSBDbHVzdGVyTGF5b3V0S2V5ID1cclxuICAgICAgfCAnY2x1c3RlciNiYWxsb29uVHdvQ29sdW1ucydcclxuICAgICAgfCAnY2x1c3RlciNiYWxsb29uQ2Fyb3VzZWwnXHJcbiAgICAgIHwgJ2NsdXN0ZXIjYmFsbG9vbkFjY29yZGlvbidcclxuICAgICAgfCBzdHJpbmc7XHJcblxyXG4gICAgdHlwZSBDbHVzdGVyQ29udGVudExheW91dEtleSA9XHJcbiAgICAgIHwgJ2NsdXN0ZXIjYmFsbG9vblR3b0NvbHVtbnNJdGVtQ29udGVudCdcclxuICAgICAgfCAnY2x1c3RlciNiYWxsb29uQ2Fyb3VzZWxJdGVtQ29udGVudCdcclxuICAgICAgfCAnY2x1c3RlciNiYWxsb29uQWNjb3JkaW9uSXRlbUNvbnRlbnQnXHJcbiAgICAgIHwgc3RyaW5nO1xyXG5cclxuICAgIHR5cGUgRXZlbnRNYXAgPSBHbG9iYWxFdmVudEhhbmRsZXJzRXZlbnRNYXA7XHJcblxyXG4gICAgbmFtZXNwYWNlIGJlaGF2aW9yIHtcclxuICAgICAgY2xhc3MgRGJsQ2xpY2tab29tIGltcGxlbWVudHMgSUJlaGF2aW9yIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogSURibENsaWNrWm9vbU9wdGlvbnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IElDb250cm9sUGFyZW50IHwgbnVsbDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSURibENsaWNrWm9vbU9wdGlvbnMgZXh0ZW5kcyBJTWFwTWFyZ2luT3B0aW9ucyB7XHJcbiAgICAgICAgY2VudGVyaW5nPzogYm9vbGVhbjtcclxuICAgICAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgRHJhZyBpbXBsZW1lbnRzIElCZWhhdmlvciB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IElEcmFnT3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGRpc2FibGUoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZW5hYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGlzRW5hYmxlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogbnVsbCB8IElDb250cm9sUGFyZW50O1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJRHJhZ09wdGlvbnMge1xyXG4gICAgICAgIGFjdGlvbkN1cnNvcj86IHN0cmluZztcclxuICAgICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgaW5lcnRpYT86IGJvb2xlYW47XHJcbiAgICAgICAgaW5lcnRpYUR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgICAgIHRyZW1vcj86IG51bWJlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTGVmdE1vdXNlQnV0dG9uTWFnbmlmaWVyIGltcGxlbWVudHMgSUJlaGF2aW9yIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogSUxlZnRNb3VzZUJ1dHRvbk1hZ25pZmllck9wdGlvbnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSUxlZnRNb3VzZUJ1dHRvbk1hZ25pZmllck9wdGlvbnMge1xyXG4gICAgICAgIGFjdGlvbkN1cnNvcj86IHN0cmluZztcclxuICAgICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE11bHRpVG91Y2ggaW1wbGVtZW50cyBJQmVoYXZpb3Ige1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBJTXVsdGlUb3VjaE9wdGlvbnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSU11bHRpVG91Y2hPcHRpb25zIHtcclxuICAgICAgICB0cmVtb3I/OiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFJpZ2h0TW91c2VCdXR0b25NYWduaWZpZXIgaW1wbGVtZW50cyBJQmVoYXZpb3Ige1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBJUmlnaHRNb3VzZUJ1dHRvbk1hZ25pZmllck9wdGlvbnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSVJpZ2h0TW91c2VCdXR0b25NYWduaWZpZXJPcHRpb25zIHtcclxuICAgICAgICBhY3Rpb25DdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFJvdXRlRWRpdG9yIGltcGxlbWVudHMgSUJlaGF2aW9yIHtcclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgICBnZXRSb3V0ZSgpOiByb3V0ZXIuUm91dGU7XHJcblxyXG4gICAgICAgIGdldFN0YXRlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgc2V0U3RhdGUoc3RhdGU6IHN0cmluZyB8IG51bGwpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBSdWxlciBpbXBsZW1lbnRzIElCZWhhdmlvciB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IElSdWxlck9wdGlvbnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGVuYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgICBjbG9zZSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBnZXRTdGF0ZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIHNldFN0YXRlKHN0YXRlOiBzdHJpbmcgfCBudWxsKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElSdWxlck9wdGlvbnMge1xyXG4gICAgICAgIGJhbGxvb25BdXRvUGFuPzogYm9vbGVhbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgU2Nyb2xsWm9vbSBpbXBsZW1lbnRzIElCZWhhdmlvciB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IElTY3JvbGxab29tT3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGRpc2FibGUoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZW5hYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGlzRW5hYmxlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogbnVsbCB8IElDb250cm9sUGFyZW50O1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJU2Nyb2xsWm9vbU9wdGlvbnMge1xyXG4gICAgICAgIG1heGltdW1EZWx0YT86IG51bWJlcjtcclxuICAgICAgICBzcGVlZD86IG51bWJlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3RvcmFnZTogdXRpbC5TdG9yYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hbWVzcGFjZSBjbHVzdGVyZXIge1xyXG4gICAgICBjbGFzcyBCYWxsb29uIGltcGxlbWVudHMgSUJhbGxvb25NYW5hZ2VyPENsdXN0ZXJlcj4ge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGNsdXN0ZXJlcjogQ2x1c3RlcmVyKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBhdXRvUGFuKCk6IFByb21pc2U8Q2x1c3RlcmVyPjtcclxuXHJcbiAgICAgICAgY2xvc2UoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTxDbHVzdGVyZXI+O1xyXG5cclxuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldERhdGEoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0T3B0aW9ucygpOiBJT3B0aW9uTWFuYWdlciB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBvc2l0aW9uKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgaXNPcGVuKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIG9wZW4oXHJcbiAgICAgICAgICBwb3NpdGlvbj86IG51bWJlcltdLFxyXG4gICAgICAgICAgZGF0YT86IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50LFxyXG4gICAgICAgICAgb3B0aW9ucz86IG9iamVjdCxcclxuICAgICAgICApOiBQcm9taXNlPENsdXN0ZXJlcj47XHJcblxyXG4gICAgICAgIHNldERhdGEoZGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgSFRNTEVsZW1lbnQpOiBQcm9taXNlPENsdXN0ZXJlcj47XHJcblxyXG4gICAgICAgIHNldE9wdGlvbnMob3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTxDbHVzdGVyZXI+O1xyXG5cclxuICAgICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyW10pOiBQcm9taXNlPENsdXN0ZXJlcj47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIEhpbnQgaW1wbGVtZW50cyBJSGludE1hbmFnZXI8Q2x1c3RlcmVyPiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoY2x1c3RlcmVyOiBDbHVzdGVyZXIpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGNsb3NlKGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8Q2x1c3RlcmVyPjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXREYXRhKCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGlzT3BlbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBvcGVuKFxyXG4gICAgICAgICAgcG9zaXRpb24/OiBudW1iZXJbXSxcclxuICAgICAgICAgIGRhdGE/OiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCxcclxuICAgICAgICAgIG9wdGlvbnM/OiBvYmplY3QsXHJcbiAgICAgICAgKTogUHJvbWlzZTxDbHVzdGVyZXI+O1xyXG5cclxuICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTxDbHVzdGVyZXI+O1xyXG5cclxuICAgICAgICBzZXRPcHRpb25zKG9wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8Q2x1c3RlcmVyPjtcclxuXHJcbiAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxDbHVzdGVyZXI+O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGNvbGxlY3Rpb24ge1xyXG4gICAgICBjbGFzcyBJdGVtIGltcGxlbWVudHMgSUNoaWxkT25NYXAsIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIsIElQYXJlbnRPbk1hcCB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IG9iamVjdCk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdldFBhcmVudCgpOiBudWxsIHwgSUNvbnRyb2xQYXJlbnQ7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgb25BZGRUb01hcChtYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIG9uUmVtb3ZlRnJvbU1hcChvbGRNYXA6IE1hcCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgY29udHJvbCB7XHJcbiAgICAgIGNsYXNzIEJ1dHRvbiBpbXBsZW1lbnRzIElDdXN0b21pemFibGUsIElTZWxlY3RhYmxlQ29udHJvbCB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IElCdXR0b25QYXJhbWV0ZXJzIHwgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgZGF0YTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBwcmVzczogRXZlbnQ7XHJcblxyXG4gICAgICAgIHN0YXRlOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGRlc2VsZWN0KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGRpc2FibGUoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZW5hYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgIGdldFBhcmVudCgpOiBJQ29udHJvbFBhcmVudCB8IG51bGw7XHJcblxyXG4gICAgICAgIGlzRW5hYmxlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIHNlbGVjdCgpOiB2b2lkO1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJQnV0dG9uUGFyYW1ldGVycyB7XHJcbiAgICAgICAgZGF0YT86IHtcclxuICAgICAgICAgIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICAgICAgICBpbWFnZT86IHN0cmluZztcclxuICAgICAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkanVzdE1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgICBmbG9hdD86ICdub25lJyB8ICdsZWZ0JyB8ICdyaWdodCc7XHJcbiAgICAgICAgICBmbG9hdEluZGV4PzogbnVtYmVyO1xyXG4gICAgICAgICAgbGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SVNlbGVjdGFibGVDb250cm9sTGF5b3V0PiB8IHN0cmluZztcclxuICAgICAgICAgIG1heFdpZHRoPzogbnVtYmVyW11bXSB8IG51bWJlcltdIHwgbnVtYmVyO1xyXG4gICAgICAgICAgcG9zaXRpb24/OiB7XHJcbiAgICAgICAgICAgIGJvdHRvbT86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgbGVmdD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgcmlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRvcD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBzZWxlY3RPbkNsaWNrPzogYm9vbGVhbjtcclxuICAgICAgICAgIHNpemU/OiAnYXV0bycgfCAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IHtcclxuICAgICAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgICAgICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIEZ1bGxzY3JlZW5Db250cm9sIGV4dGVuZHMgQnV0dG9uIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzPzogSUZ1bGxzY3JlZW5Db250cm9sUGFyYW1ldGVycyk7XHJcblxyXG4gICAgICAgIGVudGVyRnVsbHNjcmVlbigpOiB2b2lkO1xyXG5cclxuICAgICAgICBleGl0RnVsbHNjcmVlbigpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSUZ1bGxzY3JlZW5Db250cm9sUGFyYW1ldGVycyB7XHJcbiAgICAgICAgZGF0YT86IHtcclxuICAgICAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkanVzdE1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgICBmbG9hdD86ICdub25lJyB8ICdsZWZ0JyB8ICdyaWdodCc7XHJcbiAgICAgICAgICBmbG9hdEluZGV4PzogbnVtYmVyO1xyXG4gICAgICAgICAgbGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SVNlbGVjdGFibGVDb250cm9sTGF5b3V0PiB8IHN0cmluZztcclxuICAgICAgICAgIG1heFdpZHRoPzogbnVtYmVyW11bXSB8IG51bWJlcltdIHwgbnVtYmVyO1xyXG4gICAgICAgICAgcG9zaXRpb24/OiB7XHJcbiAgICAgICAgICAgIGJvdHRvbT86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgbGVmdD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgcmlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRvcD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHN0YXRlPzoge1xyXG4gICAgICAgICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbiAgICAgICAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgR2VvbG9jYXRpb25Db250cm9sIGV4dGVuZHMgQnV0dG9uIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzPzogSUdlb2xvY2F0aW9uQ29udHJvbFBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSUdlb2xvY2F0aW9uQ29udHJvbFBhcmFtZXRlcnMgZXh0ZW5kcyBJQnV0dG9uUGFyYW1ldGVycyB7XHJcbiAgICAgICAgZGF0YT86IHtcclxuICAgICAgICAgIGltYWdlPzogc3RyaW5nO1xyXG4gICAgICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYWRqdXN0TWFwTWFyZ2luPzogYm9vbGVhbjtcclxuICAgICAgICAgIGZsb2F0PzogJ25vbmUnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuICAgICAgICAgIGZsb2F0SW5kZXg/OiBudW1iZXI7XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgICAgIG5vUGxhY2VtYXJrPzogYm9vbGVhbjtcclxuICAgICAgICAgIHBvc2l0aW9uPzoge1xyXG4gICAgICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxlZnQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgICB1c2VNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBMaXN0Qm94IGltcGxlbWVudHMgSUNvbGxlY3Rpb24sIElDb250cm9sLCBJQ3VzdG9taXphYmxlIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzPzogSUxpc3RCb3hQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICAgICAgZGF0YTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBhZGQob2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdGhpcztcclxuXHJcbiAgICAgICAgY29sbGFwc2UoKTogdGhpcztcclxuXHJcbiAgICAgICAgZXhwYW5kKCk6IHRoaXM7XHJcblxyXG4gICAgICAgIGdldCh2YWx1ZTogYW55KTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogbnVsbCB8IElDb250cm9sUGFyZW50O1xyXG5cclxuICAgICAgICBpc0V4cGFuZGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIHJlbW92ZShvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB0aGlzO1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJTGlzdEJveFBhcmFtZXRlcnMge1xyXG4gICAgICAgIGRhdGE/OiB7XHJcbiAgICAgICAgICBjb250ZW50Pzogc3RyaW5nO1xyXG4gICAgICAgICAgaW1hZ2U/OiBzdHJpbmc7XHJcbiAgICAgICAgICB0aXRsZT86IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIGl0ZW1zPzogSUNvbnRyb2xbXTtcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYWRqdXN0TWFwTWFyZ2luPzogYm9vbGVhbjtcclxuICAgICAgICAgIGNvbGxhcHNlT25CbHVyPzogYm9vbGVhbjtcclxuICAgICAgICAgIGV4cGFuZE9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICAgICAgZmxvYXQ/OiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgICAgICAgZmxvYXRJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgIGxheW91dD86IElDbGFzc0NvbnN0cnVjdG9yPElTZWxlY3RhYmxlQ29udHJvbExheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgICAgIHBvcHVwRmxvYXQ/OiBzdHJpbmc7XHJcbiAgICAgICAgICBwb3NpdGlvbj86IHtcclxuICAgICAgICAgICAgYm90dG9tPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICByaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgdG9wPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RhdGU/OiB7XHJcbiAgICAgICAgICBleHBhbmRlZD86IGJvb2xlYW47XHJcbiAgICAgICAgICBmaWx0ZXJzPzogYW55O1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIExpc3RCb3hJdGVtIGltcGxlbWVudHMgSUN1c3RvbWl6YWJsZSwgSVNlbGVjdGFibGVDb250cm9sIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzPzogSUxpc3RCb3hJdGVtUGFyYW1ldGVycyB8IHN0cmluZyk7XHJcblxyXG4gICAgICAgIGRhdGE6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhdGU6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZGVzZWxlY3QoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZGlzYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBlbmFibGUoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IElDb250cm9sUGFyZW50IHwgbnVsbDtcclxuXHJcbiAgICAgICAgaXNFbmFibGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGlzU2VsZWN0ZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgc2VsZWN0KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElMaXN0Qm94SXRlbVBhcmFtZXRlcnMge1xyXG4gICAgICAgIGRhdGE/OiB7XHJcbiAgICAgICAgICBjb250ZW50Pzogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGxheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElTZWxlY3RhYmxlQ29udHJvbExheW91dD47XHJcbiAgICAgICAgICBzZWxlY3RhYmxlTGF5b3V0Pzogc3RyaW5nIHwgSUNsYXNzQ29uc3RydWN0b3I8SVNlbGVjdGFibGVDb250cm9sTGF5b3V0PjtcclxuICAgICAgICAgIHNlbGVjdE9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICAgICAgc2VwYXJhdG9yTGF5b3V0Pzogc3RyaW5nIHwgSUNsYXNzQ29uc3RydWN0b3I8SVNlbGVjdGFibGVDb250cm9sTGF5b3V0PjtcclxuICAgICAgICAgIHR5cGU/OiAnc2VsZWN0YWJsZScgfCAnc2VwYXJhdG9yJztcclxuICAgICAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RhdGU/OiB7XHJcbiAgICAgICAgICBzZWxlY3RlZD86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTWFuYWdlciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IobWFwOiBNYXAsIGNvbnRyb2xzPzogc3RyaW5nW10gfCBJQ29udHJvbFtdLCBvcHRpb25zPzogSU1hbmFnZXJPcHRpb25zKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBldmVudC5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBvcHRpb24uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhdGU6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgYWRkKGNvbnRyb2w6IElDb250cm9sIHwgQ29udHJvbEtleSwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdGhpcztcclxuXHJcbiAgICAgICAgZWFjaChjYWxsYmFjazogKGNvbnRyb2w6IElDb250cm9sKSA9PiB2b2lkLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IHRoaXM7XHJcblxyXG4gICAgICAgIGdldChpbmRleDogbnVtYmVyIHwgc3RyaW5nKTogYW55O1xyXG5cclxuICAgICAgICBnZXRDaGlsZEVsZW1lbnQoY29udHJvbDogSUNvbnRyb2wpOiBQcm9taXNlPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgICAgICAgZ2V0Q29udGFpbmVyKCk6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICBpbmRleE9mKGNoaWxkVG9GaW5kOiBJQ29udHJvbCB8IHN0cmluZyk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgcmVtb3ZlKGNvbnRyb2w6IElDb250cm9sIHwgc3RyaW5nKTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElNYW5hZ2VyT3B0aW9ucyB7XHJcbiAgICAgICAgbWFyZ2luPzogbnVtYmVyO1xyXG4gICAgICAgIHBhbmU/OiBJUGFuZTtcclxuICAgICAgICBzdGF0ZXM/OiBzdHJpbmdbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgUm91dGVCdXR0b24gaW1wbGVtZW50cyBJQ29udHJvbCwgSUN1c3RvbWl6YWJsZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IElSb3V0ZUJ1dHRvblBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICByb3V0ZVBhbmVsOiBJUm91dGVQYW5lbDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSVJvdXRlQnV0dG9uUGFyYW1ldGVycyB7XHJcbiAgICAgICAgbGF6eT86IGJvb2xlYW47XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkanVzdE1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgICBhdXRvZm9jdXM/OiBib29sZWFuO1xyXG4gICAgICAgICAgY29sbGFwc2VPbkJsdXI/OiBib29sZWFuO1xyXG4gICAgICAgICAgZmxvYXQ/OiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgICAgICAgZmxvYXRJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgIHBvcHVwQW5pbWF0ZT86IGJvb2xlYW47XHJcbiAgICAgICAgICBwb3B1cEZsb2F0PzogJ2F1dG8nIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuICAgICAgICAgIHBvcHVwV2lkdGg/OiBzdHJpbmc7XHJcbiAgICAgICAgICBwb3NpdGlvbj86IHtcclxuICAgICAgICAgICAgYm90dG9tPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICByaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgdG9wPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHNpemU/OiAnYXV0bycgfCAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IHtcclxuICAgICAgICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBSb3V0ZUVkaXRvciBleHRlbmRzIEJ1dHRvbiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IElSb3V0ZUVkaXRvclBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICBnZXRSb3V0ZSgpOiByb3V0ZXIuUm91dGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJUm91dGVFZGl0b3JQYXJhbWV0ZXJzIHtcclxuICAgICAgICBkYXRhPzoge1xyXG4gICAgICAgICAgaW1hZ2U/OiBzdHJpbmc7XHJcbiAgICAgICAgICB0aXRsZT86IHN0cmluZztcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICBhZGp1c3RNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICAgICAgZmxvYXQ/OiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgICAgICAgZmxvYXRJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgIGxheW91dD86IElDbGFzc0NvbnN0cnVjdG9yPElTZWxlY3RhYmxlQ29udHJvbExheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgICAgIHBvc2l0aW9uPzoge1xyXG4gICAgICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxlZnQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFJvdXRlUGFuZWwgaW1wbGVtZW50cyBJQ29udHJvbCwgSUN1c3RvbWl6YWJsZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IElSb3V0ZVBhbmVsUGFyYW1ldGVycyk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIHJvdXRlUGFuZWw6IElSb3V0ZVBhbmVsO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogbnVsbCB8IElDb250cm9sUGFyZW50O1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJUm91dGVQYW5lbFBhcmFtZXRlcnMge1xyXG4gICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM/OiBib29sZWFuO1xyXG4gICAgICAgICAgZmxvYXQ/OiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgICAgICAgZmxvYXRJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nO1xyXG4gICAgICAgICAgcG9zaXRpb24/OiB7XHJcbiAgICAgICAgICAgIGJvdHRvbT86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgbGVmdD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgcmlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRvcD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBzaG93SGVhZGVyPzogYm9vbGVhbjtcclxuICAgICAgICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFJ1bGVyQ29udHJvbCBleHRlbmRzIEJ1dHRvbiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IElSdWxlckNvbnRyb2xQYXJhbWV0ZXJzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElSdWxlckNvbnRyb2xQYXJhbWV0ZXJzIHtcclxuICAgICAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYWRqdXN0TWFwTWFyZ2luPzogYm9vbGVhbjtcclxuICAgICAgICAgIHBvc2l0aW9uPzoge1xyXG4gICAgICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxlZnQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2NhbGVMaW5lPzogYm9vbGVhbjtcclxuICAgICAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBTZWFyY2hDb250cm9sIGltcGxlbWVudHMgSUNvbnRyb2wsIElDdXN0b21pemFibGUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM/OiBJU2VhcmNoQ29udHJvbFBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBjbGVhcigpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogSUNvbnRyb2xQYXJlbnQgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRSZXF1ZXN0U3RyaW5nKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgZ2V0UmVzcG9uc2VNZXRhRGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICAgICAgICBnZXRSZXN1bHQoaW5kZXg6IG51bWJlcik6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICBnZXRSZXN1bHRzQXJyYXkoKTogUmVjb3JkPHN0cmluZywgYW55PltdO1xyXG5cclxuICAgICAgICBnZXRSZXN1bHRzQ291bnQoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRTZWxlY3RlZEluZGV4KCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaGlkZVJlc3VsdCgpOiB2b2lkO1xyXG5cclxuICAgICAgICBzZWFyY2gocmVxdWVzdDogc3RyaW5nKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgICAgc2hvd1Jlc3VsdChpbmRleDogbnVtYmVyKTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElTZWFyY2hDb250cm9sUGFyYW1ldGVycyB7XHJcbiAgICAgICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkanVzdE1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgICBib3VuZGVkQnk/OiBudW1iZXJbXVtdO1xyXG4gICAgICAgICAgZml0TWF4V2lkdGg/OiBib29sZWFuO1xyXG4gICAgICAgICAgZmxvYXQ/OiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgICAgICAgZmxvYXRJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgIGZvcm1MYXlvdXQ/OiBzdHJpbmcgfCBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PjtcclxuICAgICAgICAgIGtpbmQ/OiAnaG91c2UnIHwgJ3N0cmVldCcgfCAnbWV0cm8nIHwgJ2Rpc3RyaWN0JyB8ICdsb2NhbGl0eSc7XHJcbiAgICAgICAgICBsYXlvdXQ/OiBzdHJpbmcgfCBJQ2xhc3NDb25zdHJ1Y3RvcjxJU2VhcmNoQ29udHJvbExheW91dD47XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgICAgIG5vQ2VudGVyaW5nPzogYm9vbGVhbjtcclxuICAgICAgICAgIG5vUGxhY2VtYXJrPzogYm9vbGVhbjtcclxuICAgICAgICAgIG5vUG9wdXA/OiBib29sZWFuO1xyXG4gICAgICAgICAgbm9TZWxlY3Q/OiBib29sZWFuO1xyXG4gICAgICAgICAgbm9TdWdnZXN0UGFuZWw/OiBib29sZWFuO1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXJDb250ZW50Pzogc3RyaW5nO1xyXG4gICAgICAgICAgcG9wdXBJdGVtTGF5b3V0Pzogc3RyaW5nIHwgSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD47XHJcbiAgICAgICAgICBwb3B1cExheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElMYXlvdXQ+O1xyXG4gICAgICAgICAgcG9zaXRpb24/OiB7XHJcbiAgICAgICAgICAgIGJvdHRvbT86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgbGVmdD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgcmlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRvcD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBwcm92aWRlcj86IElHZW9jb2RlUHJvdmlkZXIgfCAneWFuZGV4I21hcCcgfCAneWFuZGV4I3NlYXJjaCc7XHJcbiAgICAgICAgICBzZWFyY2hDb29yZE9yZGVyPzogJ2xhdGxvbmcnIHwgJ2xvbmdsYXQnO1xyXG4gICAgICAgICAgc2l6ZT86ICdhdXRvJyB8ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XHJcbiAgICAgICAgICBzdHJpY3RCb3VuZHM/OiBib29sZWFuO1xyXG4gICAgICAgICAgc3VwcHJlc3NZYW5kZXhTZWFyY2g/OiBib29sZWFuO1xyXG4gICAgICAgICAgdXNlTWFwQm91bmRzPzogYm9vbGVhbjtcclxuICAgICAgICAgIHpvb21NYXJnaW4/OiBudW1iZXI7XHJcbiAgICAgICAgICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAgICAgICAgIHVzZU1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHN0b3JhZ2U6IHV0aWwuU3RvcmFnZTtcclxuXHJcbiAgICAgIGNsYXNzIFRyYWZmaWNDb250cm9sIGltcGxlbWVudHMgSUNvbnRyb2wsIElDdXN0b21pemFibGUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnM/OiBJVHJhZmZpY0NvbnRyb2xQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICAgICAgZGF0YTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBjb2xsYXBzZSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBleHBhbmQoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgZ2V0UHJvdmlkZXIoa2V5OiBUcmFmZmljQ29udHJvbFByb3ZpZGVyS2V5KTogSVRyYWZmaWNQcm92aWRlcjtcclxuXHJcbiAgICAgICAgaGlkZVRyYWZmaWMoKTogdm9pZDtcclxuXHJcbiAgICAgICAgaXNFeHBhbmRlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBpc1RyYWZmaWNTaG93bigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcblxyXG4gICAgICAgIHNob3dUcmFmZmljKCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHR5cGUgVHJhZmZpY0NvbnRyb2xQcm92aWRlcktleSA9ICd0cmFmZmljI2FjdHVhbCcgfCAndHJhZmZpYyNhcmNoaXZlJztcclxuXHJcbiAgICAgIGludGVyZmFjZSBJVHJhZmZpY1Byb3ZpZGVyIGV4dGVuZHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcCB8IG51bGw7XHJcblxyXG4gICAgICAgIHNldE1hcChtYXA6IE1hcCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJVHJhZmZpY0NvbnRyb2xQYXJhbWV0ZXJzIHtcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYWRqdXN0TWFwTWFyZ2luPzogYm9vbGVhbjtcclxuICAgICAgICAgIGNvbGxhcHNlT25CbHVyPzogYm9vbGVhbjtcclxuICAgICAgICAgIGZsb2F0PzogJ25vbmUnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuICAgICAgICAgIGZsb2F0SW5kZXg6IG51bWJlcjtcclxuICAgICAgICAgIGxheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElUcmFmZmljQ29udHJvbExheW91dD47XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICAgICAgcG9zaXRpb24/OiB7XHJcbiAgICAgICAgICAgIGJvdHRvbT86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgbGVmdD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgcmlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRvcD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IHtcclxuICAgICAgICAgIHByb3ZpZGVyS2V5PzogVHJhZmZpY0NvbnRyb2xQcm92aWRlcktleTtcclxuICAgICAgICAgIHRyYWZmaWNTaG93bj86IGJvb2xlYW47XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgVHlwZVNlbGVjdG9yIGV4dGVuZHMgTGlzdEJveCB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyYW1ldGVycz86IHN0cmluZ1tdIHwgTWFwVHlwZVtdIHwgSVR5cGVTZWxlY3RvclBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICBhZGRNYXBUeXBlKG1hcFR5cGU6IHN0cmluZyB8IE1hcFR5cGUsIHBvc2l0aW9uSW5kZXg/OiBudW1iZXIpOiB0aGlzO1xyXG5cclxuICAgICAgICByZW1vdmVBbGxNYXBUeXBlcygpOiB0aGlzO1xyXG5cclxuICAgICAgICByZW1vdmVNYXBUeXBlKG1hcFR5cGU6IHN0cmluZyB8IE1hcFR5cGUpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSVR5cGVTZWxlY3RvclBhcmFtZXRlcnMge1xyXG4gICAgICAgIG1hcFR5cGVzPzogc3RyaW5nW10gfCBNYXBUeXBlW107XHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkanVzdE1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgICAgICBjb2xsYXBzZU9uQmx1cj86IGJvb2xlYW47XHJcbiAgICAgICAgICBjb2xsYXBzZVRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgICAgICAgICBleHBhbmRPbkNsaWNrPzogYm9vbGVhbjtcclxuICAgICAgICAgIGZsb2F0PzogJ25vbmUnIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcclxuICAgICAgICAgIGZsb2F0SW5kZXg6IG51bWJlcjtcclxuICAgICAgICAgIGxheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElTZWxlY3RhYmxlQ29udHJvbExheW91dD47XHJcbiAgICAgICAgICBtYXhXaWR0aD86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICAgICAgcGFub3JhbWFzSXRlbU1vZGU/OiAnb24nIHwgJ2lmTWVyY2F0b3InIHwgJ29mZic7XHJcbiAgICAgICAgICBwb3NpdGlvbj86IHtcclxuICAgICAgICAgICAgYm90dG9tPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICByaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICAgICAgICAgICAgdG9wPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3RhdGU/OiB7XHJcbiAgICAgICAgICBleHBhbmRlZDogYm9vbGVhbjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBab29tQ29udHJvbCBpbXBsZW1lbnRzIElDb250cm9sLCBJQ3VzdG9taXphYmxlIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzPzogSVpvb21Db250cm9sUGFyYW1ldGVycyk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgIGdldFBhcmVudCgpOiBJQ29udHJvbFBhcmVudCB8IG51bGw7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaW50ZXJmYWNlIElab29tQ29udHJvbFBhcmFtZXRlcnMge1xyXG4gICAgICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICBhZGp1c3RNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICAgICAgbGF5b3V0Pzogc3RyaW5nIHwgSUNsYXNzQ29uc3RydWN0b3I8SVpvb21Db250cm9sTGF5b3V0PjtcclxuICAgICAgICAgIHBvc2l0aW9uPzoge1xyXG4gICAgICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxlZnQ/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgICAgICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2l6ZT86IHN0cmluZztcclxuICAgICAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICAgICAgem9vbUR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgICAgICAgem9vbVN0ZXA/OiBudW1iZXI7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgZGF0YSB7XHJcbiAgICAgIGNsYXNzIE1hbmFnZXIgaW1wbGVtZW50cyBJRGF0YU1hbmFnZXIsIElGcmVlemFibGUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXQocGF0aDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBhbnk7XHJcblxyXG4gICAgICAgIGdldEFsbCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICAgICAgICBzZXQocGF0aDogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZywgdmFsdWU/OiBhbnkpOiB0aGlzO1xyXG5cclxuICAgICAgICBzZXRBbGwoKTogdGhpcztcclxuXHJcbiAgICAgICAgdW5zZXQocGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzO1xyXG5cclxuICAgICAgICB1bnNldEFsbCgpOiB0aGlzO1xyXG5cclxuICAgICAgICBmcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgdW5mcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgYWRkKFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IG9iamVjdCB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogSUV2ZW50TWFuYWdlciB8IG51bGw7XHJcblxyXG4gICAgICAgIGdyb3VwKCk6IElFdmVudEdyb3VwO1xyXG5cclxuICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElFdmVudE1hbmFnZXIgfCBudWxsKTogdGhpcztcclxuXHJcbiAgICAgICAgZmlyZSh0eXBlOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBvYmplY3QgfCBJRXZlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGRvbUV2ZW50IHtcclxuICAgICAgaW50ZXJmYWNlIE1hbmFnZXIge1xyXG4gICAgICAgIGFkZDxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KFxyXG4gICAgICAgICAgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXHJcbiAgICAgICAgICB0eXBlczogSyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IEV2ZW50TWFwW0tdKSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIGNhcHR1cmU/OiBib29sZWFuLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIGFkZChcclxuICAgICAgICAgIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IERvY3VtZW50LFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIGNhcHR1cmU/OiBib29sZWFuLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIGdyb3VwKGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IERvY3VtZW50LCBjYXB0dXJlPzogYm9vbGVhbik6IGV2ZW50Lkdyb3VwO1xyXG5cclxuICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCxcclxuICAgICAgICAgIHR5cGVzOiBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoKGV2ZW50OiBhbnkpID0+IHZvaWQpIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIGNhcHR1cmU/OiBib29sZWFuLFxyXG4gICAgICAgICk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1hbmFnZXI6IE1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGV2ZW50IHtcclxuICAgICAgY2xhc3MgR3JvdXAgaW1wbGVtZW50cyBJRXZlbnRHcm91cCB7XHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBhZGQ8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPihcclxuICAgICAgICAgIHR5cGVzOiBLLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogRXZlbnRNYXBbS10gfCBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgICAgcHJpb3JpdHk/OiBudW1iZXIsXHJcbiAgICAgICAgKTogdGhpcztcclxuICAgICAgICBhZGQoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIHJlbW92ZShcclxuICAgICAgICAgIHR5cGVzOiBzdHJpbmdbXVtdIHwgc3RyaW5nW10gfCBzdHJpbmcsXHJcbiAgICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBvYmplY3QgfCBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgICAgcHJpb3JpdHk/OiBudW1iZXIsXHJcbiAgICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgICAgcmVtb3ZlQWxsKCk6IHRoaXM7XHJcblxyXG4gICAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE1hbmFnZXI8VGFyZ2V0R2VvbWV0cnkgPSBvYmplY3Q+IGltcGxlbWVudHMgSUV2ZW50TWFuYWdlcjxUYXJnZXRHZW9tZXRyeT4ge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHBhcmFtcz86IHtcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBjb250cm9sbGVycz86IElFdmVudFdvcmtmbG93Q29udHJvbGxlcltdIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgcGFyZW50PzogSUV2ZW50TWFuYWdlciB8IHVuZGVmaW5lZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYWRkKFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogSUV2ZW50TWFuYWdlciB8IG51bGw7XHJcblxyXG4gICAgICAgIGdyb3VwKCk6IElFdmVudEdyb3VwO1xyXG5cclxuICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElFdmVudE1hbmFnZXIgfCBudWxsKTogdGhpcztcclxuXHJcbiAgICAgICAgZmlyZSh0eXBlOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBvYmplY3QgfCBJRXZlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgICBjcmVhdGVFdmVudE9iamVjdCh0eXBlOiBzdHJpbmcsIGV2ZW50OiBvYmplY3QsIHRhcmdldDogb2JqZWN0KTogRXZlbnQ7XHJcblxyXG4gICAgICAgIG9uY2UoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogSUV2ZW50KSA9PiBhbnksXHJcbiAgICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgICAgcHJpb3JpdHk/OiBudW1iZXIsXHJcbiAgICAgICAgKTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTWFwcGVyIGltcGxlbWVudHMgSUV2ZW50VHJpZ2dlciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgICB0YXJnZXRFdmVudE1hbmFnZXI6IElFdmVudE1hbmFnZXIsXHJcbiAgICAgICAgICBtYXBwaW5nVGFibGU6IFJlY29yZDxzdHJpbmcsICgoZXZlbnQ6IElFdmVudCkgPT4gSUV2ZW50IHwgbnVsbCkgfCBib29sZWFuPixcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBmaXJlKHR5cGU6IHN0cmluZywgZXZlbnRPYmplY3Q/OiBvYmplY3QgfCBJRXZlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGdlb21ldHJ5IHtcclxuICAgICAgbmFtZXNwYWNlIGJhc2Uge1xyXG4gICAgICAgIGNsYXNzIExpbmVTdHJpbmcgaW1wbGVtZW50cyBJQmFzZUxpbmVTdHJpbmdHZW9tZXRyeSB7XHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgc3RhdGljIGZyb21FbmNvZGVkQ29vcmRpbmF0ZXMoZW5jb2RlZENvb3JkaW5hdGVzOiBzdHJpbmcpOiBnZW9tZXRyeS5MaW5lU3RyaW5nO1xyXG5cclxuICAgICAgICAgIHN0YXRpYyB0b0VuY29kZWRDb29yZGluYXRlcyhnZW9tZXRyeTogZ2VvbWV0cnkuTGluZVN0cmluZyk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgICBnZXRDaGlsZEdlb21ldHJ5KGluZGV4OiBudW1iZXIpOiBJUG9pbnRHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgaW5zZXJ0KGluZGV4OiBudW1iZXIsIGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgICByZW1vdmUoaW5kZXg6IG51bWJlcik6IG51bWJlcltdO1xyXG5cclxuICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgc2V0KGluZGV4OiBudW1iZXIsIGNvb3JkaW5hdGVzOiBudW1iZXJbXSk6IElMaW5lU3RyaW5nR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pOiBJTGluZVN0cmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IG51bWJlcltdW107XHJcblxyXG4gICAgICAgICAgZnJlZXplKCk6IElGcmVlemFibGU7XHJcblxyXG4gICAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgICB1bmZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgICAgIGFkZChcclxuICAgICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ3JvdXAoKTogSUV2ZW50R3JvdXA7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUV2ZW50TWFuYWdlciB8IG51bGwpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIGZpcmUodHlwZTogc3RyaW5nLCBldmVudE9iamVjdDogb2JqZWN0IHwgSUV2ZW50KTogdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFBvaW50IGltcGxlbWVudHMgSUJhc2VQb2ludEdlb21ldHJ5IHtcclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgZ2V0Q29vcmRpbmF0ZXMoKTogbnVtYmVyW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXSB8IG51bGwpOiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgUG9seWdvbiBpbXBsZW1lbnRzIElCYXNlUG9pbnRHZW9tZXRyeSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlcz86IG51bWJlcltdW11bXSwgZmlsbFJ1bGU/OiAnZXZlbk9kZCcgfCAnbm9uWmVybycpO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBzdGF0aWMgZnJvbUVuY29kZWRDb29yZGluYXRlcyhlbmNvZGVkQ29vcmRpbmF0ZXM6IHN0cmluZyk6IFBvbHlnb247XHJcblxyXG4gICAgICAgICAgc3RhdGljIHRvRW5jb2RlZENvb3JkaW5hdGVzKGdlb21ldHJ5OiBQb2x5Z29uKTogc3RyaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZnJlZXplKCk6IElGcmVlemFibGU7XHJcblxyXG4gICAgICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRDaGlsZEdlb21ldHJ5KGluZGV4OiBudW1iZXIpOiBJTGluZWFyUmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRGaWxsUnVsZSgpOiAnZXZlbk9kZCcgfCAnbm9uWmVybyc7XHJcblxyXG4gICAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBpbnNlcnQoaW5kZXg6IG51bWJlciwgcGF0aDogbnVtYmVyW11bXSk6IElQb2x5Z29uR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgICByZW1vdmUoaW5kZXg6IG51bWJlcik6IElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgICAgc2V0KGluZGV4OiBudW1iZXIsIHBhdGg6IG51bWJlcltdW10pOiBJUG9seWdvbkdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXSB8IG51bGwpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIHNldEZpbGxSdWxlKGZpbGxSdWxlOiAnZXZlbk9kZCcgfCAnbm9uWmVybycpOiBJUG9seWdvbkdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBudW1iZXI6IG51bWJlcik6IElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3NbXTtcclxuXHJcbiAgICAgICAgICB1bmZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgQ2lyY2xlIGltcGxlbWVudHMgSUNpcmNsZUdlb21ldHJ5IHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIGNvb3JkaW5hdGVzPzogbnVtYmVyW10gfCBudWxsLFxyXG4gICAgICAgICAgcmFkaXVzPzogbnVtYmVyLFxyXG4gICAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgICAgZ2VvZGVzaWM/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBwaXhlbFJlbmRlcmluZz86IHN0cmluZztcclxuICAgICAgICAgICAgcHJvamVjdGlvbj86IElQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBmcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0Q29vcmRpbmF0ZXMoKTogbnVtYmVyW10gfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UGl4ZWxHZW9tZXRyeShvcHRpb25zPzogb2JqZWN0KTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIGdldFJhZGl1cygpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBpc0Zyb3plbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogbnVtYmVyW10gfCBudWxsKTogSUNpcmNsZUdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICBzZXRNYXAobWFwOiBNYXApOiB2b2lkO1xyXG5cclxuICAgICAgICBzZXRSYWRpdXMocmFkaXVzOiBudW1iZXIpOiBJQ2lyY2xlR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgIHVuZnJlZXplKCk6IElGcmVlemFibGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIExpbmVTdHJpbmcgaW1wbGVtZW50cyBJTGluZVN0cmluZ0dlb21ldHJ5IHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIGNvb3JkaW5hdGVzPzogbnVtYmVyW11bXSxcclxuICAgICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICAgIGNvb3JkUmVuZGVyaW5nPzogJ3Nob3J0ZXN0UGF0aCcgfCAnc3RyYWlnaHRQYXRoJztcclxuICAgICAgICAgICAgZ2VvZGVzaWM/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBwaXhlbFJlbmRlcmluZz86ICdqdW1weScgfCAnc3RhdGljJztcclxuICAgICAgICAgICAgcHJvamVjdGlvbj86IElQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgICBzaW1wbGlmaWNhdGlvbj86IGJvb2xlYW47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIHN0YXRpYyBmcm9tRW5jb2RlZENvb3JkaW5hdGVzKGVuY29kZWRDb29yZGluYXRlczogc3RyaW5nKTogTGluZVN0cmluZztcclxuXHJcbiAgICAgICAgc3RhdGljIHRvRW5jb2RlZENvb3JkaW5hdGVzKGdlb21ldHJ5OiBMaW5lU3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UGl4ZWxHZW9tZXRyeShvcHRpb25zPzogb2JqZWN0KTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHNldE1hcChtYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGdldChpbmRleDogbnVtYmVyKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGdldENoaWxkR2VvbWV0cnkoaW5kZXg6IG51bWJlcik6IElQb2ludEdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0Q29vcmRpbmF0ZXMoKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaW5zZXJ0KGluZGV4OiBudW1iZXIsIGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgcmVtb3ZlKGluZGV4OiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IG9iamVjdCB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgICBzZXQoaW5kZXg6IG51bWJlciwgY29vcmRpbmF0ZXM6IG51bWJlcltdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pOiBJTGluZVN0cmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICBzcGxpY2UoaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICBmcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgdW5mcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgYWRkKFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IG9iamVjdCB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ3JvdXAoKTogSUV2ZW50R3JvdXA7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElFdmVudE1hbmFnZXIgfCBudWxsKTogdGhpcztcclxuXHJcbiAgICAgICAgZmlyZSh0eXBlOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBvYmplY3QgfCBJRXZlbnQpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuYW1lc3BhY2UgcGl4ZWwge1xyXG4gICAgICAgIGNsYXNzIENpcmNsZSBpbXBsZW1lbnRzIElQaXhlbENpcmNsZUdlb21ldHJ5IHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKGNvb3JkaW5hdGVzOiBudW1iZXJbXSB8IG51bGwsIHJhZGl1czogbnVtYmVyLCBtZXRhRGF0YT86IG9iamVjdCk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGVxdWFscyhnZW9tZXRyeTogSVBpeGVsR2VvbWV0cnkpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgICBnZXRNZXRhRGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0UmFkaXVzKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgIHNoaWZ0KG9mZnNldDogbnVtYmVyW10pOiBJUGl4ZWxHZW9tZXRyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIExpbmVTdHJpbmcgaW1wbGVtZW50cyBJUGl4ZWxMaW5lU3RyaW5nR2VvbWV0cnkge1xyXG4gICAgICAgICAgY29uc3RydWN0b3IoY29vcmRpbmF0ZXM6IG51bWJlcltdW10sIG1ldGFEYXRhPzogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZXF1YWxzKGdlb21ldHJ5OiBJUGl4ZWxHZW9tZXRyeSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW107XHJcblxyXG4gICAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRNZXRhRGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgc2NhbGUoZmFjdG9yOiBudW1iZXIpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVBpeGVsR2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBNdWx0aUxpbmVTdHJpbmcgaW1wbGVtZW50cyBJUGl4ZWxNdWx0aUxpbmVHZW9tZXRyeSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlczogbnVtYmVyW11bXVtdLCBtZXRhRGF0YT86IG9iamVjdCk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGVxdWFscyhnZW9tZXRyeTogSVBpeGVsR2VvbWV0cnkpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdW107XHJcblxyXG4gICAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRNZXRhRGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgc2NhbGUoZmFjdG9yOiBudW1iZXIpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVBpeGVsR2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBNdWx0aVBvbHlnb24gaW1wbGVtZW50cyBJUGl4ZWxNdWx0aVBvbHlnb25HZW9tZXRyeSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IG51bWJlcltdW11bXVtdLFxyXG4gICAgICAgICAgICBmaWxsUnVsZTogJ2V2ZW5PZGQnIHwgJ25vblplcm8nLFxyXG4gICAgICAgICAgICBtZXRhRGF0YT86IG9iamVjdCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZXF1YWxzKGdlb21ldHJ5OiBJUGl4ZWxHZW9tZXRyeSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW11bXVtdO1xyXG5cclxuICAgICAgICAgIGdldEZpbGxSdWxlKCk6ICdldmVuT2RkJyB8ICdub25aZXJvJztcclxuXHJcbiAgICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICAgIGdldE1ldGFEYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgIHNoaWZ0KG9mZnNldDogbnVtYmVyW10pOiBJUGl4ZWxHZW9tZXRyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVBpeGVsUG9pbnRHZW9tZXRyeSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3Rvcihwb3NpdGlvbjogbnVtYmVyW10gfCBudWxsLCBtZXRhRGF0YT86IG9iamVjdCk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGVxdWFscyhnZW9tZXRyeTogSVBpeGVsR2VvbWV0cnkpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgICBnZXRNZXRhRGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgc2NhbGUoZmFjdG9yOiBudW1iZXIpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVBpeGVsR2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBQb2x5Z29uIGltcGxlbWVudHMgSVBpeGVsUG9seWdvbkdlb21ldHJ5IHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogbnVtYmVyW11bXVtdLFxyXG4gICAgICAgICAgICBmaWxsUnVsZTogJ2V2ZW5PZGQnIHwgJ25vblplcm8nLFxyXG4gICAgICAgICAgICBtZXRhRGF0YT86IG9iamVjdCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZXF1YWxzKGdlb21ldHJ5OiBJUGl4ZWxHZW9tZXRyeSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW11bXTtcclxuXHJcbiAgICAgICAgICBnZXRGaWxsUnVsZSgpOiAnZXZlbk9kZCcgfCAnbm9uWmVybyc7XHJcblxyXG4gICAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRNZXRhRGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgc2NhbGUoZmFjdG9yOiBudW1iZXIpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVBpeGVsR2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBSZWN0YW5nbGUgaW1wbGVtZW50cyBJUGl4ZWxSZWN0YW5nbGVHZW9tZXRyeSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlczogbnVtYmVyW11bXSB8IG51bGwsIG1ldGFEYXRhPzogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZXF1YWxzKGdlb21ldHJ5OiBJUGl4ZWxHZW9tZXRyeSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW107XHJcblxyXG4gICAgICAgICAgZ2V0TWV0YURhdGEoKTogb2JqZWN0O1xyXG5cclxuICAgICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICAgIHNjYWxlKGZhY3RvcjogbnVtYmVyKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElQaXhlbEdlb21ldHJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgUG9pbnQgaW1wbGVtZW50cyBJUG9pbnRHZW9tZXRyeSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoY29vcmRpbmF0ZXM/OiBudW1iZXJbXSB8IG51bGwpO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UGl4ZWxHZW9tZXRyeShvcHRpb25zPzogb2JqZWN0KTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHNldE1hcChtYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdIHwgbnVsbCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFBvbHlnb24gaW1wbGVtZW50cyBJUG9seWdvbkdlb21ldHJ5IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihjb29yZGluYXRlcz86IG51bWJlcltdW11bXSwgZmlsbFJ1bGU/OiAnZXZlbk9kZCcgfCAnbm9uWmVybycsIG9wdGlvbnM/OiBvYmplY3QpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0aWMgZnJvbUVuY29kZWRDb29yZGluYXRlcyhlbmNvZGVkQ29vcmRpbmF0ZXM6IHN0cmluZyk6IFBvbHlnb247XHJcblxyXG4gICAgICAgIHN0YXRpYyB0b0VuY29kZWRDb29yZGluYXRlcyhnZW9tZXRyeTogUG9seWdvbik6IHN0cmluZztcclxuXHJcbiAgICAgICAgYWRkKFxyXG4gICAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IG9iamVjdCB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBmaXJlKHR5cGU6IHN0cmluZywgZXZlbnRPYmplY3Q6IG9iamVjdCB8IElFdmVudCk6IHRoaXM7XHJcblxyXG4gICAgICAgIGZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgICBnZXQoaW5kZXg6IG51bWJlcik6IG51bWJlcltdW107XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0Q2hpbGRHZW9tZXRyeShpbmRleDogbnVtYmVyKTogSUxpbmVhclJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgZ2V0Q2xvc2VzdChhbmNob3JQb3NpdGlvbjogbnVtYmVyW10pOiBvYmplY3Q7XHJcblxyXG4gICAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW11bXTtcclxuXHJcbiAgICAgICAgZ2V0RmlsbFJ1bGUoKTogJ2V2ZW5PZGQnIHwgJ25vblplcm8nO1xyXG5cclxuICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBpeGVsR2VvbWV0cnkob3B0aW9ucz86IG9iamVjdCk6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgZ3JvdXAoKTogSUV2ZW50R3JvdXA7XHJcblxyXG4gICAgICAgIGluc2VydChpbmRleDogbnVtYmVyLCBwYXRoOiBudW1iZXJbXVtdKTogSVBvbHlnb25HZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgcmVtb3ZlKGluZGV4OiBudW1iZXIpOiBJTGluZWFyUmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICBzZXQoaW5kZXg6IG51bWJlciwgcGF0aDogbnVtYmVyW11bXSk6IElQb2x5Z29uR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdW10pOiBJUG9seWdvbkdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgICBzZXRGaWxsUnVsZShmaWxsUnVsZTogJ2V2ZW5PZGQnIHwgJ25vblplcm8nKTogSVBvbHlnb25HZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgICAgc2V0TWFwKG1hcDogTWFwKTogdm9pZDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0IHwgbnVsbCk6IHRoaXM7XHJcblxyXG4gICAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBudW1iZXI6IG51bWJlcik6IElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3NbXTtcclxuXHJcbiAgICAgICAgdW5mcmVlemUoKTogSUZyZWV6YWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgUmVjdGFuZ2xlIGltcGxlbWVudHMgSVJlY3RhbmdsZUdlb21ldHJ5IHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIGNvb3JkaW5hdGVzPzogbnVtYmVyW11bXSB8IG51bGwsXHJcbiAgICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgICBjb29yZFJlbmRlcmluZz86IHN0cmluZztcclxuICAgICAgICAgICAgZ2VvZGVzaWM/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBwaXhlbFJlbmRlcmluZz86IHN0cmluZztcclxuICAgICAgICAgICAgcHJvamVjdGlvbj86IElQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBmcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0Q29vcmRpbmF0ZXMoKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBpeGVsR2VvbWV0cnkob3B0aW9ucz86IG9iamVjdCk6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pOiBJUmVjdGFuZ2xlR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICAgIHNldE1hcChtYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHVuZnJlZXplKCk6IElGcmVlemFibGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgZ2VvbWV0cnlFZGl0b3Ige1xyXG4gICAgICBjbGFzcyBDaXJjbGUgaW1wbGVtZW50cyBJR2VvbWV0cnlFZGl0b3Ige1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGdlb21ldHJ5OiBJQ2lyY2xlR2VvbWV0cnksIG9wdGlvbnM/OiBvYmplY3QpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGFydERyYXdpbmcoKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHN0YXJ0RWRpdGluZygpOiB2b2lkO1xyXG5cclxuICAgICAgICBzdG9wRHJhd2luZygpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgc3RvcEVkaXRpbmcoKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTGluZVN0cmluZyBpbXBsZW1lbnRzIElHZW9tZXRyeUVkaXRvciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoZ2VvbWV0cnk6IElMaW5lU3RyaW5nR2VvbWV0cnksIG9wdGlvbnM/OiBvYmplY3QpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXRNb2RlbCgpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgZ2V0TW9kZWxTeW5jKCk6IG1vZGVsLlJvb3RMaW5lU3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0VmlldygpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgZ2V0Vmlld1N5bmMoKTogdmlldy5QYXRoIHwgbnVsbDtcclxuXHJcbiAgICAgICAgc3RhcnREcmF3aW5nKCk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICBzdGFydEVkaXRpbmcoKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHN0YXJ0RnJhbWluZygpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgc3RvcERyYXdpbmcoKTogdm9pZDtcclxuXHJcbiAgICAgICAgc3RvcEVkaXRpbmcoKTogdm9pZDtcclxuXHJcbiAgICAgICAgc3RvcEZyYW1pbmcoKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbmFtZXNwYWNlIG1vZGVsIHtcclxuICAgICAgICBjbGFzcyBDaGlsZExpbmVhclJpbmcgZXh0ZW5kcyBDaGlsZExpbmVTdHJpbmcge31cclxuXHJcbiAgICAgICAgY2xhc3MgQ2hpbGRMaW5lU3RyaW5nIGltcGxlbWVudHMgSUdlb21ldHJ5RWRpdG9yQ2hpbGRNb2RlbCB7XHJcbiAgICAgICAgICBlZGl0b3I6IElHZW9tZXRyeUVkaXRvcjtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZ2VvbWV0cnk6IElCYXNlR2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldEFsbFZlcnRpY2VzTnVtYmVyKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgICBnZXRFZGdlTW9kZWxzKCk6IEVkZ2VbXTtcclxuXHJcbiAgICAgICAgICBnZXRJbmRleCgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IElHZW9tZXRyeUVkaXRvck1vZGVsO1xyXG5cclxuICAgICAgICAgIGdldFBpeGVscygpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgICBnZXRWZXJ0ZXhNb2RlbHMoKTogQ2hpbGRWZXJ0ZXhbXTtcclxuXHJcbiAgICAgICAgICBzZXRJbmRleChpbmRleDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBzZXRQaXhlbHMocGl4ZWxzOiBudW1iZXJbXSk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc3BsaWNlVmVydGljZXMoc3RhcnQ6IG51bWJlciwgZGVsZXRlQ291bnQ6IG51bWJlcik6IG51bWJlcltdW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBDaGlsZFZlcnRleCBpbXBsZW1lbnRzIElHZW9tZXRyeUVkaXRvckNoaWxkTW9kZWwge1xyXG4gICAgICAgICAgZWRpdG9yOiBJR2VvbWV0cnlFZGl0b3I7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBJQmFzZUdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBnZXRBbGxWZXJ0aWNlc051bWJlcigpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgZ2V0SW5kZXgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICAgIGdldE5leHRWZXJ0ZXgoKTogQ2hpbGRWZXJ0ZXggfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBJR2VvbWV0cnlFZGl0b3JNb2RlbDtcclxuXHJcbiAgICAgICAgICBnZXRQaXhlbHMoKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgICAgZ2V0UHJldlZlcnRleCgpOiBDaGlsZFZlcnRleCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgc2V0R2xvYmFsUGl4ZWxzKHBpeGVsczogbnVtYmVyW10pOiB2b2lkO1xyXG5cclxuICAgICAgICAgIHNldEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIHNldE5leHRWZXJ0ZXgobmV4dFZlcnRleDogQ2hpbGRWZXJ0ZXgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIHNldFBpeGVscyhwaXhlbHM6IG51bWJlcltdKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBzZXRQcmV2VmVydGV4KHByZXZWZXJ0ZXg6IENoaWxkVmVydGV4KTogdm9pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIEVkZ2UgaW1wbGVtZW50cyBJR2VvbWV0cnlFZGl0b3JSb290TW9kZWwge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBnZXROZXh0VmVydGV4KCk6IENoaWxkVmVydGV4IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRQaXhlbHMoKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgICAgZ2V0UHJldlZlcnRleCgpOiBDaGlsZFZlcnRleCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgc2V0TmV4dFZlcnRleChuZXh0VmVydGV4OiBDaGlsZFZlcnRleCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc2V0UHJldlZlcnRleChwcmV2VmVydGV4OiBDaGlsZFZlcnRleCk6IHZvaWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBFZGdlR2VvbWV0cnkgaW1wbGVtZW50cyBJR2VvbWV0cnkge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRQaXhlbEdlb21ldHJ5KG9wdGlvbnM/OiBvYmplY3QpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBzZXRNYXAobWFwOiBNYXApOiB2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgUm9vdExpbmVTdHJpbmcgaW1wbGVtZW50cyBJR2VvbWV0cnlFZGl0b3JSb290TW9kZWwge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBnZXRBbGxWZXJ0aWNlc051bWJlcigpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgZ2V0UGl4ZWxzKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICAgIGdldFZlcnRleE1vZGVscygpOiBDaGlsZFZlcnRleFtdO1xyXG5cclxuICAgICAgICAgIHNwbGljZVZlcnRpY2VzKHN0YXJ0OiBudW1iZXIsIGRlbGV0ZUNvdW50OiBudW1iZXIpOiBudW1iZXJbXVtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgUm9vdFBvbHlnb24gaW1wbGVtZW50cyBJR2VvbWV0cnlFZGl0b3JSb290TW9kZWwge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBnZXRBbGxWZXJ0aWNlc051bWJlcigpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgZ2V0UGF0aE1vZGVscygpOiBDaGlsZExpbmVhclJpbmdbXTtcclxuXHJcbiAgICAgICAgICBnZXRQaXhlbHMoKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgICAgc3BsaWNlUGF0aHMoc3RhcnQ6IG51bWJlciwgZGVsZXRlQ291bnQ6IG51bWJlcik6IG51bWJlcltdW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBQb2ludCBpbXBsZW1lbnRzIElHZW9tZXRyeUVkaXRvciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgICBnZW9tZXRyeTogSVBvaW50R2VvbWV0cnksXHJcbiAgICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgICBkYmxDbGlja0hhbmRsZXI/OiAocmVmOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAgICAgICAgIGRyYXdpbmdDdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGRyYXdPdmVyPzogYm9vbGVhbjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5O1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhcnREcmF3aW5nKCk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICBzdGFydEVkaXRpbmcoKTogdm9pZDtcclxuXHJcbiAgICAgICAgc3RvcERyYXdpbmcoKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHN0b3BFZGl0aW5nKCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIFBvbHlnb24gaW1wbGVtZW50cyBJR2VvbWV0cnlFZGl0b3Ige1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGdlb21ldHJ5OiBJUG9seWdvbkdlb21ldHJ5LCBvcHRpb25zOiBvYmplY3QpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXRNb2RlbCgpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgZ2V0TW9kZWxTeW5jKCk6IG1vZGVsLlJvb3RQb2x5Z29uIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0VmlldygpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgZ2V0Vmlld1N5bmMoKTogdmlldy5NdWx0aVBhdGggfCBudWxsO1xyXG5cclxuICAgICAgICBzdGFydERyYXdpbmcoKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHN0YXJ0RWRpdGluZygpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgc3RhcnRGcmFtaW5nKCk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICBzdG9wRHJhd2luZygpOiB2b2lkO1xyXG5cclxuICAgICAgICBzdG9wRWRpdGluZygpOiB2b2lkO1xyXG5cclxuICAgICAgICBzdG9wRnJhbWluZygpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuYW1lc3BhY2UgdmlldyB7XHJcbiAgICAgICAgY2xhc3MgRWRnZSB7XHJcbiAgICAgICAgICBnZXRQbGFjZW1hcmsoKTogR2VvT2JqZWN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgTXVsdGlQYXRoIHtcclxuICAgICAgICAgIGdldEVkZ2VQbGFjZW1hcmtzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICAgICAgZ2V0UGF0aFZpZXdzKCk6IFBhdGhbXTtcclxuXHJcbiAgICAgICAgICBnZXRWZXJ0ZXhQbGFjZW1hcmtzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBQYXRoIHtcclxuICAgICAgICAgIGdldEVkZ2VQbGFjZW1hcmtzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICAgICAgZ2V0RWRnZVZpZXdzKCk6IEVkZ2VbXTtcclxuXHJcbiAgICAgICAgICBnZXRWZXJ0ZXhQbGFjZW1hcmtzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICAgICAgZ2V0VmVydGV4Vmlld3MoKTogVmVydGV4W107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBWZXJ0ZXgge1xyXG4gICAgICAgICAgZ2V0UGxhY2VtYXJrKCk6IEdlb09iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgZ2VvT2JqZWN0IHtcclxuICAgICAgY2xhc3MgQmFsbG9vbiBpbXBsZW1lbnRzIElCYWxsb29uTWFuYWdlcjxHZW9PYmplY3Q+IHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihnZW9PYmplY3Q6IEdlb09iamVjdCk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgYXV0b1BhbigpOiBQcm9taXNlPEdlb09iamVjdD47XHJcblxyXG4gICAgICAgIGNsb3NlKGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8R2VvT2JqZWN0PjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXREYXRhKCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGlzT3BlbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBvcGVuKFxyXG4gICAgICAgICAgcG9zaXRpb24/OiBudW1iZXJbXSxcclxuICAgICAgICAgIGRhdGE/OiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCxcclxuICAgICAgICAgIG9wdGlvbnM/OiBvYmplY3QsXHJcbiAgICAgICAgKTogUHJvbWlzZTxHZW9PYmplY3Q+O1xyXG5cclxuICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTxHZW9PYmplY3Q+O1xyXG5cclxuICAgICAgICBzZXRPcHRpb25zKG9wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8R2VvT2JqZWN0PjtcclxuXHJcbiAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxHZW9PYmplY3Q+O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBIaW50IGltcGxlbWVudHMgSUhpbnRNYW5hZ2VyPEdlb09iamVjdD4ge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGdlb09iamVjdDogR2VvT2JqZWN0KTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBjbG9zZShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPEdlb09iamVjdD47XHJcblxyXG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0RGF0YSgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPcHRpb25zKCk6IElPcHRpb25NYW5hZ2VyIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UG9zaXRpb24oKTogbnVtYmVyW10gfCBudWxsO1xyXG5cclxuICAgICAgICBpc09wZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgb3BlbihcclxuICAgICAgICAgIHBvc2l0aW9uPzogbnVtYmVyW10sXHJcbiAgICAgICAgICBkYXRhPzogb2JqZWN0IHwgc3RyaW5nIHwgSFRNTEVsZW1lbnQsXHJcbiAgICAgICAgICBvcHRpb25zPzogb2JqZWN0LFxyXG4gICAgICAgICk6IFByb21pc2U8R2VvT2JqZWN0PjtcclxuXHJcbiAgICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IFByb21pc2U8R2VvT2JqZWN0PjtcclxuXHJcbiAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPEdlb09iamVjdD47XHJcblxyXG4gICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXJbXSk6IFByb21pc2U8R2VvT2JqZWN0PjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgU2VxdWVuY2UgaW1wbGVtZW50cyBJR2VvT2JqZWN0LCBJR2VvT2JqZWN0U2VxdWVuY2Uge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGdlb09iamVjdDogR2VvT2JqZWN0KTtcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICAgIHByb3BlcnRpZXM6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICBlYWNoKGNhbGxiYWNrOiAoZ2VvT2JqZWN0OiBJR2VvT2JqZWN0KSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBJR2VvT2JqZWN0O1xyXG5cclxuICAgICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgZ2V0UGl4ZWxCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGluZGV4T2YoZ2VvT2JqZWN0OiBJR2VvT2JqZWN0KTogbnVtYmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGxheW91dCB7XHJcbiAgICAgIG5hbWVzcGFjZSB0ZW1wbGF0ZUJhc2VkIHtcclxuICAgICAgICBjbGFzcyBCYXNlIGltcGxlbWVudHMgSUxheW91dCB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihkYXRhOiBvYmplY3QpO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0RGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50RWxlbWVudCgpOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgICBnZXRTaGFwZSgpOiBJU2hhcGUgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50RWxlbWVudChwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgYnVpbGQoKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBjbGVhcigpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIG9uU3VibGF5b3V0U2l6ZUNoYW5nZShzdWJsYXlvdXRJbmZvOiBvYmplY3QsIG5vZGVTaXplQnlDb250ZW50OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIHJlYnVpbGQoKTogdm9pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJSW1hZ2VPcHRpb25zIHtcclxuICAgICAgICBpbWFnZUNsaXBSZWN0PzogbnVtYmVyW11bXSB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpbWFnZUhyZWY/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaW1hZ2VPZmZzZXQ/OiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpbWFnZVNpemU/OiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcclxuICAgICAgICBzaGFwZT86IElTaGFwZSB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHR5cGUgSUltYWdlT3B0aW9uc1dpdGhJY29uUHJlZml4ID0gUHJlZml4PElJbWFnZU9wdGlvbnMsICdpY29uJz47XHJcblxyXG4gICAgICBjbGFzcyBJbWFnZSBpbXBsZW1lbnRzIElMYXlvdXQge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKGRhdGE6IHsgb3B0aW9ucz86IElJbWFnZU9wdGlvbnMgfSk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXREYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50RWxlbWVudCgpOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgZ2V0U2hhcGUoKTogSVNoYXBlIHwgbnVsbDtcclxuXHJcbiAgICAgICAgaXNFbXB0eSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHNldFBhcmVudEVsZW1lbnQocGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBJbWFnZVdpdGhDb250ZW50IGV4dGVuZHMgSW1hZ2Uge31cclxuXHJcbiAgICAgIHR5cGUgSUltYWdlV2l0aENvbnRlbnRPcHRpb25zV2l0aEljb25QcmVmaXggPSBQcmVmaXg8XHJcbiAgICAgICAgSUltYWdlT3B0aW9ucyAmIHtcclxuICAgICAgICAgIGNvbnRlbnRMYXlvdXQ/OiBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGNvbnRlbnRPZmZzZXQ/OiBudW1iZXJbXSB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGNvbnRlbnRTaXplPzogbnVtYmVyW10gfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAnaWNvbidcclxuICAgICAgPjtcclxuXHJcbiAgICAgIGNsYXNzIFBpZUNoYXJ0IGV4dGVuZHMgdGVtcGxhdGVCYXNlZC5CYXNlIHt9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgUGllQ2hhcnRPcHRpb25zIHtcclxuICAgICAgICBwaWVDaGFydENhcHRpb25NYXhXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgICAgICBwaWVDaGFydENvcmVGaWxsU3R5bGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgcGllQ2hhcnRDb3JlUmFkaXVzPzogbnVtYmVyIHwgKCgpID0+IG51bWJlcikgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgcGllQ2hhcnRTdHJva2VTdHlsZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgICAgICBwaWVDaGFydFN0cm9rZVdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0eXBlIElQaWVDaGFydE9wdGlvbnNXaXRoSWNvblByZWZpeCA9IFByZWZpeDxQaWVDaGFydE9wdGlvbnMsICdpY29uJz47XHJcblxyXG4gICAgICBjb25zdCBzdG9yYWdlOiB1dGlsLlN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIG1hcCB7XHJcbiAgICAgIG5hbWVzcGFjZSBhY3Rpb24ge1xyXG4gICAgICAgIGNsYXNzIE1hbmFnZXIgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgYnJlYWtUaWNrKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZXhlY3V0ZShhY3Rpb246IElNYXBBY3Rpb24pOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldEN1cnJlbnRTdGF0ZSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgICBzZXRDb3JyZWN0aW9uKHVzZXJGdW5jdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc3RvcCgpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbmFtZXNwYWNlIGJlaGF2aW9yIHtcclxuICAgICAgICBjbGFzcyBNYW5hZ2VyIGltcGxlbWVudHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciwgSVBhcmVudE9uTWFwIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBiZWhhdmlvcnM/OiBzdHJpbmdbXVtdIHwgc3RyaW5nW10sIG9wdGlvbnM/OiBvYmplY3QpO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICAgIGRpc2FibGUoYmVoYXZpb3JzOiBzdHJpbmdbXVtdIHwgc3RyaW5nW10gfCBzdHJpbmcpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIGVuYWJsZShiZWhhdmlvcnM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0KGJlaGF2aW9yTmFtZTogc3RyaW5nKTogSUJlaGF2aW9yO1xyXG5cclxuICAgICAgICAgIGlzRW5hYmxlZChiZWhhdmlvck5hbWU6IHN0cmluZyk6IGJvb2xlYW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBuYW1lc3BhY2UgbGF5ZXIge1xyXG4gICAgICAgIGNsYXNzIE1hbmFnZXIgaW1wbGVtZW50cyBJTGF5ZXIsIElNYXBPYmplY3RDb2xsZWN0aW9uIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgICBtYXA6IE1hcCxcclxuICAgICAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgICAgICB0cmFmZmljSW1hZ2VaSW5kZXg/OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgdHJhZmZpY0luZm9aSW5kZXg/OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgdHJhZmZpY0phbVpJbmRleD86IG51bWJlcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBudWxsIHwgSUNvbnRyb2xQYXJlbnQ7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogSUNvbnRyb2xQYXJlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIGFkZChvYmplY3Q6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZWFjaChjYWxsYmFjazogKGxheWVyOiBJTGF5ZXIpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgICAgICByZW1vdmUob2JqZWN0OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgICAgZ2V0QWxsKCk6IEFycmF5PENvbGxlY3Rpb248TGF5ZXI+PjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5hbWVzcGFjZSBtYXJnaW4ge1xyXG4gICAgICAgIGNsYXNzIEFjY2Vzc29yIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKHNjcmVlbkFyZWE6IG9iamVjdCk7XHJcblxyXG4gICAgICAgICAgZ2V0QXJlYSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgcmVtb3ZlKCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgc2V0QXJlYShzY3JlZW5BcmVhOiBvYmplY3QpOiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgTWFuYWdlciB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCk7XHJcblxyXG4gICAgICAgICAgYWRkQXJlYShzY3JlZW5BcmVhOiBvYmplY3QpOiBBY2Nlc3NvcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0TWFyZ2luKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICAgIGdldE9mZnNldCgpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgICBzZXREZWZhdWx0TWFyZ2luKG1hcmdpbjogbnVtYmVyW11bXSB8IG51bWJlcltdIHwgbnVtYmVyKTogdm9pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5hbWVzcGFjZSBwYW5lIHtcclxuICAgICAgICBjbGFzcyBNYW5hZ2VyIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKTtcclxuXHJcbiAgICAgICAgICBhcHBlbmQoa2V5OiBzdHJpbmcsIHBhbmU6IElQYW5lKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0KGtleTogc3RyaW5nKTogSVBhbmUgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldExvd2VyKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBnZXRVcHBlcigpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgaW5zZXJ0QmVmb3JlKGtleTogc3RyaW5nLCBwYW5lOiBJUGFuZSwgcmVmZXJlbmNlS2V5OiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIHJlbW92ZShwYW5lOiBJUGFuZSk6IHZvaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBCYWxsb29uIGltcGxlbWVudHMgSUJhbGxvb25NYW5hZ2VyPEJhbGxvb24+IC8qICwgSUJhbGxvb25TaGFyaW5nTWFuYWdlciAqLyB7XHJcbiAgICAgICAgY29uc3RydWN0b3IobWFwOiBNYXApO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGF1dG9QYW4oKTogUHJvbWlzZTxCYWxsb29uPjtcclxuXHJcbiAgICAgICAgY2xvc2UoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTxCYWxsb29uPjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXREYXRhKCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGlzT3BlbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBvcGVuKFxyXG4gICAgICAgICAgcG9zaXRpb24/OiBudW1iZXJbXSxcclxuICAgICAgICAgIGRhdGE/OiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCxcclxuICAgICAgICAgIG9wdGlvbnM/OiBvYmplY3QsXHJcbiAgICAgICAgKTogUHJvbWlzZTxCYWxsb29uPjtcclxuXHJcbiAgICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IFByb21pc2U8QmFsbG9vbj47XHJcblxyXG4gICAgICAgIHNldE9wdGlvbnMob3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTxCYWxsb29uPjtcclxuXHJcbiAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxCYWxsb29uPjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgQ29udGFpbmVyIGltcGxlbWVudHMgSURvbUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IocGFyZW50RWxlbWVudDogc3RyaW5nIHwgSFRNTEVsZW1lbnQpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGVudGVyRnVsbHNjcmVlbigpOiB2b2lkO1xyXG5cclxuICAgICAgICBleGl0RnVsbHNjcmVlbigpOiB2b2lkO1xyXG5cclxuICAgICAgICBmaXRUb1ZpZXdwb3J0KHByZXNlcnZlUGl4ZWxQb3NpdGlvbj86IGJvb2xlYW4pOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBnZXRPZmZzZXQoKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGdldFBhcmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGdldFNpemUoKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGlzRnVsbHNjcmVlbigpOiBib29sZWFuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBDb252ZXJ0ZXIge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsVG9QYWdlKGdsb2JhbFBpeGVsUG9pbnQ6IG51bWJlcltdKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIHBhZ2VUb0dsb2JhbChwYWdlUGl4ZWxQb2ludDogbnVtYmVyW10pOiBudW1iZXJbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgQ29weXJpZ2h0cyB7XHJcbiAgICAgICAgY29uc3RydWN0b3IobWFwOiBNYXApO1xyXG5cclxuICAgICAgICBhZGQoXHJcbiAgICAgICAgICBjdXN0b21Db3B5cmlnaHRzOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50PixcclxuICAgICAgICApOiBJQ29weXJpZ2h0c0FjY2Vzc29yO1xyXG5cclxuICAgICAgICBhZGRQcm92aWRlcihwcm92aWRlcjogSUNvcHlyaWdodHNQcm92aWRlcik6IHRoaXM7XHJcblxyXG4gICAgICAgIGdldChwb2ludD86IG51bWJlcltdLCB6b29tPzogbnVtYmVyKTogUHJvbWlzZTxBcnJheTxzdHJpbmcgfCBIVE1MRWxlbWVudD4+O1xyXG5cclxuICAgICAgICBnZXRQcm9tb0xpbmsoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICByZW1vdmVQcm92aWRlcihwcm92aWRlcjogSUNvcHlyaWdodHNQcm92aWRlcik6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIEdlb09iamVjdHMgaW1wbGVtZW50cyBJR2VvT2JqZWN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM/OiBvYmplY3QpO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBhZGQoY2hpbGQ6IElHZW9PYmplY3QgfCBPYmplY3RNYW5hZ2VyIHwgQ2x1c3RlcmVyLCBpbmRleD86IG51bWJlcik6IHRoaXM7XHJcblxyXG4gICAgICAgIGVhY2goY2FsbGJhY2s6IChvYmplY3Q6IElHZW9PYmplY3QpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXQoaW5kZXg6IG51bWJlcik6IElHZW9PYmplY3Q7XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRQaXhlbEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgaW5kZXhPZihvYmplY3Q6IElHZW9PYmplY3QpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHJlbW92ZShjaGlsZDogSUdlb09iamVjdCB8IE9iamVjdE1hbmFnZXIpOiB0aGlzO1xyXG5cclxuICAgICAgICByZW1vdmVBbGwoKTogdGhpcztcclxuXHJcbiAgICAgICAgc2V0KGluZGV4OiBudW1iZXIsIGNoaWxkOiBJR2VvT2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgc3BsaWNlKGluZGV4OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgSGludCBpbXBsZW1lbnRzIElIaW50TWFuYWdlcjxIaW50PiAvKiAsIElIaW50U2hhcmluZ01hbmFnZXIgKi8ge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBjbG9zZShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPEhpbnQ+O1xyXG5cclxuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldERhdGEoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0T3B0aW9ucygpOiBJT3B0aW9uTWFuYWdlciB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBvc2l0aW9uKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgaXNPcGVuKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIG9wZW4oXHJcbiAgICAgICAgICBwb3NpdGlvbj86IG51bWJlcltdLFxyXG4gICAgICAgICAgZGF0YT86IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50LFxyXG4gICAgICAgICAgb3B0aW9ucz86IG9iamVjdCxcclxuICAgICAgICApOiBQcm9taXNlPEhpbnQ+O1xyXG5cclxuICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTxIaW50PjtcclxuXHJcbiAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPEhpbnQ+O1xyXG5cclxuICAgICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyW10pOiBQcm9taXNlPEhpbnQ+O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBab29tUmFuZ2UgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgY29uc3RyYWludHM6IG51bWJlcltdKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXQoY29vcmRzPzogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcltdPjtcclxuXHJcbiAgICAgICAgZ2V0Q3VycmVudCgpOiBudW1iZXJbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5hbWVzcGFjZSBtdWx0aVJvdXRlciB7XHJcbiAgICAgIG5hbWVzcGFjZSBkcml2aW5nIHtcclxuICAgICAgICBjbGFzcyBQYXRoIGltcGxlbWVudHMgSUdlb09iamVjdCB7XHJcbiAgICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBtb2RlbDogUGF0aE1vZGVsO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICAgIGdldFNlZ21lbnRzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBQYXRoTW9kZWwgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgcm91dGU6IFJvdXRlTW9kZWw7XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldFNlZ21lbnRzKCk6IFNlZ21lbnRNb2RlbFtdO1xyXG5cclxuICAgICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICAgIHVwZGF0ZShwYXRoSnNvbjogb2JqZWN0KTogdm9pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFJvdXRlIGltcGxlbWVudHMgSUdlb09iamVjdCB7XHJcbiAgICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgYmFsbG9vbjogZ2VvT2JqZWN0LkJhbGxvb247XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgICBnZXRQYXRocygpOiBHZW9PYmplY3RDb2xsZWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgUm91dGVNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG11bHRpUm91dGU6IE11bHRpUm91dGVNb2RlbDtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldFBhdGhzKCk6IFBhdGhNb2RlbFtdO1xyXG5cclxuICAgICAgICAgIHVwZGF0ZShyb3V0ZUpzb246IG9iamVjdCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBTZWdtZW50IGltcGxlbWVudHMgSUdlb09iamVjdCB7XHJcbiAgICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFNlZ21lbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeS5iYXNlLkxpbmVTdHJpbmc7XHJcblxyXG4gICAgICAgICAgcGF0aDogUGF0aE1vZGVsO1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICBnZXRWaWFQb2ludHMoKTogVmlhUG9pbnRNb2RlbFtdO1xyXG5cclxuICAgICAgICAgIHVwZGF0ZShzZWdtZW50SnNvbjogb2JqZWN0KTogdm9pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG5hbWVzcGFjZSBtYXNzdHJhbnNpdCB7XHJcbiAgICAgICAgY2xhc3MgUGF0aCBpbXBsZW1lbnRzIElHZW9PYmplY3Qge1xyXG4gICAgICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG1vZGVsOiBQYXRoTW9kZWw7XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgICBnZXRTZWdtZW50TWFya2VycygpOiBHZW9PYmplY3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICAgIGdldFNlZ21lbnRzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBQYXRoTW9kZWwgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgcm91dGU6IFJvdXRlTW9kZWw7XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldFNlZ21lbnRzKCk6IEFycmF5PFRyYW5zZmVyU2VnbWVudE1vZGVsIHwgVHJhbnNwb3J0U2VnbWVudE1vZGVsIHwgV2Fsa1NlZ21lbnRNb2RlbD47XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgdXBkYXRlKHBhdGhKc29uOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgUm91dGUgaW1wbGVtZW50cyBJR2VvT2JqZWN0IHtcclxuICAgICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBtb2RlbDogUm91dGVNb2RlbDtcclxuXHJcbiAgICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBiYWxsb29uOiBnZW9PYmplY3QuQmFsbG9vbjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICAgIGdldFBhdGhzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBSb3V0ZU1vZGVsIGltcGxlbWVudHMgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgbXVsdGlSb3V0ZTogTXVsdGlSb3V0ZU1vZGVsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0UGF0aHMoKTogUGF0aE1vZGVsW107XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgdXBkYXRlKHJvdXRlSnNvbjogb2JqZWN0KTogdm9pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFN0b3BNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeS5iYXNlLlBvaW50O1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBzZWdtZW50OiBUcmFuc3BvcnRTZWdtZW50TW9kZWw7XHJcblxyXG4gICAgICAgICAgdXBkYXRlKHN0b3BKc29uOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgVHJhbnNmZXJTZWdtZW50IGltcGxlbWVudHMgSUdlb09iamVjdCB7XHJcbiAgICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgbW9kZWw6IFRyYW5zZmVyU2VnbWVudE1vZGVsO1xyXG5cclxuICAgICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRQYXJlbnQoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgICAgIGdldE1hcCgpOiBNYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBUcmFuc2ZlclNlZ21lbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeS5iYXNlLkxpbmVTdHJpbmc7XHJcblxyXG4gICAgICAgICAgcGF0aDogUGF0aE1vZGVsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KHNlZ21lbnRKc29uOiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgVHJhbnNwb3J0U2VnbWVudCBpbXBsZW1lbnRzIElHZW9PYmplY3Qge1xyXG4gICAgICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIG1vZGVsOiBUcmFuc3BvcnRTZWdtZW50TW9kZWw7XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIFRyYW5zcG9ydFNlZ21lbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeS5iYXNlLkxpbmVTdHJpbmc7XHJcblxyXG4gICAgICAgICAgcGF0aDogUGF0aE1vZGVsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0U3RvcHMoKTogU3RvcE1vZGVsW107XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgdXBkYXRlKHNlZ21lbnRKc29uOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgV2Fsa1NlZ21lbnQgaW1wbGVtZW50cyBJR2VvT2JqZWN0IHtcclxuICAgICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBtb2RlbDogV2Fsa1NlZ21lbnRNb2RlbDtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgV2Fsa1NlZ21lbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeS5iYXNlLkxpbmVTdHJpbmc7XHJcblxyXG4gICAgICAgICAgcGF0aDogUGF0aE1vZGVsO1xyXG5cclxuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBFZGl0b3JBZGRvbiBpbXBsZW1lbnRzIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIHN0YXRlOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGlzQWN0aXZlKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIHN0YXJ0KHN0YXRlOiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICBzdG9wKCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE11bHRpUm91dGUgaW1wbGVtZW50cyBJR2VvT2JqZWN0IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTXVsdGlSb3V0ZU1vZGVsIHwgSU11bHRpUm91dGVNb2RlbEpzb24sIG9wdGlvbnM/OiBJTXVsdGlSb3V0ZU9wdGlvbnMpO1xyXG5cclxuICAgICAgICBlZGl0b3I6IEVkaXRvckFkZG9uO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG5cclxuICAgICAgICBtb2RlbDogTXVsdGlSb3V0ZU1vZGVsO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgcHJvcGVydGllczogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXRBY3RpdmVSb3V0ZSgpOiBtdWx0aVJvdXRlci5kcml2aW5nLlJvdXRlIHwgbXVsdGlSb3V0ZXIubWFzc3RyYW5zaXQuUm91dGUgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQaXhlbEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0Um91dGVzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICAgIGdldFZpYVBvaW50cygpOiBHZW9PYmplY3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBnZXRXYXlQb2ludHMoKTogR2VvT2JqZWN0Q29sbGVjdGlvbjtcclxuXHJcbiAgICAgICAgc2V0QWN0aXZlUm91dGUocm91dGU6IGRyaXZpbmcuUm91dGUgfCBtYXNzdHJhbnNpdC5Sb3V0ZSB8IG51bGwpOiB2b2lkO1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBvYmplY3QpOiB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpbnRlcmZhY2UgSU11bHRpUm91dGVPcHRpb25zIHtcclxuICAgICAgICBhY3RpdmVSb3V0ZUF1dG9TZWxlY3Rpb24/OiBib29sZWFuO1xyXG4gICAgICAgIGJvdW5kc0F1dG9BcHBseT86IGJvb2xlYW47XHJcbiAgICAgICAgZHJhZ1VwZGF0ZUludGVydmFsPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gICAgICAgIHByZXZlbnREcmFnVXBkYXRlPzogYm9vbGVhbjtcclxuICAgICAgICB1c2VNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICAgIHpvb21NYXJnaW4/OiBudW1iZXJbXVtdIHwgbnVtYmVyW10gfCBudW1iZXI7XHJcblxyXG4gICAgICAgIFtpbmRleDogc3RyaW5nXTogYW55O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBNdWx0aVJvdXRlTW9kZWwgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihyZWZlcmVuY2VQb2ludHM6IElNdWx0aVJvdXRlUmVmZXJlbmNlUG9pbnRbXSwgcGFyYW1zPzogSU11bHRpUm91dGVQYXJhbXMpO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIHByb3BlcnRpZXM6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXRBbGxQb2ludHMoKTogQXJyYXk8V2F5UG9pbnRNb2RlbCB8IFZpYVBvaW50TW9kZWw+O1xyXG5cclxuICAgICAgICBnZXRKc29uKCk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0UGFyYW1zKCk6IElNdWx0aVJvdXRlUGFyYW1zO1xyXG5cclxuICAgICAgICBnZXRQb2ludHMoKTogQXJyYXk8V2F5UG9pbnRNb2RlbCB8IFZpYVBvaW50TW9kZWw+O1xyXG5cclxuICAgICAgICBnZXRSZWZlcmVuY2VQb2ludEluZGV4ZXMoKTogb2JqZWN0O1xyXG5cclxuICAgICAgICBnZXRSZWZlcmVuY2VQb2ludHMoKTogSU11bHRpUm91dGVSZWZlcmVuY2VQb2ludFtdO1xyXG5cclxuICAgICAgICBnZXRSb3V0ZXMoKTogZHJpdmluZy5Sb3V0ZU1vZGVsW10gfCBtYXNzdHJhbnNpdC5Sb3V0ZU1vZGVsW107XHJcblxyXG4gICAgICAgIGdldFZpYVBvaW50cygpOiBWaWFQb2ludE1vZGVsW107XHJcblxyXG4gICAgICAgIGdldFdheVBvaW50cygpOiBXYXlQb2ludE1vZGVsW107XHJcblxyXG4gICAgICAgIHNldFBhcmFtcyhwYXJhbXM6IElNdWx0aVJvdXRlUGFyYW1zLCBleHRlbmQ/OiBib29sZWFuLCBjbGVhclJlcXVlc3RzPzogYm9vbGVhbik6IHZvaWQ7XHJcblxyXG4gICAgICAgIHNldFJlZmVyZW5jZVBvaW50cyhcclxuICAgICAgICAgIHJlZmVyZW5jZVBvaW50czogSU11bHRpUm91dGVSZWZlcmVuY2VQb2ludFtdLFxyXG4gICAgICAgICAgdmlhSW5kZXhlcz86IG51bWJlcltdLFxyXG4gICAgICAgICAgY2xlYXJSZXF1ZXN0cz86IGJvb2xlYW4sXHJcbiAgICAgICAgKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgVmlhUG9pbnQgaW1wbGVtZW50cyBJR2VvT2JqZWN0IHtcclxuICAgICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgVmlhUG9pbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LmJhc2UuUG9pbnQ7XHJcblxyXG4gICAgICAgIG11bHRpUm91dGU6IE11bHRpUm91dGVNb2RlbDtcclxuXHJcbiAgICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldFJlZmVyZW5jZVBvaW50KCk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0UmVmZXJlbmNlUG9pbnRJbmRleCgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHNldFJlZmVyZW5jZVBvaW50KHJlZmVyZW5jZVBvaW50OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICB1cGRhdGUodmlhUG9pbnRKc29uOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBXYXlQb2ludCBpbXBsZW1lbnRzIElHZW9PYmplY3Qge1xyXG4gICAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG5cclxuICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIG1vZGVsOiBXYXlQb2ludE1vZGVsO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgV2F5UG9pbnRNb2RlbCBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LmJhc2UuUG9pbnQ7XHJcblxyXG4gICAgICAgIG11bHRpUm91dGU6IE11bHRpUm91dGVNb2RlbDtcclxuXHJcbiAgICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldFJlZmVyZW5jZVBvaW50KCk6IG9iamVjdDtcclxuXHJcbiAgICAgICAgZ2V0UmVmZXJlbmNlUG9pbnRJbmRleCgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHNldFJlZmVyZW5jZVBvaW50KHJlZmVyZW5jZVBvaW50OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICB1cGRhdGUod2F5UG9pbnRKc29uOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIG9wdGlvbiB7XHJcbiAgICAgIGNsYXNzIE1hbmFnZXIgaW1wbGVtZW50cyBJT3B0aW9uTWFuYWdlciB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4sIHBhcmVudD86IElPcHRpb25NYW5hZ2VyLCBuYW1lPzogc3RyaW5nKTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBnZXQoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueTtcclxuXHJcbiAgICAgICAgZ2V0QWxsKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcblxyXG4gICAgICAgIGdldE5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBnZXROYXRpdmUoa2V5OiBzdHJpbmcpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgIHJlc29sdmUoa2V5OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgIHNldChrZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcsIHZhbHVlPzogYW55KTogdGhpcztcclxuXHJcbiAgICAgICAgdW5zZXQoa2V5czogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nKTogdGhpcztcclxuXHJcbiAgICAgICAgdW5zZXRBbGwoKTogdGhpcztcclxuXHJcbiAgICAgICAgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXRQYXJlbnQoKTogbnVsbCB8IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgICBzZXRQYXJlbnQocGFyZW50OiBJT3B0aW9uTWFuYWdlcik6IHRoaXM7XHJcblxyXG4gICAgICAgIGZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgICBpc0Zyb3plbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICB1bmZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgICBhZGQoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIGdyb3VwKCk6IElFdmVudEdyb3VwO1xyXG5cclxuICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICAgIGZpcmUodHlwZTogc3RyaW5nLCBldmVudE9iamVjdDogb2JqZWN0IHwgSUV2ZW50KTogdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcHJlc2V0U3RvcmFnZTogdXRpbC5TdG9yYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hbWVzcGFjZSBwYW5lIHtcclxuICAgICAgY2xhc3MgRXZlbnRzUGFuZSBpbXBsZW1lbnRzIElFdmVudFBhbmUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgbWFwOiBNYXAsXHJcbiAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgICAgICAgICBjc3M/OiBDU1NTdHlsZURlY2xhcmF0aW9uO1xyXG4gICAgICAgICAgICBwYXRjaD86IHtcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBjaGVja0NvbnRleHRNZW51PzogYm9vbGVhbjtcclxuICAgICAgICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0RWxlbWVudCgpOiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmZsb3coKTogJ3Zpc2libGUnIHwgJ2hpZGRlbic7XHJcblxyXG4gICAgICAgIGdldFpJbmRleCgpOiBudW1iZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE1vdmFibGVQYW5lIGltcGxlbWVudHMgSUNvbnRhaW5lclBhbmUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgbWFwOiBNYXAsXHJcbiAgICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgICAgY3NzPzogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcclxuICAgICAgICAgICAgbWFyZ2luPzogbnVtYmVyO1xyXG4gICAgICAgICAgICBvdmVyZmxvdz86ICdoaWRkZW4nIHwgJ3Zpc2libGUnO1xyXG4gICAgICAgICAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBmcm9tQ2xpZW50UGl4ZWxzKGNsaWVudFBpeGVsUG9pbnQ6IG51bWJlcltdKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGdldEVsZW1lbnQoKTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgIGdldE92ZXJmbG93KCk6ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xyXG5cclxuICAgICAgICBnZXRaSW5kZXgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRab29tKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgdG9DbGllbnRQaXhlbHMoZ2xvYmFsUGl4ZWxQb2ludDogbnVtYmVyW10pOiBudW1iZXJbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgU3RhdGljUGFuZSBpbXBsZW1lbnRzIElDb250YWluZXJQYW5lIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIG1hcDogTWFwLFxyXG4gICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGNzcz86IENTU1N0eWxlRGVjbGFyYXRpb247XHJcbiAgICAgICAgICAgIG1hcmdpbj86IG51bWJlcjtcclxuICAgICAgICAgICAgb3ZlcmZsb3c/OiAndmlzaWJsZScgfCAnaGlkZGVuJztcclxuICAgICAgICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgZnJvbUNsaWVudFBpeGVscyhjbGllbnRQaXhlbFBvaW50OiBudW1iZXJbXSk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgICBnZXRPdmVyZmxvdygpOiAndmlzaWJsZScgfCAnaGlkZGVuJztcclxuXHJcbiAgICAgICAgZ2V0WkluZGV4KCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgZ2V0Wm9vbSgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIHRvQ2xpZW50UGl4ZWxzKGdsb2JhbFBpeGVsUG9pbnQ6IG51bWJlcltdKTogbnVtYmVyW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgcGFub3JhbWEge1xyXG4gICAgICB0eXBlIExheWVyID0gJ3lhbmRleCNwYW5vcmFtYScgfCAneWFuZGV4I2FpclBhbm9yYW1hJztcclxuXHJcbiAgICAgIGNsYXNzIEJhc2UgaW1wbGVtZW50cyBJUGFub3JhbWEge1xyXG4gICAgICAgIHN0YXRpYyBjcmVhdGVQYW5vcmFtYShwYXJhbXM6IHtcclxuICAgICAgICAgIGFuZ3VsYXJCQm94OiBudW1iZXJbXTtcclxuICAgICAgICAgIGNvb3JkU3lzdGVtPzogSUNvb3JkU3lzdGVtO1xyXG4gICAgICAgICAgbmFtZT86IHN0cmluZztcclxuICAgICAgICAgIHBvc2l0aW9uOiBudW1iZXJbXTtcclxuICAgICAgICAgIHRpbGVzTGV2ZWxzOiBJUGFub3JhbWFUaWxlTGV2ZWxbXTtcclxuICAgICAgICAgIHRpbGVTaXplOiBudW1iZXJbXTtcclxuICAgICAgICB9KTogSVBhbm9yYW1hO1xyXG5cclxuICAgICAgICBzdGF0aWMgZ2V0TWFya2VyUG9zaXRpb25Gcm9tRGlyZWN0aW9uKFxyXG4gICAgICAgICAgcGFub3JhbWE6IElQYW5vcmFtYSxcclxuICAgICAgICAgIGRpcmVjdGlvbjogbnVtYmVyW10sXHJcbiAgICAgICAgICBkaXN0YW5jZTogbnVtYmVyLFxyXG4gICAgICAgICk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICBnZXRBbmd1bGFyQkJveCgpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgZ2V0Q29ubmVjdGlvbkFycm93cygpOiBJUGFub3JhbWFDb25uZWN0aW9uQXJyb3dbXTtcclxuXHJcbiAgICAgICAgZ2V0Q29ubmVjdGlvbk1hcmtlcnMoKTogSVBhbm9yYW1hQ29ubmVjdGlvbk1hcmtlcltdO1xyXG5cclxuICAgICAgICBnZXRDb25uZWN0aW9ucygpOiBJUGFub3JhbWFDb25uZWN0aW9uTWFya2VyW107XHJcblxyXG4gICAgICAgIGdldENvb3JkU3lzdGVtKCk6IElDb29yZFN5c3RlbTtcclxuXHJcbiAgICAgICAgZ2V0RGVmYXVsdERpcmVjdGlvbigpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgZ2V0RGVmYXVsdFNwYW4oKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGdldEdyYXBoKCk6IElQYW5vcmFtYUdyYXBoIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0TWFya2VycygpOiBJUGFub3JhbWFNYXJrZXJbXTtcclxuXHJcbiAgICAgICAgZ2V0TmFtZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGdldFBvc2l0aW9uKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICBnZXRUaG9yb3VnaGZhcmVzKCk6IElQYW5vcmFtYUNvbm5lY3Rpb25BcnJvd1tdO1xyXG5cclxuICAgICAgICBnZXRUaWxlTGV2ZWxzKCk6IElQYW5vcmFtYVRpbGVMZXZlbFtdO1xyXG5cclxuICAgICAgICBnZXRUaWxlU2l6ZSgpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgdmFsaWRhdGUoKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gY3JlYXRlUGxheWVyKFxyXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgc3RyaW5nLFxyXG4gICAgICAgIHBvaW50OiBudW1iZXJbXSxcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyW10gfCBzdHJpbmc7XHJcbiAgICAgICAgICBsYXllcj86IExheWVyO1xyXG4gICAgICAgICAgc3Bhbj86IG51bWJlcltdIHwgc3RyaW5nO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk6IFByb21pc2U8UGxheWVyPjtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBmdW5jdGlvbiBsb2NhdGUocG9pbnQ6IG51bWJlcltdLCBvcHRpb25zPzogeyBsYXllcj86IExheWVyIH0pOiBQcm9taXNlPElQYW5vcmFtYVtdPjtcclxuXHJcbiAgICAgIGNsYXNzIE1hbmFnZXIgaW1wbGVtZW50cyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGNsb3NlUGxheWVyKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGRpc2FibGVMb29rdXAoKTogdm9pZDtcclxuXHJcbiAgICAgICAgZW5hYmxlTG9va3VwKCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldFBsYXllcigpOiBQbGF5ZXI7XHJcblxyXG4gICAgICAgIGlzTG9va3VwRW5hYmxlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgICBvcGVuUGxheWVyKHBhbm9yYW1hOiBJUGFub3JhbWFbXSB8IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGludGVyZmFjZSBJUGxheWVyT3B0aW9ucyB7XHJcbiAgICAgICAgYXV0b0ZpdFRvVmlld3BvcnQ/OiAnbm9uZScgfCAnaWZOdWxsJyB8ICdhbHdheXMnO1xyXG4gICAgICAgIGNvbnRyb2xzPzogc3RyaW5nW107XHJcbiAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyW10gfCBzdHJpbmc7XHJcbiAgICAgICAgaG90a2V5c0VuYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgICAgIHNjcm9sbFpvb21CZWhhdmlvcj86IGJvb2xlYW47XHJcbiAgICAgICAgc3Bhbj86IG51bWJlcltdIHwgc3RyaW5nO1xyXG4gICAgICAgIHN1cHByZXNzTWFwT3BlbkJsb2NrPzogYm9vbGVhbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgUGxheWVyIGltcGxlbWVudHMgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBzdHJpbmcsIHBhbm9yYW1hOiBJUGFub3JhbWEsIG9wdGlvbnM/OiBJUGxheWVyT3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBmaXRUb1ZpZXdwb3J0KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldERpcmVjdGlvbigpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgZ2V0UGFub3JhbWEoKTogSVBhbm9yYW1hO1xyXG5cclxuICAgICAgICBnZXRTcGFuKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgICBsb29rQXQocG9pbnQ6IG51bWJlcltdKTogdGhpcztcclxuXHJcbiAgICAgICAgbW92ZVRvKFxyXG4gICAgICAgICAgcG9pbnQ6IG51bWJlcltdLFxyXG4gICAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgICAgZGlyZWN0aW9uPzogbnVtYmVyW10gfCBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxheWVyPzogTGF5ZXI7XHJcbiAgICAgICAgICAgIHNwYW4/OiBudW1iZXJbXSB8IHN0cmluZztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICAgICAgc2V0RGlyZWN0aW9uKGRpcmVjdGlvbjogbnVtYmVyW10gfCBzdHJpbmcpOiB0aGlzO1xyXG5cclxuICAgICAgICBzZXRQYW5vcmFtYShwYW5vcmFtYTogSVBhbm9yYW1hKTogdGhpcztcclxuXHJcbiAgICAgICAgc2V0U3BhbihzcGFuOiBudW1iZXJbXSB8IHN0cmluZyk6IHRoaXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2Ugcm91dGVyIHtcclxuICAgICAgY2xhc3MgRWRpdG9yIGltcGxlbWVudHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhcnQob3B0aW9ucz86IHtcclxuICAgICAgICAgIGFkZFZpYVBvaW50cz86IGJvb2xlYW47XHJcbiAgICAgICAgICBhZGRXYXlQb2ludHM/OiBib29sZWFuO1xyXG4gICAgICAgICAgZWRpdFZpYVBvaW50cz86IGJvb2xlYW47XHJcbiAgICAgICAgICBlZGl0V2F5UG9pbnRzPzogYm9vbGVhbjtcclxuICAgICAgICAgIHJlbW92ZVZpYVBvaW50cz86IGJvb2xlYW47XHJcbiAgICAgICAgICByZW1vdmVXYXlQb2ludHM/OiBib29sZWFuO1xyXG4gICAgICAgIH0pOiB2b2lkO1xyXG5cclxuICAgICAgICBzdG9wKCk6IHZvaWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFic3RyYWN0IGNsYXNzIFJvdXRlIGltcGxlbWVudHMgSUdlb09iamVjdCB7XHJcbiAgICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICAgIHByb3BlcnRpZXM6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgc3RhdGU6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZWRpdG9yOiBFZGl0b3I7XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFBhcmVudCgpOiBudWxsIHwgSUNvbnRyb2xQYXJlbnQ7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgZ2V0SHVtYW5KYW1zVGltZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGdldEh1bWFuTGVuZ3RoKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgZ2V0SHVtYW5UaW1lKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgZ2V0SmFtc1RpbWUoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRQYXRocygpOiBHZW9PYmplY3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBnZXRUaW1lKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgZ2V0VmlhUG9pbnRzKCk6IEdlb09iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICAgIGdldFdheVBvaW50cygpOiBHZW9PYmplY3RDb2xsZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIHNoYXBlIHtcclxuICAgICAgY2xhc3MgQ2lyY2xlIGltcGxlbWVudHMgSVNoYXBlIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIHBpeGVsR2VvbWV0cnk6IElQaXhlbENpcmNsZUdlb21ldHJ5LFxyXG4gICAgICAgICAgcGFyYW1zPzoge1xyXG4gICAgICAgICAgICBmaWxsPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgb3V0bGluZT86IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBlcXVhbHMoc2hhcGU6IElTaGFwZSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0R2VvbWV0cnkoKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElTaGFwZTtcclxuXHJcbiAgICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElTaGFwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTGluZVN0cmluZyBpbXBsZW1lbnRzIElTaGFwZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgICBwaXhlbEdlb21ldHJ5OiBJUGl4ZWxMaW5lU3RyaW5nR2VvbWV0cnksXHJcbiAgICAgICAgICBwYXJhbXM/OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBlcXVhbHMoc2hhcGU6IElTaGFwZSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0R2VvbWV0cnkoKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElTaGFwZTtcclxuXHJcbiAgICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElTaGFwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTXVsdGlQb2x5Z29uIGltcGxlbWVudHMgSVNoYXBlIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAgIHBpeGVsR2VvbWV0cnk6IElQaXhlbE11bHRpUG9seWdvbkdlb21ldHJ5LFxyXG4gICAgICAgICAgcGFyYW1zPzoge1xyXG4gICAgICAgICAgICBmaWxsPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgb3V0bGluZT86IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBlcXVhbHMoc2hhcGU6IElTaGFwZSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0R2VvbWV0cnkoKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElTaGFwZTtcclxuXHJcbiAgICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElTaGFwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgUG9seWdvbiBpbXBsZW1lbnRzIElTaGFwZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgICBwaXhlbEdlb21ldHJ5OiBJUGl4ZWxQb2x5Z29uR2VvbWV0cnksXHJcbiAgICAgICAgICBwYXJhbXM/OiB7XHJcbiAgICAgICAgICAgIGZpbGw/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBvdXRsaW5lPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGVxdWFscyhzaGFwZTogSVNoYXBlKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRHZW9tZXRyeSgpOiBJUGl4ZWxHZW9tZXRyeTtcclxuXHJcbiAgICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIHNjYWxlKGZhY3RvcjogbnVtYmVyKTogSVNoYXBlO1xyXG5cclxuICAgICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVNoYXBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBSZWN0YW5nbGUgaW1wbGVtZW50cyBJU2hhcGUge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgZ2VvbWV0cnk6IElQaXhlbFJlY3RhbmdsZUdlb21ldHJ5LFxyXG4gICAgICAgICAgcGFyYW1zPzoge1xyXG4gICAgICAgICAgICBmaWxsPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgb3V0bGluZT86IGJvb2xlYW47XHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgICBlcXVhbHMoc2hhcGU6IElTaGFwZSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0R2VvbWV0cnkoKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICAgIGdldFR5cGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBzY2FsZShmYWN0b3I6IG51bWJlcik6IElTaGFwZTtcclxuXHJcbiAgICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElTaGFwZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBNZXRhIHtcclxuICAgICAgY29vcmRpbmF0ZXNPcmRlcjogJ2xhdGxvbmcnIHwgJ2xvbmdsYXQnO1xyXG4gICAgICBjb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gICAgICBsYW5ndWFnZUNvZGU6IHN0cmluZztcclxuICAgICAgbW9kZTogJ3JlbGVhc2UnIHwgJ2RlYnVnJztcclxuICAgICAgbnM6IHR5cGVvZiB5bWFwcztcclxuICAgICAgdmVyc2lvbjogc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1ldGE6IE1ldGE7XHJcblxyXG4gICAgY2xhc3MgQmFsbG9vbiBleHRlbmRzIFBvcHVwPEJhbGxvb24+IGltcGxlbWVudHMgSUJhbG9vbjxCYWxsb29uPiwgSUJhbGxvb25NYW5hZ2VyPEJhbGxvb24+IHtcclxuICAgICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM/OiBJQmFsbG9vbk9wdGlvbnMpO1xyXG5cclxuICAgICAgZ2V0RGF0YSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICBjbG9zZShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPEJhbGxvb24+O1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IEJhbGxvb24gfCBudWxsO1xyXG5cclxuICAgICAgc2V0UGFyZW50KHBhcmVudDogQmFsbG9vbik6IHRoaXM7XHJcblxyXG4gICAgICBhdXRvUGFuKCk6IFByb21pc2U8QmFsbG9vbj47XHJcblxyXG4gICAgICBmcmVlemUoKTogSUZyZWV6YWJsZTtcclxuXHJcbiAgICAgIGlzRnJvemVuKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICB1bmZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgYWRkKFxyXG4gICAgICAgIHR5cGVzOiBzdHJpbmdbXVtdIHwgc3RyaW5nW10gfCBzdHJpbmcsXHJcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXIsXHJcbiAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICBncm91cCgpOiBJRXZlbnRHcm91cDtcclxuXHJcbiAgICAgIHJlbW92ZShcclxuICAgICAgICB0eXBlczogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nLFxyXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IG9iamVjdCB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgZmlyZSh0eXBlOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBvYmplY3QgfCBJRXZlbnQpOiB0aGlzO1xyXG5cclxuICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgZ2V0T3B0aW9ucygpOiBJT3B0aW9uTWFuYWdlciB8IG51bGw7XHJcblxyXG4gICAgICBzZXRPcHRpb25zKG9wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8QmFsbG9vbj47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElCYWxsb29uT3B0aW9ucyB7XHJcbiAgICAgIGF1dG9QYW4/OiBib29sZWFuO1xyXG4gICAgICBhdXRvUGFuQ2hlY2tab29tUmFuZ2U/OiBib29sZWFuO1xyXG4gICAgICBhdXRvUGFuRHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICAgIGF1dG9QYW5NYXJnaW4/OiBudW1iZXIgfCBudW1iZXJbXSB8IHVuZGVmaW5lZDtcclxuICAgICAgYXV0b1BhblVzZU1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgIGNsb3NlQnV0dG9uPzogYm9vbGVhbjtcclxuICAgICAgY2xvc2VUaW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICBjb250ZW50TGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgIGludGVyYWN0aXZpdHlNb2RlbD86IEludGVyYWN0aXZpdHlNb2RlbEtleSB8IHVuZGVmaW5lZDtcclxuICAgICAgbGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgIG1heEhlaWdodD86IG51bWJlcjtcclxuICAgICAgbWF4V2lkdGg/OiBudW1iZXI7XHJcbiAgICAgIG1pbkhlaWdodD86IG51bWJlcjtcclxuICAgICAgbWluV2lkdGg/OiBudW1iZXI7XHJcbiAgICAgIG9mZnNldD86IG51bWJlcltdO1xyXG4gICAgICBvcGVuVGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgICAgcGFuZT86IHN0cmluZztcclxuICAgICAgcGFuZWxDb250ZW50TGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgIHBhbmVsTWF4SGVpZ2h0UmF0aW8/OiBudW1iZXI7XHJcbiAgICAgIHBhbmVsTWF4TWFwQXJlYT86IG51bWJlcjtcclxuICAgICAgc2hhZG93PzogYm9vbGVhbjtcclxuICAgICAgc2hhZG93TGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBzdHJpbmc7XHJcbiAgICAgIHNoYWRvd09mZnNldD86IG51bWJlcltdO1xyXG4gICAgICB6SW5kZXg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZSBJQmFsbG9vbk9wdGlvbnNXaXRoQmFsbG9vblByZWZpeCA9IFByZWZpeDxJQmFsbG9vbk9wdGlvbnMsICdiYWxsb29uJz47XHJcblxyXG4gICAgY2xhc3MgQ2lyY2xlIGltcGxlbWVudHMgR2VvT2JqZWN0PElDaXJjbGVHZW9tZXRyeT4ge1xyXG4gICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBnZW9tZXRyeTogSUNpcmNsZUdlb21ldHJ5W11bXVtdW10gfCBudW1iZXJbXVtdIHwgb2JqZWN0LFxyXG4gICAgICAgIHByb3BlcnRpZXM/OiBvYmplY3QgfCBJRGF0YU1hbmFnZXIsXHJcbiAgICAgICAgb3B0aW9ucz86IElDaXJjbGVPcHRpb25zLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgYmFsbG9vbjogZ2VvT2JqZWN0LkJhbGxvb247XHJcblxyXG4gICAgICBlZGl0b3I6IElHZW9tZXRyeUVkaXRvcjtcclxuXHJcbiAgICAgIGhpbnQ6IGdlb09iamVjdC5IaW50O1xyXG5cclxuICAgICAgZXZlbnRzOiBldmVudC5NYW5hZ2VyO1xyXG5cclxuICAgICAgb3B0aW9uczogb3B0aW9uLk1hbmFnZXI7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICBzdGF0ZTogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgZ2VvbWV0cnk6IElDaXJjbGVHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICBpbmRpY2VzOiBBcnJheUJ1ZmZlcjtcclxuXHJcbiAgICAgIHZlcnRpY2VzOiBBcnJheUJ1ZmZlcjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgIGdldE1hcCgpOiBNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElDaXJjbGVPcHRpb25zIHtcclxuICAgICAgY2lyY2xlT3ZlcmxheT86XHJcbiAgICAgICAgfCBzdHJpbmdcclxuICAgICAgICB8ICgoZ2VvbWV0cnk6IElQaXhlbENpcmNsZUdlb21ldHJ5LCBkYXRhOiBvYmplY3QsIG9wdGlvbnM6IG9iamVjdCkgPT4gUHJvbWlzZTxJT3ZlcmxheT4pO1xyXG4gICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRyYWdnYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGZpbGw/OiBib29sZWFuO1xyXG4gICAgICBmaWxsQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxJbWFnZUhyZWY/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxNZXRob2Q/OiAnc3RyZXRjaCcgfCAndGlsZSc7XHJcbiAgICAgIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBoYXNCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgaGFzSGludD86IGJvb2xlYW47XHJcbiAgICAgIGhpZGVJY29uT25CYWxsb29uT3Blbj86IGJvb2xlYW47XHJcbiAgICAgIGludGVyYWN0aXZlWkluZGV4PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5O1xyXG4gICAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBvcGVuQmFsbG9vbk9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIG91dGxpbmU/OiBib29sZWFuO1xyXG4gICAgICBwYW5lPzogc3RyaW5nO1xyXG4gICAgICBzdHJva2VDb2xvcj86IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZztcclxuICAgICAgc3Ryb2tlT3BhY2l0eT86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgc3Ryb2tlU3R5bGU/OiBzdHJpbmdbXVtdW10gfCBvYmplY3RbXVtdIHwgc3RyaW5nW10gfCBvYmplY3RbXSB8IHN0cmluZyB8IG9iamVjdDtcclxuICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJbXVtdIHwgbnVtYmVyW10gfCBudW1iZXI7XHJcbiAgICAgIHN5bmNPdmVybGF5SW5pdD86IGJvb2xlYW47XHJcbiAgICAgIHVzZU1hcE1hcmdpbkluRHJhZ2dpbmc/OiBib29sZWFuO1xyXG4gICAgICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhBY3RpdmU/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleERyYWc/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleEhvdmVyPzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIENsdXN0ZXJlciBpbXBsZW1lbnRzIElDaGlsZE9uTWFwLCBJQ3VzdG9taXphYmxlLCBJRXZlbnRFbWl0dGVyLCBJUGFyZW50T25NYXAge1xyXG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogSUNsdXN0ZXJlck9wdGlvbnMpO1xyXG5cclxuICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgb3B0aW9uczogb3B0aW9uLk1hbmFnZXI7XHJcblxyXG4gICAgICBiYWxsb29uOiBjbHVzdGVyZXIuQmFsbG9vbjtcclxuXHJcbiAgICAgIGhpbnQ6IGNsdXN0ZXJlci5IaW50O1xyXG5cclxuICAgICAgYWRkKG9iamVjdHM6IElHZW9PYmplY3QgfCBJR2VvT2JqZWN0W10pOiB0aGlzO1xyXG5cclxuICAgICAgY3JlYXRlQ2x1c3RlcihjZW50ZXI6IG51bWJlcltdLCBnZW9PYmplY3RzOiBJR2VvT2JqZWN0W10pOiBJR2VvT2JqZWN0O1xyXG5cclxuICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0Q2x1c3RlcnMoKTogSUdlb09iamVjdFtdO1xyXG5cclxuICAgICAgZ2V0R2VvT2JqZWN0cygpOiBJR2VvT2JqZWN0W107XHJcblxyXG4gICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgZ2V0T2JqZWN0U3RhdGUoZ2VvT2JqZWN0OiBJR2VvT2JqZWN0KToge1xyXG4gICAgICAgIGlzU2hvd246IGJvb2xlYW47XHJcbiAgICAgICAgY2x1c3RlcjogYW55O1xyXG4gICAgICAgIGlzQ2x1c3RlcmVkOiBib29sZWFuO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IElQYXJlbnRPbk1hcCB8IG51bGw7XHJcblxyXG4gICAgICByZW1vdmUob2JqZWN0czogSUdlb09iamVjdCB8IElHZW9PYmplY3RbXSk6IHRoaXM7XHJcblxyXG4gICAgICByZW1vdmVBbGwoKTogdGhpcztcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNsdXN0ZXJlck9wdGlvbnNJbmplY3Qge1xyXG4gICAgICBncmlkU2l6ZT86IG51bWJlcjtcclxuICAgICAgZ3JvdXBCeUNvb3JkaW5hdGVzPzogYm9vbGVhbjtcclxuICAgICAgaGFzQmFsbG9vbj86IGJvb2xlYW47XHJcbiAgICAgIGhhc0hpbnQ/OiBib29sZWFuO1xyXG4gICAgICBtYXJnaW4/OiBudW1iZXJbXSB8IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgICAgbWF4Wm9vbT86IG51bWJlcltdIHwgbnVtYmVyO1xyXG4gICAgICBtaW5DbHVzdGVyU2l6ZT86IG51bWJlcjtcclxuICAgICAgcHJlc2V0PzogUHJlc2V0S2V5O1xyXG4gICAgICBzaG93SW5BbHBoYWJldGljYWxPcmRlcj86IGJvb2xlYW47XHJcbiAgICAgIHVzZU1hcE1hcmdpbj86IGJvb2xlYW47XHJcbiAgICAgIHZpZXdwb3J0TWFyZ2luPzogbnVtYmVyW10gfCBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgICAgIHpvb21NYXJnaW4/OiBudW1iZXJbXSB8IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNsdXN0ZXJlck9wdGlvbnNcclxuICAgICAgZXh0ZW5kcyBJQ2x1c3RlcmVyT3B0aW9uc0luamVjdCxcclxuICAgICAgICBJQ2x1c3RlclBsYWNlbWFya09wdGlvbnNXaXRoQ2x1c3RlclByZWZpeCB7XHJcbiAgICAgIGhhc0JhbGxvb24/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gICAgICBoYXNIaW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBDbHVzdGVyUGxhY2VtYXJrIGltcGxlbWVudHMgSUdlb09iamVjdCwgY29sbGVjdGlvbi5JdGVtIHtcclxuICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgZ2VvbWV0cnk6IG51bWJlcltdIHwgb2JqZWN0IHwgSVBvaW50R2VvbWV0cnksXHJcbiAgICAgICAgcHJvcGVydGllczogSUNsdXN0ZXJQbGFjZW1hcmtQcm9wZXJ0aWVzLFxyXG4gICAgICAgIG9wdGlvbnM/OiBJQ2x1c3RlclBsYWNlbWFya09wdGlvbnMsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBnZW9tZXRyeTogSUdlb21ldHJ5IHwgbnVsbDtcclxuXHJcbiAgICAgIHByb3BlcnRpZXM6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgc3RhdGU6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICBvbkFkZFRvTWFwKG1hcDogTWFwKTogdm9pZDtcclxuXHJcbiAgICAgIG9uUmVtb3ZlRnJvbU1hcChvbGRNYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICBnZXRHZW9PYmplY3RzKCk6IElHZW9PYmplY3RbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNsdXN0ZXJQbGFjZW1hcmtQcm9wZXJ0aWVzIGV4dGVuZHMgSURhdGFNYW5hZ2VyIHtcclxuICAgICAgZ2VvT2JqZWN0czogSUdlb09iamVjdFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJQ2x1c3RlclBsYWNlbWFya09wdGlvbnMgZXh0ZW5kcyBJQmFsbG9vbk9wdGlvbnNXaXRoQmFsbG9vblByZWZpeCB7XHJcbiAgICAgIGJhbGxvb25Db250ZW50TGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBDbHVzdGVyTGF5b3V0S2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBiYWxsb29uQ29udGVudExheW91dEhlaWdodD86IG51bWJlcjtcclxuICAgICAgYmFsbG9vbkNvbnRlbnRMYXlvdXRXaWR0aD86IG51bWJlcjtcclxuICAgICAgYmFsbG9vbkl0ZW1Db250ZW50TGF5b3V0PzogSUxheW91dCB8IENsdXN0ZXJDb250ZW50TGF5b3V0S2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBiYWxsb29uUGFuZWxDb250ZW50TGF5b3V0PzogSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD4gfCBDbHVzdGVyTGF5b3V0S2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBoYXNCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgY3Vyc29yPzogc3RyaW5nO1xyXG4gICAgICBkaXNhYmxlQ2xpY2tab29tPzogYm9vbGVhbjtcclxuICAgICAgaGlkZUljb25PbkJhbGxvb25PcGVuPzogYm9vbGVhbjtcclxuICAgICAgaWNvbkNvbG9yPzogc3RyaW5nO1xyXG4gICAgICBpY29uQ29udGVudExheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElMYXlvdXQ+O1xyXG4gICAgICBpY29uTGF5b3V0Pzogc3RyaW5nIHwgSUNsYXNzQ29uc3RydWN0b3I8SUxheW91dD47XHJcbiAgICAgIGljb25zPzoge1xyXG4gICAgICAgIGhyZWY6IHN0cmluZztcclxuICAgICAgICBzaXplOiBudW1iZXJbXTtcclxuICAgICAgICBvZmZzZXQ6IG51bWJlcltdO1xyXG4gICAgICAgIHNoYXBlPzogSVNoYXBlIHwgSUdlb21ldHJ5SnNvbjtcclxuICAgICAgfVtdO1xyXG4gICAgICBpY29uU2hhcGU/OiBJR2VvbWV0cnlKc29uO1xyXG4gICAgICBpbnRlcmFjdGl2aXR5TW9kZWw/OiBJbnRlcmFjdGl2aXR5TW9kZWxLZXk7XHJcbiAgICAgIG51bWJlcnM/OiBudW1iZXJbXTtcclxuICAgICAgb3BlbkJhbGxvb25PbkNsaWNrPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIHpJbmRleEhvdmVyPzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSUNsdXN0ZXJQbGFjZW1hcmtPcHRpb25zV2l0aENsdXN0ZXJQcmVmaXggPSBQcmVmaXg8SUNsdXN0ZXJQbGFjZW1hcmtPcHRpb25zLCAnY2x1c3Rlcic+O1xyXG5cclxuICAgIGNsYXNzIENvbGxlY3Rpb248VCA9IG9iamVjdD4gaW1wbGVtZW50cyBJQ29sbGVjdGlvbiwgY29sbGVjdGlvbi5JdGVtIHtcclxuICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz86IG9iamVjdCk7XHJcblxyXG4gICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgIGFkZChvYmplY3Q6IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICBnZXRJdGVyYXRvcigpOiBJSXRlcmF0b3I7XHJcblxyXG4gICAgICByZW1vdmUob2JqZWN0OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICBvbkFkZFRvTWFwKG1hcDogTWFwKTogdm9pZDtcclxuXHJcbiAgICAgIG9uUmVtb3ZlRnJvbU1hcChvbGRNYXA6IE1hcCk6IHZvaWQ7XHJcblxyXG4gICAgICBmaWx0ZXIoZmlsdGVyRnVuY3Rpb246IChvYmplY3Q6IG9iamVjdCkgPT4gYm9vbGVhbik6IG9iamVjdFtdO1xyXG5cclxuICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBhbnk7XHJcblxyXG4gICAgICBnZXRBbGwoKTogVFtdO1xyXG5cclxuICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgIGluZGV4T2YoY2hpbGRUb0ZpbmQ6IG9iamVjdCk6IG51bWJlcjtcclxuXHJcbiAgICAgIHJlbW92ZUFsbCgpOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIEV2ZW50PE9yaWdpbmFsRXZlbnQgPSBvYmplY3QsIFRhcmdldEdlb21ldHJ5ID0gb2JqZWN0PlxyXG4gICAgICBpbXBsZW1lbnRzIElFdmVudDxPcmlnaW5hbEV2ZW50LCBUYXJnZXRHZW9tZXRyeT5cclxuICAgIHtcclxuICAgICAgY29uc3RydWN0b3Iob3JpZ2luYWxFdmVudDogb2JqZWN0LCBzb3VyY2VFdmVudDogSUV2ZW50KTtcclxuXHJcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IHtcclxuICAgICAgICBkb21FdmVudDoge1xyXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogT3JpZ2luYWxFdmVudDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRhcmdldDoge1xyXG4gICAgICAgICAgZ2VvbWV0cnk/OiBUYXJnZXRHZW9tZXRyeTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgYWxsb3dNYXBFdmVudCgpOiB2b2lkO1xyXG5cclxuICAgICAgY2FsbE1ldGhvZChuYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgICAgZ2V0PFQgZXh0ZW5kcyBPcmlnaW5hbEV2ZW50LCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+KG5hbWU6IEspOiBUW0tdO1xyXG5cclxuICAgICAgZ2V0KG5hbWU6IHN0cmluZyk6IGFueTtcclxuXHJcbiAgICAgIGdldFNvdXJjZUV2ZW50KCk6IElFdmVudDxPcmlnaW5hbEV2ZW50LCBUYXJnZXRHZW9tZXRyeT4gfCBudWxsO1xyXG5cclxuICAgICAgaXNEZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgaXNNYXBFdmVudEFsbG93ZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBwcmV2ZW50RGVmYXVsdCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBzdG9wUHJvcGFnYXRpb24oKTogYm9vbGVhbjtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBEb21FdmVudDxPcmlnaW5hbEV2ZW50ID0gb2JqZWN0LCBUYXJnZXRHZW9tZXRyeSA9IG9iamVjdD5cclxuICAgICAgaW1wbGVtZW50cyBJRG9tRXZlbnQ8T3JpZ2luYWxFdmVudCwgVGFyZ2V0R2VvbWV0cnk+XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFsRXZlbnQ6IERvbUV2ZW50LCB0eXBlPzogb2JqZWN0KTtcclxuXHJcbiAgICAgIG9yaWdpbmFsRXZlbnQ6IHtcclxuICAgICAgICBkb21FdmVudDoge1xyXG4gICAgICAgICAgb3JpZ2luYWxFdmVudDogT3JpZ2luYWxFdmVudDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRhcmdldDoge1xyXG4gICAgICAgICAgZ2VvbWV0cnk/OiBUYXJnZXRHZW9tZXRyeSB8IHVuZGVmaW5lZDtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgYWxsb3dNYXBFdmVudCgpOiB2b2lkO1xyXG5cclxuICAgICAgY2FsbE1ldGhvZChuYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgICAgZ2V0PFQgZXh0ZW5kcyBPcmlnaW5hbEV2ZW50LCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+KG5hbWU6IEspOiBUW0tdO1xyXG5cclxuICAgICAgZ2V0KG5hbWU6IHN0cmluZyk6IGFueTtcclxuXHJcbiAgICAgIGdldFNvdXJjZUV2ZW50KCk6IElEb21FdmVudDxPcmlnaW5hbEV2ZW50LCBUYXJnZXRHZW9tZXRyeT47XHJcblxyXG4gICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBpc01hcEV2ZW50QWxsb3dlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHByZXZlbnREZWZhdWx0KCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHN0b3BQcm9wYWdhdGlvbigpOiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIEdlb09iamVjdDxUID0gSUdlb21ldHJ5LCBUYXJnZXRHZW9tZXRyeSA9IG9iamVjdD4gaW1wbGVtZW50cyBJR2VvT2JqZWN0PFQ+IHtcclxuICAgICAgY29uc3RydWN0b3IoZmVhdHVyZT86IElHZW9PYmplY3RGZWF0dXJlLCBvcHRpb25zPzogSUdlb09iamVjdE9wdGlvbnMpO1xyXG5cclxuICAgICAgZ2VvbWV0cnk6IFQgfCBudWxsO1xyXG5cclxuICAgICAgYmFsbG9vbjogZ2VvT2JqZWN0LkJhbGxvb247XHJcblxyXG4gICAgICBlZGl0b3I6IElHZW9tZXRyeUVkaXRvcjtcclxuXHJcbiAgICAgIGhpbnQ6IGdlb09iamVjdC5IaW50O1xyXG5cclxuICAgICAgZXZlbnRzOiBldmVudC5NYW5hZ2VyPFRhcmdldEdlb21ldHJ5PjtcclxuXHJcbiAgICAgIG9wdGlvbnM6IG9wdGlvbi5NYW5hZ2VyO1xyXG5cclxuICAgICAgcHJvcGVydGllczogZGF0YS5NYW5hZ2VyO1xyXG5cclxuICAgICAgc3RhdGU6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IG51bGwgfCBJQ29udHJvbFBhcmVudDtcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IElDb250cm9sUGFyZW50KTogdGhpcztcclxuXHJcbiAgICAgIGdldE1hcCgpOiBNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MgR2VvY29kZVJlc3VsdCBpbXBsZW1lbnRzIElHZW9PYmplY3Qge1xyXG4gICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcbiAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuICAgICAgcHJvcGVydGllczogSURhdGFNYW5hZ2VyO1xyXG4gICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgZ2V0QWRkcmVzc0xpbmUoKTogc3RyaW5nO1xyXG4gICAgICBnZXRBZG1pbmlzdHJhdGl2ZUFyZWFzKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcclxuICAgICAgZ2V0Q291bnRyeSgpOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICBnZXRDb3VudHJ5Q29kZSgpOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICBnZXRMb2NhbGl0aWVzKCk6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcclxuICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcbiAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcbiAgICAgIGdldFByZW1pc2UoKTogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgZ2V0UHJlbWlzZU51bWJlcigpOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICBnZXRUaG9yb3VnaGZhcmUoKTogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0IHwgbnVsbCk6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9PYmplY3RGZWF0dXJlIHtcclxuICAgICAgZ2VvbWV0cnk/OiBJR2VvbWV0cnkgfCBJR2VvbWV0cnlKc29uO1xyXG4gICAgICBwcm9wZXJ0aWVzPzogSURhdGFNYW5hZ2VyIHwgb2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJR2VvT2JqZWN0T3B0aW9uc1xyXG4gICAgICBleHRlbmRzIElCYWxsb29uT3B0aW9uc1dpdGhCYWxsb29uUHJlZml4LFxyXG4gICAgICAgIElIaW50T3B0aW9uc1dpdGhIaW50UHJlZml4IHtcclxuICAgICAgY2lyY2xlT3ZlcmxheT86XHJcbiAgICAgICAgfCBzdHJpbmdcclxuICAgICAgICB8ICgoZ2VvbWV0cnk6IElQaXhlbENpcmNsZUdlb21ldHJ5LCBkYXRhOiBvYmplY3QsIG9wdGlvbnM6IG9iamVjdCkgPT4gUHJvbWlzZTxJT3ZlcmxheT4pO1xyXG4gICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRyYWdnYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGZpbGw/OiBib29sZWFuO1xyXG4gICAgICBmaWxsQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxJbWFnZUhyZWY/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxNZXRob2Q/OiAnc3RyZXRjaCcgfCAndGlsZSc7XHJcbiAgICAgIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBoYXNCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgaGFzSGludD86IGJvb2xlYW47XHJcbiAgICAgIGhpZGVJY29uT25CYWxsb29uT3Blbj86IGJvb2xlYW47XHJcbiAgICAgIGljb25DYXB0aW9uTWF4V2lkdGg/OiBudW1iZXI7XHJcbiAgICAgIGljb25Db2xvcj86IHN0cmluZztcclxuICAgICAgaWNvbkNvbnRlbnRMYXlvdXQ/OiBzdHJpbmcgfCBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PjtcclxuICAgICAgaWNvbkNvbnRlbnRPZmZzZXQ/OiBudW1iZXJbXTtcclxuICAgICAgaWNvbkNvbnRlbnRQYWRkaW5nPzogbnVtYmVyW107XHJcbiAgICAgIGljb25Db250ZW50U2l6ZT86IG51bWJlcltdO1xyXG4gICAgICBpY29uSW1hZ2VDbGlwUmVjdD86IG51bWJlcltdW107XHJcbiAgICAgIGljb25JbWFnZUhyZWY/OiBzdHJpbmc7XHJcbiAgICAgIGljb25JbWFnZU9mZnNldD86IG51bWJlcltdO1xyXG4gICAgICBpY29uSW1hZ2VTaGFwZT86IElTaGFwZSB8IG51bGw7XHJcbiAgICAgIGljb25JbWFnZVNpemU/OiBudW1iZXJbXTtcclxuICAgICAgaWNvbkxheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElMYXlvdXQ+O1xyXG4gICAgICBpY29uTWF4SGVpZ2h0PzogbnVtYmVyO1xyXG4gICAgICBpY29uTWF4V2lkdGg/OiBudW1iZXI7XHJcbiAgICAgIGljb25PZmZzZXQ/OiBudW1iZXJbXTtcclxuICAgICAgaWNvblNoYWRvdz86IGJvb2xlYW47XHJcbiAgICAgIGljb25TaGFkb3dJbWFnZUNsaXBSZWN0PzogbnVtYmVyW11bXTtcclxuICAgICAgaWNvblNoYWRvd0ltYWdlSHJlZj86IHN0cmluZztcclxuICAgICAgaWNvblNoYWRvd0ltYWdlT2Zmc2V0PzogbnVtYmVyW107XHJcbiAgICAgIGljb25TaGFkb3dJbWFnZVNpemU/OiBudW1iZXJbXTtcclxuICAgICAgaWNvblNoYWRvd0xheW91dD86IHN0cmluZyB8IElDbGFzc0NvbnN0cnVjdG9yPElMYXlvdXQ+O1xyXG4gICAgICBpY29uU2hhZG93T2Zmc2V0PzogbnVtYmVyW107XHJcbiAgICAgIGludGVyYWN0aXZlWkluZGV4PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5O1xyXG4gICAgICBsaW5lU3RyaW5nT3ZlcmxheT86IE92ZXJsYXlLZXk7XHJcbiAgICAgIG9wYWNpdHk/OiBudW1iZXI7XHJcbiAgICAgIG9wZW5CYWxsb29uT25DbGljaz86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5FbXB0eUJhbGxvb24/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlIaW50PzogYm9vbGVhbjtcclxuICAgICAgb3BlbkhpbnRPbkhvdmVyPzogYm9vbGVhbjtcclxuICAgICAgb3V0bGluZT86IGJvb2xlYW47XHJcbiAgICAgIHBhbmU/OiBzdHJpbmc7XHJcbiAgICAgIHBvaW50T3ZlcmxheT86IE92ZXJsYXlLZXk7XHJcbiAgICAgIHBvbHlnb25PdmVybGF5PzogT3ZlcmxheUtleTtcclxuICAgICAgcHJlc2V0PzogUHJlc2V0S2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICByZWN0YW5nbGVPdmVybGF5PzogT3ZlcmxheUtleTtcclxuICAgICAgc2V0TWFwQ3Vyc29ySW5EcmFnZ2luZz86IGJvb2xlYW47XHJcbiAgICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nW11bXSB8IHN0cmluZ1tdIHwgc3RyaW5nO1xyXG4gICAgICBzdHJva2VPcGFjaXR5PzogbnVtYmVyW11bXSB8IG51bWJlcltdIHwgbnVtYmVyO1xyXG4gICAgICBzdHJva2VTdHlsZT86IHN0cmluZ1tdW11bXSB8IG9iamVjdFtdW10gfCBzdHJpbmdbXSB8IG9iamVjdFtdIHwgc3RyaW5nIHwgb2JqZWN0O1xyXG4gICAgICBzdHJva2VXaWR0aD86IG51bWJlcltdW10gfCBudW1iZXJbXSB8IG51bWJlcjtcclxuICAgICAgc3luY092ZXJsYXlJbml0PzogYm9vbGVhbjtcclxuICAgICAgdXNlTWFwTWFyZ2luSW5EcmFnZ2luZz86IGJvb2xlYW47XHJcbiAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleEFjdGl2ZT86IG51bWJlcjtcclxuICAgICAgekluZGV4RHJhZz86IG51bWJlcjtcclxuICAgICAgekluZGV4SG92ZXI/OiBudW1iZXI7XHJcblxyXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZSBJR2VvT2JqZWN0T3B0aW9uc1dpdGhHZW9PYmplY3RQcmVmaXggPSBQcmVmaXg8SUdlb09iamVjdE9wdGlvbnMsICdnZW9PYmplY3QnPjtcclxuXHJcbiAgICBjbGFzcyBHZW9PYmplY3RDb2xsZWN0aW9uIGltcGxlbWVudHMgSUdlb09iamVjdCwgSUdlb09iamVjdENvbGxlY3Rpb24ge1xyXG4gICAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBmZWF0dXJlPzoge1xyXG4gICAgICAgICAgY2hpbGRyZW4/OiBJR2VvT2JqZWN0W107XHJcbiAgICAgICAgICBnZW9tZXRyeT86IElHZW9tZXRyeSB8IG9iamVjdDtcclxuICAgICAgICAgIHByb3BlcnRpZXM/OiBJRGF0YU1hbmFnZXIgfCBvYmplY3Q7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvcHRpb25zPzogb2JqZWN0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgIGdldFBhcmVudCgpOiBudWxsIHwgSUNvbnRyb2xQYXJlbnQ7XHJcblxyXG4gICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcblxyXG4gICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgYWRkKGNoaWxkOiBJR2VvT2JqZWN0LCBpbmRleD86IG51bWJlcik6IHRoaXM7XHJcblxyXG4gICAgICBlYWNoKGNhbGxiYWNrOiAob2JqZWN0OiBJR2VvT2JqZWN0KSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogdm9pZDtcclxuXHJcbiAgICAgIGdldChpbmRleDogbnVtYmVyKTogSUdlb09iamVjdDtcclxuXHJcbiAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgICBnZXRQaXhlbEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIGluZGV4T2Yob2JqZWN0OiBJR2VvT2JqZWN0KTogbnVtYmVyO1xyXG5cclxuICAgICAgcmVtb3ZlKGNoaWxkOiBJR2VvT2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgIHJlbW92ZUFsbCgpOiB0aGlzO1xyXG5cclxuICAgICAgc2V0KGluZGV4OiBudW1iZXIsIGNoaWxkOiBJR2VvT2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHRoaXM7XHJcblxyXG4gICAgICB0b0FycmF5KCk6IElHZW9PYmplY3RbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUxheWVyT3B0aW9ucyB7XHJcbiAgICAgIGJyaWdodG5lc3M/OiBudW1iZXI7XHJcbiAgICAgIG5vdEZvdW5kVGlsZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIHBhbmU/OiBJUGFuZSB8IHN0cmluZztcclxuICAgICAgcHJvamVjdGlvbj86IGFueTtcclxuICAgICAgdGlsZVNpemU/OiBudW1iZXJbXVtdO1xyXG4gICAgICB0aWxlVHJhbnNwYXJlbnQ/OiBib29sZWFuO1xyXG4gICAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MgTGF5ZXIgaW1wbGVtZW50cyBJTGF5ZXIsIElQYXJlbnRPbk1hcCwgSVBvc2l0aW9uaW5nQ29udGV4dCB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHRpbGVVcmxUZW1wbGF0ZTogc3RyaW5nIHwgKCh0aWxlTnVtYmVyOiBudW1iZXJbXSwgdGlsZVpvb206IG51bWJlcikgPT4gc3RyaW5nKSxcclxuICAgICAgICBvcHRpb25zPzogSUxheWVyT3B0aW9ucyxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG5cclxuICAgICAgY2xpZW50UGl4ZWxzVG9OdW1iZXIoY2xpZW50UGl4ZWxQb2ludDogbnVtYmVyLCB0aWxlWm9vbTogbnVtYmVyKTogbnVtYmVyW107XHJcblxyXG4gICAgICBmcm9tQ2xpZW50UGl4ZWxzKGNsaWVudFBpeGVsUG9pbnQ6IG51bWJlcltdKTogbnVtYmVyW107XHJcblxyXG4gICAgICBnZXRCcmlnaHRuZXNzPygpOiBudW1iZXI7XHJcblxyXG4gICAgICBnZXRDb3B5cmlnaHRzPyhjb29yZHM6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50Pj47XHJcblxyXG4gICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgZ2V0UGFuZSgpOiBJUGFuZTtcclxuXHJcbiAgICAgIGdldFBhcmVudCgpOiBudWxsIHwgSUNvbnRyb2xQYXJlbnQ7XHJcblxyXG4gICAgICBnZXRUaWxlU2l6ZSh6b29tOiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldFRpbGVTdGF0dXMoKTogeyByZWFkeVRpbGVOdW1iZXI6IG51bWJlcjsgdG90YWxUaWxlTnVtYmVyOiBudW1iZXIgfTtcclxuXHJcbiAgICAgIGdldFRpbGVVcmwodGlsZU51bWJlcjogbnVtYmVyW10sIHRpbGVab29tOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0VGlsZVVybFRlbXBsYXRlKCk6IHN0cmluZyB8IGFueTtcclxuXHJcbiAgICAgIGdldFpvb20oKTogbnVtYmVyO1xyXG5cclxuICAgICAgZ2V0Wm9vbVJhbmdlPyhwb2ludDogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcltdPjtcclxuXHJcbiAgICAgIG51bWJlclRvQ2xpZW50Qm91bmRzKHRpbGVOdW1iZXI6IG51bWJlcltdLCB0aWxlWm9vbTogbnVtYmVyKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgIHJlc3RyaWN0KG51bTogbnVtYmVyW10sIHRpbGVab29tOiBudW1iZXIpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICBzZXRQYXJlbnQocGFyZW50OiBJQ29udHJvbFBhcmVudCk6IHRoaXM7XHJcblxyXG4gICAgICBzZXRUaWxlVXJsVGVtcGxhdGUodGlsZVVybFRlbXBsYXRlOiBzdHJpbmcgfCBhbnkpOiB2b2lkO1xyXG5cclxuICAgICAgdG9DbGllbnRQaXhlbHMoZ2xvYmFsUGl4ZWxQb2ludDogbnVtYmVyW10pOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIHVwZGF0ZSh1cGRhdGVCb3VuZHM6IGFueSk6IHZvaWQ7XHJcblxyXG4gICAgICBnZXRBbGlhcygpOiBzdHJpbmc7XHJcblxyXG4gICAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSUhpbnQgPSBJUG9wdXA8SUhpbnQ+O1xyXG5cclxuICAgIGludGVyZmFjZSBJSGludE9wdGlvbnMge1xyXG4gICAgICBjbG9zZVRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgICAgIGNvbnRlbnRMYXlvdXQ/OiBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PiB8IHN0cmluZztcclxuICAgICAgZml0UGFuZT86IGJvb2xlYW47XHJcbiAgICAgIGhvbGRCeU1vdXNlPzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5O1xyXG4gICAgICBsYXlvdXQ/OiBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PiB8IHN0cmluZztcclxuICAgICAgb2Zmc2V0PzogbnVtYmVyW107XHJcbiAgICAgIG9wZW5UaW1lb3V0PzogbnVtYmVyO1xyXG4gICAgICBwYW5lPzogc3RyaW5nO1xyXG4gICAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZSBJSGludE9wdGlvbnNXaXRoSGludFByZWZpeCA9IFByZWZpeDxJSGludE9wdGlvbnMsICdoaW50Jz47XHJcblxyXG4gICAgY2xhc3MgSGludCBleHRlbmRzIFBvcHVwPEhpbnQ+IGltcGxlbWVudHMgSUhpbnQge1xyXG4gICAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9ucz86IElIaW50T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MgTWFwIGltcGxlbWVudHMgSURvbUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgc3RyaW5nLCBzdGF0ZTogSU1hcFN0YXRlLCBvcHRpb25zPzogSU1hcE9wdGlvbnMpO1xyXG5cclxuICAgICAgYWN0aW9uOiBtYXAuYWN0aW9uLk1hbmFnZXI7XHJcblxyXG4gICAgICBiYWxsb29uOiBtYXAuQmFsbG9vbjtcclxuXHJcbiAgICAgIGJlaGF2aW9yczogbWFwLmJlaGF2aW9yLk1hbmFnZXI7XHJcblxyXG4gICAgICBjb250YWluZXI6IG1hcC5Db250YWluZXI7XHJcblxyXG4gICAgICBjb250cm9sczogY29udHJvbC5NYW5hZ2VyO1xyXG5cclxuICAgICAgY29udmVydGVyOiBtYXAuQ29udmVydGVyO1xyXG5cclxuICAgICAgY29weXJpZ2h0czogbWFwLkNvcHlyaWdodHM7XHJcblxyXG4gICAgICBjdXJzb3JzOiB1dGlsLmN1cnNvci5NYW5hZ2VyO1xyXG5cclxuICAgICAgZXZlbnRzOiBldmVudC5NYW5hZ2VyO1xyXG5cclxuICAgICAgZ2VvT2JqZWN0czogbWFwLkdlb09iamVjdHM7XHJcblxyXG4gICAgICBoaW50OiBtYXAuSGludDtcclxuXHJcbiAgICAgIGxheWVyczogbWFwLmxheWVyLk1hbmFnZXI7XHJcblxyXG4gICAgICBtYXJnaW46IG1hcC5tYXJnaW4uTWFuYWdlcjtcclxuXHJcbiAgICAgIG9wdGlvbnM6IG9wdGlvbi5NYW5hZ2VyO1xyXG5cclxuICAgICAgcGFuZXM6IG1hcC5wYW5lLk1hbmFnZXI7XHJcblxyXG4gICAgICB6b29tUmFuZ2U6IG1hcC5ab29tUmFuZ2U7XHJcblxyXG4gICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICBnZXRCb3VuZHMob3B0aW9ucz86IElNYXBNYXJnaW5PcHRpb25zKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgIGdldENlbnRlcihvcHRpb25zPzogSU1hcE1hcmdpbk9wdGlvbnMpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldEdsb2JhbFBpeGVsQ2VudGVyKG9wdGlvbnM/OiBJTWFwTWFyZ2luT3B0aW9ucyk6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0UGFub3JhbWFNYW5hZ2VyKCk6IFByb21pc2U8cGFub3JhbWEuTWFuYWdlcj47XHJcblxyXG4gICAgICBnZXRUeXBlKCk6IHN0cmluZyB8IE1hcFR5cGU7XHJcblxyXG4gICAgICBnZXRab29tKCk6IG51bWJlcjtcclxuXHJcbiAgICAgIHBhblRvKGNlbnRlcjogbnVtYmVyW10gfCBvYmplY3RbXSwgb3B0aW9ucz86IElNYXBQYW5PcHRpb25zKTogdGhpcztcclxuXHJcbiAgICAgIHNldEJvdW5kcyhib3VuZHM6IG51bWJlcltdW10sIG9wdGlvbnM/OiBJTWFwQm91bmRzT3B0aW9ucyk6IHRoaXM7XHJcblxyXG4gICAgICBzZXRDZW50ZXIoY2VudGVyOiBudW1iZXJbXSwgem9vbT86IG51bWJlciwgb3B0aW9ucz86IElNYXBQb3NpdGlvbk9wdGlvbnMpOiB0aGlzO1xyXG5cclxuICAgICAgc2V0R2xvYmFsUGl4ZWxDZW50ZXIoXHJcbiAgICAgICAgZ2xvYmFsUGl4ZWxDZW50ZXI6IG51bWJlcltdLFxyXG4gICAgICAgIHpvb20/OiBudW1iZXIsXHJcbiAgICAgICAgb3B0aW9ucz86IElNYXBQb3NpdGlvbk9wdGlvbnMsXHJcbiAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICBzZXRUeXBlKHR5cGU6IHN0cmluZyB8IE1hcFR5cGUsIG9wdGlvbnM/OiBJTWFwQ2hlY2tab29tUmFuZ2VPcHRpb25zKTogdGhpcztcclxuXHJcbiAgICAgIHNldFpvb20oem9vbTogbnVtYmVyLCBvcHRpb25zPzogSU1hcFpvb21PcHRpb25zKTogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBNYXBFdmVudDxPcmlnaW5hbEV2ZW50ID0gb2JqZWN0LCBUYXJnZXRHZW9tZXRyeSA9IG9iamVjdD4gZXh0ZW5kcyBFdmVudDxcclxuICAgICAgT3JpZ2luYWxFdmVudCxcclxuICAgICAgVGFyZ2V0R2VvbWV0cnlcclxuICAgID4ge1xyXG4gICAgICBnZXQobmFtZTogc3RyaW5nKTogYW55O1xyXG5cclxuICAgICAgZ2V0KG5hbWU6ICdjb29yZHMnIHwgJ2dsb2JhbFBpeGVscycgfCAncGFnZVBpeGVscycgfCAnY2xpZW50UGl4ZWxzJyk6IFtudW1iZXIsIG51bWJlcl07XHJcblxyXG4gICAgICBnZXQobmFtZTogJ2RvbUV2ZW50Jyk6IERvbUV2ZW50PE9yaWdpbmFsRXZlbnQsIFRhcmdldEdlb21ldHJ5PiB8IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSU1hcE1hcmdpbk9wdGlvbnMge1xyXG4gICAgICB1c2VNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJTWFwQ2hlY2tab29tUmFuZ2VPcHRpb25zIHtcclxuICAgICAgY2hlY2tab29tUmFuZ2U/OiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJTWFwWm9vbU9wdGlvbnMgZXh0ZW5kcyBJTWFwTWFyZ2luT3B0aW9ucywgSU1hcENoZWNrWm9vbVJhbmdlT3B0aW9ucyB7XHJcbiAgICAgIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJTWFwUG9zaXRpb25PcHRpb25zIGV4dGVuZHMgSU1hcFpvb21PcHRpb25zIHtcclxuICAgICAgdGltaW5nRnVuY3Rpb24/OiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElNYXBCb3VuZHNPcHRpb25zIGV4dGVuZHMgSU1hcFBvc2l0aW9uT3B0aW9ucyB7XHJcbiAgICAgIHByZWNpc2Vab29tPzogYm9vbGVhbjtcclxuICAgICAgem9vbU1hcmdpbj86IG51bWJlcltdW10gfCBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSU1hcFBhbk9wdGlvbnMgZXh0ZW5kcyBJTWFwUG9zaXRpb25PcHRpb25zIHtcclxuICAgICAgZGVsYXk/OiBudW1iZXI7XHJcbiAgICAgIGZseWluZz86IGJvb2xlYW47XHJcbiAgICAgIHNhZmU/OiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIE1hcFR5cGUge1xyXG4gICAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGxheWVyczogQXJyYXk8SUNsYXNzQ29uc3RydWN0b3I8TGF5ZXI+IHwgc3RyaW5nPik7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElNYXBTdGF0ZSB7XHJcbiAgICAgIGJlaGF2aW9ycz86IHN0cmluZ1tdO1xyXG4gICAgICBib3VuZHM/OiBudW1iZXJbXVtdO1xyXG4gICAgICBjZW50ZXI/OiBudW1iZXJbXTtcclxuICAgICAgY29udHJvbHM/OiBDb250cm9sS2V5W107XHJcbiAgICAgIG1hcmdpbj86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICB0eXBlPzogJ3lhbmRleCNtYXAnIHwgJ3lhbmRleCNzYXRlbGxpdGUnIHwgJ3lhbmRleCNoeWJyaWQnIHwgTWFwVHlwZTtcclxuICAgICAgem9vbT86IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSU1hcE9wdGlvbnMge1xyXG4gICAgICBhdXRvRml0VG9WaWV3cG9ydD86ICdub25lJyB8ICdpZk51bGwnIHwgJ2Fsd2F5cyc7XHJcbiAgICAgIGF2b2lkRnJhY3Rpb25hbFpvb20/OiBib29sZWFuO1xyXG4gICAgICBleGl0RnVsbHNjcmVlbkJ5RXNjPzogYm9vbGVhbjtcclxuICAgICAgZnVsbHNjcmVlblpJbmRleD86IG51bWJlcjtcclxuICAgICAgbWFwQXV0b0ZvY3VzPzogYm9vbGVhbjtcclxuICAgICAgbWF4QW5pbWF0aW9uWm9vbURpZmZlcmVuY2U/OiBudW1iZXI7XHJcbiAgICAgIG1heFpvb20/OiBudW1iZXI7XHJcbiAgICAgIG1pblpvb20/OiBudW1iZXI7XHJcbiAgICAgIG5hdGl2ZUZ1bGxzY3JlZW4/OiBib29sZWFuO1xyXG4gICAgICBwcm9qZWN0aW9uPzogSVByb2plY3Rpb247XHJcbiAgICAgIHJlc3RyaWN0TWFwQXJlYT86IGJvb2xlYW4gfCBudW1iZXJbXVtdIHwgdW5kZWZpbmVkO1xyXG4gICAgICBzdXBwcmVzc01hcE9wZW5CbG9jaz86IGJvb2xlYW47XHJcbiAgICAgIHN1cHByZXNzT2Jzb2xldGVCcm93c2VyTm90aWZpZXI/OiBib29sZWFuO1xyXG4gICAgICB5YW5kZXhNYXBBdXRvU3dpdGNoPzogYm9vbGVhbjtcclxuICAgICAgeWFuZGV4TWFwRGlzYWJsZVBvaUludGVyYWN0aXZpdHk/OiBib29sZWFuO1xyXG5cclxuICAgICAgY29weXJpZ2h0TG9nb1Zpc2libGU/OiBib29sZWFuO1xyXG4gICAgICBjb3B5cmlnaHRQcm92aWRlcnNWaXNpYmxlPzogYm9vbGVhbjtcclxuICAgICAgY29weXJpZ2h0VWFWaXNpYmxlPzogYm9vbGVhbjtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBQbGFjZW1hcmsgZXh0ZW5kcyBHZW9PYmplY3Q8SVBvaW50R2VvbWV0cnksIGdlb21ldHJ5LlBvaW50PiB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGdlb21ldHJ5OiBudW1iZXJbXSB8IG9iamVjdCB8IElQb2ludEdlb21ldHJ5LFxyXG4gICAgICAgIHByb3BlcnRpZXM/OiBJUGxhY2VtYXJrUHJvcGVydGllcyB8IElEYXRhTWFuYWdlcixcclxuICAgICAgICBvcHRpb25zPzogSVBsYWNlbWFya09wdGlvbnMsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQbGFjZW1hcmtQcm9wZXJ0aWVzIHtcclxuICAgICAgaWNvbkNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICAgIGljb25DYXB0aW9uPzogc3RyaW5nO1xyXG4gICAgICBoaW50Q29udGVudD86IHN0cmluZztcclxuICAgICAgYmFsbG9vbkNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICAgIGJhbGxvb25Db250ZW50SGVhZGVyPzogc3RyaW5nO1xyXG4gICAgICBiYWxsb29uQ29udGVudEJvZHk/OiBzdHJpbmc7XHJcbiAgICAgIGJhbGxvb25Db250ZW50Rm9vdGVyPzogc3RyaW5nO1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQbGFjZW1hcmtPcHRpb25zXHJcbiAgICAgIGV4dGVuZHMgbGF5b3V0LklJbWFnZU9wdGlvbnNXaXRoSWNvblByZWZpeCxcclxuICAgICAgICBsYXlvdXQuSUltYWdlV2l0aENvbnRlbnRPcHRpb25zV2l0aEljb25QcmVmaXgsXHJcbiAgICAgICAgbGF5b3V0LklQaWVDaGFydE9wdGlvbnNXaXRoSWNvblByZWZpeCxcclxuICAgICAgICBJQmFsbG9vbk9wdGlvbnNXaXRoQmFsbG9vblByZWZpeCxcclxuICAgICAgICBJSGludE9wdGlvbnNXaXRoSGludFByZWZpeCB7XHJcbiAgICAgIGN1cnNvcj86IHN0cmluZztcclxuICAgICAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcclxuICAgICAgaGFzQmFsbG9vbj86IGJvb2xlYW47XHJcbiAgICAgIGhhc0hpbnQ/OiBib29sZWFuO1xyXG4gICAgICBoaWRlSWNvbk9uQmFsbG9vbk9wZW4/OiBib29sZWFuO1xyXG4gICAgICBpY29uQ29sb3I/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGljb25MYXlvdXQ/OiBJQ2xhc3NDb25zdHJ1Y3RvcjxJTGF5b3V0PiB8IEljb25MYXlvdXRLZXkgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGljb25PZmZzZXQ/OiBudW1iZXJbXTtcclxuICAgICAgaWNvblNoYXBlPzogSUdlb21ldHJ5SnNvbiB8IG51bGw7XHJcbiAgICAgIGludGVyYWN0aXZlWkluZGV4PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBvcGVuQmFsbG9vbk9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIHBhbmU/OiBzdHJpbmc7XHJcbiAgICAgIHBvaW50T3ZlcmxheT86IHN0cmluZztcclxuICAgICAgcHJlc2V0PzogUHJlc2V0S2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBzeW5jT3ZlcmxheUluaXQ/OiBib29sZWFuO1xyXG4gICAgICB1c2VNYXBNYXJnaW5JbkRyYWdnaW5nPzogYm9vbGVhbjtcclxuICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgIHpJbmRleD86IG51bWJlcjtcclxuICAgICAgekluZGV4QWN0aXZlPzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhEcmFnPzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhIb3Zlcj86IG51bWJlcjtcclxuXHJcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBQb2x5Z29uIGV4dGVuZHMgR2VvT2JqZWN0PElQb2x5Z29uR2VvbWV0cnk+IHtcclxuICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgZ2VvbWV0cnk6IG51bWJlcltdW11bXSB8IG9iamVjdCB8IElQb2x5Z29uR2VvbWV0cnksXHJcbiAgICAgICAgcHJvcGVydGllcz86IG9iamVjdCB8IElEYXRhTWFuYWdlcixcclxuICAgICAgICBvcHRpb25zPzogSVBvbHlnb25PcHRpb25zLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUG9seWdvbk9wdGlvbnMge1xyXG4gICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRyYWdnYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGZpbGw/OiBib29sZWFuO1xyXG4gICAgICBmaWxsQ29sb3I/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxJbWFnZUhyZWY/OiBzdHJpbmc7XHJcbiAgICAgIGZpbGxNZXRob2Q/OiAnc3RyZXRjaCcgfCAndGlsZSc7XHJcbiAgICAgIGZpbGxPcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBoYXNCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgaGFzSGludD86IGJvb2xlYW47XHJcbiAgICAgIGludGVyYWN0aXZlWkluZGV4PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5IHwgdW5kZWZpbmVkO1xyXG4gICAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBvcGVuQmFsbG9vbk9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIG91dGxpbmU/OiBib29sZWFuO1xyXG4gICAgICBwYW5lPzogc3RyaW5nO1xyXG4gICAgICBwb2x5Z29uT3ZlcmxheT86IHN0cmluZztcclxuICAgICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICAgICAgc3Ryb2tlT3BhY2l0eT86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICBzdHJva2VTdHlsZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgb2JqZWN0IHwgb2JqZWN0W107XHJcbiAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyIHwgbnVtYmVyW107XHJcbiAgICAgIHN5bmNPdmVybGF5SW5pdD86IGJvb2xlYW47XHJcbiAgICAgIHVzZU1hcE1hcmdpbkluRHJhZ2dpbmc/OiBib29sZWFuO1xyXG4gICAgICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhBY3RpdmU/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleERyYWc/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleEhvdmVyPzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIFBvbHlsaW5lIGV4dGVuZHMgR2VvT2JqZWN0PElMaW5lU3RyaW5nR2VvbWV0cnk+IHtcclxuICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgZ2VvbWV0cnk6IG51bWJlcltdW10gfCBvYmplY3QgfCBJTGluZVN0cmluZ0dlb21ldHJ5LFxyXG4gICAgICAgIHByb3BlcnRpZXM/OiBvYmplY3QgfCBJRGF0YU1hbmFnZXIsXHJcbiAgICAgICAgb3B0aW9ucz86IElQb2x5bGluZU9wdGlvbnMsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQb2x5bGluZU9wdGlvbnMge1xyXG4gICAgICBjdXJzb3I/OiBzdHJpbmc7XHJcbiAgICAgIGRyYWdnYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGhhc0JhbGxvb24/OiBib29sZWFuO1xyXG4gICAgICBoYXNIaW50PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3RpdmVaSW5kZXg/OiBib29sZWFuO1xyXG4gICAgICBpbnRlcmFjdGl2aXR5TW9kZWw/OiBJbnRlcmFjdGl2aXR5TW9kZWxLZXkgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGxpbmVTdHJpbmdPdmVybGF5PzogKCkgPT4gb2JqZWN0IHwgc3RyaW5nO1xyXG4gICAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgICBvcGVuQmFsbG9vbk9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIHBhbmU/OiBzdHJpbmc7XHJcbiAgICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgICAgIHN0cm9rZU9wYWNpdHk/OiBudW1iZXIgfCBudW1iZXJbXTtcclxuICAgICAgc3Ryb2tlU3R5bGU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG9iamVjdCB8IG9iamVjdFtdO1xyXG4gICAgICBzdHJva2VXaWR0aD86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICBzeW5jT3ZlcmxheUluaXQ/OiBib29sZWFuO1xyXG4gICAgICB1c2VNYXBNYXJnaW5JbkRyYWdnaW5nPzogYm9vbGVhbjtcclxuICAgICAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgICAgIHpJbmRleD86IG51bWJlcjtcclxuICAgICAgekluZGV4QWN0aXZlPzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhEcmFnPzogbnVtYmVyO1xyXG4gICAgICB6SW5kZXhIb3Zlcj86IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBQb3B1cDxUPiBpbXBsZW1lbnRzIElQb3B1cDxUPiB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zPzogSVBvcHVwT3B0aW9ucyk7XHJcblxyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIGNsb3NlKGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8VD47XHJcblxyXG4gICAgICBnZXREYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheT47XHJcblxyXG4gICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheTtcclxuXHJcbiAgICAgIGdldFBvc2l0aW9uKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgaXNPcGVuKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBvcGVuKHBvc2l0aW9uOiBudW1iZXJbXSwgZGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgSFRNTEVsZW1lbnQpOiBQcm9taXNlPFQ+O1xyXG5cclxuICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IFByb21pc2U8VD47XHJcblxyXG4gICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyW10pOiBQcm9taXNlPFQ+O1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUG9wdXBPcHRpb25zIHtcclxuICAgICAgY2xvc2VUaW1lb3V0PzogbnVtYmVyO1xyXG4gICAgICBpbnRlcmFjdGl2aXR5TW9kZWw/OiBJbnRlcmFjdGl2aXR5TW9kZWxLZXk7XHJcbiAgICAgIG9wZW5UaW1lb3V0PzogbnVtYmVyO1xyXG4gICAgICBwYW5lPzogSVBhbmUgfCBzdHJpbmc7XHJcbiAgICAgIHByb2plY3Rpb24/OiBJUHJvamVjdGlvbjtcclxuICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1Z2dlc3QocmVxdWVzdDogc3RyaW5nLCBvcHRpb25zPzogSVN1Z2dlc3RPcHRpb25zKTogUHJvbWlzZTxJU3VnZ2VzdFJlc3VsdFtdPjtcclxuXHJcbiAgICBpbnRlcmZhY2UgSVN1Z2dlc3RSZXN1bHQge1xyXG4gICAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG5cclxuICAgICAgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgICAgIGhsOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgdHlwZTogc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJU3VnZ2VzdFByb3ZpZGVyIHtcclxuICAgICAgc3VnZ2VzdChcclxuICAgICAgICByZXF1ZXN0OiBzdHJpbmcsXHJcbiAgICAgICAgb3B0aW9ucz86IE9taXQ8SVN1Z2dlc3RPcHRpb25zLCAncHJvdmlkZXInPixcclxuICAgICAgKTogUHJvbWlzZTxJU3VnZ2VzdFJlc3VsdFtdPjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVN1Z2dlc3RPcHRpb25zIHtcclxuICAgICAgYm91bmRlZEJ5PzogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgIHByb3ZpZGVyPzogSVN1Z2dlc3RQcm92aWRlciB8IHN0cmluZztcclxuXHJcbiAgICAgIHJlc3VsdHM/OiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVhZHkoXHJcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjaz86ICgpID0+IGFueSB8IElSZWFkeU9iamVjdCxcclxuICAgICAgZXJyb3JDYWxsYmFjaz86ICgpID0+IGFueSxcclxuICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgaW50ZXJmYWNlIElSZWFkeU9iamVjdCB7XHJcbiAgICAgIHJlcXVpcmU/OiBzdHJpbmdbXTtcclxuICAgICAgY29udGV4dD86IG9iamVjdDtcclxuXHJcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjaz8oKTogdm9pZDtcclxuXHJcbiAgICAgIGVycm9yQ2FsbGJhY2s/KCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElSZWN0YW5nbGVQcm9wZXJ0aWVzIHtcclxuICAgICAgaGludENvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICAgIGJhbGxvb25Db250ZW50Pzogc3RyaW5nO1xyXG4gICAgICBiYWxsb29uQ29udGVudEhlYWRlcj86IHN0cmluZztcclxuICAgICAgYmFsbG9vbkNvbnRlbnRCb2R5Pzogc3RyaW5nO1xyXG4gICAgICBiYWxsb29uQ29udGVudEZvb3Rlcj86IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVJlY3RhbmdsZU9wdGlvbnNcclxuICAgICAgZXh0ZW5kcyBJQmFsbG9vbk9wdGlvbnNXaXRoQmFsbG9vblByZWZpeCxcclxuICAgICAgICBJSGludE9wdGlvbnNXaXRoSGludFByZWZpeCB7XHJcbiAgICAgIGN1cnNvcj86IHN0cmluZztcclxuICAgICAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcclxuICAgICAgZmlsbD86IGJvb2xlYW47XHJcbiAgICAgIGZpbGxDb2xvcj86IHN0cmluZztcclxuICAgICAgZmlsbEltYWdlSHJlZj86IHN0cmluZztcclxuICAgICAgZmlsbE1ldGhvZD86IHN0cmluZztcclxuICAgICAgZmlsbE9wYWNpdHk/OiBudW1iZXI7XHJcbiAgICAgIGhhc0JhbGxvb24/OiBib29sZWFuO1xyXG4gICAgICBoYXNIaW50PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3RpdmVaSW5kZXg/OiBib29sZWFuO1xyXG4gICAgICBpbnRlcmFjdGl2aXR5TW9kZWw/OiBJbnRlcmFjdGl2aXR5TW9kZWxLZXk7XHJcbiAgICAgIG9wYWNpdHk/OiBudW1iZXI7XHJcbiAgICAgIG9wZW5CYWxsb29uT25DbGljaz86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5FbXB0eUJhbGxvb24/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlIaW50PzogYm9vbGVhbjtcclxuICAgICAgb3BlbkhpbnRPbkhvdmVyPzogYm9vbGVhbjtcclxuICAgICAgb3V0bGluZT86IGJvb2xlYW47XHJcbiAgICAgIHBhbmU/OiBzdHJpbmc7XHJcbiAgICAgIHJlY3RhbmdsZU92ZXJsYXk/OlxyXG4gICAgICAgIHwgT3ZlcmxheUtleVxyXG4gICAgICAgIHwgKChcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IElQaXhlbENpcmNsZUdlb21ldHJ5LFxyXG4gICAgICAgICAgICBkYXRhOiBJRGF0YU1hbmFnZXIgfCBvYmplY3QsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IG9iamVjdCxcclxuICAgICAgICAgICkgPT4gdm93LlByb21pc2UpO1xyXG4gICAgICBzdHJva2VDb2xvcj86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gICAgICBzdHJva2VPcGFjaXR5PzogbnVtYmVyIHwgbnVtYmVyW107XHJcbiAgICAgIHN0cm9rZVN0eWxlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBvYmplY3QgfCBvYmplY3RbXTtcclxuICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBudW1iZXJbXTtcclxuICAgICAgc3luY092ZXJsYXlJbml0PzogYm9vbGVhbjtcclxuICAgICAgdXNlTWFwTWFyZ2luSW5EcmFnZ2luZz86IGJvb2xlYW47XHJcbiAgICAgIHZpc2libGU/OiBib29sZWFuO1xyXG4gICAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICAgIHpJbmRleEFjdGl2ZT86IG51bWJlcjtcclxuICAgICAgekluZGV4RHJhZz86IG51bWJlcjtcclxuICAgICAgekluZGV4SG92ZXI/OiBudW1iZXI7XHJcblxyXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElSZWN0YW5nbGVHZW9tZXRyeUFjY2VzcyBleHRlbmRzIElGcmVlemFibGUge1xyXG4gICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgZ2V0Q2xvc2VzdChhbmNob3JQb3NpdGlvbjogbnVtYmVyW10pOiBvYmplY3Q7XHJcblxyXG4gICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdW10pOiBJUmVjdGFuZ2xlR2VvbWV0cnlBY2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElSZWN0YW5nbGVHZW9tZXRyeSBleHRlbmRzIElHZW9tZXRyeSwgSVJlY3RhbmdsZUdlb21ldHJ5QWNjZXNzIHtcclxuICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MgUmVjdGFuZ2xlIGV4dGVuZHMgR2VvT2JqZWN0PElMaW5lU3RyaW5nR2VvbWV0cnk+IHtcclxuICAgICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgZ2VvbWV0cnk6IG51bWJlcltdW10gfCBvYmplY3QgfCBJUmVjdGFuZ2xlR2VvbWV0cnksXHJcbiAgICAgICAgcHJvcGVydGllcz86IElSZWN0YW5nbGVQcm9wZXJ0aWVzIHwgSURhdGFNYW5hZ2VyLFxyXG4gICAgICAgIG9wdGlvbnM/OiBJUmVjdGFuZ2xlT3B0aW9ucyxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgcmVnaW9ucyB7XHJcbiAgICAgIGZ1bmN0aW9uIGxvYWQoXHJcbiAgICAgICAgcmVnaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGRpc3B1dGVkQm9yZGVycz86IHN0cmluZztcclxuICAgICAgICAgIGxhbmc/OiBzdHJpbmc7XHJcbiAgICAgICAgICBxdWFsaXR5PzogbnVtYmVyO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk6IHZvdy5Qcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5hbWVzcGFjZSB0ZW1wbGF0ZSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcnNTdG9yYWdlOiB1dGlsLlN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIHRlbXBsYXRlTGF5b3V0RmFjdG9yeSB7XHJcbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzPE8gZXh0ZW5kcyBvYmplY3QgPSBvYmplY3QsIFMgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KFxyXG4gICAgICAgIHRlbXBsYXRlOiBzdHJpbmcsXHJcbiAgICAgICAgb3ZlcnJpZGVzPzogTyxcclxuICAgICAgICBzdGF0aWNNZXRob2RzPzogUyxcclxuICAgICAgKTogSUNsYXNzQ29uc3RydWN0b3I8bGF5b3V0LnRlbXBsYXRlQmFzZWQuQmFzZSAmIE8gJiBTPjtcclxuICAgIH1cclxuXHJcbiAgICB0eXBlIFJlc29sdmVDYWxsYmFja0Z1bmN0aW9uID0gKFxyXG4gICAgICBwcm92aWRlOiAobW9kdWxlOiBhbnksIGVycm9yPzogYW55KSA9PiB2b2lkLFxyXG4gICAgICAuLi5kZXBlbmRzOiBhbnlbXVxyXG4gICAgKSA9PiB2b2lkO1xyXG5cclxuICAgIGludGVyZmFjZSBJUmF0aW9NYXAge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIHV0aWwge1xyXG4gICAgICBjbGFzcyBBc3luY1N0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcclxuICAgICAgICBkZWZpbmUoXHJcbiAgICAgICAgICBrZXk6IHN0cmluZyxcclxuICAgICAgICAgIGRlcGVuZHM6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgcmVzb2x2ZUNhbGxiYWNrOiBSZXNvbHZlQ2FsbGJhY2tGdW5jdGlvbixcclxuICAgICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgICAgZGVmaW5lKGtleTogc3RyaW5nLCByZXNvbHZlQ2FsbGJhY2s6IFJlc29sdmVDYWxsYmFja0Z1bmN0aW9uLCBjb250ZXh0Pzogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgICAgaXNEZWZpbmVkKGtleTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgcmVxdWlyZShcclxuICAgICAgICAgIGtleXM6IHN0cmluZyB8IHN0cmluZ1tdLFxyXG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrPzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxyXG4gICAgICAgICAgZXJyb3JDYWxsYmFjaz86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICApOiB2b3cuUHJvbWlzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gYXVnbWVudChDaGlsZENsYXNzOiBhbnksIFBhcmVudENsYXNzOiBhbnksIG92ZXJyaWRlOiBvYmplY3QpOiBhbnk7XHJcblxyXG4gICAgICBmdW5jdGlvbiBiaW5kKGNhbGxiYWNrOiBhbnksIGNvbnRleHQ6IG9iamVjdCk6IGFueTtcclxuXHJcbiAgICAgIGNvbnN0IGJvdW5kczoge1xyXG4gICAgICAgIGFyZUludGVyc2VjdGluZyhcclxuICAgICAgICAgIGJvdW5kczE6IG51bWJlcltdW10sXHJcbiAgICAgICAgICBib3VuZHMyOiBudW1iZXJbXVtdLFxyXG4gICAgICAgICAgcHJvamVjdGlvbj86IHR5cGVvZiB5bWFwcy5wcm9qZWN0aW9uLndnczg0TWVyY2F0b3IsXHJcbiAgICAgICAgKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgY29udGFpbnNCb3VuZHMoXHJcbiAgICAgICAgICBvdXRlcjogbnVtYmVyW11bXSxcclxuICAgICAgICAgIGlubmVyOiBudW1iZXJbXVtdLFxyXG4gICAgICAgICAgcHJvamVjdGlvbj86IHR5cGVvZiB5bWFwcy5wcm9qZWN0aW9uLndnczg0TWVyY2F0b3IsXHJcbiAgICAgICAgKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgY29udGFpbnNQb2ludChcclxuICAgICAgICAgIGJvdW5kczogbnVtYmVyW11bXSxcclxuICAgICAgICAgIHBvaW50OiBudW1iZXJbXSxcclxuICAgICAgICAgIHByb2plY3Rpb24/OiB0eXBlb2YgeW1hcHMucHJvamVjdGlvbi53Z3M4NE1lcmNhdG9yLFxyXG4gICAgICAgICk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGZyb21Cb3VuZHMoXHJcbiAgICAgICAgICBzb3VyY2VCb3VuZHM6IG51bWJlcltdW10sXHJcbiAgICAgICAgICBwcm9qZWN0aW9uPzogdHlwZW9mIHltYXBzLnByb2plY3Rpb24ud2dzODRNZXJjYXRvcixcclxuICAgICAgICApOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICBmcm9tR2xvYmFsUGl4ZWxCb3VuZHMoXHJcbiAgICAgICAgICBwaXhlbEJvdW5kczogbnVtYmVyW11bXSxcclxuICAgICAgICAgIHpvb206IG51bWJlcixcclxuICAgICAgICAgIHByb2plY3Rpb24/OiB0eXBlb2YgeW1hcHMucHJvamVjdGlvbi53Z3M4NE1lcmNhdG9yLFxyXG4gICAgICAgICk6IG51bWJlcltdW107XHJcblxyXG4gICAgICAgIGZyb21Qb2ludHMoXHJcbiAgICAgICAgICBwb2ludHM6IG51bWJlcltdW10sXHJcbiAgICAgICAgICBwcm9qZWN0aW9uPzogdHlwZW9mIHltYXBzLnByb2plY3Rpb24ud2dzODRNZXJjYXRvcixcclxuICAgICAgICApOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICBnZXRDZW50ZXIoYm91bmRzOiBudW1iZXJbXVtdLCBwcm9qZWN0aW9uPzogdHlwZW9mIHltYXBzLnByb2plY3Rpb24ud2dzODRNZXJjYXRvcik6IG51bWJlcltdO1xyXG5cclxuICAgICAgICBnZXRDZW50ZXJBbmRab29tKFxyXG4gICAgICAgICAgYm91bmRzOiBudW1iZXJbXVtdLFxyXG4gICAgICAgICAgY29udGFpbmVyU2l6ZTogbnVtYmVyW10sXHJcbiAgICAgICAgICBwcm9qZWN0aW9uPzogdHlwZW9mIHltYXBzLnByb2plY3Rpb24ud2dzODRNZXJjYXRvcixcclxuICAgICAgICAgIHBhcmFtcz86IHtcclxuICAgICAgICAgICAgaW5zY3JpYmU/OiBib29sZWFuO1xyXG4gICAgICAgICAgICBtYXJnaW4/OiBudW1iZXIgfCBudW1iZXJbXTtcclxuICAgICAgICAgICAgcHJlY2lzZVpvb20/OiBib29sZWFuO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApOiBvYmplY3Q7XHJcblxyXG4gICAgICAgIGdldEludGVyc2VjdGlvbnMoXHJcbiAgICAgICAgICBib3VuZHMxOiBudW1iZXJbXVtdLFxyXG4gICAgICAgICAgYm91bmRzMjogbnVtYmVyW11bXSxcclxuICAgICAgICAgIHByb2plY3Rpb24/OiB0eXBlb2YgeW1hcHMucHJvamVjdGlvbi53Z3M4NE1lcmNhdG9yLFxyXG4gICAgICAgICk6IG51bWJlcltdW11bXTtcclxuXHJcbiAgICAgICAgZ2V0U2l6ZShib3VuZHM6IG51bWJlcltdW10sIHByb2plY3Rpb24/OiB0eXBlb2YgeW1hcHMucHJvamVjdGlvbi53Z3M4NE1lcmNhdG9yKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIHRvR2xvYmFsUGl4ZWxCb3VuZHMoXHJcbiAgICAgICAgICBnZW9Cb3VuZHM6IG51bWJlcltdW10sXHJcbiAgICAgICAgICB6b29tOiBudW1iZXJbXSxcclxuICAgICAgICAgIHByb2plY3Rpb24/OiB0eXBlb2YgeW1hcHMucHJvamVjdGlvbi53Z3M4NE1lcmNhdG9yLFxyXG4gICAgICAgICk6IG51bWJlcltdW107XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBuYW1lc3BhY2UgY3Vyc29yIHtcclxuICAgICAgICBjbGFzcyBBY2Nlc3NvciB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZyk7XHJcblxyXG4gICAgICAgICAgZ2V0S2V5KCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgICByZW1vdmUoKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBzZXRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgTWFuYWdlciB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBldmVudC5NYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIHB1c2goa2V5OiBzdHJpbmcpOiBBY2Nlc3NvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmluZUNsYXNzKGNvbnN0cnVjdG9yOiBhbnksIHBhcmVudENsYXNzPzogYW55LCBvdmVycmlkZT86IG9iamVjdCk6IGFueTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmluZUNsYXNzKGNvbnN0cnVjdG9yOiBhbnksIG92ZXJyaWRlPzogb2JqZWN0KTogYW55O1xyXG5cclxuICAgICAgY2xhc3MgRHJhZ2dlciBpbXBsZW1lbnRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKHBhcmFtcz86IHtcclxuICAgICAgICAgIGF1dG9TdGFydEVsZW1lbnQ/OiBIVE1MRWxlbWVudCB8IElEb21FdmVudEVtaXR0ZXI7XHJcbiAgICAgICAgICBieVJpZ2h0QnV0dG9uPzogYm9vbGVhbjtcclxuICAgICAgICAgIHRyZW1vcj86IG51bWJlcjtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGlzRHJhZ2dpbmcoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgc3RhcnQoZXZlbnQ6IElEb21FdmVudCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHN0b3AoKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gZXh0ZW5kKHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2U6IG9iamVjdFtdKTogb2JqZWN0O1xyXG5cclxuICAgICAgY29uc3QgaGQ6IHtcclxuICAgICAgICBnZXRQaXhlbFJhdGlvKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgc2VsZWN0UmF0aW8oaGFzaDogSVJhdGlvTWFwKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBzZWxlY3RWYWx1ZShoYXNoOiBvYmplY3QgfCBJUmF0aW9NYXApOiBvYmplY3Q7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBuYW1lc3BhY2UgbWF0aCB7XHJcbiAgICAgICAgZnVuY3Rpb24gYXJlRXF1YWwoZmlyc3Q6IG51bWJlcltdLCBzZWNvbmQ6IG51bWJlcltdLCBkaWZmPzogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY3ljbGVSZXN0cmljdCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXI7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3RyaWN0KHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGl4ZWxCb3VuZHM6IHtcclxuICAgICAgICBhcmVJbnRlcnNlY3RpbmcoYm91bmRzMTogbnVtYmVyW11bXSwgYm91bmRzMjogbnVtYmVyW11bXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGNvbnRhaW5zQm91bmRzKG91dGVyOiBudW1iZXJbXVtdLCBpbm5lcjogbnVtYmVyW11bXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGNvbnRhaW5zUG9pbnQoYm91bmRzOiBudW1iZXJbXVtdLCBwb2ludDogbnVtYmVyW11bXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIGZyb21Cb3VuZHMoc291cmNlQm91bmRzOiBudW1iZXJbXVtdKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgICAgZnJvbVBvaW50cyhwb2ludHM6IG51bWJlcltdW10pOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgICBnZXRDZW50ZXIoYm91bmRzOiBudW1iZXJbXVtdKTogbnVtYmVyW107XHJcblxyXG4gICAgICAgIGdldEludGVyc2VjdGlvbihib3VuZHMxOiBudW1iZXJbXVtdLCBib3VuZHMyOiBudW1iZXJbXVtdKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldFNpemUoYm91bmRzOiBudW1iZXJbXVtdKTogbnVtYmVyW107XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmdW5jdGlvbiByZXF1aXJlQ2VudGVyQW5kWm9vbShcclxuICAgICAgICBtYXBUeXBlOiBzdHJpbmcgfCBNYXBUeXBlIHwgbWFwLlpvb21SYW5nZSxcclxuICAgICAgICBib3VuZHM6IG51bWJlcltdW10sXHJcbiAgICAgICAgY29udGFpbmVyU2l6ZTogbnVtYmVyW10sXHJcbiAgICAgICAgcGFyYW1zPzoge1xyXG4gICAgICAgICAgaW5zY3JpYmU/OiBib29sZWFuO1xyXG4gICAgICAgICAgbWFyZ2luPzogbnVtYmVyIHwgbnVtYmVyW107XHJcbiAgICAgICAgICBwcmVjaXNlWm9vbT86IGJvb2xlYW47XHJcbiAgICAgICAgfSxcclxuICAgICAgKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICBjbGFzcyBTdG9yYWdlIHtcclxuICAgICAgICBhZGQoa2V5OiBzdHJpbmcsIG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IHRoaXM7XHJcblxyXG4gICAgICAgIGdldChrZXk6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xyXG5cclxuICAgICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB0aGlzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIHZvdyB7XHJcbiAgICAgIGNsYXNzIERlZmVycmVkIHtcclxuICAgICAgICBwcm9taXNlKCk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICByZWplY3QocmVhc29uOiBhbnkpOiB2b2lkO1xyXG5cclxuICAgICAgICByZXNvbHZlKHZhbHVlOiBhbnkpOiB2b2lkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBQcm9taXNlIHtcclxuICAgICAgICBjb25zdHJ1Y3RvcihyZXNvbHZlcj86IChyZXNvbHZlPzogYW55LCByZWplY3Q/OiBhbnkpID0+IHZvaWQpO1xyXG5cclxuICAgICAgICBkb25lKFxyXG4gICAgICAgICAgb25GdWxmaWxsZWQ/OiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXHJcbiAgICAgICAgICBvblJlamVjdGVkPzogKGVycj86IEVycm9yIHwgYW55KSA9PiB2b2lkLFxyXG4gICAgICAgICAgb25Qcm9ncmVzcz86ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgICAgICAgIGN0eD86IG9iamVjdCxcclxuICAgICAgICApOiB2b2lkO1xyXG5cclxuICAgICAgICBzcHJlYWQoXHJcbiAgICAgICAgICBvbkZ1bGZpbGxlZD86ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgICAgICAgIG9uUmVqZWN0ZWQ/OiAoZXJyPzogRXJyb3IgfCBhbnkpID0+IHZvaWQsXHJcbiAgICAgICAgICBjdHg/OiBvYmplY3QsXHJcbiAgICAgICAgKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIHRoZW4oXHJcbiAgICAgICAgICBvbkZ1bGZpbGxlZD86ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgICAgICAgIG9uUmVqZWN0ZWQ/OiAoZXJyPzogRXJyb3IgfCBhbnkpID0+IHZvaWQsXHJcbiAgICAgICAgICBvblByb2dyZXNzPzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxyXG4gICAgICAgICAgY3R4Pzogb2JqZWN0LFxyXG4gICAgICAgICk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgICB2YWx1ZU9mKCk6IG9iamVjdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gYWxsKGl0ZXJhYmxlOiBhbnkpOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGRlZmVyKCk6IHZvdy5EZWZlcnJlZDtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHJlamVjdChyZWFzb246IGFueSk6IHZvdy5Qcm9taXNlO1xyXG5cclxuICAgICAgZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZTogYW55KTogdm93LlByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyogSW50ZXJmYWNlcyAqL1xyXG5cclxuICAgIGludGVyZmFjZSBJQmFsb29uPFQ+IGV4dGVuZHMgSVBvcHVwPFQ+LCBJQ3VzdG9taXphYmxlLCBJQ2hpbGQ8VD4sIElGcmVlemFibGUge1xyXG4gICAgICBhdXRvUGFuKCk6IFByb21pc2U8VD47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElCYWxsb29uTWFuYWdlcjxUPiBleHRlbmRzIElQb3B1cE1hbmFnZXI8VD4ge1xyXG4gICAgICBhdXRvUGFuKCk6IFByb21pc2U8VD47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElCYXNlR2VvbWV0cnkgZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0VHlwZSgpOiBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElCYXNlTGluZVN0cmluZ0dlb21ldHJ5IGV4dGVuZHMgSUJhc2VHZW9tZXRyeSwgSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcyB7fVxyXG5cclxuICAgIGludGVyZmFjZSBJQmFzZVBvaW50R2VvbWV0cnkgZXh0ZW5kcyBJQmFzZUdlb21ldHJ5LCBJUG9pbnRHZW9tZXRyeUFjY2VzcyB7fVxyXG5cclxuICAgIGludGVyZmFjZSBJQmFzZVBvbHlnb25HZW9tZXRyeSBleHRlbmRzIElCYXNlR2VvbWV0cnksIElQb2x5Z29uR2VvbWV0cnlBY2Nlc3Mge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSUJlaGF2aW9yIGV4dGVuZHMgSUNoaWxkT25NYXAsIElDdXN0b21pemFibGUge1xyXG4gICAgICBkaXNhYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICBlbmFibGUoKTogdm9pZDtcclxuXHJcbiAgICAgIGlzRW5hYmxlZCgpOiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJQ2hpbGQ8VD4gZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICBzZXRQYXJlbnQocGFyZW50OiBvYmplY3QgfCBudWxsKTogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0eXBlIElDaGlsZE9uTWFwID0gSUNoaWxkPElDb250cm9sUGFyZW50PjtcclxuXHJcbiAgICBpbnRlcmZhY2UgSUNpcmNsZUdlb21ldHJ5IGV4dGVuZHMgSUNpcmNsZUdlb21ldHJ5QWNjZXNzLCBJR2VvbWV0cnkge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNpcmNsZUdlb21ldHJ5QWNjZXNzIGV4dGVuZHMgSUZyZWV6YWJsZSB7XHJcbiAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgIGdldFJhZGl1cygpOiBudW1iZXI7XHJcblxyXG4gICAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogbnVtYmVyW10gfCBudWxsKTogSUNpcmNsZUdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgc2V0UmFkaXVzKHJhZGl1czogbnVtYmVyKTogSUNpcmNsZUdlb21ldHJ5QWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJQ29sbGVjdGlvbiBleHRlbmRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICBhZGQob2JqZWN0OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgcmVtb3ZlKG9iamVjdDogb2JqZWN0KTogdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNvbnRhaW5lclBhbmUgZXh0ZW5kcyBJUGFuZSwgSVBvc2l0aW9uaW5nQ29udGV4dCB7fVxyXG5cclxuICAgIHR5cGUgSUNvbnRyb2wgPSBJQ2hpbGRPbk1hcDtcclxuXHJcbiAgICBpbnRlcmZhY2UgSUNvbnRyb2xQYXJlbnQgZXh0ZW5kcyBJUGFyZW50T25NYXAge1xyXG4gICAgICBnZXRDaGlsZEVsZW1lbnQoY2hpbGQ6IElDb250cm9sKTogUHJvbWlzZTxIVE1MRWxlbWVudD47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElDb29yZFN5c3RlbSB7XHJcbiAgICAgIGdldERpc3RhbmNlKHBvaW50MTogbnVtYmVyW10sIHBvaW50MjogbnVtYmVyW10pOiBudW1iZXI7XHJcblxyXG4gICAgICBzb2x2ZURpcmVjdFByb2JsZW0oc3RhcnRQb2ludDogbnVtYmVyW10sIGRpcmVjdGlvbjogbnVtYmVyW10sIGRpc3RhbmNlOiBudW1iZXIpOiBvYmplY3Q7XHJcblxyXG4gICAgICBzb2x2ZUludmVyc2VQcm9ibGVtKFxyXG4gICAgICAgIHN0YXJ0UG9pbnQ6IG51bWJlcltdLFxyXG4gICAgICAgIGVuZFBvaW50OiBudW1iZXJbXSxcclxuICAgICAgICByZXZlcnNlRGlyZWN0aW9uPzogYm9vbGVhbixcclxuICAgICAgKTogb2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSUNvcHlyaWdodHNBY2Nlc3NvciA9IElDb3B5cmlnaHRzUHJvdmlkZXI7XHJcblxyXG4gICAgaW50ZXJmYWNlIElDb3B5cmlnaHRzUHJvdmlkZXIgZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgZ2V0Q29weXJpZ2h0cyhjb29yZHM6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50Pj47XHJcblxyXG4gICAgICByZW1vdmUoKTogdm9pZDtcclxuXHJcbiAgICAgIHNldENvcHlyaWdodHMoY29weXJpZ2h0czogc3RyaW5nIHwgSFRNTEVsZW1lbnQgfCBBcnJheTxzdHJpbmcgfCBIVE1MRWxlbWVudD4pOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJQ3VzdG9taXphYmxlIGV4dGVuZHMgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIG9wdGlvbnM6IElPcHRpb25NYW5hZ2VyO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJRGF0YU1hbmFnZXIgZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgc2V0KGtleTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZywgdmFsdWU/OiBhbnkpOiB0aGlzO1xyXG5cclxuICAgICAgZ2V0KHBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55KTogYW55O1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSURvbUV2ZW50RW1pdHRlciA9IElFdmVudEVtaXR0ZXI7XHJcblxyXG4gICAgaW50ZXJmYWNlIElFdmVudDxPcmlnaW5hbEV2ZW50ID0gb2JqZWN0LCBUYXJnZXRHZW9tZXRyeSA9IG9iamVjdD4ge1xyXG4gICAgICBvcmlnaW5hbEV2ZW50OiB7XHJcbiAgICAgICAgZG9tRXZlbnQ6IHtcclxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IE9yaWdpbmFsRXZlbnQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0YXJnZXQ6IHtcclxuICAgICAgICAgIGdlb21ldHJ5PzogVGFyZ2V0R2VvbWV0cnkgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGFsbG93TWFwRXZlbnQoKTogdm9pZDtcclxuXHJcbiAgICAgIGNhbGxNZXRob2QobmFtZTogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgICAgIGdldDxUIGV4dGVuZHMgT3JpZ2luYWxFdmVudCwgSyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPihuYW1lOiBLKTogVFtLXTtcclxuXHJcbiAgICAgIGdldChuYW1lOiAndHlwZScpOiBzdHJpbmc7XHJcblxyXG4gICAgICBnZXQobmFtZTogJ29iamVjdElkJyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgIGdldChuYW1lOiAnbmV3Wm9vbScgfCAnb2xkWm9vbScpOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICBnZXQobmFtZTogc3RyaW5nKTogYW55O1xyXG5cclxuICAgICAgZ2V0U291cmNlRXZlbnQoKTogSUV2ZW50PE9yaWdpbmFsRXZlbnQsIFRhcmdldEdlb21ldHJ5PiB8IG51bGw7XHJcblxyXG4gICAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBpc01hcEV2ZW50QWxsb3dlZCgpOiBib29sZWFuO1xyXG5cclxuICAgICAgaXNQcm9wYWdhdGlvblN0b3BwZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHByZXZlbnREZWZhdWx0KCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHN0b3BQcm9wYWdhdGlvbigpOiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJRG9tRXZlbnQ8T3JpZ2luYWxFdmVudCA9IG9iamVjdCwgVGFyZ2V0R2VvbWV0cnkgPSBvYmplY3Q+XHJcbiAgICAgIGV4dGVuZHMgSUV2ZW50PE9yaWdpbmFsRXZlbnQsIFRhcmdldEdlb21ldHJ5PiB7XHJcbiAgICAgIGdldFNvdXJjZUV2ZW50KCk6IElEb21FdmVudDxPcmlnaW5hbEV2ZW50LCBUYXJnZXRHZW9tZXRyeT47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElFdmVudENvbnRyb2xsZXIge1xyXG4gICAgICBvblN0YXJ0TGlzdGVuaW5nPyhldmVudHM6IElFdmVudE1hbmFnZXIsIHR5cGU6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gICAgICBvblN0b3BMaXN0ZW5pbmc/KGV2ZW50czogSUV2ZW50TWFuYWdlciwgdHlwZTogc3RyaW5nKTogdm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUV2ZW50R3JvdXAge1xyXG4gICAgICBhZGQ8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPihcclxuICAgICAgICB0eXBlczogSyxcclxuICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBFdmVudE1hcFtLXSB8IElFdmVudCkgPT4gdm9pZCxcclxuICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxyXG4gICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgYWRkKFxyXG4gICAgICAgIHR5cGVzOiBzdHJpbmdbXVtdIHwgc3RyaW5nW10gfCBzdHJpbmcsXHJcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogb2JqZWN0IHwgSUV2ZW50KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICAgcHJpb3JpdHk/OiBudW1iZXIsXHJcbiAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICByZW1vdmUoXHJcbiAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBvYmplY3QgfCBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgIHJlbW92ZUFsbCgpOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJRXZlbnRNYW5hZ2VyPFRhcmdldEdlb21ldHJ5ID0gb2JqZWN0PiBleHRlbmRzIElFdmVudFRyaWdnZXIge1xyXG4gICAgICBhZGQoXHJcbiAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgIGdldFBhcmVudCgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgZ3JvdXAoKTogSUV2ZW50R3JvdXA7XHJcblxyXG4gICAgICByZW1vdmUoXHJcbiAgICAgICAgdHlwZXM6IHN0cmluZ1tdW10gfCBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBvYmplY3QgfCBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgY29udGV4dD86IG9iamVjdCxcclxuICAgICAgICBwcmlvcml0eT86IG51bWJlcixcclxuICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCB8IG51bGwpOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJRXZlbnRQYW5lIGV4dGVuZHMgSURvbUV2ZW50RW1pdHRlciwgSVBhbmUge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSUV2ZW50VHJpZ2dlciB7XHJcbiAgICAgIGZpcmUodHlwZTogc3RyaW5nLCBldmVudE9iamVjdD86IG9iamVjdCB8IElFdmVudCk6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElFdmVudFdvcmtmbG93Q29udHJvbGxlciBleHRlbmRzIElFdmVudENvbnRyb2xsZXIge1xyXG4gICAgICBvbkFmdGVyRXZlbnRGaXJpbmc/KGV2ZW50czogSUV2ZW50TWFuYWdlciwgdHlwZTogc3RyaW5nLCBldmVudD86IElFdmVudCk6IHZvaWQ7XHJcblxyXG4gICAgICBvbkJlZm9yZUV2ZW50RmlyaW5nPyhldmVudHM6IElFdmVudE1hbmFnZXIsIHR5cGU6IHN0cmluZywgZXZlbnQ/OiBJRXZlbnQpOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSUV4cGFuZGFibGVDb250cm9sTGF5b3V0ID0gSUxheW91dDtcclxuXHJcbiAgICBpbnRlcmZhY2UgSUZyZWV6YWJsZSB7XHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIGZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHVuZnJlZXplKCk6IElGcmVlemFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9jb2RlUHJvdmlkZXIge1xyXG4gICAgICBnZW9jb2RlKFxyXG4gICAgICAgIHJlcXVlc3Q6IHN0cmluZyxcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYm91bmRlZEJ5PzogbnVtYmVyW11bXTtcclxuICAgICAgICAgIHJlc3VsdHM/OiBudW1iZXI7XHJcbiAgICAgICAgICBza2lwPzogbnVtYmVyO1xyXG4gICAgICAgICAgc3RyaWN0Qm91bmRzPzogYm9vbGVhbjtcclxuICAgICAgICB9LFxyXG4gICAgICApOiBQcm9taXNlPG9iamVjdD47XHJcblxyXG4gICAgICBzdWdnZXN0KFxyXG4gICAgICAgIHJlcXVlc3Q6IHN0cmluZyxcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgYm91bmRlZEJ5PzogbnVtYmVyW11bXTtcclxuICAgICAgICAgIHJlc3VsdHM/OiBudW1iZXI7XHJcbiAgICAgICAgICBzdHJpY3RCb3VuZHM/OiBib29sZWFuO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk6IFByb21pc2U8b2JqZWN0PjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZW9jb2RlKFxyXG4gICAgICByZXF1ZXN0OiBzdHJpbmcgfCBudW1iZXJbXSxcclxuICAgICAgb3B0aW9ucz86IElHZW9jb2RlT3B0aW9ucyxcclxuICAgICk6IFByb21pc2U8SUdlb2NvZGVSZXN1bHQ+O1xyXG5cclxuICAgIGludGVyZmFjZSBJR2VvY29kZU9wdGlvbnMge1xyXG4gICAgICBib3VuZGVkQnk/OiBudW1iZXJbXVtdO1xyXG4gICAgICBqc29uPzogYm9vbGVhbjtcclxuICAgICAga2luZD86IHN0cmluZztcclxuICAgICAgcHJvdmlkZXI/OiBJR2VvY29kZVByb3ZpZGVyIHwgc3RyaW5nO1xyXG4gICAgICByZXN1bHRzPzogbnVtYmVyO1xyXG4gICAgICBzZWFyY2hDb29yZE9yZGVyPzogc3RyaW5nO1xyXG4gICAgICBza2lwPzogbnVtYmVyO1xyXG4gICAgICBzdHJpY3RCb3VuZHM/OiBib29sZWFuO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJR2VvY29kZVJlc3VsdCB7XHJcbiAgICAgIGdlb09iamVjdHM6IEdlb09iamVjdENvbGxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9tZXRyeSBleHRlbmRzIElCYXNlR2VvbWV0cnksIElDdXN0b21pemFibGUge1xyXG4gICAgICBnZXRNYXAoKTogTWFwIHwgbnVsbDtcclxuXHJcbiAgICAgIGdldFBpeGVsR2VvbWV0cnkob3B0aW9ucz86IG9iamVjdCk6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgc2V0TWFwKG1hcDogTWFwKTogdm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUdlb21ldHJ5RWRpdG9yIGV4dGVuZHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnk7XHJcbiAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBzdGFydEVkaXRpbmcoKTogdm9pZDtcclxuXHJcbiAgICAgIHN0b3BFZGl0aW5nKCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9tZXRyeUVkaXRvckNoaWxkTW9kZWwgZXh0ZW5kcyBJR2VvbWV0cnlFZGl0b3JNb2RlbCB7XHJcbiAgICAgIGVkaXRvcjogSUdlb21ldHJ5RWRpdG9yO1xyXG4gICAgICBnZW9tZXRyeTogSUJhc2VHZW9tZXRyeTtcclxuXHJcbiAgICAgIGdldFBhcmVudCgpOiBJR2VvbWV0cnlFZGl0b3JNb2RlbDtcclxuXHJcbiAgICAgIHNldFBpeGVscyhwaXhlbHM6IG51bWJlcltdKTogdm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUdlb21ldHJ5RWRpdG9yTW9kZWwgZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgZ2V0UGl4ZWxzKCk6IG51bWJlcltdO1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSUdlb21ldHJ5RWRpdG9yUm9vdE1vZGVsID0gSUdlb21ldHJ5RWRpdG9yTW9kZWw7XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9tZXRyeUpzb24ge1xyXG4gICAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICAgIGNvb3JkaW5hdGVzOiBudW1iZXJbXSB8IG51bWJlcltdW10gfCBudW1iZXJbXVtdW107XHJcbiAgICAgIGZpbGxSdWxlPzogJ2V2ZW5PZGQnIHwgJ25vblplcm8nO1xyXG4gICAgICByYWRpdXM/OiBudW1iZXI7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUdlb09iamVjdDxUID0gSUdlb21ldHJ5PlxyXG4gICAgICBleHRlbmRzIElDaGlsZE9uTWFwLFxyXG4gICAgICAgIElDdXN0b21pemFibGUsXHJcbiAgICAgICAgSURvbUV2ZW50RW1pdHRlcixcclxuICAgICAgICBJUGFyZW50T25NYXAge1xyXG4gICAgICBnZW9tZXRyeTogVCB8IG51bGw7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgYmFsbG9vbj86IGdlb09iamVjdC5CYWxsb29uO1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9PYmplY3RDb2xsZWN0aW9uIGV4dGVuZHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciwgSVBhcmVudE9uTWFwIHtcclxuICAgICAgYWRkKGNoaWxkOiBJR2VvT2JqZWN0LCBpbmRleD86IG51bWJlcik6IHRoaXM7XHJcblxyXG4gICAgICBlYWNoKGNhbGxiYWNrOiAob2JqZWN0OiBJR2VvT2JqZWN0KSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogdm9pZDtcclxuXHJcbiAgICAgIGdldChpbmRleDogbnVtYmVyKTogSUdlb09iamVjdDtcclxuXHJcbiAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgICBnZXRQaXhlbEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIGluZGV4T2Yob2JqZWN0OiBJR2VvT2JqZWN0KTogbnVtYmVyO1xyXG5cclxuICAgICAgcmVtb3ZlKGNoaWxkOiBJR2VvT2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgIHJlbW92ZUFsbCgpOiB0aGlzO1xyXG5cclxuICAgICAgc2V0KGluZGV4OiBudW1iZXIsIGNoaWxkOiBJR2VvT2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElHZW9PYmplY3RTZXF1ZW5jZSBleHRlbmRzIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIsIElQYXJlbnRPbk1hcCB7XHJcbiAgICAgIGVhY2goY2FsbGJhY2s6IChnZW9PYmplY3Q6IElHZW9PYmplY3QpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBJR2VvT2JqZWN0O1xyXG5cclxuICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgIGdldFBpeGVsQm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgaW5kZXhPZihnZW9PYmplY3Q6IElHZW9PYmplY3QpOiBudW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQcm9taXNlUHJvdmlkZXIge1xyXG4gICAgICB0aGVuKG9uUmVzb2x2ZTogKCkgPT4gdm9pZCwgb25SZWplY3Q6IChlcnI/OiBFcnJvciB8IGFueSkgPT4gdm9pZCk6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZSBJR2VvUXVlcnlTb3VyY2UgPVxyXG4gICAgICB8IElHZW9PYmplY3RcclxuICAgICAgfCBJR2VvT2JqZWN0W11cclxuICAgICAgfCBJQ29sbGVjdGlvblxyXG4gICAgICB8IElDb2xsZWN0aW9uW11cclxuICAgICAgfCBJUHJvbWlzZVByb3ZpZGVyXHJcbiAgICAgIHwgdm93LlByb21pc2VcclxuICAgICAgfCBHZW9RdWVyeVJlc3VsdFxyXG4gICAgICB8IHN0cmluZ1xyXG4gICAgICB8IG9iamVjdFxyXG4gICAgICB8IG9iamVjdFtdO1xyXG5cclxuICAgIGNsYXNzIEdlb1F1ZXJ5UmVzdWx0IGltcGxlbWVudHMgSVByb21pc2VQcm92aWRlciB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKHNvdXJjZTogSUdlb1F1ZXJ5U291cmNlKTtcclxuXHJcbiAgICAgIHRoZW4ob25SZXNvbHZlOiAoKSA9PiB2b2lkLCBvblJlamVjdD86IChlcnI/OiBFcnJvciB8IGFueSkgPT4gdm9pZCwgY29udGV4dD86IG9iamVjdCk6IHRoaXM7XHJcblxyXG4gICAgICBhZGQoc291cmNlOiBJR2VvUXVlcnlTb3VyY2UpOiB0aGlzO1xyXG5cclxuICAgICAgYWRkRXZlbnRzKGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogdGhpcztcclxuXHJcbiAgICAgIGFkZFRvKGNvbGxlY3Rpb246IElDb2xsZWN0aW9uKTogdGhpcztcclxuXHJcbiAgICAgIGFkZFRvTWFwKG1hcDogTWFwKTogdGhpcztcclxuXHJcbiAgICAgIGFwcGx5Qm91bmRzVG9NYXAoXHJcbiAgICAgICAgbWFwOiBNYXAsXHJcbiAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgIGNoZWNrWm9vbVJhbmdlPzogYm9vbGVhbjtcclxuICAgICAgICAgIGR1cmF0aW9uPzogbnVtYmVyO1xyXG4gICAgICAgICAgcHJlY2lzZVpvb20/OiBib29sZWFuO1xyXG4gICAgICAgICAgdGltaW5nRlVuY3Rpb24/OiBzdHJpbmc7XHJcbiAgICAgICAgICB1c2VNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICAgICAgem9vbU1hcmdpbj86IG51bWJlciB8IG51bWJlcltdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICBjbHVzdGVyaXplKG9wdGlvbnM/OiBJQ2x1c3RlcmVyT3B0aW9ucyk6IENsdXN0ZXJlcjtcclxuXHJcbiAgICAgIGVhY2goY2FsbGJhY2s6IChlOiBhbnkpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBJR2VvT2JqZWN0O1xyXG5cclxuICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0Q2VudGVyKG1hcD86IE1hcCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0Q2VudHJhbE9iamVjdChtYXA6IE1hcCk6IElHZW9PYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0Q2xvc2VzdFRvKFxyXG4gICAgICAgIG9iamVjdDogSUdlb09iamVjdCB8IElHZW9tZXRyeSB8IE1hcCB8IG51bWJlcltdIHwgb2JqZWN0IHwgYW55LFxyXG4gICAgICApOiBJR2VvT2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgIGdldEV4dHJlbWUoa2V5OiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0Jyk6IG51bWJlcjtcclxuXHJcbiAgICAgIGdldEV4dHJlbWVPYmplY3Qoa2V5OiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0Jyk6IElHZW9PYmplY3Q7XHJcblxyXG4gICAgICBnZXRHbG9iYWxQaXhlbEJvdW5kcyhtYXA6IE1hcCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0R2xvYmFsUGl4ZWxDZW50ZXIobWFwOiBNYXApOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgICBnZXRNYXhab29tKG1hcD86IE1hcCwgb3B0aW9ucz86IHsgdXNlTWFwTWFyZ2luPzogYm9vbGVhbiB9KTogbnVtYmVyO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IHRoaXMgfCBudWxsO1xyXG5cclxuICAgICAgaW5kZXhPZihpdGVtOiBJR2VvT2JqZWN0IHwgYW55KTogbnVtYmVyO1xyXG5cclxuICAgICAgaW50ZXJzZWN0KHJlc3VsdDogdGhpcyk6IHRoaXM7XHJcblxyXG4gICAgICBpc1JlYWR5KCk6IGJvb2xlYW47XHJcblxyXG4gICAgICBtYXAoY2FsbGJhY2s6IChlOiBhbnkpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgcmVtb3ZlKFxyXG4gICAgICAgIG9iamVjdHM6IElHZW9PYmplY3QgfCBJR2VvT2JqZWN0W10gfCBJQ29sbGVjdGlvbiB8IElDb2xsZWN0aW9uW10gfCB0aGlzIHwgdm93LlByb21pc2UgfCBhbnksXHJcbiAgICAgICk6IHRoaXM7XHJcblxyXG4gICAgICByZW1vdmVFdmVudHMoZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6ICgpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgcmVtb3ZlRnJvbShjb2xsZWN0aW9uOiBJQ29sbGVjdGlvbik6IHRoaXM7XHJcblxyXG4gICAgICByZW1vdmVGcm9tTWFwKG1hcDogTWFwKTogdGhpcztcclxuXHJcbiAgICAgIHJldmVyc2UoKTogdGhpcztcclxuXHJcbiAgICAgIHNlYXJjaChjb25kaXRpb246IHN0cmluZyB8ICgobzogb2JqZWN0KSA9PiBib29sZWFuKSk6IHRoaXM7XHJcblxyXG4gICAgICBzZWFyY2hDb250YWluaW5nKFxyXG4gICAgICAgIG9iamVjdDogSUdlb09iamVjdCB8IElHZW9tZXRyeSB8IE1hcCB8IG51bWJlcltdIHwgbnVtYmVyW11bXSB8IG9iamVjdCB8IGFueSxcclxuICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgIHNlYXJjaEluc2lkZShvYmplY3Q6IElHZW9PYmplY3QgfCBJR2VvbWV0cnkgfCBNYXAgfCBhbnkpOiB0aGlzO1xyXG5cclxuICAgICAgc2VhcmNoSW50ZXJzZWN0KFxyXG4gICAgICAgIG9iamVjdDogSUdlb09iamVjdCB8IElHZW9tZXRyeSB8IE1hcCB8IGFueSxcclxuICAgICAgICBvcHRpb25zPzogeyBjb25zaWRlck9jY3VyYW5jZT86IGJvb2xlYW4gfSxcclxuICAgICAgKTogdGhpcztcclxuXHJcbiAgICAgIHNldE9wdGlvbnMoa2V5OiBzdHJpbmcgfCBvYmplY3QsIHZhbHVlPzogYW55KTogdGhpcztcclxuXHJcbiAgICAgIHNldFByb3BlcnRpZXMocGF0aDogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHRoaXM7XHJcblxyXG4gICAgICBzbGljZShiZWdpbjogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiB0aGlzO1xyXG5cclxuICAgICAgc29ydChjb21wYXJhdG9yOiBzdHJpbmcgfCAoKGE6IGFueSwgYjogYW55KSA9PiBudW1iZXIpKTogYW55O1xyXG5cclxuICAgICAgc29ydEJ5RGlzdGFuY2UoXHJcbiAgICAgICAgb2JqZWN0OiBJR2VvT2JqZWN0IHwgSUdlb21ldHJ5IHwgTWFwIHwgbnVtYmVyW10gfCBudW1iZXJbXVtdIHwgb2JqZWN0IHwgYW55LFxyXG4gICAgICApOiB0aGlzO1xyXG5cclxuICAgICAgdW5zZXRPcHRpb25zKGtleXM6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcztcclxuXHJcbiAgICAgIHVuc2V0UHJvcGVydGllcyhwYXRoOiBzdHJpbmcpOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdlb1F1ZXJ5KHNvdXJjZTogSUdlb1F1ZXJ5U291cmNlKTogR2VvUXVlcnlSZXN1bHQ7XHJcblxyXG4gICAgdHlwZSBJSGludE1hbmFnZXI8VD4gPSBJUG9wdXBNYW5hZ2VyPFQ+O1xyXG5cclxuICAgIGludGVyZmFjZSBJSXRlcmF0b3Ige1xyXG4gICAgICBnZXROZXh0KCk6IG9iamVjdCB8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElMYXllciBleHRlbmRzIElDaGlsZE9uTWFwLCBJQ3VzdG9taXphYmxlLCBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgZ2V0QnJpZ2h0bmVzcz8oKTogbnVtYmVyO1xyXG5cclxuICAgICAgZ2V0Q29weXJpZ2h0cz8oY29vcmRzOiBudW1iZXJbXSwgem9vbTogbnVtYmVyKTogUHJvbWlzZTxBcnJheTxzdHJpbmcgfCBIVE1MRWxlbWVudD4+O1xyXG5cclxuICAgICAgZ2V0Wm9vbVJhbmdlPyhwb2ludDogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcltdPjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUxheW91dCBleHRlbmRzIElEb21FdmVudEVtaXR0ZXIge1xyXG4gICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICBnZXREYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldFBhcmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICBnZXRTaGFwZSgpOiBJU2hhcGUgfCBudWxsO1xyXG5cclxuICAgICAgaXNFbXB0eSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgc2V0UGFyZW50RWxlbWVudChwYXJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3MgZXh0ZW5kcyBJRnJlZXphYmxlIHtcclxuICAgICAgY29udGFpbihwb3NpdGlvbjogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGZyZWV6ZSgpOiBJRnJlZXphYmxlO1xyXG5cclxuICAgICAgZ2V0KGluZGV4OiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldENoaWxkR2VvbWV0cnkoaW5kZXg6IG51bWJlcik6IElQb2ludEdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgZ2V0Q2xvc2VzdChhbmNob3JQb3NpdGlvbjogbnVtYmVyW10pOiBvYmplY3Q7XHJcblxyXG4gICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdO1xyXG5cclxuICAgICAgZ2V0RmlsbFJ1bGUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgIGluc2VydChpbmRleDogbnVtYmVyLCBjb29yZGluYXRlczogbnVtYmVyW10pOiBJTGluZWFyUmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgaXNGcm96ZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHJlbW92ZShpbmRleDogbnVtYmVyKTogbnVtYmVyW107XHJcblxyXG4gICAgICBzZXQoaW5kZXg6IG51bWJlciwgY29vcmRpbmF0ZXM6IG51bWJlcltdKTogSUxpbmVhclJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdKTogSUxpbmVhclJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHNldEZpbGxSdWxlKGZpbGxSdWxlOiBzdHJpbmcpOiBJTGluZWFyUmluZ0dlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgc3BsaWNlKGluZGV4OiBudW1iZXIsIG51bWJlcjogbnVtYmVyKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgIHVuZnJlZXplKCk6IElGcmVlemFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElMaW5lU3RyaW5nR2VvbWV0cnkgZXh0ZW5kcyBJR2VvbWV0cnksIElMaW5lU3RyaW5nR2VvbWV0cnlBY2Nlc3Mge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcyBleHRlbmRzIElGcmVlemFibGUge1xyXG4gICAgICBnZXQoaW5kZXg6IG51bWJlcik6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0Q2hpbGRHZW9tZXRyeShpbmRleDogbnVtYmVyKTogSVBvaW50R2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW107XHJcblxyXG4gICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgaW5zZXJ0KGluZGV4OiBudW1iZXIsIGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHJlbW92ZShpbmRleDogbnVtYmVyKTogbnVtYmVyW107XHJcblxyXG4gICAgICBzZXQoaW5kZXg6IG51bWJlciwgY29vcmRpbmF0ZXM6IG51bWJlcltdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdKTogSUxpbmVTdHJpbmdHZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHNwbGljZShpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IG51bWJlcltdW107XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElNYXBBY3Rpb24gZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgYmVnaW4obWFwQWN0aW9uTWFuYWdlcjogbWFwLmFjdGlvbi5NYW5hZ2VyKTogdm9pZDtcclxuXHJcbiAgICAgIGVuZCgpOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJTWFwT2JqZWN0Q29sbGVjdGlvbiBleHRlbmRzIElDb2xsZWN0aW9uLCBJQ3VzdG9taXphYmxlLCBJUGFyZW50T25NYXAge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSU11bHRpUm91dGVNb2RlbEpzb24ge1xyXG4gICAgICBwYXJhbXM/OiBJTXVsdGlSb3V0ZVBhcmFtcztcclxuICAgICAgcmVmZXJlbmNlUG9pbnRzOiBJTXVsdGlSb3V0ZVJlZmVyZW5jZVBvaW50W107XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElNdWx0aVJvdXRlUGFyYW1zIHtcclxuICAgICAgYXZvaWRUcmFmZmljSmFtcz86IGJvb2xlYW47XHJcbiAgICAgIGJvdW5kZWRCeT86IG51bWJlcltdW10gfCBudWxsO1xyXG4gICAgICByZXF1ZXN0U2VuZEludGVydmFsPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gICAgICByZXN1bHRzPzogbnVtYmVyO1xyXG4gICAgICByZXZlcnNlR2VvY29kaW5nPzogYm9vbGVhbjtcclxuICAgICAgcm91dGluZ01vZGU/OiAnYXV0bycgfCAnbWFzc3RyYW5zaXQnIHwgJ3BlZGVzdHJpYW4nIHwgJyc7XHJcbiAgICAgIHNlYXJjaENvb3JkT3JkZXI/OiBzdHJpbmc7XHJcbiAgICAgIHN0cmljdEJvdW5kcz86IGJvb2xlYW47XHJcbiAgICAgIHZpYUluZGV4ZXM/OiBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICB0eXBlIElNdWx0aVJvdXRlUmVmZXJlbmNlUG9pbnQgPSBzdHJpbmcgfCBudW1iZXJbXSB8IGdlb21ldHJ5LlBvaW50O1xyXG5cclxuICAgIGludGVyZmFjZSBJT3B0aW9uTWFuYWdlciBleHRlbmRzIElDaGlsZDxJT3B0aW9uTWFuYWdlcj4sIElFdmVudEVtaXR0ZXIsIElGcmVlemFibGUge1xyXG4gICAgICBnZXQoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueTtcclxuXHJcbiAgICAgIGdldEFsbCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICAgICAgZ2V0TmFtZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICBnZXROYXRpdmUoa2V5OiBzdHJpbmcpOiBvYmplY3Q7XHJcblxyXG4gICAgICByZXNvbHZlKGtleTogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogb2JqZWN0O1xyXG5cclxuICAgICAgc2V0KGtleTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZywgdmFsdWU/OiBhbnkpOiB0aGlzO1xyXG5cclxuICAgICAgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJT3ZlcmxheSBleHRlbmRzIElDdXN0b21pemFibGUsIElEb21FdmVudEVtaXR0ZXIge1xyXG4gICAgICBnZXREYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldEdlb21ldHJ5KCk6IElQaXhlbEdlb21ldHJ5O1xyXG5cclxuICAgICAgZ2V0TWFwKCk6IE1hcCB8IG51bGw7XHJcblxyXG4gICAgICBnZXRTaGFwZSgpOiBJU2hhcGUgfCBudWxsO1xyXG5cclxuICAgICAgaXNFbXB0eSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgc2V0R2VvbWV0cnkoZ2VvbWV0cnk6IElQaXhlbEdlb21ldHJ5KTogdm9pZDtcclxuXHJcbiAgICAgIHNldE1hcChtYXA6IE1hcCB8IG51bGwpOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGFuZSBleHRlbmRzIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICBnZXRFbGVtZW50KCk6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgIGdldE92ZXJmbG93KCk6ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xyXG5cclxuICAgICAgZ2V0WkluZGV4KCk6IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhbm9yYW1hIHtcclxuICAgICAgZ2V0QW5ndWxhckJCb3goKTogbnVtYmVyW107XHJcblxyXG4gICAgICBnZXRDb25uZWN0aW9uQXJyb3dzKCk6IElQYW5vcmFtYUNvbm5lY3Rpb25BcnJvd1tdO1xyXG5cclxuICAgICAgZ2V0Q29ubmVjdGlvbk1hcmtlcnMoKTogSVBhbm9yYW1hQ29ubmVjdGlvbk1hcmtlcltdO1xyXG5cclxuICAgICAgZ2V0Q29vcmRTeXN0ZW0oKTogSUNvb3JkU3lzdGVtO1xyXG5cclxuICAgICAgZ2V0RGVmYXVsdERpcmVjdGlvbigpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldERlZmF1bHRTcGFuKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0R3JhcGgoKTogSVBhbm9yYW1hR3JhcGggfCBudWxsO1xyXG5cclxuICAgICAgZ2V0TWFya2VycygpOiBJUGFub3JhbWFNYXJrZXJbXTtcclxuXHJcbiAgICAgIGdldE5hbWUoKTogc3RyaW5nO1xyXG5cclxuICAgICAgZ2V0UG9zaXRpb24oKTogbnVtYmVyW107XHJcblxyXG4gICAgICBnZXRUaWxlTGV2ZWxzKCk6IElQYW5vcmFtYVRpbGVMZXZlbFtdO1xyXG5cclxuICAgICAgZ2V0VGlsZVNpemUoKTogbnVtYmVyW107XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQYW5vcmFtYUNvbm5lY3Rpb24ge1xyXG4gICAgICBnZXRDb25uZWN0ZWRQYW5vcmFtYSgpOiBQcm9taXNlPElQYW5vcmFtYT47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQYW5vcmFtYUNvbm5lY3Rpb25BcnJvdyBleHRlbmRzIElQYW5vcmFtYUNvbm5lY3Rpb24ge1xyXG4gICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICBnZXREaXJlY3Rpb24oKTogbnVtYmVyW107XHJcblxyXG4gICAgICBnZXRQYW5vcmFtYSgpOiBJUGFub3JhbWE7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQYW5vcmFtYUNvbm5lY3Rpb25NYXJrZXIgZXh0ZW5kcyBJUGFub3JhbWFDb25uZWN0aW9uLCBJUGFub3JhbWFNYXJrZXIge31cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhbm9yYW1hR3JhcGgge1xyXG4gICAgICBnZXRFZGdlcygpOiBJUGFub3JhbWFHcmFwaEVkZ2VbXTtcclxuXHJcbiAgICAgIGdldE5vZGVzKCk6IElQYW5vcmFtYUdyYXBoRWRnZVtdO1xyXG5cclxuICAgICAgZ2V0UGFub3JhbWEoKTogSVBhbm9yYW1hO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGFub3JhbWFHcmFwaEVkZ2Uge1xyXG4gICAgICBnZXRFbmROb2RlcygpOiBJUGFub3JhbWFHcmFwaE5vZGVbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhbm9yYW1hR3JhcGhOb2RlIHtcclxuICAgICAgZ2V0Q29ubmVjdGVkUGFub3JhbWEoKTogUHJvbWlzZTxJUGFub3JhbWE+O1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGFub3JhbWFNYXJrZXIge1xyXG4gICAgICBwcm9wZXJ0aWVzOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICBnZXRJY29uU2V0KCk6IFByb21pc2U8SVBhbm9yYW1hTWFya2VySWNvblNldD47XHJcblxyXG4gICAgICBnZXRQYW5vcmFtYSgpOiBJUGFub3JhbWE7XHJcblxyXG4gICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhbm9yYW1hTWFya2VySWNvbiB7XHJcbiAgICAgIGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB8IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICAgIG9mZnNldDogbnVtYmVyW107XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQYW5vcmFtYU1hcmtlckljb25TZXQge1xyXG4gICAgICBkZWZhdWx0OiBJUGFub3JhbWFNYXJrZXJJY29uIHwgbnVsbDtcclxuICAgICAgZXhwYW5kZWQ6IElQYW5vcmFtYU1hcmtlckljb24gfCBudWxsO1xyXG4gICAgICBleHBhbmRlZEhvdmVyZWQ6IElQYW5vcmFtYU1hcmtlckljb24gfCBudWxsO1xyXG4gICAgICBob3ZlcmVkOiBJUGFub3JhbWFNYXJrZXJJY29uIHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhbm9yYW1hVGlsZUxldmVsIHtcclxuICAgICAgZ2V0SW1hZ2VTaXplKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0VGlsZVVybCh4OiBudW1iZXIsIHk6IG51bWJlcik6IHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBhcmVudE9uTWFwIHtcclxuICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBpeGVsQ2lyY2xlR2VvbWV0cnkgZXh0ZW5kcyBJUGl4ZWxHZW9tZXRyeSB7XHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdO1xyXG5cclxuICAgICAgZ2V0UmFkaXVzKCk6IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBpeGVsTGluZVN0cmluZ0dlb21ldHJ5IGV4dGVuZHMgSVBpeGVsR2VvbWV0cnkge1xyXG4gICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW107XHJcblxyXG4gICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGl4ZWxQb2ludEdlb21ldHJ5IGV4dGVuZHMgSVBpeGVsR2VvbWV0cnkge1xyXG4gICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBpeGVsTXVsdGlMaW5lR2VvbWV0cnkgZXh0ZW5kcyBJUGl4ZWxHZW9tZXRyeSB7XHJcbiAgICAgIGdldENsb3Nlc3QoYW5jaG9yUG9zaXRpb246IG51bWJlcltdKTogb2JqZWN0O1xyXG5cclxuICAgICAgZ2V0Q29vcmRpbmF0ZXMoKTogbnVtYmVyW11bXVtdO1xyXG5cclxuICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBpeGVsTXVsdGlQb2x5Z29uR2VvbWV0cnkgZXh0ZW5kcyBJUGl4ZWxHZW9tZXRyeSB7XHJcbiAgICAgIGNvbnRhaW5zKHBvc2l0aW9uOiBudW1iZXJbXSk6IGJvb2xlYW47XHJcblxyXG4gICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW11bXVtdO1xyXG5cclxuICAgICAgZ2V0RmlsbFJ1bGUoKTogJ2V2ZW5PZGQnIHwgJ25vblplcm8nO1xyXG5cclxuICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBpeGVsUG9seWdvbkdlb21ldHJ5IGV4dGVuZHMgSVBpeGVsR2VvbWV0cnkge1xyXG4gICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgZ2V0Q2xvc2VzdChhbmNob3JQb3NpdGlvbjogbnVtYmVyW10pOiBvYmplY3Q7XHJcblxyXG4gICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdW107XHJcblxyXG4gICAgICBnZXRGaWxsUnVsZSgpOiAnZXZlbk9kZCcgfCAnbm9uWmVybyc7XHJcblxyXG4gICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGl4ZWxSZWN0YW5nbGVHZW9tZXRyeSBleHRlbmRzIElQaXhlbEdlb21ldHJ5IHtcclxuICAgICAgZ2V0Q2xvc2VzdChhbmNob3JQb3NpdGlvbjogbnVtYmVyW10pOiBvYmplY3Q7XHJcblxyXG4gICAgICBnZXRDb29yZGluYXRlcygpOiBudW1iZXJbXVtdO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUGl4ZWxHZW9tZXRyeSBleHRlbmRzIElCYXNlR2VvbWV0cnkge1xyXG4gICAgICBlcXVhbHMoZ2VvbWV0cnk6IElQaXhlbEdlb21ldHJ5KTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGdldE1ldGFEYXRhKCk6IG9iamVjdDtcclxuXHJcbiAgICAgIHNjYWxlKGZhY3RvcjogbnVtYmVyKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICBzaGlmdChvZmZzZXQ6IG51bWJlcltdKTogSVBpeGVsR2VvbWV0cnk7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQb2ludEdlb21ldHJ5IGV4dGVuZHMgSUdlb21ldHJ5LCBJUG9pbnRHZW9tZXRyeUFjY2VzcyB7fVxyXG5cclxuICAgIGludGVyZmFjZSBJUG9pbnRHZW9tZXRyeUFjY2VzcyB7XHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbDtcclxuXHJcbiAgICAgIHNldENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzOiBudW1iZXJbXSB8IG51bGwpOiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUG9seWdvbkdlb21ldHJ5IGV4dGVuZHMgSUdlb21ldHJ5LCBJUG9seWdvbkdlb21ldHJ5QWNjZXNzIHt9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQb2x5Z29uR2VvbWV0cnlBY2Nlc3MgZXh0ZW5kcyBJRnJlZXphYmxlIHtcclxuICAgICAgY29udGFpbnMocG9zaXRpb246IG51bWJlcltdKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGdldChpbmRleDogbnVtYmVyKTogbnVtYmVyW11bXTtcclxuXHJcbiAgICAgIGdldENoaWxkR2VvbWV0cnkoaW5kZXg6IG51bWJlcik6IElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICBnZXRDbG9zZXN0KGFuY2hvclBvc2l0aW9uOiBudW1iZXJbXSk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldENvb3JkaW5hdGVzKCk6IG51bWJlcltdW11bXTtcclxuXHJcbiAgICAgIGdldEZpbGxSdWxlKCk6IHN0cmluZztcclxuXHJcbiAgICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgICBpbnNlcnQoaW5kZXg6IG51bWJlciwgcGF0aDogbnVtYmVyW11bXSk6IElQb2x5Z29uR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICByZW1vdmUoaW5kZXg6IG51bWJlcik6IElMaW5lYXJSaW5nR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICBzZXQoaW5kZXg6IG51bWJlciwgcGF0aDogbnVtYmVyW11bXSk6IElQb2x5Z29uR2VvbWV0cnlBY2Nlc3M7XHJcblxyXG4gICAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogbnVtYmVyW11bXVtdKTogSVBvbHlnb25HZW9tZXRyeUFjY2VzcztcclxuXHJcbiAgICAgIHNldEZpbGxSdWxlKGZpbGxSdWxlOiBzdHJpbmcpOiBJUG9seWdvbkdlb21ldHJ5QWNjZXNzO1xyXG5cclxuICAgICAgc3BsaWNlKGluZGV4OiBudW1iZXIsIG51bWJlcjogbnVtYmVyKTogSUxpbmVhclJpbmdHZW9tZXRyeUFjY2Vzc1tdO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJUG9wdXA8VD4gZXh0ZW5kcyBJQ3VzdG9taXphYmxlLCBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgY2xvc2UoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTxUPjtcclxuXHJcbiAgICAgIGdldERhdGEoKTogb2JqZWN0O1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5PjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5O1xyXG5cclxuICAgICAgZ2V0UG9zaXRpb24oKTogbnVtYmVyW107XHJcblxyXG4gICAgICBpc09wZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIG9wZW4ocG9zaXRpb246IG51bWJlcltdLCBkYXRhOiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IFByb21pc2U8VD47XHJcblxyXG4gICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTxUPjtcclxuXHJcbiAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXJbXSk6IFByb21pc2U8VD47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElQb3B1cE1hbmFnZXI8VD4gZXh0ZW5kcyBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgY2xvc2UoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTxUPjtcclxuXHJcbiAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgIGdldERhdGEoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICBpc09wZW4oKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIG9wZW4ocG9zaXRpb24/OiBudW1iZXJbXSwgZGF0YT86IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50LCBvcHRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxUPjtcclxuXHJcbiAgICAgIHNldERhdGEoZGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgSFRNTEVsZW1lbnQpOiBQcm9taXNlPFQ+O1xyXG5cclxuICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPFQ+O1xyXG5cclxuICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxUPjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVBvc2l0aW9uaW5nQ29udGV4dCB7XHJcbiAgICAgIGZyb21DbGllbnRQaXhlbHMoY2xpZW50UGl4ZWxQb2ludDogbnVtYmVyW10pOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldFpvb20oKTogbnVtYmVyO1xyXG5cclxuICAgICAgdG9DbGllbnRQaXhlbHMoZ2xvYmFsUGl4ZWxQb2ludDogbnVtYmVyW10pOiBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVByb2plY3Rpb24ge1xyXG4gICAgICBmcm9tR2xvYmFsUGl4ZWxzKGdsb2JhbFBpeGVsUG9pbnQ6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgIGdldENvb3JkU3lzdGVtKCk6IElDb29yZFN5c3RlbTtcclxuXHJcbiAgICAgIGlzQ3ljbGVkKCk6IGJvb2xlYW5bXTtcclxuXHJcbiAgICAgIHRvR2xvYmFsUGl4ZWxzKGNvb3JkUG9pbnQ6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVJvdXRlUGFuZWwge1xyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBlbmFibGUoKTogdm9pZDtcclxuXHJcbiAgICAgIGdlb2xvY2F0ZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgZ2VvT2JqZWN0czogR2VvT2JqZWN0Q29sbGVjdGlvbiB9PjtcclxuXHJcbiAgICAgIGdldFJvdXRlKCk6IG11bHRpUm91dGVyLk11bHRpUm91dGU7XHJcblxyXG4gICAgICBnZXRSb3V0ZUFzeW5jKCk6IFByb21pc2U8bXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT47XHJcblxyXG4gICAgICBpc0VuYWJsZSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgc3dpdGNoUG9pbnRzKCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdHlwZSBJU2VhcmNoQ29udHJvbExheW91dCA9IElFeHBhbmRhYmxlQ29udHJvbExheW91dDtcclxuXHJcbiAgICBpbnRlcmZhY2UgSVNlbGVjdGFibGVDb250cm9sIGV4dGVuZHMgSUNvbnRyb2wge1xyXG4gICAgICBkZXNlbGVjdCgpOiB2b2lkO1xyXG5cclxuICAgICAgZGlzYWJsZSgpOiB2b2lkO1xyXG5cclxuICAgICAgZW5hYmxlKCk6IHZvaWQ7XHJcblxyXG4gICAgICBpc0VuYWJsZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlzU2VsZWN0ZWQoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHNlbGVjdCgpOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIHR5cGUgSVNlbGVjdGFibGVDb250cm9sTGF5b3V0ID0gSUxheW91dDtcclxuXHJcbiAgICB0eXBlIElUcmFmZmljQ29udHJvbExheW91dCA9IElMYXlvdXQ7XHJcblxyXG4gICAgdHlwZSBJWm9vbUNvbnRyb2xMYXlvdXQgPSBJTGF5b3V0O1xyXG5cclxuICAgIGludGVyZmFjZSBJU2hhcGUge1xyXG4gICAgICBjb250YWlucyhwb3NpdGlvbjogbnVtYmVyW10pOiBib29sZWFuO1xyXG5cclxuICAgICAgZXF1YWxzKHNoYXBlOiBJU2hhcGUpOiBib29sZWFuO1xyXG5cclxuICAgICAgZ2V0Qm91bmRzKCk6IG51bWJlcltdW10gfCBudWxsO1xyXG5cclxuICAgICAgZ2V0R2VvbWV0cnkoKTogSVBpeGVsR2VvbWV0cnk7XHJcblxyXG4gICAgICBnZXRUeXBlKCk6IHN0cmluZztcclxuXHJcbiAgICAgIHNjYWxlKGZhY3RvcjogbnVtYmVyKTogSVNoYXBlO1xyXG5cclxuICAgICAgc2hpZnQob2Zmc2V0OiBudW1iZXJbXSk6IElTaGFwZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBNb25pdG9yIHtcclxuICAgICAgY29uc3RydWN0b3IoZGF0YU1hbmFnZXI6IElEYXRhTWFuYWdlciB8IElPcHRpb25NYW5hZ2VyKTtcclxuXHJcbiAgICAgIGFkZChcclxuICAgICAgICBuYW1lOiBzdHJpbmdbXSB8IHN0cmluZyxcclxuICAgICAgICBjaGFuZ2VDYWxsYmFjazogKGV2ZW50OiBvYmplY3QgfCBJRXZlbnQpID0+IHZvaWQsXHJcbiAgICAgICAgY29udGV4dD86IGFueSxcclxuICAgICAgICBwYXJhbXM/OiBhbnksXHJcbiAgICAgICk6IE1vbml0b3I7XHJcblxyXG4gICAgICBmb3JjZUNoYW5nZSgpOiBNb25pdG9yO1xyXG5cclxuICAgICAgZ2V0KG5hbWU6IHN0cmluZyk6IGFueTtcclxuXHJcbiAgICAgIHJlbW92ZShuYW1lOiBzdHJpbmcpOiBNb25pdG9yO1xyXG5cclxuICAgICAgcmVtb3ZlQWxsKCk6IE1vbml0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgY2xhc3MgT2JqZWN0TWFuYWdlciBpbXBsZW1lbnRzIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIsIElHZW9PYmplY3QsIElQYXJlbnRPbk1hcCB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElPYmplY3RNYW5hZ2VyT3B0aW9ucyk7XHJcblxyXG4gICAgICBjbHVzdGVyczogb2JqZWN0TWFuYWdlci5DbHVzdGVyQ29sbGVjdGlvbjtcclxuXHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIGdlb21ldHJ5OiBJR2VvbWV0cnkgfCBudWxsO1xyXG5cclxuICAgICAgb2JqZWN0czogb2JqZWN0TWFuYWdlci5PYmplY3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICBwcm9wZXJ0aWVzOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBzdGF0ZTogSURhdGFNYW5hZ2VyO1xyXG5cclxuICAgICAgYWRkKG9iamVjdHM6IG9iamVjdCB8IG9iamVjdFtdIHwgc3RyaW5nKTogdGhpcztcclxuXHJcbiAgICAgIGdldEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIGdldEZpbHRlcigpOiBzdHJpbmcgfCAoKG9iamVjdDogb2JqZWN0IHwgc3RyaW5nKSA9PiBib29sZWFuKSB8IG51bGw7XHJcblxyXG4gICAgICBnZXRNYXAoKTogTWFwO1xyXG5cclxuICAgICAgZ2V0T2JqZWN0U3RhdGUoaWQ6IGFueSk6IHtcclxuICAgICAgICBmb3VuZDogYm9vbGVhbjtcclxuICAgICAgICBpc1Nob3duOiBib29sZWFuO1xyXG4gICAgICAgIGNsdXN0ZXI/OiBvYmplY3Q7XHJcbiAgICAgICAgaXNDbHVzdGVyZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgaXNGaWx0ZXJlZE91dDogYm9vbGVhbjtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgZ2V0UGFyZW50KCk6IElQYXJlbnRPbk1hcCB8IG51bGw7XHJcblxyXG4gICAgICBnZXRQaXhlbEJvdW5kcygpOiBudW1iZXJbXVtdIHwgbnVsbDtcclxuXHJcbiAgICAgIHJlbW92ZShvYmplY3RzOiBvYmplY3QgfCBvYmplY3RbXSB8IHN0cmluZyk6IHRoaXM7XHJcblxyXG4gICAgICByZW1vdmVBbGwoKTogdGhpcztcclxuXHJcbiAgICAgIHNldEZpbHRlcihmaWx0ZXJGdW5jdGlvbjogKChvYmplY3Q6IG9iamVjdCkgPT4gYm9vbGVhbikgfCBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgICAgc2V0UGFyZW50KHBhcmVudDogSVBhcmVudE9uTWFwIHwgbnVsbCk6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElPYmplY3RNYW5hZ2VyT3B0aW9uc1xyXG4gICAgICBleHRlbmRzIE9taXQ8SUNsdXN0ZXJlck9wdGlvbnNJbmplY3QsICdoYXNCYWxsb29uJyB8ICdoYXNIaW50Jz4sXHJcbiAgICAgICAgSUNsdXN0ZXJQbGFjZW1hcmtPcHRpb25zV2l0aENsdXN0ZXJQcmVmaXgsXHJcbiAgICAgICAgT21pdDxJR2VvT2JqZWN0T3B0aW9uc1dpdGhHZW9PYmplY3RQcmVmaXgsICd2aXNpYmxlJz4ge1xyXG4gICAgICBjbHVzdGVyaXplPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgICAgc3luY092ZXJsYXlJbml0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgICAgdmlld3BvcnRNYXJnaW4/OiBudW1iZXJbXSB8IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjbGFzcyBMb2FkaW5nT2JqZWN0TWFuYWdlciBpbXBsZW1lbnRzIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIsIElHZW9PYmplY3QsIElQYXJlbnRPbk1hcCB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKHVybFRlbXBsYXRlOiBzdHJpbmcsIG9wdGlvbnM/OiBJTG9hZGluZ09iamVjdE1hbmFnZXJPcHRpb25zKTtcclxuXHJcbiAgICAgIGNsdXN0ZXJzOiBvYmplY3RNYW5hZ2VyLkNsdXN0ZXJDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgZ2VvbWV0cnk6IElHZW9tZXRyeSB8IG51bGw7XHJcblxyXG4gICAgICBvYmplY3RzOiBvYmplY3RNYW5hZ2VyLk9iamVjdENvbGxlY3Rpb247XHJcblxyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgIHByb3BlcnRpZXM6IElEYXRhTWFuYWdlcjtcclxuXHJcbiAgICAgIHN0YXRlOiBJRGF0YU1hbmFnZXI7XHJcblxyXG4gICAgICBnZXRCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICBnZXRPYmplY3RTdGF0ZShpZDogYW55KToge1xyXG4gICAgICAgIGZvdW5kOiBib29sZWFuO1xyXG4gICAgICAgIGlzU2hvd246IGJvb2xlYW47XHJcbiAgICAgICAgY2x1c3Rlcj86IG9iamVjdDtcclxuICAgICAgICBpc0NsdXN0ZXJlZDogYm9vbGVhbjtcclxuICAgICAgICBpc0ZpbHRlcmVkT3V0OiBib29sZWFuO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ2V0UGl4ZWxCb3VuZHMoKTogbnVtYmVyW11bXSB8IG51bGw7XHJcblxyXG4gICAgICBnZXRUaWxlVXJsKHBhcmFtZXRlcnM6IGFueSk6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gICAgICBnZXRVcmxUZW1wbGF0ZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICByZWxvYWREYXRhKCk6IHZvaWQ7XHJcblxyXG4gICAgICBzZXRVcmxUZW1wbGF0ZSh1cmxUZW1wbGF0ZTogc3RyaW5nKTogdm9pZDtcclxuXHJcbiAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgIGdldFBhcmVudCgpOiBJUGFyZW50T25NYXAgfCBudWxsO1xyXG5cclxuICAgICAgc2V0UGFyZW50KHBhcmVudDogSVBhcmVudE9uTWFwIHwgbnVsbCk6IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElMb2FkaW5nT2JqZWN0TWFuYWdlck9wdGlvbnNcclxuICAgICAgZXh0ZW5kcyBPbWl0PElDbHVzdGVyZXJPcHRpb25zSW5qZWN0LCAnaGFzQmFsbG9vbicgfCAnaGFzSGludCc+LFxyXG4gICAgICAgIElDbHVzdGVyUGxhY2VtYXJrT3B0aW9uc1dpdGhDbHVzdGVyUHJlZml4LFxyXG4gICAgICAgIE9taXQ8SUdlb09iamVjdE9wdGlvbnNXaXRoR2VvT2JqZWN0UHJlZml4LCAndmlzaWJsZSc+IHtcclxuICAgICAgY2x1c3Rlcml6ZT86IGJvb2xlYW47XHJcbiAgICAgIGxvYWRUaWxlU2l6ZT86IG51bWJlcjtcclxuICAgICAgcGFkZGluZ1BhcmFtTmFtZT86IHN0cmluZztcclxuICAgICAgcGFkZGluZ1RlbXBsYXRlPzogc3RyaW5nO1xyXG4gICAgICBzcGxpdFJlcXVlc3RzPzogYm9vbGVhbjtcclxuICAgICAgc3luY092ZXJsYXlJbml0PzogYm9vbGVhbjtcclxuICAgICAgdmlld3BvcnRNYXJnaW4/OiBudW1iZXIgfCBudW1iZXJbXTtcclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgY29vcmRTeXN0ZW0ge1xyXG4gICAgICBjb25zdCBnZW86IElDb29yZFN5c3RlbTtcclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2Ugb2JqZWN0TWFuYWdlciB7XHJcbiAgICAgIGNsYXNzIEJhbGxvb24gaW1wbGVtZW50cyBPbWl0PElCYWxsb29uTWFuYWdlcjxtYXAuQmFsbG9vbj4sICdpc09wZW4nIHwgJ29wZW4nPiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoY29sbGVjdGlvbjogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBhdXRvUGFuKCk6IFByb21pc2U8eW1hcHMuQmFsbG9vbj47XHJcblxyXG4gICAgICAgIGNsb3NlKGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8eW1hcHMuQmFsbG9vbj47XHJcblxyXG4gICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0RGF0YSgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPcHRpb25zKCk6IElPcHRpb25NYW5hZ2VyIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheSgpOiBQcm9taXNlPElPdmVybGF5IHwgbnVsbD47XHJcblxyXG4gICAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0UG9zaXRpb24oKTogbnVtYmVyW10gfCBudWxsO1xyXG5cclxuICAgICAgICBpc09wZW4oaWQ6IGFueSk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgIG9wZW4ob2JqZWN0SWQ6IGFueSwgYW5jaG9yUGl4ZWxQb3NpdGlvbj86IGJvb2xlYW4pOiBQcm9taXNlPHltYXBzLkJhbGxvb24+O1xyXG5cclxuICAgICAgICBzZXREYXRhKG9iamVjdERhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTx5bWFwcy5CYWxsb29uPjtcclxuXHJcbiAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPHltYXBzLkJhbGxvb24+O1xyXG5cclxuICAgICAgICBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyW10pOiBQcm9taXNlPHltYXBzLkJhbGxvb24+O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGFzcyBDbHVzdGVyQ29sbGVjdGlvbiBpbXBsZW1lbnRzIElDdXN0b21pemFibGUsIElFdmVudEVtaXR0ZXIge1xyXG4gICAgICAgIGJhbGxvb246IG9iamVjdE1hbmFnZXIuQmFsbG9vbjtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBoaW50OiBvYmplY3RNYW5hZ2VyLkhpbnQ7XHJcblxyXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbi5NYW5hZ2VyO1xyXG5cclxuICAgICAgICBvdmVybGF5czogb2JqZWN0TWFuYWdlci5PdmVybGF5Q29sbGVjdGlvbjtcclxuXHJcbiAgICAgICAgc3RhdGU6IGRhdGEuTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZWFjaChjYWxsYmFjazogKGNsdXN0ZXI6IG9iamVjdCkgPT4gdm9pZCwgY29udGV4dD86IG9iamVjdCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldEFsbCgpOiBvYmplY3RbXTtcclxuXHJcbiAgICAgICAgZ2V0QnlJZChpZDogc3RyaW5nKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG5cclxuICAgICAgICBnZXRPYmplY3RNYW5hZ2VyKCk6IE9iamVjdE1hbmFnZXI7XHJcblxyXG4gICAgICAgIHNldENsdXN0ZXJPcHRpb25zKG9iamVjdElkOiBzdHJpbmcsIG9wdGlvbnM6IG9iamVjdCk6IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIEhpbnQgaW1wbGVtZW50cyBPbWl0PElIaW50TWFuYWdlcjxtYXAuSGludD4sICdpc09wZW4nIHwgJ29wZW4nPiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoY29sbGVjdGlvbjogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBjbG9zZShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPG1hcC5IaW50PjtcclxuXHJcbiAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXREYXRhKCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgZ2V0T3ZlcmxheVN5bmMoKTogSU92ZXJsYXkgfCBudWxsO1xyXG5cclxuICAgICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICAgIGlzT3BlbihpZDogYW55KTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgb3BlbihvYmplY3RJZDogYW55LCBwb3NpdGlvbj86IG51bWJlcltdKTogUHJvbWlzZTxtYXAuSGludD47XHJcblxyXG4gICAgICAgIHNldERhdGEoZGF0YTogb2JqZWN0IHwgc3RyaW5nIHwgSFRNTEVsZW1lbnQpOiBQcm9taXNlPG1hcC5IaW50PjtcclxuXHJcbiAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPG1hcC5IaW50PjtcclxuXHJcbiAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxtYXAuSGludD47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE9iamVjdENvbGxlY3Rpb24gaW1wbGVtZW50cyBJQ29sbGVjdGlvbiwgSUN1c3RvbWl6YWJsZSB7XHJcbiAgICAgICAgYmFsbG9vbjogb2JqZWN0TWFuYWdlci5CYWxsb29uO1xyXG5cclxuICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgIGhpbnQ6IG9iamVjdE1hbmFnZXIuSGludDtcclxuXHJcbiAgICAgICAgb3B0aW9uczogb3B0aW9uLk1hbmFnZXI7XHJcblxyXG4gICAgICAgIG92ZXJsYXlzOiBvYmplY3RNYW5hZ2VyLk92ZXJsYXlDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBhZGQob2JqZWN0OiBvYmplY3QpOiB0aGlzO1xyXG5cclxuICAgICAgICBlYWNoKGNhbGxiYWNrOiAob2JqZWN0OiBvYmplY3QpID0+IHZvaWQsIGNvbnRleHQ/OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgICBnZXRBbGwoKTogb2JqZWN0W107XHJcblxyXG4gICAgICAgIGdldEJ5SWQoaWQ6IG51bWJlcik6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldEl0ZXJhdG9yKCk6IElJdGVyYXRvcjtcclxuXHJcbiAgICAgICAgZ2V0TGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgZ2V0T2JqZWN0TWFuYWdlcigpOiBPYmplY3RNYW5hZ2VyO1xyXG5cclxuICAgICAgICByZW1vdmUoZGF0YTogb2JqZWN0IHwgb2JqZWN0W10gfCBzdHJpbmcpOiB0aGlzO1xyXG5cclxuICAgICAgICByZW1vdmVBbGwoKTogb2JqZWN0TWFuYWdlci5PYmplY3RDb2xsZWN0aW9uO1xyXG5cclxuICAgICAgICBzZXRPYmplY3RPcHRpb25zKG9iamVjdElkOiBhbnksIG9wdGlvbnM6IG9iamVjdCk6IE9iamVjdENvbGxlY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsYXNzIE92ZXJsYXlDb2xsZWN0aW9uIGltcGxlbWVudHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZWFjaChjYWxsYmFjazogKG92ZXJsYXk6IElPdmVybGF5KSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogdm9pZDtcclxuXHJcbiAgICAgICAgZ2V0QWxsKCk6IG9iamVjdFtdO1xyXG5cclxuICAgICAgICBnZXRCeUlkKGlkOiBudW1iZXIpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgIGdldElkKG92ZXJsYXk6IElPdmVybGF5KTogbnVtYmVyIHwgbnVsbDtcclxuXHJcbiAgICAgICAgZ2V0SXRlcmF0b3IoKTogSUl0ZXJhdG9yO1xyXG5cclxuICAgICAgICBnZXRMZW5ndGgoKTogbnVtYmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIG1vZHVsZXMge1xyXG4gICAgICBmdW5jdGlvbiBkZWZpbmUoXHJcbiAgICAgICAgbW9kdWxlOiBzdHJpbmcsXHJcbiAgICAgICAgZGVwZW5kcz86IHN0cmluZ1tdLFxyXG4gICAgICAgIHJlc29sdmVDYWxsYmFjaz86IFJlc29sdmVDYWxsYmFja0Z1bmN0aW9uLFxyXG4gICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICk6IHR5cGVvZiBtb2R1bGVzO1xyXG5cclxuICAgICAgZnVuY3Rpb24gZGVmaW5lKFxyXG4gICAgICAgIG1vZHVsZTogc3RyaW5nLFxyXG4gICAgICAgIHJlc29sdmVDYWxsYmFjaz86IFJlc29sdmVDYWxsYmFja0Z1bmN0aW9uLFxyXG4gICAgICAgIGNvbnRleHQ/OiBvYmplY3QsXHJcbiAgICAgICk6IHR5cGVvZiBtb2R1bGVzO1xyXG5cclxuICAgICAgZnVuY3Rpb24gaXNEZWZpbmVkKG1vZHVsZTogc3RyaW5nKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIHJlcXVpcmUoXHJcbiAgICAgICAgbW9kdWxlczogc3RyaW5nIHwgc3RyaW5nW10sXHJcbiAgICAgICAgc3VjY2Vzc0NhbGxiYWNrPzogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxyXG4gICAgICAgIGVycm9yQ2FsbGJhY2s/OiAoZXJyb3I6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBjb250ZXh0Pzogb2JqZWN0LFxyXG4gICAgICApOiB2b3cuUHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUhvdHNwb3RPYmplY3RTb3VyY2UgZXh0ZW5kcyBJQ3VzdG9taXphYmxlLCBJRXZlbnRFbWl0dGVyIHtcclxuICAgICAgY2FuY2VsTGFzdFJlcXVlc3QoKTogdm9pZDtcclxuXHJcbiAgICAgIHJlcXVlc3RPYmplY3RzKFxyXG4gICAgICAgIGxheWVyOiBob3RzcG90LkxheWVyLFxyXG4gICAgICAgIHRpbGVOdW1iZXI6IG51bWJlcltdLFxyXG4gICAgICAgIHpvb206IG51bWJlcixcclxuICAgICAgICBjYWxsYmFjazogKCkgPT4gdm9pZCxcclxuICAgICAgKTogdm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUhvdHNwb3RMYXllck9wdGlvbnNcclxuICAgICAgZXh0ZW5kcyBJQmFsbG9vbk9wdGlvbnNXaXRoQmFsbG9vblByZWZpeCxcclxuICAgICAgICBJSGludE9wdGlvbnNXaXRoSGludFByZWZpeCB7XHJcbiAgICAgIGN1cnNvcj86IHN0cmluZztcclxuICAgICAgZG9udENoYW5nZUN1cnNvcj86IGJvb2xlYW47XHJcbiAgICAgIGhhc0JhbGxvb24/OiBib29sZWFuO1xyXG4gICAgICBoYXNIaW50PzogYm9vbGVhbjtcclxuICAgICAgaW50ZXJhY3Rpdml0eU1vZGVsPzogSW50ZXJhY3Rpdml0eU1vZGVsS2V5O1xyXG4gICAgICBvcGVuQmFsbG9vbk9uQ2xpY2s/OiBib29sZWFuO1xyXG4gICAgICBvcGVuRW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgb3BlbkVtcHR5SGludD86IGJvb2xlYW47XHJcbiAgICAgIG9wZW5IaW50T25Ib3Zlcj86IGJvb2xlYW47XHJcbiAgICAgIHBhbmU/OiBJRXZlbnRQYW5lO1xyXG4gICAgICBzaG93RW1wdHlCYWxsb29uPzogYm9vbGVhbjtcclxuICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJSG90c3BvdExheWVyT2JqZWN0IGV4dGVuZHMgSUN1c3RvbWl6YWJsZSwgSURvbUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGdldEdlb21ldHJ5KCk6IG9iamVjdDtcclxuXHJcbiAgICAgIGdldEhvdHNwb3QoKTogSUhvdHNwb3Q7XHJcblxyXG4gICAgICBnZXRJZCgpOiBudW1iZXI7XHJcblxyXG4gICAgICBnZXRQcm9wZXJ0aWVzKCk6IG9iamVjdDtcclxuXHJcbiAgICAgIHNldEdlb21ldHJ5KGdlb21ldHJ5OiBvYmplY3QpOiB2b2lkO1xyXG5cclxuICAgICAgc2V0SWQoaWQ6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gICAgICBzZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IG9iamVjdCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIGhvdHNwb3Qge1xyXG4gICAgICBuYW1lc3BhY2UgbGF5ZXIge1xyXG4gICAgICAgIG5hbWVzcGFjZSBhZGRvbiB7XHJcbiAgICAgICAgICBjb25zdCBiYWxsb29uOiB7XHJcbiAgICAgICAgICAgIGdldChsYXllcjogaG90c3BvdC5MYXllcik6IElQb3B1cE1hbmFnZXI8QmFsbG9vbj47XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGhpbnQ6IHtcclxuICAgICAgICAgICAgZ2V0KGxheWVyOiBob3RzcG90LkxheWVyKTogSVBvcHVwTWFuYWdlcjxIaW50PjtcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBCYWxsb29uIGltcGxlbWVudHMgSUJhbGxvb25NYW5hZ2VyPEJhbGxvb24+IHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKGhvdHNwb3RMYXllcjogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgYXV0b1BhbigpOiBQcm9taXNlPEJhbGxvb24+O1xyXG5cclxuICAgICAgICAgIGNsb3NlKGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8QmFsbG9vbj47XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGdldERhdGEoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRPcHRpb25zKCk6IElPcHRpb25NYW5hZ2VyIHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5KCk6IFByb21pc2U8SU92ZXJsYXkgfCBudWxsPjtcclxuXHJcbiAgICAgICAgICBnZXRPdmVybGF5U3luYygpOiBJT3ZlcmxheSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0UG9zaXRpb24oKTogbnVtYmVyW10gfCBudWxsO1xyXG5cclxuICAgICAgICAgIGlzT3BlbigpOiBib29sZWFuO1xyXG5cclxuICAgICAgICAgIG9wZW4ocG9zaXRpb24/OiBudW1iZXJbXSwgZGF0YT86IG9iamVjdCwgb3B0aW9ucz86IG9iamVjdCk6IFByb21pc2U8QmFsbG9vbj47XHJcblxyXG4gICAgICAgICAgc2V0RGF0YShkYXRhOiBvYmplY3QgfCBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IFByb21pc2U8QmFsbG9vbj47XHJcblxyXG4gICAgICAgICAgc2V0T3B0aW9ucyhvcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPEJhbGxvb24+O1xyXG5cclxuICAgICAgICAgIHNldFBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXJbXSk6IFByb21pc2U8QmFsbG9vbj47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBIaW50IGltcGxlbWVudHMgSUhpbnRNYW5hZ2VyPEhpbnQ+IHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKGhvdHNwb3RMYXllcjogb2JqZWN0KTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgY2xvc2UoZm9yY2U/OiBib29sZWFuKTogUHJvbWlzZTxIaW50PjtcclxuXHJcbiAgICAgICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgZ2V0RGF0YSgpOiBvYmplY3QgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldE9wdGlvbnMoKTogSU9wdGlvbk1hbmFnZXIgfCBudWxsO1xyXG5cclxuICAgICAgICAgIGdldE92ZXJsYXkoKTogUHJvbWlzZTxJT3ZlcmxheSB8IG51bGw+O1xyXG5cclxuICAgICAgICAgIGdldE92ZXJsYXlTeW5jKCk6IElPdmVybGF5IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRQb3NpdGlvbigpOiBudW1iZXJbXSB8IG51bGw7XHJcblxyXG4gICAgICAgICAgaXNPcGVuKCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgb3Blbihwb3NpdGlvbj86IG51bWJlcltdLCBkYXRhPzogb2JqZWN0LCBvcHRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxIaW50PjtcclxuXHJcbiAgICAgICAgICBzZXREYXRhKGRhdGE6IG9iamVjdCB8IHN0cmluZyB8IEhUTUxFbGVtZW50KTogUHJvbWlzZTxIaW50PjtcclxuXHJcbiAgICAgICAgICBzZXRPcHRpb25zKG9wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8SGludD47XHJcblxyXG4gICAgICAgICAgc2V0UG9zaXRpb24ocG9zaXRpb246IG51bWJlcltdKTogUHJvbWlzZTxIaW50PjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIE9iamVjdCBpbXBsZW1lbnRzIElIb3RzcG90TGF5ZXJPYmplY3Qge1xyXG4gICAgICAgICAgY29uc3RydWN0b3Ioc2hhcGU6IElTaGFwZSwgZmVhdHVyZTogb2JqZWN0LCBvcHRpb25zOiBvYmplY3QpO1xyXG5cclxuICAgICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgICBnZXRHZW9tZXRyeSgpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgZ2V0SG90c3BvdCgpOiBJSG90c3BvdDtcclxuXHJcbiAgICAgICAgICBnZXRJZCgpOiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgZ2V0UHJvcGVydGllcygpOiBvYmplY3Q7XHJcblxyXG4gICAgICAgICAgc2V0R2VvbWV0cnkoZ2VvbWV0cnk6IG9iamVjdCk6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc2V0SWQoaWQ6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gICAgICAgICAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzOiBvYmplY3QpOiB2b2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgTGF5ZXIgaW1wbGVtZW50cyBJQ2hpbGRPbk1hcCwgSUN1c3RvbWl6YWJsZSB7XHJcbiAgICAgICAgY29uc3RydWN0b3Iob2JqZWN0U291cmNlOiBJSG90c3BvdE9iamVjdFNvdXJjZSwgb3B0aW9uczogSUhvdHNwb3RMYXllck9wdGlvbnMpO1xyXG5cclxuICAgICAgICBiYWxsb29uOiBob3RzcG90LmxheWVyLkJhbGxvb247XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgaGludDogaG90c3BvdC5sYXllci5CYWxsb29uO1xyXG5cclxuICAgICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgZ2V0T2JqZWN0SW5Qb3NpdGlvbihjb29yZHM6IG51bWJlcltdKTogdm93LlByb21pc2U7XHJcblxyXG4gICAgICAgIGdldE9iamVjdHNJblBvc2l0aW9uKGNvb3JkczogbnVtYmVyW10pOiB2b3cuUHJvbWlzZTtcclxuXHJcbiAgICAgICAgZ2V0T2JqZWN0U291cmNlKCk6IE9iamVjdFNvdXJjZTtcclxuXHJcbiAgICAgICAgZ2V0UGFyZW50KCk6IElQYXJlbnRPbk1hcCB8IG51bGw7XHJcblxyXG4gICAgICAgIHNldFBhcmVudChwYXJlbnQ6IElQYXJlbnRPbk1hcCB8IG51bGwpOiB0aGlzO1xyXG5cclxuICAgICAgICB1cGRhdGUoKTogdm9pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3MgT2JqZWN0U291cmNlIGltcGxlbWVudHMgSUhvdHNwb3RPYmplY3RTb3VyY2Uge1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgdGlsZVVybFRlbXBsYXRlOiBzdHJpbmcgfCAoKHRpbGVOdW1iZXI6IG51bWJlcltdLCB0aWxlWm9vbTogbnVtYmVyKSA9PiBzdHJpbmcpLFxyXG4gICAgICAgICAga2V5VGVtcGxhdGU/OiBzdHJpbmcgfCAoKHRpbGVOdW1iZXI6IG51bWJlcltdLCB0aWxlWm9vbTogbnVtYmVyKSA9PiBzdHJpbmcpLFxyXG4gICAgICAgICAgb3B0aW9ucz86IHtcclxuICAgICAgICAgICAgYm91bmRzPzogbnVtYmVyW11bXTtcclxuICAgICAgICAgICAgbWF4Wm9vbT86IG51bWJlcjtcclxuICAgICAgICAgICAgbWluWm9vbT86IG51bWJlcjtcclxuICAgICAgICAgICAgbm9DYWNoZT86IGJvb2xlYW47XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgICAgb3B0aW9uczogSU9wdGlvbk1hbmFnZXI7XHJcblxyXG4gICAgICAgIGNhbmNlbExhc3RSZXF1ZXN0KCk6IHZvaWQ7XHJcblxyXG4gICAgICAgIGdldEtleSh0aWxlTnVtYmVyOiBudW1iZXJbXSwgem9vbTogbnVtYmVyKTogc3RyaW5nO1xyXG5cclxuICAgICAgICBnZXRLZXlUZW1wbGF0ZSgpOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIGdldFRpbGVVcmwodGlsZU51bWJlcjogbnVtYmVyW10sIHpvb206IG51bWJlcik6IHN0cmluZztcclxuXHJcbiAgICAgICAgZ2V0VGlsZVVybFRlbXBsYXRlKCk6IHN0cmluZztcclxuXHJcbiAgICAgICAgcGFyc2VSZXNwb25zZShcclxuICAgICAgICAgIGxheWVyOiBob3RzcG90LkxheWVyLFxyXG4gICAgICAgICAgcmVzOiBvYmplY3QsXHJcbiAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdm9pZCxcclxuICAgICAgICAgIHRpbGVOdW1iZXI6IG51bWJlcltdLFxyXG4gICAgICAgICAgem9vbTogbnVtYmVyLFxyXG4gICAgICAgICk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHJlcXVlc3RPYmplY3RzKFxyXG4gICAgICAgICAgbGF5ZXI6IGhvdHNwb3QuTGF5ZXIsXHJcbiAgICAgICAgICB0aWxlTnVtYmVyOiBudW1iZXJbXSxcclxuICAgICAgICAgIHpvb206IG51bWJlcixcclxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxyXG4gICAgICAgICk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHJlc3RyaWN0KGxheWVyOiBob3RzcG90LkxheWVyLCB0aWxlTnVtYmVyOiBudW1iZXJbXSwgem9vbTogbnVtYmVyKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgc2V0S2V5VGVtcGxhdGUodGVtcGxhdGU6IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gICAgICAgIHNldFRpbGVVcmxUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nKTogdm9pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIEhvdHNwb3QgaW1wbGVtZW50cyBJSG90c3BvdCB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKHNoYXBlOiBJU2hhcGUsIHpJbmRleD86IG51bWJlcik7XHJcblxyXG4gICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElIb3RzcG90IGV4dGVuZHMgSURvbUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuICAgIH1cclxuXHJcbiAgICBuYW1lc3BhY2UgZ2VvbG9jYXRpb24ge1xyXG4gICAgICBpbnRlcmZhY2UgSUdlb2xvY2F0aW9uT3B0aW9ucyB7XHJcbiAgICAgICAgYXV0b1JldmVyc2VHZW9jb2RlPzogYm9vbGVhbjtcclxuICAgICAgICBtYXBTdGF0ZUF1dG9BcHBseT86IGJvb2xlYW47XHJcbiAgICAgICAgcHJvdmlkZXI/OiBzdHJpbmc7XHJcbiAgICAgICAgdGltZW91dD86IG51bWJlcjtcclxuICAgICAgICB1c2VNYXBNYXJnaW4/OiBib29sZWFuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBnZXQob3B0aW9ucz86IElHZW9sb2NhdGlvbk9wdGlvbnMpOiBQcm9taXNlPHsgZ2VvT2JqZWN0czogR2VvT2JqZWN0Q29sbGVjdGlvbiB9PjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSVN1Z2dlc3RQcm92aWRlciB7XHJcbiAgICAgIHN1Z2dlc3QoXHJcbiAgICAgICAgcmVxdWVzdDogc3RyaW5nLFxyXG4gICAgICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgICBib3VuZGVkQnk/OiBudW1iZXJbXVtdO1xyXG4gICAgICAgICAgcmVzdWx0cz86IG51bWJlcjtcclxuICAgICAgICB9LFxyXG4gICAgICApOiBQcm9taXNlPG9iamVjdD47XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElTdWdnZXN0Vmlld09wdGlvbnMge1xyXG4gICAgICBib3VuZGVkQnk/OiBudW1iZXJbXVtdO1xyXG4gICAgICBjb250YWluZXI/OiBIVE1MRWxlbWVudDtcclxuICAgICAgbGF5b3V0Pzogc3RyaW5nIHwgYW55O1xyXG4gICAgICBvZmZzZXQ/OiBudW1iZXJbXTtcclxuICAgICAgcHJvdmlkZXI/OiBzdHJpbmcgfCBJU3VnZ2VzdFByb3ZpZGVyO1xyXG4gICAgICByZXN1bHRzPzogbnVtYmVyO1xyXG4gICAgICB3aWR0aD86IG51bWJlcjtcclxuICAgICAgekluZGV4PzogbnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNsYXNzIFN1Z2dlc3RWaWV3IGltcGxlbWVudHMgSUN1c3RvbWl6YWJsZSwgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgc3RyaW5nLCBvcHRpb25zPzogSVN1Z2dlc3RWaWV3T3B0aW9ucyk7XHJcblxyXG4gICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICBvcHRpb25zOiBJT3B0aW9uTWFuYWdlcjtcclxuXHJcbiAgICAgIHN0YXRlOiBkYXRhLk1hbmFnZXI7XHJcblxyXG4gICAgICBkZXN0cm95KCk6IHZvaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaW50ZXJmYWNlIElUaWxlIGV4dGVuZHMgSUV2ZW50RW1pdHRlciB7XHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgIGlzUmVhZHkoKTogYm9vbGVhbjtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcmZhY2UgSUNhbnZhc1RpbGUgZXh0ZW5kcyBJVGlsZSB7XHJcbiAgICAgIGV2ZW50czogSUV2ZW50TWFuYWdlcjtcclxuXHJcbiAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgIGlzUmVhZHkoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgIHJlbmRlckF0KGNvbnRleHQ6IGFueSwgY2FudmFzU2l6ZTogbnVtYmVyW10sIGJvdW5kczogbnVtYmVyW11bXSwgYW5pbWF0ZT86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGludGVyZmFjZSBJRG9tVGlsZSBleHRlbmRzIElUaWxlIHtcclxuICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgaXNSZWFkeSgpOiBib29sZWFuO1xyXG5cclxuICAgICAgcmVuZGVyQXQoY29udGV4dDogSFRNTEVsZW1lbnQsIGNsaWVudEJvdW5kczogbnVtYmVyW11bXSwgYW5pbWF0ZT86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIG5hbWVzcGFjZSBsYXllciB7XHJcbiAgICAgIGNvbnN0IHN0b3JhZ2U6IHV0aWwuU3RvcmFnZTtcclxuXHJcbiAgICAgIG5hbWVzcGFjZSB0aWxlIHtcclxuICAgICAgICBpbnRlcmZhY2UgSVRpbGVPcHRpb25zIHtcclxuICAgICAgICAgIG5vdEZvdW5kVGlsZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICB0aWxlQW5pbWF0aW9uRHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbnRlcmZhY2UgSVRpbGVSZW5kZXJPcHRpb25zIHtcclxuICAgICAgICAgIHRpbGVOdW1iZXI/OiBudW1iZXJbXTtcclxuICAgICAgICAgIHRpbGVab29tPzogbnVtYmVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3MgQ2FudmFzVGlsZSBpbXBsZW1lbnRzIElDYW52YXNUaWxlIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKHVybDogc3RyaW5nLCBvcHRpb25zPzogSVRpbGVPcHRpb25zLCByZW5kZXJPcHRpb25zPzogSVRpbGVSZW5kZXJPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZGVzdHJveSgpOiB2b2lkO1xyXG5cclxuICAgICAgICAgIGlzUmVhZHkoKTogYm9vbGVhbjtcclxuXHJcbiAgICAgICAgICByZW5kZXJBdChjb250ZXh0OiBhbnksIGNhbnZhc1NpemU6IG51bWJlcltdLCBib3VuZHM6IG51bWJlcltdW10sIGFuaW1hdGU/OiBib29sZWFuKTogdm9pZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIERvbVRpbGUgaW1wbGVtZW50cyBJRG9tVGlsZSB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgb3B0aW9ucz86IElUaWxlT3B0aW9ucywgcmVuZGVyT3B0aW9ucz86IElUaWxlUmVuZGVyT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGRlc3Ryb3koKTogdm9pZDtcclxuXHJcbiAgICAgICAgICBpc1JlYWR5KCk6IGJvb2xlYW47XHJcblxyXG4gICAgICAgICAgcmVuZGVyQXQoY29udGV4dDogSFRNTEVsZW1lbnQsIGNsaWVudEJvdW5kczogbnVtYmVyW11bXSwgYW5pbWF0ZT86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbmFtZXNwYWNlIHRpbGVDb250YWluZXIge1xyXG4gICAgICAgIGludGVyZmFjZSBDYW52YXNDb250YWluZXJPcHRpb25zIHtcclxuICAgICAgICAgIG5vdEZvdW5kVGlsZT86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgICB0aWxlQ2xhc3M/OiBJQ2FudmFzVGlsZTtcclxuICAgICAgICAgIHRpbGVUcmFuc3BhcmVudD86IGJvb2xlYW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGFzcyBDYW52YXNDb250YWluZXIgaW1wbGVtZW50cyBJQ2hpbGRPbk1hcCB7XHJcbiAgICAgICAgICBjb25zdHJ1Y3RvcihsYXllcjogSUxheWVyLCBvcHRpb25zPzogQ2FudmFzQ29udGFpbmVyT3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgZXZlbnRzOiBJRXZlbnRNYW5hZ2VyO1xyXG5cclxuICAgICAgICAgIGdldE1hcCgpOiBNYXA7XHJcblxyXG4gICAgICAgICAgZ2V0UGFyZW50KCk6IG9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgICAgICAgZ2V0VGlsZSh0aWxlTnVtYmVyOiBudW1iZXJbXSwgdGlsZVpvb206IG51bWJlciwgcHJpb3JpdHk6IG51bWJlcik6IElDYW52YXNUaWxlO1xyXG5cclxuICAgICAgICAgIHNldFBhcmVudChwYXJlbnQ6IG9iamVjdCB8IG51bGwpOiB0aGlzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW50ZXJmYWNlIERvbUNvbnRhaW5lck9wdGlvbnMge1xyXG4gICAgICAgICAgbm90Rm91bmRUaWxlPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgIHRpbGVDbGFzcz86IElEb21UaWxlO1xyXG4gICAgICAgICAgdGlsZVRyYW5zcGFyZW50PzogYm9vbGVhbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNsYXNzIERvbUNvbnRhaW5lciBpbXBsZW1lbnRzIElDaGlsZE9uTWFwIHtcclxuICAgICAgICAgIGNvbnN0cnVjdG9yKGxheWVyOiBJTGF5ZXIsIG9wdGlvbnM/OiBEb21Db250YWluZXJPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICBldmVudHM6IElFdmVudE1hbmFnZXI7XHJcblxyXG4gICAgICAgICAgZ2V0TWFwKCk6IE1hcDtcclxuXHJcbiAgICAgICAgICBnZXRQYXJlbnQoKTogb2JqZWN0IHwgbnVsbDtcclxuXHJcbiAgICAgICAgICBnZXRUaWxlKHRpbGVOdW1iZXI6IG51bWJlcltdLCB0aWxlWm9vbTogbnVtYmVyLCBwcmlvcml0eTogbnVtYmVyKTogSUNhbnZhc1RpbGU7XHJcblxyXG4gICAgICAgICAgc2V0UGFyZW50KHBhcmVudDogb2JqZWN0IHwgbnVsbCk6IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIG1hcFR5cGUge1xyXG4gICAgICBjb25zdCBzdG9yYWdlOiB1dGlsLlN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmFtZXNwYWNlIHByb2plY3Rpb24ge1xyXG4gICAgICBjbGFzcyBDYXJ0ZXNpYW4gaW1wbGVtZW50cyBJUHJvamVjdGlvbiB7XHJcbiAgICAgICAgY29uc3RydWN0b3IoYm91bmRzOiBudW1iZXJbXVtdLCBjeWNsZWQ/OiBib29sZWFuW10sIHNjYWxlPzogbnVtYmVyIHwgbnVtYmVyW10pO1xyXG5cclxuICAgICAgICBmcm9tR2xvYmFsUGl4ZWxzKGdsb2JhbFBpeGVsUG9pbnQ6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBudW1iZXJbXTtcclxuXHJcbiAgICAgICAgZ2V0Q29vcmRTeXN0ZW0oKTogSUNvb3JkU3lzdGVtO1xyXG5cclxuICAgICAgICBpc0N5Y2xlZCgpOiBib29sZWFuW107XHJcblxyXG4gICAgICAgIHRvR2xvYmFsUGl4ZWxzKGNvb3JkUG9pbnQ6IG51bWJlcltdLCB6b29tOiBudW1iZXIpOiBudW1iZXJbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3BoZXJpY2FsTWVyY2F0b3I6IElQcm9qZWN0aW9uO1xyXG5cclxuICAgICAgY29uc3Qgd2dzODRNZXJjYXRvcjogSVByb2plY3Rpb247XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyBgZGVjbGFyZSBuYW1lc3BhY2UgeW1hcHNgIGRvZXNuJ3Qgd29yayBhbnltb3JlIC0gaXQncyBub3QgY29waWVkIHRvIHRoZSBkaXN0LlxyXG4vLyBUbyBmaXggdGhpcywgd2Ugbm93IHVzZSBgZGVjbGFyZSBnbG9iYWwgeyBuYW1lc3BhY2UgeW1hcHMgeyAuLi4gfSB9YCxcclxuLy8gYW5kIGNvbnZlcnQgdGhpcyBmaWxlIHRvIGEgbW9kdWxlIGJ5IGFkZGluZyBgZXhwb3J0IHt9YC5cclxuLy9cclxuLy8gSSBjb3VsZG4ndCBmaW5kIGFueSBvdGhlciB3b3JraW5nIHNvbHV0aW9ucyB0aGF0IGRvbid0IGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbmV4cG9ydCB7fTtcclxuIl19","/**\n * Copied from angular/components/google-maps and updated for Yandex.Maps API.\n * {@link https://github.com/angular/components/blob/main/src/google-maps/map-event-manager.ts}\n */\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n/**\n * Manages event on a Yandex.Maps object, ensuring that events are added only when necessary.\n * @internal\n */\nexport class EventManager {\n    constructor(ngZone) {\n        this.ngZone = ngZone;\n        /**\n         * Listeners that were added before the target was set.\n         */\n        this.pending = [];\n        this.listeners = [];\n        this.targetStream = new BehaviorSubject(undefined);\n    }\n    /**\n     * Gets an observable that adds an event listener to the map when a consumer subscribes to it.\n     * @param name\n     */\n    getLazyEmitter(name) {\n        return this.targetStream.pipe(switchMap((target) => {\n            const observable = new Observable((observer) => {\n                // If the target hasn't been initialized yet, cache the observer, so it can be added later.\n                if (!target) {\n                    this.pending.push({ observable, observer });\n                    return undefined;\n                }\n                const callback = (event) => {\n                    const e = {\n                        event,\n                        target,\n                        ymaps,\n                    };\n                    this.ngZone.run(() => observer.next(e));\n                };\n                const listener = target.events.add(name, callback);\n                this.listeners.push({ name, callback, manager: listener });\n                // Unsubscribe function\n                return () => listener.remove(name, callback);\n            });\n            return observable;\n        }));\n    }\n    /**\n     * Sets the current target that the manager should bind events to.\n     * @param target\n     */\n    setTarget(target) {\n        const currentTarget = this.targetStream.value;\n        if (target === currentTarget) {\n            return;\n        }\n        // Clear the listeners from the pre-existing target.\n        if (currentTarget) {\n            this.clearListeners();\n            this.pending = [];\n        }\n        this.targetStream.next(target);\n        // Add the listeners that were bound before the map was initialized.\n        this.pending.forEach((subscriber) => subscriber.observable.subscribe(subscriber.observer));\n        this.pending = [];\n    }\n    /**\n     * Destroys the manager and clears the event listeners.\n     */\n    destroy() {\n        this.clearListeners();\n        this.pending = [];\n        this.targetStream.complete();\n    }\n    /**\n     * Clears all currently-registered event listeners.\n     */\n    clearListeners() {\n        this.listeners.forEach((listener) => {\n            const { name, callback, manager } = listener;\n            manager.remove(name, callback);\n        });\n        this.listeners = [];\n    }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL3V0aWxzL2V2ZW50LW1hbmFnZXIvZXZlbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXM0M7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFpQnZCLFlBQTZCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEIzQzs7V0FFRztRQUNLLFlBQU8sR0FHVCxFQUFFLENBQUM7UUFFRCxjQUFTLEdBSVgsRUFBRSxDQUFDO1FBRVEsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBaUMsU0FBUyxDQUFDLENBQUM7SUFFakQsQ0FBQztJQUUvQzs7O09BR0c7SUFDSCxjQUFjLENBQUMsSUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQixNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBVSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN0RCwyRkFBMkY7Z0JBQzNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxDQUFDLEdBQUc7d0JBQ1IsS0FBSzt3QkFDTCxNQUFNO3dCQUNOLEtBQUs7cUJBQ04sQ0FBQztvQkFFRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQztnQkFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFFM0QsdUJBQXVCO2dCQUN2QixPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQWUsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsTUFBMEI7UUFDbEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFOUMsSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9CLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxRQUFRLENBQUM7WUFDN0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBZSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29waWVkIGZyb20gYW5ndWxhci9jb21wb25lbnRzL2dvb2dsZS1tYXBzIGFuZCB1cGRhdGVkIGZvciBZYW5kZXguTWFwcyBBUEkuXHJcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvZ29vZ2xlLW1hcHMvbWFwLWV2ZW50LW1hbmFnZXIudHN9XHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBZYUV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy95YS1ldmVudCc7XHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIEV2ZW50TWFuYWdlclRhcmdldCA9IHtcclxuICBldmVudHM6IHltYXBzLklFdmVudE1hbmFnZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogTWFuYWdlcyBldmVudCBvbiBhIFlhbmRleC5NYXBzIG9iamVjdCwgZW5zdXJpbmcgdGhhdCBldmVudHMgYXJlIGFkZGVkIG9ubHkgd2hlbiBuZWNlc3NhcnkuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEV2ZW50TWFuYWdlciB7XHJcbiAgLyoqXHJcbiAgICogTGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZCBiZWZvcmUgdGhlIHRhcmdldCB3YXMgc2V0LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGVuZGluZzoge1xyXG4gICAgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgb2JzZXJ2ZXI6IFN1YnNjcmliZXI8YW55PjtcclxuICB9W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGNhbGxiYWNrOiAoZTogeW1hcHMuRXZlbnQpID0+IHZvaWQ7XHJcbiAgICBtYW5hZ2VyOiB5bWFwcy5JRXZlbnRNYW5hZ2VyO1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldFN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXZlbnRNYW5hZ2VyVGFyZ2V0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBhZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBtYXAgd2hlbiBhIGNvbnN1bWVyIHN1YnNjcmliZXMgdG8gaXQuXHJcbiAgICogQHBhcmFtIG5hbWVcclxuICAgKi9cclxuICBnZXRMYXp5RW1pdHRlcihuYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFlhRXZlbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLnRhcmdldFN0cmVhbS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHRhcmdldCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxZYUV2ZW50Pigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBjYWNoZSB0aGUgb2JzZXJ2ZXIsIHNvIGl0IGNhbiBiZSBhZGRlZCBsYXRlci5cclxuICAgICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZy5wdXNoKHsgb2JzZXJ2YWJsZSwgb2JzZXJ2ZXIgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAoZXZlbnQ6IHltYXBzLkV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGUgPSB7XHJcbiAgICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgIHltYXBzLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoZSkpO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IHRhcmdldC5ldmVudHMuYWRkKG5hbWUsIGNhbGxiYWNrKTtcclxuICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2goeyBuYW1lLCBjYWxsYmFjaywgbWFuYWdlcjogbGlzdGVuZXIgfSk7XHJcblxyXG4gICAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnVuY3Rpb25cclxuICAgICAgICAgIHJldHVybiAoKSA9PiBsaXN0ZW5lci5yZW1vdmUobmFtZSwgY2FsbGJhY2sgYXMgYW55KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgdGFyZ2V0IHRoYXQgdGhlIG1hbmFnZXIgc2hvdWxkIGJpbmQgZXZlbnRzIHRvLlxyXG4gICAqIEBwYXJhbSB0YXJnZXRcclxuICAgKi9cclxuICBzZXRUYXJnZXQodGFyZ2V0OiBFdmVudE1hbmFnZXJUYXJnZXQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0aGlzLnRhcmdldFN0cmVhbS52YWx1ZTtcclxuXHJcbiAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhciB0aGUgbGlzdGVuZXJzIGZyb20gdGhlIHByZS1leGlzdGluZyB0YXJnZXQuXHJcbiAgICBpZiAoY3VycmVudFRhcmdldCkge1xyXG4gICAgICB0aGlzLmNsZWFyTGlzdGVuZXJzKCk7XHJcbiAgICAgIHRoaXMucGVuZGluZyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFyZ2V0U3RyZWFtLm5leHQodGFyZ2V0KTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIGxpc3RlbmVycyB0aGF0IHdlcmUgYm91bmQgYmVmb3JlIHRoZSBtYXAgd2FzIGluaXRpYWxpemVkLlxyXG4gICAgdGhpcy5wZW5kaW5nLmZvckVhY2goKHN1YnNjcmliZXIpID0+IHN1YnNjcmliZXIub2JzZXJ2YWJsZS5zdWJzY3JpYmUoc3Vic2NyaWJlci5vYnNlcnZlcikpO1xyXG5cclxuICAgIHRoaXMucGVuZGluZyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveXMgdGhlIG1hbmFnZXIgYW5kIGNsZWFycyB0aGUgZXZlbnQgbGlzdGVuZXJzLlxyXG4gICAqL1xyXG4gIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyTGlzdGVuZXJzKCk7XHJcbiAgICB0aGlzLnBlbmRpbmcgPSBbXTtcclxuICAgIHRoaXMudGFyZ2V0U3RyZWFtLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhcnMgYWxsIGN1cnJlbnRseS1yZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy5cclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyTGlzdGVuZXJzKCkge1xyXG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcclxuICAgICAgY29uc3QgeyBuYW1lLCBjYWxsYmFjaywgbWFuYWdlciB9ID0gbGlzdGVuZXI7XHJcbiAgICAgIG1hbmFnZXIucmVtb3ZlKG5hbWUsIGNhbGxiYWNrIGFzIGFueSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xyXG4gIH1cclxufVxyXG4iXX0=","import { InjectionToken } from '@angular/core';\n/**\n * An injection token to provide a configuration.\n *\n * Use this token only if you want to implement some special logic.\n * Otherwise, use an `AngularYandexMapsModule.forRoot()` method in a root module.\n *\n * Please note that `YaApiLoaderService` is provided at the root level,\n * so it won't take your configuration unless this token is provided in the root module.\n *\n * If you want to provide the configuration in the module other than the root module, you have to provide `YaApiLoaderService`.\n * But keep in mind that starting from `v16.1.0` `YaApiLoaderService` supports the dynamic configuration,\n * if you provide this service it will lead to unexpected issues such as script duplications.\n *\n * ```ts\n * \\@NgModule({\n *   imports: [AngularYandexMapsModule],\n *   providers: [\n *     YaApiLoaderService,\n *     {\n *       provide: YA_CONFIG,\n *       useValue: {\n *         apikey: null,\n *         lang: 'ru_RU',\n *       },\n *     },\n *   ],\n * })\n * export class HomeModule {}\n * ```\n */\nexport const YA_CONFIG = new InjectionToken('YA_CONFIG', {\n    factory: () => ({}),\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXlhbmRleC1tYXBzLXYyL3NyYy9saWIvdG9rZW5zL3lhLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBVyxXQUFXLEVBQUU7SUFDakUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3BCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBZYUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMveWEtY29uZmlnJztcclxuXHJcbi8qKlxyXG4gKiBBbiBpbmplY3Rpb24gdG9rZW4gdG8gcHJvdmlkZSBhIGNvbmZpZ3VyYXRpb24uXHJcbiAqXHJcbiAqIFVzZSB0aGlzIHRva2VuIG9ubHkgaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50IHNvbWUgc3BlY2lhbCBsb2dpYy5cclxuICogT3RoZXJ3aXNlLCB1c2UgYW4gYEFuZ3VsYXJZYW5kZXhNYXBzTW9kdWxlLmZvclJvb3QoKWAgbWV0aG9kIGluIGEgcm9vdCBtb2R1bGUuXHJcbiAqXHJcbiAqIFBsZWFzZSBub3RlIHRoYXQgYFlhQXBpTG9hZGVyU2VydmljZWAgaXMgcHJvdmlkZWQgYXQgdGhlIHJvb3QgbGV2ZWwsXHJcbiAqIHNvIGl0IHdvbid0IHRha2UgeW91ciBjb25maWd1cmF0aW9uIHVubGVzcyB0aGlzIHRva2VuIGlzIHByb3ZpZGVkIGluIHRoZSByb290IG1vZHVsZS5cclxuICpcclxuICogSWYgeW91IHdhbnQgdG8gcHJvdmlkZSB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgbW9kdWxlIG90aGVyIHRoYW4gdGhlIHJvb3QgbW9kdWxlLCB5b3UgaGF2ZSB0byBwcm92aWRlIGBZYUFwaUxvYWRlclNlcnZpY2VgLlxyXG4gKiBCdXQga2VlcCBpbiBtaW5kIHRoYXQgc3RhcnRpbmcgZnJvbSBgdjE2LjEuMGAgYFlhQXBpTG9hZGVyU2VydmljZWAgc3VwcG9ydHMgdGhlIGR5bmFtaWMgY29uZmlndXJhdGlvbixcclxuICogaWYgeW91IHByb3ZpZGUgdGhpcyBzZXJ2aWNlIGl0IHdpbGwgbGVhZCB0byB1bmV4cGVjdGVkIGlzc3VlcyBzdWNoIGFzIHNjcmlwdCBkdXBsaWNhdGlvbnMuXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIFxcQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbQW5ndWxhcllhbmRleE1hcHNNb2R1bGVdLFxyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgWWFBcGlMb2FkZXJTZXJ2aWNlLFxyXG4gKiAgICAge1xyXG4gKiAgICAgICBwcm92aWRlOiBZQV9DT05GSUcsXHJcbiAqICAgICAgIHVzZVZhbHVlOiB7XHJcbiAqICAgICAgICAgYXBpa2V5OiBudWxsLFxyXG4gKiAgICAgICAgIGxhbmc6ICdydV9SVScsXHJcbiAqICAgICAgIH0sXHJcbiAqICAgICB9LFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBIb21lTW9kdWxlIHt9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFlBX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxZYUNvbmZpZz4oJ1lBX0NPTkZJRycsIHtcclxuICBmYWN0b3J5OiAoKSA9PiAoe30pLFxyXG59KTtcclxuIl19","/**\n * Copied from Taiga UI.\n * https://github.com/taiga-family/taiga-ui/blob/eafb4f498ff57f4a21eebe74aee97a72b5e8d3f8/projects/cdk/observables/zone.ts#L19\n */\nimport { Observable } from 'rxjs';\nexport function enterZone(zone) {\n    return (source) => new Observable((subscriber) => source.subscribe({\n        next: (value) => zone.run(() => subscriber.next(value)),\n        error: (error) => zone.run(() => subscriber.error(error)),\n        complete: () => zone.run(() => subscriber.complete()),\n    }));\n}\nexport function exitZone(zone) {\n    return (source) => new Observable((subscriber) => zone.runOutsideAngular(() => source.subscribe(subscriber)));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL3V0aWxzL3pvbmUvem9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFJSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE1BQU0sVUFBVSxTQUFTLENBQUksSUFBWTtJQUN2QyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUM1QixNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2YsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsS0FBSyxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3RELENBQUMsQ0FDSCxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUksSUFBWTtJQUN0QyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcGllZCBmcm9tIFRhaWdhIFVJLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGFpZ2EtZmFtaWx5L3RhaWdhLXVpL2Jsb2IvZWFmYjRmNDk4ZmY1N2Y0YTIxZWViZTc0YWVlOTdhNzJiNWU4ZDNmOC9wcm9qZWN0cy9jZGsvb2JzZXJ2YWJsZXMvem9uZS50cyNMMTlcclxuICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgdHlwZSB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW50ZXJab25lPFQ+KHpvbmU6IE5nWm9uZSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XHJcbiAgcmV0dXJuIChzb3VyY2UpID0+XHJcbiAgICBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT5cclxuICAgICAgc291cmNlLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB6b25lLnJ1bigoKSA9PiBzdWJzY3JpYmVyLm5leHQodmFsdWUpKSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiB1bmtub3duKSA9PiB6b25lLnJ1bigoKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSksXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHpvbmUucnVuKCgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKSksXHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRab25lPFQ+KHpvbmU6IE5nWm9uZSk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiB7XHJcbiAgcmV0dXJuIChzb3VyY2UpID0+XHJcbiAgICBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzb3VyY2Uuc3Vic2NyaWJlKHN1YnNjcmliZXIpKSk7XHJcbn1cclxuIl19","import { isPlatformBrowser } from '@angular/common';\nimport { DOCUMENT, inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { BehaviorSubject, from, fromEvent, isObservable, merge, mergeMap, NEVER, of, tap, throwError, } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { YA_CONFIG } from '../../tokens/ya-config';\nimport { exitZone } from '../../utils/zone/zone';\nimport * as i0 from \"@angular/core\";\n/**\n * The `YaApiLoader` service handles loading of Yandex.Maps API. Use it if you do not need `YaMapComponent`.\n *\n * Starting from `v16.1.0` the service supports dynamic configuration changes by subscribing on a `YaConfig` observable.\n * It stores global API objects in a local cache, and updates them in runtime if necessary.\n * That's why do not provide this service, it will break the synchronizations between the local cache and HTML scripts.\n *\n * ```ts\n * import { YaApiLoaderService } from 'angular8-yandex-maps';\n *\n * @Component()\n * export class AppComponent {\n *   constructor(private yaApiLoaderService: YaApiLoaderService) {\n *     // Don't forget to unsubscribe\n *     this.yaApiLoaderService.load()\n *       .subscribe(v => console.log(v))\n *   }\n * }\n *```\n */\nexport class YaApiLoaderService {\n    constructor() {\n        this.document = inject(DOCUMENT);\n        this.ngZone = inject(NgZone);\n        this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n        this.defaultConfig = {\n            lang: 'ru_RU',\n            version: '2.1',\n        };\n        this.config$ = new BehaviorSubject(this.defaultConfig);\n        this.cache = new Map();\n        let config = inject(YA_CONFIG);\n        if (!isObservable(config)) {\n            config = of(config);\n        }\n        config.subscribe((config) => {\n            this.config$.next({\n                ...this.defaultConfig,\n                ...config,\n            });\n        });\n    }\n    /**\n     * Loads Yandex.Maps API.\n     */\n    load() {\n        if (!this.isBrowser) {\n            return NEVER;\n        }\n        return this.config$.pipe(\n        // 3rd party libraries shouldn't be run in a zone.\n        // Libraries run tons of different events (requestAnimationFrame, setTimeout, etc.).\n        // We do not need to run change detection for these events from the library.\n        // Exit from a zone here, so all components are also created outside a zone.\n        exitZone(this.ngZone), mergeMap((config) => {\n            /**\n             * We use a script source as a cache key, since there are a lot of parameters that affect the API.\n             * We can't rely only on one parameter. E.g., an enterprise flag is changed, we need to reload the API.\n             */\n            const cacheKey = this.getScriptSource(config);\n            const cache = this.cache.get(cacheKey) || {};\n            /**\n             * If it exists in the cache, return the ymaps from it,\n             * since script.onload triggers only once.\n             */\n            if (cache.ymaps) {\n                const apiObject = cache.ymaps;\n                /**\n                 * ready confirms that the API and DOM are ready for use,\n                 * we can return of(window.ymaps), but calling ready is safer, I believe.\n                 */\n                return from(apiObject.ready()).pipe(\n                // Each nested operator should run outside the zone.\n                // Refer to the comment above for the reason why we need to exit the zone.\n                exitZone(this.ngZone), \n                /**\n                 * Actually, we need to update it only if they are not equal,\n                 * it happens if we change the configuration which required new window.ymaps.\n                 */\n                tap(() => (window.ymaps = apiObject)), map(() => apiObject));\n            }\n            let script = cache.script;\n            /**\n             * It's possible that we have a script, but do not have ymaps.\n             * It happens if there are concurrent requests, and the first request creates the script,\n             * while the second must just wait for the API to be loaded.\n             */\n            if (!script) {\n                script = this.createScript(config);\n                this.cache.set(cacheKey, { script });\n                this.document.body.appendChild(script);\n            }\n            /**\n             * The API throws an error on a script load if there is window.ymaps.\n             * So before changing the configuration, delete the global object.\n             */\n            if (window.ymaps) {\n                delete window.ymaps;\n            }\n            /**\n             * window.ymaps is set explicitly via a script load event.\n             */\n            const load = fromEvent(script, 'load').pipe(switchMap(() => from(ymaps.ready())), tap(() => this.cache.set(cacheKey, { script, ymaps })), map(() => ymaps));\n            const error = fromEvent(script, 'error').pipe(switchMap(throwError));\n            return merge(load, error).pipe(\n            // Each nested operator should run outside the zone.\n            // Refer to the comment above for the reason why we need to exit the zone.\n            exitZone(this.ngZone), take(1));\n        }));\n    }\n    createScript(config) {\n        const script = this.document.createElement('script');\n        script.type = 'text/javascript';\n        script.src = this.getScriptSource(config);\n        script.id = 'yandexMapsApiScript';\n        script.async = true;\n        script.defer = true;\n        return script;\n    }\n    /**\n     * Returns a script source from a config.\n     * @param config parameters to add to a source\n     * @example\n     * // returns 'https://api-maps.yandex.ru/2.1/?apikey=658f67a2-fd77-42e9-b99e-2bd48c4ccad4&lang=en_US'\n     * getScriptSource({ apikey: '658f67a2-fd77-42e9-b99e-2bd48c4ccad4', lang: 'en_US' })\n     */\n    getScriptSource(config) {\n        const { enterprise, version, ...rest } = config;\n        const params = this.convertConfigIntoQueryParams(rest);\n        if (version === 'v3') {\n            throw new Error('This package does not support the Yandex.Maps API v3. See https://www.npmjs.com/package/angular-yandex-maps-v3');\n        }\n        return `https://${enterprise ? 'enterprise.' : ''}api-maps.yandex.ru/${version}/?${params}`;\n    }\n    /**\n     * Converts a config into query string parameters.\n     * @param config object to convert\n     * @example\n     * // returns \"lang=ru_RU&apikey=XXX\"\n     * convertIntoQueryParams({ lang: 'ru_RU', apikey: 'XXX' })\n     */\n    convertConfigIntoQueryParams(config) {\n        return Object.entries(config)\n            .map(([key, value]) => `${key}=${value}`)\n            .join('&');\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaApiLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaApiLoaderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaApiLoaderService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtYXBpLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXlhbmRleC1tYXBzLXYyL3NyYy9saWIvc2VydmljZXMveWEtYXBpLWxvYWRlci95YS1hcGktbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUNMLGVBQWUsRUFDZixJQUFJLEVBQ0osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssRUFFTCxFQUFFLEVBQ0YsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBR2pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QjtRQWJpQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRW5ELGtCQUFhLEdBQWE7WUFDekMsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFFZSxZQUFPLEdBQUcsSUFBSSxlQUFl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Q0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDOUYsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLDRCQUE0QixDQUFDLE1BQWdCO1FBQ25ELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7YUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7OEdBaEtVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERPQ1VNRU5ULCBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgZnJvbSxcclxuICBmcm9tRXZlbnQsXHJcbiAgaXNPYnNlcnZhYmxlLFxyXG4gIG1lcmdlLFxyXG4gIG1lcmdlTWFwLFxyXG4gIE5FVkVSLFxyXG4gIE9ic2VydmFibGUsXHJcbiAgb2YsXHJcbiAgdGFwLFxyXG4gIHRocm93RXJyb3IsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgWWFDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLWNvbmZpZyc7XHJcbmltcG9ydCB7IFlBX0NPTkZJRyB9IGZyb20gJy4uLy4uL3Rva2Vucy95YS1jb25maWcnO1xyXG5pbXBvcnQgeyBleGl0Wm9uZSB9IGZyb20gJy4uLy4uL3V0aWxzL3pvbmUvem9uZSc7XHJcbmltcG9ydCB7IFlhQXBpTG9hZGVyQ2FjaGUgfSBmcm9tICcuL2ludGVyZmFjZXMveWEtYXBpLWxvYWRlci1jYWNoZSc7XHJcblxyXG4vKipcclxuICogVGhlIGBZYUFwaUxvYWRlcmAgc2VydmljZSBoYW5kbGVzIGxvYWRpbmcgb2YgWWFuZGV4Lk1hcHMgQVBJLiBVc2UgaXQgaWYgeW91IGRvIG5vdCBuZWVkIGBZYU1hcENvbXBvbmVudGAuXHJcbiAqXHJcbiAqIFN0YXJ0aW5nIGZyb20gYHYxNi4xLjBgIHRoZSBzZXJ2aWNlIHN1cHBvcnRzIGR5bmFtaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGJ5IHN1YnNjcmliaW5nIG9uIGEgYFlhQ29uZmlnYCBvYnNlcnZhYmxlLlxyXG4gKiBJdCBzdG9yZXMgZ2xvYmFsIEFQSSBvYmplY3RzIGluIGEgbG9jYWwgY2FjaGUsIGFuZCB1cGRhdGVzIHRoZW0gaW4gcnVudGltZSBpZiBuZWNlc3NhcnkuXHJcbiAqIFRoYXQncyB3aHkgZG8gbm90IHByb3ZpZGUgdGhpcyBzZXJ2aWNlLCBpdCB3aWxsIGJyZWFrIHRoZSBzeW5jaHJvbml6YXRpb25zIGJldHdlZW4gdGhlIGxvY2FsIGNhY2hlIGFuZCBIVE1MIHNjcmlwdHMuXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIGltcG9ydCB7IFlhQXBpTG9hZGVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXI4LXlhbmRleC1tYXBzJztcclxuICpcclxuICogQENvbXBvbmVudCgpXHJcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgeWFBcGlMb2FkZXJTZXJ2aWNlOiBZYUFwaUxvYWRlclNlcnZpY2UpIHtcclxuICogICAgIC8vIERvbid0IGZvcmdldCB0byB1bnN1YnNjcmliZVxyXG4gKiAgICAgdGhpcy55YUFwaUxvYWRlclNlcnZpY2UubG9hZCgpXHJcbiAqICAgICAgIC5zdWJzY3JpYmUodiA9PiBjb25zb2xlLmxvZyh2KSlcclxuICogICB9XHJcbiAqIH1cclxuICpgYGBcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZYUFwaUxvYWRlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0Q29uZmlnOiBZYUNvbmZpZyA9IHtcclxuICAgIGxhbmc6ICdydV9SVScsXHJcbiAgICB2ZXJzaW9uOiAnMi4xJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFlhQ29uZmlnPih0aGlzLmRlZmF1bHRDb25maWcpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFlhQXBpTG9hZGVyQ2FjaGU+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgbGV0IGNvbmZpZyA9IGluamVjdDxZYUNvbmZpZyB8IE9ic2VydmFibGU8WWFDb25maWc+PihZQV9DT05GSUcpO1xyXG5cclxuICAgIGlmICghaXNPYnNlcnZhYmxlKGNvbmZpZykpIHtcclxuICAgICAgY29uZmlnID0gb2YoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHtcclxuICAgICAgdGhpcy5jb25maWckLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdENvbmZpZyxcclxuICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkcyBZYW5kZXguTWFwcyBBUEkuXHJcbiAgICovXHJcbiAgbG9hZCgpOiBPYnNlcnZhYmxlPHR5cGVvZiB5bWFwcz4ge1xyXG4gICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xyXG4gICAgICByZXR1cm4gTkVWRVI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnJC5waXBlKFxyXG4gICAgICAvLyAzcmQgcGFydHkgbGlicmFyaWVzIHNob3VsZG4ndCBiZSBydW4gaW4gYSB6b25lLlxyXG4gICAgICAvLyBMaWJyYXJpZXMgcnVuIHRvbnMgb2YgZGlmZmVyZW50IGV2ZW50cyAocmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBzZXRUaW1lb3V0LCBldGMuKS5cclxuICAgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcnVuIGNoYW5nZSBkZXRlY3Rpb24gZm9yIHRoZXNlIGV2ZW50cyBmcm9tIHRoZSBsaWJyYXJ5LlxyXG4gICAgICAvLyBFeGl0IGZyb20gYSB6b25lIGhlcmUsIHNvIGFsbCBjb21wb25lbnRzIGFyZSBhbHNvIGNyZWF0ZWQgb3V0c2lkZSBhIHpvbmUuXHJcbiAgICAgIGV4aXRab25lKHRoaXMubmdab25lKSxcclxuICAgICAgbWVyZ2VNYXAoKGNvbmZpZykgPT4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdlIHVzZSBhIHNjcmlwdCBzb3VyY2UgYXMgYSBjYWNoZSBrZXksIHNpbmNlIHRoZXJlIGFyZSBhIGxvdCBvZiBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHRoZSBBUEkuXHJcbiAgICAgICAgICogV2UgY2FuJ3QgcmVseSBvbmx5IG9uIG9uZSBwYXJhbWV0ZXIuIEUuZy4sIGFuIGVudGVycHJpc2UgZmxhZyBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgQVBJLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZXRTY3JpcHRTb3VyY2UoY29uZmlnKTtcclxuICAgICAgICBjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KSB8fCB7fTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgaXQgZXhpc3RzIGluIHRoZSBjYWNoZSwgcmV0dXJuIHRoZSB5bWFwcyBmcm9tIGl0LFxyXG4gICAgICAgICAqIHNpbmNlIHNjcmlwdC5vbmxvYWQgdHJpZ2dlcnMgb25seSBvbmNlLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChjYWNoZS55bWFwcykge1xyXG4gICAgICAgICAgY29uc3QgYXBpT2JqZWN0OiB0eXBlb2YgeW1hcHMgPSBjYWNoZS55bWFwcztcclxuXHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIHJlYWR5IGNvbmZpcm1zIHRoYXQgdGhlIEFQSSBhbmQgRE9NIGFyZSByZWFkeSBmb3IgdXNlLFxyXG4gICAgICAgICAgICogd2UgY2FuIHJldHVybiBvZih3aW5kb3cueW1hcHMpLCBidXQgY2FsbGluZyByZWFkeSBpcyBzYWZlciwgSSBiZWxpZXZlLlxyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICByZXR1cm4gZnJvbShhcGlPYmplY3QucmVhZHkoKSkucGlwZShcclxuICAgICAgICAgICAgLy8gRWFjaCBuZXN0ZWQgb3BlcmF0b3Igc2hvdWxkIHJ1biBvdXRzaWRlIHRoZSB6b25lLlxyXG4gICAgICAgICAgICAvLyBSZWZlciB0byB0aGUgY29tbWVudCBhYm92ZSBmb3IgdGhlIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBleGl0IHRoZSB6b25lLlxyXG4gICAgICAgICAgICBleGl0Wm9uZSh0aGlzLm5nWm9uZSksXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBY3R1YWxseSwgd2UgbmVlZCB0byB1cGRhdGUgaXQgb25seSBpZiB0aGV5IGFyZSBub3QgZXF1YWwsXHJcbiAgICAgICAgICAgICAqIGl0IGhhcHBlbnMgaWYgd2UgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIHdoaWNoIHJlcXVpcmVkIG5ldyB3aW5kb3cueW1hcHMuXHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICB0YXAoKCkgPT4gKHdpbmRvdy55bWFwcyA9IGFwaU9iamVjdCkpLFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4gYXBpT2JqZWN0KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2NyaXB0ID0gY2FjaGUuc2NyaXB0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgaGF2ZSBhIHNjcmlwdCwgYnV0IGRvIG5vdCBoYXZlIHltYXBzLlxyXG4gICAgICAgICAqIEl0IGhhcHBlbnMgaWYgdGhlcmUgYXJlIGNvbmN1cnJlbnQgcmVxdWVzdHMsIGFuZCB0aGUgZmlyc3QgcmVxdWVzdCBjcmVhdGVzIHRoZSBzY3JpcHQsXHJcbiAgICAgICAgICogd2hpbGUgdGhlIHNlY29uZCBtdXN0IGp1c3Qgd2FpdCBmb3IgdGhlIEFQSSB0byBiZSBsb2FkZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKCFzY3JpcHQpIHtcclxuICAgICAgICAgIHNjcmlwdCA9IHRoaXMuY3JlYXRlU2NyaXB0KGNvbmZpZyk7XHJcbiAgICAgICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgeyBzY3JpcHQgfSk7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoZSBBUEkgdGhyb3dzIGFuIGVycm9yIG9uIGEgc2NyaXB0IGxvYWQgaWYgdGhlcmUgaXMgd2luZG93LnltYXBzLlxyXG4gICAgICAgICAqIFNvIGJlZm9yZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiwgZGVsZXRlIHRoZSBnbG9iYWwgb2JqZWN0LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh3aW5kb3cueW1hcHMpIHtcclxuICAgICAgICAgIGRlbGV0ZSAod2luZG93IGFzIGFueSkueW1hcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB3aW5kb3cueW1hcHMgaXMgc2V0IGV4cGxpY2l0bHkgdmlhIGEgc2NyaXB0IGxvYWQgZXZlbnQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgbG9hZCA9IGZyb21FdmVudChzY3JpcHQsICdsb2FkJykucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tKHltYXBzLnJlYWR5KCkpKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgeyBzY3JpcHQsIHltYXBzIH0pKSxcclxuICAgICAgICAgIG1hcCgoKSA9PiB5bWFwcyksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmcm9tRXZlbnQoc2NyaXB0LCAnZXJyb3InKS5waXBlKHN3aXRjaE1hcCh0aHJvd0Vycm9yKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBtZXJnZShsb2FkLCBlcnJvcikucGlwZShcclxuICAgICAgICAgIC8vIEVhY2ggbmVzdGVkIG9wZXJhdG9yIHNob3VsZCBydW4gb3V0c2lkZSB0aGUgem9uZS5cclxuICAgICAgICAgIC8vIFJlZmVyIHRvIHRoZSBjb21tZW50IGFib3ZlIGZvciB0aGUgcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGV4aXQgdGhlIHpvbmUuXHJcbiAgICAgICAgICBleGl0Wm9uZSh0aGlzLm5nWm9uZSksXHJcbiAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlU2NyaXB0KGNvbmZpZzogWWFDb25maWcpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cclxuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XHJcbiAgICBzY3JpcHQuc3JjID0gdGhpcy5nZXRTY3JpcHRTb3VyY2UoY29uZmlnKTtcclxuICAgIHNjcmlwdC5pZCA9ICd5YW5kZXhNYXBzQXBpU2NyaXB0JztcclxuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBzY3JpcHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgc2NyaXB0IHNvdXJjZSBmcm9tIGEgY29uZmlnLlxyXG4gICAqIEBwYXJhbSBjb25maWcgcGFyYW1ldGVycyB0byBhZGQgdG8gYSBzb3VyY2VcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIHJldHVybnMgJ2h0dHBzOi8vYXBpLW1hcHMueWFuZGV4LnJ1LzIuMS8/YXBpa2V5PTY1OGY2N2EyLWZkNzctNDJlOS1iOTllLTJiZDQ4YzRjY2FkNCZsYW5nPWVuX1VTJ1xyXG4gICAqIGdldFNjcmlwdFNvdXJjZSh7IGFwaWtleTogJzY1OGY2N2EyLWZkNzctNDJlOS1iOTllLTJiZDQ4YzRjY2FkNCcsIGxhbmc6ICdlbl9VUycgfSlcclxuICAgKi9cclxuICBwcml2YXRlIGdldFNjcmlwdFNvdXJjZShjb25maWc6IFlhQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHsgZW50ZXJwcmlzZSwgdmVyc2lvbiwgLi4ucmVzdCB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb252ZXJ0Q29uZmlnSW50b1F1ZXJ5UGFyYW1zKHJlc3QpO1xyXG5cclxuICAgIGlmICh2ZXJzaW9uID09PSAndjMnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnVGhpcyBwYWNrYWdlIGRvZXMgbm90IHN1cHBvcnQgdGhlIFlhbmRleC5NYXBzIEFQSSB2My4gU2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjMnLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgaHR0cHM6Ly8ke2VudGVycHJpc2UgPyAnZW50ZXJwcmlzZS4nIDogJyd9YXBpLW1hcHMueWFuZGV4LnJ1LyR7dmVyc2lvbn0vPyR7cGFyYW1zfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0cyBhIGNvbmZpZyBpbnRvIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSBjb25maWcgb2JqZWN0IHRvIGNvbnZlcnRcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIHJldHVybnMgXCJsYW5nPXJ1X1JVJmFwaWtleT1YWFhcIlxyXG4gICAqIGNvbnZlcnRJbnRvUXVlcnlQYXJhbXMoeyBsYW5nOiAncnVfUlUnLCBhcGlrZXk6ICdYWFgnIH0pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb252ZXJ0Q29uZmlnSW50b1F1ZXJ5UGFyYW1zKGNvbmZpZzogWWFDb25maWcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNvbmZpZylcclxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YClcclxuICAgICAgLmpvaW4oJyYnKTtcclxuICB9XHJcbn1cclxuIl19","/**\n * Generates a random string based on Date in hexadecimal numeral system.\n * @example f175517fa4f3\n * @internal\n */\nexport const generateRandomId = () => `f${Date.now().toString(16)}`;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtcmFuZG9tLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXlhbmRleC1tYXBzLXYyL3NyYy9saWIvdXRpbHMvZ2VuZXJhdGUtcmFuZG9tLWlkL2dlbmVyYXRlLXJhbmRvbS1pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsR0FBVyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHN0cmluZyBiYXNlZCBvbiBEYXRlIGluIGhleGFkZWNpbWFsIG51bWVyYWwgc3lzdGVtLlxyXG4gKiBAZXhhbXBsZSBmMTc1NTE3ZmE0ZjNcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSYW5kb21JZCA9ICgpOiBzdHJpbmcgPT4gYGYke0RhdGUubm93KCkudG9TdHJpbmcoMTYpfWA7XHJcbiJdfQ==","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, inject, Input, NgZone, Output, ViewChild, } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject, takeUntil } from 'rxjs';\nimport { YaApiLoaderService } from '../../services/ya-api-loader/ya-api-loader.service';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { generateRandomId } from '../../utils/generate-random-id/generate-random-id';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-map` component wraps `ymaps.Map` class from the Yandex.Maps API.\n * You can configure the map via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * <example-url>https://stackblitz.com/edit/map-onload-event?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map\n *   [center]=\"[55.751952, 37.600739]\"\n *   [state]=\"{type: 'yandex#satellite'}\"\n * ></ya-map>\n * ```\n */\nexport class YaMapComponent {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaApiLoaderService = inject(YaApiLoaderService);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        this.map$ = new BehaviorSubject(null);\n        /**\n         * Geo coordinates of the map center. Default is `[0, 0]`.\n         * Shorthand for `[state]=\"{ center: [0, 0] }\"`.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#Map__param-state.center}\n         */\n        this.center = [0, 0];\n        /**\n         * Map zoom level. Default level is `10`.\n         * Shorthand for `[state]=\"{ zoom: 10 }\"`.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#Map__param-state.zoom}\n         */\n        this.zoom = 10;\n        /**\n         * Map instance is created. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * The start of a new smooth map movement.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-actionbegin}\n         */\n        this.actionbegin = this.eventManager.getLazyEmitter('actionbegin');\n        /**\n         * Event that occurs when an action step was prematurely stopped.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-actionbreak}\n         */\n        this.actionbreak = this.eventManager.getLazyEmitter('actionbreak');\n        /**\n         * The end of smooth map movement.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-actionend}\n         */\n        this.actionend = this.eventManager.getLazyEmitter('actionend');\n        /**\n         * The start of a new step of smooth movement.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-actiontick}\n         */\n        this.actiontick = this.eventManager.getLazyEmitter('actiontick');\n        /**\n         * The end of performing a step of smooth movement.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-actiontickcomplete}\n         */\n        this.actiontickcomplete = this.eventManager.getLazyEmitter('actiontickcomplete');\n        /**\n         * Closing the balloon.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-balloonclose}\n         */\n        this.balloonclose = this.eventManager.getLazyEmitter('balloonclose');\n        /**\n         * Opening a balloon on a map.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-balloonopen}\n         */\n        this.balloonopen = this.eventManager.getLazyEmitter('balloonopen');\n        /**\n         * Event for a change to the map viewport.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-boundschange}\n         */\n        this.boundschange = this.eventManager.getLazyEmitter('boundschange');\n        /**\n         * Single left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-click}\n         */\n        this.yaclick = this.eventManager.getLazyEmitter('click');\n        /**\n         * Calls the element's context menu.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-contextmenu}\n         */\n        this.yacontextmenu = this.eventManager.getLazyEmitter('contextmenu');\n        /**\n         * Double left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-dblclick}\n         */\n        this.yadblclick = this.eventManager.getLazyEmitter('dblclick');\n        /**\n         * The map was destroyed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-destroy}\n         */\n        this.destroy = this.eventManager.getLazyEmitter('destroy');\n        /**\n         * Closing the hint.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-hintclose}\n         */\n        this.hintclose = this.eventManager.getLazyEmitter('hintclose');\n        /**\n         * Opening a hint on a map.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-hintopen}\n         */\n        this.hintopen = this.eventManager.getLazyEmitter('hintopen');\n        /**\n         * Map margins changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-marginchange}\n         */\n        this.marginchange = this.eventManager.getLazyEmitter('marginchange');\n        /**\n         * Pressing the mouse button over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousedown}\n         */\n        this.yamousedown = this.eventManager.getLazyEmitter('mousedown');\n        /**\n         * Pointing the cursor at the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseenter}\n         */\n        this.yamouseenter = this.eventManager.getLazyEmitter('mouseenter');\n        /**\n         * Moving the cursor off of the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseleave}\n         */\n        this.yamouseleave = this.eventManager.getLazyEmitter('mouseleave');\n        /**\n         * Moving the cursor over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousemove}\n         */\n        this.yamousemove = this.eventManager.getLazyEmitter('mousemove');\n        /**\n         * Letting go of the mouse button over an object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseup}\n         */\n        this.yamouseup = this.eventManager.getLazyEmitter('mouseup');\n        /**\n         * End of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchend}\n         */\n        this.multitouchend = this.eventManager.getLazyEmitter('multitouchend');\n        /**\n         * Repeating event during multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchmove}\n         */\n        this.multitouchmove = this.eventManager.getLazyEmitter('multitouchmove');\n        /**\n         * Start of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchstart}\n         */\n        this.multitouchstart = this.eventManager.getLazyEmitter('multitouchstart');\n        /**\n         * Map options changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * Map size changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-sizechange}\n         */\n        this.sizechange = this.eventManager.getLazyEmitter('sizechange');\n        /**\n         * The map type changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Map.html#event_detail__event-typechange}\n         */\n        this.typechange = this.eventManager.getLazyEmitter('typechange');\n        /**\n         * Mouse wheel scrolling.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-wheel}\n         */\n        this.yawheel = this.eventManager.getLazyEmitter('wheel');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const map = this.map$.value;\n            if (map) {\n                const { center, zoom, state, options } = changes;\n                if (state) {\n                    this.setState(this.combineState(), map);\n                }\n                if (center) {\n                    map.setCenter(center.currentValue);\n                }\n                if (zoom) {\n                    map.setZoom(zoom.currentValue);\n                }\n                if (options) {\n                    map.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngAfterViewInit() {\n        this.yaApiLoaderService\n            .load()\n            .pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n            const id = generateRandomId();\n            const map = this.createMap(id);\n            /**\n             * Once the configuration is changed, e.g. language,\n             * we need to reinitialize the map.\n             */\n            if (this.map$.value) {\n                this.map$.value.destroy();\n            }\n            this.map$.next(map);\n            this.eventManager.setTarget(map);\n            this.ready.emit({ ymaps, target: map });\n        });\n    }\n    ngOnDestroy() {\n        this.eventManager.destroy();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Destructs state and passes it in API.\n     * @param state\n     * @param map\n     */\n    setState(state, map) {\n        const { behaviors, bounds, center, controls, margin, type, zoom } = state;\n        if (behaviors) {\n            map.behaviors.enable(behaviors);\n        }\n        if (bounds) {\n            map.setBounds(bounds);\n        }\n        if (center) {\n            map.setCenter(center);\n        }\n        if (controls) {\n            controls.forEach((control) => map.controls.add(control));\n        }\n        if (margin) {\n            map.margin.setDefaultMargin(margin);\n        }\n        if (type) {\n            map.setType(type);\n        }\n        if (zoom) {\n            map.setZoom(zoom);\n        }\n    }\n    /**\n     * Creates a map.\n     * @param id ID which will be set to the map container.\n     */\n    createMap(id) {\n        const containerElem = this.container.nativeElement;\n        containerElem.setAttribute('id', id);\n        containerElem.style.cssText = 'width: 100%; height: 100%;';\n        return new ymaps.Map(id, this.combineState(), this.options || {});\n    }\n    /**\n     * Combines the center and zoom into single object.\n     */\n    combineState() {\n        const state = this.state || {};\n        return {\n            ...state,\n            center: this.center || state.center || [0, 0],\n            zoom: this.zoom ?? state.zoom ?? 10,\n        };\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaMapComponent, isStandalone: false, selector: \"ya-map\", inputs: { center: \"center\", zoom: \"zoom\", state: \"state\", options: \"options\" }, outputs: { ready: \"ready\", actionbegin: \"actionbegin\", actionbreak: \"actionbreak\", actionend: \"actionend\", actiontick: \"actiontick\", actiontickcomplete: \"actiontickcomplete\", balloonclose: \"balloonclose\", balloonopen: \"balloonopen\", boundschange: \"boundschange\", yaclick: \"yaclick\", yacontextmenu: \"yacontextmenu\", yadblclick: \"yadblclick\", destroy: \"destroy\", hintclose: \"hintclose\", hintopen: \"hintopen\", marginchange: \"marginchange\", yamousedown: \"yamousedown\", yamouseenter: \"yamouseenter\", yamouseleave: \"yamouseleave\", yamousemove: \"yamousemove\", yamouseup: \"yamouseup\", multitouchend: \"multitouchend\", multitouchmove: \"multitouchmove\", multitouchstart: \"multitouchstart\", optionschange: \"optionschange\", sizechange: \"sizechange\", typechange: \"typechange\", yawheel: \"yawheel\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: '<div #container></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaMapComponent, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'ya-map',\n                    template: '<div #container></div>',\n                    changeDetection: ChangeDetectionStrategy.OnPush,\n                    standalone: false,\n                }]\n        }], propDecorators: { container: [{\n                type: ViewChild,\n                args: ['container']\n            }], center: [{\n                type: Input\n            }], zoom: [{\n                type: Input\n            }], state: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], actionbegin: [{\n                type: Output\n            }], actionbreak: [{\n                type: Output\n            }], actionend: [{\n                type: Output\n            }], actiontick: [{\n                type: Output\n            }], actiontickcomplete: [{\n                type: Output\n            }], balloonclose: [{\n                type: Output\n            }], balloonopen: [{\n                type: Output\n            }], boundschange: [{\n                type: Output\n            }], yaclick: [{\n                type: Output\n            }], yacontextmenu: [{\n                type: Output\n            }], yadblclick: [{\n                type: Output\n            }], destroy: [{\n                type: Output\n            }], hintclose: [{\n                type: Output\n            }], hintopen: [{\n                type: Output\n            }], marginchange: [{\n                type: Output\n            }], yamousedown: [{\n                type: Output\n            }], yamouseenter: [{\n                type: Output\n            }], yamouseleave: [{\n                type: Output\n            }], yamousemove: [{\n                type: Output\n            }], yamouseup: [{\n                type: Output\n            }], multitouchend: [{\n                type: Output\n            }], multitouchmove: [{\n                type: Output\n            }], multitouchstart: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], sizechange: [{\n                type: Output\n            }], typechange: [{\n                type: Output\n            }], yawheel: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL2NvbXBvbmVudHMveWEtbWFwL3lhLW1hcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQUVyRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBT0gsTUFBTSxPQUFPLGNBQWM7SUFOM0I7UUFPbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUloRCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvQixpQkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5RCxTQUFJLEdBQUcsSUFBSSxlQUFlLENBQW1CLElBQUksQ0FBQyxDQUFDO1FBRW5EOzs7O1dBSUc7UUFDTSxXQUFNLEdBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkM7Ozs7V0FJRztRQUNNLFNBQUksR0FBRyxFQUFFLENBQUM7UUFjbkI7O1dB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O2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFPRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxVQUFVO3NCQUFuQixNQUFNO2dCQU9HLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBZYUV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy95YS1ldmVudCc7XHJcbmltcG9ydCB7IFlhUmVhZHlFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtcmVhZHktZXZlbnQnO1xyXG5pbXBvcnQgeyBZYUFwaUxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy95YS1hcGktbG9hZGVyL3lhLWFwaS1sb2FkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3V0aWxzL2V2ZW50LW1hbmFnZXIvZXZlbnQtbWFuYWdlcic7XHJcbmltcG9ydCB7IGdlbmVyYXRlUmFuZG9tSWQgfSBmcm9tICcuLi8uLi91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQvZ2VuZXJhdGUtcmFuZG9tLWlkJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYHlhLW1hcGAgY29tcG9uZW50IHdyYXBzIGB5bWFwcy5NYXBgIGNsYXNzIGZyb20gdGhlIFlhbmRleC5NYXBzIEFQSS5cclxuICogWW91IGNhbiBjb25maWd1cmUgdGhlIG1hcCB2aWEgdGhlIGNvbXBvbmVudCdzIGlucHV0cy5cclxuICogRXZlbnRzIGNhbiBiZSBib3VuZCB1c2luZyB0aGUgb3V0cHV0cyBvZiB0aGUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiA8ZXhhbXBsZS11cmw+aHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L21hcC1vbmxvYWQtZXZlbnQ/ZW1iZWQ9MSZ2aWV3PXByZXZpZXc8L2V4YW1wbGUtdXJsPlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDx5YS1tYXBcclxuICogICBbY2VudGVyXT1cIls1NS43NTE5NTIsIDM3LjYwMDczOV1cIlxyXG4gKiAgIFtzdGF0ZV09XCJ7dHlwZTogJ3lhbmRleCNzYXRlbGxpdGUnfVwiXHJcbiAqID48L3lhLW1hcD5cclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3lhLW1hcCcsXHJcbiAgdGVtcGxhdGU6ICc8ZGl2ICNjb250YWluZXI+PC9kaXY+JyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFlhTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB5YUFwaUxvYWRlclNlcnZpY2UgPSBpbmplY3QoWWFBcGlMb2FkZXJTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcmVhZG9ubHkgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRNYW5hZ2VyID0gbmV3IEV2ZW50TWFuYWdlcih0aGlzLm5nWm9uZSk7XHJcblxyXG4gIG1hcCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHltYXBzLk1hcCB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBHZW8gY29vcmRpbmF0ZXMgb2YgdGhlIG1hcCBjZW50ZXIuIERlZmF1bHQgaXMgYFswLCAwXWAuXHJcbiAgICogU2hvcnRoYW5kIGZvciBgW3N0YXRlXT1cInsgY2VudGVyOiBbMCwgMF0gfVwiYC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9NYXAuaHRtbCNNYXBfX3BhcmFtLXN0YXRlLmNlbnRlcn1cclxuICAgKi9cclxuICBASW5wdXQoKSBjZW50ZXI6IG51bWJlcltdID0gWzAsIDBdO1xyXG5cclxuICAvKipcclxuICAgKiBNYXAgem9vbSBsZXZlbC4gRGVmYXVsdCBsZXZlbCBpcyBgMTBgLlxyXG4gICAqIFNob3J0aGFuZCBmb3IgYFtzdGF0ZV09XCJ7IHpvb206IDEwIH1cImAuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjTWFwX19wYXJhbS1zdGF0ZS56b29tfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHpvb20gPSAxMDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFwIHBhcmFtZXRlcnMuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjTWFwX19wYXJhbS1zdGF0ZX1cclxuICAgKi9cclxuICBASW5wdXQoKSBzdGF0ZT86IHltYXBzLklNYXBTdGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFwIG9wdGlvbnMuIFRoZSBtYXAgb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBtYWtlIHNldHRpbmdzIGZvciB0aGUgbWFwIGl0c2VsZiwgYXMgd2VsbCBhcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBhZGRlZCB0byBpdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9NYXAuaHRtbCNNYXBfX3BhcmFtLW9wdGlvbnN9XHJcbiAgICovXHJcbiAgQElucHV0KCkgb3B0aW9ucz86IHltYXBzLklNYXBPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBNYXAgaW5zdGFuY2UgaXMgY3JlYXRlZC4gVGhpcyBldmVudCBydW5zIG91dHNpZGUgYW4gQW5ndWxhciB6b25lLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSByZWFkeTogRXZlbnRFbWl0dGVyPFlhUmVhZHlFdmVudDx5bWFwcy5NYXA+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XHJcbiAgICBZYVJlYWR5RXZlbnQ8eW1hcHMuTWFwPlxyXG4gID4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0YXJ0IG9mIGEgbmV3IHNtb290aCBtYXAgbW92ZW1lbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1hY3Rpb25iZWdpbn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWN0aW9uYmVnaW46IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5NYXA+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignYWN0aW9uYmVnaW4nKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgdGhhdCBvY2N1cnMgd2hlbiBhbiBhY3Rpb24gc3RlcCB3YXMgcHJlbWF0dXJlbHkgc3RvcHBlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWFjdGlvbmJyZWFrfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25icmVhazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdhY3Rpb25icmVhaycpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgZW5kIG9mIHNtb290aCBtYXAgbW92ZW1lbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1hY3Rpb25lbmR9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFjdGlvbmVuZDogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdhY3Rpb25lbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0YXJ0IG9mIGEgbmV3IHN0ZXAgb2Ygc21vb3RoIG1vdmVtZW50LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL01hcC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYWN0aW9udGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYWN0aW9udGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdhY3Rpb250aWNrJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBlbmQgb2YgcGVyZm9ybWluZyBhIHN0ZXAgb2Ygc21vb3RoIG1vdmVtZW50LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL01hcC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYWN0aW9udGlja2NvbXBsZXRlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBhY3Rpb250aWNrY29tcGxldGU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5NYXA+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignYWN0aW9udGlja2NvbXBsZXRlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NpbmcgdGhlIGJhbGxvb24uXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iYWxsb29uY2xvc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJhbGxvb25jbG9zZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdiYWxsb29uY2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyBhIGJhbGxvb24gb24gYSBtYXAuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iYWxsb29ub3Blbn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYmFsbG9vbm9wZW46IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5NYXA+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignYmFsbG9vbm9wZW4nKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZm9yIGEgY2hhbmdlIHRvIHRoZSBtYXAgdmlld3BvcnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1ib3VuZHNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJvdW5kc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdib3VuZHNjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2luZ2xlIGxlZnQtY2xpY2sgb24gdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1jbGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFjbGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID0gdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2NsaWNrJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxzIHRoZSBlbGVtZW50J3MgY29udGV4dCBtZW51LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWNvbnRleHRtZW51fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YWNvbnRleHRtZW51OiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2NvbnRleHRtZW51Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERvdWJsZSBsZWZ0LWNsaWNrIG9uIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZGJsY2xpY2t9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhZGJsY2xpY2s6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5NYXA+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignZGJsY2xpY2snKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1hcCB3YXMgZGVzdHJveWVkLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL01hcC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZGVzdHJveX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZGVzdHJveTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID0gdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2Rlc3Ryb3knKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2luZyB0aGUgaGludC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWhpbnRjbG9zZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgaGludGNsb3NlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2hpbnRjbG9zZScpO1xyXG5cclxuICAvKipcclxuICAgKiBPcGVuaW5nIGEgaGludCBvbiBhIG1hcC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWhpbnRvcGVufVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBoaW50b3BlbjogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID0gdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2hpbnRvcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBtYXJnaW5zIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tYXJnaW5jaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG1hcmdpbmNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtYXJnaW5jaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlc3NpbmcgdGhlIG1vdXNlIGJ1dHRvbiBvdmVyIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2Vkb3dufVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNlZG93bjogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZWRvd24nKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUG9pbnRpbmcgdGhlIGN1cnNvciBhdCB0aGUgb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNlZW50ZXJ9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2VlbnRlcjogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZWVudGVyJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmluZyB0aGUgY3Vyc29yIG9mZiBvZiB0aGUgb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNlbGVhdmV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2VsZWF2ZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZWxlYXZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmluZyB0aGUgY3Vyc29yIG92ZXIgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZW1vdmV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2Vtb3ZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlbW92ZScpO1xyXG5cclxuICAvKipcclxuICAgKiBMZXR0aW5nIGdvIG9mIHRoZSBtb3VzZSBidXR0b24gb3ZlciBhbiBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2V1cH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZXVwOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPSB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2V1cCcpO1xyXG5cclxuICAvKipcclxuICAgKiBFbmQgb2YgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNoZW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hlbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwZWF0aW5nIGV2ZW50IGR1cmluZyBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2htb3ZlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNobW92ZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtdWx0aXRvdWNobW92ZScpO1xyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBvZiBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2hzdGFydH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbXVsdGl0b3VjaHN0YXJ0OiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hzdGFydCcpO1xyXG5cclxuICAvKipcclxuICAgKiBNYXAgb3B0aW9ucyBjaGFuZ2VkLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL01hcC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtb3B0aW9uc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb3B0aW9uc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk1hcD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdvcHRpb25zY2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBzaXplIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1zaXplY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzaXplY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3NpemVjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1hcCB0eXBlIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvTWFwLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC10eXBlY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB0eXBlY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3R5cGVjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW91c2Ugd2hlZWwgc2Nyb2xsaW5nLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LXdoZWVsfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YXdoZWVsOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuTWFwPj4gPSB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignd2hlZWwnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbnB1dCBjaGFuZ2VzIGFuZCBwYXNzZXMgdGhlbSBpbiBBUEkuXHJcbiAgICogQHBhcmFtIGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvLyBJdCBtdXN0IGJlIHJ1biBvdXRzaWRlIGEgem9uZTsgb3RoZXJ3aXNlLCBhbGwgYXN5bmMgZXZlbnRzIHdpdGhpbiB0aGlzIGNhbGwgd2lsbCBjYXVzZSB0aWNrcy5cclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5tYXAkLnZhbHVlO1xyXG5cclxuICAgICAgaWYgKG1hcCkge1xyXG4gICAgICAgIGNvbnN0IHsgY2VudGVyLCB6b29tLCBzdGF0ZSwgb3B0aW9ucyB9ID0gY2hhbmdlcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHRoaXMuY29tYmluZVN0YXRlKCksIG1hcCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2VudGVyKSB7XHJcbiAgICAgICAgICBtYXAuc2V0Q2VudGVyKGNlbnRlci5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHpvb20pIHtcclxuICAgICAgICAgIG1hcC5zZXRab29tKHpvb20uY3VycmVudFZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICBtYXAub3B0aW9ucy5zZXQob3B0aW9ucy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnlhQXBpTG9hZGVyU2VydmljZVxyXG4gICAgICAubG9hZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZVJhbmRvbUlkKCk7XHJcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5jcmVhdGVNYXAoaWQpO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmNlIHRoZSBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQsIGUuZy4gbGFuZ3VhZ2UsXHJcbiAgICAgICAgICogd2UgbmVlZCB0byByZWluaXRpYWxpemUgdGhlIG1hcC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAodGhpcy5tYXAkLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLm1hcCQudmFsdWUuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tYXAkLm5leHQobWFwKTtcclxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5zZXRUYXJnZXQobWFwKTtcclxuICAgICAgICB0aGlzLnJlYWR5LmVtaXQoeyB5bWFwcywgdGFyZ2V0OiBtYXAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3RydWN0cyBzdGF0ZSBhbmQgcGFzc2VzIGl0IGluIEFQSS5cclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKiBAcGFyYW0gbWFwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRTdGF0ZShzdGF0ZTogeW1hcHMuSU1hcFN0YXRlLCBtYXA6IHltYXBzLk1hcCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBiZWhhdmlvcnMsIGJvdW5kcywgY2VudGVyLCBjb250cm9scywgbWFyZ2luLCB0eXBlLCB6b29tIH0gPSBzdGF0ZTtcclxuXHJcbiAgICBpZiAoYmVoYXZpb3JzKSB7XHJcbiAgICAgIG1hcC5iZWhhdmlvcnMuZW5hYmxlKGJlaGF2aW9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJvdW5kcykge1xyXG4gICAgICBtYXAuc2V0Qm91bmRzKGJvdW5kcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNlbnRlcikge1xyXG4gICAgICBtYXAuc2V0Q2VudGVyKGNlbnRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbnRyb2xzKSB7XHJcbiAgICAgIGNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IG1hcC5jb250cm9scy5hZGQoY29udHJvbCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXJnaW4pIHtcclxuICAgICAgbWFwLm1hcmdpbi5zZXREZWZhdWx0TWFyZ2luKG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgbWFwLnNldFR5cGUodHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHpvb20pIHtcclxuICAgICAgbWFwLnNldFpvb20oem9vbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgbWFwLlxyXG4gICAqIEBwYXJhbSBpZCBJRCB3aGljaCB3aWxsIGJlIHNldCB0byB0aGUgbWFwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZU1hcChpZDogc3RyaW5nKTogeW1hcHMuTWFwIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW06IEhUTUxFbGVtZW50ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBjb250YWluZXJFbGVtLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XHJcbiAgICBjb250YWluZXJFbGVtLnN0eWxlLmNzc1RleHQgPSAnd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsnO1xyXG5cclxuICAgIHJldHVybiBuZXcgeW1hcHMuTWFwKGlkLCB0aGlzLmNvbWJpbmVTdGF0ZSgpLCB0aGlzLm9wdGlvbnMgfHwge30pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tYmluZXMgdGhlIGNlbnRlciBhbmQgem9vbSBpbnRvIHNpbmdsZSBvYmplY3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21iaW5lU3RhdGUoKTogeW1hcHMuSU1hcFN0YXRlIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSB8fCB7fTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zdGF0ZSxcclxuICAgICAgY2VudGVyOiB0aGlzLmNlbnRlciB8fCBzdGF0ZS5jZW50ZXIgfHwgWzAsIDBdLFxyXG4gICAgICB6b29tOiB0aGlzLnpvb20gPz8gc3RhdGUuem9vbSA/PyAxMCxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Directive, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-geoobject` component wraps `ymaps.GeoObject` class from the Yandex.Maps API.\n * You can configure it via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * <example-url>https://stackblitz.com/edit/geoobject-polygon?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map [center]=\"[55.761952, 37.620739]\">\n *   <ya-geoobject\n *     [feature]=\"{ geometry: { type: 'Rectangle', coordinates: [[55.665, 37.66], [55.64,37.53]] } }\"\n *   ></ya-geoobject>\n * </ya-map>\n * ```\n */\nexport class YaGeoObjectDirective {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * Geo object instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * Closing the balloon.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-balloonclose}\n         */\n        this.balloonclose = this.eventManager.getLazyEmitter('balloonclose');\n        /**\n         * Opening a balloon on a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-balloonopen}\n         */\n        this.balloonopen = this.eventManager.getLazyEmitter('balloonopen');\n        /**\n         * Event preceding the \"drag\" event.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-beforedrag}\n         */\n        this.beforedrag = this.eventManager.getLazyEmitter('beforedrag');\n        /**\n         * Event preceding the \"dragstart\" event.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-beforedragstart}\n         */\n        this.beforedragstart = this.eventManager.getLazyEmitter('beforedragstart');\n        /**\n         * Single left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-click}\n         */\n        this.yaclick = this.eventManager.getLazyEmitter('click');\n        /**\n         * Calls the element's context menu.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-contextmenu}\n         */\n        this.yacontextmenu = this.eventManager.getLazyEmitter('contextmenu');\n        /**\n         * Double left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-dblclick}\n         */\n        this.yadblclick = this.eventManager.getLazyEmitter('dblclick');\n        /**\n         * Dragging a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-drag}\n         */\n        this.yadrag = this.eventManager.getLazyEmitter('drag');\n        /**\n         * End of geo object dragging.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-dragend}\n         */\n        this.yadragend = this.eventManager.getLazyEmitter('dragend');\n        /**\n         * Start of geo object dragging.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-dragstart}\n         */\n        this.yadragstart = this.eventManager.getLazyEmitter('dragstart');\n        /**\n         * Change in the state of the editor for the geo object's geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-editorstatechange}\n         */\n        this.editorstatechange = this.eventManager.getLazyEmitter('editorstatechange');\n        /**\n         * Change to the geo object geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-geometrychange}\n         */\n        this.geometrychange = this.eventManager.getLazyEmitter('geometrychange');\n        /**\n         * Closing the hint.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-hintclose}\n         */\n        this.hintclose = this.eventManager.getLazyEmitter('hintclose');\n        /**\n         * Opening a hint on a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-hintopen}\n         */\n        this.hintopen = this.eventManager.getLazyEmitter('hintopen');\n        /**\n         * Map reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IParentOnMap.html#event_detail__event-mapchange}\n         */\n        this.mapchange = this.eventManager.getLazyEmitter('mapchange');\n        /**\n         * Pressing the mouse button over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousedown}\n         */\n        this.yamousedown = this.eventManager.getLazyEmitter('mousedown');\n        /**\n         * Pointing the cursor at the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseenter}\n         */\n        this.yamouseenter = this.eventManager.getLazyEmitter('mouseenter');\n        /**\n         * Moving the cursor off of the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseleave}\n         */\n        this.yamouseleave = this.eventManager.getLazyEmitter('mouseleave');\n        /**\n         * Moving the cursor over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousemove}\n         */\n        this.yamousemove = this.eventManager.getLazyEmitter('mousemove');\n        /**\n         * Letting go of the mouse button over an object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseup}\n         */\n        this.yamouseup = this.eventManager.getLazyEmitter('mouseup');\n        /**\n         * End of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchend}\n         */\n        this.multitouchend = this.eventManager.getLazyEmitter('multitouchend');\n        /**\n         * Repeating event during multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchmove}\n         */\n        this.multitouchmove = this.eventManager.getLazyEmitter('multitouchmove');\n        /**\n         * Start of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchstart}\n         */\n        this.multitouchstart = this.eventManager.getLazyEmitter('multitouchstart');\n        /**\n         * Change to the object options.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/ICustomizable.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * Change to the geo object overlay.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-overlaychange}\n         */\n        this.overlaychange = this.eventManager.getLazyEmitter('overlaychange');\n        /**\n         * The parent object reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IChild.html#event_detail__event-parentchange}\n         */\n        this.parentchange = this.eventManager.getLazyEmitter('parentchange');\n        /**\n         * Change to the geo object data.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-propertieschange}\n         */\n        this.propertieschange = this.eventManager.getLazyEmitter('propertieschange');\n        /**\n         * Mouse wheel scrolling.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-wheel}\n         */\n        this.yawheel = this.eventManager.getLazyEmitter('wheel');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { geoObject } = this;\n            if (geoObject) {\n                const { feature, options } = changes;\n                if (feature) {\n                    this.setFeature(feature.currentValue, geoObject);\n                }\n                if (options) {\n                    geoObject.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            const geoObject = this.createGeoObject();\n            this.geoObject = geoObject;\n            map.geoObjects.add(geoObject);\n            this.eventManager.setTarget(geoObject);\n            this.ready.emit({ ymaps, target: geoObject });\n        });\n    }\n    ngOnDestroy() {\n        if (this.geoObject) {\n            this.yaMapComponent?.map$.value?.geoObjects.remove(this.geoObject);\n            this.eventManager.destroy();\n        }\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Destructs feature and passes it in API.\n     * @param feature\n     * @param geoObject\n     */\n    setFeature(feature, geoObject) {\n        const { geometry, properties } = feature;\n        if (geometry) {\n            console.warn('The geometry can not be changed after entity init. To set it, you should recreate a GeoObject with new feature.geometry');\n        }\n        if (properties) {\n            geoObject.properties.set(properties);\n        }\n    }\n    /**\n     * Creates GeoObject.\n     */\n    createGeoObject() {\n        return new ymaps.GeoObject(this.feature, this.options);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaGeoObjectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaGeoObjectDirective, isStandalone: false, selector: \"ya-geoobject\", inputs: { feature: \"feature\", options: \"options\" }, outputs: { ready: \"ready\", balloonclose: \"balloonclose\", balloonopen: \"balloonopen\", beforedrag: \"beforedrag\", beforedragstart: \"beforedragstart\", yaclick: \"yaclick\", yacontextmenu: \"yacontextmenu\", yadblclick: \"yadblclick\", yadrag: \"yadrag\", yadragend: \"yadragend\", yadragstart: \"yadragstart\", editorstatechange: \"editorstatechange\", geometrychange: \"geometrychange\", hintclose: \"hintclose\", hintopen: \"hintopen\", mapchange: \"mapchange\", yamousedown: \"yamousedown\", yamouseenter: \"yamouseenter\", yamouseleave: \"yamouseleave\", yamousemove: \"yamousemove\", yamouseup: \"yamouseup\", multitouchend: \"multitouchend\", multitouchmove: \"multitouchmove\", multitouchstart: \"multitouchstart\", optionschange: \"optionschange\", overlaychange: \"overlaychange\", parentchange: \"parentchange\", propertieschange: \"propertieschange\", yawheel: \"yawheel\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaGeoObjectDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-geoobject',\n                    standalone: false,\n                }]\n        }], propDecorators: { feature: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], balloonclose: [{\n                type: Output\n            }], balloonopen: [{\n                type: Output\n            }], beforedrag: [{\n                type: Output\n            }], beforedragstart: [{\n                type: Output\n            }], yaclick: [{\n                type: Output\n            }], yacontextmenu: [{\n                type: Output\n            }], yadblclick: [{\n                type: Output\n            }], yadrag: [{\n                type: Output\n            }], yadragend: [{\n                type: Output\n            }], yadragstart: [{\n                type: Output\n            }], editorstatechange: [{\n                type: Output\n            }], geometrychange: [{\n                type: Output\n            }], hintclose: [{\n                type: Output\n            }], hintopen: [{\n                type: Output\n            }], mapchange: [{\n                type: Output\n            }], yamousedown: [{\n                type: Output\n            }], yamouseenter: [{\n                type: Output\n            }], yamouseleave: [{\n                type: Output\n            }], yamousemove: [{\n                type: Output\n            }], yamouseup: [{\n                type: Output\n            }], multitouchend: [{\n                type: Output\n            }], multitouchmove: [{\n                type: Output\n            }], multitouchstart: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], overlaychange: [{\n                type: Output\n            }], parentchange: [{\n                type: Output\n            }], propertieschange: [{\n                type: Output\n            }], yawheel: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtZ2Vvb2JqZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL2NvbXBvbmVudHMveWEtZ2Vvb2JqZWN0L3lhLWdlb29iamVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS21CLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IsaUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFnQjlEOztXQUVHO1FBQ08sVUFBSyxHQUFnRCxJQUFJLFlBQVksRUFFNUUsQ0FBQztRQUVKOzs7V0FHRztRQUNPLGlCQUFZLEdBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRW5EOzs7V0FHRztRQUNPLGdCQUFXLEdBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFD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QUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsS0FBSztpQkFDbEI7OEJBZVUsT0FBTztzQkFBZixLQUFLO2dCQU1HLE9BQU87c0JBQWYsS0FBSztnQkFLSSxLQUFLO3NCQUFkLE1BQU07Z0JBUUcsWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLFVBQVU7c0JBQW5CLE1BQU07Z0JBT0csZUFBZTtzQkFBeEIsTUFBTTtnQkFPRyxPQUFPO3NCQUFoQixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxNQUFNO3NCQUFmLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxXQUFXO3NCQUFwQixNQUFNO2dCQU9HLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFPRyxjQUFjO3NCQUF2QixNQUFNO2dCQU9HLFNBQVM7c0JBQWxCLE1BQU07Z0JBT0csUUFBUTtzQkFBakIsTUFBTTtnQkFPRyxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csZUFBZTtzQkFBeEIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgWWFFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtZXZlbnQnO1xyXG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLXJlYWR5LWV2ZW50JztcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXZlbnQtbWFuYWdlci9ldmVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgWWFNYXBDb21wb25lbnQgfSBmcm9tICcuLi95YS1tYXAveWEtbWFwLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVGhlIGB5YS1nZW9vYmplY3RgIGNvbXBvbmVudCB3cmFwcyBgeW1hcHMuR2VvT2JqZWN0YCBjbGFzcyBmcm9tIHRoZSBZYW5kZXguTWFwcyBBUEkuXHJcbiAqIFlvdSBjYW4gY29uZmlndXJlIGl0IHZpYSB0aGUgY29tcG9uZW50J3MgaW5wdXRzLlxyXG4gKiBFdmVudHMgY2FuIGJlIGJvdW5kIHVzaW5nIHRoZSBvdXRwdXRzIG9mIHRoZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvZ2Vvb2JqZWN0LXBvbHlnb24/ZW1iZWQ9MSZ2aWV3PXByZXZpZXc8L2V4YW1wbGUtdXJsPlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDx5YS1tYXAgW2NlbnRlcl09XCJbNTUuNzYxOTUyLCAzNy42MjA3MzldXCI+XHJcbiAqICAgPHlhLWdlb29iamVjdFxyXG4gKiAgICAgW2ZlYXR1cmVdPVwieyBnZW9tZXRyeTogeyB0eXBlOiAnUmVjdGFuZ2xlJywgY29vcmRpbmF0ZXM6IFtbNTUuNjY1LCAzNy42Nl0sIFs1NS42NCwzNy41M11dIH0gfVwiXHJcbiAqICAgPjwveWEtZ2Vvb2JqZWN0PlxyXG4gKiA8L3lhLW1hcD5cclxuICogYGBgXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ3lhLWdlb29iamVjdCcsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZYUdlb09iamVjdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB5YU1hcENvbXBvbmVudCA9IGluamVjdChZYU1hcENvbXBvbmVudCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50TWFuYWdlciA9IG5ldyBFdmVudE1hbmFnZXIodGhpcy5uZ1pvbmUpO1xyXG5cclxuICBnZW9PYmplY3Q/OiB5bWFwcy5HZW9PYmplY3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbyBvYmplY3QgZGVzY3JpcHRpb24uXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjR2VvT2JqZWN0X19wYXJhbS1mZWF0dXJlfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZlYXR1cmU/OiB5bWFwcy5JR2VvT2JqZWN0RmVhdHVyZTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2VvIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI0dlb09iamVjdF9fcGFyYW0tb3B0aW9uc31cclxuICAgKi9cclxuICBASW5wdXQoKSBvcHRpb25zPzogeW1hcHMuSUdlb09iamVjdE9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbyBvYmplY3QgaW5zdGFuY2UgaXMgYWRkZWQgdG8gYSBNYXAuIFRoaXMgZXZlbnQgcnVucyBvdXRzaWRlIGFuIEFuZ3VsYXIgem9uZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcmVhZHk6IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgWWFSZWFkeUV2ZW50PHltYXBzLkdlb09iamVjdD5cclxuICA+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NpbmcgdGhlIGJhbGxvb24uXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iYWxsb29uY2xvc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJhbGxvb25jbG9zZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdiYWxsb29uY2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyBhIGJhbGxvb24gb24gYSBnZW8gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYmFsbG9vbm9wZW59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJhbGxvb25vcGVuOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JhbGxvb25vcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IHByZWNlZGluZyB0aGUgXCJkcmFnXCIgZXZlbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iZWZvcmVkcmFnfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVkcmFnOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JlZm9yZWRyYWcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgcHJlY2VkaW5nIHRoZSBcImRyYWdzdGFydFwiIGV2ZW50LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYmVmb3JlZHJhZ3N0YXJ0fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVkcmFnc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignYmVmb3JlZHJhZ3N0YXJ0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpbmdsZSBsZWZ0LWNsaWNrIG9uIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY2xpY2t9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY2xpY2s6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY2xpY2snKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgdGhlIGVsZW1lbnQncyBjb250ZXh0IG1lbnUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY29udGV4dG1lbnV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY29udGV4dG1lbnU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY29udGV4dG1lbnUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRG91YmxlIGxlZnQtY2xpY2sgb24gdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1kYmxjbGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkYmxjbGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdkYmxjbGljaycpO1xyXG5cclxuICAvKipcclxuICAgKiBEcmFnZ2luZyBhIGdlbyBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1kcmFnfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YWRyYWc6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9IHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdkcmFnJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuZCBvZiBnZW8gb2JqZWN0IGRyYWdnaW5nLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZHJhZ2VuZH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkcmFnZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2RyYWdlbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgb2YgZ2VvIG9iamVjdCBkcmFnZ2luZy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9HZW9PYmplY3QuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWRyYWdzdGFydH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkcmFnc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignZHJhZ3N0YXJ0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSBpbiB0aGUgc3RhdGUgb2YgdGhlIGVkaXRvciBmb3IgdGhlIGdlbyBvYmplY3QncyBnZW9tZXRyeS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9HZW9PYmplY3QuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWVkaXRvcnN0YXRlY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JzdGF0ZWNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdlZGl0b3JzdGF0ZWNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIGdlbyBvYmplY3QgZ2VvbWV0cnkuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZ2VvbWV0cnljaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGdlb21ldHJ5Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2dlb21ldHJ5Y2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NpbmcgdGhlIGhpbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1oaW50Y2xvc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGhpbnRjbG9zZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdoaW50Y2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyBhIGhpbnQgb24gYSBnZW8gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtaGludG9wZW59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGhpbnRvcGVuOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2hpbnRvcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JUGFyZW50T25NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFwY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21hcGNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBQcmVzc2luZyB0aGUgbW91c2UgYnV0dG9uIG92ZXIgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZWRvd259XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2Vkb3duOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZG93bicpO1xyXG5cclxuICAvKipcclxuICAgKiBQb2ludGluZyB0aGUgY3Vyc29yIGF0IHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VlbnRlcn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWVudGVyOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZW50ZXInKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb2ZmIG9mIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VsZWF2ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWxlYXZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlbGVhdmUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb3ZlciB0aGUgb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNlbW92ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZW1vdmU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2Vtb3ZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExldHRpbmcgZ28gb2YgdGhlIG1vdXNlIGJ1dHRvbiBvdmVyIGFuIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZXVwfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNldXA6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2V1cCcpO1xyXG5cclxuICAvKipcclxuICAgKiBFbmQgb2YgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNoZW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hlbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwZWF0aW5nIGV2ZW50IGR1cmluZyBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2htb3ZlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNobW92ZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtdWx0aXRvdWNobW92ZScpO1xyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBvZiBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2hzdGFydH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbXVsdGl0b3VjaHN0YXJ0OiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hzdGFydCcpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lDdXN0b21pemFibGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW9wdGlvbnNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9wdGlvbnNjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5HZW9PYmplY3Q+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignb3B0aW9uc2NoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIGdlbyBvYmplY3Qgb3ZlcmxheS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1vdmVybGF5Y2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvdmVybGF5Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuR2VvT2JqZWN0Pj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ292ZXJsYXljaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHBhcmVudCBvYmplY3QgcmVmZXJlbmNlIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUNoaWxkLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1wYXJlbnRjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHBhcmVudGNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwYXJlbnRjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IGRhdGEuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtcHJvcGVydGllc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHJvcGVydGllc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwcm9wZXJ0aWVzY2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdXNlIHdoZWVsIHNjcm9sbGluZy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC13aGVlbH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWF3aGVlbDogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLkdlb09iamVjdD4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCd3aGVlbCcpO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGlucHV0IGNoYW5nZXMgYW5kIHBhc3NlcyB0aGVtIGluIEFQSS5cclxuICAgKiBAcGFyYW0gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIEl0IG11c3QgYmUgcnVuIG91dHNpZGUgYSB6b25lOyBvdGhlcndpc2UsIGFsbCBhc3luYyBldmVudHMgd2l0aGluIHRoaXMgY2FsbCB3aWxsIGNhdXNlIHRpY2tzLlxyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB7IGdlb09iamVjdCB9ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChnZW9PYmplY3QpIHtcclxuICAgICAgICBjb25zdCB7IGZlYXR1cmUsIG9wdGlvbnMgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgICAgIGlmIChmZWF0dXJlKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEZlYXR1cmUoZmVhdHVyZS5jdXJyZW50VmFsdWUsIGdlb09iamVjdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgZ2VvT2JqZWN0Lm9wdGlvbnMuc2V0KG9wdGlvbnMuY3VycmVudFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnlhTWFwQ29tcG9uZW50Lm1hcCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChtYXApID0+IHtcclxuICAgICAgY29uc3QgZ2VvT2JqZWN0ID0gdGhpcy5jcmVhdGVHZW9PYmplY3QoKTtcclxuICAgICAgdGhpcy5nZW9PYmplY3QgPSBnZW9PYmplY3Q7XHJcblxyXG4gICAgICBtYXAuZ2VvT2JqZWN0cy5hZGQoZ2VvT2JqZWN0KTtcclxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc2V0VGFyZ2V0KGdlb09iamVjdCk7XHJcbiAgICAgIHRoaXMucmVhZHkuZW1pdCh7IHltYXBzLCB0YXJnZXQ6IGdlb09iamVjdCB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZW9PYmplY3QpIHtcclxuICAgICAgdGhpcy55YU1hcENvbXBvbmVudD8ubWFwJC52YWx1ZT8uZ2VvT2JqZWN0cy5yZW1vdmUodGhpcy5nZW9PYmplY3QpO1xyXG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cnVjdHMgZmVhdHVyZSBhbmQgcGFzc2VzIGl0IGluIEFQSS5cclxuICAgKiBAcGFyYW0gZmVhdHVyZVxyXG4gICAqIEBwYXJhbSBnZW9PYmplY3RcclxuICAgKi9cclxuICBwcml2YXRlIHNldEZlYXR1cmUoZmVhdHVyZTogeW1hcHMuSUdlb09iamVjdEZlYXR1cmUsIGdlb09iamVjdDogeW1hcHMuR2VvT2JqZWN0KTogdm9pZCB7XHJcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBwcm9wZXJ0aWVzIH0gPSBmZWF0dXJlO1xyXG5cclxuICAgIGlmIChnZW9tZXRyeSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ1RoZSBnZW9tZXRyeSBjYW4gbm90IGJlIGNoYW5nZWQgYWZ0ZXIgZW50aXR5IGluaXQuIFRvIHNldCBpdCwgeW91IHNob3VsZCByZWNyZWF0ZSBhIEdlb09iamVjdCB3aXRoIG5ldyBmZWF0dXJlLmdlb21ldHJ5JyxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocHJvcGVydGllcykge1xyXG4gICAgICBnZW9PYmplY3QucHJvcGVydGllcy5zZXQocHJvcGVydGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIEdlb09iamVjdC5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUdlb09iamVjdCgpOiB5bWFwcy5HZW9PYmplY3Qge1xyXG4gICAgcmV0dXJuIG5ldyB5bWFwcy5HZW9PYmplY3QodGhpcy5mZWF0dXJlLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxufVxyXG4iXX0=","import { Directive, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-placemark` directive wraps `ymaps.Placemark` class from the Yandex.Maps API.\n * You can configure it via the directive's inputs.\n * Events can be bound using the outputs of the directive.\n *\n * <example-url>https://stackblitz.com/edit/custom-placemark?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map [center]=\"[55.751952, 37.600739]\">\n *   <ya-placemark [geometry]=\"[55.751952, 37.600739]\"></ya-placemark>\n * </ya-map>\n * ```\n */\nexport class YaPlacemarkDirective {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * Coordinates of the placemark, or a hash describing the geometry, or a reference to the point geometry object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Placemark.html#Placemark__param-geometry}\n         */\n        this.geometry = [];\n        /**\n         * Placemark instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * Closing the balloon.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-balloonclose}\n         */\n        this.balloonclose = this.eventManager.getLazyEmitter('balloonclose');\n        /**\n         * Opening a balloon on a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-balloonopen}\n         */\n        this.balloonopen = this.eventManager.getLazyEmitter('balloonopen');\n        /**\n         * Event preceding the \"drag\" event.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-beforedrag}\n         */\n        this.beforedrag = this.eventManager.getLazyEmitter('beforedrag');\n        /**\n         * Event preceding the \"dragstart\" event.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-beforedragstart}\n         */\n        this.beforedragstart = this.eventManager.getLazyEmitter('beforedragstart');\n        /**\n         * Single left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-click}\n         */\n        this.yaclick = this.eventManager.getLazyEmitter('click');\n        /**\n         * Calls the element's context menu.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-contextmenu}\n         */\n        this.yacontextmenu = this.eventManager.getLazyEmitter('contextmenu');\n        /**\n         * Double left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-dblclick}\n         */\n        this.yadblclick = this.eventManager.getLazyEmitter('dblclick');\n        /**\n         * Dragging a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-drag}\n         */\n        this.yadrag = this.eventManager.getLazyEmitter('drag');\n        /**\n         * End of geo object dragging.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-dragend}\n         */\n        this.yadragend = this.eventManager.getLazyEmitter('dragend');\n        /**\n         * Start of geo object dragging.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-dragstart}\n         */\n        this.yadragstart = this.eventManager.getLazyEmitter('dragstart');\n        /**\n         * Change in the state of the editor for the geo object's geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-editorstatechange}\n         */\n        this.editorstatechange = this.eventManager.getLazyEmitter('editorstatechange');\n        /**\n         * Change to the geo object geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-geometrychange}\n         */\n        this.geometrychange = this.eventManager.getLazyEmitter('geometrychange');\n        /**\n         * Closing the hint.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-hintclose}\n         */\n        this.hintclose = this.eventManager.getLazyEmitter('hintclose');\n        /**\n         * Opening a hint on a geo object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/GeoObject.html#event_detail__event-hintopen}\n         */\n        this.hintopen = this.eventManager.getLazyEmitter('hintopen');\n        /**\n         * Map reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IParentOnMap.html#event_detail__event-mapchange}\n         */\n        this.mapchange = this.eventManager.getLazyEmitter('mapchange');\n        /**\n         * Pressing the mouse button over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousedown}\n         */\n        this.yamousedown = this.eventManager.getLazyEmitter('mousedown');\n        /**\n         * Pointing the cursor at the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseenter}\n         */\n        this.yamouseenter = this.eventManager.getLazyEmitter('mouseenter');\n        /**\n         * Moving the cursor off of the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseleave}\n         */\n        this.yamouseleave = this.eventManager.getLazyEmitter('mouseleave');\n        /**\n         * Moving the cursor over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousemove}\n         */\n        this.yamousemove = this.eventManager.getLazyEmitter('mousemove');\n        /**\n         * Letting go of the mouse button over an object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseup}\n         */\n        this.yamouseup = this.eventManager.getLazyEmitter('mouseup');\n        /**\n         * End of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchend}\n         */\n        this.multitouchend = this.eventManager.getLazyEmitter('multitouchend');\n        /**\n         * Repeating event during multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchmove}\n         */\n        this.multitouchmove = this.eventManager.getLazyEmitter('multitouchmove');\n        /**\n         * Start of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchstart}\n         */\n        this.multitouchstart = this.eventManager.getLazyEmitter('multitouchstart');\n        /**\n         * Change to the object options.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/ICustomizable.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * Change to the geo object overlay.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-overlaychange}\n         */\n        this.overlaychange = this.eventManager.getLazyEmitter('overlaychange');\n        /**\n         * The parent object reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IChild.html#event_detail__event-parentchange}\n         */\n        this.parentchange = this.eventManager.getLazyEmitter('parentchange');\n        /**\n         * Change to the geo object data.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-propertieschange}\n         */\n        this.propertieschange = this.eventManager.getLazyEmitter('propertieschange');\n        /**\n         * Mouse wheel scrolling.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-wheel}\n         */\n        this.yawheel = this.eventManager.getLazyEmitter('wheel');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { placemark } = this;\n            if (placemark) {\n                const { geometry, properties, options } = changes;\n                if (geometry) {\n                    placemark.geometry?.setCoordinates(geometry.currentValue);\n                }\n                if (properties) {\n                    placemark.properties.set(properties.currentValue);\n                }\n                if (options) {\n                    placemark.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            const placemark = this.createPlacemark();\n            this.placemark = placemark;\n            map.geoObjects.add(placemark);\n            this.eventManager.setTarget(placemark);\n            this.ready.emit({ ymaps, target: placemark });\n        });\n    }\n    ngOnDestroy() {\n        if (this.placemark) {\n            this.yaMapComponent?.map$.value?.geoObjects.remove(this.placemark);\n            this.eventManager.destroy();\n        }\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Creates a placemark.\n     */\n    createPlacemark() {\n        return new ymaps.Placemark(this.geometry, this.properties, this.options);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaPlacemarkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaPlacemarkDirective, isStandalone: false, selector: \"ya-placemark\", inputs: { geometry: \"geometry\", properties: \"properties\", options: \"options\" }, outputs: { ready: \"ready\", balloonclose: \"balloonclose\", balloonopen: \"balloonopen\", beforedrag: \"beforedrag\", beforedragstart: \"beforedragstart\", yaclick: \"yaclick\", yacontextmenu: \"yacontextmenu\", yadblclick: \"yadblclick\", yadrag: \"yadrag\", yadragend: \"yadragend\", yadragstart: \"yadragstart\", editorstatechange: \"editorstatechange\", geometrychange: \"geometrychange\", hintclose: \"hintclose\", hintopen: \"hintopen\", mapchange: \"mapchange\", yamousedown: \"yamousedown\", yamouseenter: \"yamouseenter\", yamouseleave: \"yamouseleave\", yamousemove: \"yamousemove\", yamouseup: \"yamouseup\", multitouchend: \"multitouchend\", multitouchmove: \"multitouchmove\", multitouchstart: \"multitouchstart\", optionschange: \"optionschange\", overlaychange: \"overlaychange\", parentchange: \"parentchange\", propertieschange: \"propertieschange\", yawheel: \"yawheel\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaPlacemarkDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-placemark',\n                    standalone: false,\n                }]\n        }], propDecorators: { geometry: [{\n                type: Input\n            }], properties: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], balloonclose: [{\n                type: Output\n            }], balloonopen: [{\n                type: Output\n            }], beforedrag: [{\n                type: Output\n            }], beforedragstart: [{\n                type: Output\n            }], yaclick: [{\n                type: Output\n            }], yacontextmenu: [{\n                type: Output\n            }], yadblclick: [{\n                type: Output\n            }], yadrag: [{\n                type: Output\n            }], yadragend: [{\n                type: Output\n            }], yadragstart: [{\n                type: Output\n            }], editorstatechange: [{\n                type: Output\n            }], geometrychange: [{\n                type: Output\n            }], hintclose: [{\n                type: Output\n            }], hintopen: [{\n                type: Output\n            }], mapchange: [{\n                type: Output\n            }], yamousedown: [{\n                type: Output\n            }], yamouseenter: [{\n                type: Output\n            }], yamouseleave: [{\n                type: Output\n            }], yamousemove: [{\n                type: Output\n            }], yamouseup: [{\n                type: Output\n            }], multitouchend: [{\n                type: Output\n            }], multitouchmove: [{\n                type: Output\n            }], multitouchstart: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], overlaychange: [{\n                type: Output\n            }], parentchange: [{\n                type: Output\n            }], propertieschange: [{\n                type: Output\n            }], yawheel: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtcGxhY2VtYXJrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL2NvbXBvbmVudHMveWEtcGxhY2VtYXJrL3lhLXBsYWNlbWFyay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBS0gsTUFBTSxPQUFPLG9CQUFvQjtJQUpqQztRQUttQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLGlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSTlEOzs7V0FHRztRQUNNLGFBQVEsR0FBNkMsRUFBRSxDQUFDO1FBY2pFOztXQUVHO1FBQ08sVUFBSyxHQUFnRCxJQUFJLFlBQVksRUFFNUUsQ0FBQztRQUVKOzs7V0FHRztRQUNPLGlCQUFZLEdBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRW5EOzs7V0FHRztRQUNPLGdCQUFXLEdBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxEOzs7V0FHRztRQUNPLGVBQVUsR0FDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFakQ7OztXQUdHO1FBQ08sb0JBQWUsR0FDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV0RDs7O1dBR0c7UUFDTyxZQUFPLEdBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUM7OztXQUdHO1FBQ08sa0JBQWEsR0FDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQ7OztXQUdHO1FBQ08sZUFBVSxHQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUvQzs7O1dBR0c7UUFDTyxXQUFNLEdBQXlDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxHOzs7V0FHRztRQUNPLGNBQVMsR0FDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUM7OztXQUdHO1FBQ08sZ0JBQVcsR0FDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFaEQ7OztXQUdHO1FBQ08sc0JBQWlCLEdBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFeEQ7OztXQUdHO1FBQ08sbUJBQWMsR0FDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVyRDs7O1dBR0c7UUFDTyxjQUFTLEdBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWhEOzs7V0FHRztRQUNPLGFBQVEsR0FDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0M7OztXQUdHO1FBQ08sY0FBUyxHQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRDs7O1dBR0c7UUFDTyxnQkFBVyxHQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRDs7O1dBR0c7UUFDTyxpQkFBWSxHQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRDs7O1dBR0c7UUFDTyxpQkFBWSxHQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVqRDs7O1dBR0c7UUFDTyxnQkFBVyxHQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRDs7O1dBR0c7UUFDTyxjQUFTLEdBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlDOzs7V0FHRztRQUNPLGtCQUFhLEdBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBEOzs7V0FHRztRQUNPLG1CQUFjLEdBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFckQ7OztXQUdHO1FBQ08sb0JBQWUsR0FDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV0RDs7O1dBR0c7UUFDTyxrQkFBYSxHQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRDs7O1dBR0c7UUFDTyxrQkFBYSxHQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRDs7O1dBR0c7UUFDTyxpQkFBWSxHQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRDs7O1dBR0c7UUFDTyxxQkFBZ0IsR0FDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV2RDs7O1dBR0c7UUFDTyxZQUFPLEdBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7S0F3RDdDO0lBdERDOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxnR0FBZ0c7UUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUUzQixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQztnQkFFbEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixTQUFTLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVELENBQUM7Z0JBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3pGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUUzQixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQzs4R0EzUlUsb0JBQW9CO2tHQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs4QkFlVSxRQUFRO3NCQUFoQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQUtJLEtBQUs7c0JBQWQsTUFBTTtnQkFRRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLE9BQU87c0JBQWhCLE1BQU07Z0JBT0csYUFBYTtzQkFBdEIsTUFBTTtnQkFPRyxVQUFVO3NCQUFuQixNQUFNO2dCQU9HLE1BQU07c0JBQWYsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxRQUFRO3NCQUFqQixNQUFNO2dCQU9HLFNBQVM7c0JBQWxCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFPRyxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFPRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csYUFBYTtzQkFBdEIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFPRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBZYUV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy95YS1ldmVudCc7XHJcbmltcG9ydCB7IFlhUmVhZHlFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtcmVhZHktZXZlbnQnO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9ldmVudC1tYW5hZ2VyL2V2ZW50LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBZYU1hcENvbXBvbmVudCB9IGZyb20gJy4uL3lhLW1hcC95YS1tYXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYHlhLXBsYWNlbWFya2AgZGlyZWN0aXZlIHdyYXBzIGB5bWFwcy5QbGFjZW1hcmtgIGNsYXNzIGZyb20gdGhlIFlhbmRleC5NYXBzIEFQSS5cclxuICogWW91IGNhbiBjb25maWd1cmUgaXQgdmlhIHRoZSBkaXJlY3RpdmUncyBpbnB1dHMuXHJcbiAqIEV2ZW50cyBjYW4gYmUgYm91bmQgdXNpbmcgdGhlIG91dHB1dHMgb2YgdGhlIGRpcmVjdGl2ZS5cclxuICpcclxuICogPGV4YW1wbGUtdXJsPmh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9jdXN0b20tcGxhY2VtYXJrP2VtYmVkPTEmdmlldz1wcmV2aWV3PC9leGFtcGxlLXVybD5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8eWEtbWFwIFtjZW50ZXJdPVwiWzU1Ljc1MTk1MiwgMzcuNjAwNzM5XVwiPlxyXG4gKiAgIDx5YS1wbGFjZW1hcmsgW2dlb21ldHJ5XT1cIls1NS43NTE5NTIsIDM3LjYwMDczOV1cIj48L3lhLXBsYWNlbWFyaz5cclxuICogPC95YS1tYXA+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICd5YS1wbGFjZW1hcmsnLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWWFQbGFjZW1hcmtEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgeWFNYXBDb21wb25lbnQgPSBpbmplY3QoWWFNYXBDb21wb25lbnQpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE1hbmFnZXIgPSBuZXcgRXZlbnRNYW5hZ2VyKHRoaXMubmdab25lKTtcclxuXHJcbiAgcGxhY2VtYXJrPzogeW1hcHMuUGxhY2VtYXJrO1xyXG5cclxuICAvKipcclxuICAgKiBDb29yZGluYXRlcyBvZiB0aGUgcGxhY2VtYXJrLCBvciBhIGhhc2ggZGVzY3JpYmluZyB0aGUgZ2VvbWV0cnksIG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBwb2ludCBnZW9tZXRyeSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvUGxhY2VtYXJrLmh0bWwjUGxhY2VtYXJrX19wYXJhbS1nZW9tZXRyeX1cclxuICAgKi9cclxuICBASW5wdXQoKSBnZW9tZXRyeTogbnVtYmVyW10gfCBvYmplY3QgfCB5bWFwcy5JUG9pbnRHZW9tZXRyeSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBQbGFjZW1hcmsgcHJvcGVydGllcy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9QbGFjZW1hcmsuaHRtbCNQbGFjZW1hcmtfX3BhcmFtLXByb3BlcnRpZXN9XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHJvcGVydGllcz86IHltYXBzLklQbGFjZW1hcmtQcm9wZXJ0aWVzIHwgeW1hcHMuSURhdGFNYW5hZ2VyO1xyXG5cclxuICAvKipcclxuICAgKiBQbGFjZW1hcmsgb3B0aW9ucy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9QbGFjZW1hcmsuaHRtbCNQbGFjZW1hcmtfX3BhcmFtLW9wdGlvbnN9XHJcbiAgICovXHJcbiAgQElucHV0KCkgb3B0aW9ucz86IHltYXBzLklQbGFjZW1hcmtPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBQbGFjZW1hcmsgaW5zdGFuY2UgaXMgYWRkZWQgdG8gYSBNYXAuIFRoaXMgZXZlbnQgcnVucyBvdXRzaWRlIGFuIEFuZ3VsYXIgem9uZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcmVhZHk6IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgWWFSZWFkeUV2ZW50PHltYXBzLlBsYWNlbWFyaz5cclxuICA+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NpbmcgdGhlIGJhbGxvb24uXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iYWxsb29uY2xvc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJhbGxvb25jbG9zZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdiYWxsb29uY2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyBhIGJhbGxvb24gb24gYSBnZW8gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYmFsbG9vbm9wZW59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGJhbGxvb25vcGVuOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JhbGxvb25vcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IHByZWNlZGluZyB0aGUgXCJkcmFnXCIgZXZlbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iZWZvcmVkcmFnfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVkcmFnOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JlZm9yZWRyYWcnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgcHJlY2VkaW5nIHRoZSBcImRyYWdzdGFydFwiIGV2ZW50LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYmVmb3JlZHJhZ3N0YXJ0fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVkcmFnc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignYmVmb3JlZHJhZ3N0YXJ0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpbmdsZSBsZWZ0LWNsaWNrIG9uIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY2xpY2t9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY2xpY2s6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY2xpY2snKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgdGhlIGVsZW1lbnQncyBjb250ZXh0IG1lbnUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY29udGV4dG1lbnV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY29udGV4dG1lbnU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY29udGV4dG1lbnUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRG91YmxlIGxlZnQtY2xpY2sgb24gdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1kYmxjbGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkYmxjbGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdkYmxjbGljaycpO1xyXG5cclxuICAvKipcclxuICAgKiBEcmFnZ2luZyBhIGdlbyBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1kcmFnfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YWRyYWc6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9IHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdkcmFnJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuZCBvZiBnZW8gb2JqZWN0IGRyYWdnaW5nLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZHJhZ2VuZH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkcmFnZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2RyYWdlbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgb2YgZ2VvIG9iamVjdCBkcmFnZ2luZy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9HZW9PYmplY3QuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWRyYWdzdGFydH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFkcmFnc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignZHJhZ3N0YXJ0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSBpbiB0aGUgc3RhdGUgb2YgdGhlIGVkaXRvciBmb3IgdGhlIGdlbyBvYmplY3QncyBnZW9tZXRyeS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9HZW9PYmplY3QuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWVkaXRvcnN0YXRlY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JzdGF0ZWNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdlZGl0b3JzdGF0ZWNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIGdlbyBvYmplY3QgZ2VvbWV0cnkuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZ2VvbWV0cnljaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGdlb21ldHJ5Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2dlb21ldHJ5Y2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NpbmcgdGhlIGhpbnQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1oaW50Y2xvc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGhpbnRjbG9zZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdoaW50Y2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyBhIGhpbnQgb24gYSBnZW8gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0dlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtaGludG9wZW59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGhpbnRvcGVuOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2hpbnRvcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JUGFyZW50T25NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFwY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21hcGNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBQcmVzc2luZyB0aGUgbW91c2UgYnV0dG9uIG92ZXIgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZWRvd259XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2Vkb3duOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZG93bicpO1xyXG5cclxuICAvKipcclxuICAgKiBQb2ludGluZyB0aGUgY3Vyc29yIGF0IHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VlbnRlcn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWVudGVyOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZW50ZXInKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb2ZmIG9mIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VsZWF2ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWxlYXZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlbGVhdmUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb3ZlciB0aGUgb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNlbW92ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZW1vdmU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2Vtb3ZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExldHRpbmcgZ28gb2YgdGhlIG1vdXNlIGJ1dHRvbiBvdmVyIGFuIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZXVwfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNldXA6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2V1cCcpO1xyXG5cclxuICAvKipcclxuICAgKiBFbmQgb2YgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNoZW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hlbmQnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwZWF0aW5nIGV2ZW50IGR1cmluZyBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2htb3ZlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNobW92ZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtdWx0aXRvdWNobW92ZScpO1xyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBvZiBtdWx0aXRvdWNoLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW11bHRpdG91Y2hzdGFydH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbXVsdGl0b3VjaHN0YXJ0OiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hzdGFydCcpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lDdXN0b21pemFibGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW9wdGlvbnNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9wdGlvbnNjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5QbGFjZW1hcms+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignb3B0aW9uc2NoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIGdlbyBvYmplY3Qgb3ZlcmxheS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1vdmVybGF5Y2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBvdmVybGF5Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuUGxhY2VtYXJrPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ292ZXJsYXljaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHBhcmVudCBvYmplY3QgcmVmZXJlbmNlIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUNoaWxkLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1wYXJlbnRjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHBhcmVudGNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwYXJlbnRjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IGRhdGEuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtcHJvcGVydGllc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHJvcGVydGllc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwcm9wZXJ0aWVzY2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdXNlIHdoZWVsIHNjcm9sbGluZy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC13aGVlbH1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWF3aGVlbDogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLlBsYWNlbWFyaz4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCd3aGVlbCcpO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGlucHV0IGNoYW5nZXMgYW5kIHBhc3NlcyB0aGVtIGluIEFQSS5cclxuICAgKiBAcGFyYW0gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIEl0IG11c3QgYmUgcnVuIG91dHNpZGUgYSB6b25lOyBvdGhlcndpc2UsIGFsbCBhc3luYyBldmVudHMgd2l0aGluIHRoaXMgY2FsbCB3aWxsIGNhdXNlIHRpY2tzLlxyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB7IHBsYWNlbWFyayB9ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChwbGFjZW1hcmspIHtcclxuICAgICAgICBjb25zdCB7IGdlb21ldHJ5LCBwcm9wZXJ0aWVzLCBvcHRpb25zIH0gPSBjaGFuZ2VzO1xyXG5cclxuICAgICAgICBpZiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICAgIHBsYWNlbWFyay5nZW9tZXRyeT8uc2V0Q29vcmRpbmF0ZXMoZ2VvbWV0cnkuY3VycmVudFZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICBwbGFjZW1hcmsucHJvcGVydGllcy5zZXQocHJvcGVydGllcy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgIHBsYWNlbWFyay5vcHRpb25zLnNldChvcHRpb25zLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy55YU1hcENvbXBvbmVudC5tYXAkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgobWFwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBsYWNlbWFyayA9IHRoaXMuY3JlYXRlUGxhY2VtYXJrKCk7XHJcbiAgICAgIHRoaXMucGxhY2VtYXJrID0gcGxhY2VtYXJrO1xyXG5cclxuICAgICAgbWFwLmdlb09iamVjdHMuYWRkKHBsYWNlbWFyayk7XHJcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnNldFRhcmdldChwbGFjZW1hcmspO1xyXG4gICAgICB0aGlzLnJlYWR5LmVtaXQoeyB5bWFwcywgdGFyZ2V0OiBwbGFjZW1hcmsgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGxhY2VtYXJrKSB7XHJcbiAgICAgIHRoaXMueWFNYXBDb21wb25lbnQ/Lm1hcCQudmFsdWU/Lmdlb09iamVjdHMucmVtb3ZlKHRoaXMucGxhY2VtYXJrKTtcclxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIHBsYWNlbWFyay5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVBsYWNlbWFyaygpOiB5bWFwcy5QbGFjZW1hcmsge1xyXG4gICAgcmV0dXJuIG5ldyB5bWFwcy5QbGFjZW1hcmsodGhpcy5nZW9tZXRyeSwgdGhpcy5wcm9wZXJ0aWVzLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxufVxyXG4iXX0=","import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, inject, Input, NgZone, Output, QueryList, } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaGeoObjectDirective } from '../ya-geoobject/ya-geoobject.directive';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport { YaPlacemarkDirective } from '../ya-placemark/ya-placemark.directive';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-clusterer` component wraps `ymaps.Clusterer` class from the Yandex.Maps API.\n * You can configure it via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * <example-url>https://stackblitz.com/edit/placemark-clusterer?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map [center]=\"[55.761952, 37.620739]\">\n *   <ya-clusterer [options]=\"{ minClusterSize: 5 }\">\n *     <ya-placemark [geometry]=\"[55.74, 37.5]\"></ya-placemark>\n *     <ya-placemark [geometry]=\"[55.64, 37.46]\"></ya-placemark>\n *     <ya-placemark [geometry]=\"[55.75, 37.38]\"></ya-placemark>\n *\n *     <ya-geoobject\n *       [feature]=\"{ geometry: { type: 'Point', coordinates: [55.81, 37.4] } }\"\n *      ></ya-geoobject>\n *\n *     <ya-geoobject\n *       [feature]=\"{ geometry: { type: 'Point', coordinates: [55.7, 37.39] } }\"\n *      ></ya-geoobject>\n *   </ya-clusterer>\n * </ya-map>\n * ```\n */\nexport class YaClustererComponent {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.placemarks = new QueryList();\n        this.geoObjects = new QueryList();\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * Clusterer instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * Closing the hint.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Clusterer.html#event_detail__event-hintclose}\n         */\n        this.hintclose = this.eventManager.getLazyEmitter('hintclose');\n        /**\n         * Opening a hint on a map.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/Clusterer.html#event_detail__event-hintopen}\n         */\n        this.hintopen = this.eventManager.getLazyEmitter('hintopen');\n        /**\n         * Map reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IParentOnMap.html#event_detail__event-mapchange}\n         */\n        this.mapchange = this.eventManager.getLazyEmitter('mapchange');\n        /**\n         * Change to the object options.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/ICustomizable.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * The parent object reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IChild.html#event_detail__event-parentchange}\n         */\n        this.parentchange = this.eventManager.getLazyEmitter('parentchange');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { clusterer } = this;\n            if (clusterer) {\n                const { options } = changes;\n                if (options) {\n                    clusterer.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngAfterContentInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            const clusterer = this.createClusterer();\n            this.clusterer = clusterer;\n            map.geoObjects.add(clusterer);\n            this.eventManager.setTarget(clusterer);\n            this.watchForPlacemarkChanges(clusterer);\n            this.watchForGeoObjectChanges(clusterer);\n            this.ready.emit({ ymaps, target: clusterer });\n        });\n    }\n    ngOnDestroy() {\n        this.eventManager.destroy();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Creates Clusterer.\n     */\n    createClusterer() {\n        return new ymaps.Clusterer(this.options);\n    }\n    watchForPlacemarkChanges(clusterer) {\n        // Adds new Placemarks to the clusterer on changes.\n        const initialPlacemarks = this.getInternalPlacemarks(this.placemarks.toArray());\n        const currentPlacemarks = new Set(initialPlacemarks);\n        clusterer.add(initialPlacemarks);\n        this.placemarks.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((placemarkDirectives) => {\n            const newPlacemarks = new Set(this.getInternalPlacemarks(placemarkDirectives));\n            const difference = this.getDifference(newPlacemarks, currentPlacemarks);\n            clusterer.add(difference.toAdd);\n            clusterer.remove(difference.toRemove);\n        });\n    }\n    watchForGeoObjectChanges(clusterer) {\n        // Adds new GeoObjects to the clusterer on changes.\n        const initialGeoObjects = this.getInternalGeoObjects(this.geoObjects.toArray());\n        const currentGeoObjects = new Set(initialGeoObjects);\n        clusterer.add(initialGeoObjects);\n        this.geoObjects.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((geoObjectDirectives) => {\n            const newGeoObjects = new Set(this.getInternalGeoObjects(geoObjectDirectives));\n            const difference = this.getDifference(newGeoObjects, currentGeoObjects);\n            clusterer.add(difference.toAdd);\n            clusterer.remove(difference.toRemove);\n        });\n    }\n    /**\n     * Determines what should be added/removed in current set to equal new set\n     *\n     * @param newSet\n     * @param currentSet\n     */\n    getDifference(newSet, currentSet) {\n        const toAdd = [];\n        const toRemove = [];\n        newSet.forEach((component) => {\n            if (!currentSet.has(component)) {\n                toAdd.push(component);\n                currentSet.add(component);\n            }\n        });\n        currentSet.forEach((component) => {\n            if (!newSet.has(component)) {\n                toRemove.push(component);\n                currentSet.delete(component);\n            }\n        });\n        return {\n            toAdd,\n            toRemove,\n        };\n    }\n    getInternalPlacemarks(placemarks) {\n        return placemarks\n            .filter((component) => !!component.placemark)\n            .map((component) => component.placemark);\n    }\n    getInternalGeoObjects(geoObjects) {\n        return geoObjects\n            .filter((component) => !!component.geoObject)\n            .map((component) => component.geoObject);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaClustererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaClustererComponent, isStandalone: false, selector: \"ya-clusterer\", inputs: { options: \"options\" }, outputs: { ready: \"ready\", hintclose: \"hintclose\", hintopen: \"hintopen\", mapchange: \"mapchange\", optionschange: \"optionschange\", parentchange: \"parentchange\" }, queries: [{ propertyName: \"placemarks\", predicate: YaPlacemarkDirective }, { propertyName: \"geoObjects\", predicate: YaGeoObjectDirective }], usesOnChanges: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaClustererComponent, decorators: [{\n            type: Component,\n            args: [{\n                    selector: 'ya-clusterer',\n                    template: '<ng-content></ng-content>',\n                    changeDetection: ChangeDetectionStrategy.OnPush,\n                    standalone: false,\n                }]\n        }], propDecorators: { placemarks: [{\n                type: ContentChildren,\n                args: [YaPlacemarkDirective]\n            }], geoObjects: [{\n                type: ContentChildren,\n                args: [YaGeoObjectDirective]\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], hintclose: [{\n                type: Output\n            }], hintopen: [{\n                type: Output\n            }], mapchange: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], parentchange: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtY2x1c3RlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL2NvbXBvbmVudHMveWEtY2x1c3RlcmVyL3lhLWNsdXN0ZXJlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQU9ILE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFPbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUd4QyxlQUFVLEdBQW9DLElBQUksU0FBUyxFQUFFLENBQUM7UUFHOUQsZUFBVSxHQUFvQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRTlELGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLGlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMs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Q0FBQyxVQUFrQztRQUM5RCxPQUFPLFVBQVU7YUFDZCxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO2FBQzVDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBL0xVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHFTQUlkLG9CQUFvQiw2Q0FHcEIsb0JBQW9CLGtEQVgzQiwyQkFBMkI7OzJGQUkxQixvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsS0FBSztpQkFDbEI7OEJBTWtCLFVBQVU7c0JBRDFCLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUlwQixVQUFVO3NCQUQxQixlQUFlO3VCQUFDLG9CQUFvQjtnQkFhNUIsT0FBTztzQkFBZixLQUFLO2dCQUtJLEtBQUs7c0JBQWQsTUFBTTtnQkFRRyxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLFFBQVE7c0JBQWpCLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFlhRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLWV2ZW50JztcclxuaW1wb3J0IHsgWWFSZWFkeUV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy95YS1yZWFkeS1ldmVudCc7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gJy4uLy4uL3V0aWxzL2V2ZW50LW1hbmFnZXIvZXZlbnQtbWFuYWdlcic7XHJcbmltcG9ydCB7IFlhR2VvT2JqZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi4veWEtZ2Vvb2JqZWN0L3lhLWdlb29iamVjdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBZYU1hcENvbXBvbmVudCB9IGZyb20gJy4uL3lhLW1hcC95YS1tYXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWWFQbGFjZW1hcmtEaXJlY3RpdmUgfSBmcm9tICcuLi95YS1wbGFjZW1hcmsveWEtcGxhY2VtYXJrLmRpcmVjdGl2ZSc7XHJcblxyXG4vKipcclxuICogVGhlIGB5YS1jbHVzdGVyZXJgIGNvbXBvbmVudCB3cmFwcyBgeW1hcHMuQ2x1c3RlcmVyYCBjbGFzcyBmcm9tIHRoZSBZYW5kZXguTWFwcyBBUEkuXHJcbiAqIFlvdSBjYW4gY29uZmlndXJlIGl0IHZpYSB0aGUgY29tcG9uZW50J3MgaW5wdXRzLlxyXG4gKiBFdmVudHMgY2FuIGJlIGJvdW5kIHVzaW5nIHRoZSBvdXRwdXRzIG9mIHRoZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvcGxhY2VtYXJrLWNsdXN0ZXJlcj9lbWJlZD0xJnZpZXc9cHJldmlldzwvZXhhbXBsZS11cmw+XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPHlhLW1hcCBbY2VudGVyXT1cIls1NS43NjE5NTIsIDM3LjYyMDczOV1cIj5cclxuICogICA8eWEtY2x1c3RlcmVyIFtvcHRpb25zXT1cInsgbWluQ2x1c3RlclNpemU6IDUgfVwiPlxyXG4gKiAgICAgPHlhLXBsYWNlbWFyayBbZ2VvbWV0cnldPVwiWzU1Ljc0LCAzNy41XVwiPjwveWEtcGxhY2VtYXJrPlxyXG4gKiAgICAgPHlhLXBsYWNlbWFyayBbZ2VvbWV0cnldPVwiWzU1LjY0LCAzNy40Nl1cIj48L3lhLXBsYWNlbWFyaz5cclxuICogICAgIDx5YS1wbGFjZW1hcmsgW2dlb21ldHJ5XT1cIls1NS43NSwgMzcuMzhdXCI+PC95YS1wbGFjZW1hcms+XHJcbiAqXHJcbiAqICAgICA8eWEtZ2Vvb2JqZWN0XHJcbiAqICAgICAgIFtmZWF0dXJlXT1cInsgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFs1NS44MSwgMzcuNF0gfSB9XCJcclxuICogICAgICA+PC95YS1nZW9vYmplY3Q+XHJcbiAqXHJcbiAqICAgICA8eWEtZ2Vvb2JqZWN0XHJcbiAqICAgICAgIFtmZWF0dXJlXT1cInsgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFs1NS43LCAzNy4zOV0gfSB9XCJcclxuICogICAgICA+PC95YS1nZW9vYmplY3Q+XHJcbiAqICAgPC95YS1jbHVzdGVyZXI+XHJcbiAqIDwveWEtbWFwPlxyXG4gKiBgYGBcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAneWEtY2x1c3RlcmVyJyxcclxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWWFDbHVzdGVyZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHlhTWFwQ29tcG9uZW50ID0gaW5qZWN0KFlhTWFwQ29tcG9uZW50KTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihZYVBsYWNlbWFya0RpcmVjdGl2ZSlcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlbWFya3M6IFF1ZXJ5TGlzdDxZYVBsYWNlbWFya0RpcmVjdGl2ZT4gPSBuZXcgUXVlcnlMaXN0KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oWWFHZW9PYmplY3REaXJlY3RpdmUpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBnZW9PYmplY3RzOiBRdWVyeUxpc3Q8WWFHZW9PYmplY3REaXJlY3RpdmU+ID0gbmV3IFF1ZXJ5TGlzdCgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE1hbmFnZXIgPSBuZXcgRXZlbnRNYW5hZ2VyKHRoaXMubmdab25lKTtcclxuXHJcbiAgcHJpdmF0ZSBjbHVzdGVyZXI/OiB5bWFwcy5DbHVzdGVyZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIENsdXN0ZXJlciBvcHRpb25zLiBPcHRpb25zIGZvciBjaGlsZCBjbHVzdGVyIG9iamVjdHMgYXJlIHNldCB3aXRoIHRoZSBcImNsdXN0ZXJcIiBwcmVmaXguXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvQ2x1c3RlcmVyLmh0bWwjQ2x1c3RlcmVyX19wYXJhbS1vcHRpb25zfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM/OiB5bWFwcy5JQ2x1c3RlcmVyT3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogQ2x1c3RlcmVyIGluc3RhbmNlIGlzIGFkZGVkIHRvIGEgTWFwLiBUaGlzIGV2ZW50IHJ1bnMgb3V0c2lkZSBhbiBBbmd1bGFyIHpvbmUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHJlYWR5OiBFdmVudEVtaXR0ZXI8WWFSZWFkeUV2ZW50PHltYXBzLkNsdXN0ZXJlcj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIFlhUmVhZHlFdmVudDx5bWFwcy5DbHVzdGVyZXI+XHJcbiAgPigpO1xyXG5cclxuICAvKipcclxuICAgKiBDbG9zaW5nIHRoZSBoaW50LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0NsdXN0ZXJlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtaGludGNsb3NlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBoaW50Y2xvc2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5DbHVzdGVyZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignaGludGNsb3NlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW5pbmcgYSBoaW50IG9uIGEgbWFwLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0NsdXN0ZXJlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtaGludG9wZW59XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGhpbnRvcGVuOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuQ2x1c3RlcmVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2hpbnRvcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JUGFyZW50T25NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFwY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuQ2x1c3RlcmVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21hcGNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lDdXN0b21pemFibGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW9wdGlvbnNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9wdGlvbnNjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5DbHVzdGVyZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignb3B0aW9uc2NoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcGFyZW50IG9iamVjdCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JQ2hpbGQuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LXBhcmVudGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcGFyZW50Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuQ2x1c3RlcmVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3BhcmVudGNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGlucHV0IGNoYW5nZXMgYW5kIHBhc3NlcyB0aGVtIGluIEFQSS5cclxuICAgKiBAcGFyYW0gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIC8vIEl0IG11c3QgYmUgcnVuIG91dHNpZGUgYSB6b25lOyBvdGhlcndpc2UsIGFsbCBhc3luYyBldmVudHMgd2l0aGluIHRoaXMgY2FsbCB3aWxsIGNhdXNlIHRpY2tzLlxyXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICBjb25zdCB7IGNsdXN0ZXJlciB9ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChjbHVzdGVyZXIpIHtcclxuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgICBjbHVzdGVyZXIub3B0aW9ucy5zZXQob3B0aW9ucy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnlhTWFwQ29tcG9uZW50Lm1hcCQucGlwZShmaWx0ZXIoQm9vbGVhbiksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChtYXApID0+IHtcclxuICAgICAgY29uc3QgY2x1c3RlcmVyID0gdGhpcy5jcmVhdGVDbHVzdGVyZXIoKTtcclxuICAgICAgdGhpcy5jbHVzdGVyZXIgPSBjbHVzdGVyZXI7XHJcblxyXG4gICAgICBtYXAuZ2VvT2JqZWN0cy5hZGQoY2x1c3RlcmVyKTtcclxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc2V0VGFyZ2V0KGNsdXN0ZXJlcik7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JQbGFjZW1hcmtDaGFuZ2VzKGNsdXN0ZXJlcik7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JHZW9PYmplY3RDaGFuZ2VzKGNsdXN0ZXJlcik7XHJcbiAgICAgIHRoaXMucmVhZHkuZW1pdCh7IHltYXBzLCB0YXJnZXQ6IGNsdXN0ZXJlciB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgQ2x1c3RlcmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ2x1c3RlcmVyKCk6IHltYXBzLkNsdXN0ZXJlciB7XHJcbiAgICByZXR1cm4gbmV3IHltYXBzLkNsdXN0ZXJlcih0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvclBsYWNlbWFya0NoYW5nZXMoY2x1c3RlcmVyOiB5bWFwcy5DbHVzdGVyZXIpOiB2b2lkIHtcclxuICAgIC8vIEFkZHMgbmV3IFBsYWNlbWFya3MgdG8gdGhlIGNsdXN0ZXJlciBvbiBjaGFuZ2VzLlxyXG4gICAgY29uc3QgaW5pdGlhbFBsYWNlbWFya3MgPSB0aGlzLmdldEludGVybmFsUGxhY2VtYXJrcyh0aGlzLnBsYWNlbWFya3MudG9BcnJheSgpKTtcclxuICAgIGNvbnN0IGN1cnJlbnRQbGFjZW1hcmtzID0gbmV3IFNldDx5bWFwcy5QbGFjZW1hcms+KGluaXRpYWxQbGFjZW1hcmtzKTtcclxuXHJcbiAgICBjbHVzdGVyZXIuYWRkKGluaXRpYWxQbGFjZW1hcmtzKTtcclxuXHJcbiAgICB0aGlzLnBsYWNlbWFya3MuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBsYWNlbWFya0RpcmVjdGl2ZXM6IFlhUGxhY2VtYXJrRGlyZWN0aXZlW10pID0+IHtcclxuICAgICAgICBjb25zdCBuZXdQbGFjZW1hcmtzID0gbmV3IFNldDx5bWFwcy5QbGFjZW1hcms+KFxyXG4gICAgICAgICAgdGhpcy5nZXRJbnRlcm5hbFBsYWNlbWFya3MocGxhY2VtYXJrRGlyZWN0aXZlcyksXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuZ2V0RGlmZmVyZW5jZTx5bWFwcy5QbGFjZW1hcms+KG5ld1BsYWNlbWFya3MsIGN1cnJlbnRQbGFjZW1hcmtzKTtcclxuXHJcbiAgICAgICAgY2x1c3RlcmVyLmFkZChkaWZmZXJlbmNlLnRvQWRkKTtcclxuICAgICAgICBjbHVzdGVyZXIucmVtb3ZlKGRpZmZlcmVuY2UudG9SZW1vdmUpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hGb3JHZW9PYmplY3RDaGFuZ2VzKGNsdXN0ZXJlcjogeW1hcHMuQ2x1c3RlcmVyKSB7XHJcbiAgICAvLyBBZGRzIG5ldyBHZW9PYmplY3RzIHRvIHRoZSBjbHVzdGVyZXIgb24gY2hhbmdlcy5cclxuICAgIGNvbnN0IGluaXRpYWxHZW9PYmplY3RzID0gdGhpcy5nZXRJbnRlcm5hbEdlb09iamVjdHModGhpcy5nZW9PYmplY3RzLnRvQXJyYXkoKSk7XHJcbiAgICBjb25zdCBjdXJyZW50R2VvT2JqZWN0cyA9IG5ldyBTZXQ8eW1hcHMuR2VvT2JqZWN0Pihpbml0aWFsR2VvT2JqZWN0cyk7XHJcblxyXG4gICAgY2x1c3RlcmVyLmFkZChpbml0aWFsR2VvT2JqZWN0cyk7XHJcblxyXG4gICAgdGhpcy5nZW9PYmplY3RzLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChnZW9PYmplY3REaXJlY3RpdmVzOiBZYUdlb09iamVjdERpcmVjdGl2ZVtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3R2VvT2JqZWN0cyA9IG5ldyBTZXQ8eW1hcHMuR2VvT2JqZWN0PihcclxuICAgICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxHZW9PYmplY3RzKGdlb09iamVjdERpcmVjdGl2ZXMpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmdldERpZmZlcmVuY2U8eW1hcHMuR2VvT2JqZWN0PihuZXdHZW9PYmplY3RzLCBjdXJyZW50R2VvT2JqZWN0cyk7XHJcblxyXG4gICAgICAgIGNsdXN0ZXJlci5hZGQoZGlmZmVyZW5jZS50b0FkZCk7XHJcbiAgICAgICAgY2x1c3RlcmVyLnJlbW92ZShkaWZmZXJlbmNlLnRvUmVtb3ZlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoYXQgc2hvdWxkIGJlIGFkZGVkL3JlbW92ZWQgaW4gY3VycmVudCBzZXQgdG8gZXF1YWwgbmV3IHNldFxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5ld1NldFxyXG4gICAqIEBwYXJhbSBjdXJyZW50U2V0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXREaWZmZXJlbmNlPFQ+KG5ld1NldDogU2V0PFQ+LCBjdXJyZW50U2V0OiBTZXQ8VD4pIHtcclxuICAgIGNvbnN0IHRvQWRkOiBUW10gPSBbXTtcclxuICAgIGNvbnN0IHRvUmVtb3ZlOiBUW10gPSBbXTtcclxuXHJcbiAgICBuZXdTZXQuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XHJcbiAgICAgIGlmICghY3VycmVudFNldC5oYXMoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHRvQWRkLnB1c2goY29tcG9uZW50KTtcclxuICAgICAgICBjdXJyZW50U2V0LmFkZChjb21wb25lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjdXJyZW50U2V0LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICBpZiAoIW5ld1NldC5oYXMoY29tcG9uZW50KSkge1xyXG4gICAgICAgIHRvUmVtb3ZlLnB1c2goY29tcG9uZW50KTtcclxuICAgICAgICBjdXJyZW50U2V0LmRlbGV0ZShjb21wb25lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b0FkZCxcclxuICAgICAgdG9SZW1vdmUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJbnRlcm5hbFBsYWNlbWFya3MocGxhY2VtYXJrczogWWFQbGFjZW1hcmtEaXJlY3RpdmVbXSk6IHltYXBzLlBsYWNlbWFya1tdIHtcclxuICAgIHJldHVybiBwbGFjZW1hcmtzXHJcbiAgICAgIC5maWx0ZXIoKGNvbXBvbmVudCkgPT4gISFjb21wb25lbnQucGxhY2VtYXJrKVxyXG4gICAgICAubWFwKChjb21wb25lbnQpID0+IGNvbXBvbmVudC5wbGFjZW1hcmshKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW50ZXJuYWxHZW9PYmplY3RzKGdlb09iamVjdHM6IFlhR2VvT2JqZWN0RGlyZWN0aXZlW10pOiB5bWFwcy5HZW9PYmplY3RbXSB7XHJcbiAgICByZXR1cm4gZ2VvT2JqZWN0c1xyXG4gICAgICAuZmlsdGVyKChjb21wb25lbnQpID0+ICEhY29tcG9uZW50Lmdlb09iamVjdClcclxuICAgICAgLm1hcCgoY29tcG9uZW50KSA9PiBjb21wb25lbnQuZ2VvT2JqZWN0ISk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Directive, EventEmitter, inject, Input, Output, } from '@angular/core';\nimport { Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-control` component wraps `ymaps.control[YaControlType]` classes from the Yandex.Maps API.\n * You can configure `ymaps.control[YaControlType]` via the component's inputs.\n * API Events can be bound only manually. You can use `ready` event to get an instance.\n *\n * <example-url>https://stackblitz.com/edit/searchcontrol?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map [center]=\"[55.761952, 37.620739]\">\n *   <ya-control\n *     type=\"RoutePanel\"\n *     [parameters]=\"{ options: { float: 'right' } }\"\n *   ></ya-control>\n * </ya-map>\n * ```\n */\nexport class YaControlDirective {\n    constructor() {\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        /**\n         * Control instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n    }\n    ngOnChanges() {\n        if (this.control) {\n            console.warn('Control does not support dynamic configuration. You can config it manually using ymaps or recreate the component with new configuration.');\n        }\n    }\n    ngOnInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            if (!this.type) {\n                throw new Error('ymaps.control[type] is invalid.');\n            }\n            const control = new ymaps.control[this.type](this.parameters);\n            this.control = control;\n            // RoutePanel ignores state in parameters. API bug\n            if (control instanceof ymaps.control.RoutePanel && this.parameters && this.parameters.state) {\n                control.routePanel.state.set({ ...this.parameters.state });\n            }\n            map.controls.add(control);\n            this.ready.emit({ ymaps, target: control });\n        });\n    }\n    ngOnDestroy() {\n        if (this.control) {\n            this.yaMapComponent?.map$.value?.controls.remove(this.control);\n        }\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaControlDirective, isStandalone: false, selector: \"ya-control\", inputs: { type: \"type\", parameters: \"parameters\" }, outputs: { ready: \"ready\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaControlDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-control',\n                    standalone: false,\n                }]\n        }], propDecorators: { type: [{\n                type: Input\n            }], parameters: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtY29udHJvbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2xpYi9jb21wb25lbnRzL3lhLWNvbnRyb2wveWEtY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFvQjVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILE1BQU0sT0FBTyxrQkFBa0I7SUFKL0I7UUFLbUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFjaEQ7O1dBRUc7UUFDTyxVQUFLLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO0tBcUMxRjtJQW5DQyxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FDViwwSUFBMEksQ0FDM0ksQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3pGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUV2QixrREFBa0Q7WUFDbEQsSUFBSSxPQUFPLFlBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1RixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBRUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBeERVLGtCQUFrQjtrR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsS0FBSztpQkFDbEI7OEJBV1UsSUFBSTtzQkFBWixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLXJlYWR5LWV2ZW50JztcclxuaW1wb3J0IHsgWWFNYXBDb21wb25lbnQgfSBmcm9tICcuLi95YS1tYXAveWEtbWFwLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVHlwZXMgZm9yIGBZYUNvbnRyb2xEaXJlY3RpdmVbdHlwZV1gIGlucHV0LlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgWWFDb250cm9sVHlwZSA9XHJcbiAgfCAnQnV0dG9uJ1xyXG4gIHwgJ0Z1bGxzY3JlZW5Db250cm9sJ1xyXG4gIHwgJ0dlb2xvY2F0aW9uQ29udHJvbCdcclxuICB8ICdMaXN0Qm94J1xyXG4gIHwgJ0xpc3RCb3hJdGVtJ1xyXG4gIHwgJ1JvdXRlQnV0dG9uJ1xyXG4gIHwgJ1JvdXRlRWRpdG9yJ1xyXG4gIHwgJ1JvdXRlUGFuZWwnXHJcbiAgfCAnUnVsZXJDb250cm9sJ1xyXG4gIHwgJ1NlYXJjaENvbnRyb2wnXHJcbiAgfCAnVHJhZmZpY0NvbnRyb2wnXHJcbiAgfCAnVHlwZVNlbGVjdG9yJ1xyXG4gIHwgJ1pvb21Db250cm9sJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYHlhLWNvbnRyb2xgIGNvbXBvbmVudCB3cmFwcyBgeW1hcHMuY29udHJvbFtZYUNvbnRyb2xUeXBlXWAgY2xhc3NlcyBmcm9tIHRoZSBZYW5kZXguTWFwcyBBUEkuXHJcbiAqIFlvdSBjYW4gY29uZmlndXJlIGB5bWFwcy5jb250cm9sW1lhQ29udHJvbFR5cGVdYCB2aWEgdGhlIGNvbXBvbmVudCdzIGlucHV0cy5cclxuICogQVBJIEV2ZW50cyBjYW4gYmUgYm91bmQgb25seSBtYW51YWxseS4gWW91IGNhbiB1c2UgYHJlYWR5YCBldmVudCB0byBnZXQgYW4gaW5zdGFuY2UuXHJcbiAqXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvc2VhcmNoY29udHJvbD9lbWJlZD0xJnZpZXc9cHJldmlldzwvZXhhbXBsZS11cmw+XHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPHlhLW1hcCBbY2VudGVyXT1cIls1NS43NjE5NTIsIDM3LjYyMDczOV1cIj5cclxuICogICA8eWEtY29udHJvbFxyXG4gKiAgICAgdHlwZT1cIlJvdXRlUGFuZWxcIlxyXG4gKiAgICAgW3BhcmFtZXRlcnNdPVwieyBvcHRpb25zOiB7IGZsb2F0OiAncmlnaHQnIH0gfVwiXHJcbiAqICAgPjwveWEtY29udHJvbD5cclxuICogPC95YS1tYXA+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICd5YS1jb250cm9sJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFlhQ29udHJvbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgeWFNYXBDb21wb25lbnQgPSBpbmplY3QoWWFNYXBDb21wb25lbnQpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBjb250cm9sPzogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sIHR5cGUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdHlwZT86IFlhQ29udHJvbFR5cGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2wgcGFyYW1ldGVycy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwYXJhbWV0ZXJzPzogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBDb250cm9sIGluc3RhbmNlIGlzIGFkZGVkIHRvIGEgTWFwLiBUaGlzIGV2ZW50IHJ1bnMgb3V0c2lkZSBhbiBBbmd1bGFyIHpvbmUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHJlYWR5OiBFdmVudEVtaXR0ZXI8WWFSZWFkeUV2ZW50PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8YW55Pj4oKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnQ29udHJvbCBkb2VzIG5vdCBzdXBwb3J0IGR5bmFtaWMgY29uZmlndXJhdGlvbi4gWW91IGNhbiBjb25maWcgaXQgbWFudWFsbHkgdXNpbmcgeW1hcHMgb3IgcmVjcmVhdGUgdGhlIGNvbXBvbmVudCB3aXRoIG5ldyBjb25maWd1cmF0aW9uLicsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMueWFNYXBDb21wb25lbnQubWFwJC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG1hcCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudHlwZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigneW1hcHMuY29udHJvbFt0eXBlXSBpcyBpbnZhbGlkLicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb250cm9sID0gbmV3IHltYXBzLmNvbnRyb2xbdGhpcy50eXBlXSh0aGlzLnBhcmFtZXRlcnMpO1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBjb250cm9sO1xyXG5cclxuICAgICAgLy8gUm91dGVQYW5lbCBpZ25vcmVzIHN0YXRlIGluIHBhcmFtZXRlcnMuIEFQSSBidWdcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiB5bWFwcy5jb250cm9sLlJvdXRlUGFuZWwgJiYgdGhpcy5wYXJhbWV0ZXJzICYmIHRoaXMucGFyYW1ldGVycy5zdGF0ZSkge1xyXG4gICAgICAgIGNvbnRyb2wucm91dGVQYW5lbC5zdGF0ZS5zZXQoeyAuLi50aGlzLnBhcmFtZXRlcnMuc3RhdGUgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1hcC5jb250cm9scy5hZGQoY29udHJvbCk7XHJcbiAgICAgIHRoaXMucmVhZHkuZW1pdCh7IHltYXBzLCB0YXJnZXQ6IGNvbnRyb2wgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICB0aGlzLnlhTWFwQ29tcG9uZW50Py5tYXAkLnZhbHVlPy5jb250cm9scy5yZW1vdmUodGhpcy5jb250cm9sKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19","import { Directive, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-multiroute` component wraps `ymaps.multiRouter.MultiRoute` class from the Yandex.Maps API.\n * You can configure it via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * ```html\n * <ya-map [center]=\"[55.761952, 37.620739]\">\n *   <ya-multiroute\n *     [referencePoints]=\"[[55.751952, 37.600739], 'Красные ворота, Москва']\"\n *     [models]=\"{ params: { routingMode: 'pedestrian' } }\"\n *   ></ya-multiroute>\n * </ya-map>\n * ```\n */\nexport class YaMultirouteDirective {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * Multi-route reference points.\n         * Shorthand for `[models]=\"{ referencePoints: [0, 0] }\"`.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IMultiRouteReferencePoint.html}\n         */\n        this.referencePoints = [];\n        /**\n         * Multi-route instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * Change to the active route.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-activeroutechange}\n         */\n        this.activeroutechange = this.eventManager.getLazyEmitter('activeroutechange');\n        /**\n         * Closing the balloon.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-balloonclose}\n         */\n        this.balloonclose = this.eventManager.getLazyEmitter('balloonclose');\n        /**\n         * Opening the balloon.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-balloonopen}\n         */\n        this.balloonopen = this.eventManager.getLazyEmitter('balloonopen');\n        /**\n         * The event occurs at the time of setting the map center and its zoom level for optimal display of the multi-route.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-boundsautoapply}\n         */\n        this.boundsautoapply = this.eventManager.getLazyEmitter('boundsautoapply');\n        /**\n         * Changing coordinates of the geographical area covering the multi-route.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-boundschange}\n         */\n        this.boundschange = this.eventManager.getLazyEmitter('boundschange');\n        /**\n         * Single left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-click}\n         */\n        this.yaclick = this.eventManager.getLazyEmitter('click');\n        /**\n         * Calls the element's context menu.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-contextmenu}\n         */\n        this.yacontextmenu = this.eventManager.getLazyEmitter('contextmenu');\n        /**\n         * Double left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-dblclick}\n         */\n        this.yadblclick = this.eventManager.getLazyEmitter('dblclick');\n        /**\n         * Change to the geo object geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-geometrychange}\n         */\n        this.geometrychange = this.eventManager.getLazyEmitter('geometrychange');\n        /**\n         * Map reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IParentOnMap.html#event_detail__event-mapchange}\n         */\n        this.mapchange = this.eventManager.getLazyEmitter('mapchange');\n        /**\n         * Pressing the mouse button over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousedown}\n         */\n        this.yamousedown = this.eventManager.getLazyEmitter('mousedown');\n        /**\n         * Pointing the cursor at the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseenter}\n         */\n        this.yamouseenter = this.eventManager.getLazyEmitter('mouseenter');\n        /**\n         * Moving the cursor off of the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseleave}\n         */\n        this.yamouseleave = this.eventManager.getLazyEmitter('mouseleave');\n        /**\n         * Moving the cursor over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousemove}\n         */\n        this.yamousemove = this.eventManager.getLazyEmitter('mousemove');\n        /**\n         * Letting go of the mouse button over an object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseup}\n         */\n        this.yamouseup = this.eventManager.getLazyEmitter('mouseup');\n        /**\n         * End of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchend}\n         */\n        this.multitouchend = this.eventManager.getLazyEmitter('multitouchend');\n        /**\n         * Repeating event during multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchmove}\n         */\n        this.multitouchmove = this.eventManager.getLazyEmitter('multitouchmove');\n        /**\n         * Start of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchstart}\n         */\n        this.multitouchstart = this.eventManager.getLazyEmitter('multitouchstart');\n        /**\n         * Change to the object options.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/ICustomizable.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * Change to the geo object overlay.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-overlaychange}\n         */\n        this.overlaychange = this.eventManager.getLazyEmitter('overlaychange');\n        /**\n         * The parent object reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IChild.html#event_detail__event-parentchange}\n         */\n        this.parentchange = this.eventManager.getLazyEmitter('parentchange');\n        /**\n         * Changing pixel coordinates of the area covering the multi-route.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-pixelboundschange}\n         */\n        this.pixelboundschange = this.eventManager.getLazyEmitter('pixelboundschange');\n        /**\n         * Change to the geo object data.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-propertieschange}\n         */\n        this.propertieschange = this.eventManager.getLazyEmitter('propertieschange');\n        /**\n         * Updating the multi-route.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/multiRouter.MultiRoute.html#event_detail__event-update}\n         */\n        this.update = this.eventManager.getLazyEmitter('update');\n        /**\n         * Mouse wheel scrolling.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-wheel}\n         */\n        this.yawheel = this.eventManager.getLazyEmitter('wheel');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { multiroute } = this;\n            if (multiroute) {\n                const { referencePoints, model, options } = changes;\n                if (model) {\n                    this.setModel(model.currentValue, multiroute);\n                }\n                if (referencePoints) {\n                    multiroute.model.setReferencePoints(referencePoints.currentValue);\n                }\n                if (options) {\n                    multiroute.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            const multiroute = this.createMultiroute();\n            this.multiroute = multiroute;\n            map.geoObjects.add(multiroute);\n            this.eventManager.setTarget(multiroute);\n            this.ready.emit({ ymaps, target: multiroute });\n        });\n    }\n    ngOnDestroy() {\n        if (this.multiroute) {\n            this.yaMapComponent?.map$.value?.geoObjects.remove(this.multiroute);\n            this.eventManager.destroy();\n        }\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Destructs state and passes them in API.\n     * @param model\n     * @param multiroute\n     */\n    setModel(model, multiroute) {\n        const { referencePoints, params } = model;\n        if (referencePoints) {\n            multiroute.model.setReferencePoints(referencePoints);\n        }\n        if (params) {\n            multiroute.model.setParams(params);\n        }\n    }\n    /**\n     * Creates Multiroute.\n     */\n    createMultiroute() {\n        return new ymaps.multiRouter.MultiRoute(this.combineModel(), this.options);\n    }\n    /**\n     * Combines the models and reference points into single object\n     */\n    combineModel() {\n        const model = (this.model || {});\n        return {\n            ...model,\n            referencePoints: this.referencePoints || model.referencePoints,\n        };\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaMultirouteDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaMultirouteDirective, isStandalone: false, selector: \"ya-multiroute\", inputs: { referencePoints: \"referencePoints\", model: \"model\", options: \"options\" }, outputs: { ready: \"ready\", activeroutechange: \"activeroutechange\", balloonclose: \"balloonclose\", balloonopen: \"balloonopen\", boundsautoapply: \"boundsautoapply\", boundschange: \"boundschange\", yaclick: \"yaclick\", yacontextmenu: \"yacontextmenu\", yadblclick: \"yadblclick\", geometrychange: \"geometrychange\", mapchange: \"mapchange\", yamousedown: \"yamousedown\", yamouseenter: \"yamouseenter\", yamouseleave: \"yamouseleave\", yamousemove: \"yamousemove\", yamouseup: \"yamouseup\", multitouchend: \"multitouchend\", multitouchmove: \"multitouchmove\", multitouchstart: \"multitouchstart\", optionschange: \"optionschange\", overlaychange: \"overlaychange\", parentchange: \"parentchange\", pixelboundschange: \"pixelboundschange\", propertieschange: \"propertieschange\", update: \"update\", yawheel: \"yawheel\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaMultirouteDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-multiroute',\n                    standalone: false,\n                }]\n        }], propDecorators: { referencePoints: [{\n                type: Input\n            }], model: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], activeroutechange: [{\n                type: Output\n            }], balloonclose: [{\n                type: Output\n            }], balloonopen: [{\n                type: Output\n            }], boundsautoapply: [{\n                type: Output\n            }], boundschange: [{\n                type: Output\n            }], yaclick: [{\n                type: Output\n            }], yacontextmenu: [{\n                type: Output\n            }], yadblclick: [{\n                type: Output\n            }], geometrychange: [{\n                type: Output\n            }], mapchange: [{\n                type: Output\n            }], yamousedown: [{\n                type: Output\n            }], yamouseenter: [{\n                type: Output\n            }], yamouseleave: [{\n                type: Output\n            }], yamousemove: [{\n                type: Output\n            }], yamouseup: [{\n                type: Output\n            }], multitouchend: [{\n                type: Output\n            }], multitouchmove: [{\n                type: Output\n            }], multitouchstart: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], overlaychange: [{\n                type: Output\n            }], parentchange: [{\n                type: Output\n            }], pixelboundschange: [{\n                type: Output\n            }], propertieschange: [{\n                type: Output\n            }], update: [{\n                type: Output\n            }], yawheel: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtbXVsdGlyb3V0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2xpYi9jb21wb25lbnRzL3lhLW11bHRpcm91dGUveWEtbXVsdGlyb3V0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFPNUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUFKbEM7UUFLbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV4QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvQixpQkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUk5RDs7OztXQUlHO1FBQ00sb0JBQWUsR0FBc0MsRUFBRSxDQUFDO1FBZ0JqRTs7V0FFRztRQUNPLFVBQUssR0FBNkQsSUFBSSxZQUFZLEVBRXpGLENBQUM7UUFFSjs7O1dBR0c7UUFDTyxzQkFBaUIsR0FDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RDs7O1dBR0c7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aXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBZYUV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy95YS1ldmVudCc7XHJcbmltcG9ydCB7IFlhUmVhZHlFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtcmVhZHktZXZlbnQnO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9ldmVudC1tYW5hZ2VyL2V2ZW50LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBZYU1hcENvbXBvbmVudCB9IGZyb20gJy4uL3lhLW1hcC95YS1tYXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgT3B0aW9uYWw8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gUGljazxQYXJ0aWFsPFQ+LCBLPiAmIE9taXQ8VCwgSz47XHJcblxyXG4vKipcclxuICogVGhlIGB5YS1tdWx0aXJvdXRlYCBjb21wb25lbnQgd3JhcHMgYHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGVgIGNsYXNzIGZyb20gdGhlIFlhbmRleC5NYXBzIEFQSS5cclxuICogWW91IGNhbiBjb25maWd1cmUgaXQgdmlhIHRoZSBjb21wb25lbnQncyBpbnB1dHMuXHJcbiAqIEV2ZW50cyBjYW4gYmUgYm91bmQgdXNpbmcgdGhlIG91dHB1dHMgb2YgdGhlIGNvbXBvbmVudC5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8eWEtbWFwIFtjZW50ZXJdPVwiWzU1Ljc2MTk1MiwgMzcuNjIwNzM5XVwiPlxyXG4gKiAgIDx5YS1tdWx0aXJvdXRlXHJcbiAqICAgICBbcmVmZXJlbmNlUG9pbnRzXT1cIltbNTUuNzUxOTUyLCAzNy42MDA3MzldLCAn0JrRgNCw0YHQvdGL0LUg0LLQvtGA0L7RgtCwLCDQnNC+0YHQutCy0LAnXVwiXHJcbiAqICAgICBbbW9kZWxzXT1cInsgcGFyYW1zOiB7IHJvdXRpbmdNb2RlOiAncGVkZXN0cmlhbicgfSB9XCJcclxuICogICA+PC95YS1tdWx0aXJvdXRlPlxyXG4gKiA8L3lhLW1hcD5cclxuICogYGBgXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ3lhLW11bHRpcm91dGUnLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWWFNdWx0aXJvdXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHlhTWFwQ29tcG9uZW50ID0gaW5qZWN0KFlhTWFwQ29tcG9uZW50KTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRNYW5hZ2VyID0gbmV3IEV2ZW50TWFuYWdlcih0aGlzLm5nWm9uZSk7XHJcblxyXG4gIHByaXZhdGUgbXVsdGlyb3V0ZT86IHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE11bHRpLXJvdXRlIHJlZmVyZW5jZSBwb2ludHMuXHJcbiAgICogU2hvcnRoYW5kIGZvciBgW21vZGVsc109XCJ7IHJlZmVyZW5jZVBvaW50czogWzAsIDBdIH1cImAuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSU11bHRpUm91dGVSZWZlcmVuY2VQb2ludC5odG1sfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJlZmVyZW5jZVBvaW50czogeW1hcHMuSU11bHRpUm91dGVSZWZlcmVuY2VQb2ludFtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkYXRhIG1vZGVsIG9mIGEgbXVsdGktcm91dGUsIG9yIHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvbXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZS5odG1sI211bHRpUm91dGVyLk11bHRpUm91dGVfX3BhcmFtLW1vZGVsfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1vZGVsPzpcclxuICAgIHwgeW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZU1vZGVsXHJcbiAgICB8IE9wdGlvbmFsPHltYXBzLklNdWx0aVJvdXRlTW9kZWxKc29uLCAncmVmZXJlbmNlUG9pbnRzJz47XHJcblxyXG4gIC8qKlxyXG4gICAqIE11bHRpLXJvdXRlIG9wdGlvbnMuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvbXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZS5odG1sI211bHRpUm91dGVyLk11bHRpUm91dGVfX3BhcmFtLW9wdGlvbnN9XHJcbiAgICovXHJcbiAgQElucHV0KCkgb3B0aW9ucz86IHltYXBzLm11bHRpUm91dGVyLklNdWx0aVJvdXRlT3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogTXVsdGktcm91dGUgaW5zdGFuY2UgaXMgYWRkZWQgdG8gYSBNYXAuIFRoaXMgZXZlbnQgcnVucyBvdXRzaWRlIGFuIEFuZ3VsYXIgem9uZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcmVhZHk6IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIFlhUmVhZHlFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPlxyXG4gID4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBhY3RpdmUgcm91dGUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvbXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZS5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYWN0aXZlcm91dGVjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGFjdGl2ZXJvdXRlY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdhY3RpdmVyb3V0ZWNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBDbG9zaW5nIHRoZSBiYWxsb29uLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL211bHRpUm91dGVyLk11bHRpUm91dGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWJhbGxvb25jbG9zZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYmFsbG9vbmNsb3NlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdiYWxsb29uY2xvc2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbmluZyB0aGUgYmFsbG9vbi5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9tdWx0aVJvdXRlci5NdWx0aVJvdXRlLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1iYWxsb29ub3Blbn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYmFsbG9vbm9wZW46IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JhbGxvb25vcGVuJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBldmVudCBvY2N1cnMgYXQgdGhlIHRpbWUgb2Ygc2V0dGluZyB0aGUgbWFwIGNlbnRlciBhbmQgaXRzIHpvb20gbGV2ZWwgZm9yIG9wdGltYWwgZGlzcGxheSBvZiB0aGUgbXVsdGktcm91dGUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvbXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZS5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtYm91bmRzYXV0b2FwcGx5fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBib3VuZHNhdXRvYXBwbHk6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2JvdW5kc2F1dG9hcHBseScpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2luZyBjb29yZGluYXRlcyBvZiB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgY292ZXJpbmcgdGhlIG11bHRpLXJvdXRlLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL211bHRpUm91dGVyLk11bHRpUm91dGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWJvdW5kc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYm91bmRzY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdib3VuZHNjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2luZ2xlIGxlZnQtY2xpY2sgb24gdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1jbGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFjbGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY2xpY2snKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgdGhlIGVsZW1lbnQncyBjb250ZXh0IG1lbnUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY29udGV4dG1lbnV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY29udGV4dG1lbnU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2NvbnRleHRtZW51Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERvdWJsZSBsZWZ0LWNsaWNrIG9uIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZGJsY2xpY2t9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhZGJsY2xpY2s6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2RibGNsaWNrJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSB0byB0aGUgZ2VvIG9iamVjdCBnZW9tZXRyeS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1nZW9tZXRyeWNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZ2VvbWV0cnljaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2dlb21ldHJ5Y2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JUGFyZW50T25NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFwY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtYXBjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlc3NpbmcgdGhlIG1vdXNlIGJ1dHRvbiBvdmVyIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2Vkb3dufVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNlZG93bjogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2Vkb3duJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvaW50aW5nIHRoZSBjdXJzb3IgYXQgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZWVudGVyfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNlZW50ZXI6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZW50ZXInKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb2ZmIG9mIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VsZWF2ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWxlYXZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZWxlYXZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmluZyB0aGUgY3Vyc29yIG92ZXIgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZW1vdmV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2Vtb3ZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZW1vdmUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTGV0dGluZyBnbyBvZiB0aGUgbW91c2UgYnV0dG9uIG92ZXIgYW4gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNldXB9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2V1cDogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2V1cCcpO1xyXG5cclxuICAvKipcclxuICAgKiBFbmQgb2YgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNoZW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtdWx0aXRvdWNoZW5kJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcGVhdGluZyBldmVudCBkdXJpbmcgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNobW92ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbXVsdGl0b3VjaG1vdmU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2htb3ZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IG9mIG11bHRpdG91Y2guXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbXVsdGl0b3VjaHN0YXJ0fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hzdGFydCcpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lDdXN0b21pemFibGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW9wdGlvbnNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9wdGlvbnNjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ29wdGlvbnNjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IG92ZXJsYXkuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtb3ZlcmxheWNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb3ZlcmxheWNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignb3ZlcmxheWNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcGFyZW50IG9iamVjdCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JQ2hpbGQuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LXBhcmVudGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcGFyZW50Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZT4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwYXJlbnRjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdpbmcgcGl4ZWwgY29vcmRpbmF0ZXMgb2YgdGhlIGFyZWEgY292ZXJpbmcgdGhlIG11bHRpLXJvdXRlLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL211bHRpUm91dGVyLk11bHRpUm91dGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LXBpeGVsYm91bmRzY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwaXhlbGJvdW5kc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcigncGl4ZWxib3VuZHNjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IGRhdGEuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtcHJvcGVydGllc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHJvcGVydGllc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGU+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcigncHJvcGVydGllc2NoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGluZyB0aGUgbXVsdGktcm91dGUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvbXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZS5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtdXBkYXRlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB1cGRhdGU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3VwZGF0ZScpO1xyXG5cclxuICAvKipcclxuICAgKiBNb3VzZSB3aGVlbCBzY3JvbGxpbmcuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtd2hlZWx9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhd2hlZWw6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3doZWVsJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgaW5wdXQgY2hhbmdlcyBhbmQgcGFzc2VzIHRoZW0gaW4gQVBJLlxyXG4gICAqIEBwYXJhbSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gSXQgbXVzdCBiZSBydW4gb3V0c2lkZSBhIHpvbmU7IG90aGVyd2lzZSwgYWxsIGFzeW5jIGV2ZW50cyB3aXRoaW4gdGhpcyBjYWxsIHdpbGwgY2F1c2UgdGlja3MuXHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgbXVsdGlyb3V0ZSB9ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChtdWx0aXJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VQb2ludHMsIG1vZGVsLCBvcHRpb25zIH0gPSBjaGFuZ2VzO1xyXG5cclxuICAgICAgICBpZiAobW9kZWwpIHtcclxuICAgICAgICAgIHRoaXMuc2V0TW9kZWwobW9kZWwuY3VycmVudFZhbHVlLCBtdWx0aXJvdXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWZlcmVuY2VQb2ludHMpIHtcclxuICAgICAgICAgIG11bHRpcm91dGUubW9kZWwuc2V0UmVmZXJlbmNlUG9pbnRzKHJlZmVyZW5jZVBvaW50cy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgIG11bHRpcm91dGUub3B0aW9ucy5zZXQob3B0aW9ucy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMueWFNYXBDb21wb25lbnQubWFwJC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG1hcCkgPT4ge1xyXG4gICAgICBjb25zdCBtdWx0aXJvdXRlID0gdGhpcy5jcmVhdGVNdWx0aXJvdXRlKCk7XHJcbiAgICAgIHRoaXMubXVsdGlyb3V0ZSA9IG11bHRpcm91dGU7XHJcblxyXG4gICAgICBtYXAuZ2VvT2JqZWN0cy5hZGQobXVsdGlyb3V0ZSk7XHJcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnNldFRhcmdldChtdWx0aXJvdXRlKTtcclxuICAgICAgdGhpcy5yZWFkeS5lbWl0KHsgeW1hcHMsIHRhcmdldDogbXVsdGlyb3V0ZSB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXJvdXRlKSB7XHJcbiAgICAgIHRoaXMueWFNYXBDb21wb25lbnQ/Lm1hcCQudmFsdWU/Lmdlb09iamVjdHMucmVtb3ZlKHRoaXMubXVsdGlyb3V0ZSk7XHJcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3RydWN0cyBzdGF0ZSBhbmQgcGFzc2VzIHRoZW0gaW4gQVBJLlxyXG4gICAqIEBwYXJhbSBtb2RlbFxyXG4gICAqIEBwYXJhbSBtdWx0aXJvdXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRNb2RlbChcclxuICAgIG1vZGVsOiB5bWFwcy5JTXVsdGlSb3V0ZU1vZGVsSnNvbixcclxuICAgIG11bHRpcm91dGU6IHltYXBzLm11bHRpUm91dGVyLk11bHRpUm91dGUsXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHJlZmVyZW5jZVBvaW50cywgcGFyYW1zIH0gPSBtb2RlbDtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlUG9pbnRzKSB7XHJcbiAgICAgIG11bHRpcm91dGUubW9kZWwuc2V0UmVmZXJlbmNlUG9pbnRzKHJlZmVyZW5jZVBvaW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcykge1xyXG4gICAgICBtdWx0aXJvdXRlLm1vZGVsLnNldFBhcmFtcyhwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBNdWx0aXJvdXRlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlTXVsdGlyb3V0ZSgpOiB5bWFwcy5tdWx0aVJvdXRlci5NdWx0aVJvdXRlIHtcclxuICAgIHJldHVybiBuZXcgeW1hcHMubXVsdGlSb3V0ZXIuTXVsdGlSb3V0ZSh0aGlzLmNvbWJpbmVNb2RlbCgpLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tYmluZXMgdGhlIG1vZGVscyBhbmQgcmVmZXJlbmNlIHBvaW50cyBpbnRvIHNpbmdsZSBvYmplY3RcclxuICAgKi9cclxuICBwcml2YXRlIGNvbWJpbmVNb2RlbCgpOiB5bWFwcy5JTXVsdGlSb3V0ZU1vZGVsSnNvbiB7XHJcbiAgICBjb25zdCBtb2RlbCA9ICh0aGlzLm1vZGVsIHx8IHt9KSBhcyB5bWFwcy5JTXVsdGlSb3V0ZU1vZGVsSnNvbjtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5tb2RlbCxcclxuICAgICAgcmVmZXJlbmNlUG9pbnRzOiB0aGlzLnJlZmVyZW5jZVBvaW50cyB8fCBtb2RlbC5yZWZlcmVuY2VQb2ludHMsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=","import { Directive, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-object-manager` component wraps `ymaps.ObjectManager` class from the Yandex.Maps API.\n * You can configure it via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * <example-url>https://stackblitz.com/edit/object-manager?embed=1&view=preview</example-url>\n *\n * ```html\n * <ya-map [center]=\"[55.761952, 37.620739]\">\n *   <ya-object-manager\n *     [options]=\"{ clusterize: true }\"\n *     (ready)=\"onReady($event)\"\n *   ></ya-object-manager>\n * </ya-map>\n * ```\n */\nexport class YaObjectManagerDirective {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * ObjectManager instance is added to a Map. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * Single left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-click}\n         */\n        this.yaclick = this.eventManager.getLazyEmitter('click');\n        /**\n         * Calls the element's context menu.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-contextmenu}\n         */\n        this.yacontextmenu = this.eventManager.getLazyEmitter('contextmenu');\n        /**\n         * Double left-click on the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-dblclick}\n         */\n        this.yadblclick = this.eventManager.getLazyEmitter('dblclick');\n        /**\n         * Change to the geo object geometry.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-geometrychange}\n         */\n        this.geometrychange = this.eventManager.getLazyEmitter('geometrychange');\n        /**\n         * Map reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IParentOnMap.html#event_detail__event-mapchange}\n         */\n        this.mapchange = this.eventManager.getLazyEmitter('mapchange');\n        /**\n         * Pressing the mouse button over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousedown}\n         */\n        this.yamousedown = this.eventManager.getLazyEmitter('mousedown');\n        /**\n         * Pointing the cursor at the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseenter}\n         */\n        this.yamouseenter = this.eventManager.getLazyEmitter('mouseenter');\n        /**\n         * Moving the cursor off of the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseleave}\n         */\n        this.yamouseleave = this.eventManager.getLazyEmitter('mouseleave');\n        /**\n         * Moving the cursor over the object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mousemove}\n         */\n        this.yamousemove = this.eventManager.getLazyEmitter('mousemove');\n        /**\n         * Letting go of the mouse button over an object.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-mouseup}\n         */\n        this.yamouseup = this.eventManager.getLazyEmitter('mouseup');\n        /**\n         * End of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchend}\n         */\n        this.multitouchend = this.eventManager.getLazyEmitter('multitouchend');\n        /**\n         * Repeating event during multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchmove}\n         */\n        this.multitouchmove = this.eventManager.getLazyEmitter('multitouchmove');\n        /**\n         * Start of multitouch.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-multitouchstart}\n         */\n        this.multitouchstart = this.eventManager.getLazyEmitter('multitouchstart');\n        /**\n         * Change to the object options.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/ICustomizable.html#event_detail__event-optionschange}\n         */\n        this.optionschange = this.eventManager.getLazyEmitter('optionschange');\n        /**\n         * Change to the geo object overlay.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-overlaychange}\n         */\n        this.overlaychange = this.eventManager.getLazyEmitter('overlaychange');\n        /**\n         * The parent object reference changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IChild.html#event_detail__event-parentchange}\n         */\n        this.parentchange = this.eventManager.getLazyEmitter('parentchange');\n        /**\n         * Change to the geo object data.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IGeoObject.html#event_detail__event-propertieschange}\n         */\n        this.propertieschange = this.eventManager.getLazyEmitter('propertieschange');\n        /**\n         * Mouse wheel scrolling.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/IDomEventEmitter.html#event_detail__event-wheel}\n         */\n        this.yawheel = this.eventManager.getLazyEmitter('wheel');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { objectManager } = this;\n            if (objectManager) {\n                const { options } = changes;\n                if (options) {\n                    objectManager.options.set(options.currentValue);\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        this.yaMapComponent.map$.pipe(filter(Boolean), takeUntil(this.destroy$)).subscribe((map) => {\n            const objectManager = this.createObjectManager();\n            this.objectManager = objectManager;\n            map.geoObjects.add(objectManager);\n            this.eventManager.setTarget(objectManager);\n            this.ready.emit({ ymaps, target: objectManager });\n        });\n    }\n    ngOnDestroy() {\n        if (this.objectManager) {\n            this.yaMapComponent?.map$.value?.geoObjects.remove(this.objectManager);\n            this.eventManager.destroy();\n        }\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Creates ObjectManager.\n     */\n    createObjectManager() {\n        if (!this.options) {\n            throw new Error('ObjectManager options are undefined.');\n        }\n        return new ymaps.ObjectManager(this.options);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaObjectManagerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaObjectManagerDirective, isStandalone: false, selector: \"ya-object-manager\", inputs: { options: \"options\" }, outputs: { ready: \"ready\", yaclick: \"yaclick\", yacontextmenu: \"yacontextmenu\", yadblclick: \"yadblclick\", geometrychange: \"geometrychange\", mapchange: \"mapchange\", yamousedown: \"yamousedown\", yamouseenter: \"yamouseenter\", yamouseleave: \"yamouseleave\", yamousemove: \"yamousemove\", yamouseup: \"yamouseup\", multitouchend: \"multitouchend\", multitouchmove: \"multitouchmove\", multitouchstart: \"multitouchstart\", optionschange: \"optionschange\", overlaychange: \"overlaychange\", parentchange: \"parentchange\", propertieschange: \"propertieschange\", yawheel: \"yawheel\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaObjectManagerDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-object-manager',\n                    standalone: false,\n                }]\n        }], propDecorators: { options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], yaclick: [{\n                type: Output\n            }], yacontextmenu: [{\n                type: Output\n            }], yadblclick: [{\n                type: Output\n            }], geometrychange: [{\n                type: Output\n            }], mapchange: [{\n                type: Output\n            }], yamousedown: [{\n                type: Output\n            }], yamouseenter: [{\n                type: Output\n            }], yamouseleave: [{\n                type: Output\n            }], yamousemove: [{\n                type: Output\n            }], yamouseup: [{\n                type: Output\n            }], multitouchend: [{\n                type: Output\n            }], multitouchmove: [{\n                type: Output\n            }], multitouchstart: [{\n                type: Output\n            }], optionschange: [{\n                type: Output\n            }], overlaychange: [{\n                type: Output\n            }], parentchange: [{\n                type: Output\n            }], propertieschange: [{\n                type: Output\n            }], yawheel: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtb2JqZWN0LW1hbmFnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXlhbmRleC1tYXBzLXYyL3NyYy9saWIvY29tcG9uZW50cy95YS1vYmplY3QtbWFuYWdlci95YS1vYmplY3QtbWFuYWdlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBS0gsTUFBTSxPQUFPLHdCQUF3QjtJQUpyQztRQUttQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRS9CLGlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBVTlEOztXQUVHO1FBQ08sVUFBSyxHQUFvRCxJQUFJLFlBQVksRUFFaEYsQ0FBQztRQUVKOzs7V0FHRztRQUNPLFlBQU8sR0FDZixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1Qzs7O1dBR0c7UUFDTyxrQkFBYSxHQUNyQixJQUFJLENBQUMsWUFBWSxD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QUFNO2dCQU9HLFVBQVU7c0JBQW5CLE1BQU07Z0JBT0csY0FBYztzQkFBdkIsTUFBTTtnQkFPRyxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxZQUFZO3NCQUFyQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBT0csU0FBUztzQkFBbEIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csZUFBZTtzQkFBeEIsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLGFBQWE7c0JBQXRCLE1BQU07Z0JBT0csWUFBWTtzQkFBckIsTUFBTTtnQkFPRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgWWFFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtZXZlbnQnO1xyXG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLXJlYWR5LWV2ZW50JztcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXZlbnQtbWFuYWdlci9ldmVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgWWFNYXBDb21wb25lbnQgfSBmcm9tICcuLi95YS1tYXAveWEtbWFwLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVGhlIGB5YS1vYmplY3QtbWFuYWdlcmAgY29tcG9uZW50IHdyYXBzIGB5bWFwcy5PYmplY3RNYW5hZ2VyYCBjbGFzcyBmcm9tIHRoZSBZYW5kZXguTWFwcyBBUEkuXHJcbiAqIFlvdSBjYW4gY29uZmlndXJlIGl0IHZpYSB0aGUgY29tcG9uZW50J3MgaW5wdXRzLlxyXG4gKiBFdmVudHMgY2FuIGJlIGJvdW5kIHVzaW5nIHRoZSBvdXRwdXRzIG9mIHRoZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIDxleGFtcGxlLXVybD5odHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvb2JqZWN0LW1hbmFnZXI/ZW1iZWQ9MSZ2aWV3PXByZXZpZXc8L2V4YW1wbGUtdXJsPlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDx5YS1tYXAgW2NlbnRlcl09XCJbNTUuNzYxOTUyLCAzNy42MjA3MzldXCI+XHJcbiAqICAgPHlhLW9iamVjdC1tYW5hZ2VyXHJcbiAqICAgICBbb3B0aW9uc109XCJ7IGNsdXN0ZXJpemU6IHRydWUgfVwiXHJcbiAqICAgICAocmVhZHkpPVwib25SZWFkeSgkZXZlbnQpXCJcclxuICogICA+PC95YS1vYmplY3QtbWFuYWdlcj5cclxuICogPC95YS1tYXA+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICd5YS1vYmplY3QtbWFuYWdlcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZYU9iamVjdE1hbmFnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgeWFNYXBDb21wb25lbnQgPSBpbmplY3QoWWFNYXBDb21wb25lbnQpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE1hbmFnZXIgPSBuZXcgRXZlbnRNYW5hZ2VyKHRoaXMubmdab25lKTtcclxuXHJcbiAgcHJpdmF0ZSBvYmplY3RNYW5hZ2VyPzogeW1hcHMuT2JqZWN0TWFuYWdlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JqZWN0TWFuYWdlciBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL09iamVjdE1hbmFnZXIuaHRtbCNPYmplY3RNYW5hZ2VyX19wYXJhbS1vcHRpb25zfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM/OiB5bWFwcy5JT2JqZWN0TWFuYWdlck9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9iamVjdE1hbmFnZXIgaW5zdGFuY2UgaXMgYWRkZWQgdG8gYSBNYXAuIFRoaXMgZXZlbnQgcnVucyBvdXRzaWRlIGFuIEFuZ3VsYXIgem9uZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcmVhZHk6IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIFlhUmVhZHlFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPlxyXG4gID4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2luZ2xlIGxlZnQtY2xpY2sgb24gdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1jbGlja31cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFjbGljazogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk9iamVjdE1hbmFnZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignY2xpY2snKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbHMgdGhlIGVsZW1lbnQncyBjb250ZXh0IG1lbnUuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtY29udGV4dG1lbnV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhY29udGV4dG1lbnU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2NvbnRleHRtZW51Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERvdWJsZSBsZWZ0LWNsaWNrIG9uIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZGJsY2xpY2t9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhZGJsY2xpY2s6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2RibGNsaWNrJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSB0byB0aGUgZ2VvIG9iamVjdCBnZW9tZXRyeS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JR2VvT2JqZWN0Lmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1nZW9tZXRyeWNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZ2VvbWV0cnljaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2dlb21ldHJ5Y2hhbmdlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JUGFyZW50T25NYXAuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFwY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtYXBjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlc3NpbmcgdGhlIG1vdXNlIGJ1dHRvbiBvdmVyIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2Vkb3dufVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNlZG93bjogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk9iamVjdE1hbmFnZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2Vkb3duJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBvaW50aW5nIHRoZSBjdXJzb3IgYXQgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZWVudGVyfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YW1vdXNlZW50ZXI6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21vdXNlZW50ZXInKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTW92aW5nIHRoZSBjdXJzb3Igb2ZmIG9mIHRoZSBvYmplY3QuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbW91c2VsZWF2ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgeWFtb3VzZWxlYXZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZWxlYXZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1vdmluZyB0aGUgY3Vyc29yIG92ZXIgdGhlIG9iamVjdC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tb3VzZW1vdmV9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2Vtb3ZlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtb3VzZW1vdmUnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTGV0dGluZyBnbyBvZiB0aGUgbW91c2UgYnV0dG9uIG92ZXIgYW4gb2JqZWN0LlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lEb21FdmVudEVtaXR0ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1vdXNldXB9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhbW91c2V1cDogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk9iamVjdE1hbmFnZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbW91c2V1cCcpO1xyXG5cclxuICAvKipcclxuICAgKiBFbmQgb2YgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNoZW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoZW5kOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtdWx0aXRvdWNoZW5kJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcGVhdGluZyBldmVudCBkdXJpbmcgbXVsdGl0b3VjaC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JRG9tRXZlbnRFbWl0dGVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1tdWx0aXRvdWNobW92ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbXVsdGl0b3VjaG1vdmU6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2htb3ZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IG9mIG11bHRpdG91Y2guXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbXVsdGl0b3VjaHN0YXJ0fVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtdWx0aXRvdWNoc3RhcnQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ211bHRpdG91Y2hzdGFydCcpO1xyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgdG8gdGhlIG9iamVjdCBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL0lDdXN0b21pemFibGUuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW9wdGlvbnNjaGFuZ2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG9wdGlvbnNjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ29wdGlvbnNjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IG92ZXJsYXkuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtb3ZlcmxheWNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgb3ZlcmxheWNoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk9iamVjdE1hbmFnZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignb3ZlcmxheWNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcGFyZW50IG9iamVjdCByZWZlcmVuY2UgY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9JQ2hpbGQuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LXBhcmVudGNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcGFyZW50Y2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMuT2JqZWN0TWFuYWdlcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdwYXJlbnRjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRvIHRoZSBnZW8gb2JqZWN0IGRhdGEuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSUdlb09iamVjdC5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtcHJvcGVydGllc2NoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHJvcGVydGllc2NoYW5nZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLk9iamVjdE1hbmFnZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcigncHJvcGVydGllc2NoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBNb3VzZSB3aGVlbCBzY3JvbGxpbmcuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvSURvbUV2ZW50RW1pdHRlci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtd2hlZWx9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHlhd2hlZWw6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5PYmplY3RNYW5hZ2VyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3doZWVsJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgaW5wdXQgY2hhbmdlcyBhbmQgcGFzc2VzIHRoZW0gaW4gQVBJLlxyXG4gICAqIEBwYXJhbSBjaGFuZ2VzXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8gSXQgbXVzdCBiZSBydW4gb3V0c2lkZSBhIHpvbmU7IG90aGVyd2lzZSwgYWxsIGFzeW5jIGV2ZW50cyB3aXRoaW4gdGhpcyBjYWxsIHdpbGwgY2F1c2UgdGlja3MuXHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgb2JqZWN0TWFuYWdlciB9ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChvYmplY3RNYW5hZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSBjaGFuZ2VzO1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgb2JqZWN0TWFuYWdlci5vcHRpb25zLnNldChvcHRpb25zLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy55YU1hcENvbXBvbmVudC5tYXAkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgobWFwKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iamVjdE1hbmFnZXIgPSB0aGlzLmNyZWF0ZU9iamVjdE1hbmFnZXIoKTtcclxuICAgICAgdGhpcy5vYmplY3RNYW5hZ2VyID0gb2JqZWN0TWFuYWdlcjtcclxuXHJcbiAgICAgIG1hcC5nZW9PYmplY3RzLmFkZChvYmplY3RNYW5hZ2VyKTtcclxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc2V0VGFyZ2V0KG9iamVjdE1hbmFnZXIpO1xyXG4gICAgICB0aGlzLnJlYWR5LmVtaXQoeyB5bWFwcywgdGFyZ2V0OiBvYmplY3RNYW5hZ2VyIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm9iamVjdE1hbmFnZXIpIHtcclxuICAgICAgdGhpcy55YU1hcENvbXBvbmVudD8ubWFwJC52YWx1ZT8uZ2VvT2JqZWN0cy5yZW1vdmUodGhpcy5vYmplY3RNYW5hZ2VyKTtcclxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBPYmplY3RNYW5hZ2VyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlT2JqZWN0TWFuYWdlcigpOiB5bWFwcy5PYmplY3RNYW5hZ2VyIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2JqZWN0TWFuYWdlciBvcHRpb25zIGFyZSB1bmRlZmluZWQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyB5bWFwcy5PYmplY3RNYW5hZ2VyKHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { Directive, EventEmitter, inject, Input, NgZone, Output, } from '@angular/core';\nimport { from, Observable, Subject, takeUntil } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { EventManager } from '../../utils/event-manager/event-manager';\nimport { YaMapComponent } from '../ya-map/ya-map.component';\nimport * as i0 from \"@angular/core\";\n/**\n * The `ya-panorama` component wraps `ymaps.panorama.Player` class from the Yandex.Maps API.\n * You can configure it via the component's inputs.\n * Events can be bound using the outputs of the component.\n *\n * ```html\n * <ya-map>\n *   <ya-panorama [point]=\"[59.938557, 30.316198]\" layer=\"yandex#airPanorama\"></ya-panorama>\n * </ya-map>\n * ```\n */\nexport class YaPanoramaDirective {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaMapComponent = inject(YaMapComponent);\n        this.destroy$ = new Subject();\n        this.eventManager = new EventManager(this.ngZone);\n        /**\n         * The point for searching for nearby panoramas.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.locate.html#panorama.locate__param-point}\n         */\n        this.point = [];\n        /**\n         * Panorama instance is created. This event runs outside an Angular zone.\n         */\n        this.ready = new EventEmitter();\n        /**\n         * The player was closed by the user or destroyed using the panorama.Player.destroy method.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-destroy}\n         */\n        this.destroy = this.eventManager.getLazyEmitter('destroy');\n        /**\n         * The view direction changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-directionchange}\n         */\n        this.directionchange = this.eventManager.getLazyEmitter('directionchange');\n        /**\n         * An error occurred during operation of the player. The user will be shown the appropriate screen.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-error}\n         */\n        this.yaerror = this.eventManager.getLazyEmitter('error');\n        /**\n         * The panorama player switched to full-screen mode.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-fullscreenenter}\n         */\n        this.fullscreenenter = this.eventManager.getLazyEmitter('fullscreenenter');\n        /**\n         * The panorama player exited full-screen mode.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-fullscreenexit}\n         */\n        this.fullscreenexit = this.eventManager.getLazyEmitter('fullscreenexit');\n        /**\n         * The user clicked on an expanded marker.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-markercollapse}\n         */\n        this.markercollapse = this.eventManager.getLazyEmitter('markercollapse');\n        /**\n         * The user clicked on a collapsed marker.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-markerexpand}\n         */\n        this.markerexpand = this.eventManager.getLazyEmitter('markerexpand');\n        /**\n         * The user's cursor hovered over a marker.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-markermouseenter}\n         */\n        this.markermouseenter = this.eventManager.getLazyEmitter('markermouseenter');\n        /**\n         * The user's cursor left a marker.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-markermouseleave}\n         */\n        this.markermouseleave = this.eventManager.getLazyEmitter('markermouseleave');\n        /**\n         * The open panorama changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-panoramachange}\n         */\n        this.panoramachange = this.eventManager.getLazyEmitter('panoramachange');\n        /**\n         * The size of the viewport has been changed.\n         * {@link https://yandex.com/dev/maps/jsapi/doc/2.1/ref/reference/panorama.Player.html#event_detail__event-spanchange}\n         */\n        this.spanchange = this.eventManager.getLazyEmitter('spanchange');\n    }\n    /**\n     * Handles input changes and passes them in API.\n     * @param changes\n     */\n    ngOnChanges(changes) {\n        // It must be run outside a zone; otherwise, all async events within this call will cause ticks.\n        this.ngZone.runOutsideAngular(() => {\n            const { player } = this;\n            if (player) {\n                const { point, layer, options } = changes;\n                /**\n                 * player.moveTo resets values to default if any of them isn't passed.\n                 * That's why we use value from currentValue OR previous value from input.\n                 * With that logic it's possible to pass only point, layer or options.\n                 */\n                if (point || layer) {\n                    const combinedPoint = point?.currentValue || this.point;\n                    const combinedLayer = layer?.currentValue || this.layer;\n                    player.moveTo(combinedPoint, { layer: combinedLayer });\n                }\n                if (options) {\n                    this.setOptions(options.currentValue, player);\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        const panorama$ = this.yaMapComponent.map$.pipe(filter(Boolean), switchMap((map) => {\n            /**\n             * Maps and panoramas use the same container,\n             * so we need to destroy/remove this map.\n             */\n            map.destroy();\n            return this.createPanorama();\n        }));\n        panorama$.pipe(takeUntil(this.destroy$)).subscribe((panorama) => {\n            const { id } = this.yaMapComponent.container.nativeElement;\n            const player = new ymaps.panorama.Player(id, panorama, this.options);\n            /**\n             * If the panorama$ is changed, it means that the $map is changed,\n             * and finally it means that the configuration is changed, e.g. language,\n             * and we need to reinitialize the player.\n             */\n            if (this.player) {\n                this.player.destroy();\n            }\n            this.player = player;\n            /**\n             * The API breaks if we call destroy on a destroyed player instance.\n             * That's why sync states => local and API.\n             */\n            this.player.events.add('destroy', () => {\n                this.player = undefined;\n            });\n            this.eventManager.setTarget(player);\n            this.ready.emit({ ymaps, target: player });\n        });\n    }\n    ngOnDestroy() {\n        this.eventManager.destroy();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n    /**\n     * Destructs state and passes it in API.\n     * @param options\n     * @param player\n     */\n    setOptions(options, player) {\n        const { autoFitToViewport, controls, direction, hotkeysEnabled, span, scrollZoomBehavior, suppressMapOpenBlock, } = options;\n        if (autoFitToViewport ||\n            controls ||\n            hotkeysEnabled ||\n            scrollZoomBehavior ||\n            suppressMapOpenBlock) {\n            console.warn('Only direction and span can be set after entity init. To set other options, you should recreate a Panorama with new options');\n        }\n        if (direction) {\n            player.setDirection(direction);\n        }\n        if (span) {\n            player.setSpan(span);\n        }\n    }\n    /**\n     * Searches for a panorama and returns first\n     */\n    createPanorama() {\n        return from(ymaps.panorama.locate(this.point, { layer: this.layer })).pipe(map((panoramas) => panoramas[0]));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaPanoramaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.4\", type: YaPanoramaDirective, isStandalone: false, selector: \"ya-panorama\", inputs: { point: \"point\", layer: \"layer\", options: \"options\" }, outputs: { ready: \"ready\", destroy: \"destroy\", directionchange: \"directionchange\", yaerror: \"yaerror\", fullscreenenter: \"fullscreenenter\", fullscreenexit: \"fullscreenexit\", markercollapse: \"markercollapse\", markerexpand: \"markerexpand\", markermouseenter: \"markermouseenter\", markermouseleave: \"markermouseleave\", panoramachange: \"panoramachange\", spanchange: \"spanchange\" }, usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaPanoramaDirective, decorators: [{\n            type: Directive,\n            args: [{\n                    selector: 'ya-panorama',\n                    standalone: false,\n                }]\n        }], propDecorators: { point: [{\n                type: Input\n            }], layer: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }], ready: [{\n                type: Output\n            }], destroy: [{\n                type: Output\n            }], directionchange: [{\n                type: Output\n            }], yaerror: [{\n                type: Output\n            }], fullscreenenter: [{\n                type: Output\n            }], fullscreenexit: [{\n                type: Output\n            }], markercollapse: [{\n                type: Output\n            }], markerexpand: [{\n                type: Output\n            }], markermouseenter: [{\n                type: Output\n            }], markermouseleave: [{\n                type: Output\n            }], panoramachange: [{\n                type: Output\n            }], spanchange: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtcGFub3JhbWEuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXlhbmRleC1tYXBzLXYyL3NyYy9saWIvY29tcG9uZW50cy95YS1wYW5vcmFtYS95YS1wYW5vcmFtYS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUQ7Ozs7Ozs7Ozs7R0FVRztBQUtILE1BQU0sT0FBTyxtQkFBbUI7SUFKaEM7UUFLbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV4QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUvQixpQkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUk5RDs7O1dBR0c7UUFDTSxVQUFLLEdBQWEsRUFBRSxDQUFDO1FBYzlCOztXQUVHO1FBQ08sVUFBSyxHQUFzRCxJQUFJLFlBQVksRUFFbEYsQ0FBQztRQUVKOzs7V0FHRztRQUNPLFlBQU8sR0FDZixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztR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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBOZ1pvbmUsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgWWFFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMveWEtZXZlbnQnO1xyXG5pbXBvcnQgeyBZYVJlYWR5RXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3lhLXJlYWR5LWV2ZW50JztcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXZlbnQtbWFuYWdlci9ldmVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgWWFNYXBDb21wb25lbnQgfSBmcm9tICcuLi95YS1tYXAveWEtbWFwLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogVGhlIGB5YS1wYW5vcmFtYWAgY29tcG9uZW50IHdyYXBzIGB5bWFwcy5wYW5vcmFtYS5QbGF5ZXJgIGNsYXNzIGZyb20gdGhlIFlhbmRleC5NYXBzIEFQSS5cclxuICogWW91IGNhbiBjb25maWd1cmUgaXQgdmlhIHRoZSBjb21wb25lbnQncyBpbnB1dHMuXHJcbiAqIEV2ZW50cyBjYW4gYmUgYm91bmQgdXNpbmcgdGhlIG91dHB1dHMgb2YgdGhlIGNvbXBvbmVudC5cclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8eWEtbWFwPlxyXG4gKiAgIDx5YS1wYW5vcmFtYSBbcG9pbnRdPVwiWzU5LjkzODU1NywgMzAuMzE2MTk4XVwiIGxheWVyPVwieWFuZGV4I2FpclBhbm9yYW1hXCI+PC95YS1wYW5vcmFtYT5cclxuICogPC95YS1tYXA+XHJcbiAqIGBgYFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICd5YS1wYW5vcmFtYScsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZYVBhbm9yYW1hRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHlhTWFwQ29tcG9uZW50ID0gaW5qZWN0KFlhTWFwQ29tcG9uZW50KTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRNYW5hZ2VyID0gbmV3IEV2ZW50TWFuYWdlcih0aGlzLm5nWm9uZSk7XHJcblxyXG4gIHByaXZhdGUgcGxheWVyPzogeW1hcHMucGFub3JhbWEuUGxheWVyO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcG9pbnQgZm9yIHNlYXJjaGluZyBmb3IgbmVhcmJ5IHBhbm9yYW1hcy5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5sb2NhdGUuaHRtbCNwYW5vcmFtYS5sb2NhdGVfX3BhcmFtLXBvaW50fVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBvaW50OiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbGF5ZXIgdG8gc2VhcmNoIGZvciBwYW5vcmFtYXMuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvcGFub3JhbWEubG9jYXRlLmh0bWwjcGFub3JhbWEubG9jYXRlX19wYXJhbS1vcHRpb25zLmxheWVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxheWVyPzogeW1hcHMucGFub3JhbWEuTGF5ZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXllciBvcHRpb25zLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL3Bhbm9yYW1hLlBsYXllci5odG1sI3Bhbm9yYW1hLlBsYXllcl9fcGFyYW0tb3B0aW9uc31cclxuICAgKi9cclxuICBASW5wdXQoKSBvcHRpb25zPzogeW1hcHMucGFub3JhbWEuSVBsYXllck9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhbm9yYW1hIGluc3RhbmNlIGlzIGNyZWF0ZWQuIFRoaXMgZXZlbnQgcnVucyBvdXRzaWRlIGFuIEFuZ3VsYXIgem9uZS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcmVhZHk6IEV2ZW50RW1pdHRlcjxZYVJlYWR5RXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgWWFSZWFkeUV2ZW50PHltYXBzLnBhbm9yYW1hLlBsYXllcj5cclxuICA+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwbGF5ZXIgd2FzIGNsb3NlZCBieSB0aGUgdXNlciBvciBkZXN0cm95ZWQgdXNpbmcgdGhlIHBhbm9yYW1hLlBsYXllci5kZXN0cm95IG1ldGhvZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5QbGF5ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWRlc3Ryb3l9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGRlc3Ryb3k6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5wYW5vcmFtYS5QbGF5ZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignZGVzdHJveScpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdmlldyBkaXJlY3Rpb24gY2hhbmdlZC5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5QbGF5ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWRpcmVjdGlvbmNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZGlyZWN0aW9uY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2RpcmVjdGlvbmNoYW5nZScpO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgb3BlcmF0aW9uIG9mIHRoZSBwbGF5ZXIuIFRoZSB1c2VyIHdpbGwgYmUgc2hvd24gdGhlIGFwcHJvcHJpYXRlIHNjcmVlbi5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5QbGF5ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWVycm9yfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB5YWVycm9yOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2Vycm9yJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwYW5vcmFtYSBwbGF5ZXIgc3dpdGNoZWQgdG8gZnVsbC1zY3JlZW4gbW9kZS5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5QbGF5ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LWZ1bGxzY3JlZW5lbnRlcn1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZnVsbHNjcmVlbmVudGVyOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2Z1bGxzY3JlZW5lbnRlcicpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgcGFub3JhbWEgcGxheWVyIGV4aXRlZCBmdWxsLXNjcmVlbiBtb2RlLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL3Bhbm9yYW1hLlBsYXllci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtZnVsbHNjcmVlbmV4aXR9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGZ1bGxzY3JlZW5leGl0OiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ2Z1bGxzY3JlZW5leGl0Jyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB1c2VyIGNsaWNrZWQgb24gYW4gZXhwYW5kZWQgbWFya2VyLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL3Bhbm9yYW1hLlBsYXllci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbWFya2VyY29sbGFwc2V9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG1hcmtlcmNvbGxhcHNlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ21hcmtlcmNvbGxhcHNlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB1c2VyIGNsaWNrZWQgb24gYSBjb2xsYXBzZWQgbWFya2VyLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL3Bhbm9yYW1hLlBsYXllci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbWFya2VyZXhwYW5kfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBtYXJrZXJleHBhbmQ6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5wYW5vcmFtYS5QbGF5ZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbWFya2VyZXhwYW5kJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB1c2VyJ3MgY3Vyc29yIGhvdmVyZWQgb3ZlciBhIG1hcmtlci5cclxuICAgKiB7QGxpbmsgaHR0cHM6Ly95YW5kZXguY29tL2Rldi9tYXBzL2pzYXBpL2RvYy8yLjEvcmVmL3JlZmVyZW5jZS9wYW5vcmFtYS5QbGF5ZXIuaHRtbCNldmVudF9kZXRhaWxfX2V2ZW50LW1hcmtlcm1vdXNlZW50ZXJ9XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIG1hcmtlcm1vdXNlZW50ZXI6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5wYW5vcmFtYS5QbGF5ZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcignbWFya2VybW91c2VlbnRlcicpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdXNlcidzIGN1cnNvciBsZWZ0IGEgbWFya2VyLlxyXG4gICAqIHtAbGluayBodHRwczovL3lhbmRleC5jb20vZGV2L21hcHMvanNhcGkvZG9jLzIuMS9yZWYvcmVmZXJlbmNlL3Bhbm9yYW1hLlBsYXllci5odG1sI2V2ZW50X2RldGFpbF9fZXZlbnQtbWFya2VybW91c2VsZWF2ZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgbWFya2VybW91c2VsZWF2ZTogT2JzZXJ2YWJsZTxZYUV2ZW50PHltYXBzLnBhbm9yYW1hLlBsYXllcj4+ID1cclxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyKCdtYXJrZXJtb3VzZWxlYXZlJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBvcGVuIHBhbm9yYW1hIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvcGFub3JhbWEuUGxheWVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1wYW5vcmFtYWNoYW5nZX1cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcGFub3JhbWFjaGFuZ2U6IE9ic2VydmFibGU8WWFFdmVudDx5bWFwcy5wYW5vcmFtYS5QbGF5ZXI+PiA9XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcigncGFub3JhbWFjaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0IGhhcyBiZWVuIGNoYW5nZWQuXHJcbiAgICoge0BsaW5rIGh0dHBzOi8veWFuZGV4LmNvbS9kZXYvbWFwcy9qc2FwaS9kb2MvMi4xL3JlZi9yZWZlcmVuY2UvcGFub3JhbWEuUGxheWVyLmh0bWwjZXZlbnRfZGV0YWlsX19ldmVudC1zcGFuY2hhbmdlfVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzcGFuY2hhbmdlOiBPYnNlcnZhYmxlPFlhRXZlbnQ8eW1hcHMucGFub3JhbWEuUGxheWVyPj4gPVxyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXIoJ3NwYW5jaGFuZ2UnKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbnB1dCBjaGFuZ2VzIGFuZCBwYXNzZXMgdGhlbSBpbiBBUEkuXHJcbiAgICogQHBhcmFtIGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvLyBJdCBtdXN0IGJlIHJ1biBvdXRzaWRlIGEgem9uZTsgb3RoZXJ3aXNlLCBhbGwgYXN5bmMgZXZlbnRzIHdpdGhpbiB0aGlzIGNhbGwgd2lsbCBjYXVzZSB0aWNrcy5cclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgY29uc3QgeyBwbGF5ZXIgfSA9IHRoaXM7XHJcblxyXG4gICAgICBpZiAocGxheWVyKSB7XHJcbiAgICAgICAgY29uc3QgeyBwb2ludCwgbGF5ZXIsIG9wdGlvbnMgfSA9IGNoYW5nZXM7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHBsYXllci5tb3ZlVG8gcmVzZXRzIHZhbHVlcyB0byBkZWZhdWx0IGlmIGFueSBvZiB0aGVtIGlzbid0IHBhc3NlZC5cclxuICAgICAgICAgKiBUaGF0J3Mgd2h5IHdlIHVzZSB2YWx1ZSBmcm9tIGN1cnJlbnRWYWx1ZSBPUiBwcmV2aW91cyB2YWx1ZSBmcm9tIGlucHV0LlxyXG4gICAgICAgICAqIFdpdGggdGhhdCBsb2dpYyBpdCdzIHBvc3NpYmxlIHRvIHBhc3Mgb25seSBwb2ludCwgbGF5ZXIgb3Igb3B0aW9ucy5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAocG9pbnQgfHwgbGF5ZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkUG9pbnQ6IG51bWJlcltdID0gcG9pbnQ/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLnBvaW50O1xyXG4gICAgICAgICAgY29uc3QgY29tYmluZWRMYXllcjogeW1hcHMucGFub3JhbWEuTGF5ZXIgPSBsYXllcj8uY3VycmVudFZhbHVlIHx8IHRoaXMubGF5ZXI7XHJcblxyXG4gICAgICAgICAgcGxheWVyLm1vdmVUbyhjb21iaW5lZFBvaW50LCB7IGxheWVyOiBjb21iaW5lZExheWVyIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zLmN1cnJlbnRWYWx1ZSwgcGxheWVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYW5vcmFtYSQgPSB0aGlzLnlhTWFwQ29tcG9uZW50Lm1hcCQucGlwZShcclxuICAgICAgZmlsdGVyKEJvb2xlYW4pLFxyXG4gICAgICBzd2l0Y2hNYXAoKG1hcDogeW1hcHMuTWFwKSA9PiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWFwcyBhbmQgcGFub3JhbWFzIHVzZSB0aGUgc2FtZSBjb250YWluZXIsXHJcbiAgICAgICAgICogc28gd2UgbmVlZCB0byBkZXN0cm95L3JlbW92ZSB0aGlzIG1hcC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXAuZGVzdHJveSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVQYW5vcmFtYSgpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgcGFub3JhbWEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHBhbm9yYW1hKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgaWQgfSA9IHRoaXMueWFNYXBDb21wb25lbnQuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHBsYXllciA9IG5ldyB5bWFwcy5wYW5vcmFtYS5QbGF5ZXIoaWQsIHBhbm9yYW1hLCB0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIElmIHRoZSBwYW5vcmFtYSQgaXMgY2hhbmdlZCwgaXQgbWVhbnMgdGhhdCB0aGUgJG1hcCBpcyBjaGFuZ2VkLFxyXG4gICAgICAgKiBhbmQgZmluYWxseSBpdCBtZWFucyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQsIGUuZy4gbGFuZ3VhZ2UsXHJcbiAgICAgICAqIGFuZCB3ZSBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgcGxheWVyLlxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHRoaXMucGxheWVyKSB7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBsYXllciA9IHBsYXllcjtcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUaGUgQVBJIGJyZWFrcyBpZiB3ZSBjYWxsIGRlc3Ryb3kgb24gYSBkZXN0cm95ZWQgcGxheWVyIGluc3RhbmNlLlxyXG4gICAgICAgKiBUaGF0J3Mgd2h5IHN5bmMgc3RhdGVzID0+IGxvY2FsIGFuZCBBUEkuXHJcbiAgICAgICAqL1xyXG4gICAgICB0aGlzLnBsYXllci5ldmVudHMuYWRkKCdkZXN0cm95JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLnNldFRhcmdldChwbGF5ZXIpO1xyXG4gICAgICB0aGlzLnJlYWR5LmVtaXQoeyB5bWFwcywgdGFyZ2V0OiBwbGF5ZXIgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cnVjdHMgc3RhdGUgYW5kIHBhc3NlcyBpdCBpbiBBUEkuXHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKiBAcGFyYW0gcGxheWVyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRPcHRpb25zKG9wdGlvbnM6IHltYXBzLnBhbm9yYW1hLklQbGF5ZXJPcHRpb25zLCBwbGF5ZXI6IHltYXBzLnBhbm9yYW1hLlBsYXllcik6IHZvaWQge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBhdXRvRml0VG9WaWV3cG9ydCxcclxuICAgICAgY29udHJvbHMsXHJcbiAgICAgIGRpcmVjdGlvbixcclxuICAgICAgaG90a2V5c0VuYWJsZWQsXHJcbiAgICAgIHNwYW4sXHJcbiAgICAgIHNjcm9sbFpvb21CZWhhdmlvcixcclxuICAgICAgc3VwcHJlc3NNYXBPcGVuQmxvY2ssXHJcbiAgICB9ID0gb3B0aW9ucztcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGF1dG9GaXRUb1ZpZXdwb3J0IHx8XHJcbiAgICAgIGNvbnRyb2xzIHx8XHJcbiAgICAgIGhvdGtleXNFbmFibGVkIHx8XHJcbiAgICAgIHNjcm9sbFpvb21CZWhhdmlvciB8fFxyXG4gICAgICBzdXBwcmVzc01hcE9wZW5CbG9ja1xyXG4gICAgKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnT25seSBkaXJlY3Rpb24gYW5kIHNwYW4gY2FuIGJlIHNldCBhZnRlciBlbnRpdHkgaW5pdC4gVG8gc2V0IG90aGVyIG9wdGlvbnMsIHlvdSBzaG91bGQgcmVjcmVhdGUgYSBQYW5vcmFtYSB3aXRoIG5ldyBvcHRpb25zJyxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIHBsYXllci5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3Bhbikge1xyXG4gICAgICBwbGF5ZXIuc2V0U3BhbihzcGFuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlYXJjaGVzIGZvciBhIHBhbm9yYW1hIGFuZCByZXR1cm5zIGZpcnN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVQYW5vcmFtYSgpOiBPYnNlcnZhYmxlPHltYXBzLklQYW5vcmFtYT4ge1xyXG4gICAgcmV0dXJuIGZyb20oeW1hcHMucGFub3JhbWEubG9jYXRlKHRoaXMucG9pbnQsIHsgbGF5ZXI6IHRoaXMubGF5ZXIgfSkpLnBpcGUoXHJcbiAgICAgIG1hcCgocGFub3JhbWFzKSA9PiBwYW5vcmFtYXNbMF0pLFxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19","import { NgModule } from '@angular/core';\nimport { YaClustererComponent } from './components/ya-clusterer/ya-clusterer.component';\nimport { YaControlDirective } from './components/ya-control/ya-control.directive';\nimport { YaGeoObjectDirective } from './components/ya-geoobject/ya-geoobject.directive';\nimport { YaMapComponent } from './components/ya-map/ya-map.component';\nimport { YaMultirouteDirective } from './components/ya-multiroute/ya-multiroute.directive';\nimport { YaObjectManagerDirective } from './components/ya-object-manager/ya-object-manager.directive';\nimport { YaPanoramaDirective } from './components/ya-panorama/ya-panorama.directive';\nimport { YaPlacemarkDirective } from './components/ya-placemark/ya-placemark.directive';\nimport { YA_CONFIG } from './tokens/ya-config';\nimport * as i0 from \"@angular/core\";\nexport class AngularYandexMapsModule {\n    /**\n     * Please use this method when registering the module at the root level.\n     * If used in a lazy-loaded module, YaApiLoaderService will not take the provided configuration.\n     * @param config configuration for YaApiLoaderService\n     */\n    static forRoot(config) {\n        return {\n            ngModule: AngularYandexMapsModule,\n            providers: [{ provide: YA_CONFIG, useValue: config }],\n        };\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AngularYandexMapsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AngularYandexMapsModule, declarations: [YaClustererComponent,\n            YaControlDirective,\n            YaGeoObjectDirective,\n            YaMapComponent,\n            YaMultirouteDirective,\n            YaObjectManagerDirective,\n            YaPanoramaDirective,\n            YaPlacemarkDirective], exports: [YaClustererComponent,\n            YaControlDirective,\n            YaGeoObjectDirective,\n            YaMapComponent,\n            YaMultirouteDirective,\n            YaObjectManagerDirective,\n            YaPanoramaDirective,\n            YaPlacemarkDirective] }); }\n    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AngularYandexMapsModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AngularYandexMapsModule, decorators: [{\n            type: NgModule,\n            args: [{\n                    declarations: [\n                        YaClustererComponent,\n                        YaControlDirective,\n                        YaGeoObjectDirective,\n                        YaMapComponent,\n                        YaMultirouteDirective,\n                        YaObjectManagerDirective,\n                        YaPanoramaDirective,\n                        YaPlacemarkDirective,\n                    ],\n                    exports: [\n                        YaClustererComponent,\n                        YaControlDirective,\n                        YaGeoObjectDirective,\n                        YaMapComponent,\n                        YaMultirouteDirective,\n                        YaObjectManagerDirective,\n                        YaPanoramaDirective,\n                        YaPlacemarkDirective,\n                    ],\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci15YW5kZXgtbWFwcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2xpYi9hbmd1bGFyLXlhbmRleC1tYXBzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQXdCL0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FDWixNQUF1QztRQUV2QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHVCQUF1QjtZQUNqQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ3RELENBQUM7SUFDSixDQUFDOzhHQWJVLHVCQUF1QjsrR0FBdkIsdUJBQXVCLGlCQXBCaEMsb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsY0FBYztZQUNkLHFCQUFxQjtZQUNyQix3QkFBd0I7WUFDeEIsbUJBQW1CO1lBQ25CLG9CQUFvQixhQUdwQixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QscUJBQXFCO1lBQ3JCLHdCQUF3QjtZQUN4QixtQkFBbUI7WUFDbkIsb0JBQW9COytHQUdYLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkF0Qm5DLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG9CQUFvQjt3QkFDcEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2QscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3FCQUNyQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsY0FBYzt3QkFDZCxxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgWWFDbHVzdGVyZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMveWEtY2x1c3RlcmVyL3lhLWNsdXN0ZXJlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBZYUNvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuL2NvbXBvbmVudHMveWEtY29udHJvbC95YS1jb250cm9sLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFlhR2VvT2JqZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL3lhLWdlb29iamVjdC95YS1nZW9vYmplY3QuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgWWFNYXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMveWEtbWFwL3lhLW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBZYU11bHRpcm91dGVEaXJlY3RpdmUgfSBmcm9tICcuL2NvbXBvbmVudHMveWEtbXVsdGlyb3V0ZS95YS1tdWx0aXJvdXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFlhT2JqZWN0TWFuYWdlckRpcmVjdGl2ZSB9IGZyb20gJy4vY29tcG9uZW50cy95YS1vYmplY3QtbWFuYWdlci95YS1vYmplY3QtbWFuYWdlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBZYVBhbm9yYW1hRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL3lhLXBhbm9yYW1hL3lhLXBhbm9yYW1hLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFlhUGxhY2VtYXJrRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21wb25lbnRzL3lhLXBsYWNlbWFyay95YS1wbGFjZW1hcmsuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgWWFDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMveWEtY29uZmlnJztcclxuaW1wb3J0IHsgWUFfQ09ORklHIH0gZnJvbSAnLi90b2tlbnMveWEtY29uZmlnJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBZYUNsdXN0ZXJlckNvbXBvbmVudCxcclxuICAgIFlhQ29udHJvbERpcmVjdGl2ZSxcclxuICAgIFlhR2VvT2JqZWN0RGlyZWN0aXZlLFxyXG4gICAgWWFNYXBDb21wb25lbnQsXHJcbiAgICBZYU11bHRpcm91dGVEaXJlY3RpdmUsXHJcbiAgICBZYU9iamVjdE1hbmFnZXJEaXJlY3RpdmUsXHJcbiAgICBZYVBhbm9yYW1hRGlyZWN0aXZlLFxyXG4gICAgWWFQbGFjZW1hcmtEaXJlY3RpdmUsXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBZYUNsdXN0ZXJlckNvbXBvbmVudCxcclxuICAgIFlhQ29udHJvbERpcmVjdGl2ZSxcclxuICAgIFlhR2VvT2JqZWN0RGlyZWN0aXZlLFxyXG4gICAgWWFNYXBDb21wb25lbnQsXHJcbiAgICBZYU11bHRpcm91dGVEaXJlY3RpdmUsXHJcbiAgICBZYU9iamVjdE1hbmFnZXJEaXJlY3RpdmUsXHJcbiAgICBZYVBhbm9yYW1hRGlyZWN0aXZlLFxyXG4gICAgWWFQbGFjZW1hcmtEaXJlY3RpdmUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJZYW5kZXhNYXBzTW9kdWxlIHtcclxuICAvKipcclxuICAgKiBQbGVhc2UgdXNlIHRoaXMgbWV0aG9kIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIG1vZHVsZSBhdCB0aGUgcm9vdCBsZXZlbC5cclxuICAgKiBJZiB1c2VkIGluIGEgbGF6eS1sb2FkZWQgbW9kdWxlLCBZYUFwaUxvYWRlclNlcnZpY2Ugd2lsbCBub3QgdGFrZSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cclxuICAgKiBAcGFyYW0gY29uZmlnIGNvbmZpZ3VyYXRpb24gZm9yIFlhQXBpTG9hZGVyU2VydmljZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JSb290KFxyXG4gICAgY29uZmlnOiBZYUNvbmZpZyB8IE9ic2VydmFibGU8WWFDb25maWc+LFxyXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhcllhbmRleE1hcHNNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBBbmd1bGFyWWFuZGV4TWFwc01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBZQV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfV0sXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=","import { inject, Injectable, NgZone } from '@angular/core';\nimport { from } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { enterZone } from '../../utils/zone/zone';\nimport { YaApiLoaderService } from '../ya-api-loader/ya-api-loader.service';\nimport * as i0 from \"@angular/core\";\n/**\n * The `YaGeocoder` service wraps `ymaps.geocode` static function from the Yandex.Maps API.\n *\n * ```ts\n * import { YaGeocoderService } from 'angular8-yandex-maps';\n *\n * @Component()\n * export class AppComponent {\n *   constructor(private yaGeocoderService: YaGeocoderService) {\n *     // Don't forget to unsubscribe\n *     this.yaGeocoderService.geocode('Moscow')\n *       .subscribe(v => console.log(v))\n *   }\n * }\n * ```\n */\nexport class YaGeocoderService {\n    constructor() {\n        this.ngZone = inject(NgZone);\n        this.yaApiLoaderService = inject(YaApiLoaderService);\n    }\n    /**\n     * Processes geocoding requests.\n     * @param request the address for which coordinates need to be obtained (forward geocoding),\n     * or the coordinates for which the address needs to be determined (reverse geocoding).\n     * @param options geocode options.\n     */\n    geocode(request, options) {\n        return this.yaApiLoaderService.load().pipe(switchMap(() => from(ymaps.geocode(request, options))), enterZone(this.ngZone));\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaGeocoderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaGeocoderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: YaGeocoderService, decorators: [{\n            type: Injectable,\n            args: [{\n                    providedIn: 'root',\n                }]\n        }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWEtZ2VvY29kZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci15YW5kZXgtbWFwcy12Mi9zcmMvbGliL3NlcnZpY2VzL3lhLWdlb2NvZGVyL3lhLWdlb2NvZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFNUU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUltQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBY2xFO0lBWkM7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsT0FBMEIsRUFBRSxPQUErQjtRQUNqRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUN0RCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUN2QixDQUFDO0lBQ0osQ0FBQzs4R0FmVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBlbnRlclpvbmUgfSBmcm9tICcuLi8uLi91dGlscy96b25lL3pvbmUnO1xyXG5pbXBvcnQgeyBZYUFwaUxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi95YS1hcGktbG9hZGVyL3lhLWFwaS1sb2FkZXIuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogVGhlIGBZYUdlb2NvZGVyYCBzZXJ2aWNlIHdyYXBzIGB5bWFwcy5nZW9jb2RlYCBzdGF0aWMgZnVuY3Rpb24gZnJvbSB0aGUgWWFuZGV4Lk1hcHMgQVBJLlxyXG4gKlxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBZYUdlb2NvZGVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXI4LXlhbmRleC1tYXBzJztcclxuICpcclxuICogQENvbXBvbmVudCgpXHJcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xyXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgeWFHZW9jb2RlclNlcnZpY2U6IFlhR2VvY29kZXJTZXJ2aWNlKSB7XHJcbiAqICAgICAvLyBEb24ndCBmb3JnZXQgdG8gdW5zdWJzY3JpYmVcclxuICogICAgIHRoaXMueWFHZW9jb2RlclNlcnZpY2UuZ2VvY29kZSgnTW9zY293JylcclxuICogICAgICAgLnN1YnNjcmliZSh2ID0+IGNvbnNvbGUubG9nKHYpKVxyXG4gKiAgIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZYUdlb2NvZGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHlhQXBpTG9hZGVyU2VydmljZSA9IGluamVjdChZYUFwaUxvYWRlclNlcnZpY2UpO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgZ2VvY29kaW5nIHJlcXVlc3RzLlxyXG4gICAqIEBwYXJhbSByZXF1ZXN0IHRoZSBhZGRyZXNzIGZvciB3aGljaCBjb29yZGluYXRlcyBuZWVkIHRvIGJlIG9idGFpbmVkIChmb3J3YXJkIGdlb2NvZGluZyksXHJcbiAgICogb3IgdGhlIGNvb3JkaW5hdGVzIGZvciB3aGljaCB0aGUgYWRkcmVzcyBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIChyZXZlcnNlIGdlb2NvZGluZykuXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgZ2VvY29kZSBvcHRpb25zLlxyXG4gICAqL1xyXG4gIGdlb2NvZGUocmVxdWVzdDogc3RyaW5nIHwgbnVtYmVyW10sIG9wdGlvbnM/OiB5bWFwcy5JR2VvY29kZU9wdGlvbnMpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMueWFBcGlMb2FkZXJTZXJ2aWNlLmxvYWQoKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gZnJvbSh5bWFwcy5nZW9jb2RlKHJlcXVlc3QsIG9wdGlvbnMpKSksXHJcbiAgICAgIGVudGVyWm9uZSh0aGlzLm5nWm9uZSksXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=","/*\n * Public API Surface of angular8-yandex-maps\n */\n// Yandex.Maps typings\nimport './lib/typings/yandex-maps';\n// Module\nexport * from './lib/angular-yandex-maps.module';\n// Components\nexport * from './lib/components/ya-clusterer/ya-clusterer.component';\nexport * from './lib/components/ya-control/ya-control.directive';\nexport * from './lib/components/ya-geoobject/ya-geoobject.directive';\nexport * from './lib/components/ya-map/ya-map.component';\nexport * from './lib/components/ya-multiroute/ya-multiroute.directive';\nexport * from './lib/components/ya-object-manager/ya-object-manager.directive';\nexport * from './lib/components/ya-panorama/ya-panorama.directive';\nexport * from './lib/components/ya-placemark/ya-placemark.directive';\n// Services\nexport * from './lib/services/ya-api-loader/ya-api-loader.service';\nexport * from './lib/services/ya-geocoder/ya-geocoder.service';\n// Interfaces\nexport * from './lib/interfaces/ya-config';\nexport * from './lib/interfaces/ya-event';\nexport * from './lib/interfaces/ya-ready-event';\n// Tokens\nexport * from './lib/tokens/ya-config';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsc0JBQXNCO0FBQ3RCLE9BQU8sMkJBQTJCLENBQUM7QUFFbkMsU0FBUztBQUNULGNBQWMsa0NBQWtDLENBQUM7QUFFakQsYUFBYTtBQUNiLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGdFQUFnRSxDQUFDO0FBQy9FLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxzREFBc0QsQ0FBQztBQUVyRSxXQUFXO0FBQ1gsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGFBQWE7QUFDYixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxTQUFTO0FBQ1QsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhbmd1bGFyOC15YW5kZXgtbWFwc1xyXG4gKi9cclxuXHJcbi8vIFlhbmRleC5NYXBzIHR5cGluZ3NcclxuaW1wb3J0ICcuL2xpYi90eXBpbmdzL3lhbmRleC1tYXBzJztcclxuXHJcbi8vIE1vZHVsZVxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbmd1bGFyLXlhbmRleC1tYXBzLm1vZHVsZSc7XHJcblxyXG4vLyBDb21wb25lbnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMveWEtY2x1c3RlcmVyL3lhLWNsdXN0ZXJlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3lhLWNvbnRyb2wveWEtY29udHJvbC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3lhLWdlb29iamVjdC95YS1nZW9vYmplY3QuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy95YS1tYXAveWEtbWFwLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMveWEtbXVsdGlyb3V0ZS95YS1tdWx0aXJvdXRlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMveWEtb2JqZWN0LW1hbmFnZXIveWEtb2JqZWN0LW1hbmFnZXIuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy95YS1wYW5vcmFtYS95YS1wYW5vcmFtYS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3lhLXBsYWNlbWFyay95YS1wbGFjZW1hcmsuZGlyZWN0aXZlJztcclxuXHJcbi8vIFNlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3lhLWFwaS1sb2FkZXIveWEtYXBpLWxvYWRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMveWEtZ2VvY29kZXIveWEtZ2VvY29kZXIuc2VydmljZSc7XHJcblxyXG4vLyBJbnRlcmZhY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMveWEtY29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy95YS1ldmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMveWEtcmVhZHktZXZlbnQnO1xyXG5cclxuLy8gVG9rZW5zXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rva2Vucy95YS1jb25maWcnO1xyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhcjgteWFuZGV4LW1hcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIteWFuZGV4LW1hcHMtdjIvc3JjL2FuZ3VsYXI4LXlhbmRleC1tYXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}