@commercetools-frontend/application-shell 21.0.0-rc.1 → 21.0.0-rc.3

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 (50) hide show
  1. package/README.md +1 -1
  2. package/dist/{application-entry-point-43e5d2d3.esm.js → application-entry-point-4ef2cd89.esm.js} +67 -23
  3. package/dist/{application-entry-point-58093e24.cjs.dev.js → application-entry-point-684d30f1.cjs.dev.js} +85 -41
  4. package/dist/{application-entry-point-b89a7e84.cjs.prod.js → application-entry-point-aeb8ef57.cjs.prod.js} +76 -41
  5. package/dist/commercetools-frontend-application-shell.cjs.dev.js +7 -7
  6. package/dist/commercetools-frontend-application-shell.cjs.prod.js +7 -7
  7. package/dist/commercetools-frontend-application-shell.esm.js +5 -5
  8. package/dist/declarations/src/components/application-entry-point/application-entry-point.d.ts +1 -0
  9. package/dist/declarations/src/components/application-shell/application-shell.d.ts +1 -0
  10. package/dist/declarations/src/components/application-shell-provider/use-coerced-environment-values.d.ts +1 -1
  11. package/dist/declarations/src/components/project-container/project-container.d.ts +1 -0
  12. package/dist/declarations/src/test-utils/test-utils.d.ts +2 -1
  13. package/dist/formatters-1c23c0a9.esm.js +93 -0
  14. package/dist/{oidc-7e7761de.cjs.dev.js → formatters-a5bb12eb.cjs.prod.js} +52 -38
  15. package/dist/{oidc-be09bd90.cjs.prod.js → formatters-e4b9b9dc.cjs.dev.js} +52 -38
  16. package/dist/{index-3a993fb5.cjs.dev.js → index-20accc34.cjs.dev.js} +60 -56
  17. package/dist/{index-a0f21c48.esm.js → index-2ed9e466.esm.js} +21 -17
  18. package/dist/{index-e270df38.cjs.prod.js → index-7a56bcf7.cjs.prod.js} +51 -49
  19. package/dist/oidc-0f5f3c40.esm.js +39 -0
  20. package/dist/oidc-96d1b0dd.cjs.dev.js +46 -0
  21. package/dist/oidc-f15b3576.cjs.prod.js +46 -0
  22. package/dist/{project-expired-a0171912.cjs.prod.js → project-expired-23986e27.cjs.prod.js} +8 -8
  23. package/dist/{project-expired-e68a5ca7.esm.js → project-expired-636492de.esm.js} +8 -8
  24. package/dist/{project-expired-1482bfa9.cjs.dev.js → project-expired-bf97d316.cjs.dev.js} +8 -8
  25. package/dist/{project-not-found-f34fa3de.cjs.dev.js → project-not-found-9cd66e2e.cjs.dev.js} +8 -8
  26. package/dist/{project-not-found-007518e8.cjs.prod.js → project-not-found-aed705a5.cjs.prod.js} +8 -8
  27. package/dist/{project-not-found-9c7c1af4.esm.js → project-not-found-f683495d.esm.js} +8 -8
  28. package/dist/{project-not-initialized-cdb93a84.esm.js → project-not-initialized-0dd0af36.esm.js} +8 -8
  29. package/dist/{project-not-initialized-70fd56de.cjs.prod.js → project-not-initialized-64d7c6c4.cjs.prod.js} +8 -8
  30. package/dist/{project-not-initialized-7d2cbb3c.cjs.dev.js → project-not-initialized-74b1d4f0.cjs.dev.js} +8 -8
  31. package/dist/{project-suspended-de520a33.esm.js → project-suspended-8613f5b0.esm.js} +8 -8
  32. package/dist/{project-suspended-9ec4ac13.cjs.prod.js → project-suspended-cbd838b6.cjs.prod.js} +8 -8
  33. package/dist/{project-suspended-01aa362c.cjs.dev.js → project-suspended-e25053f6.cjs.dev.js} +8 -8
  34. package/dist/{quick-access-eb5a65a4.cjs.dev.js → quick-access-099595d5.cjs.dev.js} +5 -5
  35. package/dist/{quick-access-72feb162.cjs.prod.js → quick-access-160ee728.cjs.prod.js} +5 -5
  36. package/dist/{quick-access-fb587f16.esm.js → quick-access-4ddb0aad.esm.js} +5 -5
  37. package/dist/{service-page-project-switcher-b5b1f738.cjs.prod.js → service-page-project-switcher-91dc2d6b.cjs.prod.js} +1 -1
  38. package/dist/{service-page-project-switcher-f0404bf1.esm.js → service-page-project-switcher-95af2b70.esm.js} +1 -1
  39. package/dist/{service-page-project-switcher-e4971c9c.cjs.dev.js → service-page-project-switcher-f4d306ff.cjs.dev.js} +1 -1
  40. package/package.json +12 -12
  41. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.dev.js +4 -4
  42. package/ssr/dist/commercetools-frontend-application-shell-ssr.cjs.prod.js +4 -4
  43. package/ssr/dist/commercetools-frontend-application-shell-ssr.esm.js +2 -2
  44. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.dev.js +9 -5
  45. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.cjs.prod.js +9 -5
  46. package/test-utils/dist/commercetools-frontend-application-shell-test-utils.esm.js +9 -5
  47. package/dist/constants-33a16227.esm.js +0 -46
  48. package/dist/constants-745aeeca.cjs.prod.js +0 -54
  49. package/dist/constants-fdbe0e9d.cjs.dev.js +0 -54
  50. package/dist/oidc-8e05c00e.esm.js +0 -84
@@ -1,4 +1,4 @@
1
- import { g as getMcApiUrl, l as logger, a as getActiveProjectKey, r as removeActiveProjectKey, s as setActiveProjectKey, b as getSessionScope, c as location, d as getSessionState, e as setActiveSession, f as createApolloClient, i as internalReduxStore, h as setCachedApolloClient, v as version, R as REQUESTS_IN_FLIGHT_LOADER_DOM_ID, u as useIsServedByProxy, A as ApplicationEntryPoint, j as setSessionScope, k as setSessionState, m as clearSession, n as selectProjectKeyFromUrl, o as RequestsInFlightLoader, p as RouteCatchAll } from './application-entry-point-43e5d2d3.esm.js';
1
+ import { g as getMcApiUrl, l as logger, a as getActiveProjectKey, r as removeActiveProjectKey, s as setActiveProjectKey, b as getSessionScope, c as location, d as getSessionState, e as setActiveSession, f as createApolloClient, i as internalReduxStore, h as setCachedApolloClient, v as version, R as REQUESTS_IN_FLIGHT_LOADER_DOM_ID, u as useIsServedByProxy, A as ApplicationEntryPoint, j as setSessionScope, k as setSessionState, m as clearSession, n as selectProjectKeyFromUrl, o as RequestsInFlightLoader, p as RouteCatchAll } from './application-entry-point-4ef2cd89.esm.js';
2
2
  import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
