import { L as LanguageSelect } from "./LanguageSelect.79bf81f4.js";
import { K as createComponent, C as computed, J as h, a6 as hSlot, O as useDarkProps, S as useDark, z as watch, bL as isNumber, t as onMounted, u as onBeforeUnmount, aG as hDir, Z as getCurrentInstance, q as QBtn, W as hMergeSlot, r as resolveComponent, o as openBlock, d as createBlock, w as withCtx, g as createBaseVNode, k as createVNode, v as toDisplayString, G as createTextVNode, e as createCommentVNode, c as createElementBlock, F as Fragment, f as renderList, h as renderSlot, bg as QPage, j as defineComponent, s as ref, aA as useAuthStore, _ as _export_sfc } from "./index.71084c31.js";
import { c as usePanelChildProps, u as usePanelProps, a as usePanelEmits, b as usePanel } from "./use-panel.82d82e5f.js";
import { u as useFullscreenProps, a as useFullscreenEmits, b as useFullscreen } from "./use-fullscreen.b492e705.js";
var QCarouselSlide = createComponent({
  name: "QCarouselSlide",
  props: {
    ...usePanelChildProps,
    imgSrc: String
  },
  setup(props, { slots }) {
    const style = computed(() => props.imgSrc ? { backgroundImage: `url("${props.imgSrc}")` } : {});
    return () => h("div", {
      class: "q-carousel__slide",
      style: style.value
    }, hSlot(slots.default));
  }
});
const navigationPositionOptions = ["top", "right", "bottom", "left"];
const controlTypeOptions = ["regular", "flat", "outline", "push", "unelevated"];
var QCarousel = createComponent({
  name: "QCarousel",
  props: {
    ...useDarkProps,
    ...usePanelProps,
    ...useFullscreenProps,
    transitionPrev: {
      type: String,
      default: "fade"
    },
    transitionNext: {
      type: String,
      default: "fade"
    },
    height: String,
    padding: Boolean,
    controlColor: String,
    controlTextColor: String,
    controlType: {
      type: String,
      validator: (v) => controlTypeOptions.includes(v),
      default: "flat"
    },
    autoplay: [Number, Boolean],
    arrows: Boolean,
    prevIcon: String,
    nextIcon: String,
    navigation: Boolean,
    navigationPosition: {
      type: String,
      validator: (v) => navigationPositionOptions.includes(v)
    },
    navigationIcon: String,
    navigationActiveIcon: String,
    thumbnails: Boolean
  },
  emits: [
    ...useFullscreenEmits,
    ...usePanelEmits
  ],
  setup(props, { slots }) {
    const { proxy: { $q } } = getCurrentInstance();
    const isDark = useDark(props, $q);
    let timer = null, panelsLen;
    const {
      updatePanelsList,
      getPanelContent,
      panelDirectives,
      goToPanel,
      previousPanel,
      nextPanel,
      getEnabledPanels,
      panelIndex
    } = usePanel();
    const { inFullscreen } = useFullscreen();
    const style = computed(() => inFullscreen.value !== true && props.height !== void 0 ? { height: props.height } : {});
    const direction = computed(() => props.vertical === true ? "vertical" : "horizontal");
    const navigationPosition = computed(
      () => props.navigationPosition || (props.vertical === true ? "right" : "bottom")
    );
    const classes = computed(
      () => `q-carousel q-panel-parent q-carousel--with${props.padding === true ? "" : "out"}-padding` + (inFullscreen.value === true ? " fullscreen" : "") + (isDark.value === true ? " q-carousel--dark q-dark" : "") + (props.arrows === true ? ` q-carousel--arrows-${direction.value}` : "") + (props.navigation === true ? ` q-carousel--navigation-${navigationPosition.value}` : "")
    );
    const arrowIcons = computed(() => {
      const ico = [
        props.prevIcon || $q.iconSet.carousel[props.vertical === true ? "up" : "left"],
        props.nextIcon || $q.iconSet.carousel[props.vertical === true ? "down" : "right"]
      ];
      return props.vertical === false && $q.lang.rtl === true ? ico.reverse() : ico;
    });
    const navIcon = computed(() => props.navigationIcon || $q.iconSet.carousel.navigationIcon);
    const navActiveIcon = computed(() => props.navigationActiveIcon || navIcon.value);
    const controlProps = computed(() => ({
      color: props.controlColor,
      textColor: props.controlTextColor,
      round: true,
      [props.controlType]: true,
      dense: true
    }));
    watch(() => props.modelValue, () => {
      if (props.autoplay) {
        startTimer();
      }
    });
    watch(() => props.autoplay, (val) => {
      if (val) {
        startTimer();
      } else if (timer !== null) {
        clearTimeout(timer);
        timer = null;
      }
    });
    function startTimer() {
      const duration = isNumber(props.autoplay) === true ? Math.abs(props.autoplay) : 5e3;
      timer !== null && clearTimeout(timer);
      timer = setTimeout(() => {
        timer = null;
        if (duration >= 0) {
          nextPanel();
        } else {
          previousPanel();
        }
      }, duration);
    }
    onMounted(() => {
      props.autoplay && startTimer();
    });
    onBeforeUnmount(() => {
      timer !== null && clearTimeout(timer);
    });
    function getNavigationContainer(type, mapping) {
      return h("div", {
        class: `q-carousel__control q-carousel__navigation no-wrap absolute flex q-carousel__navigation--${type} q-carousel__navigation--${navigationPosition.value}` + (props.controlColor !== void 0 ? ` text-${props.controlColor}` : "")
      }, [
        h("div", {
          class: "q-carousel__navigation-inner flex flex-center no-wrap"
        }, getEnabledPanels().map(mapping))
      ]);
    }
    function getContent() {
      const node = [];
      if (props.navigation === true) {
        const fn = slots["navigation-icon"] !== void 0 ? slots["navigation-icon"] : (opts) => h(QBtn, {
          key: "nav" + opts.name,
          class: `q-carousel__navigation-icon q-carousel__navigation-icon--${opts.active === true ? "" : "in"}active`,
          ...opts.btnProps,
          onClick: opts.onClick
        });
        const maxIndex = panelsLen - 1;
        node.push(
          getNavigationContainer("buttons", (panel, index) => {
            const name = panel.props.name;
            const active = panelIndex.value === index;
            return fn({
              index,
              maxIndex,
              name,
              active,
              btnProps: {
                icon: active === true ? navActiveIcon.value : navIcon.value,
                size: "sm",
                ...controlProps.value
              },
              onClick: () => {
                goToPanel(name);
              }
            });
          })
        );
      } else if (props.thumbnails === true) {
        const color = props.controlColor !== void 0 ? ` text-${props.controlColor}` : "";
        node.push(getNavigationContainer("thumbnails", (panel) => {
          const slide = panel.props;
          return h("img", {
            key: "tmb#" + slide.name,
            class: `q-carousel__thumbnail q-carousel__thumbnail--${slide.name === props.modelValue ? "" : "in"}active` + color,
            src: slide.imgSrc || slide["img-src"],
            onClick: () => {
              goToPanel(slide.name);
            }
          });
        }));
      }
      if (props.arrows === true && panelIndex.value >= 0) {
        if (props.infinite === true || panelIndex.value > 0) {
          node.push(
            h("div", {
              key: "prev",
              class: `q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${direction.value} absolute flex flex-center`
            }, [
              h(QBtn, {
                icon: arrowIcons.value[0],
                ...controlProps.value,
                onClick: previousPanel
              })
            ])
          );
        }
        if (props.infinite === true || panelIndex.value < panelsLen - 1) {
          node.push(
            h("div", {
              key: "next",
              class: `q-carousel__control q-carousel__arrow q-carousel__next-arrow q-carousel__next-arrow--${direction.value} absolute flex flex-center`
            }, [
              h(QBtn, {
                icon: arrowIcons.value[1],
                ...controlProps.value,
                onClick: nextPanel
              })
            ])
          );
        }
      }
      return hMergeSlot(slots.control, node);
    }
    return () => {
      panelsLen = updatePanelsList(slots);
      return h("div", {
        class: classes.value,
        style: style.value
      }, [
        hDir(
          "div",
          { class: "q-carousel__slides-container" },
          getPanelContent(),
          "sl-cont",
          props.swipeable,
          () => panelDirectives.value
        )
      ].concat(getContent()));
    };
  }
});
const _hoisted_1 = { class: "absolute-bottom-right q-pb-md q-px-lg" };
const _hoisted_2 = { class: "auth-card-wrap col-12 col-md-6" };
const _hoisted_3 = { class: "auth-card relative-position fit column justify-between items-stretch bg-primaryBlue text-white q-pa-xl" };
const _hoisted_4 = { class: "full-width col" };
const _hoisted_5 = { class: "full-width col auth-card-title flex items-center" };
const _hoisted_6 = { class: "full-width col flex justify-center items-end" };
const _hoisted_7 = { class: "flex flex-center" };
const _hoisted_8 = { class: "q-mt-md text-center" };
const _hoisted_9 = { class: "auth-page-content-wrap col col-md-6 flex flex-center" };
function render(_ctx, _cache, $props, $setup, $data, $options) {
  const _component_language_select = resolveComponent("language-select");
  const _component_velo_icon = resolveComponent("velo-icon");
  return _ctx.ready ? (openBlock(), createBlock(QPage, {
    key: 0,
    class: "auth-page fit row q-pa-md"
  }, {
    default: withCtx(() => [
      createBaseVNode("div", _hoisted_1, [
        createVNode(_component_language_select)
      ]),
      createBaseVNode("div", _hoisted_2, [
        createBaseVNode("div", _hoisted_3, [
          createBaseVNode("div", _hoisted_4, [
            createVNode(_component_velo_icon, {
              name: "velo",
              color: "white",
              size: "90px"
            })
          ]),
          createBaseVNode("div", _hoisted_5, toDisplayString(_ctx.cardTitle), 1),
          createBaseVNode("div", _hoisted_6, [
            _ctx.showShortcut ? (openBlock(), createBlock(QBtn, {
              key: 0,
              class: "absolute-bottom-right bg-green text-white text-bold q-ma-lg",
              "no-caps": "",
              to: { name: "admin.stats" }
            }, {
              default: withCtx(() => [
                createTextVNode(toDisplayString(_ctx.$t("admin.nav.stats")), 1)
              ]),
              _: 1
            })) : createCommentVNode("", true),
            createVNode(QCarousel, {
              class: "bg-primaryBlue text-white",
              modelValue: _ctx.slide,
              "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.slide = $event),
              "transition-prev": "scale",
              "transition-next": "scale",
              swipeable: "",
              animated: "",
              "control-color": "white",
              navigation: _ctx.slides.length > 1,
              padding: "",
              height: "10em"
            }, {
              default: withCtx(() => [
                (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.slides, (slide) => {
                  return openBlock(), createBlock(QCarouselSlide, {
                    class: "flex justify-center items-end",
                    name: slide.name
                  }, {
                    default: withCtx(() => [
                      createBaseVNode("div", _hoisted_7, [
                        slide.icon ? (openBlock(), createBlock(_component_velo_icon, {
                          key: 0,
                          name: slide.icon
                        }, null, 8, ["name"])) : createCommentVNode("", true),
                        createBaseVNode("div", _hoisted_8, toDisplayString(slide.text), 1)
                      ])
                    ]),
                    _: 2
                  }, 1032, ["name"]);
                }), 256))
              ]),
              _: 1
            }, 8, ["modelValue", "navigation"])
          ])
        ])
      ]),
      createBaseVNode("div", _hoisted_9, [
        renderSlot(_ctx.$slots, "default", {}, void 0, true)
      ])
    ]),
    _: 3
  })) : createCommentVNode("", true);
}
var Page_vue_vue_type_style_index_0_scoped_true_lang = "";
const _sfc_main = defineComponent({
  name: "AuthPage",
  components: {
    LanguageSelect
  },
  props: {
    cardTitle: {
      type: String,
      required: false,
      default: ""
    },
    slides: {
      type: Array,
      required: false,
      default: () => []
    }
  },
  setup(props) {
    const slide = ref(props.slides.length ? props.slides[0].name : "");
    const authStore = useAuthStore();
    const showShortcut = authStore.is("elevated");
    const ready = ref(false);
    onMounted(() => {
      ready.value = true;
    });
    return {
      slide,
      showShortcut,
      ready
    };
  }
});
var AuthPage = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", render], ["__scopeId", "data-v-2c7f9f5a"], ["__file", "Page.vue"]]);
export { AuthPage as A };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnZS5mNDk5ODA0OS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3F1YXNhci9zcmMvY29tcG9uZW50cy9jYXJvdXNlbC9RQ2Fyb3VzZWxTbGlkZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWFzYXIvc3JjL2NvbXBvbmVudHMvY2Fyb3VzZWwvUUNhcm91c2VsLmpzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXV0aC9QYWdlLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcblxuaW1wb3J0IHsgY3JlYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJpdmF0ZS5jcmVhdGUvY3JlYXRlLmpzJ1xuaW1wb3J0IHsgdXNlUGFuZWxDaGlsZFByb3BzIH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZXMvcHJpdmF0ZS51c2UtcGFuZWwvdXNlLXBhbmVsLmpzJ1xuXG5pbXBvcnQgeyBoU2xvdCB9IGZyb20gJy4uLy4uL3V0aWxzL3ByaXZhdGUucmVuZGVyL3JlbmRlci5qcydcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9uZW50KHtcbiAgbmFtZTogJ1FDYXJvdXNlbFNsaWRlJyxcblxuICBwcm9wczoge1xuICAgIC4uLnVzZVBhbmVsQ2hpbGRQcm9wcyxcbiAgICBpbWdTcmM6IFN0cmluZ1xuICB9LFxuXG4gIHNldHVwIChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoXG4gICAgICBwcm9wcy5pbWdTcmNcbiAgICAgICAgPyB7IGJhY2tncm91bmRJbWFnZTogYHVybChcIiR7IHByb3BzLmltZ1NyYyB9XCIpYCB9XG4gICAgICAgIDoge31cbiAgICApKVxuXG4gICAgcmV0dXJuICgpID0+IGgoJ2RpdicsIHtcbiAgICAgIGNsYXNzOiAncS1jYXJvdXNlbF9fc2xpZGUnLFxuICAgICAgc3R5bGU6IHN0eWxlLnZhbHVlXG4gICAgfSwgaFNsb3Qoc2xvdHMuZGVmYXVsdCkpXG4gIH1cbn0pXG4iLCJpbXBvcnQgeyBoLCBjb21wdXRlZCwgd2F0Y2gsIG9uTW91bnRlZCwgb25CZWZvcmVVbm1vdW50LCBnZXRDdXJyZW50SW5zdGFuY2UgfSBmcm9tICd2dWUnXG5cbmltcG9ydCBRQnRuIGZyb20gJy4uL2J0bi9RQnRuLmpzJ1xuXG5pbXBvcnQgdXNlRGFyaywgeyB1c2VEYXJrUHJvcHMgfSBmcm9tICcuLi8uLi9jb21wb3NhYmxlcy9wcml2YXRlLnVzZS1kYXJrL3VzZS1kYXJrLmpzJ1xuaW1wb3J0IHVzZVBhbmVsLCB7IHVzZVBhbmVsUHJvcHMsIHVzZVBhbmVsRW1pdHMgfSBmcm9tICcuLi8uLi9jb21wb3NhYmxlcy9wcml2YXRlLnVzZS1wYW5lbC91c2UtcGFuZWwuanMnXG5pbXBvcnQgdXNlRnVsbHNjcmVlbiwgeyB1c2VGdWxsc2NyZWVuUHJvcHMsIHVzZUZ1bGxzY3JlZW5FbWl0cyB9IGZyb20gJy4uLy4uL2NvbXBvc2FibGVzL3ByaXZhdGUudXNlLWZ1bGxzY3JlZW4vdXNlLWZ1bGxzY3JlZW4uanMnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL3ByaXZhdGUuY3JlYXRlL2NyZWF0ZS5qcydcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMvaXMuanMnXG5pbXBvcnQgeyBoTWVyZ2VTbG90LCBoRGlyIH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJpdmF0ZS5yZW5kZXIvcmVuZGVyLmpzJ1xuXG5jb25zdCBuYXZpZ2F0aW9uUG9zaXRpb25PcHRpb25zID0gWyAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0JyBdXG5jb25zdCBjb250cm9sVHlwZU9wdGlvbnMgPSBbICdyZWd1bGFyJywgJ2ZsYXQnLCAnb3V0bGluZScsICdwdXNoJywgJ3VuZWxldmF0ZWQnIF1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9uZW50KHtcbiAgbmFtZTogJ1FDYXJvdXNlbCcsXG5cbiAgcHJvcHM6IHtcbiAgICAuLi51c2VEYXJrUHJvcHMsXG4gICAgLi4udXNlUGFuZWxQcm9wcyxcbiAgICAuLi51c2VGdWxsc2NyZWVuUHJvcHMsXG5cbiAgICB0cmFuc2l0aW9uUHJldjogeyAvLyB1c2VQYW5lbFBhcmVudFByb3BzIG92ZXJyaWRlXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZmFkZSdcbiAgICB9LFxuICAgIHRyYW5zaXRpb25OZXh0OiB7IC8vIHVzZVBhbmVsUGFyZW50UHJvcHMgb3ZlcnJpZGVcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdmYWRlJ1xuICAgIH0sXG5cbiAgICBoZWlnaHQ6IFN0cmluZyxcbiAgICBwYWRkaW5nOiBCb29sZWFuLFxuXG4gICAgY29udHJvbENvbG9yOiBTdHJpbmcsXG4gICAgY29udHJvbFRleHRDb2xvcjogU3RyaW5nLFxuICAgIGNvbnRyb2xUeXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IHYgPT4gY29udHJvbFR5cGVPcHRpb25zLmluY2x1ZGVzKHYpLFxuICAgICAgZGVmYXVsdDogJ2ZsYXQnXG4gICAgfSxcblxuICAgIGF1dG9wbGF5OiBbIE51bWJlciwgQm9vbGVhbiBdLFxuXG4gICAgYXJyb3dzOiBCb29sZWFuLFxuICAgIHByZXZJY29uOiBTdHJpbmcsXG4gICAgbmV4dEljb246IFN0cmluZyxcblxuICAgIG5hdmlnYXRpb246IEJvb2xlYW4sXG4gICAgbmF2aWdhdGlvblBvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IHYgPT4gbmF2aWdhdGlvblBvc2l0aW9uT3B0aW9ucy5pbmNsdWRlcyh2KVxuICAgIH0sXG4gICAgbmF2aWdhdGlvbkljb246IFN0cmluZyxcbiAgICBuYXZpZ2F0aW9uQWN0aXZlSWNvbjogU3RyaW5nLFxuXG4gICAgdGh1bWJuYWlsczogQm9vbGVhblxuICB9LFxuXG4gIGVtaXRzOiBbXG4gICAgLi4udXNlRnVsbHNjcmVlbkVtaXRzLFxuICAgIC4uLnVzZVBhbmVsRW1pdHNcbiAgXSxcblxuICBzZXR1cCAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IHsgcHJveHk6IHsgJHEgfSB9ID0gZ2V0Q3VycmVudEluc3RhbmNlKClcblxuICAgIGNvbnN0IGlzRGFyayA9IHVzZURhcmsocHJvcHMsICRxKVxuXG4gICAgbGV0IHRpbWVyID0gbnVsbCwgcGFuZWxzTGVuXG5cbiAgICBjb25zdCB7XG4gICAgICB1cGRhdGVQYW5lbHNMaXN0LCBnZXRQYW5lbENvbnRlbnQsXG4gICAgICBwYW5lbERpcmVjdGl2ZXMsIGdvVG9QYW5lbCxcbiAgICAgIHByZXZpb3VzUGFuZWwsIG5leHRQYW5lbCwgZ2V0RW5hYmxlZFBhbmVscyxcbiAgICAgIHBhbmVsSW5kZXhcbiAgICB9ID0gdXNlUGFuZWwoKVxuXG4gICAgY29uc3QgeyBpbkZ1bGxzY3JlZW4gfSA9IHVzZUZ1bGxzY3JlZW4oKVxuXG4gICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlZCgoKSA9PiAoXG4gICAgICBpbkZ1bGxzY3JlZW4udmFsdWUgIT09IHRydWUgJiYgcHJvcHMuaGVpZ2h0ICE9PSB2b2lkIDBcbiAgICAgICAgPyB7IGhlaWdodDogcHJvcHMuaGVpZ2h0IH1cbiAgICAgICAgOiB7fVxuICAgICkpXG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBjb21wdXRlZCgoKSA9PiAocHJvcHMudmVydGljYWwgPT09IHRydWUgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnKSlcblxuICAgIGNvbnN0IG5hdmlnYXRpb25Qb3NpdGlvbiA9IGNvbXB1dGVkKCgpID0+IHByb3BzLm5hdmlnYXRpb25Qb3NpdGlvblxuICAgICAgfHwgKHByb3BzLnZlcnRpY2FsID09PSB0cnVlID8gJ3JpZ2h0JyA6ICdib3R0b20nKVxuICAgIClcblxuICAgIGNvbnN0IGNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgYHEtY2Fyb3VzZWwgcS1wYW5lbC1wYXJlbnQgcS1jYXJvdXNlbC0td2l0aCR7IHByb3BzLnBhZGRpbmcgPT09IHRydWUgPyAnJyA6ICdvdXQnIH0tcGFkZGluZ2BcbiAgICAgICsgKGluRnVsbHNjcmVlbi52YWx1ZSA9PT0gdHJ1ZSA/ICcgZnVsbHNjcmVlbicgOiAnJylcbiAgICAgICsgKGlzRGFyay52YWx1ZSA9PT0gdHJ1ZSA/ICcgcS1jYXJvdXNlbC0tZGFyayBxLWRhcmsnIDogJycpXG4gICAgICArIChwcm9wcy5hcnJvd3MgPT09IHRydWUgPyBgIHEtY2Fyb3VzZWwtLWFycm93cy0keyBkaXJlY3Rpb24udmFsdWUgfWAgOiAnJylcbiAgICAgICsgKHByb3BzLm5hdmlnYXRpb24gPT09IHRydWUgPyBgIHEtY2Fyb3VzZWwtLW5hdmlnYXRpb24tJHsgbmF2aWdhdGlvblBvc2l0aW9uLnZhbHVlIH1gIDogJycpXG4gICAgKVxuXG4gICAgY29uc3QgYXJyb3dJY29ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIGNvbnN0IGljbyA9IFtcbiAgICAgICAgcHJvcHMucHJldkljb24gfHwgJHEuaWNvblNldC5jYXJvdXNlbFsgcHJvcHMudmVydGljYWwgPT09IHRydWUgPyAndXAnIDogJ2xlZnQnIF0sXG4gICAgICAgIHByb3BzLm5leHRJY29uIHx8ICRxLmljb25TZXQuY2Fyb3VzZWxbIHByb3BzLnZlcnRpY2FsID09PSB0cnVlID8gJ2Rvd24nIDogJ3JpZ2h0JyBdXG4gICAgICBdXG5cbiAgICAgIHJldHVybiBwcm9wcy52ZXJ0aWNhbCA9PT0gZmFsc2UgJiYgJHEubGFuZy5ydGwgPT09IHRydWVcbiAgICAgICAgPyBpY28ucmV2ZXJzZSgpXG4gICAgICAgIDogaWNvXG4gICAgfSlcblxuICAgIGNvbnN0IG5hdkljb24gPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5uYXZpZ2F0aW9uSWNvbiB8fCAkcS5pY29uU2V0LmNhcm91c2VsLm5hdmlnYXRpb25JY29uKVxuICAgIGNvbnN0IG5hdkFjdGl2ZUljb24gPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5uYXZpZ2F0aW9uQWN0aXZlSWNvbiB8fCBuYXZJY29uLnZhbHVlKVxuXG4gICAgY29uc3QgY29udHJvbFByb3BzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIGNvbG9yOiBwcm9wcy5jb250cm9sQ29sb3IsXG4gICAgICB0ZXh0Q29sb3I6IHByb3BzLmNvbnRyb2xUZXh0Q29sb3IsXG4gICAgICByb3VuZDogdHJ1ZSxcbiAgICAgIFsgcHJvcHMuY29udHJvbFR5cGUgXTogdHJ1ZSxcbiAgICAgIGRlbnNlOiB0cnVlXG4gICAgfSkpXG5cbiAgICB3YXRjaCgoKSA9PiBwcm9wcy5tb2RlbFZhbHVlLCAoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuYXV0b3BsYXkpIHtcbiAgICAgICAgc3RhcnRUaW1lcigpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHdhdGNoKCgpID0+IHByb3BzLmF1dG9wbGF5LCB2YWwgPT4ge1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICBzdGFydFRpbWVyKClcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgdGltZXIgPSBudWxsXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZ1bmN0aW9uIHN0YXJ0VGltZXIgKCkge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBpc051bWJlcihwcm9wcy5hdXRvcGxheSkgPT09IHRydWVcbiAgICAgICAgPyBNYXRoLmFicyhwcm9wcy5hdXRvcGxheSlcbiAgICAgICAgOiA1MDAwXG5cbiAgICAgIHRpbWVyICE9PSBudWxsICYmIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVyID0gbnVsbFxuXG4gICAgICAgIGlmIChkdXJhdGlvbiA+PSAwKSB7XG4gICAgICAgICAgbmV4dFBhbmVsKClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c1BhbmVsKClcbiAgICAgICAgfVxuICAgICAgfSwgZHVyYXRpb24pXG4gICAgfVxuXG4gICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgIHByb3BzLmF1dG9wbGF5ICYmIHN0YXJ0VGltZXIoKVxuICAgIH0pXG5cbiAgICBvbkJlZm9yZVVubW91bnQoKCkgPT4ge1xuICAgICAgdGltZXIgIT09IG51bGwgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uQ29udGFpbmVyICh0eXBlLCBtYXBwaW5nKSB7XG4gICAgICByZXR1cm4gaCgnZGl2Jywge1xuICAgICAgICBjbGFzczogJ3EtY2Fyb3VzZWxfX2NvbnRyb2wgcS1jYXJvdXNlbF9fbmF2aWdhdGlvbiBuby13cmFwIGFic29sdXRlIGZsZXgnXG4gICAgICAgICAgKyBgIHEtY2Fyb3VzZWxfX25hdmlnYXRpb24tLSR7IHR5cGUgfSBxLWNhcm91c2VsX19uYXZpZ2F0aW9uLS0keyBuYXZpZ2F0aW9uUG9zaXRpb24udmFsdWUgfWBcbiAgICAgICAgICArIChwcm9wcy5jb250cm9sQ29sb3IgIT09IHZvaWQgMCA/IGAgdGV4dC0keyBwcm9wcy5jb250cm9sQ29sb3IgfWAgOiAnJylcbiAgICAgIH0sIFtcbiAgICAgICAgaCgnZGl2Jywge1xuICAgICAgICAgIGNsYXNzOiAncS1jYXJvdXNlbF9fbmF2aWdhdGlvbi1pbm5lciBmbGV4IGZsZXgtY2VudGVyIG5vLXdyYXAnXG4gICAgICAgIH0sIGdldEVuYWJsZWRQYW5lbHMoKS5tYXAobWFwcGluZykpXG4gICAgICBdKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbnRlbnQgKCkge1xuICAgICAgY29uc3Qgbm9kZSA9IFtdXG5cbiAgICAgIGlmIChwcm9wcy5uYXZpZ2F0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZuID0gc2xvdHNbICduYXZpZ2F0aW9uLWljb24nIF0gIT09IHZvaWQgMFxuICAgICAgICAgID8gc2xvdHNbICduYXZpZ2F0aW9uLWljb24nIF1cbiAgICAgICAgICA6IG9wdHMgPT4gaChRQnRuLCB7XG4gICAgICAgICAgICBrZXk6ICduYXYnICsgb3B0cy5uYW1lLFxuICAgICAgICAgICAgY2xhc3M6IGBxLWNhcm91c2VsX19uYXZpZ2F0aW9uLWljb24gcS1jYXJvdXNlbF9fbmF2aWdhdGlvbi1pY29uLS0keyBvcHRzLmFjdGl2ZSA9PT0gdHJ1ZSA/ICcnIDogJ2luJyB9YWN0aXZlYCxcbiAgICAgICAgICAgIC4uLm9wdHMuYnRuUHJvcHMsXG4gICAgICAgICAgICBvbkNsaWNrOiBvcHRzLm9uQ2xpY2tcbiAgICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gcGFuZWxzTGVuIC0gMVxuICAgICAgICBub2RlLnB1c2goXG4gICAgICAgICAgZ2V0TmF2aWdhdGlvbkNvbnRhaW5lcignYnV0dG9ucycsIChwYW5lbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwYW5lbC5wcm9wcy5uYW1lXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwYW5lbEluZGV4LnZhbHVlID09PSBpbmRleFxuXG4gICAgICAgICAgICByZXR1cm4gZm4oe1xuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgbWF4SW5kZXgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGFjdGl2ZSxcbiAgICAgICAgICAgICAgYnRuUHJvcHM6IHtcbiAgICAgICAgICAgICAgICBpY29uOiBhY3RpdmUgPT09IHRydWUgPyBuYXZBY3RpdmVJY29uLnZhbHVlIDogbmF2SWNvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICBzaXplOiAnc20nLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xQcm9wcy52YWx1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7IGdvVG9QYW5lbChuYW1lKSB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHByb3BzLnRodW1ibmFpbHMgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSBwcm9wcy5jb250cm9sQ29sb3IgIT09IHZvaWQgMFxuICAgICAgICAgID8gYCB0ZXh0LSR7IHByb3BzLmNvbnRyb2xDb2xvciB9YFxuICAgICAgICAgIDogJydcblxuICAgICAgICBub2RlLnB1c2goZ2V0TmF2aWdhdGlvbkNvbnRhaW5lcigndGh1bWJuYWlscycsIHBhbmVsID0+IHtcbiAgICAgICAgICBjb25zdCBzbGlkZSA9IHBhbmVsLnByb3BzXG5cbiAgICAgICAgICByZXR1cm4gaCgnaW1nJywge1xuICAgICAgICAgICAga2V5OiAndG1iIycgKyBzbGlkZS5uYW1lLFxuICAgICAgICAgICAgY2xhc3M6IGBxLWNhcm91c2VsX190aHVtYm5haWwgcS1jYXJvdXNlbF9fdGh1bWJuYWlsLS0keyBzbGlkZS5uYW1lID09PSBwcm9wcy5tb2RlbFZhbHVlID8gJycgOiAnaW4nIH1hY3RpdmVgICsgY29sb3IsXG4gICAgICAgICAgICBzcmM6IHNsaWRlLmltZ1NyYyB8fCBzbGlkZVsgJ2ltZy1zcmMnIF0sXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7IGdvVG9QYW5lbChzbGlkZS5uYW1lKSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5hcnJvd3MgPT09IHRydWUgJiYgcGFuZWxJbmRleC52YWx1ZSA+PSAwKSB7XG4gICAgICAgIGlmIChwcm9wcy5pbmZpbml0ZSA9PT0gdHJ1ZSB8fCBwYW5lbEluZGV4LnZhbHVlID4gMCkge1xuICAgICAgICAgIG5vZGUucHVzaChcbiAgICAgICAgICAgIGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAga2V5OiAncHJldicsXG4gICAgICAgICAgICAgIGNsYXNzOiBgcS1jYXJvdXNlbF9fY29udHJvbCBxLWNhcm91c2VsX19hcnJvdyBxLWNhcm91c2VsX19wcmV2LWFycm93IHEtY2Fyb3VzZWxfX3ByZXYtYXJyb3ctLSR7IGRpcmVjdGlvbi52YWx1ZSB9IGFic29sdXRlIGZsZXggZmxleC1jZW50ZXJgXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgIGgoUUJ0biwge1xuICAgICAgICAgICAgICAgIGljb246IGFycm93SWNvbnMudmFsdWVbIDAgXSxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sUHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgICAgb25DbGljazogcHJldmlvdXNQYW5lbFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5maW5pdGUgPT09IHRydWUgfHwgcGFuZWxJbmRleC52YWx1ZSA8IHBhbmVsc0xlbiAtIDEpIHtcbiAgICAgICAgICBub2RlLnB1c2goXG4gICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgIGtleTogJ25leHQnLFxuICAgICAgICAgICAgICBjbGFzczogJ3EtY2Fyb3VzZWxfX2NvbnRyb2wgcS1jYXJvdXNlbF9fYXJyb3cgcS1jYXJvdXNlbF9fbmV4dC1hcnJvdydcbiAgICAgICAgICAgICAgICArIGAgcS1jYXJvdXNlbF9fbmV4dC1hcnJvdy0tJHsgZGlyZWN0aW9uLnZhbHVlIH0gYWJzb2x1dGUgZmxleCBmbGV4LWNlbnRlcmBcbiAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgaChRQnRuLCB7XG4gICAgICAgICAgICAgICAgaWNvbjogYXJyb3dJY29ucy52YWx1ZVsgMSBdLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xQcm9wcy52YWx1ZSxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBuZXh0UGFuZWxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoTWVyZ2VTbG90KHNsb3RzLmNvbnRyb2wsIG5vZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHBhbmVsc0xlbiA9IHVwZGF0ZVBhbmVsc0xpc3Qoc2xvdHMpXG5cbiAgICAgIHJldHVybiBoKCdkaXYnLCB7XG4gICAgICAgIGNsYXNzOiBjbGFzc2VzLnZhbHVlLFxuICAgICAgICBzdHlsZTogc3R5bGUudmFsdWVcbiAgICAgIH0sIFtcbiAgICAgICAgaERpcihcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7IGNsYXNzOiAncS1jYXJvdXNlbF9fc2xpZGVzLWNvbnRhaW5lcicgfSxcbiAgICAgICAgICBnZXRQYW5lbENvbnRlbnQoKSxcbiAgICAgICAgICAnc2wtY29udCcsXG4gICAgICAgICAgcHJvcHMuc3dpcGVhYmxlLFxuICAgICAgICAgICgpID0+IHBhbmVsRGlyZWN0aXZlcy52YWx1ZVxuICAgICAgICApXG4gICAgICBdLmNvbmNhdChnZXRDb250ZW50KCkpKVxuICAgIH1cbiAgfVxufSlcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5xLXBhZ2UuYXV0aC1wYWdlLmZpdC5yb3cucS1wYS1tZCh2LWlmPVwicmVhZHlcIilcbiAgLmFic29sdXRlLWJvdHRvbS1yaWdodC5xLXBiLW1kLnEtcHgtbGdcbiAgICBsYW5ndWFnZS1zZWxlY3RcbiAgLmF1dGgtY2FyZC13cmFwLmNvbC0xMi5jb2wtbWQtNlxuICAgIC5hdXRoLWNhcmQucmVsYXRpdmUtcG9zaXRpb24uZml0LmNvbHVtbi5qdXN0aWZ5LWJldHdlZW4uaXRlbXMtc3RyZXRjaC5iZy1wcmltYXJ5Qmx1ZS50ZXh0LXdoaXRlLnEtcGEteGxcbiAgICAgIC5mdWxsLXdpZHRoLmNvbFxuICAgICAgICB2ZWxvLWljb24oXG4gICAgICAgICAgbmFtZT1cInZlbG9cIlxuICAgICAgICAgIGNvbG9yPVwid2hpdGVcIlxuICAgICAgICAgIHNpemU9XCI5MHB4XCJcbiAgICAgICAgKVxuICAgICAgLmZ1bGwtd2lkdGguY29sLmF1dGgtY2FyZC10aXRsZS5mbGV4Lml0ZW1zLWNlbnRlciB7eyBjYXJkVGl0bGUgfX1cbiAgICAgIC5mdWxsLXdpZHRoLmNvbC5mbGV4Lmp1c3RpZnktY2VudGVyLml0ZW1zLWVuZFxuICAgICAgICBxLWJ0bi5hYnNvbHV0ZS1ib3R0b20tcmlnaHQuYmctZ3JlZW4udGV4dC13aGl0ZS50ZXh0LWJvbGQucS1tYS1sZyhcbiAgICAgICAgICBuby1jYXBzXG4gICAgICAgICAgdi1pZj1cInNob3dTaG9ydGN1dFwiXG4gICAgICAgICAgOnRvPVwieyBuYW1lOiAnYWRtaW4uc3RhdHMnIH1cIlxuICAgICAgICApIHt7ICR0KCdhZG1pbi5uYXYuc3RhdHMnKSB9fVxuICAgICAgICBxLWNhcm91c2VsLmJnLXByaW1hcnlCbHVlLnRleHQtd2hpdGUoXG4gICAgICAgICAgdi1tb2RlbD1cInNsaWRlXCJcbiAgICAgICAgICB0cmFuc2l0aW9uLXByZXY9XCJzY2FsZVwiXG4gICAgICAgICAgdHJhbnNpdGlvbi1uZXh0PVwic2NhbGVcIlxuICAgICAgICAgIHN3aXBlYWJsZVxuICAgICAgICAgIGFuaW1hdGVkXG4gICAgICAgICAgY29udHJvbC1jb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICA6bmF2aWdhdGlvbj1cInNsaWRlcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICBwYWRkaW5nXG4gICAgICAgICAgaGVpZ2h0PVwiMTBlbVwiXG4gICAgICAgIClcbiAgICAgICAgICBxLWNhcm91c2VsLXNsaWRlLmZsZXguanVzdGlmeS1jZW50ZXIuaXRlbXMtZW5kKFxuICAgICAgICAgICAgdi1mb3I9XCJzbGlkZSBpbiBzbGlkZXNcIlxuICAgICAgICAgICAgOm5hbWU9XCJzbGlkZS5uYW1lXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZmxleC5mbGV4LWNlbnRlclxuICAgICAgICAgICAgICB2ZWxvLWljb24oXG4gICAgICAgICAgICAgICAgdi1pZj1cInNsaWRlLmljb25cIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwic2xpZGUuaWNvblwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnEtbXQtbWQudGV4dC1jZW50ZXIge3sgc2xpZGUudGV4dCB9fVxuICAuYXV0aC1wYWdlLWNvbnRlbnQtd3JhcC5jb2wuY29sLW1kLTYuZmxleC5mbGV4LWNlbnRlclxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmaW5lQ29tcG9uZW50LCByZWYsIG9uTW91bnRlZCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMYW5ndWFnZVNlbGVjdCBmcm9tICdzcmMvY29tcG9uZW50cy9sYXlvdXQvTGFuZ3VhZ2VTZWxlY3QudnVlJ1xuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnc3JjL3N0b3Jlcy9hdXRoJ1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogJ0F1dGhQYWdlJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgTGFuZ3VhZ2VTZWxlY3RcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNhcmRUaXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHNsaWRlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiAoKSA9PiBbXVxuICAgIH1cbiAgfSxcblxuICBzZXR1cCAocHJvcHMpIHtcbiAgICBjb25zdCBzbGlkZSA9IHJlZihwcm9wcy5zbGlkZXMubGVuZ3RoID8gcHJvcHMuc2xpZGVzWzBdLm5hbWUgOiAnJylcbiAgICBjb25zdCBhdXRoU3RvcmUgPSB1c2VBdXRoU3RvcmUoKVxuICAgIGNvbnN0IHNob3dTaG9ydGN1dCA9IGF1dGhTdG9yZS5pcygnZWxldmF0ZWQnKVxuICAgIGNvbnN0IHJlYWR5ID0gcmVmKGZhbHNlKVxuXG4gICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgIC8vIHByZXZlbnQgc3NyXG4gICAgICByZWFkeS52YWx1ZSA9IHRydWVcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNsaWRlLFxuICAgICAgc2hvd1Nob3J0Y3V0LFxuICAgICAgcmVhZHlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiIHNjb3BlZD5cbi5hdXRoLWNhcmRcbiAgYm9yZGVyLXJhZGl1czogOHB4XG4uYXV0aC1jYXJkLXRpdGxlXG4gIGZvbnQtc2l6ZTogMjhweFxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJGJyZWFrcG9pbnQtc20tbWF4KVxuICAuYXV0aC1wYWdlXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlXG4gIC5hdXRoLXBhZ2UtY29udGVudC13cmFwXG4gICAgZmxleDogMTAwMDAgMSAwJVxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJGJyZWFrcG9pbnQtbWQtbWluKVxuICAuYXV0aC1jYXJkLXdyYXBcbiAgICBwYWRkaW5nLXJpZ2h0OiA0OHB4XG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFPQSxJQUFBLGlCQUFlLGdCQUFnQjtBQUFBLEVBQzdCLE1BQU07QUFBQSxFQUVOLE9BQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxJQUNILFFBQVE7QUFBQSxFQUNUO0FBQUEsRUFFRCxNQUFPLE9BQU8sRUFBRSxTQUFTO0FBQ3ZCLFVBQU0sUUFBUSxTQUFTLE1BQ3JCLE1BQU0sU0FDRixFQUFFLGlCQUFpQixRQUFTLE1BQU0sV0FBYSxJQUMvQyxDQUFFLENBQ1A7QUFFRCxXQUFPLE1BQU0sRUFBRSxPQUFPO0FBQUEsTUFDcEIsT0FBTztBQUFBLE1BQ1AsT0FBTyxNQUFNO0FBQUEsSUFDbkIsR0FBTyxNQUFNLE1BQU0sT0FBTyxDQUFDO0FBQUEsRUFDeEI7QUFDSCxDQUFDO0FDZkQsTUFBTSw0QkFBNEIsQ0FBRSxPQUFPLFNBQVMsVUFBVSxNQUFRO0FBQ3RFLE1BQU0scUJBQXFCLENBQUUsV0FBVyxRQUFRLFdBQVcsUUFBUSxZQUFjO0FBRWpGLElBQUEsWUFBZSxnQkFBZ0I7QUFBQSxFQUM3QixNQUFNO0FBQUEsRUFFTixPQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsSUFFSCxnQkFBZ0I7QUFBQSxNQUNkLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxnQkFBZ0I7QUFBQSxNQUNkLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFFRCxRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFFVCxjQUFjO0FBQUEsSUFDZCxrQkFBa0I7QUFBQSxJQUNsQixhQUFhO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixXQUFXLE9BQUssbUJBQW1CLFNBQVMsQ0FBQztBQUFBLE1BQzdDLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFFRCxVQUFVLENBQUUsUUFBUSxPQUFTO0FBQUEsSUFFN0IsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBRVYsWUFBWTtBQUFBLElBQ1osb0JBQW9CO0FBQUEsTUFDbEIsTUFBTTtBQUFBLE1BQ04sV0FBVyxPQUFLLDBCQUEwQixTQUFTLENBQUM7QUFBQSxJQUNyRDtBQUFBLElBQ0QsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCO0FBQUEsSUFFdEIsWUFBWTtBQUFBLEVBQ2I7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNKO0FBQUEsRUFFRCxNQUFPLE9BQU8sRUFBRSxTQUFTO0FBQ3ZCLFVBQU0sRUFBRSxPQUFPLEVBQUUsR0FBSSxFQUFBLElBQUssbUJBQW9CO0FBRTlDLFVBQU0sU0FBUyxRQUFRLE9BQU8sRUFBRTtBQUVoQyxRQUFJLFFBQVEsTUFBTTtBQUVsQixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQWtCO0FBQUEsTUFDbEI7QUFBQSxNQUFpQjtBQUFBLE1BQ2pCO0FBQUEsTUFBZTtBQUFBLE1BQVc7QUFBQSxNQUMxQjtBQUFBLElBQ0QsSUFBRyxTQUFVO0FBRWQsVUFBTSxFQUFFLGFBQWMsSUFBRyxjQUFlO0FBRXhDLFVBQU0sUUFBUSxTQUFTLE1BQ3JCLGFBQWEsVUFBVSxRQUFRLE1BQU0sV0FBVyxTQUM1QyxFQUFFLFFBQVEsTUFBTSxPQUFRLElBQ3hCLENBQUUsQ0FDUDtBQUVELFVBQU0sWUFBWSxTQUFTLE1BQU8sTUFBTSxhQUFhLE9BQU8sYUFBYSxZQUFhO0FBRXRGLFVBQU0scUJBQXFCO0FBQUEsTUFBUyxNQUFNLE1BQU0sdUJBQzFDLE1BQU0sYUFBYSxPQUFPLFVBQVU7QUFBQSxJQUN6QztBQUVELFVBQU0sVUFBVTtBQUFBLE1BQVMsTUFDdkIsNkNBQThDLE1BQU0sWUFBWSxPQUFPLEtBQUssbUJBQ3pFLGFBQWEsVUFBVSxPQUFPLGdCQUFnQixPQUM5QyxPQUFPLFVBQVUsT0FBTyw2QkFBNkIsT0FDckQsTUFBTSxXQUFXLE9BQU8sdUJBQXdCLFVBQVUsVUFBVyxPQUNyRSxNQUFNLGVBQWUsT0FBTywyQkFBNEIsbUJBQW1CLFVBQVc7QUFBQSxJQUMxRjtBQUVELFVBQU0sYUFBYSxTQUFTLE1BQU07QUFDaEMsWUFBTSxNQUFNO0FBQUEsUUFDVixNQUFNLFlBQVksR0FBRyxRQUFRLFNBQVUsTUFBTSxhQUFhLE9BQU8sT0FBTztBQUFBLFFBQ3hFLE1BQU0sWUFBWSxHQUFHLFFBQVEsU0FBVSxNQUFNLGFBQWEsT0FBTyxTQUFTO0FBQUEsTUFDM0U7QUFFRCxhQUFPLE1BQU0sYUFBYSxTQUFTLEdBQUcsS0FBSyxRQUFRLE9BQy9DLElBQUksUUFBUyxJQUNiO0FBQUEsSUFDVixDQUFLO0FBRUQsVUFBTSxVQUFVLFNBQVMsTUFBTSxNQUFNLGtCQUFrQixHQUFHLFFBQVEsU0FBUyxjQUFjO0FBQ3pGLFVBQU0sZ0JBQWdCLFNBQVMsTUFBTSxNQUFNLHdCQUF3QixRQUFRLEtBQUs7QUFFaEYsVUFBTSxlQUFlLFNBQVMsT0FBTztBQUFBLE1BQ25DLE9BQU8sTUFBTTtBQUFBLE1BQ2IsV0FBVyxNQUFNO0FBQUEsTUFDakIsT0FBTztBQUFBLE1BQ1AsQ0FBRSxNQUFNLGNBQWU7QUFBQSxNQUN2QixPQUFPO0FBQUEsSUFDYixFQUFNO0FBRUYsVUFBTSxNQUFNLE1BQU0sWUFBWSxNQUFNO0FBQ2xDLFVBQUksTUFBTSxVQUFVO0FBQ2xCLG1CQUFZO0FBQUEsTUFDYjtBQUFBLElBQ1AsQ0FBSztBQUVELFVBQU0sTUFBTSxNQUFNLFVBQVUsU0FBTztBQUNqQyxVQUFJLEtBQUs7QUFDUCxtQkFBWTtBQUFBLE1BQ2IsV0FDUSxVQUFVLE1BQU07QUFDdkIscUJBQWEsS0FBSztBQUNsQixnQkFBUTtBQUFBLE1BQ1Q7QUFBQSxJQUNQLENBQUs7QUFFRCxhQUFTLGFBQWM7QUFDckIsWUFBTSxXQUFXLFNBQVMsTUFBTSxRQUFRLE1BQU0sT0FDMUMsS0FBSyxJQUFJLE1BQU0sUUFBUSxJQUN2QjtBQUVKLGdCQUFVLFFBQVEsYUFBYSxLQUFLO0FBQ3BDLGNBQVEsV0FBVyxNQUFNO0FBQ3ZCLGdCQUFRO0FBRVIsWUFBSSxZQUFZLEdBQUc7QUFDakIsb0JBQVc7QUFBQSxRQUNaLE9BQ0k7QUFDSCx3QkFBZTtBQUFBLFFBQ2hCO0FBQUEsTUFDRixHQUFFLFFBQVE7QUFBQSxJQUNaO0FBRUQsY0FBVSxNQUFNO0FBQ2QsWUFBTSxZQUFZLFdBQVk7QUFBQSxJQUNwQyxDQUFLO0FBRUQsb0JBQWdCLE1BQU07QUFDcEIsZ0JBQVUsUUFBUSxhQUFhLEtBQUs7QUFBQSxJQUMxQyxDQUFLO0FBRUQsYUFBUyx1QkFBd0IsTUFBTSxTQUFTO0FBQzlDLGFBQU8sRUFBRSxPQUFPO0FBQUEsUUFDZCxPQUFPLDRGQUMwQixnQ0FBa0MsbUJBQW1CLFdBQ2pGLE1BQU0saUJBQWlCLFNBQVMsU0FBVSxNQUFNLGlCQUFrQjtBQUFBLE1BQy9FLEdBQVM7QUFBQSxRQUNELEVBQUUsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFFBQ1IsR0FBRSxpQkFBa0IsRUFBQyxJQUFJLE9BQU8sQ0FBQztBQUFBLE1BQzFDLENBQU87QUFBQSxJQUNGO0FBRUQsYUFBUyxhQUFjO0FBQ3JCLFlBQU0sT0FBTyxDQUFFO0FBRWYsVUFBSSxNQUFNLGVBQWUsTUFBTTtBQUM3QixjQUFNLEtBQUssTUFBTyx1QkFBd0IsU0FDdEMsTUFBTyxxQkFDUCxVQUFRLEVBQUUsTUFBTTtBQUFBLFVBQ2hCLEtBQUssUUFBUSxLQUFLO0FBQUEsVUFDbEIsT0FBTyw0REFBNkQsS0FBSyxXQUFXLE9BQU8sS0FBSztBQUFBLFVBQ2hHLEdBQUcsS0FBSztBQUFBLFVBQ1IsU0FBUyxLQUFLO0FBQUEsUUFDMUIsQ0FBVztBQUVILGNBQU0sV0FBVyxZQUFZO0FBQzdCLGFBQUs7QUFBQSxVQUNILHVCQUF1QixXQUFXLENBQUMsT0FBTyxVQUFVO0FBQ2xELGtCQUFNLE9BQU8sTUFBTSxNQUFNO0FBQ3pCLGtCQUFNLFNBQVMsV0FBVyxVQUFVO0FBRXBDLG1CQUFPLEdBQUc7QUFBQSxjQUNSO0FBQUEsY0FDQTtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQSxVQUFVO0FBQUEsZ0JBQ1IsTUFBTSxXQUFXLE9BQU8sY0FBYyxRQUFRLFFBQVE7QUFBQSxnQkFDdEQsTUFBTTtBQUFBLGdCQUNOLEdBQUcsYUFBYTtBQUFBLGNBQ2pCO0FBQUEsY0FDRCxTQUFTLE1BQU07QUFBRSwwQkFBVSxJQUFJO0FBQUEsY0FBRztBQUFBLFlBQ2hELENBQWE7QUFBQSxVQUNiLENBQVc7QUFBQSxRQUNGO0FBQUEsTUFDRixXQUNRLE1BQU0sZUFBZSxNQUFNO0FBQ2xDLGNBQU0sUUFBUSxNQUFNLGlCQUFpQixTQUNqQyxTQUFVLE1BQU0saUJBQ2hCO0FBRUosYUFBSyxLQUFLLHVCQUF1QixjQUFjLFdBQVM7QUFDdEQsZ0JBQU0sUUFBUSxNQUFNO0FBRXBCLGlCQUFPLEVBQUUsT0FBTztBQUFBLFlBQ2QsS0FBSyxTQUFTLE1BQU07QUFBQSxZQUNwQixPQUFPLGdEQUFpRCxNQUFNLFNBQVMsTUFBTSxhQUFhLEtBQUssZUFBZ0I7QUFBQSxZQUMvRyxLQUFLLE1BQU0sVUFBVSxNQUFPO0FBQUEsWUFDNUIsU0FBUyxNQUFNO0FBQUUsd0JBQVUsTUFBTSxJQUFJO0FBQUEsWUFBRztBQUFBLFVBQ3BELENBQVc7QUFBQSxRQUNYLENBQVMsQ0FBQztBQUFBLE1BQ0g7QUFFRCxVQUFJLE1BQU0sV0FBVyxRQUFRLFdBQVcsU0FBUyxHQUFHO0FBQ2xELFlBQUksTUFBTSxhQUFhLFFBQVEsV0FBVyxRQUFRLEdBQUc7QUFDbkQsZUFBSztBQUFBLFlBQ0gsRUFBRSxPQUFPO0FBQUEsY0FDUCxLQUFLO0FBQUEsY0FDTCxPQUFPLHdGQUF5RixVQUFVO0FBQUEsWUFDeEgsR0FBZTtBQUFBLGNBQ0QsRUFBRSxNQUFNO0FBQUEsZ0JBQ04sTUFBTSxXQUFXLE1BQU87QUFBQSxnQkFDeEIsR0FBRyxhQUFhO0FBQUEsZ0JBQ2hCLFNBQVM7QUFBQSxjQUN6QixDQUFlO0FBQUEsWUFDZixDQUFhO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFRCxZQUFJLE1BQU0sYUFBYSxRQUFRLFdBQVcsUUFBUSxZQUFZLEdBQUc7QUFDL0QsZUFBSztBQUFBLFlBQ0gsRUFBRSxPQUFPO0FBQUEsY0FDUCxLQUFLO0FBQUEsY0FDTCxPQUFPLHdGQUMwQixVQUFVO0FBQUEsWUFDekQsR0FBZTtBQUFBLGNBQ0QsRUFBRSxNQUFNO0FBQUEsZ0JBQ04sTUFBTSxXQUFXLE1BQU87QUFBQSxnQkFDeEIsR0FBRyxhQUFhO0FBQUEsZ0JBQ2hCLFNBQVM7QUFBQSxjQUN6QixDQUFlO0FBQUEsWUFDZixDQUFhO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUQsYUFBTyxXQUFXLE1BQU0sU0FBUyxJQUFJO0FBQUEsSUFDdEM7QUFFRCxXQUFPLE1BQU07QUFDWCxrQkFBWSxpQkFBaUIsS0FBSztBQUVsQyxhQUFPLEVBQUUsT0FBTztBQUFBLFFBQ2QsT0FBTyxRQUFRO0FBQUEsUUFDZixPQUFPLE1BQU07QUFBQSxNQUNyQixHQUFTO0FBQUEsUUFDRDtBQUFBLFVBQ0U7QUFBQSxVQUNBLEVBQUUsT0FBTywrQkFBZ0M7QUFBQSxVQUN6QyxnQkFBaUI7QUFBQSxVQUNqQjtBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQ04sTUFBTSxnQkFBZ0I7QUFBQSxRQUN2QjtBQUFBLE1BQ1QsRUFBUSxPQUFPLFdBQVUsQ0FBRSxDQUFDO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBQ0gsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNPRCxNQUFLLFlBQWEsZ0JBQWE7QUFBQSxFQUM3QixNQUFNO0FBQUEsRUFFTixZQUFZO0FBQUEsSUFDVjtBQUFBLEVBQ0Q7QUFBQSxFQUVELE9BQU87QUFBQSxJQUNMLFdBQVc7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLFNBQVM7QUFBQSxJQUNWO0FBQUEsSUFDRCxRQUFRO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsTUFDVixTQUFTLE1BQU0sQ0FBQztBQUFBLElBQ2xCO0FBQUEsRUFDRDtBQUFBLEVBRUQsTUFBTyxPQUFPO0FBQ1osVUFBTSxRQUFRLElBQUksTUFBTSxPQUFPLFNBQVMsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFO0FBQ2pFLFVBQU0sWUFBWSxhQUFhO0FBQy9CLFVBQU0sZUFBZSxVQUFVLEdBQUcsVUFBVTtBQUM1QyxVQUFNLFFBQVEsSUFBSSxLQUFLO0FBRXZCLGNBQVUsTUFBTTtBQUVkLFlBQU0sUUFBUTtBQUFBLEtBQ2Y7QUFFRCxXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixDQUFDOzs7In0=
