@commercetools-frontend/application-shell 22.17.0 → 22.17.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/commercetools-frontend-application-shell.cjs.dev.js +2 -2
  2. package/dist/commercetools-frontend-application-shell.cjs.prod.js +2 -2
  3. package/dist/commercetools-frontend-application-shell.esm.js +2 -2
  4. package/dist/{custom-view-dev-host-e21e5a32.esm.js → custom-view-dev-host-03a7e8ee.esm.js} +2 -2
  5. package/dist/{custom-view-dev-host-3e6d433e.cjs.dev.js → custom-view-dev-host-5f8c0099.cjs.dev.js} +2 -2
  6. package/dist/{custom-view-dev-host-f29878d8.cjs.prod.js → custom-view-dev-host-a4c2526e.cjs.prod.js} +2 -2
  7. package/dist/declarations/src/components/navbar/main-navbar.styles.d.ts +47 -0
  8. package/dist/declarations/src/components/navbar/menu-items.d.ts +2 -5
  9. package/dist/declarations/src/components/navbar/menu-items.styles.d.ts +52 -0
  10. package/dist/declarations/src/components/navbar/shared.styles.d.ts +18 -0
  11. package/dist/declarations/src/constants.d.ts +15 -3
  12. package/dist/{index-c92d8a48.cjs.dev.js → index-3a78b6af.cjs.dev.js} +29 -29
  13. package/dist/{index-528c3a33.cjs.prod.js → index-3d6cf404.cjs.prod.js} +18 -18
  14. package/dist/{index-fd3ab5c6.esm.js → index-5f138907.esm.js} +30 -30
  15. package/dist/navbar-17317c0f.cjs.dev.js +1334 -0
  16. package/dist/navbar-2af36692.esm.js +1301 -0
  17. package/dist/{navbar-d60f807a.cjs.prod.js → navbar-53abe300.cjs.prod.js} +228 -252
  18. package/dist/{oidc-7c48215c.cjs.dev.js → oidc-63e926e1.cjs.dev.js} +17 -4
  19. package/dist/{oidc-callback-ce1b0eda.cjs.dev.js → oidc-callback-10ec1861.cjs.dev.js} +2 -2
  20. package/dist/{oidc-callback-bfa85a94.esm.js → oidc-callback-137a6058.esm.js} +2 -2
  21. package/dist/{oidc-callback-04085556.cjs.prod.js → oidc-callback-663e13d0.cjs.prod.js} +2 -2
  22. package/dist/{oidc-b070ff6c.cjs.prod.js → oidc-cfa56c46.cjs.prod.js} +17 -4
  23. package/dist/{oidc-da8526e3.esm.js → oidc-ff53dfd3.esm.js} +17 -5
  24. package/dist/{project-container-f1416d28.esm.js → project-container-695b6d00.esm.js} +6 -6
  25. package/dist/{project-container-c515853a.cjs.prod.js → project-container-a7b22509.cjs.prod.js} +6 -6
  26. package/dist/{project-container-a7fa7db0.cjs.dev.js → project-container-c967d69d.cjs.dev.js} +6 -6
  27. package/dist/{project-expired-2f224a15.cjs.prod.js → project-expired-198fe545.cjs.prod.js} +3 -3
  28. package/dist/{project-expired-11b7fd68.esm.js → project-expired-4a84dc5d.esm.js} +3 -3
  29. package/dist/{project-expired-61105fb9.cjs.dev.js → project-expired-fcc5b863.cjs.dev.js} +3 -3
  30. package/dist/{project-not-found-62ebce6e.esm.js → project-not-found-43c7b3d9.esm.js} +3 -3
  31. package/dist/{project-not-found-48cf94a3.cjs.prod.js → project-not-found-aee676f3.cjs.prod.js} +3 -3
  32. package/dist/{project-not-found-a28398bf.cjs.dev.js → project-not-found-bd1ed00d.cjs.dev.js} +3 -3
  33. package/dist/{project-not-initialized-3e294ed5.esm.js → project-not-initialized-3f005d66.esm.js} +3 -3
  34. package/dist/{project-not-initialized-0d42087d.cjs.prod.js → project-not-initialized-855e47a8.cjs.prod.js} +3 -3
  35. package/dist/{project-not-initialized-fd0e86c9.cjs.dev.js → project-not-initialized-ed2395cc.cjs.dev.js} +3 -3
  36. package/dist/{project-suspended-db1068ca.esm.js → project-suspended-030ffee4.esm.js} +3 -3
  37. package/dist/{project-suspended-500dbb1b.cjs.prod.js → project-suspended-3ef95f71.cjs.prod.js} +3 -3
  38. package/dist/{project-suspended-77a01855.cjs.dev.js → project-suspended-4a17383b.cjs.dev.js} +3 -3
  39. package/dist/quick-access-04797c0b.esm.js +1818 -0
  40. package/dist/quick-access-a40b1e0f.cjs.dev.js +1848 -0
  41. package/dist/{quick-access-2c92aa86.cjs.prod.js → quick-access-bd6496a4.cjs.prod.js} +8 -8
  42. package/dist/{redirect-to-login-5e148cff.esm.js → redirect-to-login-5615df08.esm.js} +1 -1
  43. package/dist/{redirect-to-login-d2287ced.cjs.dev.js → redirect-to-login-5e78faae.cjs.dev.js} +1 -1
  44. package/dist/{redirect-to-login-e4f2ca07.cjs.prod.js → redirect-to-login-ad874fb5.cjs.prod.js} +1 -1
  45. package/dist/{redirect-to-logout-f3e5475b.cjs.dev.js → redirect-to-logout-86110e8c.cjs.dev.js} +2 -2
  46. package/dist/{redirect-to-logout-5f9db1ee.esm.js → redirect-to-logout-9b60153e.esm.js} +2 -2
  47. package/dist/{redirect-to-logout-7609e738.cjs.prod.js → redirect-to-logout-9b9b32c5.cjs.prod.js} +2 -2
  48. package/dist/{requests-in-flight-loader-43b3200e.esm.js → requests-in-flight-loader-0f883386.esm.js} +2 -2
  49. package/dist/{requests-in-flight-loader-a54338f5.cjs.dev.js → requests-in-flight-loader-6ab1fa05.cjs.dev.js} +2 -2
  50. package/dist/{requests-in-flight-loader-10022cf4.cjs.prod.js → requests-in-flight-loader-f5ea48c9.cjs.prod.js} +2 -2
  51. package/dist/{service-page-project-switcher-a1408268.esm.js → service-page-project-switcher-1b1fa2df.esm.js} +1 -1
  52. package/dist/{service-page-project-switcher-0bd44b89.cjs.prod.js → service-page-project-switcher-7cddddfb.cjs.prod.js} +1 -1
  53. package/dist/{service-page-project-switcher-ffa91841.cjs.dev.js → service-page-project-switcher-b35c912b.cjs.dev.js} +1 -1
  54. package/dist/{user-settings-menu-4580467a.cjs.prod.js → user-settings-menu-1314b25d.cjs.prod.js} +2 -3
  55. package/dist/user-settings-menu-60dc5e0a.cjs.dev.js +364 -0
  56. package/dist/user-settings-menu-dcbb0bd3.esm.js +338 -0
  57. package/dist/{version-tracker-1bd0b997.cjs.prod.js → version-tracker-15416b7d.cjs.prod.js} +2 -2
  58. package/dist/{version-tracker-83f3dcb4.esm.js → version-tracker-acf36f46.esm.js} +2 -2
  59. package/dist/{version-tracker-9549fe99.cjs.dev.js → version-tracker-f54893c4.cjs.dev.js} +2 -2
  60. package/package.json +30 -33
  61. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +1 -1
  62. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +1 -1
  63. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +1 -1
  64. package/dist/declarations/src/components/navbar/compiled/navbar.css.json.d.ts +0 -3
  65. package/dist/declarations/src/components/navbar/navbar.styles.d.ts +0 -7
  66. package/dist/navbar-5a1b9a06.esm.js +0 -1223
  67. package/dist/navbar-a5342082.cjs.dev.js +0 -1256
  68. package/dist/quick-access-6f0f1cda.cjs.dev.js +0 -1848
  69. package/dist/quick-access-ee315928.esm.js +0 -1818
  70. package/dist/user-settings-menu-1ae6c56e.cjs.dev.js +0 -365
  71. package/dist/user-settings-menu-46fe08bf.esm.js +0 -339