3
3
  import _styled from '@emotion/styled/base';
4
4
  import _pt from 'prop-types';
@@ -23,7 +23,7 @@ import { PublicPageLayout, MaintenancePageLayout, PortalsContainer } from '@comm
23
23
  import { Notifier, NotificationsList } from '@commercetools-frontend/react-notifications';
24
24
  import { AsyncLocaleData } from '@commercetools-frontend/i18n';
25
25
  import { v4 } from 'uuid';
26
- import { S as STORAGE_KEYS, O as OIDC_CLAIMS, C as CONTAINERS, a as SUSPENSION_REASONS, b as OIDC_RESPONSE_TYPES } from './constants-33a16227.esm.js';
26
+ import { S as STORAGE_KEYS, O as OIDC_CLAIMS, C as CONTAINERS, a as SUSPENSION_REASONS, b as OIDC_RESPONSE_TYPES } from './formatters-1c23c0a9.esm.js';
27
27
  import _URL from '@babel/runtime-corejs3/core-js-stable/url';
28
28
  import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
29
29
  import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
@@ -39,7 +39,7 @@ import { Provider, useStore } from 'react-redux';
39
39
  import history from '@commercetools-frontend/browser-history';
40
40
  import { IntlProvider, defineMessages, useIntl, FormattedMessage } from 'react-intl';
41
41
  import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
42
- import { b as buildOidcScope } from './oidc-8e05c00e.esm.js';
42
+ import { b as buildOidcScope } from './oidc-0f5f3c40.esm.js';
43
43
  import { encode, decode } from 'qss';
44
44
  import jwtDecode from 'jwt-decode';
45
45
  import FailedAuthenticationSVG from '@commercetools-frontend/assets/images/locked-diamond.svg';
@@ -2365,19 +2365,19 @@ LocaleSwitcher.propTypes = process.env.NODE_ENV !== "production" ? {
2365
2365
  } : {};
2366
2366
 