@@ -0,0 +1,1848 @@
1
+ 'use strict';
2
+
3
+ var _taggedTemplateLiteral = require('@babel/runtime-corejs3/helpers/taggedTemplateLiteral');
4
+ var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
5
+ var _pt = require('prop-types');
6
+ var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
7
+ var _Array$isArray = require('@babel/runtime-corejs3/core-js-stable/array/is-array');
8
+ var _JSON$stringify = require('@babel/runtime-corejs3/core-js-stable/json/stringify');
9
+ var _concatInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/concat');
10
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
11
+ var _trimInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/trim');
12
+ var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
13
+ var react$1 = require('react');
14
+ var react$2 = require('@apollo/client/react');
15
+ var reactBroadcast = require('@flopflip/react-broadcast');
16
+ var commonTags = require('common-tags');
17
+ var debounce = require('debounce-async');
18
+ var reactIntl = require('react-intl');
19
+ var reactRouterDom = require('react-router-dom');
20
+ var applicationShellConnectors = require('@commercetools-frontend/application-shell-connectors');
21
+ var constants = require('@commercetools-frontend/constants');
22
+ var permissions$1 = require('@commercetools-frontend/permissions');
23
+ var sdk = require('@commercetools-frontend/sdk');
24
+ var useIsServedByProxy = require('./use-is-served-by-proxy-ed411f45.cjs.dev.js');
25
+ var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
26
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
27
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
28
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
29
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
30
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
31
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
32
+ var _includesInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/includes');
33
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
34
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
35
+ var _findIndexInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find-index');
36
+ var react = require('@emotion/react');
37
+ var Fuse = require('fuse.js');
38
+ var last = require('lodash/last');
39
+ var designSystem = require('@commercetools-uikit/design-system');
40
+ var icons = require('@commercetools-uikit/icons');
41
+ var LoadingSpinner = require('@commercetools-uikit/loading-spinner');
42
+ var jsxRuntime = require('@emotion/react/jsx-runtime');
43
+ var dist_commercetoolsFrontendApplicationShell = require('./index-3a78b6af.cjs.dev.js');
44
+ var _Promise = require('@babel/runtime-corejs3/core-js-stable/promise');
45
+ var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
46
+ var _findInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/find');
47
+ require('./index-37a25e51.cjs.dev.js');
48
+ require('@babel/runtime-corejs3/core-js-stable/object/entries');
49
+ require('@babel/runtime-corejs3/core-js-stable/reflect/has');
50
+ require('@reduxjs/toolkit');
51
+ require('lodash/mapValues');
52
+ require('omit-empty-es');
53
+ require('redux-thunk');
54
+ require('@commercetools-frontend/notifications');
55
+ require('@babel/runtime-corejs3/core-js-stable/instance/index-of');
56
+ require('@commercetools-frontend/sentry');
57
+ require('@commercetools-frontend/react-notifications');
58
+ require('redux-logger');
59
+ require('@emotion/styled/base');
60
+ require('@commercetools-frontend/application-components');
61
+ require('@commercetools-frontend/i18n');
62
+ require('./oidc-63e926e1.cjs.dev.js');
63
+ require('@babel/runtime-corejs3/core-js-stable/url');
64
+ require('@commercetools-uikit/spacings');
65
+ require('@commercetools-uikit/flat-button');
66
+ require('@babel/runtime-corejs3/helpers/objectDestructuringEmpty');
67
+ require('@babel/runtime-corejs3/helpers/extends');
68
+ require('memoize-one');
69
+ require('react-select');
70
+ require('@commercetools-uikit/accessible-hidden');
71
+ require('@commercetools-uikit/select-input');
72
+ require('@commercetools-frontend/assets/images/ct-logo.svg');
73
+ require('@commercetools-frontend/browser-history');
74
+ require('@commercetools-frontend/l10n');
75
+ require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
76
+ require('@babel/runtime-corejs3/helpers/classCallCheck');
77
+ require('@babel/runtime-corejs3/helpers/createClass');
78
+ require('@babel/runtime-corejs3/helpers/inherits');
79
+ require('@babel/runtime-corejs3/helpers/possibleConstructorReturn');
80
+ require('@babel/runtime-corejs3/helpers/getPrototypeOf');
81
+ require('@babel/runtime-corejs3/core-js-stable/object/from-entries');
82
+ require('@babel/runtime-corejs3/core-js-stable/instance/flags');
83
+ require('@flopflip/combine-adapters');
84
+ require('@flopflip/http-adapter');
85
+ require('@flopflip/launchdarkly-adapter');
86
+ require('react-redux');
87
+ require('lodash/upperFirst');
88
+ require('@commercetools-uikit/design-system/materials/resets.css');
89
+ require('@commercetools-frontend/application-config/ssr');
90
+ require('@babel/runtime-corejs3/core-js-stable/instance/some');
91
+ require('@commercetools-frontend/actions-global');
92
+
93
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
94
+
95
+ var _pt__default = /*#__PURE__*/_interopDefault(_pt);
96
+ var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
97
+ var _Array$isArray__default = /*#__PURE__*/_interopDefault(_Array$isArray);
98
+ var _JSON$stringify__default = /*#__PURE__*/_interopDefault(_JSON$stringify);
99
+ var _concatInstanceProperty__default = /*#__PURE__*/_interopDefault(_concatInstanceProperty);
100
+ var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
101
+ var _trimInstanceProperty__default = /*#__PURE__*/_interopDefault(_trimInstanceProperty);
102
+ var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
103
+ var debounce__default = /*#__PURE__*/_interopDefault(debounce);
104
+ var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
105
+ var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
106
+ var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
107
+ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
108
+ var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
109
+ var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
110
+ var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesInstanceProperty);
111
+ var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
112
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
113
+ var _findIndexInstanceProperty__default = /*#__PURE__*/_interopDefault(_findIndexInstanceProperty);
114
+ var Fuse__default = /*#__PURE__*/_interopDefault(Fuse);
115
+ var last__default = /*#__PURE__*/_interopDefault(last);
116
+ var LoadingSpinner__default = /*#__PURE__*/_interopDefault(LoadingSpinner);
117
+ var _Promise__default = /*#__PURE__*/_interopDefault(_Promise);
118
+ var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty);
119
+ var _findInstanceProperty__default = /*#__PURE__*/_interopDefault(_findInstanceProperty);
120
+
121
+ function _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
122
+ var _ref$1 = process.env.NODE_ENV === "production" ? {
123
+ name: "13n9jnb",
124
+ styles: "align-self:center;>*{display:block;}"
125
+ } : {
126
+ name: "1qkkrpz-ButlerCommand",
127
+ styles: "align-self:center;>*{display:block;};label:ButlerCommand;",
128
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrRGdCIiwiZmlsZSI6ImJ1dGxlci1jb21tYW5kLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgY3VzdG9tUHJvcGVydGllcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgQW5nbGVUaGluUmlnaHRJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb21tYW5kOiBDb21tYW5kO1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgb25DbGljazogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xuICBvbk1vdXNlRW50ZXI6IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pjtcbn07XG5cbmNvbnN0IEJ1dGxlckNvbW1hbmQgPSAocHJvcHM6IFByb3BzKSA9PiAoXG4gIDxkaXZcbiAgICBrZXk9e3Byb3BzLmNvbW1hbmQuaWR9XG4gICAgZGF0YS10ZXN0aWQ9e2BxdWljay1hY2Nlc3MtcmVzdWx0KCR7cHJvcHMuY29tbWFuZC5pZH0pYH1cbiAgICBhcmlhLWN1cnJlbnQ9e3Byb3BzLmlzU2VsZWN0ZWQgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgIGNzcz17Y3NzYFxuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBhZGRpbmc6IDAgJHtjdXN0b21Qcm9wZXJ0aWVzLnNwYWNpbmdNfTtcbiAgICAgIGhlaWdodDogMzZweDtcbiAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7XG4gICAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICR7cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICA/IGBcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3VzdG9tUHJvcGVydGllcy5jb2xvckFjY2VudH07XG4gICAgICAgICAgICBjb2xvcjogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yU3VyZmFjZX07XG4gICAgICAgICAgYFxuICAgICAgICA6ICcnfVxuICAgIGB9XG4gICAgb25Nb3VzZUVudGVyPXtwcm9wcy5vbk1vdXNlRW50ZXJ9XG4gICAgb25DbGljaz17cHJvcHMub25DbGlja31cbiAgPlxuICAgIDxkaXZcbiAgICAgIGNzcz17Y3NzYFxuICAgICAgICBmbGV4OiAxIGF1dG87XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgYH1cbiAgICA+XG4gICAgICB7cHJvcHMuY29tbWFuZC50ZXh0fVxuICAgIDwvZGl2PlxuICAgIHsoKEFycmF5LmlzQXJyYXkocHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcykgJiZcbiAgICAgIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgIHR5cGVvZiBwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzID09PSAnZnVuY3Rpb24nKSAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICA+ICoge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICBgfVxuICAgICAgPlxuICAgICAgICA8QW5nbGVUaGluUmlnaHRJY29uXG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgY29sb3I9e3Byb3BzLmlzU2VsZWN0ZWQgPyAnc3VyZmFjZScgOiAnbmV1dHJhbDYwJ31cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuQnV0bGVyQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdCdXRsZXJDb21tYW5kJztcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyQ29tbWFuZDtcbiJdfQ== */",
129
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
130
+ };
131
+ var _ref2 = process.env.NODE_ENV === "production" ? {
132
+ name: "lhzw0z",
133
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis"
134
+ } : {
135
+ name: "zq3ooq-ButlerCommand",
136
+ styles: "flex:1 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;label:ButlerCommand;",
137
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQ2MiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */",
138
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1
139
+ };
140
+ const ButlerCommand = props => {
141
+ var _context;
142
+ return jsxRuntime.jsxs("div", {
143
+ "data-testid": "quick-access-result(".concat(props.command.id, ")"),
144
+ "aria-current": props.isSelected === true ? 'true' : 'false',
145
+ css: /*#__PURE__*/react.css("display:flex;padding:0 ", designSystem.customProperties.spacingM, ";height:36px;font-size:16px;font-weight:200;line-height:36px;cursor:default;", props.isSelected === true ? _concatInstanceProperty__default["default"](_context = "\n background: ".concat(designSystem.customProperties.colorAccent, ";\n color: ")).call(_context, designSystem.customProperties.colorSurface, ";\n ") : '', ";" + (process.env.NODE_ENV === "production" ? "" : ";label:ButlerCommand;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci1jb21tYW5kLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQlkiLCJmaWxlIjoiYnV0bGVyLWNvbW1hbmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW91c2VFdmVudEhhbmRsZXIgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBjdXN0b21Qcm9wZXJ0aWVzIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBBbmdsZVRoaW5SaWdodEljb24gfSBmcm9tICdAY29tbWVyY2V0b29scy11aWtpdC9pY29ucyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbW1hbmQ6IENvbW1hbmQ7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrOiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD47XG4gIG9uTW91c2VFbnRlcjogTW91c2VFdmVudEhhbmRsZXI8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuY29uc3QgQnV0bGVyQ29tbWFuZCA9IChwcm9wczogUHJvcHMpID0+IChcbiAgPGRpdlxuICAgIGtleT17cHJvcHMuY29tbWFuZC5pZH1cbiAgICBkYXRhLXRlc3RpZD17YHF1aWNrLWFjY2Vzcy1yZXN1bHQoJHtwcm9wcy5jb21tYW5kLmlkfSlgfVxuICAgIGFyaWEtY3VycmVudD17cHJvcHMuaXNTZWxlY3RlZCA9PT0gdHJ1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgY3NzPXtjc3NgXG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcGFkZGluZzogMCAke2N1c3RvbVByb3BlcnRpZXMuc3BhY2luZ019O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgJHtwcm9wcy5pc1NlbGVjdGVkID09PSB0cnVlXG4gICAgICAgID8gYFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjdXN0b21Qcm9wZXJ0aWVzLmNvbG9yQWNjZW50fTtcbiAgICAgICAgICAgIGNvbG9yOiAke2N1c3RvbVByb3BlcnRpZXMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICBgXG4gICAgICAgIDogJyd9XG4gICAgYH1cbiAgICBvbk1vdXNlRW50ZXI9e3Byb3BzLm9uTW91c2VFbnRlcn1cbiAgICBvbkNsaWNrPXtwcm9wcy5vbkNsaWNrfVxuICA+XG4gICAgPGRpdlxuICAgICAgY3NzPXtjc3NgXG4gICAgICAgIGZsZXg6IDEgYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBgfVxuICAgID5cbiAgICAgIHtwcm9wcy5jb21tYW5kLnRleHR9XG4gICAgPC9kaXY+XG4gICAgeygoQXJyYXkuaXNBcnJheShwcm9wcy5jb21tYW5kLnN1YkNvbW1hbmRzKSAmJlxuICAgICAgcHJvcHMuY29tbWFuZC5zdWJDb21tYW5kcy5sZW5ndGggPiAwKSB8fFxuICAgICAgdHlwZW9mIHByb3BzLmNvbW1hbmQuc3ViQ29tbWFuZHMgPT09ICdmdW5jdGlvbicpICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgID4gKiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICA+XG4gICAgICAgIDxBbmdsZVRoaW5SaWdodEljb25cbiAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICBjb2xvcj17cHJvcHMuaXNTZWxlY3RlZCA/ICdzdXJmYWNlJyA6ICduZXV0cmFsNjAnfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5CdXRsZXJDb21tYW5kLmRpc3BsYXlOYW1lID0gJ0J1dGxlckNvbW1hbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBCdXRsZXJDb21tYW5kO1xuIl19 */"),
146
+ onMouseEnter: props.onMouseEnter,
147
+ onClick: props.onClick,
148
+ children: [jsxRuntime.jsx("div", {
149
+ css: _ref2,
150
+ children: props.command.text
151
+ }), (_Array$isArray__default["default"](props.command.subCommands) && props.command.subCommands.length > 0 || typeof props.command.subCommands === 'function') && jsxRuntime.jsx("div", {
152
+ css: _ref$1,
153
+ children: jsxRuntime.jsx(icons.AngleThinRightIcon, {
154
+ size: "medium",
155
+ color: props.isSelected ? 'surface' : 'neutral60'
156
+ })
157
+ })]
158
+ }, props.command.id);
159
+ };
160
+ ButlerCommand.propTypes = process.env.NODE_ENV !== "production" ? {
161
+ command: _pt__default["default"].any.isRequired,
162
+ isSelected: _pt__default["default"].bool,
163
+ onClick: _pt__default["default"].func.isRequired,
164
+ onMouseEnter: _pt__default["default"].func.isRequired
165
+ } : {};
166
+ ButlerCommand.displayName = 'ButlerCommand';
167
+
168
+ var messages = reactIntl.defineMessages({
169
+ inputPlacehoder: {
170
+ id: 'QuickAccess.inputPlaceholder',
171
+ defaultMessage: 'Go to...'
172
+ },
173
+ offline: {
174
+ id: 'QuickAccess.offline',
175
+ defaultMessage: 'Offline'
176
+ },
177
+ noResults: {
178
+ id: 'QuickAccess.noResults',
179
+ defaultMessage: 'No results found'
180
+ },
181
+ // create-commands
182
+ setResourceLanguage: {
183
+ id: 'QuickAccess.setResourceLanguage',
184
+ defaultMessage: 'Set Resource Language'
185
+ },
186
+ openDashboard: {
187
+ id: 'QuickAccess.openDashboard',
188
+ defaultMessage: 'Open Dashboard'
189
+ },
190
+ openProducts: {
191
+ id: 'QuickAccess.openProducts',
192
+ defaultMessage: 'Open Products'
193
+ },
194
+ openProductList: {
195
+ id: 'QuickAccess.openProductList',
196
+ defaultMessage: 'Open Product List'
197
+ },
198
+ openProductVariantGeneral: {
199
+ id: 'QuickAccess.openProductVariantGeneral',
200
+ defaultMessage: 'General'
201
+ },
202
+ openProductVariantList: {
203
+ id: 'QuickAccess.openProductVariantList',
204
+ defaultMessage: 'Variants'
205
+ },
206
+ openProductVariantSearch: {
207
+ id: 'QuickAccess.openProductVariantSearch',
208
+ defaultMessage: 'Int. / Ext. Search'
209
+ },
210
+ openModifiedProducts: {
211
+ id: 'QuickAccess.openModifiedProducts',
212
+ defaultMessage: 'Open Review Modified Products'
213
+ },
214
+ openPimSearch: {
215
+ id: 'QuickAccess.openPimSearch',
216
+ defaultMessage: 'Open PIM Search'
217
+ },
218
+ openAddProducts: {
219
+ id: 'QuickAccess.openAddProducts',
220
+ defaultMessage: 'Open Add Products'
221
+ },
222
+ openCategories: {
223
+ id: 'QuickAccess.openCategories',
224
+ defaultMessage: 'Open Categories'
225
+ },
226
+ openCategoriesList: {
227
+ id: 'QuickAccess.openCategoriesList',
228
+ defaultMessage: 'Open Categories List'
229
+ },
230
+ openCategoriesSearch: {
231
+ id: 'QuickAccess.openCategoriesSearch',
232
+ defaultMessage: 'Open Categories Search'
233
+ },
234
+ openAddCategory: {
235
+ id: 'QuickAccess.openAddCategory',
236
+ defaultMessage: 'Open Add Category'
237
+ },
238
+ openCustomers: {
239
+ id: 'QuickAccess.openCustomers',
240
+ defaultMessage: 'Open Customers'
241
+ },
242
+ openCustomersList: {
243
+ id: 'QuickAccess.openCustomersList',
244
+ defaultMessage: 'Open Customers List'
245
+ },
246
+ openAddCustomer: {
247
+ id: 'QuickAccess.openAddCustomer',
248
+ defaultMessage: 'Open Add Customer'
249
+ },
250
+ openCustomerGroupsList: {
251
+ id: 'QuickAccess.openCustomerGroupsList',
252
+ defaultMessage: 'Open Customer Groups List'
253
+ },
254
+ openAddCustomerGroup: {
255
+ id: 'QuickAccess.openAddCustomerGroup',
256
+ defaultMessage: 'Open Add Customer Group'
257
+ },
258
+ openOrders: {
259
+ id: 'QuickAccess.openOrders',
260
+ defaultMessage: 'Open Orders'
261
+ },
262
+ openOrdersList: {
263
+ id: 'QuickAccess.openOrdersList',
264
+ defaultMessage: 'Open Orders List'
265
+ },
266
+ openAddOrder: {
267
+ id: 'QuickAccess.openAddOrder',
268
+ defaultMessage: 'Open Add Order'
269
+ },
270
+ openDiscounts: {
271
+ id: 'QuickAccess.openDiscounts',
272
+ defaultMessage: 'Open Discounts'
273
+ },
274
+ openProductDiscountsList: {
275
+ id: 'QuickAccess.openProductDiscountsList',
276
+ defaultMessage: 'Open Product Discounts List'
277
+ },
278
+ openCartDiscountsList: {
279
+ id: 'QuickAccess.openCartDiscountsList',
280
+ defaultMessage: 'Open Cart Discounts List'
281
+ },
282
+ openDiscountCodesList: {
283
+ id: 'QuickAccess.openDiscountCodesList',
284
+ defaultMessage: 'Open Discount Codes List'
285
+ },
286
+ openAddDiscount: {
287
+ id: 'QuickAccess.openAddDiscount',
288
+ defaultMessage: 'Open Add Discount'
289
+ },
290
+ openAddProductDiscount: {
291
+ id: 'QuickAccess.openAddProductDiscount',
292
+ defaultMessage: 'Open Add Product Discount'
293
+ },
294
+ openAddCartDiscount: {
295
+ id: 'QuickAccess.openAddCartDiscount',
296
+ defaultMessage: 'Open Add Cart Discount'
297
+ },
298
+ openAddDiscountCode: {
299
+ id: 'QuickAccess.openAddDiscountCode',
300
+ defaultMessage: 'Open Add Discount Code'
301
+ },
302
+ openSettings: {
303
+ id: 'QuickAccess.openSettings',
304
+ defaultMessage: 'Open Settings'
305
+ },
306
+ openProjectSettings: {
307
+ id: 'QuickAccess.openProjectSettings',
308
+ defaultMessage: 'Open Project Settings'
309
+ },
310
+ openProjectSettingsInternationalTab: {
311
+ id: 'QuickAccess.openProjectSettingsInternationalTab',
312
+ defaultMessage: 'Open Project Settings • International'
313
+ },
314
+ openProjectSettingsTaxesTab: {
315
+ id: 'QuickAccess.openProjectSettingsTaxesTab',
316
+ defaultMessage: 'Open Project Settings • Taxes'
317
+ },
318
+ openProjectSettingsShippingMethodsTab: {
319
+ id: 'QuickAccess.openProjectSettingsShippingMethodsTab',
320
+ defaultMessage: 'Open Project Settings • Shipping Methods'
321
+ },
322
+ openProjectSettingsChannelsTab: {
323
+ id: 'QuickAccess.openProjectSettingsChannelsTab',
324
+ defaultMessage: 'Open Project Settings • Channels'
325
+ },
326
+ openProjectSettingsStoresTab: {
327
+ id: 'QuickAccess.openProjectSettingsStoresTab',
328
+ defaultMessage: 'Open Project Settings • Stores'
329
+ },
330
+ openProductTypesSettings: {
331
+ id: 'QuickAccess.openProductTypesSettings',
332
+ defaultMessage: 'Open Product Types Settings'
333
+ },
334
+ openDeveloperSettings: {
335
+ id: 'QuickAccess.openDeveloperSettings',
336
+ defaultMessage: 'Open Developer Settings'
337
+ },
338
+ openCustomApplicationsSettings: {
339
+ id: 'QuickAccess.openCustomApplicationsSettings',
340
+ defaultMessage: 'Open Custom Applications Settings'
341
+ },
342
+ openApiClientsList: {
343
+ id: 'QuickAccess.openApiClientsList',
344
+ defaultMessage: 'Open API Clients'
345
+ },
346
+ openAddApiClient: {
347
+ id: 'QuickAccess.openAddApiClient',
348
+ defaultMessage: 'Open Add API Client'
349
+ },
350
+ openSupport: {
351
+ id: 'QuickAccess.openSupport',
352
+ defaultMessage: 'Open Support'
353
+ },
354
+ openMyProfile: {
355
+ id: 'QuickAccess.openMyProfile',
356
+ defaultMessage: 'Open My Profile'
357
+ },
358
+ showPrivacyPolicy: {
359
+ id: 'QuickAccess.showPrivacyPolicy',
360
+ defaultMessage: 'Show Privacy Policy'
361
+ },
362
+ logout: {
363
+ id: 'QuickAccess.logout',
364
+ defaultMessage: 'Logout'
365
+ },
366
+ useProject: {
367
+ id: 'QuickAccess.useProject',
368
+ defaultMessage: 'Switch to project "{projectName}"'
369
+ },
370
+ openManageProjects: {
371
+ id: 'QuickAccess.openManageProject',
372
+ defaultMessage: 'Open Manage Projects'
373
+ },
374
+ openManageOrganizations: {
375
+ id: 'QuickAccess.openManageOrganizations',
376
+ defaultMessage: 'Open Manage Organizations'
377
+ },
378
+ // subcommands
379
+ openVariantById: {
380
+ id: 'QuickAccess.openVariantById',
381
+ defaultMessage: 'Open Variant "{id}" (id)'
382
+ },
383
+ openVariantByKey: {
384
+ id: 'QuickAccess.openVariantByKey',
385
+ defaultMessage: 'Open Variant "{key}" (key)'
386
+ },
387
+ openVariantBySku: {
388
+ id: 'QuickAccess.openVariantBySku',
389
+ defaultMessage: 'Open Variant "{sku}" (sku)'
390
+ },
391
+ showProduct: {
392
+ id: 'QuickAccess.showProduct',
393
+ defaultMessage: 'Show Product "{productName}"'
394
+ },
395
+ showProductVariant: {
396
+ id: 'QuickAccess.showProductVariant',
397
+ defaultMessage: 'Show Product Variant "{variantName}"'
398
+ },
399
+ showProductVariantAttributes: {
400
+ id: 'QuickAccess.showProductVariantAttributes',
401
+ defaultMessage: 'Show Attributes'
402
+ },
403
+ showProductVariantImages: {
404
+ id: 'QuickAccess.showProductVariantImages',
405
+ defaultMessage: 'Show Images'
406
+ },
407
+ showProductVariantPrices: {
408
+ id: 'QuickAccess.showProductVariantPrices',
409
+ defaultMessage: 'Show Prices'
410
+ },
411
+ showProductVariantInventory: {
412
+ id: 'QuickAccess.showProductVariantInventory',
413
+ defaultMessage: 'Show Inventory'
414
+ }
415
+ });
416
+
417
+ var _templateObject$3, _templateObject2$2;
418
+ function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
419
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context12, _context13; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context12 = ownKeys(Object(t), !0)).call(_context12, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context13 = ownKeys(Object(t))).call(_context13, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
420
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
421
+ const isSelectAllCombo = event => event.key === 'a' && event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
422
+ const isCloseCombo = event => event.key === 'Escape' && !event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
423
+ const getPlatform = () => {
424
+ var _context, _context2, _context3, _context4;
425
+ if (_includesInstanceProperty__default["default"](_context = navigator.appVersion).call(_context, 'Win')) return 'windows';
426
+ if (_includesInstanceProperty__default["default"](_context2 = navigator.appVersion).call(_context2, 'Mac')) return 'macos';
427
+ if (_includesInstanceProperty__default["default"](_context3 = navigator.appVersion).call(_context3, 'X11')) return 'unix';
428
+ if (_includesInstanceProperty__default["default"](_context4 = navigator.appVersion).call(_context4, 'Linux')) return 'linux';
429
+ return null;
430
+ };
431
+ const hasNewWindowModifier = event => {
432
+ const platform = getPlatform();
433
+ switch (platform) {
434
+ case 'macos':
435
+ return event.metaKey;
436
+ default:
437
+ return event.ctrlKey;
438
+ }
439
+ };
440
+ const shakeAnimation = react.keyframes(_templateObject$3 || (_templateObject$3 = _taggedTemplateLiteral(["\n from,\n to {\n transform: translate3d(0, 0, 0);\n }\n\n 14%,\n 42%,\n 70% {\n transform: translate3d(-3px, 0, 0);\n }\n\n 28%,\n 56%,\n 84% {\n transform: translate3d(3px, 0, 0);\n }\n"])));
441
+ const initialState = {
442
+ hasNetworkError: false,
443
+ isLoading: false,
444
+ searchText: '',
445
+ selectedResult: -1,
446
+ // Used for UX when browsing through history
447
+ enableHistory: true,
448
+ results: [],
449
+ stack: []
450
+ };
451
+ const reducer = function () {
452
+ var _context5;
453
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
454
+ let action = arguments.length > 1 ? arguments[1] : undefined;
455
+ switch (action.type) {
456
+ case 'networkError':
457
+ return _objectSpread(_objectSpread({}, state), {}, {
458
+ hasNetworkError: action.payload
459
+ });
460
+ case 'loading':
461
+ return _objectSpread(_objectSpread({}, state), {}, {
462
+ isLoading: action.payload
463
+ });
464
+ case 'selectedResult':
465
+ return _objectSpread(_objectSpread({}, state), {}, {
466
+ selectedResult: action.payload
467
+ });
468
+ case 'incrementSelectedResult':
469
+ return _objectSpread(_objectSpread({}, state), {}, {
470
+ selectedResult: state.selectedResult === state.results.length - 1 ? 0 : state.selectedResult + 1,
471
+ enableHistory: false
472
+ });
473
+ case 'decrementSelectedResult':
474
+ return _objectSpread(_objectSpread({}, state), {}, {
475
+ selectedResult: state.selectedResult < 1 ? state.results.length - 1 : state.selectedResult - 1,
476
+ enableHistory: false
477
+ });
478
+ case 'pickCommandFromHistory':
479
+ return _objectSpread(_objectSpread({}, state), {}, {
480
+ selectedResult: 0,
481
+ searchText: action.payload.searchText,
482
+ results: action.payload.results,
483
+ stack: []
484
+ // The history does not get changed here, it will be changed along
485
+ // with the regular flow.
486
+ });
487
+
488
+ case 'setNextCommands':
489
+ return _objectSpread(_objectSpread({}, state), {}, {
490
+ stack: [...state.stack, {
491
+ searchText: state.searchText,
492
+ results: state.results,
493
+ selectedResult: state.selectedResult
494
+ }],
495
+ selectedResult: 0,
496
+ enableHistory: false,
497
+ results: action.payload.results
498
+ });
499
+ case 'setPrevCommands':
500
+ return _objectSpread(_objectSpread({}, state), {}, {
501
+ searchText: action.payload.searchText,
502
+ results: action.payload.results,
503
+ selectedResult: 0,
504
+ enableHistory: false,
505
+ // omit last item
506
+ stack: _sliceInstanceProperty__default["default"](_context5 = state.stack).call(_context5, 0, -1)
507
+ });
508
+ case 'searchText':
509
+ return _objectSpread(_objectSpread({}, state), {}, {
510
+ searchText: action.payload,
511
+ // clear network error when search text is cleared, so that users
512
+ // are tempted to retry
513
+ hasNetworkError: action.payload.length > 0 && state.hasNetworkError
514
+ });
515
+ case 'setSearchTextResults':
516
+ return _objectSpread(_objectSpread({}, state), {}, {
517
+ results: action.payload,
518
+ selectedResult: action.payload.length > 0 ? 0 : -1,
519
+ enableHistory: true,
520
+ stack: []
521
+ });
522
+ case 'resetSearchText':
523
+ return _objectSpread(_objectSpread({}, state), {}, {
524
+ searchText: '',
525
+ results: [],
526
+ selectedResult: -1
527
+ });
528
+ case 'resetResultsWhenClosing':
529
+ return _objectSpread(_objectSpread({}, state), {}, {
530
+ selectedResult: -1,
531
+ enableHistory: true
532
+ });
533
+ case 'reset':
534
+ return initialState;
535
+ default:
536
+ return state;
537
+ }
538
+ };
539
+ var _ref = process.env.NODE_ENV === "production" ? {
540
+ name: "zjik7",
541
+ styles: "display:flex"
542
+ } : {
543
+ name: "vnvgom-Butler",
544
+ styles: "display:flex;label:Butler;",
545
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ25Ca0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */",
546
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
547
+ };
548
+ const Butler = props => {
549
+ const intl = reactIntl.useIntl();
550
+ const _useReducer = react$1.useReducer(reducer, initialState),
551
+ _useReducer2 = _slicedToArray(_useReducer, 2),
552
+ state = _useReducer2[0],
553
+ dispatch = _useReducer2[1];
554
+ const shouldSelectFieldText = react$1.useRef(false);
555
+ const isNewWindowCombo = react$1.useRef(false);
556
+ const skipNextSelection = react$1.useRef(false);
557
+ const searchContainerRef = react$1.useRef(null);
558
+ const searchInputRef = react$1.useRef(null);
559
+ const setHasNetworkError = react$1.useCallback(() => {
560
+ dispatch({
561
+ type: 'networkError',
562
+ payload: true
563
+ });
564
+ }, []);
565
+ const unsetHasNetworkError = react$1.useCallback(() => {
566
+ dispatch({
567
+ type: 'networkError',
568
+ payload: false
569
+ });
570
+ }, []);
571
+ const setIsLoading = react$1.useCallback(() => {
572
+ dispatch({
573
+ type: 'loading',
574
+ payload: true
575
+ });
576
+ }, []);
577
+ const unsetIsLoading = react$1.useCallback(() => {
578
+ dispatch({
579
+ type: 'loading',
580
+ payload: false
581
+ });
582
+ }, []);
583
+
584
+ // Destructure functions from props to reference them in the hook dependency list
585
+ const searchFromParent = props.search,
586
+ onCloseFromParent = props.onClose,
587
+ executeCommandFromParent = props.executeCommand,
588
+ onHistoryEntriesChangeFromParent = props.onHistoryEntriesChange,
589
+ getNextCommandsFromParent = props.getNextCommands;
590
+ const shake = react$1.useCallback(() => {
591
+ if (searchContainerRef.current) {
592
+ searchContainerRef.current.classList.remove(props.classNameShakeAnimation);
593
+ // -> triggering reflow
594
+ // eslint-disable-next-line no-void
595
+ void searchContainerRef.current.offsetWidth;
596
+ searchContainerRef.current.classList.add(props.classNameShakeAnimation);
597
+ }
598
+ }, [props.classNameShakeAnimation]);
599
+ const execute = react$1.useCallback((command, meta) => {
600
+ var _context6;
601
+ // Only main entries get added to history, so when a subcommand is executed,
602
+ // we add the main command of it to the history (the top-level command).
603
+ //
604
+ // The key to identify history entries by is always the searchText
605
+ // There will never be two history entries with the same searchText
606
+ const entry = state.stack.length === 0 ?
607
+ // The stack is empty, so we are executing a top-level command
608
+ {
609
+ searchText: state.searchText,
610
+ results: state.results
611
+ } :
612
+ // We are executing a subcommand, so we get the top-level command for it,
613
+ // which is at the bottom of the stack.
614
+ {
615
+ searchText: state.stack[0].searchText,
616
+ results: state.stack[0].results
617
+ };
618
+
619
+ // Add the entry to the history, while excluding any earlier history entry
620
+ // with the same search text. This effectively "moves" that entry to the
621
+ // top of the history (with the most recent results), or appends a new entry
622
+ // when it didn't exist before.
623
+ onHistoryEntriesChangeFromParent([..._filterInstanceProperty__default["default"](_context6 = props.historyEntries).call(_context6, command => command.searchText !== entry.searchText), entry]);
624
+ dispatch({
625
+ type: 'resetSearchText'
626
+ });
627
+ onCloseFromParent();
628
+ executeCommandFromParent(command, meta);
629
+ }, [executeCommandFromParent, onCloseFromParent, onHistoryEntriesChangeFromParent, props.historyEntries, state.results, state.searchText, state.stack]);
630
+ const handleKeyDown = react$1.useCallback(event => {
631
+ // Preventing cursor jumps can only happen in onKeyDown, but not in onKeyUp
632
+ event.persist();
633
+
634
+ // We want to know when the user presses cmd+enter (cmd being a meta key).
635
+ // We are only told about this in keyDown, but not in keyUp, so we need
636
+ // to handle it here
637
+ if (event.key === 'Enter' && hasNewWindowModifier(event)) {
638
+ isNewWindowCombo.current = true;
639
+ return;
640
+ }
641
+
642
+ // Avoid selecting the whole page when user selectes everything with
643
+ // a keyboard shortcut. There is probably a better way to do this though.
644
+ // This prevents the whole page from being selected in case the user
645
+ // 1) opens the search box
646
+ // 2) types into it
647
+ // 3) selects all text using cmd+a
648
+ // 4) closes the search box with esc
649
+ // Without this handling, the whole page would now be selected
650
+ if (isSelectAllCombo(event)) {
651
+ // This stops the browser from selecting anything
652
+ event.preventDefault();
653
+ if (searchInputRef.current) {
654
+ // This selects the text in the search input
655
+ searchInputRef.current.setSelectionRange(0, state.searchText.length);
656
+ }
657
+ return;
658
+ }
659
+
660
+ // avoid interfering with other key combinations using modifier keys
661
+ if (event.ctrlKey || event.altKey || event.shiftKey || event.metaKey) return;
662
+ if (isCloseCombo(event)) return;
663
+
664
+ // skip next mouseEnter to avoid setting selectedResult when cursor just
665
+ // happens to be where the results will pop up
666
+ skipNextSelection.current = true;
667
+ if (event.key === 'ArrowDown') {
668
+ // prevent cursor from jumping to end of text input
669
+ event.preventDefault();
670
+ dispatch({
671
+ type: 'incrementSelectedResult'
672
+ });
673
+ return;
674
+ }
675
+ if (event.key === 'ArrowUp') {
676
+ // browse through history
677
+ if (state.searchText.length === 0 || state.selectedResult < 1 && state.enableHistory) {
678
+ var _context7;
679
+ shouldSelectFieldText.current = true;
680
+ const selectedIndex = state.searchText.length === 0 ?
681
+ // When going back the first step
682
+ -1 :
683
+ // When going back more than one step
684
+ _findIndexInstanceProperty__default["default"](_context7 = props.historyEntries).call(_context7, command => command.searchText === state.searchText);
685
+ // Pick the previous command from the history
686
+ const prevCommand = selectedIndex === -1 ?
687
+ // previous command on top of the history when going back on
688
+ // first step
689
+ last__default["default"](props.historyEntries) :
690
+ // previous command is deeper down
691
+ // When the history does not exist (negative index), then
692
+ // this implicitly returns undefined
693
+ props.historyEntries[selectedIndex - 1];
694
+ // Skip when no previous entry exists in the history
695
+ if (!prevCommand) return;
696
+ dispatch({
697
+ type: 'pickCommandFromHistory',
698
+ payload: {
699
+ searchText: prevCommand.searchText,
700
+ results: prevCommand.results
701
+ }
702
+ });
703
+ return;
704
+ }
705
+ // prevent cursor from jumping to beginning of text input
706
+ event.preventDefault();
707
+ dispatch({
708
+ type: 'decrementSelectedResult'
709
+ });
710
+ return;
711
+ }
712
+ if (state.selectedResult > -1) {
713
+ if (event.key === 'ArrowRight') {
714
+ const command = state.results[state.selectedResult];
715
+ const searchText = state.searchText;
716
+ const isCursorAtEnd = searchInputRef.current && state.searchText.length === searchInputRef.current.selectionStart;
717
+ const isEverythingSelected = searchInputRef.current && searchInputRef.current.selectionStart === 0 && state.searchText.length === searchInputRef.current.selectionEnd;
718
+
719
+ // only allow diving in when cursor is at end of input or when
720
+ // the complete text is selected (when browsing through history)
721
+ if (!isCursorAtEnd && !isEverythingSelected) return;
722
+ unsetHasNetworkError();
723
+
724
+ // NOTE: since we need to fetch the "next command", which is an async operation,
725
+ // we use a IIFE to process that and eventually update the state.
726
+ (async () => {
727
+ if (command) {
728
+ const nextCommands = await getNextCommandsFromParent(command);
729
+ // avoid moving cursor when there are sub-options
730
+ if (nextCommands.length > 0) {
731
+ // Ensure the search text has not changed while we were loading
732
+ // the next results, otherwise we'd interrupt the user.
733
+ // Throw away the results in case the search text has changed.
734
+ if (state.searchText === searchText) {
735
+ dispatch({
736
+ type: 'setNextCommands',
737
+ payload: {
738
+ results: nextCommands
739
+ }
740
+ });
741
+ }
742
+ return;
743
+ }
744
+ }
745
+ shake();
746
+ })();
747
+ return;
748
+ }
749
+ if (event.key === 'ArrowLeft') {
750
+ // go left in stack
751
+ const prevCommand = last__default["default"](state.stack);
752
+
753
+ // do nothing when we can't go left anymore
754
+ if (!prevCommand) return;
755
+
756
+ // prevent cursor from jumping a char to the left in text input
757
+ event.preventDefault();
758
+ dispatch({
759
+ type: 'setPrevCommands',
760
+ payload: {
761
+ searchText: prevCommand.searchText,
762
+ results: prevCommand.results
763
+ }
764
+ });
765
+ return;
766
+ }
767
+ }
768
+ }, [getNextCommandsFromParent, props.historyEntries, shake, state, unsetHasNetworkError]);
769
+ const handleKeyUp = react$1.useCallback(event => {
770
+ // setting the selection can only happen in onKeyUp
771
+ if (shouldSelectFieldText.current) {
772
+ const input = event.target;
773
+ input.focus();
774
+ input.select();
775
+ shouldSelectFieldText.current = false;
776
+ }
777
+ if (event.key !== 'Enter' && !isNewWindowCombo.current) return true;
778
+
779
+ // User just triggered the search
780
+ if (state.selectedResult === -1) return true;
781
+
782
+ // User had something selected and wants to go there
783
+ execute(state.results[state.selectedResult], {
784
+ openInNewTab: isNewWindowCombo.current
785
+ });
786
+ isNewWindowCombo.current = false;
787
+ return true;
788
+ }, [execute, state.results, state.selectedResult]);
789
+ const handleChange = react$1.useCallback(event => {
790
+ const searchText = event.target.value;
791
+ if (_trimInstanceProperty__default["default"](searchText).call(searchText).length === 0) {
792
+ dispatch({
793
+ type: 'reset'
794
+ });
795
+ return;
796
+ }
797
+ dispatch({
798
+ type: 'searchText',
799
+ payload: searchText
800
+ });
801
+
802
+ // A search via network is only triggered when there
803
+ // are more than three characters. So no false loading
804
+ // indication is given.
805
+ if (_trimInstanceProperty__default["default"](searchText).call(searchText).length > 3) {
806
+ setIsLoading();
807
+ }
808
+ searchFromParent(searchText).then(asyncResults => {
809
+ var _context8, _context9;
810
+ unsetHasNetworkError();
811
+ unsetIsLoading();
812
+ const fuse = new Fuse__default["default"](asyncResults, {
813
+ keys: [{
814
+ name: 'text',
815
+ weight: 0.6
816
+ }, {
817
+ name: 'keywords',
818
+ weight: 0.4
819
+ }],
820
+ minMatchCharLength: 2,
821
+ includeScore: true
822
+ });
823
+ const searchResults = _sliceInstanceProperty__default["default"](_context8 = _filterInstanceProperty__default["default"](_context9 = fuse.search(searchText)
824
+ // Filter out results with a matching score over 0.75
825
+ ).call(_context9, result => result.score ? result.score < 0.75 : false)
826
+ // Keep a maximal of 9 results
827
+ ).call(_context8, 0, 9);
828
+ dispatch({
829
+ type: 'setSearchTextResults',
830
+ payload: _mapInstanceProperty__default["default"](searchResults).call(searchResults, result => result.item)
831
+ });
832
+ }, error => {
833
+ // eslint-disable-next-line no-console
834
+ if (process.env.NODE_ENV !== 'production') console.error(error);
835
+ unsetIsLoading();
836
+ setHasNetworkError();
837
+ });
838
+ }, [searchFromParent, setHasNetworkError, setIsLoading, unsetHasNetworkError, unsetIsLoading]);
839
+ const handleContainerClick = react$1.useCallback(() => {
840
+ dispatch({
841
+ type: 'resetResultsWhenClosing'
842
+ });
843
+ onCloseFromParent();
844
+ }, [onCloseFromParent]);
845
+ const createCommandMouseEnterHandler = react$1.useCallback(index => () => {
846
+ // In case the cursor happened to be in a location where a
847
+ // result would appear, it would trigger onMouseEnter and the
848
+ // result would be selected immediately. This is not something
849
+ // a user would expect, hence we prevent it from happening.
850
+ // The user has to move the cursor to an option explicitly for
851
+ // it to become active. However, the user can always click and
852
+ // that action will be triggered.
853
+ if (skipNextSelection.current) {
854
+ skipNextSelection.current = false;
855
+ return;
856
+ }
857
+
858
+ // sets the selected result, mainly for the hover effect
859
+ dispatch({
860
+ type: 'selectedResult',
861
+ payload: index
862
+ });
863
+ }, []);
864
+ const createCommandClickHandler = react$1.useCallback(command => event => {
865
+ execute(command, {
866
+ openInNewTab: hasNewWindowModifier(event)
867
+ });
868
+ }, [execute]);
869
+ return jsxRuntime.jsx(dist_commercetoolsFrontendApplicationShell.ButlerContainer, {
870
+ onClick: handleContainerClick,
871
+ "data-testid": "quick-access",
872
+ tabIndex: -1,
873
+ children: jsxRuntime.jsxs("div", {
874
+ ref: searchContainerRef,
875
+ css: /*#__PURE__*/react.css("background-color:", designSystem.designTokens.colorSurface, ";border:0;border-radius:", designSystem.designTokens.borderRadius4, ";min-height:40px;z-index:20002;width:400px;margin:40px auto;overflow:hidden;-webkit-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);-moz-box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);box-shadow:0 10px 30px -8px rgba(0, 0, 0, 0.75);padding-bottom:", state.hasNetworkError ? '0' : designSystem.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcWxCZ0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
876
+ onClick: event => {
877
+ // Avoid closing when the searchContainer itself is clicked
878
+ // If we don't do this, then the overlay will close when e.g.
879
+ // the search input is clicked.
880
+ event.stopPropagation();
881
+ event.preventDefault();
882
+ },
883
+ children: [jsxRuntime.jsxs("div", {
884
+ css: _ref,
885
+ children: [jsxRuntime.jsx("label", {
886
+ htmlFor: "quick-access-search-input",
887
+ css: /*#__PURE__*/react.css("align-self:center;padding-left:", designSystem.designTokens.spacingM, ";margin-top:", designSystem.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc25Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
888
+ children: jsxRuntime.jsx(icons.SearchIcon, {
889
+ color: "neutral60"
890
+ })
891
+ }), jsxRuntime.jsx("input", {
892
+ id: "quick-access-search-input",
893
+ ref: searchInputRef,
894
+ placeholder: intl.formatMessage(messages.inputPlacehoder),
895
+ type: "text",
896
+ css: /*#__PURE__*/react.css("width:100%;border:0;outline:0;font-size:22px;font-weight:300;padding:", designSystem.designTokens.spacingM, " ", designSystem.designTokens.spacingM, " ", designSystem.designTokens.spacingS, " ", designSystem.designTokens.spacingS, ";&::placeholder{color:", designSystem.designTokens.colorNeutral60, ";}" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbW9Cb0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
897
+ value: state.searchText,
898
+ onChange: handleChange,
899
+ onKeyDown: handleKeyDown,
900
+ onKeyUp: handleKeyUp,
901
+ autoFocus: true,
902
+ autoComplete: "off",
903
+ "data-testid": "quick-access-search-input"
904
+ }), state.isLoading && jsxRuntime.jsx("div", {
905
+ css: /*#__PURE__*/react.css("align-self:center;margin-top:", designSystem.designTokens.spacingS, ";margin-right:", designSystem.designTokens.spacingS, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMHBCc0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
906
+ children: jsxRuntime.jsx(LoadingSpinner__default["default"], {})
907
+ })]
908
+ }), ((_context10, _context11) => {
909
+ if (state.hasNetworkError) return jsxRuntime.jsx("div", {
910
+ css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.designTokens.colorError, ";text-align:center;text-transform:uppercase;color:", designSystem.designTokens.colorSurface, ";font-size:", designSystem.designTokens.fontSize20, ";padding:", designSystem.designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd3FCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
911
+ children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.offline))
912
+ });
913
+ if (state.results.length === 0 && _trimInstanceProperty__default["default"](_context10 = state.searchText).call(_context10).length > 0) return jsxRuntime.jsx("div", {
914
+ css: /*#__PURE__*/react.css("overflow:hidden;white-space:nowrap;cursor:default;background:", designSystem.designTokens.colorNeutral, ";color:", designSystem.designTokens.colorSolid, ";text-align:center;text-transform:uppercase;font-size:", designSystem.designTokens.fontSize20, ";padding:", designSystem.designTokens.spacingXs, ";" + (process.env.NODE_ENV === "production" ? "" : ";label:Butler;"), process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dGxlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMnJCd0IiLCJmaWxlIjoiYnV0bGVyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEtleWJvYXJkRXZlbnRIYW5kbGVyLFxuICBDaGFuZ2VFdmVudEhhbmRsZXIsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICB1c2VSZWR1Y2VyLFxuICB1c2VSZWYsXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcywgQ2xhc3NOYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnbG9kYXNoL2xhc3QnO1xuaW1wb3J0IHsgRm9ybWF0dGVkTWVzc2FnZSwgdXNlSW50bCB9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHsgZGVzaWduVG9rZW5zIGFzIHVpS2l0RGVzaWduVG9rZW5zIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBTZWFyY2hJY29uIH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtdWlraXQvaWNvbnMnO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJ0Bjb21tZXJjZXRvb2xzLXVpa2l0L2xvYWRpbmctc3Bpbm5lcic7XG5pbXBvcnQgQnV0bGVyQ29tbWFuZCBmcm9tICcuLi9idXRsZXItY29tbWFuZCc7XG5pbXBvcnQgQnV0bGVyQ29udGFpbmVyIGZyb20gJy4uL2J1dGxlci1jb250YWluZXInO1xuaW1wb3J0IG1lc3NhZ2VzIGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgU2VhcmNoVGV4dCxcbiAgU2VsZWN0ZWRSZXN1bHQsXG4gIFN0YWNrLFxuICBIaXN0b3J5RW50cnksXG59IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgaXNTZWxlY3RBbGxDb21ibyA9IChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgZXZlbnQua2V5ID09PSAnYScgJiZcbiAgZXZlbnQubWV0YUtleSAmJlxuICAhZXZlbnQuY3RybEtleSAmJlxuICAhZXZlbnQuYWx0S2V5ICYmXG4gICFldmVudC5zaGlmdEtleTtcblxuY29uc3QgaXNDbG9zZUNvbWJvID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PlxuICBldmVudC5rZXkgPT09ICdFc2NhcGUnICYmXG4gICFldmVudC5tZXRhS2V5ICYmXG4gICFldmVudC5jdHJsS2V5ICYmXG4gICFldmVudC5hbHRLZXkgJiZcbiAgIWV2ZW50LnNoaWZ0S2V5O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9ICgpID0+IHtcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdXaW4nKSkgcmV0dXJuICd3aW5kb3dzJztcbiAgaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluY2x1ZGVzKCdNYWMnKSkgcmV0dXJuICdtYWNvcyc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnWDExJykpIHJldHVybiAndW5peCc7XG4gIGlmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmNsdWRlcygnTGludXgnKSkgcmV0dXJuICdsaW51eCc7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5jb25zdCBoYXNOZXdXaW5kb3dNb2RpZmllciA9IChcbiAgZXZlbnQ6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+IHwgTW91c2VFdmVudDxIVE1MRWxlbWVudD5cbikgPT4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKCk7XG4gIHN3aXRjaCAocGxhdGZvcm0pIHtcbiAgICBjYXNlICdtYWNvcyc6XG4gICAgICByZXR1cm4gZXZlbnQubWV0YUtleTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGV2ZW50LmN0cmxLZXk7XG4gIH1cbn07XG5cbmNvbnN0IHNoYWtlQW5pbWF0aW9uID0ga2V5ZnJhbWVzYFxuICBmcm9tLFxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxuXG4gIDE0JSxcbiAgNDIlLFxuICA3MCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTNweCwgMCwgMCk7XG4gIH1cblxuICAyOCUsXG4gIDU2JSxcbiAgODQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDNweCwgMCwgMCk7XG4gIH1cbmA7XG5cbnR5cGUgU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0O1xuICBzZWxlY3RlZFJlc3VsdDogU2VsZWN0ZWRSZXN1bHQ7XG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IGJvb2xlYW47XG4gIHJlc3VsdHM6IENvbW1hbmRbXTtcbiAgc3RhY2s6IFN0YWNrW107XG59O1xudHlwZSBBY3Rpb24gPVxuICB8IHsgdHlwZTogJ25ldHdvcmtFcnJvcic7IHBheWxvYWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogJ2xvYWRpbmcnOyBwYXlsb2FkOiBib29sZWFuIH1cbiAgfCB7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCc7IHBheWxvYWQ6IG51bWJlciB9XG4gIHwgeyB0eXBlOiAnaW5jcmVtZW50U2VsZWN0ZWRSZXN1bHQnIH1cbiAgfCB7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfVxuICB8IHtcbiAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JztcbiAgICAgIHBheWxvYWQ6IHsgc2VhcmNoVGV4dDogU2VhcmNoVGV4dDsgcmVzdWx0czogQ29tbWFuZFtdIH07XG4gICAgfVxuICB8IHsgdHlwZTogJ3NldE5leHRDb21tYW5kcyc7IHBheWxvYWQ6IHsgcmVzdWx0czogQ29tbWFuZFtdIH0gfVxuICB8IHtcbiAgICAgIHR5cGU6ICdzZXRQcmV2Q29tbWFuZHMnO1xuICAgICAgcGF5bG9hZDogeyBzZWFyY2hUZXh0OiBTZWFyY2hUZXh0OyByZXN1bHRzOiBDb21tYW5kW10gfTtcbiAgICB9XG4gIHwgeyB0eXBlOiAnc2VhcmNoVGV4dCc7IHBheWxvYWQ6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOyBwYXlsb2FkOiBDb21tYW5kW10gfVxuICB8IHsgdHlwZTogJ3Jlc2V0U2VhcmNoVGV4dCcgfVxuICB8IHsgdHlwZTogJ3Jlc2V0UmVzdWx0c1doZW5DbG9zaW5nJyB9XG4gIHwgeyB0eXBlOiAncmVzZXQnIH07XG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIGhhc05ldHdvcmtFcnJvcjogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNlYXJjaFRleHQ6ICcnLFxuICBzZWxlY3RlZFJlc3VsdDogLTEsXG4gIC8vIFVzZWQgZm9yIFVYIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCBoaXN0b3J5XG4gIGVuYWJsZUhpc3Rvcnk6IHRydWUsXG4gIHJlc3VsdHM6IFtdLFxuICBzdGFjazogW10sXG59O1xuY29uc3QgcmVkdWNlciA9IChzdGF0ZTogU3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogQWN0aW9uKTogU3RhdGUgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbmV0d29ya0Vycm9yJzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBoYXNOZXR3b3JrRXJyb3I6IGFjdGlvbi5wYXlsb2FkIH07XG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaXNMb2FkaW5nOiBhY3Rpb24ucGF5bG9hZCB9O1xuICAgIGNhc2UgJ3NlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlICdpbmNyZW1lbnRTZWxlY3RlZFJlc3VsdCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6XG4gICAgICAgICAgc3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IHN0YXRlLnJlc3VsdHMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0ICsgMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ2RlY3JlbWVudFNlbGVjdGVkUmVzdWx0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDpcbiAgICAgICAgICBzdGF0ZS5zZWxlY3RlZFJlc3VsdCA8IDFcbiAgICAgICAgICAgID8gc3RhdGUucmVzdWx0cy5sZW5ndGggLSAxXG4gICAgICAgICAgICA6IHN0YXRlLnNlbGVjdGVkUmVzdWx0IC0gMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICB9O1xuICAgIGNhc2UgJ3BpY2tDb21tYW5kRnJvbUhpc3RvcnknOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNlbGVjdGVkUmVzdWx0OiAwLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZC5zZWFyY2hUZXh0LFxuICAgICAgICByZXN1bHRzOiBhY3Rpb24ucGF5bG9hZC5yZXN1bHRzLFxuICAgICAgICBzdGFjazogW10sXG4gICAgICAgIC8vIFRoZSBoaXN0b3J5IGRvZXMgbm90IGdldCBjaGFuZ2VkIGhlcmUsIGl0IHdpbGwgYmUgY2hhbmdlZCBhbG9uZ1xuICAgICAgICAvLyB3aXRoIHRoZSByZWd1bGFyIGZsb3cuXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldE5leHRDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhY2s6IFtcbiAgICAgICAgICAuLi5zdGF0ZS5zdGFjayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZWFyY2hUZXh0OiBzdGF0ZS5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgcmVzdWx0czogc3RhdGUucmVzdWx0cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUmVzdWx0OiBzdGF0ZS5zZWxlY3RlZFJlc3VsdCxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogMCxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogZmFsc2UsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLnJlc3VsdHMsXG4gICAgICB9O1xuICAgIGNhc2UgJ3NldFByZXZDb21tYW5kcyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VhcmNoVGV4dDogYWN0aW9uLnBheWxvYWQuc2VhcmNoVGV4dCxcbiAgICAgICAgcmVzdWx0czogYWN0aW9uLnBheWxvYWQucmVzdWx0cyxcbiAgICAgICAgc2VsZWN0ZWRSZXN1bHQ6IDAsXG4gICAgICAgIGVuYWJsZUhpc3Rvcnk6IGZhbHNlLFxuICAgICAgICAvLyBvbWl0IGxhc3QgaXRlbVxuICAgICAgICBzdGFjazogc3RhdGUuc3RhY2suc2xpY2UoMCwgLTEpLFxuICAgICAgfTtcbiAgICBjYXNlICdzZWFyY2hUZXh0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWFyY2hUZXh0OiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgLy8gY2xlYXIgbmV0d29yayBlcnJvciB3aGVuIHNlYXJjaCB0ZXh0IGlzIGNsZWFyZWQsIHNvIHRoYXQgdXNlcnNcbiAgICAgICAgLy8gYXJlIHRlbXB0ZWQgdG8gcmV0cnlcbiAgICAgICAgaGFzTmV0d29ya0Vycm9yOiBhY3Rpb24ucGF5bG9hZC5sZW5ndGggPiAwICYmIHN0YXRlLmhhc05ldHdvcmtFcnJvcixcbiAgICAgIH07XG4gICAgY2FzZSAnc2V0U2VhcmNoVGV4dFJlc3VsdHMnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICBzZWxlY3RlZFJlc3VsdDogYWN0aW9uLnBheWxvYWQubGVuZ3RoID4gMCA/IDAgOiAtMSxcbiAgICAgICAgZW5hYmxlSGlzdG9yeTogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IFtdLFxuICAgICAgfTtcbiAgICBjYXNlICdyZXNldFNlYXJjaFRleHQnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaFRleHQ6ICcnLCByZXN1bHRzOiBbXSwgc2VsZWN0ZWRSZXN1bHQ6IC0xIH07XG4gICAgY2FzZSAncmVzZXRSZXN1bHRzV2hlbkNsb3NpbmcnOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlbGVjdGVkUmVzdWx0OiAtMSwgZW5hYmxlSGlzdG9yeTogdHJ1ZSB9O1xuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdO1xuICBvbkhpc3RvcnlFbnRyaWVzQ2hhbmdlOiAoaGlzdG9yeUVudHJpZXM6IEhpc3RvcnlFbnRyeVtdKSA9PiB2b2lkO1xuICBzZWFyY2g6IChzZWFyY2hUZXh0OiBTZWFyY2hUZXh0KSA9PiBQcm9taXNlPENvbW1hbmRbXT47XG4gIGdldE5leHRDb21tYW5kczogKGNvbW1hbmQ6IENvbW1hbmQpID0+IFByb21pc2U8Q29tbWFuZFtdPjtcbiAgZXhlY3V0ZUNvbW1hbmQ6IChjb21tYW5kOiBDb21tYW5kLCBtZXRhOiB7IG9wZW5Jbk5ld1RhYjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBjbGFzc05hbWVTaGFrZUFuaW1hdGlvbjogc3RyaW5nO1xufTtcbmNvbnN0IEJ1dGxlciA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcbiAgY29uc3QgW3N0YXRlLCBkaXNwYXRjaF0gPSB1c2VSZWR1Y2VyPFxuICAgIChwcmV2U3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvbikgPT4gU3RhdGVcbiAgPihyZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xuXG4gIGNvbnN0IHNob3VsZFNlbGVjdEZpZWxkVGV4dCA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGlzTmV3V2luZG93Q29tYm8gPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBza2lwTmV4dFNlbGVjdGlvbiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHNlYXJjaElucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHNldEhhc05ldHdvcmtFcnJvciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICduZXR3b3JrRXJyb3InLCBwYXlsb2FkOiB0cnVlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVuc2V0SGFzTmV0d29ya0Vycm9yID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKHsgdHlwZTogJ25ldHdvcmtFcnJvcicsIHBheWxvYWQ6IGZhbHNlIH0pO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogdHJ1ZSB9KTtcbiAgfSwgW10pO1xuICBjb25zdCB1bnNldElzTG9hZGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdsb2FkaW5nJywgcGF5bG9hZDogZmFsc2UgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBEZXN0cnVjdHVyZSBmdW5jdGlvbnMgZnJvbSBwcm9wcyB0byByZWZlcmVuY2UgdGhlbSBpbiB0aGUgaG9vayBkZXBlbmRlbmN5IGxpc3RcbiAgY29uc3Qge1xuICAgIHNlYXJjaDogc2VhcmNoRnJvbVBhcmVudCxcbiAgICBvbkNsb3NlOiBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICBleGVjdXRlQ29tbWFuZDogZXhlY3V0ZUNvbW1hbmRGcm9tUGFyZW50LFxuICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2U6IG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgIGdldE5leHRDb21tYW5kczogZ2V0TmV4dENvbW1hbmRzRnJvbVBhcmVudCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHNoYWtlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzZWFyY2hDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgICAgcHJvcHMuY2xhc3NOYW1lU2hha2VBbmltYXRpb25cbiAgICAgICk7XG4gICAgICAvLyAtPiB0cmlnZ2VyaW5nIHJlZmxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgIHZvaWQgc2VhcmNoQ29udGFpbmVyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGg7XG4gICAgICBzZWFyY2hDb250YWluZXJSZWYuY3VycmVudC5jbGFzc0xpc3QuYWRkKHByb3BzLmNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5jbGFzc05hbWVTaGFrZUFuaW1hdGlvbl0pO1xuXG4gIGNvbnN0IGV4ZWN1dGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZCwgbWV0YSkgPT4ge1xuICAgICAgLy8gT25seSBtYWluIGVudHJpZXMgZ2V0IGFkZGVkIHRvIGhpc3RvcnksIHNvIHdoZW4gYSBzdWJjb21tYW5kIGlzIGV4ZWN1dGVkLFxuICAgICAgLy8gd2UgYWRkIHRoZSBtYWluIGNvbW1hbmQgb2YgaXQgdG8gdGhlIGhpc3RvcnkgKHRoZSB0b3AtbGV2ZWwgY29tbWFuZCkuXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGtleSB0byBpZGVudGlmeSBoaXN0b3J5IGVudHJpZXMgYnkgaXMgYWx3YXlzIHRoZSBzZWFyY2hUZXh0XG4gICAgICAvLyBUaGVyZSB3aWxsIG5ldmVyIGJlIHR3byBoaXN0b3J5IGVudHJpZXMgd2l0aCB0aGUgc2FtZSBzZWFyY2hUZXh0XG4gICAgICBjb25zdCBlbnRyeSA9XG4gICAgICAgIHN0YXRlLnN0YWNrLmxlbmd0aCA9PT0gMFxuICAgICAgICAgID8gLy8gVGhlIHN0YWNrIGlzIGVtcHR5LCBzbyB3ZSBhcmUgZXhlY3V0aW5nIGEgdG9wLWxldmVsIGNvbW1hbmRcbiAgICAgICAgICAgIHsgc2VhcmNoVGV4dDogc3RhdGUuc2VhcmNoVGV4dCwgcmVzdWx0czogc3RhdGUucmVzdWx0cyB9XG4gICAgICAgICAgOiAvLyBXZSBhcmUgZXhlY3V0aW5nIGEgc3ViY29tbWFuZCwgc28gd2UgZ2V0IHRoZSB0b3AtbGV2ZWwgY29tbWFuZCBmb3IgaXQsXG4gICAgICAgICAgICAvLyB3aGljaCBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogc3RhdGUuc3RhY2tbMF0uc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogc3RhdGUuc3RhY2tbMF0ucmVzdWx0cyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgIC8vIEFkZCB0aGUgZW50cnkgdG8gdGhlIGhpc3RvcnksIHdoaWxlIGV4Y2x1ZGluZyBhbnkgZWFybGllciBoaXN0b3J5IGVudHJ5XG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIHNlYXJjaCB0ZXh0LiBUaGlzIGVmZmVjdGl2ZWx5IFwibW92ZXNcIiB0aGF0IGVudHJ5IHRvIHRoZVxuICAgICAgLy8gdG9wIG9mIHRoZSBoaXN0b3J5ICh3aXRoIHRoZSBtb3N0IHJlY2VudCByZXN1bHRzKSwgb3IgYXBwZW5kcyBhIG5ldyBlbnRyeVxuICAgICAgLy8gd2hlbiBpdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLlxuICAgICAgb25IaXN0b3J5RW50cmllc0NoYW5nZUZyb21QYXJlbnQoW1xuICAgICAgICAuLi5wcm9wcy5oaXN0b3J5RW50cmllcy5maWx0ZXIoXG4gICAgICAgICAgKGNvbW1hbmQpID0+IGNvbW1hbmQuc2VhcmNoVGV4dCAhPT0gZW50cnkuc2VhcmNoVGV4dFxuICAgICAgICApLFxuICAgICAgICBlbnRyeSxcbiAgICAgIF0pO1xuXG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFNlYXJjaFRleHQnIH0pO1xuXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCgpO1xuXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQoY29tbWFuZCwgbWV0YSk7XG4gICAgfSxcbiAgICBbXG4gICAgICBleGVjdXRlQ29tbWFuZEZyb21QYXJlbnQsXG4gICAgICBvbkNsb3NlRnJvbVBhcmVudCxcbiAgICAgIG9uSGlzdG9yeUVudHJpZXNDaGFuZ2VGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzdGF0ZS5yZXN1bHRzLFxuICAgICAgc3RhdGUuc2VhcmNoVGV4dCxcbiAgICAgIHN0YXRlLnN0YWNrLFxuICAgIF1cbiAgKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIFByZXZlbnRpbmcgY3Vyc29yIGp1bXBzIGNhbiBvbmx5IGhhcHBlbiBpbiBvbktleURvd24sIGJ1dCBub3QgaW4gb25LZXlVcFxuICAgICAgZXZlbnQucGVyc2lzdCgpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGtub3cgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGNtZCtlbnRlciAoY21kIGJlaW5nIGEgbWV0YSBrZXkpLlxuICAgICAgLy8gV2UgYXJlIG9ubHkgdG9sZCBhYm91dCB0aGlzIGluIGtleURvd24sIGJ1dCBub3QgaW4ga2V5VXAsIHNvIHdlIG5lZWRcbiAgICAgIC8vIHRvIGhhbmRsZSBpdCBoZXJlXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGhhc05ld1dpbmRvd01vZGlmaWVyKGV2ZW50KSkge1xuICAgICAgICBpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF2b2lkIHNlbGVjdGluZyB0aGUgd2hvbGUgcGFnZSB3aGVuIHVzZXIgc2VsZWN0ZXMgZXZlcnl0aGluZyB3aXRoXG4gICAgICAvLyBhIGtleWJvYXJkIHNob3J0Y3V0LiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aG91Z2guXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSB3aG9sZSBwYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgaW4gY2FzZSB0aGUgdXNlclxuICAgICAgLy8gMSkgb3BlbnMgdGhlIHNlYXJjaCBib3hcbiAgICAgIC8vIDIpIHR5cGVzIGludG8gaXRcbiAgICAgIC8vIDMpIHNlbGVjdHMgYWxsIHRleHQgdXNpbmcgY21kK2FcbiAgICAgIC8vIDQpIGNsb3NlcyB0aGUgc2VhcmNoIGJveCB3aXRoIGVzY1xuICAgICAgLy8gV2l0aG91dCB0aGlzIGhhbmRsaW5nLCB0aGUgd2hvbGUgcGFnZSB3b3VsZCBub3cgYmUgc2VsZWN0ZWRcbiAgICAgIGlmIChpc1NlbGVjdEFsbENvbWJvKGV2ZW50KSkge1xuICAgICAgICAvLyBUaGlzIHN0b3BzIHRoZSBicm93c2VyIGZyb20gc2VsZWN0aW5nIGFueXRoaW5nXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzZWFyY2hJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgLy8gVGhpcyBzZWxlY3RzIHRoZSB0ZXh0IGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAgICAgICBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNldFNlbGVjdGlvblJhbmdlKDAsIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIga2V5IGNvbWJpbmF0aW9ucyB1c2luZyBtb2RpZmllciBrZXlzXG4gICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgaWYgKGlzQ2xvc2VDb21ibyhldmVudCkpIHJldHVybjtcblxuICAgICAgLy8gc2tpcCBuZXh0IG1vdXNlRW50ZXIgdG8gYXZvaWQgc2V0dGluZyBzZWxlY3RlZFJlc3VsdCB3aGVuIGN1cnNvciBqdXN0XG4gICAgICAvLyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZSByZXN1bHRzIHdpbGwgcG9wIHVwXG4gICAgICBza2lwTmV4dFNlbGVjdGlvbi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBqdW1waW5nIHRvIGVuZCBvZiB0ZXh0IGlucHV0XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlbWVudFNlbGVjdGVkUmVzdWx0JyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgIC8vIGJyb3dzZSB0aHJvdWdoIGhpc3RvcnlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgKHN0YXRlLnNlbGVjdGVkUmVzdWx0IDwgMSAmJiBzdGF0ZS5lbmFibGVIaXN0b3J5KVxuICAgICAgICApIHtcbiAgICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9XG4gICAgICAgICAgICBzdGF0ZS5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/IC8vIFdoZW4gZ29pbmcgYmFjayB0aGUgZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIC0xXG4gICAgICAgICAgICAgIDogLy8gV2hlbiBnb2luZyBiYWNrIG1vcmUgdGhhbiBvbmUgc3RlcFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgIChjb21tYW5kKSA9PiBjb21tYW5kLnNlYXJjaFRleHQgPT09IHN0YXRlLnNlYXJjaFRleHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIC8vIFBpY2sgdGhlIHByZXZpb3VzIGNvbW1hbmQgZnJvbSB0aGUgaGlzdG9yeVxuICAgICAgICAgIGNvbnN0IHByZXZDb21tYW5kID1cbiAgICAgICAgICAgIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgID8gLy8gcHJldmlvdXMgY29tbWFuZCBvbiB0b3Agb2YgdGhlIGhpc3Rvcnkgd2hlbiBnb2luZyBiYWNrIG9uXG4gICAgICAgICAgICAgICAgLy8gZmlyc3Qgc3RlcFxuICAgICAgICAgICAgICAgIGxhc3QocHJvcHMuaGlzdG9yeUVudHJpZXMpXG4gICAgICAgICAgICAgIDogLy8gcHJldmlvdXMgY29tbWFuZCBpcyBkZWVwZXIgZG93blxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGhpc3RvcnkgZG9lcyBub3QgZXhpc3QgKG5lZ2F0aXZlIGluZGV4KSwgdGhlblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaW1wbGljaXRseSByZXR1cm5zIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHByb3BzLmhpc3RvcnlFbnRyaWVzW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgICAvLyBTa2lwIHdoZW4gbm8gcHJldmlvdXMgZW50cnkgZXhpc3RzIGluIHRoZSBoaXN0b3J5XG4gICAgICAgICAgaWYgKCFwcmV2Q29tbWFuZCkgcmV0dXJuO1xuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdwaWNrQ29tbWFuZEZyb21IaXN0b3J5JyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyB0byBiZWdpbm5pbmcgb2YgdGV4dCBpbnB1dFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdkZWNyZW1lbnRTZWxlY3RlZFJlc3VsdCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA+IC0xKSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBzdGF0ZS5yZXN1bHRzW3N0YXRlLnNlbGVjdGVkUmVzdWx0XTtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0ID0gc3RhdGUuc2VhcmNoVGV4dDtcbiAgICAgICAgICBjb25zdCBpc0N1cnNvckF0RW5kID1cbiAgICAgICAgICAgIHNlYXJjaElucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHN0YXRlLnNlYXJjaFRleHQubGVuZ3RoID09PSBzZWFyY2hJbnB1dFJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgY29uc3QgaXNFdmVyeXRoaW5nU2VsZWN0ZWQgPVxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudCAmJlxuICAgICAgICAgICAgc2VhcmNoSW5wdXRSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICAgICAgc3RhdGUuc2VhcmNoVGV4dC5sZW5ndGggPT09IHNlYXJjaElucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xuXG4gICAgICAgICAgLy8gb25seSBhbGxvdyBkaXZpbmcgaW4gd2hlbiBjdXJzb3IgaXMgYXQgZW5kIG9mIGlucHV0IG9yIHdoZW5cbiAgICAgICAgICAvLyB0aGUgY29tcGxldGUgdGV4dCBpcyBzZWxlY3RlZCAod2hlbiBicm93c2luZyB0aHJvdWdoIGhpc3RvcnkpXG4gICAgICAgICAgaWYgKCFpc0N1cnNvckF0RW5kICYmICFpc0V2ZXJ5dGhpbmdTZWxlY3RlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IoKTtcblxuICAgICAgICAgIC8vIE5PVEU6IHNpbmNlIHdlIG5lZWQgdG8gZmV0Y2ggdGhlIFwibmV4dCBjb21tYW5kXCIsIHdoaWNoIGlzIGFuIGFzeW5jIG9wZXJhdGlvbixcbiAgICAgICAgICAvLyB3ZSB1c2UgYSBJSUZFIHRvIHByb2Nlc3MgdGhhdCBhbmQgZXZlbnR1YWxseSB1cGRhdGUgdGhlIHN0YXRlLlxuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29tbWFuZHMgPSBhd2FpdCBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50KGNvbW1hbmQpO1xuICAgICAgICAgICAgICAvLyBhdm9pZCBtb3ZpbmcgY3Vyc29yIHdoZW4gdGhlcmUgYXJlIHN1Yi1vcHRpb25zXG4gICAgICAgICAgICAgIGlmIChuZXh0Q29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgc2VhcmNoIHRleHQgaGFzIG5vdCBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgbG9hZGluZ1xuICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IHJlc3VsdHMsIG90aGVyd2lzZSB3ZSdkIGludGVycnVwdCB0aGUgdXNlci5cbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IHRoZSByZXN1bHRzIGluIGNhc2UgdGhlIHNlYXJjaCB0ZXh0IGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zZWFyY2hUZXh0ID09PSBzZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzZXROZXh0Q29tbWFuZHMnLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdHM6IG5leHRDb21tYW5kcyB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hha2UoKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgIC8vIGdvIGxlZnQgaW4gc3RhY2tcbiAgICAgICAgICBjb25zdCBwcmV2Q29tbWFuZCA9IGxhc3Qoc3RhdGUuc3RhY2spO1xuXG4gICAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHdlIGNhbid0IGdvIGxlZnQgYW55bW9yZVxuICAgICAgICAgIGlmICghcHJldkNvbW1hbmQpIHJldHVybjtcblxuICAgICAgICAgIC8vIHByZXZlbnQgY3Vyc29yIGZyb20ganVtcGluZyBhIGNoYXIgdG8gdGhlIGxlZnQgaW4gdGV4dCBpbnB1dFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnc2V0UHJldkNvbW1hbmRzJyxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcHJldkNvbW1hbmQuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgcmVzdWx0czogcHJldkNvbW1hbmQucmVzdWx0cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBnZXROZXh0Q29tbWFuZHNGcm9tUGFyZW50LFxuICAgICAgcHJvcHMuaGlzdG9yeUVudHJpZXMsXG4gICAgICBzaGFrZSxcbiAgICAgIHN0YXRlLFxuICAgICAgdW5zZXRIYXNOZXR3b3JrRXJyb3IsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+PihcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIC8vIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBjYW4gb25seSBoYXBwZW4gaW4gb25LZXlVcFxuICAgICAgaWYgKHNob3VsZFNlbGVjdEZpZWxkVGV4dC5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICBzaG91bGRTZWxlY3RGaWVsZFRleHQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmICFpc05ld1dpbmRvd0NvbWJvLmN1cnJlbnQpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGp1c3QgdHJpZ2dlcmVkIHRoZSBzZWFyY2hcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3RlZFJlc3VsdCA9PT0gLTEpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBVc2VyIGhhZCBzb21ldGhpbmcgc2VsZWN0ZWQgYW5kIHdhbnRzIHRvIGdvIHRoZXJlXG4gICAgICBleGVjdXRlKHN0YXRlLnJlc3VsdHNbc3RhdGUuc2VsZWN0ZWRSZXN1bHRdLCB7XG4gICAgICAgIG9wZW5Jbk5ld1RhYjogaXNOZXdXaW5kb3dDb21iby5jdXJyZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGlzTmV3V2luZG93Q29tYm8uY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBbZXhlY3V0ZSwgc3RhdGUucmVzdWx0cywgc3RhdGUuc2VsZWN0ZWRSZXN1bHRdXG4gICk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrPENoYW5nZUV2ZW50SGFuZGxlcjxIVE1MSW5wdXRFbGVtZW50Pj4oXG4gICAgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgaWYgKHNlYXJjaFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2goeyB0eXBlOiAnc2VhcmNoVGV4dCcsIHBheWxvYWQ6IHNlYXJjaFRleHQgfSk7XG5cbiAgICAgIC8vIEEgc2VhcmNoIHZpYSBuZXR3b3JrIGlzIG9ubHkgdHJpZ2dlcmVkIHdoZW4gdGhlcmVcbiAgICAgIC8vIGFyZSBtb3JlIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gU28gbm8gZmFsc2UgbG9hZGluZ1xuICAgICAgLy8gaW5kaWNhdGlvbiBpcyBnaXZlbi5cbiAgICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNldElzTG9hZGluZygpO1xuICAgICAgfVxuXG4gICAgICBzZWFyY2hGcm9tUGFyZW50KHNlYXJjaFRleHQpLnRoZW4oXG4gICAgICAgIChhc3luY1Jlc3VsdHM6IENvbW1hbmRbXSkgPT4ge1xuICAgICAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yKCk7XG4gICAgICAgICAgdW5zZXRJc0xvYWRpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShhc3luY1Jlc3VsdHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiAndGV4dCcsIHdlaWdodDogMC42IH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogJ2tleXdvcmRzJywgd2VpZ2h0OiAwLjQgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtaW5NYXRjaENoYXJMZW5ndGg6IDIsXG4gICAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHRzID0gZnVzZVxuICAgICAgICAgICAgLnNlYXJjaChzZWFyY2hUZXh0KVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCByZXN1bHRzIHdpdGggYSBtYXRjaGluZyBzY29yZSBvdmVyIDAuNzVcbiAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/IHJlc3VsdC5zY29yZSA8IDAuNzUgOiBmYWxzZSkpXG4gICAgICAgICAgICAvLyBLZWVwIGEgbWF4aW1hbCBvZiA5IHJlc3VsdHNcbiAgICAgICAgICAgIC5zbGljZSgwLCA5KTtcblxuICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzZXRTZWFyY2hUZXh0UmVzdWx0cycsXG4gICAgICAgICAgICBwYXlsb2FkOiBzZWFyY2hSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXRlbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB1bnNldElzTG9hZGluZygpO1xuICAgICAgICAgIHNldEhhc05ldHdvcmtFcnJvcigpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0sXG4gICAgW1xuICAgICAgc2VhcmNoRnJvbVBhcmVudCxcbiAgICAgIHNldEhhc05ldHdvcmtFcnJvcixcbiAgICAgIHNldElzTG9hZGluZyxcbiAgICAgIHVuc2V0SGFzTmV0d29ya0Vycm9yLFxuICAgICAgdW5zZXRJc0xvYWRpbmcsXG4gICAgXVxuICApO1xuICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBkaXNwYXRjaCh7IHR5cGU6ICdyZXNldFJlc3VsdHNXaGVuQ2xvc2luZycgfSk7XG4gICAgb25DbG9zZUZyb21QYXJlbnQoKTtcbiAgfSwgW29uQ2xvc2VGcm9tUGFyZW50XSk7XG5cbiAgY29uc3QgY3JlYXRlQ29tbWFuZE1vdXNlRW50ZXJIYW5kbGVyID0gdXNlQ2FsbGJhY2s8XG4gICAgKGluZGV4OiBudW1iZXIpID0+IE1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PlxuICA+KFxuICAgIChpbmRleCkgPT4gKCkgPT4ge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgY3Vyc29yIGhhcHBlbmVkIHRvIGJlIGluIGEgbG9jYXRpb24gd2hlcmUgYVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGFwcGVhciwgaXQgd291bGQgdHJpZ2dlciBvbk1vdXNlRW50ZXIgYW5kIHRoZVxuICAgICAgLy8gcmVzdWx0IHdvdWxkIGJlIHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIGlzIG5vdCBzb21ldGhpbmdcbiAgICAgIC8vIGEgdXNlciB3b3VsZCBleHBlY3QsIGhlbmNlIHdlIHByZXZlbnQgaXQgZnJvbSBoYXBwZW5pbmcuXG4gICAgICAvLyBUaGUgdXNlciBoYXMgdG8gbW92ZSB0aGUgY3Vyc29yIHRvIGFuIG9wdGlvbiBleHBsaWNpdGx5IGZvclxuICAgICAgLy8gaXQgdG8gYmVjb21lIGFjdGl2ZS4gSG93ZXZlciwgdGhlIHVzZXIgY2FuIGFsd2F5cyBjbGljayBhbmRcbiAgICAgIC8vIHRoYXQgYWN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgICAgaWYgKHNraXBOZXh0U2VsZWN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgc2tpcE5leHRTZWxlY3Rpb24uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHMgdGhlIHNlbGVjdGVkIHJlc3VsdCwgbWFpbmx5IGZvciB0aGUgaG92ZXIgZWZmZWN0XG4gICAgICBkaXNwYXRjaCh7IHR5cGU6ICdzZWxlY3RlZFJlc3VsdCcsIHBheWxvYWQ6IGluZGV4IH0pO1xuICAgIH0sXG4gICAgW11cbiAgKTtcbiAgY29uc3QgY3JlYXRlQ29tbWFuZENsaWNrSGFuZGxlciA9IHVzZUNhbGxiYWNrPFxuICAgIChjb21tYW5kOiBDb21tYW5kKSA9PiBNb3VzZUV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD5cbiAgPihcbiAgICAoY29tbWFuZCkgPT4gKGV2ZW50KSA9PiB7XG4gICAgICBleGVjdXRlKGNvbW1hbmQsIHtcbiAgICAgICAgb3BlbkluTmV3VGFiOiBoYXNOZXdXaW5kb3dNb2RpZmllcihldmVudCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtleGVjdXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPEJ1dGxlckNvbnRhaW5lclxuICAgICAgb25DbGljaz17aGFuZGxlQ29udGFpbmVyQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLWFjY2Vzc1wiXG4gICAgICB0YWJJbmRleD17LTF9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3NlYXJjaENvbnRhaW5lclJlZn1cbiAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclN1cmZhY2V9O1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAke3VpS2l0RGVzaWduVG9rZW5zLmJvcmRlclJhZGl1czR9O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG5cbiAgICAgICAgICAvKiBvbmUgbW9yZSB0aGFuIGFwcC1iYXIgKDIwMDAwKSBhbmQgb25lIG1vcmUgdGhhbiB0aGUgb3ZlcmxheSAoMjAwMDEpICovXG4gICAgICAgICAgei1pbmRleDogMjAwMDI7XG4gICAgICAgICAgd2lkdGg6IDQwMHB4O1xuICAgICAgICAgIG1hcmdpbjogNDBweCBhdXRvO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgLW1vei1ib3gtc2hhZG93OiAwIDEwcHggMzBweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC43NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggLThweCByZ2JhKDAsIDAsIDAsIDAuNzUpO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAke3N0YXRlLmhhc05ldHdvcmtFcnJvclxuICAgICAgICAgICAgPyAnMCdcbiAgICAgICAgICAgIDogdWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICBgfVxuICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBBdm9pZCBjbG9zaW5nIHdoZW4gdGhlIHNlYXJjaENvbnRhaW5lciBpdHNlbGYgaXMgY2xpY2tlZFxuICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlIG92ZXJsYXkgd2lsbCBjbG9zZSB3aGVuIGUuZy5cbiAgICAgICAgICAvLyB0aGUgc2VhcmNoIGlucHV0IGlzIGNsaWNrZWQuXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBgfVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBodG1sRm9yPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019O1xuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgIGB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlYXJjaEljb24gY29sb3I9XCJuZXV0cmFsNjBcIiAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cInF1aWNrLWFjY2Vzcy1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcmVmPXtzZWFyY2hJbnB1dFJlZn1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2UobWVzc2FnZXMuaW5wdXRQbGFjZWhvZGVyKX1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xuICAgICAgICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ019XG4gICAgICAgICAgICAgICAgJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nTX0gJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU31cbiAgICAgICAgICAgICAgICAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdTfTtcbiAgICAgICAgICAgICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbDYwfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYH1cbiAgICAgICAgICAgIHZhbHVlPXtzdGF0ZS5zZWFyY2hUZXh0fVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uS2V5VXA9e2hhbmRsZUtleVVwfVxuICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVpY2stYWNjZXNzLXNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7c3RhdGUuaXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1N9O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJHt1aUtpdERlc2lnblRva2Vucy5zcGFjaW5nU307XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZS5oYXNOZXR3b3JrRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JFcnJvcn07XG4gICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgICAgICAgY29sb3I6ICR7dWlLaXREZXNpZ25Ub2tlbnMuY29sb3JTdXJmYWNlfTtcbiAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHt1aUtpdERlc2lnblRva2Vucy5mb250U2l6ZTIwfTtcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICR7dWlLaXREZXNpZ25Ub2tlbnMuc3BhY2luZ1hzfTtcbiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2Ugey4uLm1lc3NhZ2VzLm9mZmxpbmV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bHRzLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAke3VpS2l0RGVzaWduVG9rZW5zLmNvbG9yTmV1dHJhbH07XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJHt1aUtpdERlc2lnblRva2Vucy5jb2xvclNvbGlkfTtcbiAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICAgICAgICBmb250LXNpemU6ICR7dWlLaXREZXNpZ25Ub2tlbnMuZm9udFNpemUyMH07XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAke3VpS2l0RGVzaWduVG9rZW5zLnNwYWNpbmdYc307XG4gICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIHsuLi5tZXNzYWdlcy5ub1Jlc3VsdHN9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHRzLm1hcCgoY29tbWFuZCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxCdXRsZXJDb21tYW5kXG4gICAgICAgICAgICAgIGtleT17Y29tbWFuZC5pZH1cbiAgICAgICAgICAgICAgY29tbWFuZD17Y29tbWFuZH1cbiAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c3RhdGUuc2VsZWN0ZWRSZXN1bHQgPT09IGluZGV4fVxuICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e2NyZWF0ZUNvbW1hbmRNb3VzZUVudGVySGFuZGxlcihpbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NyZWF0ZUNvbW1hbmRDbGlja0hhbmRsZXIoY29tbWFuZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuICAgICAgICB9KSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9CdXRsZXJDb250YWluZXI+XG4gICk7XG59O1xuQnV0bGVyLmRpc3BsYXlOYW1lID0gJ0J1dGxlcic7XG5cbmNvbnN0IEJ1dGxlcldpdGhBbmltYXRpb24gPSAocHJvcHM6IE9taXQ8UHJvcHMsICdjbGFzc05hbWVTaGFrZUFuaW1hdGlvbic+KSA9PiAoXG4gIDxDbGFzc05hbWVzPlxuICAgIHsoeyBjc3MgfSkgPT4gKFxuICAgICAgPEJ1dGxlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgIGNsYXNzTmFtZVNoYWtlQW5pbWF0aW9uPXtjc3NgXG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjQ1cztcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAke3NoYWtlQW5pbWF0aW9ufTtcbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgKX1cbiAgPC9DbGFzc05hbWVzPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQnV0bGVyV2l0aEFuaW1hdGlvbjtcbiJdfQ== */"),
915
+ children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread({}, messages.noResults))
916
+ });
917
+ return _mapInstanceProperty__default["default"](_context11 = state.results).call(_context11, (command, index) => jsxRuntime.jsx(ButlerCommand, {
918
+ command: command,
919
+ isSelected: state.selectedResult === index,
920
+ onMouseEnter: createCommandMouseEnterHandler(index),
921
+ onClick: createCommandClickHandler(command)
922
+ }, command.id));
923
+ })()]
924
+ })
925
+ });
926
+ };
927
+ Butler.propTypes = process.env.NODE_ENV !== "production" ? {
928
+ historyEntries: _pt__default["default"].arrayOf(_pt__default["default"].any).isRequired,
929
+ onHistoryEntriesChange: _pt__default["default"].func.isRequired,
930
+ search: _pt__default["default"].func.isRequired,
931
+ getNextCommands: _pt__default["default"].func.isRequired,
932
+ executeCommand: _pt__default["default"].func.isRequired,
933
+ onClose: _pt__default["default"].func.isRequired,
934
+ classNameShakeAnimation: _pt__default["default"].string.isRequired
935
+ } : {};
936
+ Butler.displayName = 'Butler';
937
+ const ButlerWithAnimation = props => jsxRuntime.jsx(react.ClassNames, {
938
+ children: _ref2 => {
939
+ let css = _ref2.css;
940
+ return jsxRuntime.jsx(Butler, _objectSpread(_objectSpread({}, props), {}, {
941
+ classNameShakeAnimation: css(_templateObject2$2 || (_templateObject2$2 = _taggedTemplateLiteral(["\n animation-duration: 0.45s;\n animation-fill-mode: both;\n animation-name: ", ";\n "])), shakeAnimation)
942
+ }));
943
+ }
944
+ });
945
+
946
+ // eslint-disable-next-line import/prefer-default-export
947
+
948
+ const permissions = {
949
+ ViewOrders: 'ViewOrders',
950
+ ManageOrders: 'ManageOrders',
951
+ ViewProducts: 'ViewProducts',
952
+ ManageProducts: 'ManageProducts',
953
+ ViewCategories: 'ViewCategories',
954
+ ManageCategories: 'ManageCategories',
955
+ ViewCustomers: 'ViewCustomers',
956
+ ManageCustomers: 'ManageCustomers',
957
+ ViewCustomerGroups: 'ViewCustomerGroups',
958
+ ManageCustomerGroups: 'ManageCustomerGroups',
959
+ ViewProductDiscounts: 'ViewProductDiscounts',
960
+ ManageProductDiscounts: 'ManageProductDiscounts',
961
+ ViewDiscountCodes: 'ViewDiscountCodes',
962
+ ManageDiscountCodes: 'ManageDiscountCodes',
963
+ ViewCartDiscounts: 'ViewCartDiscounts',
964
+ ManageCartDiscounts: 'ManageCartDiscounts',
965
+ ViewProjectSettings: 'ViewProjectSettings',
966
+ ManageProjectSettings: 'ManageProjectSettings',
967
+ ViewDeveloperSettings: 'ViewDeveloperSettings',
968
+ ManageDeveloperSettings: 'ManageDeveloperSettings',
969
+ ViewProductTypes: 'ViewProductTypes',
970
+ ManageProductTypes: 'ManageProductTypes'
971
+ };
972
+
973
+ const actionTypes = {
974
+ go: 'go'
975
+ };
976
+
977
+ var _templateObject$2;
978
+ function nonNullable(value) {
979
+ return value !== null && value !== undefined && typeof value !== 'boolean';
980
+ }
981
+ const createCommands = _ref => {
982
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context13;
983
+ let intl = _ref.intl,
984
+ applicationContext = _ref.applicationContext,
985
+ featureToggles = _ref.featureToggles,
986
+ changeProjectDataLocale = _ref.changeProjectDataLocale;
987
+ return _filterInstanceProperty__default["default"](_context = [applicationContext.project && applicationContext.permissions && featureToggles.canViewDashboard && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
988
+ id: 'go/dashboard',
989
+ text: intl.formatMessage(messages.openDashboard),
990
+ keywords: ['Go to Dashboard'],
991
+ action: {
992
+ type: actionTypes.go,
993
+ to: "/".concat(applicationContext.project.key, "/dashboard")
994
+ }
995
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
996
+ id: 'go/products',
997
+ text: intl.formatMessage(messages.openProducts),
998
+ keywords: ['Go to Products'],
999
+ action: {
1000
+ type: actionTypes.go,
1001
+ to: "/".concat(applicationContext.project.key, "/products")
1002
+ },
1003
+ subCommands: _filterInstanceProperty__default["default"](_context2 = [permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1004
+ id: 'go/products/list',
1005
+ text: intl.formatMessage(messages.openProductList),
1006
+ action: {
1007
+ type: actionTypes.go,
1008
+ to: "/".concat(applicationContext.project.key, "/products")
1009
+ }
1010
+ }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && {
1011
+ id: 'go/products/modified',
1012
+ text: intl.formatMessage(messages.openModifiedProducts),
1013
+ action: {
1014
+ type: actionTypes.go,
1015
+ to: "/".concat(applicationContext.project.key, "/products/modified")
1016
+ }
1017
+ }, permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions) && featureToggles.pimSearch && {
1018
+ id: 'go/products/pim-search',
1019
+ text: intl.formatMessage(messages.openPimSearch),
1020
+ action: {
1021
+ type: actionTypes.go,
1022
+ to: "/".concat(applicationContext.project.key, "/products")
1023
+ }
1024
+ }, permissions$1.hasSomePermissions([permissions.ManageProducts], applicationContext.permissions) && {
1025
+ id: 'go/products/add',
1026
+ text: intl.formatMessage(messages.openAddProducts),
1027
+ action: {
1028
+ type: actionTypes.go,
1029
+ to: "/".concat(applicationContext.project.key, "/products/new")
1030
+ }
1031
+ }]).call(_context2, nonNullable)
1032
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1033
+ id: 'go/categories',
1034
+ text: intl.formatMessage(messages.openCategories),
1035
+ keywords: ['Go to Categories'],
1036
+ action: {
1037
+ type: actionTypes.go,
1038
+ to: "/".concat(applicationContext.project.key, "/categories")
1039
+ },
1040
+ subCommands: _filterInstanceProperty__default["default"](_context3 = [permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1041
+ id: 'go/categories/list',
1042
+ text: intl.formatMessage(messages.openCategoriesList),
1043
+ action: {
1044
+ type: actionTypes.go,
1045
+ to: "/".concat(applicationContext.project.key, "/categories?mode=list")
1046
+ }
1047
+ }, permissions$1.hasSomePermissions([permissions.ViewCategories], applicationContext.permissions) && {
1048
+ id: 'go/categories/search',
1049
+ text: intl.formatMessage(messages.openCategoriesSearch),
1050
+ action: {
1051
+ type: actionTypes.go,
1052
+ to: "/".concat(applicationContext.project.key, "/categories?mode=search")
1053
+ }
1054
+ }, permissions$1.hasSomePermissions([permissions.ManageCategories], applicationContext.permissions) && {
1055
+ id: 'go/categories/add',
1056
+ text: intl.formatMessage(messages.openAddCategory),
1057
+ action: {
1058
+ type: actionTypes.go,
1059
+ to: "/".concat(applicationContext.project.key, "/categories/new")
1060
+ }
1061
+ }]).call(_context3, nonNullable)
1062
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewCustomers, permissions.ViewCustomerGroups], applicationContext.permissions) && {
1063
+ id: 'go/customers',
1064
+ text: intl.formatMessage(messages.openCustomers),
1065
+ keywords: ['Go to Customers'],
1066
+ action: {
1067
+ type: actionTypes.go,
1068
+ to: "/".concat(applicationContext.project.key, "/customers")
1069
+ },
1070
+ subCommands: _filterInstanceProperty__default["default"](_context4 = [permissions$1.hasSomePermissions([permissions.ViewCustomers], applicationContext.permissions) && {
1071
+ id: 'go/customers/list',
1072
+ text: intl.formatMessage(messages.openCustomersList),
1073
+ action: {
1074
+ type: actionTypes.go,
1075
+ to: "/".concat(applicationContext.project.key, "/customers")
1076
+ }
1077
+ }, permissions$1.hasSomePermissions([permissions.ManageCustomers], applicationContext.permissions) && {
1078
+ id: 'go/customers/new',
1079
+ text: intl.formatMessage(messages.openAddCustomer),
1080
+ action: {
1081
+ type: actionTypes.go,
1082
+ to: "/".concat(applicationContext.project.key, "/customers/new")
1083
+ }
1084
+ }, permissions$1.hasSomePermissions([permissions.ViewCustomerGroups], applicationContext.permissions) && {
1085
+ id: 'go/customer/customer-groups',
1086
+ text: intl.formatMessage(messages.openCustomerGroupsList),
1087
+ action: {
1088
+ type: actionTypes.go,
1089
+ to: "/".concat(applicationContext.project.key, "/customers/customer-groups")
1090
+ }
1091
+ }, permissions$1.hasSomePermissions([permissions.ManageCustomerGroups], applicationContext.permissions) && {
1092
+ id: 'go/customers/customer-groups/add',
1093
+ text: intl.formatMessage(messages.openAddCustomerGroup),
1094
+ action: {
1095
+ type: actionTypes.go,
1096
+ to: "/".concat(applicationContext.project.key, "/customers/customer-groups/new")
1097
+ }
1098
+ }]).call(_context4, nonNullable)
1099
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1100
+ id: 'go/orders',
1101
+ text: intl.formatMessage(messages.openOrders),
1102
+ keywords: ['Go to Orders'],
1103
+ action: {
1104
+ type: actionTypes.go,
1105
+ to: "/".concat(applicationContext.project.key, "/orders")
1106
+ },
1107
+ subCommands: _filterInstanceProperty__default["default"](_context5 = [permissions$1.hasSomePermissions([permissions.ViewOrders], applicationContext.permissions) && {
1108
+ id: 'go/orders/list',
1109
+ text: intl.formatMessage(messages.openOrdersList),
1110
+ action: {
1111
+ type: actionTypes.go,
1112
+ to: "/".concat(applicationContext.project.key, "/orders")
1113
+ }
1114
+ }, permissions$1.hasSomePermissions([permissions.ManageOrders], applicationContext.permissions) && {
1115
+ id: 'go/orders/add',
1116
+ text: intl.formatMessage(messages.openAddOrder),
1117
+ action: {
1118
+ type: actionTypes.go,
1119
+ to: "/".concat(applicationContext.project.key, "/orders/new")
1120
+ }
1121
+ }]).call(_context5, nonNullable)
1122
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewDiscountCodes, permissions.ViewProductDiscounts, permissions.ViewCartDiscounts], applicationContext.permissions) && {
1123
+ id: 'go/discounts',
1124
+ text: intl.formatMessage(messages.openDiscounts),
1125
+ keywords: ['Go to Discounts'],
1126
+ action: {
1127
+ type: actionTypes.go,
1128
+ to: "/".concat(applicationContext.project.key, "/discounts")
1129
+ },
1130
+ subCommands: _filterInstanceProperty__default["default"](_context6 = [permissions$1.hasSomePermissions([permissions.ViewProductDiscounts], applicationContext.permissions) && {
1131
+ id: 'go/discounts/products/list',
1132
+ text: intl.formatMessage(messages.openProductDiscountsList),
1133
+ action: {
1134
+ type: actionTypes.go,
1135
+ to: "/".concat(applicationContext.project.key, "/discounts/products")
1136
+ }
1137
+ }, permissions$1.hasSomePermissions([permissions.ViewCartDiscounts], applicationContext.permissions) && {
1138
+ id: 'go/discounts/carts/list',
1139
+ text: intl.formatMessage(messages.openCartDiscountsList),
1140
+ action: {
1141
+ type: actionTypes.go,
1142
+ to: "/".concat(applicationContext.project.key, "/discounts/carts")
1143
+ }
1144
+ }, permissions$1.hasSomePermissions([permissions.ViewDiscountCodes], applicationContext.permissions) && {
1145
+ id: 'go/discounts/codes/list',
1146
+ text: intl.formatMessage(messages.openDiscountCodesList),
1147
+ action: {
1148
+ type: actionTypes.go,
1149
+ to: "/".concat(applicationContext.project.key, "/discounts/codes")
1150
+ }
1151
+ }, permissions$1.hasSomePermissions([permissions.ManageProductDiscounts, permissions.ManageDiscountCodes, permissions.ManageCartDiscounts], applicationContext.permissions) && {
1152
+ id: 'go/discounts/add',
1153
+ text: intl.formatMessage(messages.openAddDiscount),
1154
+ action: {
1155
+ type: actionTypes.go,
1156
+ to: "/".concat(applicationContext.project.key, "/discounts/new")
1157
+ },
1158
+ subCommands: _filterInstanceProperty__default["default"](_context7 = [permissions$1.hasSomePermissions([permissions.ManageProductDiscounts], applicationContext.permissions) && {
1159
+ id: 'go/discounts/product/add',
1160
+ text: intl.formatMessage(messages.openAddProductDiscount),
1161
+ action: {
1162
+ type: actionTypes.go,
1163
+ to: "/".concat(applicationContext.project.key, "/discounts/products/new")
1164
+ }
1165
+ }, permissions$1.hasSomePermissions([permissions.ManageCartDiscounts], applicationContext.permissions) && {
1166
+ id: 'go/discounts/cart/add',
1167
+ text: intl.formatMessage(messages.openAddCartDiscount),
1168
+ action: {
1169
+ type: actionTypes.go,
1170
+ to: "/".concat(applicationContext.project.key, "/discounts/carts/new")
1171
+ }
1172
+ }, permissions$1.hasSomePermissions([permissions.ManageDiscountCodes], applicationContext.permissions) && {
1173
+ id: 'go/discounts/code/add',
1174
+ text: intl.formatMessage(messages.openAddCartDiscount),
1175
+ action: {
1176
+ type: actionTypes.go,
1177
+ to: "/".concat(applicationContext.project.key, "/discounts/codes/new")
1178
+ }
1179
+ }]).call(_context7, nonNullable)
1180
+ }]).call(_context6, nonNullable)
1181
+ }, applicationContext.project && applicationContext.permissions && permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ViewDeveloperSettings, permissions.ViewProductTypes], applicationContext.permissions) && {
1182
+ id: 'go/settings',
1183
+ text: intl.formatMessage(messages.openSettings),
1184
+ keywords: ['Go to Settings'],
1185
+ action: {
1186
+ type: actionTypes.go,
1187
+ to: "/".concat(applicationContext.project.key, "/settings/project")
1188
+ },
1189
+ subCommands: _filterInstanceProperty__default["default"](_context8 = [permissions$1.hasSomePermissions([permissions.ViewProjectSettings, permissions.ManageProjectSettings], applicationContext.permissions) && {
1190
+ id: 'go/settings/project',
1191
+ text: intl.formatMessage(messages.openProjectSettings),
1192
+ action: {
1193
+ type: actionTypes.go,
1194
+ to: "/".concat(applicationContext.project.key, "/settings/project")
1195
+ },
1196
+ subCommands: _filterInstanceProperty__default["default"](_context9 = [{
1197
+ id: 'go/settings/project/international',
1198
+ text: intl.formatMessage(messages.openProjectSettingsInternationalTab),
1199
+ action: {
1200
+ type: actionTypes.go,
1201
+ to: "/".concat(applicationContext.project.key, "/settings/project/international")
1202
+ }
1203
+ }, {
1204
+ id: 'go/settings/project/taxes',
1205
+ text: intl.formatMessage(messages.openProjectSettingsTaxesTab),
1206
+ action: {
1207
+ type: actionTypes.go,
1208
+ to: "/".concat(applicationContext.project.key, "/settings/project/taxes")
1209
+ }
1210
+ }, {
1211
+ id: 'go/settings/project/shipping-methods',
1212
+ text: intl.formatMessage(messages.openProjectSettingsShippingMethodsTab),
1213
+ action: {
1214
+ type: actionTypes.go,
1215
+ to: "/".concat(applicationContext.project.key, "/settings/project/shipping-methods")
1216
+ }
1217
+ }, {
1218
+ id: 'go/settings/project/channels',
1219
+ text: intl.formatMessage(messages.openProjectSettingsChannelsTab),
1220
+ action: {
1221
+ type: actionTypes.go,
1222
+ to: "/".concat(applicationContext.project.key, "/settings/project/channels")
1223
+ }
1224
+ }, {
1225
+ id: 'go/settings/project/stores',
1226
+ text: intl.formatMessage(messages.openProjectSettingsStoresTab),
1227
+ action: {
1228
+ type: actionTypes.go,
1229
+ to: "/".concat(applicationContext.project.key, "/settings/project/stores")
1230
+ }
1231
+ }]).call(_context9, nonNullable)
1232
+ }, permissions$1.hasSomePermissions([permissions.ViewProductTypes], applicationContext.permissions) && {
1233
+ id: 'go/settings/product-types',
1234
+ text: intl.formatMessage(messages.openProductTypesSettings),
1235
+ action: {
1236
+ type: actionTypes.go,
1237
+ to: "/".concat(applicationContext.project.key, "/settings/product-types")
1238
+ }
1239
+ }, permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1240
+ id: 'go/settings/developer',
1241
+ text: intl.formatMessage(messages.openDeveloperSettings),
1242
+ action: {
1243
+ type: actionTypes.go,
1244
+ to: "/".concat(applicationContext.project.key, "/settings/developer")
1245
+ },
1246
+ subCommands: _filterInstanceProperty__default["default"](_context10 = [permissions$1.hasSomePermissions([permissions.ViewDeveloperSettings], applicationContext.permissions) && {
1247
+ id: 'go/settings/developer/api-clients/list',
1248
+ text: intl.formatMessage(messages.openApiClientsList),
1249
+ action: {
1250
+ type: actionTypes.go,
1251
+ to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients")
1252
+ }
1253
+ }, permissions$1.hasSomePermissions([permissions.ManageDeveloperSettings], applicationContext.permissions) && {
1254
+ id: 'go/settings/developer/api-clients/add',
1255
+ text: intl.formatMessage(messages.openAddApiClient),
1256
+ action: {
1257
+ type: actionTypes.go,
1258
+ to: "/".concat(applicationContext.project.key, "/settings/developer/api-clients/new")
1259
+ }
1260
+ }]).call(_context10, nonNullable)
1261
+ }, featureToggles.customApplications && permissions$1.hasSomePermissions([permissions.ManageProjectSettings], applicationContext.permissions) && {
1262
+ id: 'go/settings/custom-applications',
1263
+ text: intl.formatMessage(messages.openCustomApplicationsSettings),
1264
+ action: {
1265
+ type: actionTypes.go,
1266
+ to: "/".concat(applicationContext.project.key, "/settings/custom-applications")
1267
+ }
1268
+ }]).call(_context8, nonNullable)
1269
+ }, applicationContext.project && applicationContext.project.languages && applicationContext.project.languages.length > 1 && {
1270
+ id: 'action/set-resource-language',
1271
+ text: intl.formatMessage(messages.setResourceLanguage),
1272
+ keywords: ['set resource locale', 'set project data language', 'set project data locale'],
1273
+ action: () => void 0,
1274
+ // We would know these statically, but we define them here as we don't
1275
+ // want to include them in the top-level search results
1276
+ subCommands: () => {
1277
+ var _context11, _context12;
1278
+ return _Promise__default["default"].resolve(_filterInstanceProperty__default["default"](_context11 = _mapInstanceProperty__default["default"](_context12 = applicationContext.project ? applicationContext.project.languages : []).call(_context12, language => changeProjectDataLocale && {
1279
+ id: "action/set-resource-language/".concat(language),
1280
+ text: commonTags.oneLineTrim(_templateObject$2 || (_templateObject$2 = _taggedTemplateLiteral(["\n ", "\n ", "\n "])), language, language === applicationContext.dataLocale ? ' (active)' : ''),
1281
+ action: () => {
1282
+ changeProjectDataLocale(language);
1283
+
1284
+ // We reload, since ProjectDataLocale is written in a way where
1285
+ // only the tree under the parent container reloads, but
1286
+ // not all of them reload.
1287
+ // So this action would seem like it had not effect, unless we
1288
+ // reload
1289
+ useIsServedByProxy.location.reload();
1290
+ }
1291
+ })).call(_context11, nonNullable));
1292
+ }
1293
+ }, {
1294
+ id: 'go/support',
1295
+ text: intl.formatMessage(messages.openSupport),
1296
+ keywords: ['Go to support'],
1297
+ action: {
1298
+ type: actionTypes.go,
1299
+ to: constants.SUPPORT_PORTAL_URL
1300
+ }
1301
+ }, {
1302
+ id: 'go/account-profile',
1303
+ text: intl.formatMessage(messages.openMyProfile),
1304
+ keywords: ['Go to user account', 'Go to profile', 'Open profile'],
1305
+ action: {
1306
+ type: actionTypes.go,
1307
+ to: "/account/profile"
1308
+ }
1309
+ }, {
1310
+ id: 'go/privacy-policy',
1311
+ text: intl.formatMessage(messages.showPrivacyPolicy),
1312
+ keywords: ['Open Privacy Policy'],
1313
+ action: {
1314
+ type: actionTypes.go,
1315
+ to: 'https://commercetools.com/privacy#suppliers'
1316
+ }
1317
+ }, {
1318
+ id: 'go/logout',
1319
+ text: intl.formatMessage(messages.logout),
1320
+ keywords: ['Sign out'],
1321
+ action: {
1322
+ type: actionTypes.go,
1323
+ to: "/logout?reason=".concat(constants.LOGOUT_REASONS.USER)
1324
+ }
1325
+ }, {
1326
+ id: 'go/manage-projects',
1327
+ text: intl.formatMessage(messages.openManageProjects),
1328
+ keywords: ['Go to manage projects', 'Go to projects', 'Open projects list'],
1329
+ action: {
1330
+ type: actionTypes.go,
1331
+ to: "/account/projects"
1332
+ }
1333
+ }, {
1334
+ id: 'go/manage-organizations',
1335
+ text: intl.formatMessage(messages.openManageOrganizations),
1336
+ keywords: ['Go to manage organizations', 'Go to organizations', 'Open organizations list'],
1337
+ action: {
1338
+ type: actionTypes.go,
1339
+ to: "/account/organizations"
1340
+ }
1341
+ }, ...(applicationContext.user ? _mapInstanceProperty__default["default"](_context13 = applicationContext.user.projects.results).call(_context13, userProject => ({
1342
+ id: "go/project(".concat(userProject.key, ")"),
1343
+ text: intl.formatMessage(messages.useProject, {
1344
+ projectName: userProject.name
1345
+ }),
1346
+ keywords: [userProject.key],
1347
+ action: () => {
1348
+ // Switching projects needs a full redirect so that
1349
+ // the feature flags are reloaded (and things caches get destroyed)
1350
+ window.location.href = "/".concat(userProject.key);
1351
+ }
1352
+ })) : [])]).call(_context, nonNullable);
1353
+ };
1354
+
1355
+ const STORAGE_KEY = 'quickAccessHistoryEntries';
1356
+ const saveHistoryEntries = historyEntries => {
1357
+ try {
1358
+ window.sessionStorage.setItem(STORAGE_KEY, _JSON$stringify__default["default"](historyEntries));
1359
+ return true;
1360
+ } catch (error) {
1361
+ return false;
1362
+ }
1363
+ };
1364
+ const loadHistoryEntries = () => {
1365
+ try {
1366
+ const value = sessionStorage.getItem(STORAGE_KEY);
1367
+ return value ? JSON.parse(value) : [];
1368
+ } catch (error) {
1369
+ return [];
1370
+ }
1371
+ };
1372
+
1373
+ var _templateObject$1, _templateObject2$1, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
1374
+ var QuickAccessProductQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccessProduct" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productId" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "productId" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "allVariants" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 208, source: { body: "query QuickAccessProduct($productId: String!) {\n product(id: $productId) {\n id\n masterData {\n staged {\n allVariants {\n id\n key\n sku\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1375
+ const createProductVariantSubCommands = _ref => {
1376
+ var _context, _context2, _context3, _context4;
1377
+ let intl = _ref.intl,
1378
+ applicationContext = _ref.applicationContext,
1379
+ productId = _ref.productId,
1380
+ variantId = _ref.variantId;
1381
+ const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1382
+ if (!canViewProducts || !applicationContext.project) return [];
1383
+ return [{
1384
+ id: _concatInstanceProperty__default["default"](_context = "go/product(".concat(productId, ")/variant(")).call(_context, variantId, ")/attributes"),
1385
+ text: intl.formatMessage(messages.showProductVariantAttributes),
1386
+ action: {
1387
+ type: actionTypes.go,
1388
+ to: commonTags.oneLineTrim(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /attributes\n "])), applicationContext.project.key, productId, variantId)
1389
+ }
1390
+ }, {
1391
+ id: _concatInstanceProperty__default["default"](_context2 = "go/product(".concat(productId, ")/variant")).call(_context2, variantId, "/images"),
1392
+ text: intl.formatMessage(messages.showProductVariantImages),
1393
+ action: {
1394
+ type: actionTypes.go,
1395
+ to: commonTags.oneLineTrim(_templateObject2$1 || (_templateObject2$1 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /images\n "])), applicationContext.project.key, productId, variantId)
1396
+ }
1397
+ }, {
1398
+ id: _concatInstanceProperty__default["default"](_context3 = "go/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")/prices"),
1399
+ text: intl.formatMessage(messages.showProductVariantPrices),
1400
+ action: {
1401
+ type: actionTypes.go,
1402
+ to: commonTags.oneLineTrim(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /prices\n "])), applicationContext.project.key, productId, variantId)
1403
+ }
1404
+ }, {
1405
+ id: _concatInstanceProperty__default["default"](_context4 = "go/product(".concat(productId, ")/variant(")).call(_context4, variantId, ")/inventory"),
1406
+ text: intl.formatMessage(messages.showProductVariantInventory),
1407
+ action: {
1408
+ type: actionTypes.go,
1409
+ to: commonTags.oneLineTrim(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n /inventory\n "])), applicationContext.project.key, productId, variantId)
1410
+ }
1411
+ }];
1412
+ };
1413
+ const formatVariantMessage = (variant, intl) => {
1414
+ if (variant.sku) return intl.formatMessage(messages.openVariantBySku, {
1415
+ sku: variant.sku
1416
+ });
1417
+ if (variant.key) return intl.formatMessage(messages.openVariantByKey, {
1418
+ key: variant.key
1419
+ });
1420
+ return intl.formatMessage(messages.openVariantById, {
1421
+ id: variant.id
1422
+ });
1423
+ };
1424
+ const createProductVariantListSubCommands = async _ref2 => {
1425
+ let intl = _ref2.intl,
1426
+ applicationContext = _ref2.applicationContext,
1427
+ productId = _ref2.productId,
1428
+ execQuery = _ref2.execQuery;
1429
+ const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1430
+ if (!canViewProducts) return [];
1431
+ const data = await execQuery(QuickAccessProductQuery, {
1432
+ productId
1433
+ }, {
1434
+ target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1435
+ });
1436
+ if (data && data.product && data.product.masterData && data.product.masterData.staged && applicationContext.project) {
1437
+ var _context5;
1438
+ const projectKey = applicationContext.project.key;
1439
+ return _mapInstanceProperty__default["default"](_context5 = data.product.masterData.staged.allVariants).call(_context5, variant => {
1440
+ var _context6;
1441
+ return {
1442
+ id: _concatInstanceProperty__default["default"](_context6 = "go/product(".concat(productId, ")/variant(")).call(_context6, variant.id, ")"),
1443
+ text: formatVariantMessage(variant, intl),
1444
+ subCommands: createProductVariantSubCommands({
1445
+ intl,
1446
+ applicationContext,
1447
+ productId,
1448
+ variantId: variant.id
1449
+ }),
1450
+ action: {
1451
+ type: actionTypes.go,
1452
+ to: commonTags.oneLineTrim(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), projectKey, productId, variant.id)
1453
+ }
1454
+ };
1455
+ });
1456
+ }
1457
+ return [];
1458
+ };
1459
+ const createProductTabsSubCommands = _ref3 => {
1460
+ let intl = _ref3.intl,
1461
+ applicationContext = _ref3.applicationContext,
1462
+ productId = _ref3.productId;
1463
+ const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1464
+ if (!canViewProducts || !applicationContext.project) return [];
1465
+ return [{
1466
+ id: "go/product(".concat(productId, ")/general"),
1467
+ text: intl.formatMessage(messages.openProductVariantGeneral),
1468
+ action: {
1469
+ type: actionTypes.go,
1470
+ to: commonTags.oneLineTrim(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /general\n "])), applicationContext.project.key, productId)
1471
+ }
1472
+ }, {
1473
+ id: "go/product(".concat(productId, ")/variants"),
1474
+ text: intl.formatMessage(messages.openProductVariantList),
1475
+ action: {
1476
+ type: actionTypes.go,
1477
+ to: commonTags.oneLineTrim(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n "])), applicationContext.project.key, productId)
1478
+ },
1479
+ subCommands: execQuery => createProductVariantListSubCommands({
1480
+ intl,
1481
+ applicationContext,
1482
+ productId,
1483
+ execQuery
1484
+ })
1485
+ }, {
1486
+ id: "go/product(".concat(productId, ")/search"),
1487
+ text: intl.formatMessage(messages.openProductVariantSearch),
1488
+ action: {
1489
+ type: actionTypes.go,
1490
+ to: commonTags.oneLineTrim(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /search\n "])), applicationContext.project.key, productId)
1491
+ }
1492
+ }];
1493
+ };
1494
+
1495
+ const sanitize = param => param
1496
+ // Replace all \ with \\ (to prevent generate escape characters)
1497
+ .replace(/\\/g, '\\\\')
1498
+ // Replace all " with \"
1499
+ .replace(/"/g, '\\"');
1500
+ const flattenCommands = async (results, execQuery) => {
1501
+ async function flatten(commands) {
1502
+ return _reduceInstanceProperty__default["default"](commands).call(commands, async (prevPromise, command) => {
1503
+ const prevResults = await prevPromise;
1504
+ if (command.subCommands) {
1505
+ if (typeof command.subCommands === 'function') {
1506
+ const subCommands = await command.subCommands(execQuery);
1507
+ const flattenSubCommands = await flatten(subCommands);
1508
+ return [...prevResults, command, ...flattenSubCommands];
1509
+ }
1510
+ const flattenSubCommands = await flatten(command.subCommands);
1511
+ return [...prevResults, command, ...flattenSubCommands];
1512
+ }
1513
+ return [...prevResults, command];
1514
+ }, _Promise__default["default"].resolve([]));
1515
+ }
1516
+ return await flatten(results);
1517
+ };
1518
+
1519
+ // Once ui-kit exposes its fallback mechanism, we can use the same one here
1520
+ const translate = (nameAllLocales, projectDataLocale) => {
1521
+ const matchedTranslation = _findInstanceProperty__default["default"](nameAllLocales).call(nameAllLocales, translation => translation.locale === projectDataLocale && translation.value);
1522
+ if (matchedTranslation) return matchedTranslation.value;
1523
+
1524
+ // Fall back to the first available locale
1525
+ if (nameAllLocales.length > 0) return nameAllLocales[0].value;
1526
+ return '';
1527
+ };
1528
+
1529
+ var _templateObject, _templateObject2;
1530
+ var QuickAccessQuery = { kind: "Document", definitions: [{ kind: "OperationDefinition", operation: "query", name: { kind: "Name", value: "QuickAccess" }, variableDefinitions: [{ kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "searchText" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "String" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } }, type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, directives: [] }, { kind: "VariableDefinition", variable: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } }, type: { kind: "NonNullType", type: { kind: "NamedType", name: { kind: "Name", value: "Boolean" } } }, directives: [] }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", alias: { kind: "Name", value: "productsByIds" }, name: { kind: "Name", value: "products" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "where" }, value: { kind: "Variable", name: { kind: "Name", value: "productsWhereClause" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "includeProductsByIds" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "results" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productById" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "id" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantSku" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "sku" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }, { kind: "Field", alias: { kind: "Name", value: "productByVariantKey" }, name: { kind: "Name", value: "product" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "variantKey" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [{ kind: "Directive", name: { kind: "Name", value: "include" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "if" }, value: { kind: "Variable", name: { kind: "Name", value: "canViewProducts" } } }] }], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "masterData" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "staged" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "nameAllLocales" }, arguments: [], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "locale" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "value" }, arguments: [], directives: [] }] } }, { kind: "Field", name: { kind: "Name", value: "variant" }, arguments: [{ kind: "Argument", name: { kind: "Name", value: "key" }, value: { kind: "Variable", name: { kind: "Name", value: "searchText" } } }], directives: [], selectionSet: { kind: "SelectionSet", selections: [{ kind: "Field", name: { kind: "Name", value: "sku" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "key" }, arguments: [], directives: [] }, { kind: "Field", name: { kind: "Name", value: "id" }, arguments: [], directives: [] }] } }] } }] } }] } }] } }], loc: { start: 0, end: 1407, source: { body: "query QuickAccess(\n $searchText: String!\n $canViewProducts: Boolean!\n $productsWhereClause: String\n $includeProductsByIds: Boolean!\n) {\n productsByIds: products(where: $productsWhereClause)\n @include(if: $includeProductsByIds) {\n results {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n }\n\n productById: product(id: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByKey: product(key: $searchText) @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n }\n }\n }\n\n productByVariantSku: product(sku: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(sku: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n\n productByVariantKey: product(variantKey: $searchText)\n @include(if: $canViewProducts) {\n id\n masterData {\n staged {\n nameAllLocales {\n locale\n value\n }\n variant(key: $searchText) {\n sku\n key\n id\n }\n }\n }\n }\n}\n", name: "GraphQL request", locationOffset: { line: 1, column: 1 } } } };
1531
+ const searchProductIdsAction = (searchText, projectKey, dataLocale) => sdk.actions.post({
1532
+ uri: "/".concat(projectKey, "/search/products"),
1533
+ mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1534
+ payload: {
1535
+ query: {
1536
+ fullText: {
1537
+ field: 'name',
1538
+ language: dataLocale,
1539
+ value: searchText
1540
+ }
1541
+ },
1542
+ sort: [{
1543
+ field: 'name',
1544
+ language: dataLocale,
1545
+ order: 'desc'
1546
+ }],
1547
+ limit: 9,
1548
+ offset: 0
1549
+ }
1550
+ });
1551
+ const pimIndexerStatusAction = (projectKey, dataLocale) =>
1552
+ // TODO this should be sdkActions.head()
1553
+ // and then we should check whether the response code is
1554
+ // - 200 meaning the project is indexed
1555
+ // - 404 meaning the project is not indexed
1556
+ //
1557
+ // But there is a problem in tne node-sdk client as it tries to
1558
+ // .json()-parse the response to HEAD requests which results in an
1559
+ // error, so we send a regular request for now and limit to no results
1560
+ // instead to keep the payload minimal
1561
+ sdk.actions.post({
1562
+ uri: "/".concat(projectKey, "/search/products"),
1563
+ mcApiProxyTarget: constants.MC_API_PROXY_TARGETS.PIM_SEARCH,
1564
+ payload: {
1565
+ query: {
1566
+ fullText: {
1567
+ field: 'name',
1568
+ language: dataLocale,
1569
+ value: 'availability-check'
1570
+ }
1571
+ },
1572
+ limit: 0,
1573
+ offset: 0
1574
+ }
1575
+ });
1576
+ const QuickAccess = props => {
1577
+ const _useState = react$1.useState(loadHistoryEntries()),
1578
+ _useState2 = _slicedToArray(_useState, 2),
1579
+ historyEntries = _useState2[0],
1580
+ setHistoryEntries = _useState2[1];
1581
+ const handleHistoryEntriesChange = react$1.useCallback(entries => {
1582
+ // Keep the history in sync with the session storage
1583
+ saveHistoryEntries(entries);
1584
+ setHistoryEntries(entries);
1585
+ }, []);
1586
+ const history = reactRouterDom.useHistory();
1587
+ const apolloClient = react$2.useApolloClient();
1588
+ const intl = reactIntl.useIntl();
1589
+ const _useFeatureToggles = reactBroadcast.useFeatureToggles({
1590
+ pimSearch: true,
1591
+ customApplications: true,
1592
+ canViewDashboard: true
1593
+ }),
1594
+ _useFeatureToggles2 = _slicedToArray(_useFeatureToggles, 3),
1595
+ isPimSearchEnabled = _useFeatureToggles2[0],
1596
+ isCustomApplicationsEnabled = _useFeatureToggles2[1],
1597
+ isCanViewDashboardEnabled = _useFeatureToggles2[2];
1598
+ const applicationContext = applicationShellConnectors.useApplicationContext();
1599
+
1600
+ // Destructure functions from props to reference them in the hook dependency list
1601
+ const onPimIndexerStateChangeFromParent = props.onPimIndexerStateChange;
1602
+ const dispatchFetchProductIds = sdk.useAsyncDispatch();
1603
+ const fetchPimSearchProductIds = react$1.useCallback(async searchText => {
1604
+ if (applicationContext.project && applicationContext.dataLocale) {
1605
+ var _context;
1606
+ const result = await dispatchFetchProductIds(searchProductIdsAction(searchText, applicationContext.project.key, applicationContext.dataLocale));
1607
+ return result && result.hits ? _mapInstanceProperty__default["default"](_context = result.hits).call(_context, hit => hit.id) : [];
1608
+ }
1609
+ return [];
1610
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchProductIds]);
1611
+ const dispatchFetchPimIndexerStatus = sdk.useAsyncDispatch();
1612
+ const fetchPimIndexerStatus = react$1.useCallback(async () => {
1613
+ if (applicationContext.project && applicationContext.dataLocale) {
1614
+ try {
1615
+ dispatchFetchPimIndexerStatus(pimIndexerStatusAction(applicationContext.project.key, applicationContext.dataLocale));
1616
+ return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED;
1617
+ } catch (error) {
1618
+ // eslint-disable-next-line no-console
1619
+ if (process.env.NODE_ENV !== 'production') console.error(error);
1620
+ // project is not using pim-indexer when response error code is 404,
1621
+ // but we treat all errors as non-indexed as a safe guard, so we're
1622
+ // not checking the response error code at all
1623
+ return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1624
+ }
1625
+ }
1626
+ return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1627
+ }, [applicationContext.dataLocale, applicationContext.project, dispatchFetchPimIndexerStatus]);
1628
+ const getProjectIndexStatus = react$1.useCallback(async () => {
1629
+ // skip when there is no project
1630
+ if (!applicationContext.project) return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1631
+ const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1632
+
1633
+ // skip checking when user can't view products anyways
1634
+ if (!canViewProducts) return dist_commercetoolsFrontendApplicationShell.pimIndexerStates.NOT_INDEXED;
1635
+ return await fetchPimIndexerStatus();
1636
+ }, [applicationContext.permissions, applicationContext.project, fetchPimIndexerStatus]);
1637
+ react$1.useEffect(() => {
1638
+ if (props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.UNCHECKED) {
1639
+ getProjectIndexStatus().then(status => {
1640
+ onPimIndexerStateChangeFromParent(status);
1641
+ });
1642
+ }
1643
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1644
+ }, []); // <-- run only once, when component mounts
1645
+
1646
+ const execQuery = react$1.useCallback((Query, variables, context) => apolloClient.query({
1647
+ query: Query,
1648
+ errorPolicy: 'ignore',
1649
+ variables,
1650
+ context
1651
+ }).then(response => response.data), [apolloClient]);
1652
+ const getNextCommands = react$1.useCallback(async command => {
1653
+ if (!command.subCommands) return [];
1654
+ if (_Array$isArray__default["default"](command.subCommands)) return command.subCommands;
1655
+ return await command.subCommands(execQuery);
1656
+ }, [execQuery]);
1657
+ const getProjectCommands = react$1.useCallback(async searchText => {
1658
+ const idsOfProductsMatchingSearchText = props.pimIndexerState === dist_commercetoolsFrontendApplicationShell.pimIndexerStates.INDEXED ? await fetchPimSearchProductIds(searchText) : [];
1659
+ const canViewProducts = permissions$1.hasSomePermissions([permissions.ViewProducts], applicationContext.permissions);
1660
+ const data = await execQuery(QuickAccessQuery, {
1661
+ searchText: sanitize(searchText),
1662
+ // Pass conditional arguments to disable some of the queries
1663
+ canViewProducts,
1664
+ productsWhereClause: "id in (".concat(_mapInstanceProperty__default["default"](idsOfProductsMatchingSearchText).call(idsOfProductsMatchingSearchText, id => _JSON$stringify__default["default"](id)).join(', '), ")"),
1665
+ includeProductsByIds: Boolean(canViewProducts && idsOfProductsMatchingSearchText.length > 0)
1666
+ }, {
1667
+ target: constants.GRAPHQL_TARGETS.COMMERCETOOLS_PLATFORM
1668
+ });
1669
+ const commands = [];
1670
+ if (data && data.productByVariantKey && data.productByVariantKey.masterData && data.productByVariantKey.masterData.staged && data.productByVariantKey.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1671
+ var _context2;
1672
+ const productId = data.productByVariantKey.id;
1673
+ const variantId = data.productByVariantKey.masterData.staged.variant.id;
1674
+ const variantKey = data.productByVariantKey.masterData.staged.variant.key;
1675
+ commands.push({
1676
+ id: _concatInstanceProperty__default["default"](_context2 = "go/product-variant-by-key/product(".concat(productId, "/variant(")).call(_context2, variantId, ")"),
1677
+ text: intl.formatMessage(messages.showProductVariant, {
1678
+ variantName: translate(data.productByVariantKey.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1679
+ }),
1680
+ keywords: variantKey ? [variantKey] : undefined,
1681
+ action: {
1682
+ type: actionTypes.go,
1683
+ to: commonTags.oneLineTrim(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
1684
+ },
1685
+ subCommands: createProductVariantSubCommands({
1686
+ intl,
1687
+ applicationContext,
1688
+ productId,
1689
+ variantId
1690
+ })
1691
+ });
1692
+ }
1693
+ if (data && data.productByVariantSku && data.productByVariantSku.masterData && data.productByVariantSku.masterData.staged && data.productByVariantSku.masterData.staged.variant && applicationContext.project && applicationContext.dataLocale) {
1694
+ var _context3;
1695
+ const productId = data.productByVariantSku.id;
1696
+ const variantId = data.productByVariantSku.masterData.staged.variant.id;
1697
+ commands.push({
1698
+ id: _concatInstanceProperty__default["default"](_context3 = "go/product-variant-by-sku/product(".concat(productId, ")/variant(")).call(_context3, variantId, ")"),
1699
+ text: intl.formatMessage(messages.showProductVariant, {
1700
+ variantName: data.productByVariantSku.masterData.staged.variant.sku
1701
+ }),
1702
+ action: {
1703
+ type: actionTypes.go,
1704
+ to: commonTags.oneLineTrim(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n /", "\n /products\n /", "\n /variants\n /", "\n "])), applicationContext.project.key, productId, variantId)
1705
+ },
1706
+ subCommands: createProductVariantSubCommands({
1707
+ intl,
1708
+ applicationContext,
1709
+ productId,
1710
+ variantId
1711
+ })
1712
+ });
1713
+ }
1714
+ if (data && data.productById && data.productById.masterData && data.productById.masterData.staged && data.productById.masterData.staged.nameAllLocales && applicationContext.project && applicationContext.dataLocale) {
1715
+ var _context4;
1716
+ const productId = data.productById.id;
1717
+ commands.push({
1718
+ id: "go/product-by-id/product(".concat(productId, ")"),
1719
+ text: intl.formatMessage(messages.showProduct, {
1720
+ productName: translate(data.productById.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1721
+ }),
1722
+ keywords: [productId],
1723
+ action: {
1724
+ type: actionTypes.go,
1725
+ to: _concatInstanceProperty__default["default"](_context4 = "/".concat(applicationContext.project.key, "/products/")).call(_context4, productId)
1726
+ },
1727
+ subCommands: createProductTabsSubCommands({
1728
+ intl,
1729
+ applicationContext,
1730
+ productId
1731
+ })
1732
+ });
1733
+ }
1734
+ if (data && data.productsByIds && data.productsByIds.results) {
1735
+ var _context5;
1736
+ _forEachInstanceProperty__default["default"](_context5 = data.productsByIds.results).call(_context5, product => {
1737
+ if (product.masterData.staged && applicationContext.project && applicationContext.dataLocale) {
1738
+ var _context6;
1739
+ commands.push({
1740
+ id: "go/product-by-search-text/product(".concat(product.id, ")"),
1741
+ text: intl.formatMessage(messages.showProduct, {
1742
+ productName: translate(product.masterData.staged.nameAllLocales, applicationContext.dataLocale)
1743
+ }),
1744
+ keywords: [product.id],
1745
+ action: {
1746
+ type: actionTypes.go,
1747
+ to: _concatInstanceProperty__default["default"](_context6 = "/".concat(applicationContext.project.key, "/products/")).call(_context6, product.id)
1748
+ },
1749
+ subCommands: createProductTabsSubCommands({
1750
+ intl,
1751
+ applicationContext,
1752
+ productId: product.id
1753
+ })
1754
+ });
1755
+ }
1756
+ });
1757
+ }
1758
+ if (data && data.productByKey && applicationContext.project && applicationContext.dataLocale) {
1759
+ var _context7;
1760
+ const productId = data.productByKey.id;
1761
+ commands.push({
1762
+ id: "go/product-by-key/product(".concat(productId, ")"),
1763
+ text: intl.formatMessage(messages.showProduct, {
1764
+ productName: searchText
1765
+ }),
1766
+ action: {
1767
+ type: actionTypes.go,
1768
+ to: _concatInstanceProperty__default["default"](_context7 = "/".concat(applicationContext.project.key, "/products/")).call(_context7, productId)
1769
+ },
1770
+ subCommands: createProductTabsSubCommands({
1771
+ intl,
1772
+ applicationContext,
1773
+ productId
1774
+ })
1775
+ });
1776
+ }
1777
+ return commands;
1778
+ }, [applicationContext, execQuery, fetchPimSearchProductIds, intl, props.pimIndexerState]);
1779
+ const debouncedGetProjectCommands = debounce__default["default"](getProjectCommands, 200, {
1780
+ cancelObj: 'canceled'
1781
+ });
1782
+ const search = react$1.useCallback(async searchText => {
1783
+ const generalCommands = createCommands({
1784
+ applicationContext,
1785
+ changeProjectDataLocale: props.onChangeProjectDataLocale,
1786
+ intl,
1787
+ featureToggles: {
1788
+ pimSearch: isPimSearchEnabled,
1789
+ customApplications: isCustomApplicationsEnabled,
1790
+ canViewDashboard: isCanViewDashboardEnabled
1791
+ }
1792
+ });
1793
+ if (!applicationContext.project) return generalCommands;
1794
+
1795
+ // Avoid searching for short texts, as we won't get any good results
1796
+ // anyways. This results in commands popping up immediately when the user
1797
+ // starts typing, which gives the whole search a much more repsonsive
1798
+ // feeling.
1799
+ if (_trimInstanceProperty__default["default"](searchText).call(searchText).length < 3) return generalCommands;
1800
+ try {
1801
+ const projectCommands = await debouncedGetProjectCommands(searchText);
1802
+ const allCommands = [...generalCommands, ...projectCommands];
1803
+ return await flattenCommands(allCommands, execQuery);
1804
+ } catch (error) {
1805
+ // When the debounced search is canceled, it throws with "canceled"
1806
+ // In that case we know that another search is going to happen
1807
+ // and we just resolve with the general commands.
1808
+ if (error === 'canceled') return generalCommands;
1809
+ throw error;
1810
+ }
1811
+ }, [applicationContext, debouncedGetProjectCommands, execQuery, intl, isCanViewDashboardEnabled, isCustomApplicationsEnabled, isPimSearchEnabled, props.onChangeProjectDataLocale]);
1812
+ const executeCommand = react$1.useCallback((command, meta) => {
1813
+ var _context8;
1814
+ if (typeof command.action === 'function') {
1815
+ // Idea: We could handle these errors and set them on status bar of Butler
1816
+ // We can also handle sync/async commands by checking command.action.then
1817
+ command.action();
1818
+ return;
1819
+ }
1820
+ // open in new window
1821
+ // and always open other pages in a new window
1822
+ if (meta.openInNewTab || !_startsWithInstanceProperty__default["default"](_context8 = command.action.to).call(_context8, '/')) {
1823
+ // eslint-disable-next-line no-restricted-globals
1824
+ open(command.action.to, '_blank');
1825
+ } else if (applicationContext.environment.useFullRedirectsForLinks) {
1826
+ useIsServedByProxy.location.replace(command.action.to);
1827
+ } else {
1828
+ history.push(command.action.to);
1829
+ }
1830
+ }, [applicationContext.environment.useFullRedirectsForLinks, history]);
1831
+ return jsxRuntime.jsx(ButlerWithAnimation, {
1832
+ historyEntries: historyEntries,
1833
+ onHistoryEntriesChange: handleHistoryEntriesChange,
1834
+ search: search,
1835
+ executeCommand: executeCommand,
1836
+ onClose: props.onClose,
1837
+ getNextCommands: getNextCommands
1838
+ });
1839
+ };
1840
+ QuickAccess.propTypes = process.env.NODE_ENV !== "production" ? {
1841
+ pimIndexerState: _pt__default["default"].any.isRequired,
1842
+ onPimIndexerStateChange: _pt__default["default"].func.isRequired,
1843
+ onClose: _pt__default["default"].func.isRequired,
1844
+ onChangeProjectDataLocale: _pt__default["default"].func
1845
+ } : {};
1846
+ QuickAccess.displayName = 'QuickAccess';
1847
+
1848
+ exports["default"] = QuickAccess;