2367
2367
  var ProjectNotFound = /*#__PURE__*/lazy(function () {
2368
- return import('./project-not-found-9c7c1af4.esm.js'
2368
+ return import('./project-not-found-f683495d.esm.js'
2369
2369
  /* webpackChunkName: "project-not-found" */
2370
2370
  );
2371
2371
  });
2372
2372
 
2373
2373
  var ProjectExpired = /*#__PURE__*/lazy(function () {
2374
- return import('./project-expired-e68a5ca7.esm.js'
2374
+ return import('./project-expired-636492de.esm.js'
2375
2375
  /* webpackChunkName: "project-expired" */
2376
2376
  );
2377
2377
  });
2378
2378
 
2379
2379
  var ProjectNotInitialized = /*#__PURE__*/lazy(function () {
2380
- return import('./project-not-initialized-cdb93a84.esm.js'
2380
+ return import('./project-not-initialized-0dd0af36.esm.js'
2381
2381
  /* webpackChunkName: "project-not-initialized" */
2382
2382
  );
2383
2383
  });
@@ -2424,7 +2424,7 @@ var RedirectToProjectCreate = function RedirectToProjectCreate() {
2424
2424
  RedirectToProjectCreate.displayName = 'RedirectToProjectCreate';
2425
2425
 
2426
2426
  var ProjectSuspended = /*#__PURE__*/lazy(function () {
2427
- return import('./project-suspended-de520a33.esm.js'
2427
+ return import('./project-suspended-8613f5b0.esm.js'
2428
2428
  /* webpackChunkName: "project-suspended" */
2429
2429
  );
2430
2430
  });
@@ -2551,6 +2551,7 @@ var ProjectContainer = function ProjectContainer(props) {
2551
2551
  availableLocales: project.languages
2552
2552
  }), localeSwitcherNode), jsx(ApplicationEntryPoint, {
2553
2553
  environment: props.environment,
2554
+ disableRoutePermissionCheck: props.disableRoutePermissionCheck,
2554
2555
  render: props.render,
2555
2556
  children: props.children
2556
2557
  })]
@@ -2565,6 +2566,7 @@ var ProjectContainer = function ProjectContainer(props) {
2565
2566
  };
2566
2567
 
2567
2568
  ProjectContainer.propTypes = process.env.NODE_ENV !== "production" ? {
2569
+ disableRoutePermissionCheck: _pt.bool,
2568
2570
  render: _pt.func,
2569
2571
  children: _pt.node
2570
2572
  } : {};
@@ -3737,7 +3739,7 @@ var pimIndexerStates = {
3737
3739
  };
3738
3740
 
3739
3741
  var QuickAccess = /*#__PURE__*/lazy(function () {
3740
- return import('./quick-access-fb587f16.esm.js'
3742
+ return import('./quick-access-4ddb0aad.esm.js'
3741
3743
  /* webpackChunkName: "quick-access" */
3742
3744
  );
3743
3745
  });
@@ -3916,7 +3918,6 @@ var RedirectToLogin = function RedirectToLogin() {
3916
3918
  // Additionally, we still send the `nonce` parameter as well.
3917
3919
 
3918
3920
  var sessionId = generateAndCacheNonceWithState({
3919
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
3920
3921
  applicationId: window.app.applicationId,
3921
3922
  // Store query parameters to be used after the callback redirect
3922
3923
  query: {
@@ -4031,7 +4032,7 @@ var MainContainer = _styled("main", process.env.NODE_ENV === "production" ? {
4031
4032
  } : {
4032
4033
  name: "1rdshd",
4033
4034
  styles: "grid-column:2;grid-row:3;min-width:0;overflow-x:hidden;overflow-y:scroll;display:flex;flex-direction:column;position:relative",
4034
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF5R3dDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4035
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwR3dDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4035
4036
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4036
4037
  });
4037
4038
 
@@ -4041,7 +4042,7 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
4041
4042
  } : {
4042
4043
  name: "199a1u7-RestrictedApplication",
4043
4044
  styles: "flex-grow:1;display:flex;flex-direction:column;position:relative;>*:not(:first-of-type){flex-grow:1;display:flex;flex-direction:column;};label:RestrictedApplication;",
4044
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4WHNDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4045
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErWHNDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4045
4046
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4046
4047
  };
4047
4048
 
@@ -4051,7 +4052,7 @@ var _ref3 = process.env.NODE_ENV === "production" ? {
4051
4052
  } : {
4052
4053
  name: "lzvzwe-RestrictedApplication",
4053
4054
  styles: "position:relative;grid-row:3;display:flex;flex-direction:column;label:RestrictedApplication;",
4054
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2VGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4055
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4VGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4055
4056
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4056
4057
  };
4057
4058
 
@@ -4061,7 +4062,7 @@ var _ref4 = process.env.NODE_ENV === "production" ? {
4061
4062
  } : {
4062
4063
  name: "16holxm-RestrictedApplication",
4063
4064
  styles: "grid-row:2;grid-column:1/3;label:RestrictedApplication;",
4064
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnVGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4065
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpVGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4065
4066
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4066
4067
  };
4067
4068
 
@@ -4071,7 +4072,7 @@ var _ref5 = process.env.NODE_ENV === "production" ? {
4071
4072
  } : {
4072
4073
  name: "1u7ux6j-RestrictedApplication",
4073
4074
  styles: "grid-row:1;grid-column:1/3;label:RestrictedApplication;",
4074
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzUGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4075
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1UGtDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4075
4076
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4076
4077
  };
4077
4078
 
@@ -4081,7 +4082,7 @@ var _ref6 = process.env.NODE_ENV === "production" ? {
4081
4082
  } : {
4082
4083
  name: "1e0jzpp-RestrictedApplication",
4083
4084
  styles: "height:100vh;display:grid;grid-template-rows:auto 43px 1fr;grid-template-columns:auto 1fr;label:RestrictedApplication;",
4084
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2T2dDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4085
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4T2dDIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4085
4086
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4086
4087
  };
4087
4088
 
@@ -4317,7 +4318,8 @@ var RestrictedApplication = function RestrictedApplication(props) {
4317
4318
  user: user,
4318
4319
  match: routerProps.match,
4319
4320
  location: routerProps.location,
4320
- environment: applicationEnvironment // This effectively renders the
4321
+ environment: applicationEnvironment,
4322
+ disableRoutePermissionCheck: props.disableRoutePermissionCheck // This effectively renders the
4321
4323
  // children, which is the application
4322
4324
  // specific part
4323
4325
  ,
@@ -4347,7 +4349,7 @@ var _ref = process.env.NODE_ENV === "production" ? {
4347
4349
  } : {
4348
4350
  name: "ubxoj4-ApplicationShell",
4349
4351
  styles: "#app{height:100%;}.ReactModal__Body--open main{overflow:hidden;};label:ApplicationShell;",
4350
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzZm1CIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlZmZlY3RpdmVseSByZW5kZXJzIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiwgd2hpY2ggaXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIHBhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUHJvamVjdENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTWFpbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgPC9TZXR1cEZsb3BGbGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0FzeW5jTG9jYWxlRGF0YT5cbiAgICAgICAgICA8L0FwcGxpY2F0aW9uQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfX1cbiAgICA8L0ZldGNoVXNlcj5cbiAgKTtcbn07XG5SZXN0cmljdGVkQXBwbGljYXRpb24uZGlzcGxheU5hbWUgPSAnUmVzdHJpY3RlZEFwcGxpY2F0aW9uJztcblxuY29uc3QgQXBwbGljYXRpb25TaGVsbCA9IDxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge30+KFxuICBwcm9wczogUHJvcHM8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbikgPT4ge1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHByb3BzLm9uUmVnaXN0ZXJFcnJvckxpc3RlbmVycyh7XG4gICAgICBkaXNwYXRjaDogaW50ZXJuYWxSZWR1eFN0b3JlLmRpc3BhdGNoLFxuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pOyAvLyA8LS0gcnVuIG9ubHkgb25jZSwgd2hlbiBjb21wb25lbnQgbW91bnRzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEdsb2JhbFxuICAgICAgICBzdHlsZXM9e2Nzc2BcbiAgICAgICAgICAjYXBwIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLlJlYWN0TW9kYWxfX0JvZHktLW9wZW4gbWFpbiB7XG4gICAgICAgICAgICAvKiBXaGVuIGEgbW9kYWwgaXMgb3Blbiwgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGNvbnRlbnQgdG8gYmUgc2Nyb2xsYWJsZSAqL1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIGB9XG4gICAgICAvPlxuICAgICAgPEFwcGxpY2F0aW9uU2hlbGxQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICBhcG9sbG9DbGllbnQ9e3Byb3BzLmFwb2xsb0NsaWVudH1cbiAgICAgICAgZW52aXJvbm1lbnQ9e3Byb3BzLmVudmlyb25tZW50fVxuICAgICAgICB0cmFja2luZ0V2ZW50TGlzdD17cHJvcHMudHJhY2tpbmdFdmVudExpc3R9XG4gICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICA+XG4gICAgICAgIHsoeyBpc0F1dGhlbnRpY2F0ZWQgfSkgPT4ge1xuICAgICAgICAgIGlmIChpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTd2l0Y2g+XG4gICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIvbG9nb3V0XCI+XG4gICAgICAgICAgICAgICAgICA8UmVkaXJlY3RUb0xvZ291dCAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgPFJvdXRlPlxuICAgICAgICAgICAgICAgICAgPFJlc3RyaWN0ZWRBcHBsaWNhdGlvbjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmVhdHVyZUZsYWdzPXtwcm9wcy5kZWZhdWx0RmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ3M9e3Byb3BzLmZlYXR1cmVGbGFnc31cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtwcm9wcy5yZW5kZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWVzc2FnZXM9e3Byb3BzLmFwcGxpY2F0aW9uTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uTWVudUl0ZW1DbGljaz17cHJvcHMub25NZW51SXRlbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgICAgICAgICAgICAgICA8L1Jlc3RyaWN0ZWRBcHBsaWNhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JvdXRlPlxuICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiA8UmVkaXJlY3RUb0xvZ2luIC8+O1xuICAgICAgICB9fVxuICAgICAgPC9BcHBsaWNhdGlvblNoZWxsUHJvdmlkZXI+XG4gICAgPC8+XG4gICk7XG59O1xuQXBwbGljYXRpb25TaGVsbC5kaXNwbGF5TmFtZSA9ICdBcHBsaWNhdGlvblNoZWxsJztcbkFwcGxpY2F0aW9uU2hlbGwudmVyc2lvbiA9IHZlcnNpb247XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uU2hlbGw7XG4iXX0= */",
4352
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGxpY2F0aW9uLXNoZWxsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwZm1CIiwiZmlsZSI6ImFwcGxpY2F0aW9uLXNoZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlzcGF0Y2ggfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQgdHlwZSB7IFRGbGFncyB9IGZyb20gJ0BmbG9wZmxpcC90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRDYWNoZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBvbGxvRXJyb3IgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBUQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvYXBwbGljYXRpb24tc2hlbGwtY29ubmVjdG9ycyc7XG5pbXBvcnQgdHlwZSB7IFRBc3luY0xvY2FsZURhdGFQcm9wcyB9IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL2kxOG4nO1xuaW1wb3J0IHR5cGUgeyBUcmFja2luZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9ndG0nO1xuXG5pbXBvcnQgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWRpcmVjdCwgUm91dGUsIFN3aXRjaCwgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IEFwb2xsb0NsaWVudCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50JztcbmltcG9ydCB7IEdsb2JhbCwgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgRE9NQUlOUywgTE9HT1VUX1JFQVNPTlMgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgcmVwb3J0RXJyb3JUb1NlbnRyeSxcbiAgU2VudHJ5VXNlclRyYWNrZXIsXG59IGZyb20gJ0Bjb21tZXJjZXRvb2xzLWZyb250ZW5kL3NlbnRyeSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgdXNlQXBwbGljYXRpb25Db250ZXh0LFxufSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1zaGVsbC1jb25uZWN0b3JzJztcbmltcG9ydCB7IFBvcnRhbHNDb250YWluZXIgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9hcHBsaWNhdGlvbi1jb21wb25lbnRzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNMaXN0IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvcmVhY3Qtbm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBBc3luY0xvY2FsZURhdGEgfSBmcm9tICdAY29tbWVyY2V0b29scy1mcm9udGVuZC9pMThuJztcbmltcG9ydCB2ZXJzaW9uIGZyb20gJy4uLy4uL3ZlcnNpb24nO1xuaW1wb3J0IGludGVybmFsUmVkdXhTdG9yZSBmcm9tICcuLi8uLi9jb25maWd1cmUtc3RvcmUnO1xuaW1wb3J0IHsgc2VsZWN0UHJvamVjdEtleUZyb21VcmwsIGdldFByZXZpb3VzUHJvamVjdEtleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCBQcm9qZWN0RGF0YUxvY2FsZSBmcm9tICcuLi9wcm9qZWN0LWRhdGEtbG9jYWxlJztcbmltcG9ydCBBcHBsaWNhdGlvblNoZWxsUHJvdmlkZXIgZnJvbSAnLi4vYXBwbGljYXRpb24tc2hlbGwtcHJvdmlkZXInO1xuaW1wb3J0IHsgZ2V0QnJvd3NlckxvY2FsZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLXNoZWxsLXByb3ZpZGVyL3V0aWxzJztcbmltcG9ydCBGZXRjaFVzZXIgZnJvbSAnLi4vZmV0Y2gtdXNlcic7XG5pbXBvcnQgVmVyc2lvblRyYWNrZXIgZnJvbSAnLi4vdmVyc2lvbi10cmFja2VyJztcbmltcG9ydCBGZXRjaFByb2plY3QgZnJvbSAnLi4vZmV0Y2gtcHJvamVjdCc7XG5pbXBvcnQgQ29uZmlndXJlSW50bFByb3ZpZGVyIGZyb20gJy4uL2NvbmZpZ3VyZS1pbnRsLXByb3ZpZGVyJztcbmltcG9ydCBBcHBCYXIgZnJvbSAnLi4vYXBwLWJhcic7XG5pbXBvcnQgUHJvamVjdENvbnRhaW5lciBmcm9tICcuLi9wcm9qZWN0LWNvbnRhaW5lcic7XG5pbXBvcnQgU2V0dXBGbG9wRmxpcFByb3ZpZGVyIGZyb20gJy4uL3NldHVwLWZsb3AtZmxpcC1wcm92aWRlcic7XG5pbXBvcnQgUmVxdWVzdHNJbkZsaWdodExvYWRlciBmcm9tICcuLi9yZXF1ZXN0cy1pbi1mbGlnaHQtbG9hZGVyJztcbmltcG9ydCBHdG1Vc2VyVHJhY2tlciBmcm9tICcuLi9ndG0tdXNlci10cmFja2VyJztcbmltcG9ydCBHdG1BcHBsaWNhdGlvblRyYWNrZXIgZnJvbSAnLi4vZ3RtLWFwcGxpY2F0aW9uLXRyYWNrZXInO1xuaW1wb3J0IE5hdkJhciwgeyBMb2FkaW5nTmF2QmFyIH0gZnJvbSAnLi4vbmF2YmFyJztcbmltcG9ydCBBcHBsaWNhdGlvbkxvYWRlciBmcm9tICcuLi9hcHBsaWNhdGlvbi1sb2FkZXInO1xuaW1wb3J0IEVycm9yQXBvbG9naXplciBmcm9tICcuLi9lcnJvci1hcG9sb2dpemVyJztcbmltcG9ydCBSb3V0ZUNhdGNoQWxsIGZyb20gJy4uL3JvdXRlLWNhdGNoLWFsbCc7XG5pbXBvcnQgUmVkaXJlY3RUb1Byb2plY3RDcmVhdGUgZnJvbSAnLi4vcmVkaXJlY3QtdG8tcHJvamVjdC1jcmVhdGUnO1xuaW1wb3J0IFF1aWNrQWNjZXNzIGZyb20gJy4uL3F1aWNrLWFjY2Vzcyc7XG5pbXBvcnQgUmVkaXJlY3RUb0xvZ2luIGZyb20gJy4vcmVkaXJlY3QtdG8tbG9naW4nO1xuaW1wb3J0IFJlZGlyZWN0VG9Mb2dvdXQgZnJvbSAnLi9yZWRpcmVjdC10by1sb2dvdXQnO1xuXG50eXBlIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4gPSB7XG4gIGFwb2xsb0NsaWVudD86IEFwb2xsb0NsaWVudDxOb3JtYWxpemVkQ2FjaGVPYmplY3Q+O1xuICAvKipcbiAgICogTk9URTogdGhlIGVudmlyb25tZW50IHZhbHVlIHBhc3NlZCBoZXJlIGlzIHVzdWFsbHkgYHdpbmRvdy5hcHBgLlxuICAgKiBUaGlzIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5zIHZhbHVlcyBhcyBzdHJpbmcgYW5kIHdpbGwgYmUgXCJ0cmFuc2Zvcm1lZFwiXG4gICAqIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCBwcm9wZXIgc2NhbGFyIHZhbHVlcyBpbiB0aGUgQXBwbGljYXRpb25TaGVsbC5cbiAgICogVG8ga2VlcCB0aGUgdHlwZXMgc2ltcGxlLCB3ZSBhc3NpZ24gaGVyZSB0aGUgYWxyZWFkeSBjb2VyY2VkIHR5cGUgb2JqZWN0LlxuICAgKiBUaGlzIHNob3VsZCBiZSBmaW5lLCBhcyBjb25zdW1lcnMgb2YgdGhlIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlXG4gICAqIGBBcHBsaWNhdGlvbldpbmRvd2AgdHlwZSBmcm9tIHRoZSBgQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzYCBwYWNrYWdlXG4gICAqIHRvIHR5cGUgY2FzdCBpdDpcbiAgICpcbiAgICogYGBgdHN4XG4gICAqIGltcG9ydCB7IEFwcGxpY2F0aW9uV2luZG93IH0gZnJvbSAnQGNvbW1lcmNldG9vbHMtZnJvbnRlbmQvY29uc3RhbnRzJztcbiAgICpcbiAgICogZGVjbGFyZSBsZXQgd2luZG93OiBBcHBsaWNhdGlvbldpbmRvdztcbiAgICpcbiAgICogPEFwcGxpY2F0aW9uU2hlbGwgZW52aXJvbm1lbnQ9e3dpbmRvdy5hcHB9IC8+XG4gICAqIGBgYFxuICAgKi9cbiAgZW52aXJvbm1lbnQ6IFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIGZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgZGVmYXVsdEZlYXR1cmVGbGFncz86IFRGbGFncztcbiAgdHJhY2tpbmdFdmVudExpc3Q/OiBUcmFja2luZ0xpc3Q7XG4gIGFwcGxpY2F0aW9uTWVzc2FnZXM6IFRBc3luY0xvY2FsZURhdGFQcm9wc1snYXBwbGljYXRpb25NZXNzYWdlcyddO1xuICBvblJlZ2lzdGVyRXJyb3JMaXN0ZW5lcnM6IChhcmdzOiB7IGRpc3BhdGNoOiBEaXNwYXRjaCB9KSA9PiB2b2lkO1xuICBvbk1lbnVJdGVtQ2xpY2s/OiA8VHJhY2tGbj4oXG4gICAgZXZlbnQ6IFN5bnRoZXRpY0V2ZW50PEhUTUxBbmNob3JFbGVtZW50PixcbiAgICB0cmFjazogVHJhY2tGblxuICApID0+IHZvaWQ7XG4gIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz86IGJvb2xlYW47XG4gIHJlbmRlcj86ICgpID0+IEpTWC5FbGVtZW50O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgaXMgY29uc2lkZXJlZCBcImF1dGhlbnRpY2F0ZWRcIlxuICogYW5kIGNvbnRhaW5zIHRoZSBcInJlc3RyaWN0ZWRcIiBhcHBsaWNhdGlvbiBwYXJ0LlxuICovXG5cbmNvbnN0IGdldEhhc1VuYXV0aG9yaXplZEVycm9yID0gKGdyYXBoUUxFcnJvcnM6IEFwb2xsb0Vycm9yWydncmFwaFFMRXJyb3JzJ10pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5leHRlbnNpb25zICYmXG4gICAgICBncWxFcnJvci5leHRlbnNpb25zLmNvZGUgJiZcbiAgICAgIGdxbEVycm9yLmV4dGVuc2lvbnMuY29kZSA9PT0gJ1VOQVVUSEVOVElDQVRFRCdcbiAgKTtcbmNvbnN0IGdldEhhc1VzZXJCZWVuRGVsZXRlZEVycm9yID0gKFxuICBncmFwaFFMRXJyb3JzOiBBcG9sbG9FcnJvclsnZ3JhcGhRTEVycm9ycyddXG4pID0+XG4gIGdyYXBoUUxFcnJvcnMuZmluZChcbiAgICAoZ3FsRXJyb3IpID0+XG4gICAgICBncWxFcnJvci5tZXNzYWdlICYmXG4gICAgICAvLyBOT1RFOiBUaGUgQ1RQIEFQSSBkb2VzIG5vdCBwcm92aWRlIGFuIGVycm9yIGNvZGUgaW4gdGhpcyBjYXNlLlxuICAgICAgZ3FsRXJyb3IubWVzc2FnZS5pbmNsdWRlcygnd2FzIG5vdCBmb3VuZC4nKVxuICApO1xuXG5leHBvcnQgY29uc3QgTWFpbkNvbnRhaW5lciA9IHN0eWxlZC5tYWluYFxuICBncmlkLWNvbHVtbjogMjtcbiAgZ3JpZC1yb3c6IDM7XG5cbiAgLypcbiAgICBBbGxvdyB0aGUgdGhpcyBmbGV4IGNoaWxkIHRvIGdyb3cgc21hbGxlciB0aGFuIGl0cyBzbWFsbGVzdCBjb250ZW50LlxuICAgIFRoaXMgaXMgbmVlZGVkIHdoZW4gdGhlcmUgaXMgYSByZWFsbHkgd2lkZSB0ZXh0IGluc2lkZSB0aGF0IHdvdWxkIHN0cmV0Y2hcbiAgICB0aGlzIG5vZGUgdG8gYmUgd2lkZXIgdGhhbiB0aGUgcGFyZW50LlxuICAqL1xuICBtaW4td2lkdGg6IDA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gIC8qXG4gICAgbGF5b3V0IHRoZSBjaGlsZHJlbi4gVGhlcmUgd2lsbCBhbHdheXMgYmUgdGhlIHBhZ2UgYW5kIHNpZGUgbm90aWZpY2F0aW9uXG4gICAgYWJvdXQgdGhlIGFjdHVhbCBjb250ZW50LiBUaGUgY29udGVudCBzaG91bGQgc3RyZXRjaCB0byBmaWxsIHRoZSByZXN0IG9mXG4gICAgdGhlIHBhZ2UuXG4gICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLypcbiAgICBzZXQgcG9zaXRpb24gdG8gcmVsYXRpdmUgdG8gbGF5b3V0IG5vdGlmaWNhdGlvbnMgYW5kIG1vZGFsc1xuICAqL1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5leHBvcnQgY29uc3QgUmVzdHJpY3RlZEFwcGxpY2F0aW9uID0gPFxuICBBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzIGV4dGVuZHMge31cbj4oXG4gIHByb3BzOiBPbWl0PFxuICAgIFByb3BzPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+LFxuICAgICdlbnZpcm9ubWVudCcgfCAnb25SZWdpc3RlckVycm9yTGlzdGVuZXJzJ1xuICA+XG4pID0+IHtcbiAgY29uc3QgYXBwbGljYXRpb25FbnZpcm9ubWVudCA9IHVzZUFwcGxpY2F0aW9uQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gY29udGV4dC5lbnZpcm9ubWVudFxuICApIGFzIFRBcHBsaWNhdGlvbkNvbnRleHQ8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5bJ2Vudmlyb25tZW50J107XG4gIC8vIFRPRE86IHVzaW5nIHRoaXMgaG9vayB3aWxsIHN1YnNjcmliZSB0aGUgY29tcG9uZW50IHRvIHJvdXRlIHVwZGF0ZXMuXG4gIC8vIFRoaXMgaXMgY3VycmVudGx5IHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBwcm9qZWN0IGtleVxuICAvLyBmcm9tIFVSTCAoXCIvXCIgLS0+IFwiLzpwcm9qZWN0S2V5XCIpLlxuICAvLyBIb3dldmVyLCBldmVyeSByb3V0ZSBjaGFuZ2Ugd2lsbCB0cmlnZ2VyIGEgcmUtcmVuZGVyLiBUaGlzIGlzIHByb2JhYmx5XG4gIC8vIG9rLWlzaCBidXQgd2UgbWlnaHQgd2FudCB0byBsb29rIGludG8gYSBtb3JlIHBlcmZvcm1hbnQgc29sdXRpb24uXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgcmV0dXJuIChcbiAgICA8RmV0Y2hVc2VyPlxuICAgICAgeyh7IGlzTG9hZGluZzogaXNMb2FkaW5nVXNlciwgdXNlciwgZXJyb3IgfSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIHVuYXV0aG9yaXplZCBlcnJvciwgd2UgcmVkaXJlY3QgdG8gdGhlIGxvZ2luIHBhZ2VcbiAgICAgICAgICBpZiAoZXJyb3IuZ3JhcGhRTEVycm9ycyAmJiBBcnJheS5pc0FycmF5KGVycm9yLmdyYXBoUUxFcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNVbmF1dGhvcml6ZWRFcnJvciA9IGdldEhhc1VuYXV0aG9yaXplZEVycm9yKFxuICAgICAgICAgICAgICBlcnJvci5ncmFwaFFMRXJyb3JzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaGFzVXNlckJlZW5EZWxldGVkRXJyb3IgPSBnZXRIYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcihcbiAgICAgICAgICAgICAgZXJyb3IuZ3JhcGhRTEVycm9yc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhhc1VuYXV0aG9yaXplZEVycm9yIHx8IGhhc1VzZXJCZWVuRGVsZXRlZEVycm9yKSB7XG4gICAgICAgICAgICAgIGxldCBsb2dvdXRSZWFzb246XG4gICAgICAgICAgICAgICAgfCB0eXBlb2YgTE9HT1VUX1JFQVNPTlNba2V5b2YgdHlwZW9mIExPR09VVF9SRUFTT05TXVxuICAgICAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBpZiAoaGFzVW5hdXRob3JpemVkRXJyb3IpXG4gICAgICAgICAgICAgICAgbG9nb3V0UmVhc29uID0gTE9HT1VUX1JFQVNPTlMuVU5BVVRIT1JJWkVEO1xuICAgICAgICAgICAgICBlbHNlIGlmIChoYXNVc2VyQmVlbkRlbGV0ZWRFcnJvcilcbiAgICAgICAgICAgICAgICBsb2dvdXRSZWFzb24gPSBMT0dPVVRfUkVBU09OUy5ERUxFVEVEO1xuICAgICAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dvdXQgcmVhc29uPXtsb2dvdXRSZWFzb259IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTaW5jZSB3ZSBkbyBub3Qga25vdyB0aGUgbG9jYWxlIG9mIHRoZSB1c2VyLCB3ZSBwaWNrIGl0IGZyb20gdGhlXG4gICAgICAgICAgLy8gdXNlcidzIGJyb3dzZXIgdG8gYXR0ZW1wdCB0byBtYXRjaCB0aGUgbGFuZ3VhZ2UgZm9yIHRoZSBjb3JyZWN0IHRyYW5zbGF0aW9ucy5cbiAgICAgICAgICBjb25zdCB1c2VyTG9jYWxlID0gZ2V0QnJvd3NlckxvY2FsZSh3aW5kb3cpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QXN5bmNMb2NhbGVEYXRhXG4gICAgICAgICAgICAgIGxvY2FsZT17dXNlckxvY2FsZX1cbiAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgeyh7IGxvY2FsZSwgbWVzc2FnZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yVG9TZW50cnkoZXJyb3IsIHt9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPENvbmZpZ3VyZUludGxQcm92aWRlciBsb2NhbGU9e2xvY2FsZX0gbWVzc2FnZXM9e21lc3NhZ2VzfT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yQXBvbG9naXplciAvPlxuICAgICAgICAgICAgICAgICAgPC9Db25maWd1cmVJbnRsUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0S2V5RnJvbVVybCA9IHNlbGVjdFByb2plY3RLZXlGcm9tVXJsKGxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LypcbiAgICAgICAgICAgIE5PVEU6IHdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGxvY2FsZSBkYXRhIGFzIGxvbmcgYXMgd2UgZG8gbm90XG4gICAgICAgICAgICBrbm93IHRoZSB1c2VyIHNldHRpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIG9yZGVyIHRvIGF2b2lkIGZsYXNoaW5nXG4gICAgICAgICAgICBvZiB0cmFuc2xhdGVkIGNvbnRlbnQgb24gc3Vic2VxdWVudCByZS1yZW5kZXJzLlxuICAgICAgICAgICAgVGhlcmVmb3JlLCBhcyBsb25nIGFzIHRoZXJlIGlzIG5vIGxvY2FsZSwgdGhlIGNoaWxkcmVuIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGVcbiAgICAgICAgICAgIGBpc0xvYWRpbmdgIHByb3AgdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyLlxuICAgICAgICAgICovfVxuICAgICAgICAgICAgPEFzeW5jTG9jYWxlRGF0YVxuICAgICAgICAgICAgICBsb2NhbGU9e3VzZXI/Lmxhbmd1YWdlfVxuICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1lc3NhZ2VzPXtwcm9wcy5hcHBsaWNhdGlvbk1lc3NhZ2VzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdMb2NhbGVEYXRhLCBsb2NhbGUsIG1lc3NhZ2VzIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlndXJlSW50bFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBwYXNzIHRoZSBsYW5ndWFnZSBhcyBsb25nIGFzIHRoZSBsb2NhbGUgZGF0YVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAgIHsuLi4oaXNMb2FkaW5nTG9jYWxlRGF0YSA/IHt9IDogeyBsb2NhbGUsIG1lc3NhZ2VzIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZXR1cEZsb3BGbGlwUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgIGxkQ2xpZW50U2lkZUlkPXthcHBsaWNhdGlvbkVudmlyb25tZW50LmxkQ2xpZW50U2lkZUlkfVxuICAgICAgICAgICAgICAgICAgICBmbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPFZlcnNpb25UcmFja2VyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgey8qIE5PVEU6IHRoZSByZXF1ZXN0cyBpbiBmbGlnaHQgbG9hZGVyIHdpbGwgcmVuZGVyIGEgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgaW50byB0aGUgQXBwQmFyLiAqL31cbiAgICAgICAgICAgICAgICAgICAgICA8UmVxdWVzdHNJbkZsaWdodExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTZW50cnlVc2VyVHJhY2tlciB1c2VyPXt1c2VyID8/IHVuZGVmaW5lZH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtVXNlclRyYWNrZXIgdXNlcj17dXNlcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8R3RtQXBwbGljYXRpb25UcmFja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk5hbWU9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnQuYXBwbGljYXRpb25OYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyQnVzaW5lc3NSb2xlPXt1c2VyPy5idXNpbmVzc1JvbGUgPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImFwcGxpY2F0aW9uLWxheW91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDQzcHggMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJnbG9iYWwtbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNzcz17Y3NzYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtcm93OiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWQtY29sdW1uOiAxLzM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuR0xPQkFMfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2plY3RLZXlGcm9tVXJsKSByZXR1cm4gPFF1aWNrQWNjZXNzIC8+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmV0Y2hQcm9qZWN0IHByb2plY3RLZXk9e3Byb2plY3RLZXlGcm9tVXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyh7IGlzTG9hZGluZzogaXNQcm9qZWN0TG9hZGluZywgcHJvamVjdCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvamVjdExvYWRpbmcgfHwgIXByb2plY3QpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBwcm9qZWN0IGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3Igd2hlbiB0aGUgcHJvamVjdCBpcyBleHBpcmVkIG9yIHN1cHNlbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFVzZVByb2plY3RDb250ZXh0ID0gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LnN1c3BlbnNpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdC5zdXNwZW5zaW9uLmlzQWN0aXZlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QuZXhwaXJ5ICYmIHByb2plY3QuZXhwaXJ5LmlzQWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFVzZVByb2plY3RDb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxRdWlja0FjY2VzcyAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UHJvamVjdERhdGFMb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlcz17cHJvamVjdC5sYW5ndWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogZGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0RGF0YUxvY2FsZT17ZGF0YUxvY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50PXthcHBsaWNhdGlvbkVudmlyb25tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxRdWlja0FjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVByb2plY3REYXRhTG9jYWxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm9qZWN0RGF0YUxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Byb2plY3REYXRhTG9jYWxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZldGNoUHJvamVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3V0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1jb2x1bW46IDEvMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcEJhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleUZyb21Vcmw9e3Byb2plY3RLZXlGcm9tVXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYXNpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M9e2Nzc2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZC1yb3c6IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgPE5hdkJhcj4gc2hvdWxkIG9ubHkgYmUgcmVuZGVyZWQgd2l0aGluIGEgcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQsIHRoZXJlZm9yZSB3aGVuIHRoZXJlIGlzIGEgYHByb2plY3RLZXlgLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGBwcm9qZWN0S2V5YCBpbiB0aGUgVVJMIChlLmcuIGAvYWNjb3VudGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByb3V0ZXMpLCB3ZSBkb24ndCByZW5kZXIgaXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2UgYWxzbyBcImNhY2hlXCIgdGhlIGBwcm9qZWN0S2V5YCBpbiBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIFwicmUtaHlkcmF0ZVwiIHRoZSBVUkxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiAoZS5nIHdoZW4geW91IGdvIHRvIGAvYCwgdGhlcmUgc2hvdWxkIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byBgLzpwcm9qZWN0S2V5YCkuIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbHkgb24gdGhlIHZhbHVlIGluIGxvY2FsU3RvcmFnZSB0byBkZXRlcm1pbmUgd2hpY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHJvamVjdEtleWAgaXMgY3VycmVudGx5IHVzZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9qZWN0S2V5RnJvbVVybCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGZXRjaFByb2plY3QgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHsgaXNMb2FkaW5nOiBpc0xvYWRpbmdQcm9qZWN0LCBwcm9qZWN0IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGxvYWRpbmcgbmF2YmFyIGFzIGxvbmcgYXMgYWxsIHRoZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4gbG9hZGVkLCBvciBpZiB0aGUgcHJvamVjdCBkb2VzIG5vdCBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVc2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdMb2NhbGVEYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdQcm9qZWN0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbG9jYWxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8TG9hZGluZ05hdkJhciAvPjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI8QWRkaXRpb25hbEVudmlyb25tZW50UHJvcGVydGllcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ9e2FwcGxpY2F0aW9uRW52aXJvbm1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IGRvIG5vdCBwYXNzIHRoZSBgcHJvamVjdGAgaW50byB0aGUgYXBwbGljYXRpb24gY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBlcm1pc3Npb25zIGZvciB0aGUgTmF2YmFyIGFyZSByZXNvbHZlZCBzZXBhcmF0ZWx5LCB3aXRoaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgUmVhY3QgY29udGV4dC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5hdkJhcjxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdEtleT17cHJvamVjdEtleUZyb21Vcmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdD17cHJvamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9e3Byb3BzLm9uTWVudUl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmV0Y2hQcm9qZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nVXNlciB8fCBpc0xvYWRpbmdMb2NhbGVEYXRhID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01haW5Db250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbkNvbnRhaW5lciByb2xlPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zTGlzdCBkb21haW49e0RPTUFJTlMuUEFHRX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm90aWZpY2F0aW9uc0xpc3QgZG9tYWluPXtET01BSU5TLlNJREV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzPXtjc3NgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBoYXZlIGFuIGludGVybWVkaWFyeSA8ZGl2PiB3cmFwcGluZyB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFZpZXc+IGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gd3JhcCBldmVyeSBjb250ZW50LXZpZXcuIFRoaXMgaW50ZXJtZWRpYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IGlzIHNvbGVseSB1c2VkIGZvciBhZGRpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIGNvbnRlbnQtdmlldy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBjb3VsZCBiZSBkb25lIGJ5IHBhc3NpbmcgdGhlIHRyYWNraW5nIGNvbnRleHQgdG8gdGhlIDxWaWV3PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGV0IGl0IGRvIHRoZSBsYXlvdXQsIHNvIHdlIGNhbiBhdm9pZCBsYXlpbmcgb3VyIGZyb20gdGhlIG91dHNpZGUgYXMgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gaGVyZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gKjpub3QoOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3J0YWxzQ29udGFpbmVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmVkaXJlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tPVwiL3Byb2ZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiL2FjY291bnQvcHJvZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2FjY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGByZW5kZXJgIGZ1bmN0aW9uLCB3ZSBhc3N1bWUgaXQncyBvbmUgb2YgdHdvIGNhc2VzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gVGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBgY2hpbGRyZW5gIGFuZCB0aGVyZWZvcmUgaW1wbGVtZW50cyB0aGUgcm91dGVzIGluY2x1ZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIDxSb3V0ZUNhdGNoQWxsPiAodGhpcyBpcyB0aGUgXCJsZWdhY3lcIiBiZWhhdmlvcikuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBJdCdzIHRoZSBhY2NvdW50IGFwcGxpY2F0aW9uLCB3aGljaCBhbHdheXMgdXNlcyBgcmVuZGVyYCBhbmQgdGhlcmVmb3JlIHNob3VsZCByZW5kZXIgYXMgbm9ybWFsLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluIGNhc2UgdGhlIEFwcFNoZWxsIHVzZXMgdGhlIGBjaGlsZHJlbmAgZnVuY3Rpb24sIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0J3MgYSBub3JtYWwgQ3VzdG9tIEFwcGxpY2F0aW9uIGFuZCB0aGF0IGl0IHNob3VsZCB0cmlnZ2VyIGEgZm9yY2UgcmVsb2FkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5yZW5kZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+e3Byb3BzLnJlbmRlcigpfTwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlQ2F0Y2hBbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBQcm9qZWN0IHJvdXRlcyAqL31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQcm9qZWN0S2V5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UHJldmlvdXNQcm9qZWN0S2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/LmRlZmF1bHRQcm9qZWN0S2V5ID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5PVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIGhhcyBub3QgYmVlbiBsb2FkZWQgYSBsb2FkaW5nIHNwaW5uZXIgaXMgc2hvd24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyBub3Qgd29ya2luZyBvbiBhIHByb2plY3QgcHJldmlvdXNseSBub3IgaGFzIGEgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9qZWN0LCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIEdpdmVuIHRoZSB1c2VyIHdhcyB3b3JraW5nIG9uIGEgcHJvamVjdCBwcmV2aW91c2x5IG9yIGhhcyBhIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgcHJvamVjdCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgcmVkaXJlY3QgdG8gdGhhdCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXIpIHJldHVybiA8QXBwbGljYXRpb25Mb2FkZXIgLz47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzUHJvamVjdEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxSZWRpcmVjdFRvUHJvamVjdENyZWF0ZSAvPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdCB0bz17YC8ke3ByZXZpb3VzUHJvamVjdEtleX1gfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi86cHJvamVjdEtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXsocm91dGVyUHJvcHMpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQcm9qZWN0Q29udGFpbmVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoPXtyb3V0ZXJQcm9wcy5tYXRjaH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb249e3JvdXRlclByb3BzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudD17YXBwbGljYXRpb25FbnZpcm9ubWVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5kaXNhYmxlUm91dGVQZXJtaXNzaW9uQ2hlY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdGl2ZWx5IHJlbmRlcnMgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuLCB3aGljaCBpcyB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWMgcGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Qcm9qZWN0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9NYWluQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICA8L1NldHVwRmxvcEZsaXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICA8L0NvbmZpZ3VyZUludGxQcm92aWRlcj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQXN5bmNMb2NhbGVEYXRhPlxuICAgICAgICAgIDwvQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIDwvRmV0Y2hVc2VyPlxuICApO1xufTtcblJlc3RyaWN0ZWRBcHBsaWNhdGlvbi5kaXNwbGF5TmFtZSA9ICdSZXN0cmljdGVkQXBwbGljYXRpb24nO1xuXG5jb25zdCBBcHBsaWNhdGlvblNoZWxsID0gPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXMgZXh0ZW5kcyB7fT4oXG4gIHByb3BzOiBQcm9wczxBZGRpdGlvbmFsRW52aXJvbm1lbnRQcm9wZXJ0aWVzPlxuKSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcHJvcHMub25SZWdpc3RlckVycm9yTGlzdGVuZXJzKHtcbiAgICAgIGRpc3BhdGNoOiBpbnRlcm5hbFJlZHV4U3RvcmUuZGlzcGF0Y2gsXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7IC8vIDwtLSBydW4gb25seSBvbmNlLCB3aGVuIGNvbXBvbmVudCBtb3VudHNcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8R2xvYmFsXG4gICAgICAgIHN0eWxlcz17Y3NzYFxuICAgICAgICAgICNhcHAge1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuUmVhY3RNb2RhbF9fQm9keS0tb3BlbiBtYWluIHtcbiAgICAgICAgICAgIC8qIFdoZW4gYSBtb2RhbCBpcyBvcGVuLCB3ZSBzaG91bGQgcHJldmVudCB0aGUgY29udGVudCB0byBiZSBzY3JvbGxhYmxlICovXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgYH1cbiAgICAgIC8+XG4gICAgICA8QXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgIGFwb2xsb0NsaWVudD17cHJvcHMuYXBvbGxvQ2xpZW50fVxuICAgICAgICBlbnZpcm9ubWVudD17cHJvcHMuZW52aXJvbm1lbnR9XG4gICAgICAgIHRyYWNraW5nRXZlbnRMaXN0PXtwcm9wcy50cmFja2luZ0V2ZW50TGlzdH1cbiAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgID5cbiAgICAgICAgeyh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiB7XG4gICAgICAgICAgaWYgKGlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9sb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxSZWRpcmVjdFRvTG9nb3V0IC8+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgICA8Um91dGU+XG4gICAgICAgICAgICAgICAgICA8UmVzdHJpY3RlZEFwcGxpY2F0aW9uPEFkZGl0aW9uYWxFbnZpcm9ubWVudFByb3BlcnRpZXM+XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGZWF0dXJlRmxhZ3M9e3Byb3BzLmRlZmF1bHRGZWF0dXJlRmxhZ3N9XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVGbGFncz17cHJvcHMuZmVhdHVyZUZsYWdzfVxuICAgICAgICAgICAgICAgICAgICByZW5kZXI9e3Byb3BzLnJlbmRlcn1cbiAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NZXNzYWdlcz17cHJvcHMuYXBwbGljYXRpb25NZXNzYWdlc31cbiAgICAgICAgICAgICAgICAgICAgb25NZW51SXRlbUNsaWNrPXtwcm9wcy5vbk1lbnVJdGVtQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVSb3V0ZVBlcm1pc3Npb25DaGVjaz17XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZVJvdXRlUGVybWlzc2lvbkNoZWNrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgPC9SZXN0cmljdGVkQXBwbGljYXRpb24+XG4gICAgICAgICAgICAgICAgPC9Sb3V0ZT5cbiAgICAgICAgICAgICAgPC9Td2l0Y2g+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gPFJlZGlyZWN0VG9Mb2dpbiAvPjtcbiAgICAgICAgfX1cbiAgICAgIDwvQXBwbGljYXRpb25TaGVsbFByb3ZpZGVyPlxuICAgIDwvPlxuICApO1xufTtcbkFwcGxpY2F0aW9uU2hlbGwuZGlzcGxheU5hbWUgPSAnQXBwbGljYXRpb25TaGVsbCc7XG5BcHBsaWNhdGlvblNoZWxsLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBBcHBsaWNhdGlvblNoZWxsO1xuIl19 */",
4351
4353
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
4352
4354
  };
4353
4355
 
@@ -4381,6 +4383,7 @@ var ApplicationShell = function ApplicationShell(props) {
4381
4383
  render: props.render,
4382
4384
  applicationMessages: props.applicationMessages,
4383
4385
  onMenuItemClick: props.onMenuItemClick,
4386
+ disableRoutePermissionCheck: props.disableRoutePermissionCheck,
4384
4387
  children: props.children
4385
4388
  })
4386
4389
  })]
@@ -4400,6 +4403,7 @@ ApplicationShell.propTypes = process.env.NODE_ENV !== "production" ? {
4400
4403
  trackingEventList: _pt.any,
4401
4404
  onRegisterErrorListeners: _pt.func.isRequired,
4402
4405
  onMenuItemClick: _pt.func,
4406
+ disableRoutePermissionCheck: _pt.bool,
4403
4407
  render: _pt.func,
4404
4408
  children: _pt.node
4405
4409
  } : {};