Orderassets/css/widgets.min.css000064400000011675147600374750011627 0ustar00.hester-core-custom-list-widget .hester-custom-list-widget-items {margin-top: 1.8rem;}.hester-core-custom-list-widget .hester-custom-list-widget-item {position: relative;display: -webkit-box;display: -ms-flexbox;display: flex;-ms-flex-wrap: nowrap;flex-wrap: nowrap;margin-top: 1.8rem;}.hester-core-custom-list-widget .hester-custom-list-widget-item .hester-widget-icon {width: 1.68rem;font-size: 1.8rem;margin-right: 1.2rem;position: relative;top: .4rem;}.hester-core-custom-list-widget .hester-custom-list-widget-item i, .hester-core-custom-list-widget .hester-custom-list-widget-item i.hester-icon {width: 1.68rem;font-size: 1.792rem;}.hester-core-custom-list-widget .hester-custom-list-widget-item svg, .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-icon {margin-right: 1.2rem;position: relative;top: .48em;-ms-flex-item-align: start;align-self: flex-start;-ms-flex-negative: 0;flex-shrink: 0;}.hester-core-custom-list-widget .hester-custom-list-widget-item svg {fill: currentColor;height: auto;width: 1.792rem;}#secondary .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-entry a:not(.hester-btn, :hover, :focus), .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-entry a:not(.hester-btn, :hover, :focus) {color: inherit;}.hester-core-custom-list-widget .hester-custom-list-widget-item.hester-clw-sep {margin-bottom: 3.68rem;}.hester-core-custom-list-widget .hester-custom-list-widget-item.hester-clw-sep:after {content: '';position: absolute;bottom: -1.84rem;width: 100%;height: .1rem;background-color: var(--elementBorderColor, #eaeaea);}.hester-posts-list-widget {display: -webkit-box;display: -ms-flexbox;display: flex;margin-bottom: 2rem;-webkit-box-align: center;-ms-flex-align: center;align-items: center;}.hester-posts-list-widget:last-child {margin-bottom: 0;}.hester-posts-list-widget-thumb {position: relative;-webkit-box-flex: 0;-ms-flex: 0 0 auto;flex: 0 0 auto;z-index: 0;}.hester-posts-list-widget-thumb a {width: 100%;height: 100%;display: block;overflow: hidden;}.hester-posts-list-widget-thumb img {border-radius: .3rem;max-width: 7.5rem;object-fit: cover;}.hester-posts-list-widget-thumb .post-thumb-caption {position: absolute;top: -1.2rem;left: -1.2rem;width: 2.6rem;height: 2.6rem;line-height: 2.6rem;text-align: center;border-radius: 10rem;background-color: #222;color: #fff;font-size: 76%;margin: 0;letter-spacing: .05rem;}.hester-posts-list-widget-title {font-weight: 600;line-height: 1.5;}.hester-posts-list-widget-categories {margin-bottom: .6rem;}.hester-posts-list-widget-meta {margin-top: .6rem;}.hester-posts-list-widget-meta, .hester-posts-list-widget-categories {font-size: 1.3rem;line-height: 1.5;}.hester-posts-list-widget-categories svg, .hester-posts-list-widget-meta svg {height: 1.35rem;margin-right: .6rem;vertical-align: middle;display: inline-block;fill: currentColor;width: auto;}.hester-posts-list-widget-meta>span {padding-right: 1.6rem;}.hester-posts-list-widget-meta>span:last-child {padding-right: 0;}.hester-posts-list-widget-meta>span:last-child:after {display: none;}.hester-posts-list-widget-meta>span:after {content: '';height: 1.6rem;width: 1rem;background-color: currentColor;display: inline-block;position: relative;right: -8rem;top: -1rem;vertical-align: middle;}.hester-posts-list-widget-init-s1 .hester-posts-list-widget-thumb {margin-right: 1.8rem;width: 7.5rem;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget, .hester-posts-list-widget-init-s2 .hester-posts-list-widget {justify-content: center;flex-wrap: wrap;text-align: center;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb {flex: 0 0 100%;}.hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb {margin-bottom: 1.8rem;}.hester-posts-list-widget-init-s3 .post-thumb-caption, .hester-posts-list-widget-init-s2 .post-thumb-caption {top: -1.3rem;left: -1.1rem;width: 3.2rem;height: 3.2rem;line-height: 3.2rem;font-size: 80%;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb img, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb img {width: 100%;max-width: 100%;height: 35rem;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-details, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-details {width: 100%;padding: 0 1.5rem;overflow: hidden;position: relative;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-meta .hester-posts-list-widget-date, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-meta .hester-posts-list-widget-date {justify-content: center;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb {margin-bottom: -4rem;}.hester-posts-list-widget-init-s3 .hester-posts-list-widget-details {margin: 0 auto;max-width: 92%;padding: 1.3rem 1.5rem 0;background-color: #fff;}@media (min-width: 37.5em) {.hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb img, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb img {height: 20rem;}}assets/css/widgets.css000064400000013240147600374750011033 0ustar00.hester-core-custom-list-widget .hester-custom-list-widget-items { margin-top: 1.8rem; } .hester-core-custom-list-widget .hester-custom-list-widget-item { position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-wrap: nowrap; flex-wrap: nowrap; margin-top: 1.8rem; } .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-widget-icon { width: 1.68rem; font-size: 1.8rem; margin-right: 1.2rem; position: relative; top: .4rem; } .hester-core-custom-list-widget .hester-custom-list-widget-item i, .hester-core-custom-list-widget .hester-custom-list-widget-item i.hester-icon { width: 1.68rem; font-size: 1.792rem; } .hester-core-custom-list-widget .hester-custom-list-widget-item svg, .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-icon { margin-right: 1.2rem; position: relative; top: .48em; -ms-flex-item-align: start; align-self: flex-start; -ms-flex-negative: 0; flex-shrink: 0; } .hester-core-custom-list-widget .hester-custom-list-widget-item svg { fill: currentColor; height: auto; width: 1.792rem; } #secondary .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-entry a:not(.hester-btn, :hover, :focus), .hester-core-custom-list-widget .hester-custom-list-widget-item .hester-entry a:not(.hester-btn, :hover, :focus) { color: inherit; } .hester-core-custom-list-widget .hester-custom-list-widget-item.hester-clw-sep { margin-bottom: 3.68rem; } .hester-core-custom-list-widget .hester-custom-list-widget-item.hester-clw-sep:after { content: ''; position: absolute; bottom: -1.84rem; width: 100%; height: .1rem; background-color: var(--elementBorderColor, #eaeaea); } .hester-posts-list-widget { display: -webkit-box; display: -ms-flexbox; display: flex; margin-bottom: 2rem; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .hester-posts-list-widget:last-child { margin-bottom: 0; } .hester-posts-list-widget-thumb { position: relative; -webkit-box-flex: 0; -ms-flex: 0 0 auto; flex: 0 0 auto; z-index: 0; } .hester-posts-list-widget-thumb a { width: 100%; height: 100%; display: block; overflow: hidden; } .hester-posts-list-widget-thumb img { border-radius: .3rem; max-width: 7.5rem; object-fit: cover; } .hester-posts-list-widget-thumb .post-thumb-caption { position: absolute; top: -1.2rem; left: -1.2rem; width: 2.6rem; height: 2.6rem; line-height: 2.6rem; text-align: center; border-radius: 10rem; background-color: #222; color: #fff; font-size: 76%; margin: 0; letter-spacing: .05rem; } .hester-posts-list-widget-title { font-weight: 600; line-height: 1.5; } /** !!!! **/ .hester-posts-list-widget-categories { margin-bottom: .6rem; } .hester-posts-list-widget-meta { margin-top: .6rem; } .hester-posts-list-widget-meta, .hester-posts-list-widget-categories { font-size: 1.3rem; line-height: 1.5; } .hester-posts-list-widget-categories svg, .hester-posts-list-widget-meta svg { height: 1.35rem; margin-right: .6rem; vertical-align: middle; display: inline-block; fill: currentColor; width: auto; } .hester-posts-list-widget-meta>span { padding-right: 1.6rem; } .hester-posts-list-widget-meta>span:last-child { padding-right: 0; } .hester-posts-list-widget-meta>span:last-child:after { display: none; } .hester-posts-list-widget-meta>span:after { content: ''; height: 1.6rem; width: 1rem; background-color: currentColor; display: inline-block; position: relative; right: -8rem; top: -1rem; vertical-align: middle; } .hester-posts-list-widget-init-s1 .hester-posts-list-widget-thumb { margin-right: 1.8rem; width: 7.5rem; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget, .hester-posts-list-widget-init-s2 .hester-posts-list-widget { justify-content: center; flex-wrap: wrap; text-align: center; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb { flex: 0 0 100%; } .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb { margin-bottom: 1.8rem; } .hester-posts-list-widget-init-s3 .post-thumb-caption, .hester-posts-list-widget-init-s2 .post-thumb-caption { top: -1.3rem; left: -1.1rem; width: 3.2rem; height: 3.2rem; line-height: 3.2rem; font-size: 80%; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb img, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb img { width: 100%; max-width: 100%; height: 35rem; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-details, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-details { width: 100%; padding: 0 1.5rem; overflow: hidden; position: relative; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-meta .hester-posts-list-widget-date, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-meta .hester-posts-list-widget-date { justify-content: center; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb { margin-bottom: -4rem; } .hester-posts-list-widget-init-s3 .hester-posts-list-widget-details { margin: 0 auto; max-width: 92%; padding: 1.3rem 1.5rem 0; background-color: #fff; } /* sm > 600px */ @media (min-width: 37.5em) { .hester-posts-list-widget-init-s3 .hester-posts-list-widget-thumb img, .hester-posts-list-widget-init-s2 .hester-posts-list-widget-thumb img { height: 20rem; } }assets/css/swiper-bundle.min.css000064400000036314147600374750012736 0ustar00/** * Swiper 7.3.1 * Most modern mobile touch slider and framework with hardware accelerated transitions * https://swiperjs.com * * Copyright 2014-2021 Vladimir Kharlampidi * * Released under the MIT License * * Released on: November 24, 2021 */ @font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-pointer-events{touch-action:pan-y}.swiper-pointer-events.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:50%;background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-next+.swiper-slide,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-creative .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden}assets/css/swiper-bundle.css000064400000046042147600374750012153 0ustar00/** * Swiper 7.3.1 * Most modern mobile touch slider and framework with hardware accelerated transitions * https://swiperjs.com * * Copyright 2014-2021 Vladimir Kharlampidi * * Released under the MIT License * * Released on: November 24, 2021 */ @font-face { font-family: 'swiper-icons'; src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA'); font-weight: 400; font-style: normal; } :root { --swiper-theme-color: #007aff; } .swiper { margin-left: auto; margin-right: auto; position: relative; overflow: hidden; list-style: none; padding: 0; /* Fix of Webkit flickering */ z-index: 1; } .swiper-vertical > .swiper-wrapper { flex-direction: column; } .swiper-wrapper { position: relative; width: 100%; height: 100%; z-index: 1; display: flex; transition-property: transform; box-sizing: content-box; } .swiper-android .swiper-slide, .swiper-wrapper { transform: translate3d(0px, 0, 0); } .swiper-pointer-events { touch-action: pan-y; } .swiper-pointer-events.swiper-vertical { touch-action: pan-x; } .swiper-slide { flex-shrink: 0; width: 100%; height: 100%; position: relative; transition-property: transform; } .swiper-slide-invisible-blank { visibility: hidden; } /* Auto Height */ .swiper-autoheight, .swiper-autoheight .swiper-slide { height: auto; } .swiper-autoheight .swiper-wrapper { align-items: flex-start; transition-property: transform, height; } /* 3D Effects */ .swiper-3d, .swiper-3d.swiper-css-mode .swiper-wrapper { perspective: 1200px; } .swiper-3d .swiper-wrapper, .swiper-3d .swiper-slide, .swiper-3d .swiper-slide-shadow, .swiper-3d .swiper-slide-shadow-left, .swiper-3d .swiper-slide-shadow-right, .swiper-3d .swiper-slide-shadow-top, .swiper-3d .swiper-slide-shadow-bottom, .swiper-3d .swiper-cube-shadow { transform-style: preserve-3d; } .swiper-3d .swiper-slide-shadow, .swiper-3d .swiper-slide-shadow-left, .swiper-3d .swiper-slide-shadow-right, .swiper-3d .swiper-slide-shadow-top, .swiper-3d .swiper-slide-shadow-bottom { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; z-index: 10; } .swiper-3d .swiper-slide-shadow { background: rgba(0, 0, 0, 0.15); } .swiper-3d .swiper-slide-shadow-left { background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-3d .swiper-slide-shadow-right { background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-3d .swiper-slide-shadow-top { background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } .swiper-3d .swiper-slide-shadow-bottom { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); } /* CSS Mode */ .swiper-css-mode > .swiper-wrapper { overflow: auto; scrollbar-width: none; /* For Firefox */ -ms-overflow-style: none; /* For Internet Explorer and Edge */ } .swiper-css-mode > .swiper-wrapper::-webkit-scrollbar { display: none; } .swiper-css-mode > .swiper-wrapper > .swiper-slide { scroll-snap-align: start start; } .swiper-horizontal.swiper-css-mode > .swiper-wrapper { scroll-snap-type: x mandatory; } .swiper-vertical.swiper-css-mode > .swiper-wrapper { scroll-snap-type: y mandatory; } .swiper-centered > .swiper-wrapper::before { content: ''; flex-shrink: 0; order: 9999; } .swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child { margin-inline-start: var(--swiper-centered-offset-before); } .swiper-centered.swiper-horizontal > .swiper-wrapper::before { height: 100%; min-height: 1px; width: var(--swiper-centered-offset-after); } .swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child { margin-block-start: var(--swiper-centered-offset-before); } .swiper-centered.swiper-vertical > .swiper-wrapper::before { width: 100%; min-width: 1px; height: var(--swiper-centered-offset-after); } .swiper-centered > .swiper-wrapper > .swiper-slide { scroll-snap-align: center center; } .swiper-virtual.swiper-css-mode .swiper-wrapper::after { content: ''; position: absolute; left: 0; top: 0; pointer-events: none; } .swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after { height: 1px; width: var(--swiper-virtual-size); } .swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after { width: 1px; height: var(--swiper-virtual-size); } :root { --swiper-navigation-size: 44px; /* --swiper-navigation-color: var(--swiper-theme-color); */ } .swiper-button-prev, .swiper-button-next { position: absolute; top: 50%; width: calc(var(--swiper-navigation-size) / 44 * 27); height: var(--swiper-navigation-size); margin-top: calc(0px - (var(--swiper-navigation-size) / 2)); z-index: 10; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--swiper-navigation-color, var(--swiper-theme-color)); } .swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled { opacity: 0.35; cursor: auto; pointer-events: none; } .swiper-button-prev:after, .swiper-button-next:after { font-family: swiper-icons; font-size: var(--swiper-navigation-size); text-transform: none !important; letter-spacing: 0; text-transform: none; font-variant: initial; line-height: 1; } .swiper-button-prev, .swiper-rtl .swiper-button-next { left: 10px; right: auto; } .swiper-button-prev:after, .swiper-rtl .swiper-button-next:after { content: 'prev'; } .swiper-button-next, .swiper-rtl .swiper-button-prev { right: 10px; left: auto; } .swiper-button-next:after, .swiper-rtl .swiper-button-prev:after { content: 'next'; } .swiper-button-lock { display: none; } :root { /* --swiper-pagination-color: var(--swiper-theme-color); --swiper-pagination-bullet-size: 8px; --swiper-pagination-bullet-width: 8px; --swiper-pagination-bullet-height: 8px; --swiper-pagination-bullet-inactive-color: #000; --swiper-pagination-bullet-inactive-opacity: 0.2; --swiper-pagination-bullet-opacity: 1; --swiper-pagination-bullet-horizontal-gap: 4px; --swiper-pagination-bullet-vertical-gap: 6px; */ } .swiper-pagination { position: absolute; text-align: center; transition: 300ms opacity; transform: translate3d(0, 0, 0); z-index: 10; } .swiper-pagination.swiper-pagination-hidden { opacity: 0; } /* Common Styles */ .swiper-pagination-fraction, .swiper-pagination-custom, .swiper-horizontal > .swiper-pagination-bullets, .swiper-pagination-bullets.swiper-pagination-horizontal { bottom: 10px; left: 0; width: 100%; } /* Bullets */ .swiper-pagination-bullets-dynamic { overflow: hidden; font-size: 0; } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { transform: scale(0.33); position: relative; } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { transform: scale(1); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { transform: scale(1); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { transform: scale(0.66); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { transform: scale(0.33); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { transform: scale(0.66); } .swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { transform: scale(0.33); } .swiper-pagination-bullet { width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px)); height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px)); display: inline-block; border-radius: 50%; background: var(--swiper-pagination-bullet-inactive-color, #000); opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2); } button.swiper-pagination-bullet { border: none; margin: 0; padding: 0; box-shadow: none; -webkit-appearance: none; appearance: none; } .swiper-pagination-clickable .swiper-pagination-bullet { cursor: pointer; } .swiper-pagination-bullet:only-child { display: none !important; } .swiper-pagination-bullet-active { opacity: var(--swiper-pagination-bullet-opacity, 1); background: var(--swiper-pagination-color, var(--swiper-theme-color)); } .swiper-vertical > .swiper-pagination-bullets, .swiper-pagination-vertical.swiper-pagination-bullets { right: 10px; top: 50%; transform: translate3d(0px, -50%, 0); } .swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet, .swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet { margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0; display: block; } .swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic, .swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { top: 50%; transform: translateY(-50%); width: 8px; } .swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet, .swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { display: inline-block; transition: 200ms transform, 200ms top; } .swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet, .swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet { margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px); } .swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic, .swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { left: 50%; transform: translateX(-50%); white-space: nowrap; } .swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet, .swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { transition: 200ms transform, 200ms left; } .swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet { transition: 200ms transform, 200ms right; } /* Progress */ .swiper-pagination-progressbar { background: rgba(0, 0, 0, 0.25); position: absolute; } .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { background: var(--swiper-pagination-color, var(--swiper-theme-color)); position: absolute; left: 0; top: 0; width: 100%; height: 100%; transform: scale(0); transform-origin: left top; } .swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { transform-origin: right top; } .swiper-horizontal > .swiper-pagination-progressbar, .swiper-pagination-progressbar.swiper-pagination-horizontal, .swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, .swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite { width: 100%; height: 4px; left: 0; top: 0; } .swiper-vertical > .swiper-pagination-progressbar, .swiper-pagination-progressbar.swiper-pagination-vertical, .swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, .swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite { width: 4px; height: 100%; left: 0; top: 0; } .swiper-pagination-lock { display: none; } /* Scrollbar */ .swiper-scrollbar { border-radius: 10px; position: relative; -ms-touch-action: none; background: rgba(0, 0, 0, 0.1); } .swiper-horizontal > .swiper-scrollbar { position: absolute; left: 1%; bottom: 3px; z-index: 50; height: 5px; width: 98%; } .swiper-vertical > .swiper-scrollbar { position: absolute; right: 3px; top: 1%; z-index: 50; width: 5px; height: 98%; } .swiper-scrollbar-drag { height: 100%; width: 100%; position: relative; background: rgba(0, 0, 0, 0.5); border-radius: 10px; left: 0; top: 0; } .swiper-scrollbar-cursor-drag { cursor: move; } .swiper-scrollbar-lock { display: none; } .swiper-zoom-container { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; text-align: center; } .swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas { max-width: 100%; max-height: 100%; object-fit: contain; } .swiper-slide-zoomed { cursor: move; } /* Preloader */ :root { /* --swiper-preloader-color: var(--swiper-theme-color); */ } .swiper-lazy-preloader { width: 42px; height: 42px; position: absolute; left: 50%; top: 50%; margin-left: -21px; margin-top: -21px; z-index: 10; transform-origin: 50%; animation: swiper-preloader-spin 1s infinite linear; box-sizing: border-box; border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); border-radius: 50%; border-top-color: transparent; } .swiper-lazy-preloader-white { --swiper-preloader-color: #fff; } .swiper-lazy-preloader-black { --swiper-preloader-color: #000; } @keyframes swiper-preloader-spin { 100% { transform: rotate(360deg); } } /* a11y */ .swiper .swiper-notification { position: absolute; left: 0; top: 0; pointer-events: none; opacity: 0; z-index: -1000; } .swiper-free-mode > .swiper-wrapper { transition-timing-function: ease-out; margin: 0 auto; } .swiper-grid > .swiper-wrapper { flex-wrap: wrap; } .swiper-grid-column > .swiper-wrapper { flex-wrap: wrap; flex-direction: column; } .swiper-fade.swiper-free-mode .swiper-slide { transition-timing-function: ease-out; } .swiper-fade .swiper-slide { pointer-events: none; transition-property: opacity; } .swiper-fade .swiper-slide .swiper-slide { pointer-events: none; } .swiper-fade .swiper-slide-active, .swiper-fade .swiper-slide-active .swiper-slide-active { pointer-events: auto; } .swiper-cube { overflow: visible; } .swiper-cube .swiper-slide { pointer-events: none; -webkit-backface-visibility: hidden; backface-visibility: hidden; z-index: 1; visibility: hidden; transform-origin: 0 0; width: 100%; height: 100%; } .swiper-cube .swiper-slide .swiper-slide { pointer-events: none; } .swiper-cube.swiper-rtl .swiper-slide { transform-origin: 100% 0; } .swiper-cube .swiper-slide-active, .swiper-cube .swiper-slide-active .swiper-slide-active { pointer-events: auto; } .swiper-cube .swiper-slide-active, .swiper-cube .swiper-slide-next, .swiper-cube .swiper-slide-prev, .swiper-cube .swiper-slide-next + .swiper-slide { pointer-events: auto; visibility: visible; } .swiper-cube .swiper-slide-shadow-top, .swiper-cube .swiper-slide-shadow-bottom, .swiper-cube .swiper-slide-shadow-left, .swiper-cube .swiper-slide-shadow-right { z-index: 0; -webkit-backface-visibility: hidden; backface-visibility: hidden; } .swiper-cube .swiper-cube-shadow { position: absolute; left: 0; bottom: 0px; width: 100%; height: 100%; opacity: 0.6; z-index: 0; } .swiper-cube .swiper-cube-shadow:before { content: ''; background: #000; position: absolute; left: 0; top: 0; bottom: 0; right: 0; filter: blur(50px); } .swiper-flip { overflow: visible; } .swiper-flip .swiper-slide { pointer-events: none; -webkit-backface-visibility: hidden; backface-visibility: hidden; z-index: 1; } .swiper-flip .swiper-slide .swiper-slide { pointer-events: none; } .swiper-flip .swiper-slide-active, .swiper-flip .swiper-slide-active .swiper-slide-active { pointer-events: auto; } .swiper-flip .swiper-slide-shadow-top, .swiper-flip .swiper-slide-shadow-bottom, .swiper-flip .swiper-slide-shadow-left, .swiper-flip .swiper-slide-shadow-right { z-index: 0; -webkit-backface-visibility: hidden; backface-visibility: hidden; } .swiper-creative .swiper-slide { -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; transition-property: transform, opacity, height; } .swiper-cards { overflow: visible; } .swiper-cards .swiper-slide { transform-origin: center bottom; -webkit-backface-visibility: hidden; backface-visibility: hidden; overflow: hidden; }assets/css/style.min.css000064400000060607147600374750011320 0ustar00@charset "UTF-8";.item--holder-inner{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;border-radius:inherit}.item--holder-inner.is__grid{flex-wrap:wrap;flex-direction:column}[id*='hester-']:not(.hester_section_info) .item--holder-inner a:not(:hover,:focus){color:var(--hester-secondary);text-decoration:none}.item--holder-inner a:not(.hester-btn):hover,.using-keyboard .item--holder-inner a:not(.hester-btn):focus{color:var(--hester-primary)}.item--icon{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:0;min-width:2.75rem;min-height:2.75rem;line-height:1;color:var(--hester-secondary);-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.item--icon .icon > *{vertical-align:middle}html:not(.rtl) .item--holder-inner:not(.is__grid) .item--icon{margin-right:1.8rem}.rtl .item--holder-inner:not(.is__grid) .item--icon{margin-left:1.8rem}.item--holder-inner.is__grid .item--icon{margin-bottom:2rem}.item--holder-inner.is__grid .item--content{width:100%;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.item--holder-inner .description:not(:first-child){margin-top:1rem}.item--content .title{margin-top:0;-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.item--content .description{color:var(--hester-secondary_38);-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}body .item--content :last-child:is(.title),body .item--content :last-child:is(.description),body .item--content :first-child:is(.title),body .item--content :first-child:is(.description){margin-bottom:0}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:0}.swiper-pagination-bullet{position:relative;width:.6rem;height:.6rem;vertical-align:middle;z-index:0}.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet{width:1.2rem;height:1.2rem;margin:auto;background-color:var(--hester-secondary);opacity:.25;-webkit-transition:var(--hester-transition-primary-slow);transition:var(--hester-transition-primary-slow)}.starter__bullet-s1.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child){margin-left:1.7rem}.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet::before{content:"";width:1.7rem;height:1.7rem;border:.2rem solid transparent;position:absolute;top:0;right:0;bottom:0;margin:auto;border-radius:inherit;-webkit-transition:var(--hester-transition-primary-slow);transition:var(--hester-transition-primary-slow);left:-.46rem}.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active{background-color:var(--hester-primary);width:.8rem;height:.8rem;opacity:1}.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active::before{border-color:var(--hester-primary);width:1.8rem;height:1.8rem}.starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet{background-color:#bebebe;opacity:.4}.starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active{background-color:var(--hester-white);opacity:1}.starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active::before{border-color:var(--hester-white)}.starter__nav{display:flex;align-items:center;justify-content:center;margin:6rem 0 0;padding-bottom:2.6rem}.starter__nav.swiper-nav,.starter__slider.swiper-vertical .starter__nav.swiper-nav{display:none}@media (min-width:48.938em){.starter__nav.swiper-nav{display:flex}}.starter__nav [class^='swiper-button-']::after{display:none}.starter__nav [class^='swiper-button-']{width:5rem;height:5rem;border-radius:10rem;font-size:2.2rem;position:relative;top:0;right:0;left:0;margin-top:0;display:inline-flex;color:var(--hester-secondary);background-color:var(--hester-white);-webkit-transition:var(--hester-transition-primary-slow);transition:var(--hester-transition-primary-slow)}.starter__nav [class^='swiper-button-']:not(:first-child){margin-left:2rem}.starter__nav [class^='swiper-button-']:hover,.using-keyboard .starter__nav [class^='swiper-button-']:focus{box-shadow:0 .8rem 2.8rem 0 rgba(43,58,85,0.2)}.hester-sticky-header.hester-tsp-header #hester-header,.hester-sticky-header.hester-tsp-header .hester-header-widgets a:not(.hester-btn),.hester-sticky-header.hester-tsp-header .hester-logo a,.hester-sticky-header.hester-tsp-header .hester-hamburger,.hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li > a{color:inherit}.hester-sticky-header.hester-tsp-header .hester-header-widgets a:not(.hester-btn):hover,.hester-sticky-header.hester-tsp-header .hester-logo a:hover,.hester-sticky-header.hester-tsp-header .hester-hamburger:hover,.hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li.hovered > a,.hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li.current_page_item > a,.hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li > a:hover{color:var(--hester-primary)}.is-slider-bottom-point .starter__slider{clip-path:polygon(0 0,100% 0,100% 90%,50% 100%,0 90%)}.is-slider-radius-right .starter__slider{overflow:hidden;border-radius:0 0 15rem 0}.starter__slider-section,.starter__slider .swiper-slide{position:relative}.starter__slider.swiper-vertical .swiper-slide{display:flex;justify-content:center;align-items:center}.starter__slider-wrapper{width:100%;height:100%;position:relative;z-index:0}.starter__slider-wrapper[class*='is-overlay-']::before{z-index:1}.starter__slider-wrapper.is-overlay-inherit::before{opacity:1}.swiper-effect01 .starter__slider-image{transform:scale(1);background-position:center;transition:transform 7000ms ease}.starter__slider-image img{width:100%;object-fit:cover}.swiper-effect01 .swiper-slide-active .starter__slider-image{transform:scale(1.15)}.swiper-lazy-loading{opacity:0}.swiper-kenburn .swiper-slide img{transform:scale(1.2);transition:transform 3s linear;max-width:100%;width:100%}.swiper-kenburn .swiper-slide.swiper-slide-duplicate-active img,.swiper-kenburn .swiper-slide.swiper-slide.swiper-slide-active img{transform:scale(1)}.starter__slider-fluid{position:absolute;top:0;right:0;width:100%;height:100%;z-index:1}.starter__grider{display:table;overflow:hidden;width:100%;height:100%}.starter__grider-wrap{display:table-cell;box-sizing:border-box;vertical-align:middle}.starter__grider-wrap .hester-flex-row{-webkit-box-align:center;-ms-flex-align:center;align-items:center;justify-content:space-between}.starter__slider-content{max-width:102rem;display:inline-block;color:var(--hester-white)}.is-starter-slider-s1 .starter__slider .starter__slider-subtitle{color:var(--hester-white);background-color:var(--hester-primary);padding:.2rem 1.7rem;margin-bottom:1rem}.is-starter-slider-s2 .starter__slider-subtitle{position:relative;z-index:0}.is-starter-slider-s2 .text-md-center .starter__slider-subtitle{padding:0 6.8rem}.is-starter-slider-s2 .text-md-start .starter__slider-subtitle{padding-left:6.8rem}.is-starter-slider-s2 .text-md-end .starter__slider-subtitle{padding-right:6.8rem}.is-starter-slider-s2 .starter__slider-subtitle::after,.is-starter-slider-s2 .starter__slider-subtitle::before{content:'';position:absolute;top:0;bottom:0;width:5rem;height:.2rem;margin:auto;z-index:0;opacity:0;visibility:hidden;background-color:var(--hester-white)}.is-starter-slider-s2 .text-md-end .starter__slider-subtitle::after,.is-starter-slider-s2 .text-md-start .starter__slider-subtitle::before,.is-starter-slider-s2 .text-md-center .starter__slider-subtitle::after,.is-starter-slider-s2 .text-md-center .starter__slider-subtitle::before{opacity:1;visibility:visible}.is-starter-slider-s2 .starter__slider-subtitle::before{left:0}.is-starter-slider-s2 .starter__slider-subtitle::after{right:0}.starter__slider .starter__slider-subtitle{display:inline-block;margin-bottom:.65rem;letter-spacing:.02rem;opacity:0;transform:translateY(11rem);transition-delay:1000ms;transition:transform 2000ms ease,opacity 2000ms ease}.starter__slider .starter__slider-title{margin:0;opacity:0;color:inherit;visibility:hidden;transform:translateY(11rem);transition-delay:1000ms;transition:transform 2000ms ease,opacity 2000ms ease}.starter__slider-description{margin:0;font-size:1.65rem;opacity:.7;margin-top:.75rem;margin-bottom:0;opacity:0;transform:translateY(10rem);transition-delay:2500ms;transition:transform 2000ms ease,opacity 2000ms ease,color 500ms ease,background-color 500ms ease}.starter__slider-btn{opacity:0;margin-top:1.35rem;transform:translateY(10rem);transition-delay:2500ms;transition:transform 2000ms ease,opacity 2000ms ease,color 500ms ease,background-color 500ms ease}.starter__slider-btn .hester-btn:hover,.using-keyboard .starter__slider-btn .hester-btn:focus{box-shadow:0 6px 20px rgba(0,0,0,0.16)}.starter__slider-btn .hester-btn:not(:first-child){margin-left:.75rem}.starter__slider .swiper-slide-active .starter__slider-subtitle,.starter__slider .swiper-slide-active .starter__slider-btn,.starter__slider .swiper-slide-active .starter__slider-title,.starter__slider .swiper-slide-active .starter__slider-description{visibility:visible;opacity:1;transform:translateY(0) translateX(0)}.starter__slider-content-img{width:100%;height:100%;display:inline-block;vertical-align:middle}.starter__slider-content-img p{margin:0}.starter__slider .starter__nav{padding:0;margin:0}.starter__slider .starter__nav [class^='swiper-button-']{position:absolute;top:-2.5rem;bottom:0;margin:auto 0;color:var(--hester-white);background-color:rgba(190,190,190,0.30);opacity:0;visibility:hidden;box-shadow:0 .8rem 2.5rem 0 rgba(43,58,85,0.2)}.starter__slider [class^='swiper-button-']:hover,.using-keyboard .starter__slider [class^='swiper-button-']:focus{background-color:var(--hester-primary)}.starter__slider .swiper-button-prev,.starter__slider.swiper-rtl .swiper-button-next{right:auto;left:10rem}.starter__slider .swiper-button-next,.starter__slider.swiper-rtl .swiper-button-prev{right:10rem;left:auto}.starter__slider:hover .swiper-button-prev,.starter__slider.swiper-rtl:hover .swiper-button-next,.starter__slider:hover .swiper-button-next,.starter__slider.swiper-rtl:hover .swiper-button-prev{opacity:1;visibility:visible}.starter__slider:hover .swiper-button-prev,.starter__slider.swiper-rtl:hover .swiper-button-next{left:4rem}.starter__slider:hover .swiper-button-next,.starter__slider.swiper-rtl:hover .swiper-button-prev{right:4rem}.starter__slider.swiper-vertical >.swiper-pagination-bullets{top:43.35%;right:3rem}.starter__slider.swiper-horizontal>.swiper-pagination-bullets{bottom:.4rem}.starter__slider .text-md-start .starter__slider-start{text-align:left}.starter__slider .text-md-center .starter__slider-start{text-align:center}.starter__slider .text-md-end .starter__slider-start{text-align:right;margin-left:auto;order:1}.starter__slider .text-md-center .hester-flex-row .starter__slider-start,.starter__slider .text-md-center .hester-flex-row .starter__slider-end{-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.hester-tsp-header .starter__grider-wrap{padding-top:5.5rem}@media (min-width:60.063em){.is-slider-radius-right .starter__slider{border-radius:0 0 26rem 0}.starter__slider-nextcomeup .starter__grider-wrap{padding-bottom:10rem}.starter__slider-subtitle{margin-bottom:.5rem}.starter__slider-btn{margin-top:3.6rem}.starter__slider-btn .hester-btn:not(:first-child){margin-left:2rem}.starter__slider-description{font-size:1.8rem;margin-top:1.8rem}.starter__slider.swiper-horizontal>.swiper-pagination-bullets{bottom:12.6rem}.starter__slider .text-md-start .starter__slider-content-img{text-align:right}.starter__slider .text-md-end .starter__slider-content-img{text-align:left}.starter__slider .starter__slider-end.mt-md-auto{margin-top:auto}.starter__slider.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child){margin-top:1.7rem}.starter__slider.swiper-vertical >.swiper-pagination-bullets .swiper-pagination-bullet{display:block;margin:auto}}@media (max-width:60em){.starter__slider.swiper-vertical >.swiper-pagination-bullets .swiper-pagination-bullet{display:inline-block}.starter__slider.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child){margin-left:1.7rem}.starter__slider.swiper-vertical >.swiper-pagination-bullets{top:88%;right:0;left:0}.is-slider-radius-right .starter__slider{border-radius:0 0 3rem 0}}@media (max-width:48.875em){.starter__slider.swiper-vertical >.swiper-pagination-bullets{top:92%}}.starter__slider-content-img div.wpforms-container-full{padding:2.5rem;background-color:var(--hester-white);border-radius:var(--hester-normal-radius);text-align:left}body div.wpforms-container-full form.wpforms-form input,body div.wpforms-container-full form.wpforms-form select,body div.wpforms-container-full form.wpforms-form .wpforms-field-row{max-width:100%!important}div.wpforms-container-full form.wpforms-form input[type=checkbox],div.wpforms-container-full form.wpforms-form input[type=radio]{height:2rem;margin:0 10px 0 3px;vertical-align:middle;position:relative}div.wpforms-container-full form.wpforms-form input[type=checkbox]:checked,div.wpforms-container-full form.wpforms-form input[type=radio]:checked{background-color:var(--hester-primary)}.starter__slider-content-img .wpcf7,.hester_section_extra .wp-block-column .wpcf7{padding:2.2rem;text-align:left;background-color:var(--hester-white);max-width:40.5rem;border-radius:var(--hester-normal-radius)}.starter__slider-content-img .wpcf7 textarea{min-height:10rem;height:10rem}.wpcf7 p,.wpcf7 label{margin-bottom:0}.wpcf7 label{width:100%}.wpcf7 div+p{margin-top:0}.hester_section_info{position:relative;z-index:1}.hester_section_info .hester_bg{padding-top:5rem}.starter__contact-item,.starter__info-item{position:relative;background-color:var(--hester-white);overflow:hidden;z-index:0}.starter__contact-item{border-radius:var(--hester-ten-radius)}.starter__info-item{height:100%;padding:2.7rem 2.5rem 2.8rem;transition:var(--hester-transition-primary)}.starter__info-item:after{content:'';position:absolute;bottom:0;left:0;right:0;width:0;height:.5rem;opacity:0;visibility:hidden;margin:0 auto;background-color:var(--hester-primary);transition:var(--hester-transition-primary)}.starter__info-item:hover::after,.using-keyboard .starter__info-item:focus-within::after,.starter__info-item.active::after{opacity:1;visibility:visible;width:100%}.starter__info-wrapper .item--icon{width:5.5rem;height:5.5rem;font-size:5rem;color:var(--hester-primary)}.is-info-init-s .starter__info-item{padding:0;overflow:visible}.starter__slider-nextcomeup + .is-info-init-s .starter__info-item{padding:2.6rem;border-radius:1rem;box-shadow:0 1rem 1.75rem 0 rgba(64,64,64,0.1)}.is-info-init-s .starter__info-item:after{display:none}.is-info-init-s .item--holder-inner .item--icon{color:var(--hester-white);background-color:var(--hester-primary);background-image:linear-gradient(45deg,rgba(255,255,255,0.25),rgba(255,255,255,0));box-shadow:0 1.8rem 4rem rgba(0,0,0,0.2)}.is-info-init-s .item--holder-inner .item--icon,.is-info-init-s0 .item--holder-inner .item--icon{width:7.6rem;height:7.6rem;font-size:3.6rem;border-radius:100%}.is-info-init-s .item--holder-inner.is__grid .item--icon,.is-info-init-s0 .item--holder-inner.is__grid .item--icon{margin-bottom:2.3rem}.is-info-init-s .starter__info-item .item--holder-inner.is__list,.is-info-init-s0 .starter__info-item .item--holder-inner.is__list{padding-bottom:.75rem}.is-info-init-s0 .starter__info-item{padding:5rem 1.94rem 3.6rem;box-shadow:0 1rem 3rem rgba(0,0,0,0.06);border-radius:1rem}.is-info-init-s0 .item--holder-inner.is__grid{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;text-align:center}.is-info-init-s0 .item--holder-inner .item--icon{background-color:var(--hester-primary_09)}@media (min-width: 37.5em) and (max-width: 60em){.starter__info-item{padding:2rem 2.2rem 2.1rem}}@media (min-width: 48.938em){.starter__slider-nextcomeup+#hester-info{margin-top:-9.5rem}.starter__slider-nextcomeup+#hester-info .hester_bg{padding:0;padding-bottom:1rem}}@media (min-width: 48.938em) and (max-width: 60em){.starter__slider-nextcomeup+#hester-info{margin-top:-3.2rem}}.readmore{margin-top:.8rem}.readmore a{display:inline-block;position:relative;z-index:0}.readmore span{margin-right:.7rem;display:inline-block}.readmore span:empty{display:none}.readmore .more-icon-main{font-size:1.3rem;transition:.35s ease all}.readmore .more-icon-hover{position:absolute;top:50%;right:0;transform:translate(-2rem,-50%);transition:.35s ease all;opacity:0}.readmore:hover .more-icon-main{opacity:0;transform:translateX(2rem)}.readmore:hover .more-icon-hover{transform:translate(0.3rem,-50%);opacity:1}.hester_section_services{overflow:hidden}.starter__services-item{height:100%;position:relative;z-index:0}.is-services-init-s1 .starter__services-item .item--holder{margin-top:3.4rem;position:relative;z-index:0;border-radius:var(--hester-normal-radius);-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary);box-shadow:0 1rem 1.75rem 0 rgba(64,64,64,0.1)}.is-services-init-s1 .starter__services-item .item--holder .readmore a,.is-services-init-s1 .starter__services-item .item--holder,.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content:before{border:.1rem solid rgba(190,190,190,0.17)}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon{width:8.6rem;height:8.6rem;border-radius:inherit;position:absolute;top:-3.5rem;right:0;left:0;margin:0 auto;background-color:var(--hester-white);-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon .icon{width:6.8rem;height:6.8rem;font-size:3.3rem;line-height:6.3rem;background-image:linear-gradient(45deg,rgba(255,255,255,0.25),rgba(255,255,255,0));background-color:var(--hester-primary);color:var(--hester-white);border-radius:inherit;text-align:center;display:inline-block}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon .icon *{-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon .icon > *{transform:rotate(-45deg)}.is-services-init-s1 .starter__services-item .item--holder-inner .item--content{width:100%;text-align:center;padding:4.4rem 3.8rem;border-radius:inherit;background-color:var(--hester-white)}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content{padding-top:7rem}@media (min-width: 37.5em) and (max-width: 60em){.is-services-init-s1 .starter__services-item .item--holder-inner .item--content{padding:4rem 2.5rem}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content{padding-top:6rem}}.is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content:before{content:"";position:absolute;top:-3.6rem;right:0;left:0;width:8.8rem;height:8.8rem;margin:0 auto;display:inline-block;z-index:-1;border-radius:inherit;-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon+.item--content:before,.using-keyboard .is-services-init-s1 .starter__services-item:focus-within .item--holder-inner.is__grid .item--icon+.item--content:before,.is-services-init-s1 .starter__services-item.active .item--holder-inner.is__grid .item--icon+.item--content:before,.is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon,.using-keyboard .is-services-init-s1 .starter__services-item:focus-within .item--holder-inner.is__grid .item--icon,.is-services-init-s1 .starter__services-item.active .item--holder-inner.is__grid .item--icon{transform:rotate(45deg)}.is-services-init-s1 .starter__services-item .item--holder .readmore{position:absolute;left:50%;bottom:-2.25rem;-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}.is-services-init-s1 .starter__services-item .item--holder .readmore a{display:block;min-width:4.8rem;min-height:1.8rem;line-height:1.8rem;padding:1.4rem;font-size:1.6rem;text-align:center;border-radius:var(--hester-full-radius);color:var(--hester-gray-medium);background-color:var(--hester-white);box-shadow:0 1.8rem 3.2rem rgba(64,64,64,0.1)}.is-services-init-s1 .starter__services-item .item--holder .readmore a i{font-size:107%;line-height:1.7rem;vertical-align:-.1rem}.using-keyboard .is-services-init-s1 .starter__services-item .item--holder .readmore a:focus,.is-services-init-s1 .starter__services-item .item--holder .readmore a:hover{color:var(--hester-primary);border-color:var(--hester-primary);box-shadow:0 1.7rem 1.75rem 0 rgba(64,64,64,0.1)}.hester_section_features{overflow:hidden;position:relative;z-index:0}.hester_section_features .hester_bg::before{background-image:linear-gradient(45deg,rgba(255,255,255,0) 0%,rgba(255,255,255,0.2) 100%)}.hester_section_features .starter__heading-title .sub-title{color:var(--hester-white)}.is-section-heading-init-s1 .hester_section_features .starter__heading-title .title::before,.is-section-heading-init-s1 .hester_section_features .starter__heading-title .title::after{background-color:var(--hester-white)}.hester_section_features .starter__heading-title > p{margin-bottom:0}@media (min-width: 37.5em) and (max-width: 48.875em){.is-features-init-s1 .starter__features-wrapper{margin-bottom:3rem}}@media (min-width: 37.5em){.starter__features-wrapper [class^='col-']:nth-child(even){transform:translateY(3rem)}}.starter__features-item{position:relative;padding:2.8rem 2.6rem;border-radius:.8rem;background-color:var(--hester-white);-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.is-features-init-s1 .starter__features-item:before{content:'';position:absolute;top:-1rem;right:1rem;width:100%;height:100%;opacity:0;z-index:-1;background-color:var(--hester-white);border-radius:inherit;-webkit-transition:var(--hester-transition-primary);transition:var(--hester-transition-primary)}.is-features-init-s1 .starter__features-item:hover:before,.using-keyboard .is-features-init-s1 .starter__features-item:focus-within:before{opacity:.5;top:1rem;right:-1rem}.starter__features-item .item--icon{min-width:4rem;min-height:4rem;font-size:4rem;color:var(--hester-primary)}.is-features-init-s1 .starter__features-item.active,.is-features-init-s1 .starter__features-item:hover,.using-keyboard .is-features-init-s1 .starter__features-item:focus-within{box-shadow:1.09rem 2.138rem 5rem 0 rgba(64,64,64,0.16)}html:not(.rtl) .starter__features-item .item--holder-inner:not(.is__grid) .item--icon{margin-right:2.5rem}.rtl .starter__features-item .item--holder-inner:not(.is__grid) .item--icon{margin-left:2.5rem}.starter__features-item .item--holder-inner{-ms-flex-align:center;align-items:center}.is-features-init-s1 .starter__features-item{border-radius:.1rem;box-shadow:0 0 7rem 0 rgba(64,64,64,0.08)}@media (min-width: 48.938em){.starter__slider-nextcomeup+#hester-info .hester_bg{padding-bottom:10rem}}.hester_section_blog+.hester_section_services .hester_bg,.hester_section_blog+.hester_section_info .hester_bg,.hester_section_info+.hester_section_blog .hester_bg,.hester_section_info+.hester_section_services .hester_bg,.hester_section_services+.hester_section_blog .hester_bg,.hester_section_services+.hester_section_info .hester_bg{padding-top:0}.customize-partial-edit-shortcuts-shown .hester_section_blog+.hester_section_services .hester_bg,.customize-partial-edit-shortcuts-shown .hester_section_blog+.hester_section_info .hester_bg,.customize-partial-edit-shortcuts-shown .hester_section_info+.hester_section_blog .hester_bg,.customize-partial-edit-shortcuts-shown .hester_section_info+.hester_section_services .hester_bg,.customize-partial-edit-shortcuts-shown .hester_section_services+.hester_section_blog .hester_bg,.customize-partial-edit-shortcuts-shown .hester_section_services+.hester_section_info .hester_bg{padding-top:5rem}.hester_section_extra .hester_bg,.hester_section_products .hester_bg{background-color:var(--hester-primary_04)}.hester_section_products .hester_bg .woocommerce ul.products li.product{background-color:var(--hester-white)}@media only screen and (max-width: 768px){.hester_section_info .hester_bg{padding-top:6rem;padding-bottom:6rem}}assets/css/style.css000064400000074276147600374750010545 0ustar00@charset "UTF-8"; /* Common Card Holder ------------------------------------ */ .item--holder-inner { display: -ms-flexbox; display: flex; -ms-flex-align: start; align-items: flex-start; border-radius: inherit; } .item--holder-inner.is__grid { flex-wrap: wrap; flex-direction: column; } [id*='hester-']:not(.hester_section_info) .item--holder-inner a:not(:hover,:focus) { color: var(--hester-secondary); text-decoration: none; } .item--holder-inner a:not(.hester-btn):hover, .using-keyboard .item--holder-inner a:not(.hester-btn):focus { color: var(--hester-primary); } .item--icon { display: -ms-flexbox; display: flex; -ms-flex-align: center; align-items: center; -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; -ms-flex-negative: 0; flex-shrink: 0; position: relative; z-index: 0; min-width: 2.75rem; min-height: 2.75rem; line-height: 1; color: var(--hester-secondary); -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .item--icon .icon > * { vertical-align: middle; /*-webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary);*/ } html:not(.rtl) .item--holder-inner:not(.is__grid) .item--icon { margin-right: 1.8rem; } .rtl .item--holder-inner:not(.is__grid) .item--icon { margin-left: 1.8rem; } .item--holder-inner.is__grid .item--icon { margin-bottom: 2rem; } .item--holder-inner.is__grid .item--content { width: 100%; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; } .item--holder-inner .description:not(:first-child) { margin-top: 1rem; } .item--content .title { margin-top: 0; -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .item--content .description { color: var(--hester-secondary_38); -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } body .item--content *:last-child:is(.title), body .item--content *:last-child:is(.description), body .item--content *:first-child:is(.title), body .item--content *:first-child:is(.description) { margin-bottom: 0; } /* Sliders Pagination Bullet ------------------------- */ .swiper-horizontal>.swiper-pagination-bullets, .swiper-pagination-custom, .swiper-pagination-fraction { bottom: 0; } .swiper-pagination-bullet { position: relative; width: .6rem; height: .6rem; vertical-align: middle; z-index: 0; } .starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet { width: 1.2rem; height: 1.2rem; margin: auto; background-color: var(--hester-secondary); opacity: .25; -webkit-transition: var(--hester-transition-primary-slow); transition: var(--hester-transition-primary-slow); } .starter__bullet-s1.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child) { margin-left: 1.7rem; } .starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet::before { content: ""; width: 1.7rem; height: 1.7rem; border: .2rem solid transparent; position: absolute; top: 0; right: 0; bottom: 0; margin: auto; border-radius: inherit; -webkit-transition: var(--hester-transition-primary-slow); transition: var(--hester-transition-primary-slow); } .starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet::before { left: -.46rem; } .starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active { background-color: var(--hester-primary); width: .8rem; height: .8rem; opacity: 1; } .starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active::before { border-color: var(--hester-primary); width: 1.8rem; height: 1.8rem; } .starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet { background-color: #bebebe; opacity: .4; } .starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active { background-color: var(--hester-white); opacity: 1; } .starter__slider.starter__bullet-s1 >.swiper-pagination-bullets .swiper-pagination-bullet.swiper-pagination-bullet-active::before { border-color: var(--hester-white); } /* Sliders Nav Buttons ------------------------- */ .starter__nav { display: flex; align-items: center; justify-content: center; margin: 6rem 0 0; padding-bottom: 2.6rem; } .starter__nav.swiper-nav, .starter__slider.swiper-vertical .starter__nav.swiper-nav { display: none; } /* md > 783px */ @media (min-width:48.938em) { .starter__nav.swiper-nav { display: flex; } } .starter__nav [class^='swiper-button-']::after { display: none; } .starter__nav [class^='swiper-button-'] { width: 5rem; height: 5rem; border-radius: 10rem; font-size: 2.2rem; position: relative; top: 0; right: 0; left: 0; margin-top: 0; display: inline-flex; color: var(--hester-secondary); background-color: var(--hester-white); -webkit-transition: var(--hester-transition-primary-slow); transition: var(--hester-transition-primary-slow); } .starter__nav [class^='swiper-button-']:not(:first-child) { margin-left: 2rem; } .starter__nav [class^='swiper-button-']:hover, .using-keyboard .starter__nav [class^='swiper-button-']:focus { box-shadow: 0 .8rem 2.8rem 0 rgba(43, 58, 85, 0.2); } .hester-sticky-header.hester-tsp-header #hester-header, .hester-sticky-header.hester-tsp-header .hester-header-widgets a:not(.hester-btn), .hester-sticky-header.hester-tsp-header .hester-logo a, .hester-sticky-header.hester-tsp-header .hester-hamburger, .hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li > a { color: inherit; } .hester-sticky-header.hester-tsp-header .hester-header-widgets a:not(.hester-btn):hover, .hester-sticky-header.hester-tsp-header .hester-logo a:hover, .hester-sticky-header.hester-tsp-header .hester-hamburger:hover, .hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li.hovered > a, .hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li.current_page_item > a, .hester-sticky-header.hester-tsp-header #hester-header-inner .hester-nav > ul > li > a:hover { color: var(--hester-primary); } /* -------------------------------------------------------------------------- */ /* Starter Slider /* -------------------------------------------------------------------------- */ .is-slider-bottom-point .starter__slider { clip-path: polygon(0 0, 100% 0, 100% 90%, 50% 100%, 0 90%); } .is-slider-radius-right .starter__slider { overflow: hidden; border-radius: 0 0 15rem 0; } .starter__slider-section, .starter__slider .swiper-slide { position: relative; } .starter__slider.swiper-vertical .swiper-slide { display: flex; justify-content: center; align-items: center; } .starter__slider-wrapper { width: 100%; height: 100%; position: relative; z-index: 0; } .starter__slider-wrapper[class*='is-overlay-']::before { z-index: 1; } .starter__slider-wrapper.is-overlay-inherit::before { opacity: 1; } .swiper-effect01 .starter__slider-image { transform: scale(1); background-position: center; transition: transform 7000ms ease; } .starter__slider-image img { width: 100%; object-fit: cover; } .swiper-effect01 .swiper-slide-active .starter__slider-image { transform: scale(1.15); } .swiper-lazy-loading { opacity: 0; } .swiper-kenburn .swiper-slide img { transform: scale(1.2); transition: transform 3s linear; max-width: 100%; width: 100%; } .swiper-kenburn .swiper-slide.swiper-slide-duplicate-active img, .swiper-kenburn .swiper-slide.swiper-slide.swiper-slide-active img { transform: scale(1); } .starter__slider-fluid { position: absolute; top: 0; right: 0; width: 100%; height: 100%; z-index: 1; } .starter__grider { display: table; overflow: hidden; width: 100%; height: 100%; } .starter__grider-wrap { display: table-cell; box-sizing: border-box; vertical-align: middle; } .starter__grider-wrap .hester-flex-row { -webkit-box-align: center; -ms-flex-align: center; align-items: center; justify-content: space-between; } .starter__slider-content { max-width: 102rem; display: inline-block; color: var(--hester-white); } .is-starter-slider-s1 .starter__slider .starter__slider-subtitle { color: var(--hester-white); background-color: var(--hester-primary); padding: 0.2rem 1.7rem; margin-bottom: 1rem; } .is-starter-slider-s2 .starter__slider-subtitle { position: relative; z-index: 0; } .is-starter-slider-s2 .text-md-center .starter__slider-subtitle { padding: 0 6.8rem; } .is-starter-slider-s2 .text-md-start .starter__slider-subtitle { padding-left: 6.8rem; } .is-starter-slider-s2 .text-md-end .starter__slider-subtitle { padding-right: 6.8rem; } .is-starter-slider-s2 .starter__slider-subtitle::after, .is-starter-slider-s2 .starter__slider-subtitle::before { content: ''; position: absolute; top: 0; bottom: 0; width: 5rem; height: .2rem; margin: auto; z-index: 0; opacity: 0; visibility: hidden; background-color: var(--hester-white); } .is-starter-slider-s2 .text-md-end .starter__slider-subtitle::after, .is-starter-slider-s2 .text-md-start .starter__slider-subtitle::before, .is-starter-slider-s2 .text-md-center .starter__slider-subtitle::after, .is-starter-slider-s2 .text-md-center .starter__slider-subtitle::before { opacity: 1; visibility: visible; } .is-starter-slider-s2 .starter__slider-subtitle::before { left: 0; } .is-starter-slider-s2 .starter__slider-subtitle::after { right: 0; } .starter__slider .starter__slider-subtitle { display: inline-block; margin-bottom: .65rem; letter-spacing: .02rem; opacity: 0; transform: translateY(11rem); transition-delay: 1000ms; transition: transform 2000ms ease, opacity 2000ms ease; } .starter__slider .starter__slider-title { margin: 0; opacity: 0; color: inherit; visibility: hidden; transform: translateY(11rem); transition-delay: 1000ms; transition: transform 2000ms ease, opacity 2000ms ease; } .starter__slider-description { margin: 0; font-size: 1.65rem; opacity: 0.7; margin-top: .75rem; margin-bottom: 0; opacity: 0; transform: translateY(10rem); transition-delay: 2500ms; transition: transform 2000ms ease, opacity 2000ms ease, color 500ms ease, background-color 500ms ease; } .starter__slider-btn { opacity: 0; margin-top: 1.35rem; transform: translateY(10rem); transition-delay: 2500ms; transition: transform 2000ms ease, opacity 2000ms ease, color 500ms ease, background-color 500ms ease; } .starter__slider-btn .hester-btn:hover, .using-keyboard .starter__slider-btn .hester-btn:focus { box-shadow: 0 6px 20px rgba(0, 0, 0, 0.16); } .starter__slider-btn .hester-btn:not(:first-child) { margin-left: .75rem; } .starter__slider .swiper-slide-active .starter__slider-subtitle, .starter__slider .swiper-slide-active .starter__slider-btn, .starter__slider .swiper-slide-active .starter__slider-title, .starter__slider .swiper-slide-active .starter__slider-description { visibility: visible; opacity: 1; transform: translateY(0) translateX(0); } .starter__slider-content-img { width: 100%; height: 100%; /*padding: 2rem;*/ display: inline-block; vertical-align: middle; } .starter__slider-content-img p { margin: 0; } .starter__slider .starter__nav { padding: 0; margin: 0; } .starter__slider .starter__nav [class^='swiper-button-'] { position: absolute; top: -2.5rem; bottom: 0; margin: auto 0; color: var(--hester-white); background-color: rgba(190, 190, 190, 0.30); opacity: 0; visibility: hidden; box-shadow: 0 .8rem 2.5rem 0 rgba(43, 58, 85, 0.2); } .starter__slider [class^='swiper-button-']:hover, .using-keyboard .starter__slider [class^='swiper-button-']:focus { background-color: var(--hester-primary); } .starter__slider .swiper-button-prev, .starter__slider.swiper-rtl .swiper-button-next { right: auto; left: 10rem; } .starter__slider .swiper-button-next, .starter__slider.swiper-rtl .swiper-button-prev { right: 10rem; left: auto; } .starter__slider:hover .swiper-button-prev, .starter__slider.swiper-rtl:hover .swiper-button-next, .starter__slider:hover .swiper-button-next, .starter__slider.swiper-rtl:hover .swiper-button-prev { opacity: 1; visibility: visible; } .starter__slider:hover .swiper-button-prev, .starter__slider.swiper-rtl:hover .swiper-button-next { left: 4rem; } .starter__slider:hover .swiper-button-next, .starter__slider.swiper-rtl:hover .swiper-button-prev { right: 4rem; } .starter__slider.swiper-vertical >.swiper-pagination-bullets { top: 43.35%; right: 3rem; } .starter__slider.swiper-horizontal>.swiper-pagination-bullets { bottom: .4rem; } .starter__slider .text-md-start .starter__slider-start { text-align: left; } .starter__slider .text-md-center .starter__slider-start { text-align: center; } .starter__slider .text-md-end .starter__slider-start { text-align: right; margin-left: auto; order: 1; } .starter__slider .text-md-center .hester-flex-row .starter__slider-start, .starter__slider .text-md-center .hester-flex-row .starter__slider-end { -ms-flex-preferred-size: 100%; flex-basis: 100%; max-width: 100%; } .hester-tsp-header .starter__grider-wrap { padding-top: 5.5rem; } /* md > 961px */ @media (min-width:60.063em) { .is-slider-radius-right .starter__slider { border-radius: 0 0 26rem 0; } .starter__slider-nextcomeup .starter__grider-wrap { padding-bottom: 10rem; } .starter__slider-subtitle { margin-bottom: .5rem; } .starter__slider-btn { margin-top: 3.6rem; } .starter__slider-btn .hester-btn:not(:first-child) { margin-left: 2rem; } .starter__slider-description { font-size: 1.8rem; margin-top: 1.8rem; } .starter__slider.swiper-horizontal>.swiper-pagination-bullets { bottom: 12.6rem; } .starter__slider .text-md-start .starter__slider-content-img { text-align: right; } .starter__slider .text-md-end .starter__slider-content-img { text-align: left; } .starter__slider .starter__slider-end.mt-md-auto { margin-top: auto; } .starter__slider.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child) { margin-top: 1.7rem; } .starter__slider.swiper-vertical >.swiper-pagination-bullets .swiper-pagination-bullet { display: block; margin: auto; } } /* max-width > 960px */ @media (max-width:60em) { .starter__slider.swiper-vertical >.swiper-pagination-bullets .swiper-pagination-bullet { display: inline-block; } .starter__slider.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet:not(:first-child) { margin-left: 1.7rem; } .starter__slider.swiper-vertical >.swiper-pagination-bullets { top: 88%; right: 0; left: 0; } .is-slider-radius-right .starter__slider { border-radius: 0 0 3rem 0; } } /* max-width > 782px */ @media (max-width:48.875em) { .starter__slider.swiper-vertical >.swiper-pagination-bullets { top: 92%; } } /* Starter Slider WPforms */ .starter__slider-content-img div.wpforms-container-full { padding: 2.5rem; background-color: var(--hester-white); border-radius: var(--hester-normal-radius); text-align: left; } body div.wpforms-container-full form.wpforms-form input, body div.wpforms-container-full form.wpforms-form select, body div.wpforms-container-full form.wpforms-form .wpforms-field-row { max-width: 100% !important; } div.wpforms-container-full form.wpforms-form input[type=checkbox], div.wpforms-container-full form.wpforms-form input[type=radio] { height: 2rem; margin: 0 10px 0 3px; vertical-align: middle; position: relative; } div.wpforms-container-full form.wpforms-form input[type=checkbox]:checked, div.wpforms-container-full form.wpforms-form input[type=radio]:checked { background-color: var(--hester-primary); } .starter__slider-content-img .wpcf7, .hester_section_extra .wp-block-column .wpcf7 { padding: 2.2rem; text-align: left; background-color: var(--hester-white); max-width: 40.5rem; border-radius: var(--hester-normal-radius); } .starter__slider-content-img .wpcf7 textarea { min-height: 10rem; height: 10rem; } .wpcf7 p, .wpcf7 label { margin-bottom: 0; } .wpcf7 label { width: 100%; } .wpcf7 div+p { margin-top: 0; } /* -------------------------------------------------------------------------- */ /* Starter Info /* -------------------------------------------------------------------------- */ .hester_section_info { position: relative; z-index: 1; } .hester_section_info .hester_bg { padding-top: 5rem; } .starter__contact-item, .starter__info-item { position: relative; background-color: var(--hester-white); overflow: hidden; z-index: 0; } .starter__contact-item { border-radius: var(--hester-ten-radius); } .starter__info-item { height: 100%; padding: 2.7rem 2.5rem 2.8rem; transition: var(--hester-transition-primary); } .starter__info-item:after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; width: 0; height: .5rem; opacity: 0; visibility: hidden; margin: 0 auto; background-color: var(--hester-primary); transition: var(--hester-transition-primary); } .starter__info-item:hover::after, .using-keyboard .starter__info-item:focus-within::after, .starter__info-item.active::after { opacity: 1; visibility: visible; width: 100%; } .starter__info-wrapper .item--icon { width: 5.5rem; height: 5.5rem; font-size: 5rem; color: var(--hester-primary); } .is-info-init-s .starter__info-item { padding: 0; overflow: visible; } .starter__slider-nextcomeup + .is-info-init-s .starter__info-item { padding: 2.6rem; border-radius: 1rem; box-shadow: 0 1rem 1.75rem 0 rgba(64,64,64,0.1); } .is-info-init-s .starter__info-item:after { display: none; } .is-info-init-s .item--holder-inner .item--icon { color: var(--hester-white); background-color: var(--hester-primary); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0)); box-shadow: 0 1.8rem 4rem rgba(0, 0, 0, 0.2); } .is-info-init-s .item--holder-inner .item--icon, .is-info-init-s0 .item--holder-inner .item--icon { width: 7.6rem; height: 7.6rem; font-size: 3.6rem; border-radius: 100%; } .is-info-init-s .item--holder-inner.is__grid .item--icon, .is-info-init-s0 .item--holder-inner.is__grid .item--icon { margin-bottom: 2.3rem; } .is-info-init-s .starter__info-item .item--holder-inner.is__list, .is-info-init-s0 .starter__info-item .item--holder-inner.is__list { padding-bottom: 0.75rem; } /* 0 */ .is-info-init-s0 .starter__info-item { padding: 5rem 1.94rem 3.6rem; box-shadow: 0 1rem 3rem rgba(0,0,0,0.06); border-radius: 1rem; } .is-info-init-s0 .item--holder-inner.is__grid { -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; -ms-flex-align: center; align-items: center; text-align: center; } .is-info-init-s0 .item--holder-inner .item--icon { background-color: var(--hester-primary_09); } /* md > 783px || max-width > 960px */ @media (min-width: 37.5em) and (max-width: 60em) { .starter__info-item { padding: 2rem 2.2rem 2.1rem; } } /* md > 783px */ @media (min-width: 48.938em) { .starter__slider-nextcomeup+#hester-info { margin-top: -9.5rem; } .starter__slider-nextcomeup+#hester-info .hester_bg { padding: 0; padding-bottom: 1rem; } } /* min-width > 783px || max-width > 960px */ @media (min-width: 48.938em) and (max-width: 60em) { .starter__slider-nextcomeup+#hester-info { margin-top: -3.2rem; } } /* ---//--- */ /* -------------------------------------------------------------------------- */ /* Starter Services /* -------------------------------------------------------------------------- */ .readmore { margin-top: 0.8rem; } .readmore a { display: inline-block; position: relative; z-index: 0; } .readmore span { margin-right: 0.7rem; display: inline-block; } .readmore span:empty { display: none; } .readmore .more-icon-main { font-size: 1.3rem; transition: 0.35s ease all; } .readmore .more-icon-hover { position: absolute; top: 50%; right: 0; transform: translate(-2rem, -50%); transition: 0.35s ease all; opacity: 0; } .readmore:hover .more-icon-main { opacity: 0; transform: translateX(2rem); } .readmore:hover .more-icon-hover { transform: translate(0.3rem, -50%); opacity: 1; } .hester_section_services { overflow: hidden; } .starter__services-item { height: 100%; position: relative; z-index: 0; } .is-services-init-s1 .starter__services-item .item--holder { margin-top: 3.4rem; /* background-color: var(--hester-white); */ position: relative; z-index: 0; border-radius: var(--hester-normal-radius); -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); box-shadow: 0 1rem 1.75rem 0 rgba(64, 64, 64, 0.1); } .is-services-init-s1 .starter__services-item .item--holder .readmore a, .is-services-init-s1 .starter__services-item .item--holder, .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content:before { border: .1rem solid rgba(190, 190, 190, 0.17); } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon { width: 8.6rem; height: 8.6rem; border-radius: inherit; position: absolute; top: -3.5rem; right: 0; left: 0; margin: 0 auto; background-color: var(--hester-white); -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon .icon { width: 6.8rem; height: 6.8rem; font-size: 3.3rem; line-height: 6.3rem; background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0)); background-color: var(--hester-primary); color: var(--hester-white); border-radius: inherit; text-align: center; display: inline-block; } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon .icon * { -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon .icon > * { transform: rotate(-45deg); } .is-services-init-s1 .starter__services-item .item--holder-inner .item--content { width: 100%; text-align: center; padding: 4.4rem 3.8rem; border-radius: inherit; background-color: var(--hester-white); } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content { padding-top: 7rem; } /* md > 783px || max-width > 960px */ @media (min-width: 37.5em) and (max-width: 60em) { .is-services-init-s1 .starter__services-item .item--holder-inner .item--content { padding: 4rem 2.5rem; } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content { padding-top: 6rem; } } .is-services-init-s1 .starter__services-item .item--holder-inner.is__grid .item--icon+.item--content:before { content: ""; position: absolute; top: -3.6rem; right: 0; left: 0; width: 8.8rem; height: 8.8rem; margin: 0 auto; display: inline-block; z-index: -1; border-radius: inherit; -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon+.item--content:before, .using-keyboard .is-services-init-s1 .starter__services-item:focus-within .item--holder-inner.is__grid .item--icon+.item--content:before, .is-services-init-s1 .starter__services-item.active .item--holder-inner.is__grid .item--icon+.item--content:before, .is-services-init-s1 .starter__services-item:hover .item--holder-inner.is__grid .item--icon, .using-keyboard .is-services-init-s1 .starter__services-item:focus-within .item--holder-inner.is__grid .item--icon, .is-services-init-s1 .starter__services-item.active .item--holder-inner.is__grid .item--icon { transform: rotate(45deg); } .is-services-init-s1 .starter__services-item .item--holder .readmore { position: absolute; left: 50%; bottom: -2.25rem; -webkit-transform: translate(-50%,0); transform: translate(-50%,0); } .is-services-init-s1 .starter__services-item .item--holder .readmore a { display: block; min-width: 4.8rem; min-height: 1.8rem; line-height: 1.8rem; padding: 1.4rem; font-size: 1.6rem; text-align: center; border-radius: var(--hester-full-radius); color: var(--hester-gray-medium); background-color: var(--hester-white); box-shadow: 0 1.8rem 3.2rem rgba(64, 64, 64, 0.1); } .is-services-init-s1 .starter__services-item .item--holder .readmore a i { font-size: 107%; line-height: 1.7rem; vertical-align: -0.1rem; } .using-keyboard .is-services-init-s1 .starter__services-item .item--holder .readmore a:focus, .is-services-init-s1 .starter__services-item .item--holder .readmore a:hover { color: var(--hester-primary); border-color: var(--hester-primary); box-shadow: 0 1.7rem 1.75rem 0 rgba(64, 64, 64, 0.1); } /* -------------------------------------------------------------------------- */ /* Starter Features /* -------------------------------------------------------------------------- */ .hester_section_features { overflow: hidden; position: relative; z-index: 0; } .hester_section_features .hester_bg::before { background-image: linear-gradient(45deg,rgba(255,255,255, 0) 0%,rgba(255, 255, 255, 0.2) 100%); } .hester_section_features .starter__heading-title .sub-title { color: var(--hester-white); } .is-section-heading-init-s1 .hester_section_features .starter__heading-title .title::before, .is-section-heading-init-s1 .hester_section_features .starter__heading-title .title::after { background-color: var(--hester-white); } .hester_section_features .starter__heading-title > p { margin-bottom: 0; } /* sm > 600 || max-width > 782px */ @media (min-width: 37.5em) and (max-width: 48.875em) { .is-features-init-s1 .starter__features-wrapper { margin-bottom: 3rem; } } /* sm > 600px */ @media (min-width: 37.5em) { .starter__features-wrapper [class^='col-']:nth-child(even) { transform: translateY(3rem); } } .starter__features-item { position: relative; padding: 2.8rem 2.6rem; border-radius: .8rem; background-color: var(--hester-white); -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .is-features-init-s1 .starter__features-item:before { content: ''; position: absolute; top: -1rem; right: 1rem; width: 100%; height: 100%; opacity: 0; z-index: -1; background-color: var(--hester-white); border-radius: inherit; -webkit-transition: var(--hester-transition-primary); transition: var(--hester-transition-primary); } .is-features-init-s1 .starter__features-item:hover:before, .using-keyboard .is-features-init-s1 .starter__features-item:focus-within:before { opacity: .5; top: 1rem; right: -1rem; } .starter__features-item .item--icon { min-width: 4rem; min-height: 4rem; font-size: 4rem; color: var(--hester-primary); } .is-features-init-s1 .starter__features-item.active, .is-features-init-s1 .starter__features-item:hover, .using-keyboard .is-features-init-s1 .starter__features-item:focus-within { box-shadow: 1.09rem 2.138rem 5rem 0 rgba(64, 64, 64, 0.16); } html:not(.rtl) .starter__features-item .item--holder-inner:not(.is__grid) .item--icon { margin-right: 2.5rem; } .rtl .starter__features-item .item--holder-inner:not(.is__grid) .item--icon { margin-left: 2.5rem; } .starter__features-item .item--holder-inner { -ms-flex-align: center; align-items: center; } .is-features-init-s1 .starter__features-item { border-radius: .1rem; box-shadow: 0 0 7rem 0 rgba(64, 64, 64, 0.08); } /* Hester Lite CSS Only */ @media (min-width: 48.938em) { .starter__slider-nextcomeup+#hester-info .hester_bg { padding-bottom: 10rem; } } .hester_section_blog+.hester_section_services .hester_bg, .hester_section_blog+.hester_section_info .hester_bg, .hester_section_info+.hester_section_blog .hester_bg, .hester_section_info+.hester_section_services .hester_bg, .hester_section_services+.hester_section_blog .hester_bg, .hester_section_services+.hester_section_info .hester_bg { padding-top: 0; } .customize-partial-edit-shortcuts-shown .hester_section_blog+.hester_section_services .hester_bg, .customize-partial-edit-shortcuts-shown .hester_section_blog+.hester_section_info .hester_bg, .customize-partial-edit-shortcuts-shown .hester_section_info+.hester_section_blog .hester_bg, .customize-partial-edit-shortcuts-shown .hester_section_info+.hester_section_services .hester_bg, .customize-partial-edit-shortcuts-shown .hester_section_services+.hester_section_blog .hester_bg, .customize-partial-edit-shortcuts-shown .hester_section_services+.hester_section_info .hester_bg { padding-top: 5rem; } .hester_section_extra .hester_bg, .hester_section_products .hester_bg { background-color: var(--hester-primary_04); } .hester_section_products .hester_bg .woocommerce ul.products li.product { background-color: var(--hester-white); } @media only screen and (max-width: 768px) { .hester_section_info .hester_bg { padding-top: 6rem; padding-bottom: 6rem; } } /* /--/ */assets/css/glightbox.min.css000064400000032662147600374750012147 0ustar00.glightbox-container{width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999!important;overflow:hidden;-ms-touch-action:none;touch-action:none;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0;overflow:hidden}.glightbox-container.inactive{display:none}.glightbox-container .gcontainer{position:relative;width:100%;height:100%;z-index:9999;overflow:hidden}.glightbox-container .gslider{-webkit-transition:-webkit-transform .4s ease;transition:-webkit-transform .4s ease;transition:transform .4s ease;transition:transform .4s ease,-webkit-transform .4s ease;height:100%;left:0;top:0;width:100%;position:relative;overflow:hidden;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.glightbox-container .gslide{width:100%;position:absolute;opacity:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;opacity:0}.glightbox-container .gslide.current{opacity:1;z-index:99999;position:relative}.glightbox-container .gslide.prev{opacity:1;z-index:9999}.glightbox-container .gslide-inner-content{width:100%}.glightbox-container .ginner-container{position:relative;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;max-width:100%;margin:auto;height:100vh}.glightbox-container .ginner-container.gvideo-container{width:100%}.glightbox-container .ginner-container.desc-bottom,.glightbox-container .ginner-container.desc-top{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.glightbox-container .ginner-container.desc-left,.glightbox-container .ginner-container.desc-right{max-width:100%!important}.gslide iframe,.gslide video{outline:0!important;border:none;min-height:165px;-webkit-overflow-scrolling:touch;-ms-touch-action:auto;touch-action:auto}.gslide-image{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.gslide-image img{max-height:100vh;display:block;padding:0;float:none;outline:0;border:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;max-width:100vw;width:auto;height:auto;-o-object-fit:cover;object-fit:cover;-ms-touch-action:none;touch-action:none;margin:auto;min-width:200px}.desc-bottom .gslide-image img,.desc-top .gslide-image img{width:auto}.desc-left .gslide-image img,.desc-right .gslide-image img{width:auto;max-width:100%}.gslide-image img.zoomable{position:relative}.gslide-image img.dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.gslide-video{position:relative;max-width:100vh;width:100%!important}.gslide-video .gvideo-wrapper{width:100%;margin:auto}.gslide-video::before{content:'';display:block;position:absolute;width:100%;height:100%;background:rgba(255,0,0,.34);display:none}.gslide-video.playing::before{display:none}.gslide-video.fullscreen{max-width:100%!important;min-width:100%;height:75vh}.gslide-video.fullscreen video{max-width:100%!important;width:100%!important}.gslide-inline{background:#fff;text-align:left;max-height:calc(100vh - 40px);overflow:auto;max-width:100%}.gslide-inline .ginlined-content{padding:20px;width:100%}.gslide-inline .dragging{cursor:-webkit-grabbing!important;cursor:grabbing!important;-webkit-transition:none;transition:none}.ginlined-content{overflow:auto;display:block!important;opacity:1}.gslide-external{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;min-width:100%;background:#fff;padding:0;overflow:auto;max-height:75vh;height:100%}.gslide-media{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.zoomed .gslide-media{-webkit-box-shadow:none!important;box-shadow:none!important}.desc-bottom .gslide-media,.desc-top .gslide-media{margin:0 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gslide-description{position:relative;-webkit-box-flex:1;-ms-flex:1 0 100%;flex:1 0 100%}.gslide-description.description-left,.gslide-description.description-right{max-width:100%}.gslide-description.description-bottom,.gslide-description.description-top{margin:0 auto;width:100%}.gslide-description p{margin-bottom:12px}.gslide-description p:last-child{margin-bottom:0}.zoomed .gslide-description{display:none}.glightbox-button-hidden{display:none}.glightbox-mobile .glightbox-container .gslide-description{height:auto!important;width:100%;background:0 0;position:absolute;bottom:15px;padding:19px 11px;max-width:100vw!important;-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;max-height:78vh;overflow:auto!important;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.75)));background:linear-gradient(to bottom,rgba(0,0,0,0) 0,rgba(0,0,0,.75) 100%);-webkit-transition:opacity .3s linear;transition:opacity .3s linear;padding-bottom:50px}.glightbox-mobile .glightbox-container .gslide-title{color:#fff;font-size:1em}.glightbox-mobile .glightbox-container .gslide-desc{color:#a1a1a1}.glightbox-mobile .glightbox-container .gslide-desc a{color:#fff;font-weight:700}.glightbox-mobile .glightbox-container .gslide-desc *{color:inherit}.glightbox-mobile .glightbox-container .gslide-desc string{color:#fff}.glightbox-mobile .glightbox-container .gslide-desc .desc-more{color:#fff;opacity:.4}.gdesc-open .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:.4}.gdesc-open .gdesc-inner{padding-bottom:30px}.gdesc-closed .gslide-media{-webkit-transition:opacity .5s ease;transition:opacity .5s ease;opacity:1}.greset{-webkit-transition:all .3s ease;transition:all .3s ease}.gabsolute{position:absolute}.grelative{position:relative}.glightbox-desc{display:none!important}.glightbox-open{overflow:hidden}.gloader{height:25px;width:25px;-webkit-animation:lightboxLoader .8s infinite linear;animation:lightboxLoader .8s infinite linear;border:2px solid #fff;border-right-color:transparent;border-radius:50%;position:absolute;display:block;z-index:9999;left:0;right:0;margin:0 auto;top:47%}.goverlay{width:100%;height:calc(100vh + 1px);position:fixed;top:-1px;left:0;background:#000;will-change:opacity}.glightbox-mobile .goverlay{background:#000}.gclose,.gnext,.gprev{z-index:99999;cursor:pointer;width:26px;height:44px;border:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gclose svg,.gnext svg,.gprev svg{display:block;width:25px;height:auto;margin:0;padding:0}.gclose.disabled,.gnext.disabled,.gprev.disabled{opacity:.1}.gclose .garrow,.gnext .garrow,.gprev .garrow{stroke:#fff}.gbtn.focused{outline:2px solid #0f3d81}iframe.wait-autoplay{opacity:0}.glightbox-closing .gclose,.glightbox-closing .gnext,.glightbox-closing .gprev{opacity:0!important}.glightbox-clean .gslide-description{background:#fff}.glightbox-clean .gdesc-inner{padding:22px 20px}.glightbox-clean .gslide-title{font-size:1em;font-weight:400;font-family:arial;color:#000;margin-bottom:19px;line-height:1.4em}.glightbox-clean .gslide-desc{font-size:.86em;margin-bottom:0;font-family:arial;line-height:1.4em}.glightbox-clean .gslide-video{background:#000}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.75);border-radius:4px}.glightbox-clean .gclose path,.glightbox-clean .gnext path,.glightbox-clean .gprev path{fill:#fff}.glightbox-clean .gprev{position:absolute;top:-100%;left:30px;width:40px;height:50px}.glightbox-clean .gnext{position:absolute;top:-100%;right:30px;width:40px;height:50px}.glightbox-clean .gclose{width:35px;height:35px;top:15px;right:10px;position:absolute}.glightbox-clean .gclose svg{width:18px;height:auto}.glightbox-clean .gclose:hover{opacity:1}.gfadeIn{-webkit-animation:gfadeIn .5s ease;animation:gfadeIn .5s ease}.gfadeOut{-webkit-animation:gfadeOut .5s ease;animation:gfadeOut .5s ease}.gslideOutLeft{-webkit-animation:gslideOutLeft .3s ease;animation:gslideOutLeft .3s ease}.gslideInLeft{-webkit-animation:gslideInLeft .3s ease;animation:gslideInLeft .3s ease}.gslideOutRight{-webkit-animation:gslideOutRight .3s ease;animation:gslideOutRight .3s ease}.gslideInRight{-webkit-animation:gslideInRight .3s ease;animation:gslideInRight .3s ease}.gzoomIn{-webkit-animation:gzoomIn .5s ease;animation:gzoomIn .5s ease}.gzoomOut{-webkit-animation:gzoomOut .5s ease;animation:gzoomOut .5s ease}@-webkit-keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes lightboxLoader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes gfadeIn{from{opacity:0}to{opacity:1}}@keyframes gfadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes gfadeOut{from{opacity:1}to{opacity:0}}@keyframes gfadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInLeft{from{opacity:0;-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0)}to{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@keyframes gslideOutLeft{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(-60%,0,0);transform:translate3d(-60%,0,0);opacity:0;visibility:hidden}}@-webkit-keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes gslideInRight{from{opacity:0;visibility:visible;-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0)}to{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@keyframes gslideOutRight{from{opacity:1;visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}to{-webkit-transform:translate3d(60%,0,0);transform:translate3d(60%,0,0);opacity:0}}@-webkit-keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@keyframes gzoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:1}}@-webkit-keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes gzoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@media (min-width:769px){.glightbox-container .ginner-container{width:auto;height:auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.glightbox-container .ginner-container.desc-top .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-top .gslide-image,.glightbox-container .ginner-container.desc-top .gslide-image img{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.glightbox-container .ginner-container.desc-left .gslide-description{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.glightbox-container .ginner-container.desc-left .gslide-image{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.gslide-image img{max-height:97vh;max-width:100%}.gslide-image img.zoomable{cursor:-webkit-zoom-in;cursor:zoom-in}.zoomed .gslide-image img.zoomable{cursor:-webkit-grab;cursor:grab}.gslide-inline{max-height:95vh}.gslide-external{max-height:100vh}.gslide-description.description-left,.gslide-description.description-right{max-width:275px}.glightbox-open{height:auto}.goverlay{background:rgba(0,0,0,.92)}.glightbox-clean .gslide-media{-webkit-box-shadow:1px 2px 9px 0 rgba(0,0,0,.65);box-shadow:1px 2px 9px 0 rgba(0,0,0,.65)}.glightbox-clean .description-left .gdesc-inner,.glightbox-clean .description-right .gdesc-inner{position:absolute;height:100%;overflow-y:auto}.glightbox-clean .gclose,.glightbox-clean .gnext,.glightbox-clean .gprev{background-color:rgba(0,0,0,.32)}.glightbox-clean .gclose:hover,.glightbox-clean .gnext:hover,.glightbox-clean .gprev:hover{background-color:rgba(0,0,0,.7)}.glightbox-clean .gprev{top:45%}.glightbox-clean .gnext{top:45%}}@media (min-width:992px){.glightbox-clean .gclose{opacity:.7;right:20px}}@media screen and (max-height:420px){.goverlay{background:#000}}assets/css/glightbox.css000064400000043661147600374750011366 0ustar00.glightbox-container { width: 100%; height: 100%; position: fixed; top: 0; left: 0; z-index: 999999 !important; overflow: hidden; -ms-touch-action: none; touch-action: none; -webkit-text-size-adjust: 100%; -moz-text-size-adjust: 100%; -ms-text-size-adjust: 100%; text-size-adjust: 100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; outline: 0; overflow: hidden } .glightbox-container.inactive { display: none } .glightbox-container .gcontainer { position: relative; width: 100%; height: 100%; z-index: 9999; overflow: hidden } .glightbox-container .gslider { -webkit-transition: -webkit-transform .4s ease; transition: -webkit-transform .4s ease; transition: transform .4s ease; transition: transform .4s ease, -webkit-transform .4s ease; height: 100%; left: 0; top: 0; width: 100%; position: relative; overflow: hidden; display: -webkit-box !important; display: -ms-flexbox !important; display: flex !important; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } .glightbox-container .gslide { width: 100%; position: absolute; opacity: 1; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; opacity: 0 } .glightbox-container .gslide.current { opacity: 1; z-index: 99999; position: relative } .glightbox-container .gslide.prev { opacity: 1; z-index: 9999 } .glightbox-container .gslide-inner-content { width: 100% } .glightbox-container .ginner-container { position: relative; width: 100%; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; max-width: 100%; margin: auto; height: 100vh } .glightbox-container .ginner-container.gvideo-container { width: 100% } .glightbox-container .ginner-container.desc-bottom, .glightbox-container .ginner-container.desc-top { -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column } .glightbox-container .ginner-container.desc-left, .glightbox-container .ginner-container.desc-right { max-width: 100% !important } .gslide iframe, .gslide video { outline: 0 !important; border: none; min-height: 165px; -webkit-overflow-scrolling: touch; -ms-touch-action: auto; touch-action: auto } .gslide-image { -webkit-box-align: center; -ms-flex-align: center; align-items: center } .gslide-image img { max-height: 100vh; display: block; padding: 0; float: none; outline: 0; border: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; max-width: 100vw; width: auto; height: auto; -o-object-fit: cover; object-fit: cover; -ms-touch-action: none; touch-action: none; margin: auto; min-width: 200px } .desc-bottom .gslide-image img, .desc-top .gslide-image img { width: auto } .desc-left .gslide-image img, .desc-right .gslide-image img { width: auto; max-width: 100% } .gslide-image img.zoomable { position: relative } .gslide-image img.dragging { cursor: -webkit-grabbing !important; cursor: grabbing !important; -webkit-transition: none; transition: none } .gslide-video { position: relative; max-width: 100vh; width: 100% !important } .gslide-video .gvideo-wrapper { width: 100%; margin: auto } .gslide-video::before { content: ''; display: block; position: absolute; width: 100%; height: 100%; background: rgba(255, 0, 0, .34); display: none } .gslide-video.playing::before { display: none } .gslide-video.fullscreen { max-width: 100% !important; min-width: 100%; height: 75vh } .gslide-video.fullscreen video { max-width: 100% !important; width: 100% !important } .gslide-inline { background: #fff; text-align: left; max-height: calc(100vh - 40px); overflow: auto; max-width: 100% } .gslide-inline .ginlined-content { padding: 20px; width: 100% } .gslide-inline .dragging { cursor: -webkit-grabbing !important; cursor: grabbing !important; -webkit-transition: none; transition: none } .ginlined-content { overflow: auto; display: block !important; opacity: 1 } .gslide-external { display: -webkit-box; display: -ms-flexbox; display: flex; width: 100%; min-width: 100%; background: #fff; padding: 0; overflow: auto; max-height: 75vh; height: 100% } .gslide-media { display: -webkit-box; display: -ms-flexbox; display: flex; width: auto } .zoomed .gslide-media { -webkit-box-shadow: none !important; box-shadow: none !important } .desc-bottom .gslide-media, .desc-top .gslide-media { margin: 0 auto; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column } .gslide-description { position: relative; -webkit-box-flex: 1; -ms-flex: 1 0 100%; flex: 1 0 100% } .gslide-description.description-left, .gslide-description.description-right { max-width: 100% } .gslide-description.description-bottom, .gslide-description.description-top { margin: 0 auto; width: 100% } .gslide-description p { margin-bottom: 12px } .gslide-description p:last-child { margin-bottom: 0 } .zoomed .gslide-description { display: none } .glightbox-button-hidden { display: none } .glightbox-mobile .glightbox-container .gslide-description { height: auto !important; width: 100%; background: 0 0; position: absolute; bottom: 15px; padding: 19px 11px; max-width: 100vw !important; -webkit-box-ordinal-group: 3 !important; -ms-flex-order: 2 !important; order: 2 !important; max-height: 78vh; overflow: auto !important; background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, .75))); background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, .75) 100%); -webkit-transition: opacity .3s linear; transition: opacity .3s linear; padding-bottom: 50px } .glightbox-mobile .glightbox-container .gslide-title { color: #fff; font-size: 1em } .glightbox-mobile .glightbox-container .gslide-desc { color: #a1a1a1 } .glightbox-mobile .glightbox-container .gslide-desc a { color: #fff; font-weight: 700 } .glightbox-mobile .glightbox-container .gslide-desc * { color: inherit } .glightbox-mobile .glightbox-container .gslide-desc string { color: #fff } .glightbox-mobile .glightbox-container .gslide-desc .desc-more { color: #fff; opacity: .4 } .gdesc-open .gslide-media { -webkit-transition: opacity .5s ease; transition: opacity .5s ease; opacity: .4 } .gdesc-open .gdesc-inner { padding-bottom: 30px } .gdesc-closed .gslide-media { -webkit-transition: opacity .5s ease; transition: opacity .5s ease; opacity: 1 } .greset { -webkit-transition: all .3s ease; transition: all .3s ease } .gabsolute { position: absolute } .grelative { position: relative } .glightbox-desc { display: none !important } .glightbox-open { overflow: hidden } .gloader { height: 25px; width: 25px; -webkit-animation: lightboxLoader .8s infinite linear; animation: lightboxLoader .8s infinite linear; border: 2px solid #fff; border-right-color: transparent; border-radius: 50%; position: absolute; display: block; z-index: 9999; left: 0; right: 0; margin: 0 auto; top: 47% } .goverlay { width: 100%; height: calc(100vh + 1px); position: fixed; top: -1px; left: 0; background: #000; will-change: opacity } .glightbox-mobile .goverlay { background: #000 } .gclose, .gnext, .gprev { z-index: 99999; cursor: pointer; width: 26px; height: 44px; border: none; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column } .gclose svg, .gnext svg, .gprev svg { display: block; width: 25px; height: auto; margin: 0; padding: 0 } .gclose.disabled, .gnext.disabled, .gprev.disabled { opacity: .1 } .gclose .garrow, .gnext .garrow, .gprev .garrow { stroke: #fff } .gbtn.focused { outline: 2px solid #0f3d81 } iframe.wait-autoplay { opacity: 0 } .glightbox-closing .gclose, .glightbox-closing .gnext, .glightbox-closing .gprev { opacity: 0 !important } .glightbox-clean .gslide-description { background: #fff } .glightbox-clean .gdesc-inner { padding: 22px 20px } .glightbox-clean .gslide-title { font-size: 1em; font-weight: 400; font-family: arial; color: #000; margin-bottom: 19px; line-height: 1.4em } .glightbox-clean .gslide-desc { font-size: .86em; margin-bottom: 0; font-family: arial; line-height: 1.4em } .glightbox-clean .gslide-video { background: #000 } .glightbox-clean .gclose, .glightbox-clean .gnext, .glightbox-clean .gprev { background-color: rgba(0, 0, 0, .75); border-radius: 4px } .glightbox-clean .gclose path, .glightbox-clean .gnext path, .glightbox-clean .gprev path { fill: #fff } .glightbox-clean .gprev { position: absolute; top: -100%; left: 30px; width: 40px; height: 50px } .glightbox-clean .gnext { position: absolute; top: -100%; right: 30px; width: 40px; height: 50px } .glightbox-clean .gclose { width: 35px; height: 35px; top: 15px; right: 10px; position: absolute } .glightbox-clean .gclose svg { width: 18px; height: auto } .glightbox-clean .gclose:hover { opacity: 1 } .gfadeIn { -webkit-animation: gfadeIn .5s ease; animation: gfadeIn .5s ease } .gfadeOut { -webkit-animation: gfadeOut .5s ease; animation: gfadeOut .5s ease } .gslideOutLeft { -webkit-animation: gslideOutLeft .3s ease; animation: gslideOutLeft .3s ease } .gslideInLeft { -webkit-animation: gslideInLeft .3s ease; animation: gslideInLeft .3s ease } .gslideOutRight { -webkit-animation: gslideOutRight .3s ease; animation: gslideOutRight .3s ease } .gslideInRight { -webkit-animation: gslideInRight .3s ease; animation: gslideInRight .3s ease } .gzoomIn { -webkit-animation: gzoomIn .5s ease; animation: gzoomIn .5s ease } .gzoomOut { -webkit-animation: gzoomOut .5s ease; animation: gzoomOut .5s ease } @-webkit-keyframes lightboxLoader { 0% { -webkit-transform: rotate(0); transform: rotate(0) } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg) } } @keyframes lightboxLoader { 0% { -webkit-transform: rotate(0); transform: rotate(0) } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg) } } @-webkit-keyframes gfadeIn { from { opacity: 0 } to { opacity: 1 } } @keyframes gfadeIn { from { opacity: 0 } to { opacity: 1 } } @-webkit-keyframes gfadeOut { from { opacity: 1 } to { opacity: 0 } } @keyframes gfadeOut { from { opacity: 1 } to { opacity: 0 } } @-webkit-keyframes gslideInLeft { from { opacity: 0; -webkit-transform: translate3d(-60%, 0, 0); transform: translate3d(-60%, 0, 0) } to { visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1 } } @keyframes gslideInLeft { from { opacity: 0; -webkit-transform: translate3d(-60%, 0, 0); transform: translate3d(-60%, 0, 0) } to { visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1 } } @-webkit-keyframes gslideOutLeft { from { opacity: 1; visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } to { -webkit-transform: translate3d(-60%, 0, 0); transform: translate3d(-60%, 0, 0); opacity: 0; visibility: hidden } } @keyframes gslideOutLeft { from { opacity: 1; visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } to { -webkit-transform: translate3d(-60%, 0, 0); transform: translate3d(-60%, 0, 0); opacity: 0; visibility: hidden } } @-webkit-keyframes gslideInRight { from { opacity: 0; visibility: visible; -webkit-transform: translate3d(60%, 0, 0); transform: translate3d(60%, 0, 0) } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1 } } @keyframes gslideInRight { from { opacity: 0; visibility: visible; -webkit-transform: translate3d(60%, 0, 0); transform: translate3d(60%, 0, 0) } to { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1 } } @-webkit-keyframes gslideOutRight { from { opacity: 1; visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } to { -webkit-transform: translate3d(60%, 0, 0); transform: translate3d(60%, 0, 0); opacity: 0 } } @keyframes gslideOutRight { from { opacity: 1; visibility: visible; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0) } to { -webkit-transform: translate3d(60%, 0, 0); transform: translate3d(60%, 0, 0); opacity: 0 } } @-webkit-keyframes gzoomIn { from { opacity: 0; -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3) } to { opacity: 1 } } @keyframes gzoomIn { from { opacity: 0; -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3) } to { opacity: 1 } } @-webkit-keyframes gzoomOut { from { opacity: 1 } 50% { opacity: 0; -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3) } to { opacity: 0 } } @keyframes gzoomOut { from { opacity: 1 } 50% { opacity: 0; -webkit-transform: scale3d(.3, .3, .3); transform: scale3d(.3, .3, .3) } to { opacity: 0 } } @media (min-width:769px) { .glightbox-container .ginner-container { width: auto; height: auto; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row } .glightbox-container .ginner-container.desc-top .gslide-description { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0 } .glightbox-container .ginner-container.desc-top .gslide-image, .glightbox-container .ginner-container.desc-top .gslide-image img { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1 } .glightbox-container .ginner-container.desc-left .gslide-description { -webkit-box-ordinal-group: 1; -ms-flex-order: 0; order: 0 } .glightbox-container .ginner-container.desc-left .gslide-image { -webkit-box-ordinal-group: 2; -ms-flex-order: 1; order: 1 } .gslide-image img { max-height: 97vh; max-width: 100% } .gslide-image img.zoomable { cursor: -webkit-zoom-in; cursor: zoom-in } .zoomed .gslide-image img.zoomable { cursor: -webkit-grab; cursor: grab } .gslide-inline { max-height: 95vh } .gslide-external { max-height: 100vh } .gslide-description.description-left, .gslide-description.description-right { max-width: 275px } .glightbox-open { height: auto } .goverlay { background: rgba(0, 0, 0, .92) } .glightbox-clean .gslide-media { -webkit-box-shadow: 1px 2px 9px 0 rgba(0, 0, 0, .65); box-shadow: 1px 2px 9px 0 rgba(0, 0, 0, .65) } .glightbox-clean .description-left .gdesc-inner, .glightbox-clean .description-right .gdesc-inner { position: absolute; height: 100%; overflow-y: auto } .glightbox-clean .gclose, .glightbox-clean .gnext, .glightbox-clean .gprev { background-color: rgba(0, 0, 0, .32) } .glightbox-clean .gclose:hover, .glightbox-clean .gnext:hover, .glightbox-clean .gprev:hover { background-color: rgba(0, 0, 0, .7) } .glightbox-clean .gprev { top: 45% } .glightbox-clean .gnext { top: 45% } } @media (min-width:992px) { .glightbox-clean .gclose { opacity: .7; right: 20px } } @media screen and (max-height:420px) { .goverlay { background: #000 } }assets/css/admin-widgets.min.css000064400000005452147600374750012711 0ustar00.hester-widget .hester-description{padding-left:0!important;font-size:12px}.hester-widget label{display:inline-block;min-width:50px;margin-right:6px}.hester-widget select{min-width:120px}.hester-widget input[type=text],.hester-widget textarea{margin-top:3px}.hester-widget p:last-of-type{margin-bottom:25px}.hester-help-link{float:left;font-size:13px;line-height:16px}.hester-help-link:after{content:"|";display:inline-block;padding:0 4px}.hester-help-link .hester-help-icon,.hester-repeatable-widget .hester-hide-if-not-empty{display:none}.hester-repeatable-widget .hester-repeatable-container{margin-top:20px}.hester-repeatable-widget .hester-repeatable-container.empty{padding:40px 15px;margin:30px 0;background-color:#f9f9f9;text-align:center}.hester-repeatable-widget .hester-repeatable-container.empty h5{margin-bottom:0;font-size:1.1em;margin-top:1.1em}.hester-repeatable-widget .hester-repeatable-container.empty p{color:#72777c;margin-top:.5em;margin-bottom:2em;font-size:12px}.hester-repeatable-widget .hester-repeatable-container.empty .hester-hide-if-empty{display:none}.hester-repeatable-widget .hester-repeatable-container.empty .hester-hide-if-not-empty{display:block}.hester-repeatable-widget .hester-repeatable-container.empty .hester-repeatable-footer{display:block;margin-bottom:0}.hester-repeatable-widget .hester-repeatable-container.empty .hester-svg-icon svg{width:40px;height:40px}.hester-repeatable-widget .hester-repeatable-item{margin-bottom:15px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.hester-repeatable-widget .hester-repeatable-item:last-child{margin-bottom:0}.hester-repeatable-widget .hester-repeatable-item.open .hester-repeatable-indicator .accordion-section-title:after{content:"\f142"}.hester-repeatable-widget .hester-repeatable-item.open .hester-repeatable-item-content{display:block}.hester-repeatable-widget .hester-repeatable-item-title{font-weight:600;background:#f7f7f7;padding:15px 0 15px 15px;border:1px solid #e5e5e5;margin:-1px -1px 0;font-size:1em;line-height:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.hester-repeatable-widget .hester-repeatable-item-title:active{cursor:grabbing}.hester-repeatable-widget .hester-repeatable-item-title:hover{cursor:move;cursor:grab;border-color:#999}.hester-repeatable-widget .hester-repeatable-item-content{display:none;padding:1px 15px 15px;background:#fbfbfb}.hester-repeatable-widget .hester-repeatable-indicator{float:right;position:relative}.hester-repeatable-widget .hester-repeatable-indicator .accordion-section-title{border:none}.hester-repeatable-widget .hester-repeatable-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-bottom:30px}.hester-repeatable-widget .remove-repeatable-item{margin-top:5px}assets/css/admin-widgets.css000064400000006653147600374750012133 0ustar00.hester-widget .hester-description { padding-left: 0 !important; font-size: 12px; } .hester-widget label { display: inline-block; min-width: 50px; margin-right: 6px; } .hester-widget select { min-width: 120px; } .hester-widget textarea, .hester-widget input[type=text] { margin-top: 3px; } .hester-widget p:last-of-type { margin-bottom: 25px; } .hester-help-link { float: left; font-size: 13px; line-height: 16px; } .hester-help-link:after { content: '|'; display: inline-block; padding: 0 4px; } .hester-help-link .hester-help-icon { display: none; } .hester-repeatable-widget .hester-hide-if-not-empty { display: none; } .hester-repeatable-widget .hester-repeatable-container { margin-top: 20px; } .hester-repeatable-widget .hester-repeatable-container.empty { padding: 40px 15px; margin: 30px 0; background-color: #f9f9f9; text-align: center; } .hester-repeatable-widget .hester-repeatable-container.empty h5 { margin-bottom: 0; font-size: 1.1em; margin-top: 1.1em; } .hester-repeatable-widget .hester-repeatable-container.empty p { color: #72777c; margin-top: .5em; margin-bottom: 2em; font-size: 12px; } .hester-repeatable-widget .hester-repeatable-container.empty .hester-hide-if-empty { display: none; } .hester-repeatable-widget .hester-repeatable-container.empty .hester-hide-if-not-empty { display: block; } .hester-repeatable-widget .hester-repeatable-container.empty .hester-repeatable-footer { display: block; margin-bottom: 0; } .hester-repeatable-widget .hester-repeatable-container.empty .hester-svg-icon svg { width: 40px; height: 40px; } .hester-repeatable-widget .hester-repeatable-item { margin-bottom: 15px; border: 1px solid #e5e5e5; -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); } .hester-repeatable-widget .hester-repeatable-item:last-child { margin-bottom: 0; } .hester-repeatable-widget .hester-repeatable-item.open .hester-repeatable-indicator .accordion-section-title:after { content: "\f142"; } .hester-repeatable-widget .hester-repeatable-item.open .hester-repeatable-item-content { display: block; } .hester-repeatable-widget .hester-repeatable-item-title { font-weight: 600; background: #f7f7f7; padding: 15px 0 15px 15px; border: 1px solid #e5e5e5; margin: -1px -1px 0 -1px; font-size: 1em; line-height: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .hester-repeatable-widget .hester-repeatable-item-title:active { cursor: -webkit-grabbing; cursor: grabbing; } .hester-repeatable-widget .hester-repeatable-item-title:hover { cursor: move; cursor: -webkit-grab; cursor: grab; border-color: #999; } .hester-repeatable-widget .hester-repeatable-item-content { display: none; padding: 1px 15px 15px; background: #fbfbfb; } .hester-repeatable-widget .hester-repeatable-indicator { float: right; position: relative; } .hester-repeatable-widget .hester-repeatable-indicator .accordion-section-title { border: none; } .hester-repeatable-widget .hester-repeatable-footer { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; margin-bottom: 30px; } .hester-repeatable-widget .remove-repeatable-item { margin-top: 5px; } assets/css/admin-dashicon.min.css000064400000001022147600374750013020 0ustar00@font-face{font-family:hester-dashicon;src:url(../fonts/hester-icon.eot);src:url(../fonts/hester-icon.eot#iefix) format("embedded-opentype"),url(../fonts/hester-icon.ttf) format("truetype"),url(../fonts/hester-icon.woff) format("woff"),url(../fonts/hester-icon.svg#icomoon) format("svg");font-weight:400;font-style:normal}.dashicons-hester-brand:before{font-family:hester-dashicon!important;content:"\e900"!important;font-size:20px!important;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center}assets/css/admin-dashicon.css000064400000001252147600374750012243 0ustar00@font-face { font-family: 'hester-dashicon'; src: url("../fonts/hester-icon.eot"); src: url("../fonts/hester-icon.eot#iefix") format("embedded-opentype"), url("../fonts/hester-icon.ttf") format("truetype"), url("../fonts/hester-icon.woff") format("woff"), url("../fonts/hester-icon.svg#icomoon") format("svg"); font-weight: normal; font-style: normal; } .dashicons-hester-brand:before { font-family: 'hester-dashicon' !important; content: "\e900" !important; font-size: 20px !important; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } assets/fonts/hester-icon.woff000064400000002340147600374750012316 0ustar00wOFF OS/2``*cmaphTTV҇gaspglyfheadl66hhea$$hmtx loca (hmaxp %namewpost 3 @@@ 8  797979"#!"&5463!233##5#35!5!5&&55&J&5ہۂ"e&55&J&55&^9..}f._< 77 T#  B  ! c     M  , n 4hester-iconhester-iconVersion 1.0Version 1.0hester-iconhester-iconhester-iconhester-iconRegularRegularhester-iconhester-iconFont generated by IcoMoon.Font generated by IcoMoon.assets/fonts/hester-icon.ttf000064400000002224147600374750012153 0ustar00 0OS/2*`cmapV҇Tgasppglyfxhead 6hheaX$hmtx |loca(h maxp % namewpostt 3 @@@ 8  797979"#!"&5463!233##5#35!5!5&&55&J&5ہۂ"e&55&J&55&^9..}f._< 77 T#  B  ! c     M  , n 4hester-iconhester-iconVersion 1.0Version 1.0hester-iconhester-iconhester-iconhester-iconRegularRegularhester-iconhester-iconFont generated by IcoMoon.Font generated by IcoMoon.assets/fonts/hester-icon.svg000064400000001525147600374750012160 0ustar00 Generated by IcoMoon assets/fonts/hester-icon.eot000064400000002510147600374750012143 0ustar00HLP.f}hester-iconRegularVersion 1.0hester-icon 0OS/2*`cmapV҇Tgasppglyfxhead 6hheaX$hmtx |loca(h maxp % namewpostt 3 @@@ 8  797979"#!"&5463!233##5#35!5!5&&55&J&5ہۂ"e&55&J&55&^9..}f._< 77 T#  B  ! c     M  , n 4hester-iconhester-iconVersion 1.0Version 1.0hester-iconhester-iconhester-iconhester-iconRegularRegularhester-iconhester-iconFont generated by IcoMoon.Font generated by IcoMoon.assets/images/img01.png000064400002210372147600374750010762 0ustar00PNG  IHDRBPLTE¾轷-26RWX* G8/VB75)")-/A3+eMAشmRE;/'`G:/%Q<1ͽX\]ՋaOиJA9?(rK8ƹXJB''& K'1ֵ'zR?˾뮴`=/"ٻLQPkC2فZG0.*:::WXj7!ſ}2kZQҡx^UMn柜j[NPbzbSJ.#~{ǓvĻuxd741@) tYJFIHwlS3'骝_asί=AAyqjsf]FHXs]ߘeSmYvh{{qܧY-=lл}fj}k`Ħlngi6G߼dceпfbYtpuouwUH>@OØЧy?QˠIU)ɴư/6Gد_CRY9Ī;I#ӗxUi-c|6࿙xƸʲ`d>˲uXqwR`{E?oF\U9h-9mnGoJ__3$٬thXuJxսؕwwKpH3Ѡy㷕&/`U£%ăyUmnJ[Tyw4*GB4<`_t}Ϙa>@mLWy˄o9ƫA; btMIDATxڬ\Uό3+2^," .b$IlV((6A킘* ,$bI41>}9'Y=_ܙ5<9w%/SVz Յ_SK?]rUsQJ=ꓯ[γ'rxB+ڇCyE'Љ|{Ĵy|zu,aP=(R4KWMzD|{\ٹέA砵_^L&Dp4l5PGKG }~uei6ęJࡨif?$g{"-8h?^^ N ,E;֑vQq!D)s௞~4P{6 QQj FFQ1DV-Ŝ`f x ]Z S}(=#pғRD"nLTX ش MiڣT=)(*Z mRɱh0Z8^SAD`0*^睲AQI${aP"_/;mE$SP@c*\D.}B'rgkqn§;;G{G;F`+W[Kܖe%  ;`whvo߾x [$0E[X /ļQ/?O[4B#,p6 ޅ&<%I`pBDD A=T`>o8  R]6+WovRZ_(؊"JCBWa oɊXWV&XN{nAH?MqhG,4aX0<;E"}SLK5!  Aߡ2y!Pqs· '(Z @0 ,Lgl.lb.e'/n u8F Iq̂-"4Ɲ=|Q)nlī. y]|>:ڡWϿ+\ Zׯ'z2N0f!>{CeQ(7;`N> E;f`ٕ/#3pw;w;S'h $mANvmDn|$R&kr8<|r] ^`4FaX5|6uf~[ rK#, /ppT=}FaQQ!*Cw4X+K&`Ya 2DWcȍ1p5RL k : <@f .9Ƈ dDNxFkD80|ot!Vul 1NL.6ݽZof҅n\L={p=d)hd- vn'C +`. DXD`TE/Ik[ l^m p1\.rXjuPT(Q9he30 daFAc cs-8E(Rppy|%^ǯ &8;ܬ%k/tVG^tB!DwfT Пx~! 6V0P^:`NtRZ 4VZ2&,6rՍm`Rԧ=?BmwG#Y`m+lx~x<2L"uQZI nsE6@x9ք@ [!tR3R[e/9Yu30e-}B{HUoQRcS>FTئH%by/jJa;g{0ַ$^YE]1 J_އ^H |tp]S|km-`/$ĕ`3_;- p>HwQ/WnenSF_!E ]&k_r \qz Ep|g.p%lk(8Tgi3c: `0\7j%~9pidÁ\~_H82󔊊@0q\5R"Xl5 nj z0ph= X2Wm 1| J-6a>磙wJ'7 ĞB lD).Z"1VT h,)m4mX E~8RЊ`.uaAr؂ŏy A`,y&Y$v2Mt(*  39I&"+:6aY0? O@+x+m>䕰p718W =d$u uU0>l!|)T1H0Cy'Mж=Wk}Gp_uf4q6#ԼO2TBDZOWS^9qݛm tT9tÕCiNM\vVF6691-u`? V TJX;)2#Eh) uLɦBeO#-@1 #H ⑼J{2gR*,//0KBP8^C%{R8z-g%Y۬I"{%ZB c=X}_g46 |ËP{K/_#/y`YyOVhcC,YF+6bկ9 Ғzf-gi7c-pt-ASJ틶Co| X=EJ{<|WΩvQ6aiaV g"\W..pNGCfl 綯 _= Z(m EIJv` /!odgZw1 l8Qm:nX| >MfKi:͌ψG%QP_{?Qi;MJ&4mSwgM X \ƖܩVYVnRcߛt&s7" q$_s6uޗ g#1A*#H᫑K.g5(0˭שׂX/#YY3kI xT!/LKŌ(׀; RxK9W_WN@{y #&,)1OC[f)[y asMJN/f L;aM"q 7M0i$t(G8<+ Ag]Ԉ) +Z~" nm`%lfѢKы2Ϥ4$`Zߕ%fƊ5_LD;|%f?ߖͨ匁dma6 ۹sEWYeo_= ͑z%Լ9Kk lg^:Cm>h[vHK eK@ ᯉ&UMB[ aǸbo4Si݌ѫL֊ uQ/{l`w)49!|3)Z]$F4 #+mftKT)h"$v4kb7;`z4 3FбN@Pa oN\0"|gXi+ykܹܸ&؁F R_2h րHWh*5HO4~y)t8[ʦaad+GX%t(b9Z`!pmk}ۃs$j0" #BL}e-jGpwtd nF/{Xm <0z/ 0ZC h^y+Û1|&xOAAx4rwR@j\qCJ ޸8H&XdM7:L j~>xt*6E`~)2u,p=>%6}l:FzE0գ~̷"9߄*!OL*sレsb_*(T¸ TN_L U!hmk~ lހ#mL׀?7_/R>2}s 9^Tfq#[ų/x,׀3D4jy>|Vq(#QIHAk g#ҶKy -JpkV ,%yZ`kux/qʈ"ьLx_q a=&bD<ы'eΚץlMm3/1kh9YZoH mkѪ |cW |M7o ޿{!E__n@`Q3 [Y 'L @J \Xle/9]^RX6F~gw2 '1nw_ u|WT ׀m4DF zfa0f[9~N7sXP%[plu깿F<|d這/d4P$N XCiI;o8iBIK # >8M[xADBzƭXKG{=fH[Cs!P)z`G+.+>>8&#21klFx9i) pD=0L9PȁeVfm5KM-n3'EZC*{Qr>2Z91O+2h( _/EfYhk_Vx?ǝ?w؜&~7͐Af2B/GE-D}0_RYGUP% X)e{ml#13!< *<.z 8 =kv (Pz|B4Dcx52vX0 "0t3`k.Ʒr(3<0g=U[D[J`<3ڂv8gP. hRقf6֚ٞJ"bJ :p 3aʣ)%Y,nbEϯWC U@j]g $,'~ׁ_nR gRFhSGjAxMw\N(~ilsLD@8o jj)`h\̚nHחUaZZ]axCUza,p 5`YjYYϵ$298D qAP63 414QfvWO.yU ܋a,B9<×1@0i=^P#1pӇ:[]RCQp2X_э0V X .Asw_̀;# `(a f )9k;D[ENfӆq,V#XK84v8 $N+7*r 9 l:C Z=%e:P%0;&)US!:e1dx.UIs26+ν^դHa{vB"ǟɿKԄ6= EϾ2ŜH 6 }ĸ4Z J3!J`1j~hJN:ŀ9{2UٮF.y@/FXJ`׏<] @TY']  #JXs/9 ,,/# l>h\(`0.@60*xw f拑懠sjhV7c@WӈALkAg\|Oƀ _%w&[g)Ea1; |aIaK9L*0t0Qlـj _}b !BbOh?7$)w5Q2 em> #Foƽ)$1-a35]dhOȗZ}3DX+6\zDYclAಋ_skXZcA ө%7έ4ߐLR)`K~Q%p(`psy stC(g@s7m?I:lf Q?5O:4h?,Wҗ ~"|^x\7;7|i!`Ka.Gg?}v8D]'\nޔk+ 0p- lS4J9ذį>vs,mE1l@݌o͂B<`U2e 5L2e^xw7bRw.hƠƑ6 (_M); Š'"8$˙Z|g?~<Ҡ#+zHjA˨IXñ]vDB&KA4d1h:'!0]CLnilP\J+]zK#g2_h BY8$<x/iKՆcZo:X#Qd;+`11苙įRox_~9KJVRQ7%.[^q߄- 7 y8#+Z_g4X'XS웯eX\բ'?xtdt{H`+$uHO7$o<@?d?#%^;y{n= }yLgWMU"g+1`܋ag4X;9<7Ӱ, bq`opx.w7a8빰χ + j.unEF _?-3A*( Z(IsmP+0#S7I!o2^ۣx³#7MS)rͻMnna`LzR7Ā\6 A#&aA]_7g$_`4g 3HkM]F01ǢU_Y"+o]< ~Zqz:jK`?"U^En_:U>|u# XN+GD 4vVM{&] e'Z5@ WF`-~fɲ,6+`__WCMp6h}mg-J=AKgaeo~ȷ٪1WqL)$o!0S#xZr*kAe_BB24'A0\Џ`Ս+ ₮F=ͮz&A{˷ZF Ʋs%,u9qߘ^WN%| B{l"r_jI`8juPQcOVLJ)Z1k%>?'sϩZA;}uA;+u@8nXtב[S_ FᯂXr sB[Thp%V%$ZKDoFnE/NºtɻwQ$-8ᛦ21p6F o2G:^y*Wc;!Q +J8\20SiI8VH62_8 ,{{B֡B5w tEr_?_?v?!.h/ސ@cBo"wy<60;/ƹ\ހ܌xsE:NގhchMftp0 ̌uk բ#`\ly][hC.!sD㻥t]]$.5ߑx bt6Hl|q-`v.wy|U5WFn!W($Ғ銎韯 K* ,sIV쮟+_W;]ǡ$ @~}u`vdI5X2~·v{: 88 }af4j5 deǒ SK,h餝 /eO$`}'d:VF_L$8҃0,8 Ar7.WMh2T&1#x=1`p]6u_cV-8 CG FެAY;/T3F_o7+G RE~ήd8,h ;P .u<]КkJ\[eׇ7>me6I_7ev1r 𥨄~Ql fpo@0^h֌_7'C' @0spFohBP$rl(WukD5n|RqA[>uvrN`Ch]s'ߺ~]-=n`Q2Ί#f߈Z^MH$>AT7S(2k}_4099hMCV!M+fT{KlP9kb.WA]g7]cvj@e {qAg,`(ꓗ*d 8_6x'|RGsz3$Ti9O5Kk#ゖ+#ݐpAǀBd5Vpʵ ~+~-+k^Mgi&NBc_CtY&^ۘyS救pD-zٞ$F|M 1!Ѱa dC_yBk 1i}}҃qwThFAk ō{ |Ucq\X]+O 7/^-\dzv\E{F#XHSbرң< ;u--ZwROr,w lݳi^RbR c< x}V4Q@qH`;ͬ 6`:0=˖u- _*өݡFY :P<*n>L4IXFnq)&^ /ϭ XzPlh M!n R|ZM̶׮y:}9Z=`\\e_8?a;snt?WuwA~(so+WltE2+&7kPKsx9EP*tLm =!`M &}S3 \˶ `k }'CHؿ59+&ocOfbES: ``:,K /` Q&eX@+~X5;?)ہ4B6_GEGvL\ p7I X~*]A gV53<k1(`|о*]i`K5Klg .ǀst [4<VQ.-F-wpb@@ˆ- 5(I@ <ЦVCP郞0\v<XG# mKtB_=qIR"ٿ(|yՊxsW9p&GIƒ95M@pXTe5= ~w*jBH#H9n1߲*W0;rjYpg?ʜ+ƿzؒiҿMaQ3p@ tA2Tk+rTj/p$,w9\P׆Z;1b3sB>W7G- >h1Z#l;NUAѠ&f-ĨE_ivh;C;`\atPedhACKuA#1;j8؛kN\ŋ.%)0Y qA 5u(zMBz60ьaevcƙ7` ؊Pz!)ъp͂&_=h<(ו 2\Qk!e[в:2?h;tÕhvgd aC2,*{{S|pi|4p·3ېm 'K㍚0.Q#{1=m"8l/&ptE¹rM;3(v S;\>V IĀV}rv@ۃ" |VT I=U0wV^?4?VO]%՚[(؄p@o8o4n$:sPܪ8_{z)zf$,Qx0~ ze+NJPA4R?ZpYt:mDof/~Qث)Б߬вIa72u1:9mz7]Kw[Zb$YA$ѿ@*楖ֿ[CYvV%e$Qܹd!QhY)`BϞ%YehB!+W@X%XM_?չ aONn6lLPUi#IY}  %ikw mտWk/pw gjV `Cܐa2Z/V/,zX&V!-;鑠 ku-`9ue8x1`Y; YО!L:$N_Xpx %YTJAW}n2,UD0#z09ZW@PS?Tk]5hˈvX-0E.ߙ|jo%k3QҫlAqj,H_>gLV ,UC0;mQÕoMOJء`kBnn#BR+z)rE;/L'̄C~KRq0 Q@7nW9K<$,7D0Xn-cPR &a SXvyOA`.Vk& !1{` &zǜ*,Bb@%O)ၦ?_ eV*5 oR[_짏F+~'Qb(`pn(=?o?CHR0V-`lxY{R١O$Ǥ C%oOptldIT'imTǁJh/v%Uo5~-7D;2",F,EMbYd!$!j.&dMq!i 誑 ABDY; B={]Su~e2IsNz^+~{w'x 8nGw֬dD.zb&!}SL'u 3]Ёl^A SsR 8N##CUdK&w|;`J F`a3yGP1`[wo]h߻5ن Dh*xπ#ƾVnOCpeWS`曐\U0uPJ=s [4{ W{>,YO"n#L"?k֠OԉAdXKA16s>pā_gJp>s0|@mRƘe{ ZO—rX/_zi虯c4etB'[iM"zEӼ <`^:L6,oUO6GC0d`Kף;~N%Tױ͂mJ ,!E/̚v9l7h6 kT߽^b]!#\f{;x*S7o.QԢ#p%>'^jUުdc#FUkƀe@xq?AC,;= ݨ߱ *)If[E0lRM ¸mfbkLK߳_MZm˜3)'a$pv|1 nί-sZw0#ׂfo죕'C#ʹq9eX%xiL:Ԍq8|,шb?uT֞n0lAUΫ`x>;~` D:7+`8Ъ}h}ǫ0F. H#un#6%`Mr =/k`])w o ^ 2r)q]yav Kl,@&[̟kFntLlT(n.X;?ߋk4&%W0" \Nc_t#_BO>Nǀ[>yE ag(>+'1c@cƜ]V4hBXP<凯m%7b k!m,W&mFS;2{b@+̅*0D,EB ]-i9^IO{邦3+ns 5­/[:l)\՘6 1`OmH~@l]L o::()`*F뭇xL mHLV—>3 k>`-Ey!h? VWfs)~?P ±1;mRHoԘLCs3)/;RͶ/'Q 3iW&|@ҺѢ{_ԁwqLr(h~WEoS]l ך.]1 |'T`tx\70cK}1b{[/,o051鷀my^iYn`@̟FIKP fW6@4WtPS?)A'N`/ȇk'0A. <~e XUVB`{ON64'b '`-1Mb Lǒw(kFI$$U'3}G@p `7(,_<[0+\k@R/oNw '0c@G/NG{{pqA?uN@X 6@7%aYV6.iZF ̝ٓǨO<4Ỏ`,= 3+} %2nIDgmLic14*%: pl—Ԟ/_ڀh+a9UR7Ι>?liX-r'2~#=u_i .Rr(xgSnѼ|<7%E_X͡y 'qꔛ&]Zw|6gR0N0~uH +h$Fq9/Q{0GA(_ѰW #7-0NMfĿZ%C; X `l/7S2VD^M<+J`ӃE6Ja%0 Nh} x(jȎ!X7_ yu"vmM谒%;KD$pW{m/.f0&B׏mܟ \)`rC0Ӑr+ZT>P1FU/O}Y0ӟggaa .9yuEJ;8\ ӄaFWZM2,?X%&v|m}+Pa|R  pM~4 D0#4c)|R+at^]%JLVsXDӁ_b]F:Ϙ7"Vn}cKѭeCiـ]ba%5B+S   8\um/}'` P_SL̪PZKo$.7dcTȾc.h|: fX0 h$4U.\־_8?,}+}-ʋz_z__"/-$F&O(=q\hւ&bY 8 z /CsL3o˃ 8ע,͆H%4l >Ӑ%_e4 Vk `rşk3hb2x} amsF<;ܪjnd`$$> uVJW#ab'`; I` ,Yض1sҿ \`b T (у \jaɫ +';I`|;*ᢁrXNRTA{pʃ6,JB>L>Fr4 U)`XX.?C[%c^Su_Dai(΍pUmx/[E 1FRg4st2U+ԕYZB@l'/z㾍=c-J'SAa˂ ݇0Y?Eag+S>惶wG܄gKYEgi|b`U f0)D ]oJ|$fF*8^b4cM 8Q{foɃ~kj &IR˻wf`K>J澶le)%A#|I[(~+}bo;޸Hn,, E N/t̴<6l;0v$UOT.i0 Gx+vZY)VR!\+W p@0hM`xի`%L]n|‹hq鼭! 2=+F@le%/YS{[ #m^/ԚL`kb֭1ԋE,=O][HSS6Ɯ E+i+`f@#=;ѿe%+29<ȅZ-"n]Z9֝KJSCτO=(.o N袀5,MQk8WAPm㐶#Ww= So ^sFtJ`/ ,^]LYܴX ru/<>e:ч@Kw4ft(+\Px|N}tv2V$ h^4-(M5$ z R0zL^9)m/ & 2&;\~s/hDcDK ذm0585!NhGXfW[ :%0s$ [^5\9},64y\,A7&=]?B'$bT'}ε={M KZHUV2ƒWѫI?&$4`%gPQr[y8^?~w-~ݜ6+a߃tA~ߐ('EÞh6l X?g(&2'#[ e_Ÿ?W{{D={H#W+`! : l/3P^Xy <HfҰ>9J\x R/x x X² 0|YyjA3 >@Ii&DYVVJ[Q60*`ݧO^5Ե5c|Oɩ^s:FޔfR`WG@ 6!|_kICmXrbF:aį÷t_ ݾm}X)B*T6EaIWט<+ xt3W6؅URI/[YbFp`VcW,}AQӚuj ?|3*er_uĜI_{߉Mqהgt&@ߡ޷>94`op-~[kOGrJX1ekƀ{eh [b~W.?[<isM6"yV) =ߡ q:1#h3cj!X1+ZWgYn@+AK.P\/Z /ndp޼XҹM9G YjGhUu1V?kjrt$IK sZ s_o%(FKb̫* ̜ 6~Irs;~kotg#0"ni>"X5 v/*)_UL ؓ_ Z bT$/oQC7zCJ3=r #x30"'ЁX\crAx`CwXǬksP_|?_=տ[~Ӓ0%س;JNSűj!󐄾hְq-E@}g—7FΫ&s1htUѭ p1pߑ7]ɂYX0!UM۩%>KkTc L3.E] }mR׈ny &MtX6ϊN ;X wSHםi1VkC8jV:6E;/u)1Ϡn0]ܷ8P7Fx\eU1b?^)U'1Z:_4/a^`V(`XBrK4A^D\z](x!|/@G&̆q/4ka6wtM1K?(̰ h΁~`d`_߷^cQ=sHZ6?M! qÐHv{ {>눷)0 #ѣ:ށfamb'A$,Vl-xjjWә+gmaqJ0,vR3"kМr-aar-]fԤLBzLQL7WSC!z7kGVjԨbM{`Сufקrnɜ 'h~GO苙2 HkOc%D{`i7')HrQbF1AH&tF o|.~,* gt D^pBF`A z Ftv"T21aa +jQ"Tny ;w V@6j$O{mCr7AC5(_]3L (_0]-x%l&^~; YXh:x)J81 ikՍe8rkҵ?b!_Xgέ(;"Zɲ +Fw1UM;#*- F֖dUmiXk])h5JIdihIG2sVĜ/Ű^.X KE̞@į(ZY"Ul+;C8}`k 6i @} 7f .La@0DR<؃FW 3|'܉4,4h;SyQŸFX ;&v[mӀ+p$ m8=UJ+ `! 0fjQ|xe9Jr(ѡ,L<?vI*5on>w$+oEXØr'/WܝƄ}0wǰ9PL)T'? z3|ϜG~aCMGGv x݂h4WO)FK v }mm(E],X[0$0LpAX\d' K1'=0S(wrqɴ 1P;{0R ?0R%`~oK@۵3E ֳ 恎o@]KCv"W0Za< ĮMžQ+&CbVkzexP&pbEUqI3@."X7kidX~-v50xTc[_OM%JY>ZZ˻u{ҳ, ϗ;x.zqNtqY8hҀ._PO;IkZAp؄+YD6$G,,H`>%z *^&%;+J)VuKJP j2g)Bd>C=Vodwczʩ5Xk8_|gԝ|t:]3ߊ g_7?{ ջhF40&`ƕoL˿;0>끧BC?k‚ ul+sy6>6W3P1`CH`oTi߁,htp`a7+o4$(en)$ ϽM7[s+EcI~XԛvzoWg:[W>28n `\Id1d; T. c0410wu>9byNC SK7rQ)kiр&P ab7QƊI6 a\LR;gsP!9in;:4^BUޅ'.y޿۔0Yփ'W]WZ4~NR\1lV;A1O}_i&= .=4z4 z}L6`pߪA{V`-FhEb%\@0 >~QEly7xzHvR̂f%fpWcoL ng.? I jY23@cUю[]b`y~C:!odpN,R !̕pdA QV êD}t,o<so_.v蹐;f2 MKY6KWt2\0TV v 1R7*7g"& j{MH[2x; ʓv2V,mW"M);<\@^b/FCgl,ɽ# !}1E鍬ysZ0OD2;~WVAwN)}/qYOͻE "aE3Ln+(_E/ѣpA9cw0pw"z\z\ռA^kbyM w"20|ʤ^+v*"eȈ^}H 3 ZW9]@>e~m-R )t9+`֊6mOCV@![#N˧:<$* 4*h,+^t;cvG%ȿa LYhQm@/vs!y ?lkKkO>jt޶ 1:Ac>/w UhIPO,4/E:f/-?H&֥ F{w99u9>G0 2ku3 1öNg KfRZXdS{.n$ f59{-YGGS!f_FFIm >^A^²|. Nhy ` /q=:qG@ĺ;|c+ґv#n$ƅ'07w[bp %X x7v4K^"{fµUf)ʅN'zM6eGJ'i N *WԖLBl}1MBױ`qAa([l"HD)X=֨CTNg ৯o<}vw=>H2Y@T&)7*`xn0:pH%0upqyY:Yk2i'JpESʵG%%o:QeS ҚVz ԰7O92 A`U[闁aWmuD7ZįW|V07-,Fpbz~`YmX/=x߻. pJ{|?NV[s_4&˻v|7&Am^+`Ze&5$6ՋQr_ޘUCIs0pD}$o1(`o Q0ցh8}ի. `KL<K_7*|4sCW|':+V{R.vcU0kqjh1\()X=z(40qR&[1FVDE_52XBhFD,2 # _Fy>&:m(!)p0$0woEjW $a({?$A"Xw0B l-NEd$26lnsW !`k_|Qr,)*`<ʰ^$b ;FPZؓT &_owe_z I`y>g[#Z5&a5 X1FPP4耯'ڈ~5: ?} ~$G9x,ޔ˦w4$#qtc;.ޛW} 0RU3c}h rj["/qjwOa.LGYwC_ iC*G^l#D#4Lilu㚙]۱K+lv\jBm_߆ҙdA fc;n5s) .h# ϓ Ӱgx* kUp@? L|b>Ƥ`V `ǯ`.jR}:#Bbw2L}t%`ˌ`V _L-X4nv7Fב+`,!33ДBX R 9sޖ㐄B38# mHL]Kb>ƣ&,* `!0|0vtP#Ta1Qߖn^X%t83J`\y+ľЀaQN]w+(3K?ЙU]TVô=/E݋704K' @p NAV\ xZ޳c_Ȋ/ Upo9!f|%0_Zh G0Su] ~"ZLA_`OU# ,~R|ϖ\)E/2AmLrEm*mU*wq^ V |>/8m_ =X!aX/5"X'w -mC곰睅4oͩ+Ӝx9P 7_Ad:?Zů60\u}_YX ^DmH0 Sއeg%#*mYX++q3W%:;k;Kq>xq\a`W|t1*o NKKu&J-]\c,pO ҽZ/1%"}b|Ele64:jw(|!nE`e1lIst*lMCx-nӓ* Pg46`=~.  -ϊc'gb`jOPUAg&,ڍ U>Kk# i_ V_yiKM>tCPbĜ@M tfe84 a<1goPrF3*`o݆p-ywG5ASwSzF 8b3g@': _U)ֳ < uĀKbT̀U}.~tqa>=L!?_ӨetBժfp@D޴ Z \ORi=ig<C0hSτ9}ׯ@k 8#qq8l͝ {f41&_U X??X`,[Ll ꖿgB?r |U! $XQ3vg X tLL[ʉ6BႺ7 k(U޺ .V,Z.Bp?5ԯT Dhzu(0726ȉ^eWiH!0Pr6`?g<>__rFV`0*p9V ~-J70d EA&U+[ `8j-h|C0={BxœH3ؕU!0.VrYLQT_9%ZMrxJҼjaHd2V5aҴTe."`5YN] }T3K m4/.ʭC2f5aӧCuIy1hAcYGZt<> ,SI4r"9$bʛ4Æ(0".|o{7ճֻz{{Ι$S W,,h ,s[*kIct%p,_vVzF'"x8R¤(ү2Qf^63 :vv[MKjۙZId[c*իNGsbvKscd}JQ0kh i&ux@E)` X/K{ c &2Yox_tZ 1{J?蜌Ԏ `5->_5 =E2 ښ]F X<\u`ŀ6P3\r9Ѕ A0y%X#[ w2)uS̪Ԧ6" ZT.ya `TmUL2ʘ | OBoJo"7(eR]rp~ Ƒ-;M"ې[-D1X%+Dc!0*`2;wqbcW]AdV4*-$Gw1ղb+^X(X`y.iK9[jcN2>7L߳8nXTp`` 6CyWN(i;<Ҫ_lQ Rq7 ~`ܭIИ}تA ZF)E!Y#.Kq< a[r.֝1 `s0v*`bRFaϸqYS0=+'V.u0Ibcoiݠr7r[u4rؠVԇ}HT0=hEcK µ U5[\Bq[n{[ ,g2i@SVΤ&Ja:|aQ+)1+ćQ*|ѽF~ՓRiZ% NWs8ɠ*XvA `ݜdO YX@ϘӐ`݅b 1ޜb&UA} ԈVV mfN(#S80\18,h*c=J z7~\fa1F(`&V5Ң ^j XGW<%O"0|Yr@0ث0KQqŠZVC̽v5O}`M;W!U&m X= x h#ӰE)p<:t9or,/Xs'DglîHbX)VY n pw梲6Ӓ<>!J#v銦k`m@Qc4N1O6 NB0Z(`ۂh1q ;%0Zi< ^ho:=a!+ ,W,ۚDw`! +umKf*w՜iE5c.!Qh_4WȪt ԞXϖyWԿҤ3LԾb*`X}0"X&~GVTh]0=Fi_PNzTD¿ shC^W/a0;~.h-HJ଀p: On-tBR0pYONׁ^hfIIץeW־İԦT/6z8_IZXq> )vuRc"?"\=r <`o#,mLXrn@0 lw=Ŝ|h}R8|/0zᅯ㭌_=JNbn]e}PZoTelYЌLfuVYG#6غ8U w o&|c0}C 4_/K/85X@ @ n;#"XLaV[4%0?zYM~u}F OC+H` xSފBXM& A`V5FΨ~Bʬ}5QzQ+ f]ֳ -C}Lh=!$q c h `z+sR$*` ag%VYZbPF$;0nz߰Bq~4hul^X8e(& T^*` fU#ː\zywk\yV*i㨴 Sk:{)Cv8k(0YKҭ^&G.:W^i`%pMֈCv3\pmE˨C+1jaKa0sw ,z 7uH"=NcP/z|gըqЕkl",/C *H8y1(}ϊرJlYxa)[lG: >{w{O^f> m/ A o_nWށ.|6 M`5]Ѡ2L}HQhj(YZ0LpUn͊6KY:F5O?Vzu/Fc㉄p>P<8z^ௌ>iqšhAh9&*oXVlDh[jw4ew6.<* ͸S‘u@C|wÈaNMhjT{ֆPhzWJSBVK EZM!y^C3q0FtG=:b,=f8WoM2 X~-=󭫭[EtBG4j0C`(~u4!w ooI_ټgle?aEgYz&CDx=-kOЫb+qڐ:Dw]c1 tel^rh0Un1`(wZF3.OnΦpo$|g^#_Ɲw㑖YW;b5;``n ݤXl MZ nPq )e8Ic@C `;nSİ !Ekֱ ij٣ż~^/Xgv!׏}l?m^ɬ^x0 p S2\>w䯗ੂ/yݠst^5_ H`y| oP&[7kb6R2. NDG i}J`iB|+i/ };as8@~fAS[Eh&a'TLf+ Q@eK&FJ邮 ~eBvRm2V ^нÌUȬ(H 0xml[-#MQ_#&Vqk/pPZ9N~^j\LN7:~_=_8(Ez`#Sb{ׄn:gBnv `mdP0 F$p0+i0`x"$=}H[e*Y/op"p{$0ZX[F t8 /nj`7jt.Qmf/KW_K]9ٽѸ=z` i:$Aͽ<W)tC|LK0Awn | TîxG[Um9wFwWČ Xؼ4 /&̊>h˃;-^(T-EyUᒸIoÊ([սjW D>$*`;ִҌvRmYM*n64 r-P -i0cIX^R=PUz;5~"ȃdkG_X"69{͹~rjH2Y%թ3Z َRvBW|V:[4(x0R* <8ܩ%hWW>6 Vk]܁^õf`h/ lXSS0ztClWvkvP[b0*!Cٙ^-,Ky:+ |0_I BP/Gg'b~.kNDeQpa-1Ie.ZZ#6ΖZ9:GYi 45bx/!PqAjW’n=]!;yx~hM&~?-w #}Ӱ}^b._~cW yw B9 +Sfmn^_ ~'/_?)f_9 {v޽z?z[W3ۆؾT"0RP랣u{s=0݃Dl}}MrH346f5O +(Mw+eP [{S2(0[u d_6J~Lr#pDؘ0)1 vjOPULbacUń:u1ݞ7e黑2]N gX+"VC.֍D+~^1:p~ߴ>UĂ p(`VGXG-v:/?5ZGj<&*._~>~# ߺrɅC a`,ozܜV3_/K,)@E}Aa7y,]o{%.m `~+N%~I&<< Z\<qBy ՠvxM 8 ݅$>SI#7.C`p%}Hrm37x _3Ⱦ6ďZXZ~yx$A)=6`"*@ _= anپBlU7rV|C脦o\̟9@W1LlX%CFW6 g"KXIX%5C!g'"MS{^շ yD?+FT۰P uc(`!0@0l~mGa–_H`pFp"_ n(6kԔH-y/ +ǿ(ߛng %1 b˿#}1zξ}Pn] ڹ ^[}QZ[ ¶ҁ_7rhֽ*`%8FBǨ1՞oћ0Lan1Lb]'\;ʃ\8 c0x ?8و,n|ℬ,qCiX)MEa7Nz :ݬύ @R۶>h!0`9;~ k1\?(/+ {)yqt'(l]!oZu t0$)Hb2%И_G*塾ÊkM %v{eg _YXw8'Aw(0!Lkp+YC\Tl>&µz>!0 0X`:+E ^KC*b>ys{OQ#+`60+1+TwB/ScGFk\ƀC2Λ$,`>%Qe"7T Һ|Y.T3} 5; T_ ekIWd 856=ٲ?oyXT헅_^f?V3lQ`*`5{~}Bl4;> j*-0iW.~,VFaC7wmۏ_C-*?*`9Ǩ3BS}m) 8JHK*8Ucc [`P>P!)_"~u@' Ea` 8JQ4KR bÁ$pn;?+lN?%VY~!봅F&?:luqme2-9_y$F띆|Mkb]V߅ņM1U/`+rrdva^[X,:.w-C0`B+U+BzzSw`:{ %^p7,{PO$aI}Џlߎ⎸._sB /l`؅`_K`O]7cKK `,Gjdc_} Û]\F޸ }!\A0x>ڞDg!|eD[ȵ(= W멿[5ĜD( 蔁r(~z5  n8L s3CF}&[ƀ|$nZ^v~ƪp+`u/_ę U8tg!x1 DZT׽ 04YaĆ_q@83XE2g)үhxJiW*(UsldspN(_9:;HJ! _iֽRZڈ4V#I^x 5;.OȀ~4vk=fZ50_S7U0ц*`R6lw)\CXVo: Y:UҶE{bqWP &EqL3˭G:<~XM*UT܍pWU :IXnq:xƔnTi!.F/eEdlvBI2sߣs~Uk41 Lu#3 ^ x/s8k`- '9A^H4J`0)E뜜  _W w%;r~]%{^՘׋OiМ Vl ;?9ؒWU9C0!8 qyfk> Kf$L /},ЫvWB`1#O_hw|GwNBK%0Jg5j\0aooj `A𖬀E z] #pw%^X;BIT>u);Ürl9+]P\oU*,,A/S X\ `I8}a,(}a{C=l`k3|VqS;0T%pGV|I 8FJ >isw+B0%CR6^`%rG''6m|R(`L]4g1`Y:\%rtmC;6 m([sꔮzr f"ddͼJ/1lFLbFT.Klsۯ44L8<êC*``/DaG ssd-"VCFU"nԿ*~Ѱ$~`5:ϧ}HL0Lk6a[ݾ c_sպZ43>&B vE]W^.kI/m$Zl=A}}ߌ&gpW2xfX`!81`TVMnR{1`Z@b]c7= ,\QHtbA7{m`dޣRUfY  Vo(pD1N%Y1`Z[9Xv+`~g̱(sO?M’!ƍW ;MD ^Jh,Hl_4c˧aYF@(/+Z-cB/6L!=3X$h(`0 Sl6-GasjA`%!1SW\+ۉdU7h\jst K/xVC7)Q8B?8q嫗--ݺ%5Q(f*)DpV.vxm =;e+.z`wk O@Zc'7NҟǠ} 0SvpŋO~TE X`FcMk stLtS24 .Lf9 J.ƿ C<Uw% ѹf>A|Ϥ>i||<x*W)-(eĔR<&s wƀ)XmA,ׂ3pVuaVècOo?yX VcB-etonIR,.0%0+{r RIv:tA^3֖, &,]m6SWV4{rVV>>h~,E֒ve=0*hC_ `B?xI`c4sR%_ A`ԞmH`/L~"4޽|\~ǥ%~ͬx3߀͋neF-#\G3ͫIe+}W".ȂWӟE~hUai|P4V0@  諃,*`9 Ǵۀ}oObqH *qYѠosƒCTɜ(`/mEUZ|U`'/ >i=vL4O YZLH`*@1xUfLBc+/us_T8Ӹu-iG4뽸I&zy}ɍ8v6ǒru~c֨Kٓ0L#K/?#ܓ6v*NA0_.̎ғpQae$W ~TRv+*{TGvtCԞ=% XtcK*=('#.1W"q@ws7i coW ŝU0r_Dsqlk|^/D;]kƉrl7j௹5 G/oahWzi XSXOK[hxޖ#z廠-ld\R7YLZw!߸r5_n64 l=,2 9%If03@6-̗h03r0\%a]s3: "]b _C{Z*cVfZW,5YEDvuŒsn]]9:0;[Ϩ1(+2/5ʫ xGhѢB^1bbĄ!Q(Z1 L&h*mX5jTP4'C3H;&n]{{{Ι:m ]N'>99/oƧ/^)X Xp-vct~+{d;\M,t}!w=@G 6_ ?Wu?#S G: # / [{m>ޢ6*hFc㕊&K.Xm뀹 [M0 l $lS-q; };`nC$ `;K"hF ` ԃ#GǪ{uODi #̩aPi;Ft 񽡎ӭ͙ޫ;NE׼ꀻo{S=ؚ ?֑*@(.Cˤo;yr!)]<괥/?`; Vw(vrp4 ´ keАR@l3lgMAkU5!%cmDj3{{ݷvbQ&BssE}E/씮˸,hK1dï@r/bٳk;D ݾ¿ӫWVB>B9b1g+EG0PSOaޒjTL A^5RK #vs+~hWA|Yph  8s]dmoqqR퀝+&?TJh%00 `xu놹_Shl f_ _A!"8P`µoHR-wQMRIq>V;%Kl"iFX![8`E,y;e7Nh;;o4LW %)hs0sCۀR+\!7K!f@X1)/ _$/D Njڈ ,/X݇#a^`}.st&n͜gT3,> .^X Yf}C BnkT xÀ#1j;bP_Qu߭}q 4}AL`!to`Ơ; pۊaO08Μn:`s^F+,{}岡0da8$= Q&^.O\A6U#X !5:ef?9+75  ӢlB/ #/?xp>$X%;;:&֥Uۋ`p5RњqЕENz|zczm.g~/O7-/{ͻ9`#0LUN`vͿ>0CWa|T`sz1Iw2h`5@vbv,8U ,-t$V&9^m5X0e29`wkgA8v"ު.&71HS [Us)3W>(`(ʨ %kZaQ ]O>c2 O/şN(QB^ $1OVW9wLN: u) ןM^_f7;~OU򜂛^"t9kKH{X X27#}aY`) B~ X_W;Q'X$7WU}_)ݿxvv!wyk0L"ahBo mˠϦї(:nբ׈*8?<Sp}|qs:0}$ rZ`7<`3tq"!Ng7%(zXLX800mb4pqd}0+o6lŠ5hkKk(8^CeuQaQkK3t栭ֆ 1hq= {@[o4+W5ƇaKO*3Ƒӓฤb+xQ -XZq*C(Z79WtG^h]q6" C}fO]}5*(]h3'unI?ӮQA8[+O[v?6`|H+u8 9#GJH4 hu\dz7 tA0eSzЉ c6jR Fg={i; !~TV,0W#3Gskȑ=qpT˖KT>`1Blj, ۦײ6ya2mgjJV})n9LywƟߠ!uH?Frd=pww$?8v9/ ѷS7`[h-Saoa =z'2qX7#.Y?;75u^qd9b/eyav wՕ~>0hnj^ }0&f 326&Rrg/h׵O:_ ;354R\ [1͊c0-hl= :6mzN~(m{FP/3  qzx" Y]:`ZT4x[ ؄T1X24leX<saLilN'1 =LdQbaopA^zA+}s[5ڹ{q`5jl/Egj`'aԛ "/2?vHJ`+I$UHO$)g935/3XQh>e i8w($&xcW7KUg~L+~m@c@c_z7"Xo-__Ġ~S W4/*p'.w `@Ў_׵Uf<$I*~e4 Αi^y㯊(}6r/#-Q1l.I=cYBi j6߽?cm0L-s VW8Eklc@X zxofB0ӄU|?+^'//%<{_A9h xo"fW.xIxźTzwEBZz:`nؗάm_f)&_L.G-B5l'33> l6>  c3{jenO3 V%dEwWOogpЉ,RV%|BsǤWMsr(!ʾE8`ۿ}w>9y\FЂ}a_%[!\8ಊ9wn+dޗok8,p.UX9 m3^1\\?`}A`s7j0S^|Պې` kcMЅV\L ChK&3gʭ2 e%b0sv) Yҳ nPk+@gV vj~_W:f|w,&{[>X*vm18.wA_ @mD#- |S 0`!yCBrf]X^9`-2q 6 rJ]1OyO; b~ۼ(E/Q" afoS4?ЦC;tu{ݦ;b4ɗ<,P+ZpCM"IkKx/R6 @t)~D (/.B=ZAC_Ϝ:D~s$pS@-Tg!=CV274Fqn]Mڗ@ g.T !hVAI0SQ<ع+#;z.7Z0oa\$imhoӫ,+BgOL/AGv1k[Eo]9H }"1JdX+ecfqsZv)fSx'+ ,9P˟!0kOizff:ۄ0DWy Ֆp,>-LX`s/}Ub?W_A2?v>>]hM77Ck֬yoy~~^0:/>XUn{񤼕CN|T_w!Ń.ecU Xp8s0K瀿M )!WoWE]2h`DBD倻xDXKX`DMHr_ia >fNV>lrP"JBe }Q/(SxofFh8 lBN>0,)W (l;pY`瀫>B6CZ=@E6yNLmvElf[e؏G[˨WڋMFW/k:kܔ:J{8#0+~SOϔ_ŧ]{ړO]5 ZzYb> V: eF ʧp~7rNeuQ/TK(Ǜ1yz;o9U׿y'㗠+pG} 4;Nۛe,XovjUh_͒umaqY7@8h-#n00f ]4!W+uݤ@lE7lQ*Loي8`];`7n6ם7el@U3󗾗:(nnrt5C FZ',`n8`xCГ^jaYuZ]G%϶ 耭Ě0 r Gii9%6t<ۊ9o'.+3Gl=7vODAJ/ Aoe=.Zsm ;d8r%yc|o6  6 h= _<)~} a#ǖƊEX2D^ @0 eJ C_Fpcuufin5޹C6]c}wyxCAK<, Ϟ^Q>)I'W J^zݿx`fgt#`vuW Z/ xLX%JFƗl%}XW `H},kS$~ ЮurFX A/k LړApo>Mt;q`sP__\ ?F\,%TF'lqODXkk awsmN4½Ӗ o`bxۂsHb-bow/?:"!f{] ΪZ$VqRGdLkaLŧ> ^||xr[`0Wj]H 6oRIEUl+"t -X,NӼ5jvx/7_= xXA{[ Ἁ"w;('6LGWCkw}w~ `+u_ǧ z7;p7 !hYZ.3S%p4`!C`7`VUxxg*?gCVҗ&K q\Kbw78d9`:ۑEX&9Q e5 \M=859W~ 6j$uˇ{j~ێ|俒.[Ǐx354+o(+~:~ZaI4|X6B/Ә3V^~`Gx*Xཀ.k2S' %ؔ]BL80V𒼒~" 8yhΙ50<1`sA0:)8iwwyh'CS\tnqw_À5C/Y~| e2cM.VVdVC41 9y p}s/!!ǘwb:v/2m*yD88B8GoҫsRW0sbQ#$0uJrUfRv!W8rNct[EwM+yLP=TmF84n{g- }$CUQ  XNH=.^G@怕<:4pyTRM|wc@;mڊx `^̶uefpWyUV }4GdB;!ܥ:_/50m>UPV9Zd8_7荜cyǯ7s-HR-3|1PL/;kYf[L=x,Y9`nsB1sJ~Vrd 'd(W KpNVK_0!ww [ $vrl*h@W r:i|pquL`;}2)Fck3l{ڑ7O0.\R~vS|+>9`8}P >$s|9g$K ]?=޲qH 0&E.w%ެoɝ=&Ϊ 7߭^7"ky72Z2 :bC,'nx=", 4(5 j6'2+w 7j粟',gxٺ*=oiޛ7R,/pSƢA@F` x넿`/y"]fŲV89NnFj{0ezvmX@GȐv@Cp%R[EuLbFC_[G;`2nx[1C&I4 ``z<0sy!_k4KkcB[ ox]>07.q#yΊ#0Yg JL73r7,%逝)`b*.=TU:Qq ~Ša?eИp];pB>y?<*zk=W>Ͱ?U9_saz!3Z+Nh-kUB0nD(˟)ߺ4I)k $˗*y.`:!̀/__3cFL ˁv؆ pb_[0d 1;D`C\ۈC;8`#+ p$:`F;&fVv·!v7U5WPw>ʺ`_r:TXMp`$ x6*0%`o퀃B^" $DE4x-pQ44+.9;"o9ǡ~NS+z4ڔ1'1 pөV(Gx_?SXqeE LߎͿꀝp⁝Ӹ\^44g@aÓ8N~ n|Y~1,r}4Wu3:[l^YyMo 6$Jϟ|d/tx؊Sx/ ؛VIL\~e86yW,?} _>BfvՐ-vIvn#-]p &!-e`bwfert A׹$p?SB怣 &fc2]A䠪na} &F uMmۢ*qֶ—_ctضD γqh|{UX:M)h.G?Vf]vg?xL~X]0>*I~W[q{! E0eP<}Otp311DF2JF79߆]T4Y^A/.k=Ynr{0 Q#/ ^< u⁗|n_{EXM/ثz+/{Ƕm8j%XW+/ӌZu[W^Z+l%uĘ_`zr/Utۊ)ʣw,pSJIdpsCfw=a!hH2p=0{qېBA:6, tޅ6R,U\8|O&<ܴ͓ )}uRsn%a^ ߪfj 0o}?1$}~Ovv|zЀIH4I_ԉS^ P 0,`< 04<纴߇*`ugBMGqp SB_W22+—fH ]ׇbq}4p 4"6F_h(b)-E~5rn+v) rn>"F`f3}1\^;Η:h `n05ffUM9߇gv!vϖVX^+J^IUVg'y&<,P0[ǭ= #;`nA :y.v S = <!5hLksB7V:x({G~o#YNOl1g/m?_O q=BwX~ƫnmi {iayE kWd/ر^IF8=X6uf{o{cѮ_uA=hݟXټe卭D]ɋ@7ZL=~or}///k+R0~OpBSBM(*-0` Rծ__'g_-6ޕ+zI_ω~,Ck0nm/ K& A+0P?6,!kLo*,SߺH_{TAW-by&G870famHu4"hBMq]q6MuSz`a$KkmyojZ4ژI 7XXBr6Ef tk*"_k05>}'q?MZ}w0߀+|XS>΋7c9PW,x,:"K{P:H:x͇Y_FDJPx14B@^,/ _*~"h@s/;~(Ecg'4BS(˝5/UW;JJHki7&}[q셪p_2z&~ mt7V* q~Vrn mt|bQ 6c&|IfAVJ\:s`a9he5~ p[x6tV ek0;"*_dTkm}kn >XX+-M ߧtX;l94}򩝸yTAKs$`Htgߎq*_ ,0Q4o>3jN_|V^=/:aХDշw<?6fzlVxj-˘{p:5+y%K :6_LGEQ-8*h_N`:lP/\S/+a4yۏЃR!_Ʉe`h,/"8|pc`'<4$~2QHU'h=cs%fмfCd1mE<An:ht~{K!f', A K{"Ԗ~|J*ӑ$#8u-_3G{t+pjдEE% kb.~g wkcD)xނqu4Tc+x(|y|&|/9!I'vv?V^UX` .J csA:A mZD 8hUIMNBc5DboJ5Abg}g9V}~3Ji7Zk,^Oi~1=+> ?U_#a 9_ >?UpĜyRO_N*BW:}]BT8^wa(s1,q_:&$oj WS$HWO_`,`G_0 &c60Ű5pS4LFqook+, ndf_*MGdS 9W^0lLVF^3/UC,Zc',J zL"G &\x/]V:&!4gǑvPsNhc W^p|N?įugV^6f9e3u4+5aj;|8>~E+scohw|^r-Q,xxM:GM[ nboL\ )R)|Ğҏ3>뷒02;وhiHmH ",X00{`,X?V+EX,{M*cτpЀpuVT3q]>V=шcT ,oT,p*EJo?Br ^WǛG;lL-^S c2 eЇiވUaeLׯ}tbfV{͍/&Oq?Ȝz[=~>™f&}uf{[ݽ7,:o(p>#L++)7r@j#й9 C FiSھKvbQl^0 bQ#oYJ'퓼U"@܆b {9}UD[`Q ˜AH|x6_N/I`S-pnkƁ&GUdo`OXkH.Ļ#Àhplls:dC x{W0ctAƟ+F  B0䆇spz$#-fy|9d`iفW5k`]vͫj^ 2fx x?r6h ->~B*7ؕw6T(~mvG|<  zm3f^ )R9UWvau` x 0ܯWG<6(nךVdhubېI&߰P9! ~JV5Os "t\01~cL ! <.wʐ ;zI`ݧ_YO[H?u@⯃w w{5ύ8n-H `YH_?xA8>ufZ ,K5R5R6 pgdΰ.=6")y)-!Jl!Yݸޚ-Umi[v/?o-2R*SW/{ >{ٯ@G> Ѓo=tzz|纆!=#z1 GZ,L/+G?u=(_׫Ue&W8" .>2 z<j\,Ku&nC9`r09nQ},M_!]0gmb\5|O/A@?~@n0+~I_9Em~7A5 4VლU {YEpL`(t iR* qfϸe r6VC']:Q63EJH<:&خK6Xp9 C_ɨu, %BxaOҗO˾_OGpw ?mSϲ+@_:Q F_*Z;}Y%ˬS~;o:[I ~+~Q O%#^y_:_]Ҝ!hJS6$+˅%UAgM,ҷv\,0ni& WFn9`ך ;6`67`A0s20b(7nt.sB*hůJ.DR=:1~"a!Bcx;0OO l{ _a&86 XpdQmm {Yb~~>K0ΟtMAG0,o>|m* 4oBBQ X{B1AL wUw)~Ѥ0X., `-t;]2=)`_7uu0VVc5~,j OGo0|k{B_]0s.48&5\4.$:`QHypBVs&]DBC2H:P!܈[wkVC  );`oЗKp$B^yCAY(<vz#䀋oXJߎk=ru6 |ů8˸ycs9`u4iª=67JUw8?,v^՚}*9$oСWϝO˕{q omזKgd~1!CKΟ?b݌y<3!0j0. B v=DYfx#a]d1YgJ=bGsǗz(ah ~~7Uh.h8J+VωB <8ЋBx) 6N a{u~9`x?uc1ǛkCcEVGYJA:T:qpŮ3]<{X́H)0W/3Ţ׼/w%HėOp&GMM#2DC\uᬹ8ã^_:- ^l*cph3%{u |a,܅{6^كn`. T_e <@gkеkl` ̃_Ё@`-^{hg«n2o.@35Q51w| eX&fXݯo,=$L_[K22攺%sy)}Lta돼PL;UЎn җAΰsUAD*g &jV&N H9``:`*wx@`#0!1Q ĺ !9sgLqW:򓈄dvj–L ߧ-^E8TA_yo-Q3n.-W/231+5D zXoaY3^-zg}uge3ʕϨ_6pT/DCFxKĎ#]{1EY8pa҃q@jϙ=g~xu+_3WY p˜",M~RЈ?UC_/#AzBQtR/ C.,%o![Jksnxr܇D0I\RqWa9`z[;`o=yD qK_ yH: c﬽,$Ӏ6)ct},Ƀ( ګ.CU Nkl!r{VRKg뎅{vg1^ 1ɊKq6tN]7>9ґU_Nt6^rd1{Ve{a|彊I'2IA҂ "аF:~@W9ˌ04|ޫo*eѲ}uL"rz,\jwsf3;`(W>MO$@@7LO*f7`/e VcC?Gճא?R~V_cx!h+;UЬ'$w؈rU A`1h:qt=ahkخB_r'ppiKcjĮKnxyZb)` LWBC \r*k19`>e耡Dy-9U2~W}q;s.|4`6ﻀ0,7\?mdq_% C =/5$F8-'rn 0L0]Q  K+Cٞ^YO ieτD_UA"V(ACo:?#SG!h1_@W*s/X.Ў^F{K&ݘvub'WOKr bꪠ܅#~j/֛0Y=.&XeT;jU`QJUc0>W˧ `/~7^O|9"U>c5+;5SS0sEq)`M|iV~m X`s 9٭R4bKrPq9q+ȩu:T."5#!q!.p ׮>.A_lE꜊snQROϡC Ax}, q"d%-q22K 6ZQߋմşb9`M6XqæF!ߨX gވO|N|L  FZ <+?mGB_s76i̷u#n.~nr7 y8' pߪ"~}C&5F\cDJVazcA%F4Y(5{˜{4,xp؛A 559 Dw`~;CnCRl0˘q=x/ISxG3>#qN*\<ftQ qmcַ0!Yci띏1AC?,L.V,pY(R:| `]ׂFF` B~nO8`Pf ^YЦ*+wPR+8|ELhŋ^,)`7B=-uꑁi,<0T[=nAҺ;Es%y)IBkOW2!z]{?6̲g6}!lm_o}j?8tNu5|qbk{wA /ZL g+֓lUa=" 2̝g5L쮌(5n֋Z7wyH|a ~OH:o0aA`siv#|Q"E|U:}")0'3{bȥ&/dB_jXL~8`(VFP ~qc 6l/S_Նre#*XMF&kX[Q4s,#0;`` A;QVX㈣c/߻]8d0;:v/kC^|li15<,8ӷ8vqtH z!0&5bqWܕEѠ0?&k:yM/s `X`E0r!0+!3 o.aKX`|DR_wwq5 ,&Д&rj~\4K&ZBA&\nOŎX*@3l&0f'.`ݽ['X6Ȓn߱F0,Ša urp@2KA=j+:jqK 02ipC0(倓}0 }i4g'7aN|'Ct 4\ƠKxYZT!pрÞe# Os:)Q1ukU?0i|<< /D,V7>&įw> ߒX!.EX{j{|?x-̳<ipV*Gm2=%~~Ơ&WD5Ci)7-6V;\mѽ^y [UwЎ?g1{הس*10 }#䭳 m`?R`X( ֆ7b}!gmwYu,^Vzw^p$W^'Ml |cnV y`mF{0B\xe:s w޸#e.@K :ۀ^&Qzʂk778W1ea`I-mo  Xw"]`~f$I K͎HI?Aѫ. A(PjŗE_EOTgu}Q*h"xy{Aw!hy"vg:``궪? ٩ېΰYNaayns8}8D,_\-3l2'zC4V/kY ;zpb[wE FWM [M)Tu0W1{z f s3Z E1?`x``ߠ ;x ɢv9[{w/QJ֮AG*f3k ЍR=(c~Kku(rm2+Kŋ/3g/L{C:ƠK/h2c{P-u6~=n*E:#m4yן=LcwjT}sl>6쵩Kc|2,hΓdKOo쪠qQɯ(mp} x[Qf !ZUq%%|ꗰ=L~Kո zB.9rTsx*7.[I !x"Soc'8J S `r7@S^:GS&a%0 ܊'n~]x ztt-|EA`XU/ `_b-?XV\2u;d߭[IQ|T7#+05W0+_3#M%{ 5A OWkW+TE*"#M%VY=UipYULo`O!)ïUAMzUВ; cNCe5-p>ZSOyBؓyY k!M̴U:y(1fQC|36_ @*z~qZC5NXHNN,Qe-<<CɄaştj[/ɋ *FǏCV徘,IWB-pXQlڂ`@mش"g^:U\bj| z>KIh<ʛ-nڵ]]2XV]Dz{Z8^cWWf[ :*.JDd@N*'s6jVxhao]eZV2Xduxb,JƘ`#0e,*d<4$DBW =vp _"7YuRIi5 K +gGKwNX% $` ]MJwGP"U9ax5<$NgD2/ʭb#I^%^V;^jnGZf6m +&r>襷#Y}XpjkMV_2+CX咗0uG±F7~]0ڊc[ |}`_>%^Y =K {Ղ!]` `aܢ%wH; `PX%ORa ^1 B{:;hl`ڹKn.qeK9=r"'Iӿ 4;`c`&u<~ jP5:ZP0 Ay#q+7byb,}:HX V)`6+{1v}~汻~z{lC"; 2OBQ0?.cܐnܸ7͕j3JG&램ZH5N,OGA^Ա^bx0jE04޹Š$&maZr׋ՒWX&aj!Tˉg/ l8Up2""51!tN(~6|Ck$lp$_!hoTb22_9DKֻ;LV$k&8u4gotT hqlx#6swyde~00T0*,Ðhيr;~ :`v+2g*Aw?Qv]x6wlySg b2'Q#,p3pM~.ocM5Vc#Ґg3rLƱ$(/*fg^=p` aM/;1bYѶ󆯕G.p5 )WB@R~W"Z;y`e5flK& @0\=nEAN^ _]\Ԣ)`sր ayw 1x`Sy5 oMn-7Z-:O"?kTBS ZP;`$1$nis3ۦ-1GepUo19`)\p) }4%ScVkyaiFƠ/?ݠqqwh ct8yqhBgl}neD lHnqj~?9`(^<]fCޱ=YS]is,蘼qWIwvƟ1j U{a~w`YH$.l.2CaYQSO>! + |V1Ed!/$kiVX_jrb1^yN<}/g)4OdZALЗ _ߠ8x #a=UB˼mbAz[|r tG?@Rbr1\mTA{6cdsf9`;ah#8 |~ۈĞWg_u?R.UQ?Hf՛:n.oiJXdX k} pjpe vVO40 u+]}y0Sn B[a O\mb#1Y$qa\tB`Ә1V:1 B$P 6FVRK[ːr#o w6} u,7ĺ} ֍[vsTu%9@3ضUoT|"/BpA`Aqiwɳ܇P3}[3ei@ 4$r_̡~Ok7hh;ј0-pqFS"Xߑ~X>N= mŏFOTh4%ʠ䯍u o` >)ގ/xDwFW{4r\H^NX‚͠D0p\bS 3HDȹ `,*ɊXZQh;9bQ( $fǩ*Vŗ_`ڃ8zS\lQ!]g9~C@}];'bd#,oM0-0: 3U)oH0oqp&5oW%OƇ>;}k:aa%>T)ʜ0#m7AaH"a|HizG5㹉0zaB~eSS=Zy͖o8 pu`7kݏ& #S/n%Xj[rr ;ˋ 0܇ a@-BW0Eֺ >(hXwSp!C zy܂gtFJ1/,+אZ$0c1sM##`Av`iUܥ|[[W5=ɐS~V#/dyi7$ jד*hmVYijG{EǂGW0ظSV[``@ZG7ק??5f>.C.=0" NoY ' ţk_X( 5cײ}ZX_w60*7Ӕ_hgf]Jl`1wc9K(LDz Ku8!b̸&Ѿ +j6;`L~=H--4rZe7~]L 8A_ޠzpjpJ-\#pjvQ o^yILK|Pˬ6IDz}]00C12m_h&o4%1M9nЕ2 ,VHۖf /mr- cϐ7ps?# @i%XixEyTL^}9hD"K|a9lơIUN]e-xD81.pD9 DyҶZmsVMw ]o A߸>`3 ` VvRY:AhZ`R|t 6XtNG:{I߸bqc\b)"_2a,²?r܀bΕ"냛0)'9zoVsZKrr5a.idp8|V 6BaWDbЗxIo LfK A 1 }&j Xpme+y#_".}pq̐UUT]5PLaܾgtk%10 a^tXf'R߹C5'֊_ xSL0DWvLo! _֛K0-55 |X{V>@Z` 3j_t?|L:b>f&چDa!T1L?Qhk3Յ^O-;~|Řq)W/Od!`_} 6 "q y%UAU2mŖy'cp j;5x` 8ko= f %WX}h685Vs,^n_yS ˓ 5omHVߒݸc`'8>s`rg IsWK=()d1xKUr WiOh 6kRR\e+ں.*l,4xp "[` 3 T+s%]VA9C) d0IO]Η`:V Rp.$8`~Np!OL)"й +|5>x`0̑9`v33tu@C ++|$ GgvXC&yIɘh$Ai!Cشl{odH/~ ǟ Us޾Ic ̎Ÿ>\B^imNCU8w¯;EJm䝛Y7!y(?듖aYC,i!RUX/̳vr;3m} S [CCDLpgYR*p`C0v`a;:XL,v4UU_['l(}p<9ˋP^郷b/BI =;J >qkNX#!8,F `s;/!hExR*aj&RajkG0_Gp,/\j߼$3M_=ޖZ\v4w cYؗ%0=o>&+)ʠ[Xã.[^-ދS^܍ލ#RV L\8x逽:fqC8%4\(n {gH(،,I`wt':`-O_ubak qk\TI`XVR#,|>= "1;C'8 YbV[,Vlh| J{-:Z&+j5@ }G%g~:Iz^=p:`Tn|zJCS:roIU=0m Ӹʿ;YtwnzLR:`_DO2c֑3e_l.$ ?I`Z`??eLuF]dg'[ JwOu #*fw <+Ǡ{##pnC%/>'>"?K:QRx7kwǨ*,i.+ "A;thV C50 0N፿:Ga(܆/Szg'E`"gOoCVRS])+1aI~r$ rf&cpGtM8*s4Td~'HIܢ&+G FZ8X>*xoxY_F` ˠAw+lXb,aIpi`ӯ8ش_ԺqOB5= "hnsY 盀@JW`rC 㗖h`_ .d!0 3\bӇa 9` AjKw总%`Z:{U_jpx# >C `  3\&8[5<7_Fd]t~?@`怭'%Y[g3zkk zv3I0g?歟qclXcq~? y1Io1LF}og";ohFDrùrl$>GG|;?|7?TUKV5:r?&oFxw8v+-u Xq~0` L[ 6cMGbpOnI`עi4@!wt\q]^ GX`:>𚻷Üwa7&*]3$6)EZ~Y<U̪+؝p``fx/wT8m(77˓<.T{i 5XU%,r'2oɵz=sbv"+TCJϯp `azU u3+l=A V³Mj`U4t:`A:]VWط!-BPR1XX<‘|%iv/Ng.DbOaomHm N\} hp 9? 7_q;B.Rp8vF9^!} 逽m WawA9|$c`vS{AE0]8`%{`Ao>0WCQ&M,ũ =F\X!1=L[3Y&F )T2@Z[ 0q-)"&RHiH etTl˼)Wu'ΫGV0YW˯bhMb^۱W?r~al ;T FJ:o*>`Ϳz,0cPXTڣ H76B0  }GJ8:p8ਹzGn__ `]̇1 G őaTMo-^?) 2E}ڇݸylJz m6Eeϸ /*}.uLpNĥ yMGi&8c.C.L. :,CӪvdA`i)`oW}2+5쯕ڇ#0ncBb2O7i~fGZx!1)hE*lcg1?. sR1G)8zo*7 RWcr/Y7^Iu} 1 yȋh:_b{DT,NbFW_p6A@@<{ l{xv~}֒Ulo4K+R˘'kCoB20 𫭠]z2x,,)08OHx7:`毨0_S&a ~Iwl@dX 3̥I!rAo 0|Y.K!KƁk!beo%Kp/J/7X8;QNXTSez&6X$۲9 W!dᶿbv#U`xsf{ߤ..Ϳau}_uf3SJ/XN4Fhg)N_~8 &.~f jm8Fq=pH}6_jߒ}ju xX9`[4|  m%, aBmE[8v!fbҖEN!lf%gW?L'wk傡55\xlE VX>8q&!8Hն!ZΥg#ɍXy.r{}OQb,X>7, cuua ߚ̿ⶍ^-V/mHuRAc6$fk1kKΝH;-W!9a '9V2-[Tvwf/XZO2۞;m̏ @QnⲾqwqgT=0y|<pTHNf$UP߆D_,x8^`/r  ]6`` 0zE/=lqg~#B0\>e? s̊˙9p6x7J׉y 1!qWԵ4$>$:0A@XNC",ưdxodx"Y7A&2u\za(”9R q?K'}@;AC-HovWK{}m?e`xk,V5.-C&}Lnca~'s-*!hon5o %w9`air`p-f|Wf-<XxYb'ްLk`Zh}Q%!mFo0<_c7p!Q\\X^6}ҿ `X`W``aaU  + fCOc A6ǀO+GNWSp8ڃĖs q3֪a0.[1GH;K\ůY fzsn\;knVXlLunE)zOWcjwxOs]A%"<އrytxϪ؋%gu;~ww}; U8fo#yHN^t_=s fyNAw(g1.7e9H8BS kܦY8 98:=l^d\j%&; &_L[{ceGJ"O?P? rf*4뚻_h .$73,i+f=F1\l A .c<;e3~UVX^Wˠx[bB[Ag+FzN0onGOkIJ.Se"m-*>5^rot E [A[%r? &8gGvTvs.GGA:m )zՈB ︭&X(SbiX,g (#^1]Rxݵ.CKW L0%IG,TOUvb{h_.|/J̼cq)fy+g,.>)%CԥjA*mo A =tJ:.z:2?@oƟ!އ@_׮ dM^D{:zg~@gki<1a ً1B3~]uNH}XEE,sܳ&E yq& E?r:),Uf!05XwY1`a#\f#Jd F;W 4;qL׉AGO,/6,05$+8k؄GMRk{U;r1毛]ܰN  *˜aTAc>{w"b/h[`EXmI}H ဋ*gn"2E];WuKQ {q2×E!8z7[T7SdvE~1}6f!`SƢA1!{ O>z[}U 8``9`Kbf==¸*Dz 0?Sݟ/[7Z>ZBN\0slԳ06sQ:x Զ nڑ1?Qp Lo0l&k !eueзeB4|Fśq%~s3A0T(iCU,"&W[\ jo%]tF P'g!b9m5w_w\n0Uf{HZqVN2L?O<[;Q:!8G& _%9k.&8:QBwpx |D' ~3Lem]8*Ug1 |fHrV@G+oq3:]4Lvnɲ`[C,,>09X0$/G_+/ )=\8,87+Y?N0?;{c6km87WG 1V{Nn&Wr.i ףC@ |dsz>7mַ m;kw1]CPp`;`Fs;0A>g0pa84>;+3Qlݬ{€bҢz4 p`݃ ,7>.ohL R.Љdq^D0Lm>A 'FhUXOg9L))t* ZpNIkpX/[^XIa2%$nUl%,I~ш~!O~Sg#u5c "ފ2 2 ! =8N\m Dd.WсEgڬ};-oԛL^y%mGT?cnw*'p\&aJ.ʵ_x6qaEYrYꑪwog V0?$=-z~by,w}z;_l#r6`yxwP04苙cKقb3Tk_KUh>&8/,F~1g!6%W}6_upŠ78`Cǹw p' LZ#)borG*m)+o_3 \aG'8a ( fXz ˍ ڻL^I5@)_E)XrLgsT~QاTnj$9\WYߋnr ̭9Z׏[ǡG"Wv Z0;VCʐz4U ?KG9Wi٩: 9؆D1,JI-_|Sݿb6l; kʳUzb҉#G~ll>lsf: 0FqwN%V Cۀ53J]'/\C<2P:/0ѤK ,XԜ`-;н|Ư V*^%~'ې1:`0j ztx~?d[lVx޶_ w g~д 2 -.o?>9rEٔ&oVwqn$Xӑz/&q{M=KZ"ЕF{M r"6E](Xy1iWKIWW3 /l/QRT5Gr8h@>`zJ"%[Tג~?t!4v܆DК(wpp֧`y ?yV/|KCoC Zq@0lbI G)Â~#+耡L*]I$?_7C%3VO'VL]Y,-pVb -);󁟠:'_ `n8B0wf#-HLaѹ82KcX["dJc*7*dk1qr2ffg<ϊ BQ7hv'OЁ^ځۦûEg*Krī0@&En/o"@B0+,+S1 0\*nxFnܯE$ChOa+(gXUX @ϲf ZbPa ꣾ@p$;u}:ݪV|@kxtQWQ A ݴx'sLVױ"~an6  €6-0 @W ŢlC`ncj/+q!\oj.eWp:#;?7h L`uKLY%9` &RZ"=ZuE_tkj| 0_78NC"*}mkw\RLW8!Ctn"8KZGWA o_}C<ӛ>8 _6{".r~Es+8IH, :OOc`Ahrs^h@85p`8`J;V<K'X p5,$8и0\NVB7Ai-HTJ!< `ߺ`ؾ:,Ӄ* :q^""lڍCqTL0kSǷnp2_L7Cp79˧X^|7 `}GjZ_{yK!C+ {; ΍G8`Luyg AĐ2;gsX ֲh{uYQEōP%1,3 m2%XUek:`X]x7/For NCpciu1_*'o;8 MZQNK ,(xRZ`e0sZE `:`ơ11h G6`,RyCƭ0&p# 6$|Ux`. 4 0\"8 +m3Cse,fWto9w:8dkq#) ?K_6cK怍E`b!wyF1eK,&A" -hu+0KZ';S6*Mم㵅>Oy= Ǖ6La6’3Q;Q!7L=ERa6$v3?ʏᡬ 8ʰ* &k,FW%/WP`*C:իU< XOB<:Բ z.B(<8:` RK x*hon4_a`"d3LjKۑ5ƈ"₿az B/_8C9zkIc~@p-oԋ!/8Y`D0fG4] %F`o"0ƽ`Od+&-`M6#Mf,瀫 NUИiB#YD^L&_~:![I{ }i> noC.lsk>Bx fbbN_^U/`T?_G2|+L&|A[1, |Bn9s߫#s;+s䣌M3 ZUѬK0$XC6|o4p 0R/љc&Xmԭ k4=|N6:9sn֜5mUn?LI4c~Hgqǣ $, ɿV|#MUX8NNP0 58M:%",#mQ{Qd/~k$6$:`DV}V,tyrR?_ח["WD/[Ewv-+N;Ov?\ ?YsUkش+= \Z`@2KL}a3\'3|Wv{%k6 |ZpA5ٷۦ/f9fxxYf})ܵ4TH,zg ڞFG|bF6)77+: Hm^Jh#0h(β-E^yɻÈՒU]>Aƕ0 cw@1'tA<)֢S{󎛜O6i[f^R\0)u^X;uwအ/sZX>~)Rp2VIvCc #\50}?Hv~ A`Aa(xZk3e!ثIAz5#Б,VC7{fX9 `LǭG3X! U"hMhJauۋ]҈Cc ks7Jk ]r/X m809z',/ 񑡞.s,4䛜G;aL /j UMB˙Ew0iZJq=`5uQqۍqrKTL;u̒~nww&4Hp,P<81 oߪ201u怡8N'u|<ŸZb(|]ScZO[ w~=LM3 0_Xgo,Y:9{cy;(y;{t w8 ؅m]T"2"a~I h .怙",Bsm:`I;k~IGA|)nC">`>; g0ݖ}/tyR68<'*,E'{yԕ~coXsAO0 ֘HJuÐʱMְII/,X0<58&FQ:z` H!, VAWG,>:GN)wpg4ހ}S1hu;89zfۓ\З?#&x ү,fAAUdN%@ub6UX =tDOp*,)4M,'N v}bHJOl,CrD덯Z+fW1]#9"XfO 5:S\*3bpMHB2UQPkhKqJ#vZA=_ <\]\FOkŬ1g푱Iy-h&?=El-Yv:ոd:", 7"h WFg[\yઁF, g1K=HHtyn[;rG LǺ3Wivvqw|`|hıIXkx;x1 g}F *hQ ,Z~9 .$( ';;|!.zi[WAK VfȨ>8۴K=ew+1G=Hgx7zEb`8 Ͱ셕!N~EHv5U _,Y ]oJ`o}vLIk 9H.~zkD$' cg!0`_ƛy,LK|/,\cfZ3OU4&?$ƅ;( Et\ `Lp@+is'~$qMvk7@>?TA>X8`I8`R`"{7x܅D4x} %X);x U͂]C{Cr ̙Snw`wY`R:|GBN`mKIPvc xMV$G 1kpjh5|oR6Sd0!19`uv }"d0DqE)VkM|>1q/7/%Y흰 )al ;^''w-eTfoluH1b2%X,ub_Y!hAVL`% }p#!,;*x?ND';s߄X`%nwi,8txa?-8.E?~*&[]TG'J <Јn\1&,xoK54  8`}T 7ʔLN)[\"'W7KXSz>q,jkv G VxQJٞhE081Z->0+r( VP£/#}BЪG:#-F]>>v N_e O5\vV=,p N_8>)._K3 0)9`8q0ӿ.wЁ `X-pL.'Q|Hxz'%,v~YYǠ sA4.CK#6b uy̩ #({Q0}?{ߵyHau"!/EC :bq~mk+~^Ͱ#<06$pI`@k\g _ Ah{%HQwY]׺xђAn`xYˡI) @{o f0j<)if8ZAKkc70^\,iQaA-nNAzp!/Vhg'(&ot%}Tʹ !#-HJC0t¤k}b'eI`=UKU?O \fYhhCw!up0m!]g8NC7SX%3-08Ep /󧓓;zPIi/][MY_4޼~IX-ʴ#ĠfΗeo`g15>!h 8`|oݾ:! t-eGp_kHSISE[rWRyT-vMrЁzSb3R[Y;4{wpvr`; `CqG1`LCM coRUrJ3K^E' _5:`;}58)f_[`݆9Z-",hJ0nN# |mυn5怃ukv[wUfXL]T7[<8aDFѓ~]mm&Hw /{9`q^p]㇧X:neW`g!#ppDq%rFD-w2gYJFEn뀭3I`NurW?:w̮X6#ՒpEш3wǠ;/H؎ lwތA[7^l$cy* l@!h(H_,a @{tweXv1oA^ߺ,~q;G|XTa}Vꀻ.|fǏZIW>KhCofr&21VpFFh׫cRTRWů!%qkr)߀9` ? S|߱/؆*̿dtHV5+jWL+nnAI|w lDV@)hq"@tc WY]p^p==S:x,QՄz"QYzpAE! u"l.8ă} p|譏g^E]%ט.]*gxgcN44>EY%x:h-q{:`x kU0L-pҵiu-F7^aV\PL2|# V(0 p Jq }2^JAU7>0B~a>zs*%ŝAkY@BmM>/ o# &!`s:Xh$!RG4!Y;.%TE]%k?v>X캐!e+/3]!*([ &1,)I<_7 mK6*6I!AEXzˠ`)Mprk%c,Ę6tڋ;0l#:`=XrjMHbq|З(e[H`90n ~Fa:P{Xn&9`̳,Z`LWA3Vы1*2Zy]psx*1xlU^{,3s".F.1K_؋S# MnVQ^G#AXP_rL0|^y1q 4~^> 27p as:}a;D8 H*ӿ&\} -9XEDo7f.Cߧ}Wq?/b:pc{.ZPʝ8ь2Pb 5$6H7|8oBX5"St$e0;wP֪6$;qqf -Ov9? =]fJe4pP B b0F"p؍*jxr6tNggL Nu‫ [^>_cJi8ڂ#/qA~;`]E^x?v~?lK IӋg2lUU",vN}:1)sTC].g:v!I4nIqiHtgnAYK8F@?7_W{ْƺ; tr~8`x4j)`DNw+*{1zб%JΎ 1.cܚƷ֘A Pmxs>2nr15n#0:q0 " @~:`b?%cUjn;[OOT*" gưa7i(' I0}{eJp58fn<]!l{+_aX"05_\ a>B8Bا=le/sǦ&)u<tnc89`uZEmtuC'0,S A%J^XI~DiE p[Nkj3Ǐ'8,q8B6戀71U-u5ҧ˄Y럇hr4e;G ^ pEC7{X(49`2lap5pU3;^) 0F?e~J&ّMԜF{YlvO}0n~u}<0i`aPdUdo&1"+\m*IePlBtޛQK'\#4,P)w&0:` ;m!^Ig1]CrsLǠk'0{aZE3;`M͠lGK;˰}'w>[0&/a7}W%Ry@0>Oʞ_4OKppr`ЭG J+NÊw˜i(eCϛ4Ú ٱuZ;a1\zF?2hׯ\2 mocY*Pxl _\ A'Mg$~opÓNсd|YbVocN]H0~~=AwGKf{!V+*6:`Cmu~,*yGʸ湅v+ 5t*[%1;nűԅ4B:7fjiW\ {]e~ S[ vu2e(d,LNEBgl7 Ih݂. bM:?3Gx˾3O}WSp 0^BfJP\7|.{"lM,:`Lm^UX(6;ERE`&I3┲_/)~8 Qwm8YEH怱Mx( ߫ZBWU*@L?Ȧ?e)v%'\W IanpašCCI$ 0+BА`/t3VB/_<=,:"N.+., i_7 0C/#v[M6TAa KhF]Vb䯖_ FK[AqK}J `v$c: Ԭ_돕WGEg$E(;` Ę1vuԂXTN)q5i"&i /4Vc4MM4^c&nY,_ϱgw0 8% #$+0WBUD|d"xk`w wCa7n?# 9s!巵[Ds} \=c mp~w2"L?Cw=gc>-pWv@e9j4+{ĪyZ뜙 1GI yi*Lcf>o`.##ģ~ۘxF@(޹m>W kWܶNJifj xsSdI\jhI={s/РvINhfFX~آWINT9`?(p\+UxuRh_kvSxvX6\S4p9<+ 19LrK`)ᛠu `ŊqcOUF` رkڟuA<:;j4> ktA# ``> F2H}[qiDI٘N PB&jU[U)˂`׌/ƀə۞j:L x2.%{ͯ=z5pKkDP%OY|*[ 3})|N\*swMl+f KP؆=Hؓ_<ܗG"ٓdXTm0 W]9܇cjk!֍M84 A$0Ybch܌r|thN4bC0[rD#2A76k}}:Q[ׯ'~c4`D MwgkGzZ.Ԃ6MXp?h%R?`$i^- 0pԌoU5l>G.╃Ҥ0^5~Wv{˗?V)17H0y}|pDX}avV\[ZZZVG"L0bs7N mu?倱`_G ,1hXA4'UFڛNpleDC4xБ>_ AU Is ׈|5 %4*n'Xwu:<;6ߐ^}q=wͭ8R4gU<9r>PlUb $H>+G_~wol_[8 ۅ)Z\1|n8:lQn# Ń\]8C&~P<]uٗj逩B̹+^4>:1`Hz_ m_mF*q;J `̷zS/?%`4p{>z~Zn[]wв"6KX]@Jh6{g\xn#:`XR|oECF_Hv!ӵ$ ޼H?Ņ o`}I xVQKLC 0xw30FЗ()D׽u cw^vRg 0KߛIVY%LӕXEtd}d'oVXq0# I:.TOj hc'0bg.oO ,ɦr^K{6gahx}~KC?f`Ꝯ*m=0e,A``}EB5_ݳ߅ttR_\}1Pm&W>t>4/ۍ_ز4fϔ< vyt@'.ݹm3N  wA_w4d[R^;hS5L+4$lh=IZbrHoݷo߫0"8G6DN]\+$Е5^?UF L5l'Z怃%ݔ@sG/#8` @,ߢA"p^JNX(mA/BsXEw CˬGrW b0#[_Enx?QW:aR5.9]iO-8nYJf ֳѽr; #;`[r3e';X(W?:q (i!ф,c gς~W=RY-a6v[}~#*-XV+V%ѫ{JguӰ/}qˊ#:A( nZQb`jؚ|^D(eV(s`6'[M8Q,e]5h 2T_voW:逕C0*w$0I%I`—f `o zG ;.m(!:0p{+LD<%Ђ`Rt AX؋ut3 D*hjconPoZ`M\m]0 ۵ˠrB?i8ʃ}EЏ 1Rƚ43i[*![ :\ Bt!<><=_6pٳ{0`0qJ5(3*M~ fѺCl[In5c-vwfZa8n~A#;qu#x+h{5˫qf4 6*~oy*SiU +1r+e7K5_%2%s9yUJNX4-%s[4Wޠ WS9wl*‹- z( JBfZ6A;' THӘ񈫨x`E$ps=rD.t=gDŽ~< *sѕwLLHzgVX''sƠ10# x<$l\%;8}p݃zg>gϞK1mM> '6=$ H*yۿnyymQh훗D˓q-Ao|2[dT/=nC @cN𨽠C`3#"s9}n{B`7"B` ((8(z_ o.җ/ >  teSh޲o}IUX- .g GN%`a5 ꂾXn%`8bnl6z6LEdp7Qur;; .bp AC  k}wv¢VW p w}*U(ފ͞f? ᩶%Kϰ,0E0< "~_X]_>6VVuyӘX"H,g~xp\zZk J ``08,o 2h}){:1Ly^|1p_','w(ttiNzM ]TqjVcL˟#KSV.kgpa/5Qwo^=k]'OWY|bb.ר+_`9@1l_SWIWAќ?89O-0v"Ij#;; %lXfs'Z1 SܖS'u5acR Bs 82vֳv?-Q5():+UΆ_A+X+,^~e {Ԙ&X(~snvs6 h?`u/p_ZSº<zy`,F\BV-(Ab+y GREo2hƚP|8WAs;baP~W'V7aL=3oXU߫_me<:f[kx*EYe9 ŁbFb+G9o2us1׶GK` 8T=XXcn,Ғ)UY`Ӎ\ϓ 0 tc#0jꕽGmB**^,koƯ>k~M@P? ܅TidK<,]7!+ ,fzFr|oĠȫ[&׎4߼7Q+U]0a!hfMwWaUPaߣ EO {7񛉁[znVM9!ʠaWpj/JAWl3 Ч8`, \Le3O_ "@*ًYŌpG3a볢vtO;>H>m^@4GF'Br#p/~TfX/+"&}tܶ8aZ?!h5^l;rtԭ~,XG/t" EX- G֘Z`E d7>I;~ U‹x<g &9_]E8~䃕9#{CE^[Ic=7GuȌ{zI;stmtЗxDODQس?*yi_A)GeKE#ɩXC:*VZ7WEw9`h3}0pDyB߉vw U0jQ<@]·&| /^Xf--MrpQCBKO岔 7a -i 0C,jw\87$J`CBȓhm/F2+%Ve#>J,3.vGc1LRxn Bcenx^Ob yٵ|f o?Q|JUA8ja-l<ƭ  =pEl\ѝFI+nUiAwo5B~E'otn="q+U/>_"NT ,;AZ;%#6#8ܱ `tÊe U)l 䀻KJ.Wxd.R/#ؽ.1!VVgM%)`:`29C*,}Hpz̩‽)"lH:Skre/ EK"(uqAgM¥,Vk,:lu8PK :,␅<mg!L&s!;{_$0 U\mqP@p}kqAe_0 c)f1yk^ȡ jЌZe,"Sb D7G?px2;|]kVM J&sck+YDޓGe'7ܰZrp"-"ՇoO,tL'g\0GFqs-UЦ l1v|s$qaaI; useX71q_wnA\ါC^(!!9`" &KFHk*Az X@Q訿{Aj[5M#CRPFTg3;$J;1ƚzq0Cڇx(}W (4-Oyt͟U&߇Tu'0?13̈~*W_Z) 3lv>Xi[OqHkXހdSm5 X%\Z#%=qngoxEyT,p~1ؖ21H`rg7_* PRJYyx0М:6X&lL &*!WWW_r/W=ԕ+$惞(IusgƵ Q+,4725}Hڐ\[Qf. :iJ E0E9N mH-2LTSî oܙD݉@KGw@C]V^Lʬl'm}G7%$ǏGc#][dqwE0r`$lJ_m?j-6 &UЬSIT^7ֳƋg`XNضiG/,ʼn7Xؘ=3"Q/Ĭ=lbrmdǃ0C7?YؑW 2kr{aa|'HO*,L!Y#,w7ܰ[@ g|XCI_ŎaؾoG@_&eiv~T\ N5G-Ne]9`B8 @'2_1?}駟O~㟊~pnƿ *mHH뗉XN6ӫUXhe;69wiHZwՄ,4i860YHS $.$ Ri?JJ!^q_S;ޠ/؄5Rچ,DrjތQSLR XYx6Vuk)hM:^A\TAA*7zvYraTg7g8;`PāEkq,R:@,p1NGsld}msr F{1|їdCWvғ>K|oV_iuic6v_b)0de1zĥ/@P&ȯho~_Y!8m/|>3pMoz;To'?>|p(BXz9cV)j[<2̣連Uᯪvሷ+w" ?!  ܀dS_9I#f;Fqd_ϫ(Q/BWdxMo}mU 8N(iyhM<0 \%Ӏ?TJ>h&< 9lJKC^<Y\,&zti=_ZA?p80B'j^k=) O怡jAx`(v ,m)``lS䭮@aelc'6J##TfoSz+!/x> VCJ[mW0*ߛ[9y3Y~I`^|%_f1EI2d̎}܅TOC"pMՕ9|?vw;v%_x[}ƢO)صGS>&/ >zBr-=-K g!jYnu*Cq3p[9A"cL{ksu 7U[ \&N%7 &=^QN_FCB'N{9L8fE#l1[-L,u0,iG<`XD+{.?RhCZE՜ o$p< D;9m.] KuGoYN$8ʖ `<;l}Eq,o+I'y>!_F ySD9G[pr]`Ս_n#ۀw( GYƟO}@3ǭl-]gahY"]l1,oa/~hRؾLLҖQCУf4]/ 9|*/sA/c>}SzrˎN|ޏ\6s˿ =ۉRnխ #.C%GX=Hm.9Pf؆ĥK+`Y)5l J҅s]oːS [ǁG1 X92)! U}{Ku+K3GwJY_w8|=7ax(W{^y0tC3a@X'EcV2Ko2[\aCȣ˛ǽ@"˸jG0.L@%I Pb %?t__>gzqaayc(oxnl 4aU7 5 c;jھQg^e__͐qaFtQH`"AG6REU`L Aw;`>d"" 5X?逵v*LϨw&連fзK"&ۄYh"4{yp|kA!Dd5|ß럅mucC"+Cca0=0 \R4m'pn?]Y"w?~LB`jT A`rx io I你q,9"kXrY+JIX25Ŝ/]Fß}>??Rg?ct?pi[SXHJ!V9㍪Tc.W^5} /&_qB =s1nlbM"O1LTaoVJ_ǯ1E_L#lJH`qϑ`:`5SLVLR4ÁXpKFz={J_tr/ҙx_7䙄z~?w` q^N~IE?i0Y; ߦ X!nF'hxZܯ\F]jO}^.d8 "X8X XؐqpX9\Yo bn`_˖Xu ACeR&p(K32+xk c 3@S&b MEGFvYDe(C:p'PSqe(64DM'.De5?._sηޖ}/| Z/F^9`ۿ\'ЂɈ'>^h4$i*_S IDk p؇|b3܎ Aa/&ːx2JbE+#do{y/a?҅o3`p߲x݆W?о}Ywtúޅ/iI_IM/4묠h2=Wp7{/0t9QsakqgY2{Y`}{Eptz,¥X7e4&W?u.䷅ݯBT6 &{O7,g97<seIVuSa_}WXKQWԚByp/[0>GZWB1%oaWUm 7 1aBp]0"FW$x #"UlAf r$0Rf~ѝ7qqT5o5_X_Dzw!o 9-!atO؇>wo٫fϞyI?*X0Ĝ@ ZS=5QEV-}#K(f9a9Om+j JzJ]PVҹ~ +ds7/\]#L ?@? F>)_7|`RˋfAep1k_~ˠ[I5a:ϘqbY4A)T>g Acp.&JJ:\w(]/U=QC0v+h:ǠL# ͳ.UvVZ; Als.iHƙO,|8*=gJ+GE_? l_Z]B C\F VF89 tuҏZR> O:ͻv2؃А/f! A3 XHP[Wڇ^M£lwf= 惸 ~A/uG Z/m W^߿m6PL"0xB#< s e% P7ڵZ2cF3B .ri7,cXitDS.}yL؈ ]¯u¢#?{_ğ/\8ҍ sQ^82<G (y_$S{xk &{`ൎz6~C;wbfG~9N#XYX۸/Km1)`J->^ 21`q^i RTAC9 ߳? ܅+7n L# |m=?ԅ O=u𥑡-9ztݻ)Ez2{[AEչgۿ>}^~7LVwbs%_/M5["#m[Ƃi]PW״ o<+Jl2VL8`}س-B s_T-_Q:K7W"0EJ~ F%dvqx:c# V6 &e:J`8ۇg*8QhqIG|p+K79`uƐЃp, C'N v837DtN߭F`3wbrBNXJ/W>ƉqoS}is5o%N`~V7A&amFۦOpI{k)s_-^>yڱc%Z(*j~dZWesrZ8^{q?O,6 OVOAn)}8do00RjassJsE/N"wx|s*꺨*1)+ `JXF 2қj9_ YFeM;Ffx 3m\2}u]13\~#5JX|_,O g8 [aUYCk/Z4$8j4!,@C-m%0N&&?2` p·GၭG3DR1f `^L0&:~}KoBx_䥞G 7{~|[)8l0-GIa|^t  .6.^'`tBп-[Q6i;B;$% `aEܐ!fc) ו ʫFk8KMi1"It !fgq6 q10,0"6PJ _B)cʢDF{$F)EkmY rO*r X Ͷ@$pM~%Vk0~PI0$.4R֕B0P\0C&>$usR,_4H+_ǡD;NFy'"C}#X M-/ZɓWڼdR2xN v0,)ӧ8~S*]&}B2mo aUaM %VڅGՋ߻7^sCkxȌ6wY}9~LG;J;:ڷĻb}/1MW`gg_lBX*0b ,^`{k=Dk bM@xD0 n`^;*â$06U;2Sm+9_Twcu'\.C_p.U; j|}q\Q48tv01.MP3[Úe]8RMzSz>P~v7uTiu[PsDR{TLX{" ŋ*#G-@6` 4HJ~*kpሦX| sMx-%~:hŞ!_x)mQ] ?e/񛽠YMO-"ҥWĢa8yټ}ɌӦX ۤ'Qd9UH ^I`l/_ G Odoי68{ꏞ{wx 46ݫrm?3pkǀe}7=cxtX[M =3_~_qeA_?,~jEtIu{I䒷YUW6jsjUOlQm} l! 8Lz[_+aV*0pYoYHo-0lsK" S\&hK) E t8zKЍ)"x ZC',)l bpQM %3M4l'_[Xh.W7 RީY0xQX.wV8go#0]l1hs_ },n~LA8NŽvo\W jP_pޒ`}'DMIݘU*0,C F_KL?4 !Lrr<5:7\l>e'vDi%KNut*{e\KNv vj.5FHV',_U8J;6`F n#{н{e/ _ 3R~o>uβ=>NVWG]E|_@h^/K .Z1_.ߧkN%^/KWa@oYfk+?RO^j-#K:5}lHj`GbFn2)kW<֬tܘ8-k(Wp1s#maYVtx]O8~Qq;BR2ai9T~ شpVau']p>'} O˂GʚIW~֭ݲ ZX~WW?*gQ Dg#~F6aHBp`u!F5񠛵U2m@%\|_ž$#˸U4_- #)N!{q󚦢F%I^H\PbvŗpnQ+b51rб`2RԎ'6 .z%rA߫~&-;N36X9^%XUX07{/P|Z_ϽBg][t=3uc}}ː}߆ X}ȖN?0^9C[_ |k_;~.E#谛)gJ:W4ӿ\j Lk^:a|kA]:b9GbWNSCV"UPK Z˄t]KTe-F ol_A_9`WbYAQv#Լv7fovB[iHuG,lm*u9!,S>Z5[j}Eٯ,&jOb9r[ؼ0C6W$0FQh^į3o>,7_ۓvoӚ"WC Hw-ړq^n"2KlJiT"wa*\rY%1ORe Kf%tqmſ"{#3RsAਊOzL,?$U:s%yYI:`RB<"_l9C-;x) Q0 F._`X\ i`t];Z p߶m8ECk@ovx%^1es>{20=,wlߑ~3I:هFrxҗG :s4 07}?Xw'٧z%-T\qrv(eHl)@aaDt8[qye[`?IJ SJk7,T|)Pw[Y,HI0ڛ猖Ӿ4f'.739*xQKE. 0 FSp]pT.HjE^F&8/*e^b؈X-!| 偝n~T6"q~*x %~ Jmߐ"u7RN`Њ1RO%pEL P:]+W[:U8zؒy돦Av^j bE="lD/]g,e=6o%EFE^t瀵pc,}3 AC rnH- ={zg[/j۷o_}4ŷ@_kVwvlsgM߲9\ڍ063c<ut,La#Cc"<`N'OAbōE܉Bпe.|8<+yiTlYc9`U2@Gt^47/ rm9'q `";`*RvGvFP}_h2d$jӔa4z(:^͏}o:`'I) \Vw*. mu͌mNSocm40, _s[` 0{`"sR9C$pRUpvuۅ 0^>.~k;m^*!B)MG)ïf|Ag[qeښZdw*0̚X& ^D @*xpsYl<0nH`EH~X4i}>PNηCSص+}PvR,w8ZMs1SW:cD쁿h+V> G:s];X/Clz22vኯMs#~ζl*`Pe~9WqIfU329 ,m!vpFADm$XV\#°.K%R޹)Jڨ3LS`9 Nd'9`RՋL+\VkA!iKN~b/NwFnȍW8ppvFSAԢ%l̞nˆlg^0:x郧OEW$.7tN5O 8Ya<61}_ɞ2c,ޒN``N9`R'p XJ8@`:1Q=A: c5fF= {w~9h|ƿ:al ѺGW`-)`ТOA'VP]6jőltŧE<89`1ߩ_SpcMo`ޔUМ_w\z̽qqܽ{0E\{ `/vݾ1v)`"@uڒ΁ \3t0ކe}@1CGP1:T_G~i-l\5ܯG+ ղ-d-L;!~ɋ]`ɋZzaM!E\@WnV^(̯bY2~CM89!yNQX"zҤk^Rz摒QވXkFHYǢq8:)BbtrA4/j)WnZ_!hˤ[A;} Xy_%Sn yN2,-kx #Ё qI>ش0j 7uQ:a%#,QD/Er9`]/^ ߌAN9`dpߋ?a7ۙ'}Yx5#6coj5s855:sCyKBruA8c yF3U 7߼|.xrr/(6#ۅ~٤K`EmG둦' gFM9E9:=_,b,213jۖ@u6vdm H>4ҏD/7af dS_ȐK1Nu٦2`_6;L ex`.-1{".pIPi_!XU-ݰ0&{Y`5S)uQ X1ːVVjUTLf6mΓTeAy9 H]O0?nSlԁ$Bܐ^,5+'^ a\8`1X+Vơa{]#-K{/9`.OJSR_tdi-0Iw*{"lOFQCv$sz1&.\q% 'K QwVfrW_D_Ռ B'J螵,Zo؅&"+(mF݄!+s2 7!80  !2ha!F`e fQ,™+!XgqeeصL0={w حuΪ8tً⻧b#wCoL T®U4^/ JV)nػ>tp?JhpQZ]f _UW]nي[ f /NZ-RЙ3t~.Pzb:pu$XD;mX ;np%e /&\;`D \c0;[9 5%}r'C+Shhi43exst{^fΗ8I iLU:zÉ߲^U: AUœX|Go@X)zi 0R2Pt/ˏр9.JCl 4]7y<3PMF(Ò6d/AVM&aMBpN|UD,B <ˊ3$p%[ 'vb cYMv;aBDO ugNKb"K ?MV'ӷA G-3$Z 40bVS_Urg u׊,pO/Lعyմɖ V@oJXEuH X lJ[`q=A2$(ؚgSW#v-߰gvUI^u36:{uƔfqt;md-#|ܺe 7hwHϵ/ zf;vtHK-Ճ]S.=d|٫;v5#0C.YU[x'ը[ŭc= \o=D+NQ69nd ASEK7m4,6C*ZAJR"?'u*!q} ?eeŜ̩Zno ډg*+NS\7BATLXm=nke /uqld NJZV0gš% /)_f-B`Z`/(u O%[qr,W^XmM5yQW5O8`pcQ918 G A)/`CsӃOgzm.s5Yy_ts{(,Jco(`rHIg)`o" 2h\8dsQ8`5mJ 0'I- bgB})Z/VA `mS@M  ڃA׍Ly)Ra_cXz6M֏q3`9`/A%}2 W[;kFoh3 }U&,3Wݸ쪬6 2ش?b-r K3M)H\a/?^F#a:q%X4_7>tWOqͯ[_Ж}65DO+(J`fJݱ0*0k8bӭحpt}u`L;>R+ڬ1%&SfJwlsg}*?$oŨ}2a pxی=~ΩT 4Kh_$Mӫ7%1ԠXːrQ^p#Mq|E:s,<U,3zJWbH7p逋,- q[+*Q視= 3MK좤5H8CF\Fߺ_Hn>^]% ;Cs8QKGeSh=޿c0k KCzEF pK@cu3IJFൡu/ ~3!01bd/GBXYf~= &_{X/ +a9`0hğI`w\ڲ etFd0t Gb h\_%k$+$+Nr'I* j?tb_?$#!K o>my3ߥP=_k7†ߣIi\;v_,͛89TYn//{!8F+//Wȗ@^8bNk;Gwع}\o;`[-K%G!Y;k1_ܹ]"iW2,ҒyNZ*73g=92٬of`0 IlEf) 2Uk7Y~Ž:+ ])2OZxݻEX*<m5Hj -f,k;X խ`' Xi:^x2(2~A=ppkAx;AihU `Y`W 7w}JBVX+ /ª`N?x6aNmg8_I l>Jk- z6K 06k9*5hs"qh:਀&u\dppovX`>sWlbcވ}q1&,gZo3T:eݞ<[\dj}3t:ehh_p-C*Uc1pA$a^9:hn7WNh= f`KfPxp25±mZ +NIڦgS6Ѽ%U%(^t.T#V&e@N|J d2WVS2ʬv%[-=KOZuw׬,?l|@_E=鶘\S 1yf0s`cʎYlM62B$[ _a 9&}y`HAo &DEv߰4>d\m/4p3ԪwDn~ 'Z#cۺ$0ĦXR\kPQ%{t*h5Om.&h}޳߿zsMpo쎌DL0#2zb ]zfoۈ.NM3#{aj${glel55VW.oyPუ:,$90*ݕ3;ߐy+ w kՂwqZ9`)(SBrpe!p6\*-c*/_jʭcP(nj?W4>x Csbe;|y>X/l0z}j@ɹ`p/_c¹uF b 9^%}XVuC¯Xv"qෛr:^m+w\XmUE jVI0?V8``Y`2`n1 e!R]|Gu{3{nB {l\ﭻ,fܽŚhDyv쾁*`ų-JB 6ƣqVO|yX;-6s$T[$)] pjlfsAfc& VQ>Ë ¸ vB~S2`PA܍Ae V3J1"FC0jt_{!lL:7 p C uÒ dK< t< {-sm1̜G2(rtM(<`t=Q6dd1`V,E`oB)$?;?yu8` r0+;|1So0NЮz:<5ӂߊ&T~ִ'Ö & ,([_$mz$ An \Gx]^E_usƔMjoo{בux (j4@vRs4T}E/`&01>,F|H}cҎ+g4lf- GTxvӎԊRe)vKrjY=nw`k7o^տmw.|zqWnA/V#]c8quX^X3 zhq=Bn;:r ,>]_@iQ Ku~5kK'Zx~}~1P_/;hM^~6(َ^2/,:~\zx㘏y(:/9I#_|NSjqZmPZ;-?4]ڑ^q8l|s^u,  `}EKv̙Fq8.1??Μm3~"g*\).~nکAk%Syxu됰H}LyN7`AXYYmypV(\ :!1m޴ @x-/J `(aݵaߚe,mbC a~*ZO%8@s_pۺ#"T ?p] aag(h4k˧#íVzJkMRj- 3LK= \ }˒YGdq+5X-3e& \]xTۍOVE*F> >0W qwp% مPEk__o?s3mGZ3(Qa ٔE[ܾH w֯|x_Gt4%'J!g7;ݼk68ʰV`aBF': ?q!m咼>RXI`Z͕-I`=n@^ ae~9 nmquX" I[ d0`K2J3cf:7̭_hgδ~g0L޳z؂ }ػ7ͅ`<^pTD/ (\{߼Xl){+_H0?T /Jk0; ]]&N#+{ Lׯ^^UAb$w>_ `$ z#}ߛ?}n#lo!(E.i)kBVF$3!ƛT#[1\|@T^("Ftm I /Zgaإ_DY<26v%xfٚҬԽ}{h8<6vV~n"30mG3Fsm/lݯp,C`{8tniݲG;. ;~]nܮ4>F[`o[vhƪ6r_W܄0> `]?$A_] eʰkVF4 2-:F8CR\&-~).=`U[aIJ!J/i+Hc߇|l͎LDeˑ##l>@Џ~G_g}36|e9k`HVc.'M~zΩ,N`w$lUss^TpR?7' 6&@5bLb} KFN- }9`xNԒfiqGU!|@0d_@g-,p iԢF+H Bӛ/" FB;Z^gذ|4'Ia&{mTV8.Sgע0U d*j-sfrSO4X+4eHl^ʯf t&GqZ߆-} (K4–@/924J7*d7r48'xMFį/ 5FܭǏ}~m(yO~}s=}O=En®k۞5k޿mގJ# wHzgC.,p?klgO#QC`!ljU9FEr AQfR Ff&qMlac1L1@rpލdnS y*biKiERz`(7m`,l>K ;"NJ@|q'~v1&8 )~0c]ʋ/6Î_-'x`㡍,E ǁG#Q"C:|k22% F9sM>NF= g<|2" ߏ~ӗI5fbq8ϸ*9+O"XY \_ ͰӤ]SG*V5FmiR^!yZ^Nꀎ!R:iՏ{пS8 :i0~ _~8.-Epfci hn2h^RUl%03ˊ!_ !`XHr@+!_U`E481Oo|qAb;#,+<#}f2 cN`Y6%p-a9&m!If 8_#[R*ளS2o QX`?oۺ&=/VGDx;eWcݸ(LKD*+~m{"9Q$Dϟ=mJ?m4:[9۝EVC/̏`12 3/ MAW|cV /LreJx`o?6者!ICa80`Jtxbqn`Sixc.0/ svw^ׇN_=o3xX̆ H_U׹(F |WRnJJj9%=4AgїJ+cWhj Z^YۣeV3Aj1 X KS7hA@nPV׬:p]:Ϡ~ݧ_WM_~ᗟ/}駈#F|E:>_jO ?^hݝc2 \/9$x\Vad)j8:ruB0X1 M<-``1a~U#\ЙEx*`5`ه`"5n;x_lsA'Iz)`*"&}aBhTyOEs0[A.zQJCmL77䯩_/HbvfB9<~^>eoQY솛#Kv -|Cdc=`>E߼HYV~Xm848m~yL ߡi 8c ^,gu1Ȉgn'| 'znP"6UsqX^n%8p[][ Z]x|wx޶y@caV?_)_ rU6۵ ~I`_`.=Yv Ee_ 2$4q*aƠZq<A03&x:L|nwNfBP!RyeOun2KO 5Mhh:jFbQĔyߋp0џ>џ+QEhА~%N#\4,1W,jFCEy3 rE8_ұKM_W= LlD"%0|&gE`Y:ς&*B0 hּ!@?Aa8?M,#v0;\,7 [^{4}Aa`Ţ9s -lW 6y_mAYJ4,DéW |W|KYdJX΄hxr)S7(WӒE5/XNY|~%8$0ep?+lwSo0?0q$(cCFus20i;P`x`$ү[.xȫ~ [dg@~⁍oq#~q“$Sǰvbn۶i?s{__b l XX5Q ;cw;u^ƴ:-MC(8S]ahi.w1V똅E>b}fR$FExśR+`PvR#KNKGS o0}YәUX4so0[ůG}q"CO4yhEy د<2x>`#[-ay>hT `> Y=cQ;/9{VbXq?#}A`_8j6 <(DX`bBKs,sSQ* z!x ?H$,˓.?aX_x%zyJ,z/\ӵ*? s t)ʐ;m%{Nh6*:~iyrى'(`ܪ{eMbUQ 7D>־Ђ儙Jjyx{V!IW[J7́U~ .hXпD;?:͈"kk` {|T$Y$B[;Jp_jjl~\hݳOl*&Z7PDt`L20wY6 y_)!ON/- p;^=眣e/̫70FX;(~q81q8c•i.eAc8=S9e s /FXX7 σ¾jvɎ_wta '2(GQgT$`TO{ +@qD154yxݧuM i~Ab%d a  bHD0=i&_8qD5 fKltsoEIp5]8'QưF' `ZX&ポl@ݰ}?ݺ)`l7EpM|^ALY' S%uL= )8KMyɌhBG(L o*m>qJ8 g-oP7 5>i>\5o,]4}vXz̈F!)9_zUEg@YCG[z iz$aUR0~Yel8(.9Xh4iA<1 4Aeo=$&|=&j` X\NOl ܅\Wnp93N\ {K;s.Y>{3NwrBV `Tj07 v\w7n&}<16}1p&z#LryyG5)`C-/bp%`YXpJٍvrE0Ծk:qf< o$,Jb !eEDs+ Y;x#Lh f_9̫GܯC%L)LSE`gჍ|e:^  ʂUq`.* x9N#^w s&LO3ip-$'b.į{!6ũ)|EH}KyiU[ G/ϛz#f}e `,H_q{k\[MD. 88Y 6!fuߋt,̶` :L)Xj8:Z H8&00E ! Xz X=CBXK|gc# %w8#>*~.g@--*.6D93k ^3ˇu7ncN] N;!_|/׮8~gY%@/m>y-2U[#/|r]>ׇ,gasy% q߸&zj&V̪< b*ppWiTbo7gGteU)X)O-&P ӓZ90p;'O?Fm/}F8 NސHc8&YJQBI|h`X jQ3?nLLR#~gmy$V<A`Nݞo#?ϯNX.X/&'a Lu1҈ؚ> x7`/m ]Sh# n5E#p`aP+0oY~DK'hk+Vl SG &)c1+ mp2#q@?]nlԉä4aUKB:5trxlЇ"iaoxFǠ.kmj{9mjYvm٬`@{,0~HӲ[?򗍏﹗XҥuW)Fu`- L2OH |mu)?֝ϙ}8LOgS`ScQbQ_| @07YHH% 0|/H"7LG%YeIs{-7B%ӑTyz.,H<')I8RH{f'}Vs +Mv:AAsL31 QH`eFv&e8Ԟ#h,MA(C(0Մ6F ;&[A*8`LTI K39ývxx%ɯ(Vn`ǰ&g Q|ni=Z$P~ι WpEXkߏ nںiS$A[x. kykCmmh pLGf,:Xe˯qHq2ʽo2{[U!mF+, fd072[ؚNlߞ,]eN_$%#B`ZN <`5 ʐt6xB;w|#xˏHa,w70/ ]\҆` |Q`2lNh` D0?uXa .Lk.pT,[;&8 {A$,o VM!;e$aa }Б0`A`8Y#0oќ|`ؾ& ,Q'G0a`,%Sc3`Ìq[|y5w_Ey/$)H~WK^.J^< J,b|&!a6.hl[_>%  ^9l,gEg4$pWN"kW$h"ڥeW˛g?^Pp0%eBϱ00`@0/.\[J+MHQV@~q Gp@KW[q8/쪗ZR,-p#=5pU1`I?:7 k$0 K+WBSg|+`z  @)tiw8$pm0@oEX[GVv u;9Q|HbNk8ˀ ^)+e^#kyf^~z_f+`=YOzb.8dgkg0S=_mR4881m,nc[uPv})1`f?u6xbw?# )`/^ACL^//tk'?xc4eHۼϲ:scE1pҷlųqYfxA`5#YUQ8u+u\ O=ҰyUjCW2%|q}Ih֬yCt_`#[? Kp$`p(6sBӘ's`*KGl8B`0QUdJxu3J)B[’;9E_^uCi48ajxڝ&# q4;++ `XJNh`5< ꆅM3*1(KaAG/?#]7nZwlq?/_ 0ec]⩔cB"s@ Ώ&A؞"%6o }duNR=* ,B]pb*V!<\ЊرB͑fg_` 63XG0 _s*la8/8iAA17ZM}1ܶ!vouu$A S%[fewH[[8uf6ϘYX.hC(f^<> 5|gio+HL>Ns}- /^J,g[6%[yXe 8$μjBci:1<^`B_Z߁)S6ڤ~ݥ&X*{2mNf. g]\cqfa7Lam̈́hoDoW*`Vs,N꓿`kj XJ"IX TeCZ + .:%|<yl1le v/Cы>L#:ˇ& `ι>Avx܂^~#.7vAӄ_f oEg_A/4/lCO3qjo& Q 0O`־wIǴ$'T:ݱsRwTfޔŝIXu~X?6YVp)?C~ eB3{ h{z= h+X68Q~gJW,%aImύ_Es_Z=/7fkց}D#zlØ024tA^7;.RC_o^@p@(YgF-Q" 3 84 ]/{"D%Pc(FZ_XEvn7zM  ޢaAa$M#}sҷ7Bbٜ$ $_s?G,4 Ln+VPJ N0'(=^:̪B&sP8,S/%6* z"K 9^HGBjbfO]ݗפ/e.y*GZXQMÏ~9M} JZ82\1KH0 8RCA0 ^Q53m4OH`̄f,fNQ$p8^r҂ `KHQDI8c\ ê+E#wV?- , hĒY90]iK&by7.?m]C}M7xE_z%# FrM[Ž.`D/oq>j^SabGߪa~9^RXC q/\O`ce-7#/J2~ALJ&M/-+t` G%1\k5\Sr+'ZN&|1`{^W.7)`xGͯ ZQ " Ui HQsBc?bd L<0C]$hy[1b9O3LKD>O4pf7 ,/T, ~*a`5`9p 8$p +` 5Ά܃_c%0%}abp' (~Y"L8q".Oq L-&DIYeF86_ɵqH,LT`<8(ZN$ `;GQE.@K`hp`_</ |iYS۹}8p֓d8sZ hV T`GGw5h 0ⱖ j\{ lkz됯LǶV@I(n7lb0&mh?`.ilCC'OvtL7g$SAZW!Pq?1kSx?b,oY^ǁ0U ~?٨L\M/2J߀+<>0 ; z4f]5n{ xe{xBQ;h {1לЌ ~{d\f3/ޔ@4$@<&}^}}@ 6%(໘8t3g#z_e; 2 63bGm2[L*Y s`C:.pS{a40Nq,,)໐f4\pr{H%-E ;}B[8'ĀKK%7QMl'O~u{nj1/ K-׹{gm􆑾į[B s|Bp S XEુHV?|p"Y6No]4yZӿbr7N&կ9DLGf`XP~#D0,hxE5ډ>1`2ߔ?Ks_ )Ɩ9XGʭF  l, )X~G>Hھ5C }Թm$?sB¿Xm#{w$a~f8CBʔ#&!'yg%9[< 9a]xm@*PUjR b2:{pl=pPA Wb$ Xw 9*Rz\_ŀ+ V*a$lF0}/#ebha$F/jznSCCVˣ +qdpw:/apJAbJҎ*:)-U+lj5A70/S|j< 0YXlA.xWZz Z&%w#@ tA`ð/~;yp+p4+L~e `O0`vv'=k 'BCg\8u7̵5 -iV#A<}%oJJ D0l7X1`eH'0tR+Mv CI)cwL<$wB,/6ɳ lʗu#yfM,]G:`Y+l7T]*`q_$nv݇C* 9 QF3']wZ> g4w+YzYZL3NPtCX0g+W:F`~7;,znVN~䝔1`wV߃./VFϒ; ~qO4`sEΗq7F]=?0c6@;6t AX/P$x==cgbqk|X:@.2K—v#8Dcm 3oGv]43:3˙c$o .1|Wk~0C0qxQP8 ̊`#,/A/ aJFz`,j*A`7=MR`iʃ.ˏ ;ꗪBnFvE7 eS M+C8Bqa5:p-mu-LR3Y`,`z7pA?%+"QcE^4V̟Hm@BVhv %4\y'=FQ7(.ULs) 3+ A`;5P)D*SC[kh|f0.Idpwu$XYX/ꗋՎ_'ISp7^F1`ޱ (?m9xggWRG F`fTzCt@+̗`g>![h.gc7i4lMx[^n>ӘQAOVM9EDJ[ O*zB VX:s/h՚h PFR^&A;v97B 2ᕦ3-y! QsP?>2̔Ðǃ7pg=KFQneaeDZ񴬍׎~{IJ㡾0>q`%D69Al^Ue^ Cvj6z A#oNMrL47`d|T)IAjŕ- \UNP+Y_Sތrl(Zvުϓ q5@H[7_6M%p⓴@ fʝ/4> oz<ϖER<} 5+'g3sBc2{}4kB` |q%0/.P\6Ҽ }-pwJ`&9 ~#|ڞaF XiXUu\.miM<YM <fR2:[`ܤYSDp_Nr5+j1.#/VvVm58Կ&}9>Ln‚z=@ l] G<[_lBO݄yjHejm68_كž!F)K*>Oc~*CsE>ҹ߻ 1Cj%0<Kkכ7 : Vu¢6aL L7H^`RE2eRؚ`󨸢$ uH_Zda W@G'qK9ImJm4(/$ys2M.siku)X` `޸2 .0bONg7,$|- f-rfXVJΡi!6%yLکqp,^0]IXRޚJ Xw 6.|)[kfP03ث\4w+zSFn!I໹,#n]7Uؙ[O:NXPM]d 9ͥl ?_Wu8Dfi+`8l3Th5)˦5_ X X. 8Q{~}6篧? ͬP=ǧG,lg(Dfm]s0p 2S.㞽X%=6Њ.8pԿ4b9 1 blf~'¹]Sa=M؅w96tpf|I`߬E+ވ48itA>e爿y;fefc=?:*ؗyU%=!-!%wJ PN߱(%D$KKÊtc Įe%R)G% :ON |yV;~'L,)`'0L(Ҡ-W g;5s0o#ȅxiU'-iJ>V0o d8IFl*}J/׏W8L >hMatA&`Keu[5z0N//'7$pBm)`&} ?>a׬A" 7 u.Jp0$0rk ,;3!IҲ8` ѵ偾7<R$0Gq%q8\r#6`on=wSD& Wc 1h&TaXJW}qbpl?9qǟL똇e0,2Nxi|LW4node)R  |Ê ^"י%K3A[Ȥ"/v B̃n14N@0>bfJbzI/g<>AN_!hy5&| oK`jF`#Xv%~֛LFFBAvZ,e0W`6 {^5%8ݠ4h|g6#Q:MIIaeAzcʌUd&:+0j;: ``}aWS$40'= .{+,C4جmDͷ v sK˿,Ve Ke X- *%AW'p``%6~ W# LbhH 80IA]OEl &gŲ L"O$q&E**Zt邦%mwFľz/^3gy?-)#%x"ڭÿ/Z5|뙔Is8D]Cʱ6zEX"%0Moxwďƭ( f',bBp(@WN௲!w5X-y[/x1~ =7\E܂lǼ챯!4mA)$K.Q t8no~[(=KœL* iwKfpD׌&Sc*$~|I]Bc]%)4A`"X)Y!| &il6,VNLi`RuZ 5ª=4hc$:G '{fLKSX4uqC'j vYN9|_L.؝ǎ^W`ȀVW ,+0ӰB[;h:SW !a5 QiF| խ6 R`8pV/_^Х'd]t^uk"ZJ\hpn iΑ@{b.;'ψn=g/gg"o/&g#0(߾ǎ~/FR[h0X͒F`0h;:軜<|dC c>:$Uk'q-+ 69'k['^s8F] 8o9?T'`oHaD"_& "9-6'tK`]Q-. V܍+$B"5/ 0LNfiaAX׭p!bh [ ܔCMފ&rcMh/v`pE:tc! A w?`YK/ 6 ЏٳDs~@XD{HF7pfY_*_uт+&MW90Boٿv:ŏ⤀5sT&[&wC2 \ )̆и,~1Hle@Chx673"V4dEу"xŋ#7GLC18SHŽ#{:hA1aHHgUUX_߰ʈOG.5X>V̫QpV e}R+ȋb$l*` FɝD`*kBsg-~9`fe `MTZi T (,,yA;}yo. r'W:y8J+!@D++'CZ]$Ez%0\ߛrfqkL0 r|C2]c40IXR%K{L+JL fH_{0X tJP7o>Ia=\* =h]@gϵVx*~P*=+[31`k+T'pYش@1mOy 1w~.'p- 00 5@/ W%I*y;@l]1}n={_9͉&ޭI_V#:¾Icr8;83 {8!tAk=ZF`ܵvZZ&4/MNhy*YXayD *^ ?ws8uo`#/G/_Q1xALoп!ɟm|Eknq0hǩ=y ၶ,~3j!04f,쁍{DEٻҴʕ]rW$0 4HeN Z10HlnnP0S&3{*^oQToڱjpa;` sUTwfZ4-V&5"8STpAS7ȩD, [\={\H`Dp kHZ7[{ ]s37 Gek M{{ѡR eH  a郶 pGXn肎U~l=~i N`&{pTQ 0E2 :G~|{I J;s !l)H]["47B0 0l!a޺AK6oXn5ǿoq<>n$ pX4/0$RDmH_bK yv'1h] `*`"a[ lz-O%~|п<G3])`?vBfi.)UV!*+k2[XYМȿ 8L֎"3 ߂AƢ寞=6e>x*8# -1׈-;`؍1Pc $~CR "LZK\PR-@җ fkWwOi,l`ds`E 01ۗK68>XWSRw/||1KCX8˦<URK̕6^nR gqR06!\- 90Casx!)J#bJ P@-Aۂ8T'`1P؁JL&Q8bI4>yo]ΚqԵr9s[m\l_"({ \~|Y\wfNcXT+ޤo[QeYiNV4.ɏszH `#p@v~p+Nb_|= IgVqKL9s&B2 ɗ8T%2`mj% B2 [νvm8s\_'p;ԣfhi :_<]!]wW .h3_oF}e/paH-z"DziW%4x1 x*p <1 6ۖzeYE9o ;y\a'p;s.5i7H.5MiX&;" kCf 2^2յ]%<04,TꖥXW YUVbA5 /ZΕ $|^K!Y쵱֎ Eo~u~ | hIdv3zB$&PY ^CܡN{o>7oJ*CJ \XX8pSs=]& M8V5AT YczKaX{p# üO-7~>$o$6L $h^0so#lOʉFX6=n `E_Vv6Nb\.= UCˎ=C)Ai)X&u+xW;6Ӝ9 qb/_0(먿E(-.}=  63vL+X \]L_p߬6n8Ԇ~ɘ2ڲˊg/M])X Hby[eҢ3V9XFS::Z&\6a cY^n0.G;YԷw^00H#,]^?O?u.]㚈Pw-*K,˱B== j_Sg%Se(h ml(x;{k8m _Bڦ`tpmZ|vaV$Ť²7A~O=={a͜&UU> F3fWsIҿ%}v um/p72Փ2 $+{D[ 6 IIЛ5ۖ-*`!9~e6(`pLC` V ( ˀ @^ n-*vc=6eϢNd ldoY=,3 :r^7dG{U06저79w l``o(`Re``n MP>澫t4s5p CSU~m}Iip@'3mBų׉#M %VүX}^?2L jC*l#P{_6l< 42ҁ/??ӧehUW yyFCJHwۧsLς\ +y a`rMCVY0ǂ0"A_ky\ fh 7i5AO ]tWrU@kIZ,[V*\?jJPu?@*'tdR:C"͏ߺrNvl q)A M$7.jR;[H6WP9̏d8=FUxbpS/a9dZ#h0&{edA Kev.C3,-7\a7Bx*d#W-i!G9E/䵫Re9 *]W$ p@GR[x6S<{MnˠZa+5@B/λ~zx!`k }*$T`V Ir=B]7UI;vVc)t WՀ+^.j&d0 CϜ>}3ҴdU 俣evDEb/뗆ɒ/h{hO/- 뢛+ˀF` # vit E_ g`4fiFlU07DaXL,X6@91,yYH`{\2hy7tp&ż )!S7+40A`@/(h6f)p8 *ںH80{ؙM5FVc9SsY}uI--$- v(<:l( $>O<,RsJ3AKsa@.QC.ۥ.-¯kpYskYi $, wRQ I}xjj=8X\.3,Bp::8Ro!8mnN# oZh G n3͂[8Q1ZvO_U.|Lt70ဎ®9Cj_%:ʀ!(ޫ\v+;*ڒAv4,y$0֙ _)LU.s& i k*_^aLI;4Dk\j587^dE+5o>l?& C De8KcBW;8c8%LMr)$ߝeHs qEVbB(6M6Yq`m1@qක`Fư~V3 M޶R. WRpCNvzYTGa 81 Ta%m忭/h7[NЛෲ]_[FZ8 T5`\}5W=wg揦A7I+m_ʇ:xr]sYDŽ&/aHkIM?,`0w5:/8(T Slƻ ]oXeC>W,Zx\P Kr"\m+X{oO~r68пs{e3 ߢ/+ F8jX,IZ9j/FR>l9 `,Cfn{1'͑LHT"H;V'm*rAU!w$Fc!_r++^>y<-O.m >)L b`HZ-rI3NO]jy*B=K8`b˂2 sU⯶F|̋\pTea30vzի}ޡ8`ZNL[+^ nיKV_`տY \H@~5DZ`f}n1ះ:-<Mӌv1\-x;p)`\*ʐWWc],,n".rAo@*0^'K/__3e*1k*8Qr#&v;GY⯷06k~wt֥dX˱̖IX&V #/Ϳ Q`5iҚko|Zx^Rn`V\z!_$NNPO&}ѳ=piF},j,,)]Le(J*&:$Hk@xIWWJ堜tueBw={WoFߒ w/Jx f;OnٳϞ:+K/[:=si625XSDt*nզ=640(2=[$E!Kׂ_r~P'tCrBOGFĂ`bIg:V,,%`JλudzX.1SEV5Ds4v#w/k& h}'/7=]kX}Ӕ91"p++КǏ :pĀCၾK$IXXV΅}_VqɀrD\*- (Akk31g!lrJ[{qw'>I7#]H{>IIF`T=f׏tv'0%Fjoivd"I*Ɲju0/lr!l.YepW-8!"l|8bvd֜!;Ȫ @^e$W^hv|8V {t3 F7FNn5-ʈ{9|!liXLDr06>!v,;q /szdj>}Y8U34xÐdY}Gh7*- &wS kؗ/.:3KDK7WH[DOuEm4~כ`6>;I_8Ė*8 ܀]. 5rp )Cr@_r3D5oL7i$O𝾠pr_:/h 6G2 R& )kBh"g/|95'5M'.+t\/i h;Ӑv\~f ZzlDf3m&  pBE߃'#$eқ0L5*^u=rA> a/Kê.d{/WW祂]1B[`J`@^iթЋN:᫭~X(^o?W3"VVV$˫ieEʪ" ,,dXcc/0 \;(@|m$ !18!jcpY `0TlF~0m Ka;I J-/#YCV%KOwSs LhB[sC!0Kf#$1GZyq`cŽzԦyU8?{YbWXղ824 SϾaeP"Vs)P%2n 3A\O#߻0AVT(O9}H|F+0 @Sd,Z|$Սr򴛑9̿Q2}UF ÿ7H]i$RU]4\Z_o䂾ޅszwB.J#w*`<%ehOӊsz j v f DGڀ-[IWƱ ƿ4\ߪ7 Fm:iuHŌ[CgKRrNx (q7VI*#eH(d?;LWX&F9g0f8p6I įjO&a=Eo[8,2A$okddR^W_M_4u]>EGmSįD' +I߫,}K(`Ypz6 7\+`|I" nuӴ[qDj HS/䭡&o2sC Vts=M&VadDz3.xw+ F0vl60GٲY[&jCذI򎗞^" B#קƀގrVئ=Ӂg¦ς`g6 3l}2 ITĀIW Ff<}Q\#"QiВp$m*&:hAhf|I l]☴mnX~ٰ1sۊΟO\.IA/| 6+ _J̞9 G :PWڪ{9S BÊJ1~ip[N;~w}n2=δx"+^-!>snz+'0h !!(HtA@ˆ- ,'at2)4WXAţkAa!؄m;J;@B<@L˹k*B$N`)^Ҡ|Y,Z忣XVu&`3nx$&eEḿX$̷c.X콵wm-]G]1`5&Cn" Xiw3šNKke SV#m9r _HÏNc86t0Ӏe_|W_iG{9Z|P,!m~Kk*~f_>Gm6!)SD~0y{sO|Q2o|6-=*[{FȑvmG7 =%G`~!*uNkZ6%;Kxkgl'~Qe86`>p B08 ,hwAW XrS/Iet4$6 ;xE`ܽx2$=`$pf_pMuԺ4h0WO(` ~Q`W07igNyB(W=lI] ?RDtZQBQnkEeF׷ܵj&2g)p٩8=6Y܌5=ٮ= †FV۫w@TpEɱF}ןSCIYu_eT.f1TT~!VwqK[)1M{]t^!*kұRDgSZ1X=E O͑/uT6[޻w}g6?˶ub_$Bn8^B1YX A }ѿg'ah9`rqEkJs A`Ixz8W0 lNk% 3e$q0|d!=(_iX~d0mE%{ %n!Ǝ7PƘF8(ϏVa!_zǁY[o6hs?c P uHGJ`PaTm"f(0Jo_6;b.X\_^IVx&` y_{`| 5|W-l=z#VxH/z!O^ )v ~MŷĶ`c&0HߎH&BR5A}ڬ| TK~TXW. Zj Mfw[ |x8&+3.HhCOXLvХ֓HYI+GzVx4@ J2}-sѳwR.putUt= igA gOv^_y4acN5}F1S,Z/~Kt]! gI԰b~2]bg>dDz_`į|yb=V}ܳM?͖ x$C}[ :`9j|Da7qjS BୄSͱJ{8k* 2p`O^%WqĀ@Z`S3S#_]084pHRV!=uH}֋c<1cYirfg^Gø=kcRTɷM:31FK"AO[vgx(`](ѿE``0Y4=%^AE)+l.h#DA`?0z!#+ \N!;ιsoN x󝝽h'_ד}= R̔N @0Mp cl5me8c^n#!8_k˃& k>﹧%w V1߳V)`ToQ8i /)8$`L%F1WgT6{ L$`g#8}s'b雘`|68n,C ia1rP!urUc THmI3 /] Zm(646:1Wl:g@z/ _)ҕ.ܓ?yP3G5W7~b)Y u]e1c0j^i`g<{4czexb?`ࣳ{祖Og Ko|;.DV\k]X x пv0j˱nݹԉ|N40 #^m_n[ߡK._a`̳>*]`A3Ѓߴ|իYn16MQ֪&zʐ@0_+48?sq4jE6M)8+@pᯍ#NX"y4~|x 9X *ngaY+,pV!1 A)_Q2I.굀/腞i°/=!t3 :G3Mʄ37JDh@Xd`ұd%o8nޑuYn5O^`SJ;|߃ f wQ.h6_)~{g?K-`2@J^ > I"V9`0ƲIWw3oXI`kZ`wA?[]-dnW&L~Jzvd=q <*%[oцיGuZW>m3⯘*R+$c@ *%JUpF"L ۻ{jIQ=FV| @}}b爫'*/}sp5!ȇIJD`,L6th_LW[x 2yZp{9M)fp<^邶ʻV[@?p<ápsaoU!7 vԊeȁ%m~>Bp4y!c(p@L傖ő2(^?;  x`31I ǧ 6lP˔ZF&79{D1(ioܐ6/uĢ{Gyw Ee`wD^NIn8ply  Ӌ^,A0=\aM0.\.7 G> R)v́<`_vy'%W(3wO_!C}e$B[4V080gSE,<`we5; dc0?6:4>躅`ԋr&zmZzj*<qY# ٯR$ՕŁ3$< lXyf8`Fy3S _DCK^iP+R}i~Eho?_ၾ󾧃lXS%n0x_\xByq=q"7 wf]R4߇/Mo{-ZYNh̓D\. 3Dbm&2ޚ'SR3OE7h|*~m48B|P`rF3J[)XgNV7FWd 7-\i*+:g?  N/.hiʄv<_i\)=bVL3GP{G'oaS/K-^0z3o,t "Z= 3ܥ\)zkq \. 8_ .\, g_T͂Rx?w Ƽ}#F_1}H` 'Fzs7XeH~t7 2pWxmT O``-ۢ膕H^>XE[D(^9^ Q[9[}šktC88i/km4Ep>pKMn99ǩXYU2Z` W=,/B_f~hݵ}%9j4{2h06w˖ͫVׂ6[ՌrBA`WD* zY8'JnEܣ]b0W"FwC NLXߛTm]3_}$pKOSSi =J? #>׻ȃfl8 Y\؝e0œ98˲5sa8A?_PH]/Y fR>#ѕ7y`PfςhSjB9A}jf:)JxV拯SD|5vz9I" JKeqZR*3_Ԯ+tATF{H:*y0_ `O-[_~NtfA`&HI(RoƀA\SSt ]b! ϺV2mQw.1]$p|Y4phju}4uxྕ}u 0ޚd<t)?0QVCQ̔2g9~9h+ܵo2 :{gR0ffZ2dóTz8Hom~cL T#ےҰ/[;Kt$6,u6t1{Y&z ҪU{K ^l2#olI`C/1$BϨ' m2tz狾[?_&`Xurq}- 2,٤=i~N`R Xͩ`F`y`\/ny*$4E;kk9 {d hF>vL9X'N_>(`04Dat /4mp Zto C_{?^{/xdH_n臿T| WȿbgO`3Aʺ#8_ C% 3X>`9 9뵻l4& /L-`;901$8*E8pSpA_֩;NqO߀m~].pvؾ:eY06 8IRcB7Tr;,ߔ[/@}_6L)͡=sc&1:<@pxQ7mF1xǎJD G: }UQ9'e ӈ"M\ EKMoU ؋w= ߎFf ۏVLw4p9mt5*-" !Kj0hƲ2#u1jX|{t81 9cs шcwQՇ/D˷* ;9qb^Pe2`Av f(4pLc;;M|NwAӈM^?Cۻ>:?!'ՃRl7k#pbDR :YDlXI}#~FSS ,_Nft?UWa^֮{e" =߼c /}8f(n7{ 0և]`lZgwM-t/; nX:F }k$!mL& R~ 08 YXu8up Nbds9UBV힡?F8wv:UbE:>=n_ߣF_oy}.ws̬|H@[828Mt)Wѿ4|t0 |1UB{~S2st ;~SV2Su۴Vnh{ 7 ,>gpBCv{덀BZ&7+2[\6`d5S7Җ[CfW ~d[Hvi%!pxŀ?] oٽ{xzr2Y!㍛n$jU$q1/B{vwyh`Y:Ũ ta/>H`l91sޓO>rlH@0NY:VǴ"0{'IϚolހ+` ġ ^Ѫ 8g[GEzߴ{e2pf=aIߍM]4|'&]'$*Lc"-3.wrC`y_<}H`/YI·ny<٨.s/~8B,_YH3o_{7,$ |4TJ"%W 9e@cb`p$-&{IaQHL稪~k[ {Ay֡CUg# 3,[W҆RFJME~=ݒu߭&߽?ٍa t/_d8>h|M~'G͟?|k~b,H[`1 "}0nH`l)C :#tK:K ڈ5t*0N(*A*3 N˖)1) Sx⶙4 ѼCRr^?%~>)ҥEkȼr+`;[|Jf7#W)`B9R0K*F= LSppKoٻǝa 0eP7ͽc+h޽yIhdf*Fl۩+=\OGK:~UJ 07m$3^zoyL<4 G vޭ 7 )`x2;KRmۻGF߿O,yk9pxݧw$ Z+N"4ͰS8yYÐ|`!`H!Dwq=_"u!1ʢ_6zm #/]/LmaןC%Gc'Y m _Xt[7@; x ~E_Lƒwaxœ1 g85(x)Bj>~yXގ2#2"e Xie ݘ>o 0iБi fXay]0F: KG3=tl?:q7O~.!X~|_>5jO5N ol`| `e^5"+y?><[`f^2\л}V9!pkp3bn Sp@zn5C BZgk2휲(%0tqL Gx)`2{] %}9UG,,AT~]CL2'0h7cpRْf:`!ܽ{d{Jj_d5 Td$_v{M ߏMw0kȐFά ]dG d|&=`}&(n(؊X%zA}zީ%;404|IWO-N'1c^0 ބfq6wb/8y9$cIz]0M8RdE0v>"ZD{^zB_Y$B0TV7/wv ,2Si{h\K_X 6qxl_Qr |' 4|GBC_m(]lQ`G۰B3HUuH7$lpゞdvn_ߪ@JAp܎"qfE` q'n{!_E5,{3>qny8`|֏Ro;>w?r#O~?я~2=4(){[ޏN˾ O 2G^J[U(#|Ю7n-t@S86Jv'E)oPV6:̢:Ȓae$7,Qz]I`_M bN"p`A`c $bB$+۞+ JKC=MJ*,KY◬O|TqLK>l\ puD"w+K7Lh>09вn }@a[z56!e)6+.Sp(p `01S&LTn  RѤG<|/OfdS 7h १NOm96 `8I?cp4805rf0/#UD^1K<p]ZW&A`xtHA Eů0eI/װ6;l Ff!I F`~N M.IrA{{ճ[k)t4ƒgpKue.hw@8QViX73{m6EuHL! a<2I70Rm?uCʌ ب\Y\w }EA'_qX&[%A滶O\?='G>#3bpT%N vor` Χ${(>˂ |[GhGvlp֖yؖҿ8!pDo3m x{ -(`ػvz=ЦoŔsh~gbہo(Y?ܦH ™U-{?E Af%H~0/)ց4֙IT*g/~hXJ^QIߣX¯4ni`7iFD2lZ ; a6-L ՠ:~1v{[y'̗Q3D,vN&r[AAȂeHqq Jiijhm J&j+\g^|-K.U^t+0jXgwPbr`I`g7o~W#z Ǐ|?dea}ӯ 6Qַ )y1u`>q?ۮp16W݋BdǞ.So~8%Ak# )3+2K7I#Z\`ܽlսϓ6{SJWB36&3 gӏXm-3<Z$BB`rַh8`*wpU\!=_Y_]5h`;:VƷ;rǾ!ʁ^LHQ-_=*$p `wWʀQ¡2a+~))5$p[4vZ^ ZIXг wX#RM ] +NMVǰ B4k9ЊgN[gI/;L ${'2rAYvM <5}>XZ~@d߇2WĆM;~W4-v) ,;eV]lD_f0`JIy5а@e7߳/݄`_#0%`rAbLRmZCfy?,Slx=,{n{m-b$3#pv89_N(pAcB`%hxҠgFt*Dtsk{`\W2wB7f`IYqYTV.ȊL/7y١5VV @Rc!dŖ+p[ vnt  _~} {=~BZo4lEH>:q!(s(KVP[ö/F0 +`yX};-CJb۝n!R4t$  \akN6Z(xo Oe e7/%;[|t%U3 VN_XB_by= ͜.f'FXSJ n.qO  .}J`qViyt `m-沰Jȶ}pJ0豛AUtm| =0eHjUHyqn=+\ykPYxV q`!<(l5p)@D^ _r"^jF~-b '`-Z;R!9:j HVJۏ_FW ^^A/_ݲ^;:LX &| ˄KoҶVJ$Op$7/?}l?&?$0EB`_nRZ ab=k 8F2TB,\YXjűac]}vRDa NKvmDVDs/2;ٚ^Ȃ 4=U>| & y¿`˜hsTG]G~dc:-*$I;dz\F7C͖IEe &`͔VrhWMήZ.i`B Pl_@ŠᗁLn|W8>9gI!J!ӦrAcC/ k`9A[Ft*)rX08|ԑ]e"0xa%_Bt!.ۙi!#]׍Y ԚM}2<[^2#y_0 9/C_pU!Mc q)21̷]A`P&R,\#9r6 :A`Y}M_Y <Ki3/YJ}F/ rG]S1yϴhAF#n7M4i'+ |p/YXҠY%Spq^֗Ҧ Fc${ŀ95;q1+;4hz ;=ZM7HO:<a}b΢?񑟽S&a|^=ȡ&+yMiDHBBj 0- L[dd%Re%2,! ,i!FU t~Li'yV ڧ"}@f|QdaI\ϳXKc6iC@c;x7DM~ &x8+`J "*]@{˪ `yo`(S1s{ `׿(`KI(`̐ܫ++zQ%`3Z-<)3|-I[&% *ωoM `w5W+ːvT^$W2zM# 4ӧ<p3oidp#+FCXig[eZa!ڢF)N@&P t ,: BEQĂh+U42j25Rx_ҷcrNe;s? 7ݼ"]T#JPE=ݩg:S_etФV5Y5/pivkfe]Z3 ZZگgq2#5"_fY=7 `$+_*jw~X_|F{N LVk9p0$} {|]FW,; YFtت1fYA)` $^Y \zavC_ Lz`Ҡ`H܂]Ofѥnt1%w1 __X5kzxK&Z~O+ ,,~Mл^ 6=./X,lpn%?DbLvuD=w&i^СI2/B  q#霙⁆C(|E_۶)̂_gC.( ZU}W3ڔD `W괡# y|m&xp&4M֦_]z.M+{u0MA0xu&oZ/ D#eez;NJs}9d@>l7v9g=”^,D_O\eѿi`S\௹\̏`CХ9 ɺ#'WR]K 8/*(M@፛f~aH1 )-[ȳ[A7xmݢaEϹ%2/Wjk+ai^ŪTjt2WCA~HY5{-mPaz#Dw0g*o{<5ݸޫdY#),%@Ag08VC&"zGiۃ\MVwS"0ê7<>!RC|ZM LxMlK_J. XWfC聎 #?"ofX!mt#Ap \T㷠WF,ze"pE+衫 *>fm*R+ٯ޸>K%iOuz|* @pap ջL72Q&RQfw1 *G #&X6't@S/xQb(}_ _34`#coi8桷s4~_ԲG_Pi~ P{W}# ?}5> sZ{Fj ?4iXO3ؔ(]g\ # ??<>(@oo,,>h ̏KX̏gkwS9)0x0916{Å\p·Y<\,f)_GuطjCxPBG 3.KLXؚUK-QҔ lXұ߾J~I4ao"&uӽi$| pS+ӿāIN~S&S WSvg[V*t@{u1G@1o!K UM?qWFNk%C,w XVbOU|Geb7pB ,GL І|3neg[v]tbjOif%䩈5I ҽvtui1 &{m=A'ѿv4b.LU^:*,qb$h"3 i ]'}M J30md ،(0N`E߮<,Y@Gp: C_C1l5IXߙ7E2V 7y!0u7v-f6: $K9>{d=!°.J82volhl$E`>AN`;iNfNEǢ5kFAk&v( >`mG0s/"`  7=_T!g,M[౓ "=p eI`!aߒ L'3*: `;+ q_I>*fۮ7c'Z:T2tLꇑQ6 XRU\S,H`$- V2.uy 5;pKll$(V1i 6wm'Z>~|-} :|/6#Sl+~8gKkŀw&#z=G"IHF.XbS0WQs@ e"!4KHFL{hKkKX:vCMW%չvG +['1,3{wiQҶV|5^Zrq8*- lx`G-@M)plYt0\ m)>%6S4,ݧCNU$GQd6&_N YՂ`;Ek]nQbť# GT$$0YQAT4iEc^_ 1B..h+MY[gV\`̹*k?WQ4oE%a5P;/|цGٰ!H$7]~F[ZLߓޥMZ&G N[^ B<0ȉopAS)ےF}4 `of{XNmc91K `\#;/};BC@v6A3Za!,h|as0;B-M _nved +72[ݜВ?N0_T#lCfyOz4̴lA`̋l*v/n!3*^iQ7&N̿n>Pz9X`ehjLz|lQT~tA?ʽڱY ϯ1yً XYХ=@7[B^ ЗN=ռ}uًךHnB jzQ -g[[Z z-֫5za;}=i* Vjԡuy:թWx'i}_,&6]iWݺ~%fX0%I_X& ]5@_0>hv\4X=v!!G'V-Zf]E f?)Dr/`GT!Ir > *~*Ӡ1.8zZ`WwqR 쇢{\._ ErQт#N幢3t+"߷,>UAr`xb%{%n294kPC/sNK:+@=)­2=VD&+\lzXFׄtA-eH_i ?&v ]5_s1 /;'ݜ} ?k4  Ba4`tZY|e%I(gA7# RKG 8;_ٷ5UJ:27`3weTӿ_w|8YHM$}eA뀿r5VXD̞VlּNӉƵbp.V4n*I0x腋Eyϔm+W_W{^~yy[vC^go1FWr^![hM+ohөL+Ph}e-|^#̌~%n]GO-ѵo./^ow741G[ 4wAG-Z `+C B3DpT$`>57 kI#7Q!# ׬9mV,) &ђs\вH#Њ8sMk4[Fݩx~'Ā ($ˢ [LNV U `L^>3-Ik6??4sr¯Ē%*?IbkꞮq 429Vi1:7YA[?Г )U{ӿ0 8cEgX0*fa_ 8[у#`=1W8>^qAKȑz0f;'Ϧb2 d ~Nf]̼y'Kka]c ~uOsbe$8ӵBefhW4Aܕ|j򱇯~)`h [UXuHZ$0{wT_S ߤZ9xd?hyd0 zMo% Kl`s Y _#N6>AD'7/U`AӒ\]95I!XLDR߸LUALJGjqJmovu ]o;ڙ+wiikYuJB#фb:#o(ݹNv`GWÑn Sw,!%37^6:LZ %$_dM8!yLqB)DJ:nzçc%>m6p~ aALFpCjtB8,*p :*Cz79Q ;[TVr4! 5L= S]O蔦Oy~?N޸JU>{Of~JSDm2$-SY^]ޕ%@OTguc2F뎌z8[  q4.eHlM40.`<@)ۋ o 2oC`LQ> xo`pJ`T !f`V+kŤ{|Gf7>han4?? 5ދcvX3gwPrQ;,L(07Zћ8 Կfw#k+6 i  q:Vn/ω-%<  Z [h\T0 8Œ&4 Zo(p(`Th]Y!q X}0 .M8ث0uD UR!l#&!Om {uB%v&nxھcog?߂L>{w:!0$Lzgg)7=* 2A-&\b5E{rp$p, _}ֈ46:B/oZ2)ϸңZY;q+ ڢxW~V{`0t6(Ěё 4e~Pxp( \.hV3T%>iNϫtu\(~,qu!uW;ϊg-t[ ݡ*bU>;*%= .8Zn>)[h@xv0\zI62IK٦j[MFAlop4SKҾي^6D nAc_6~RA[1$d0ƎM(m+p/ItS)\ 0"pagnR8cUҶrpE(`˪*$yoZB! 3l_z 6wόVlW c9t::%-XHFɩ99bR,fo";DW"uܝB˩51`.  ~c9 Z`:`o q,pyч2t 2 i}6RW 6 u׵ ebf )A Z `#F{! 8xGM=Kco`8!_9}k3 62Ҩ{J :KO`$^!p,*g7י}rqUbϗ _@o6qgx%n&ֈ2?n7x+owQ@ U{@Q ْ aH !"}~gOV"cqEϽ ?*PRUnboٮkK;/ 'ULׂ8}Rd+Ʋ\R•%du|ytGXh-4ZZYzt#*uͶЌ~"=_6wm3*12ָN6bOM`__?3_54ĢtYѿ0IXX f 6q$uHġn<~]Zcp7]\bz*m<"oU R?SN2iUV[y^]PNܼ<Ӵ{}QWgM'\Zu׼iGww^v uW Sl wͩ4ROxԍ+dDՇq'("i<hch_R4H zqH(Bb2lI#S pBf+JX(qB (0e@+_('yI]8Mvy(F"X+,Klk%ŊGTHv Z )f$0lL"< 't/"kIj)IW_^>AP&SG3?ߌ{e`/hB}ca%粻y; o!0%єqV$e',j=~hH7K\FpIfÞ{X6q9|GR,SKkJM)!jOylO_-W7PW?xfv$KݾB 5:X N5m6e kw*9KgLy놫:W؃C?_6l϶`N\h``C.6^F׿;2qiO > 3LVJA` 84pe\_n~$ƪC٪X.>pa!Q^7o_ }j]y>{Ol^zqދ;4h2F*_[xcmM՝(`aݣדcN[<_5vCSgmֺ7ABtB ,r ZLhx&i`}c*um4܉ w%$\1׾_WwRȶ~#1ypY#/"$I,h*+KGMmeæjqmSב3Hm(Dۨt@rŶ+X<}В(`&q>;"L!FT,K>FZetsgBe^` o6+_UP_V=*< =:A4p`jh1 x^D͆znczhȻo_JUE2ࣟ(N͇^%z^-(v koWGW}fv[bX W/׻Y $P ߖ p$vQ8ً1n?L`0 em$"XUi{=Mz%v?s%"}=zK(`zqBqͅ{AQo=S /f.3+fng [Bv N[Im1x  c ݴֆY/ 4Va e'EΩLE&_į(;U!ߔX q0`q$ak e[prR%km\;#*B!+JԾJ;wNU}8:o\BeJ`F1tniC P{Rߑ$=n$lĺO&q>'MWVbj aC{&˾ _sk1aUzSJ4|d_ xHs w u/KgAp 1")ۚPP 2`>Z R/YR&qy7/9~|R;WHʽtYHQxizUE|^i4pIRX HϷI`"&!8~- @N˯ ZOiv+W.(~^}Sc[cPoFBjU1r5_q YheL0$AVW~:ՙo-H VJ{Es̤ט8,hvG\`։RdzX?EB/o>3QA{\J6 ]l9 B0;!l]FڄTl4WE#"l hJB` U_ZQ/<V\A`(0wDŽ~0Z\o}J'9GlǤo)? h`M9 A_s,NV)3|?6-)q@_}Wkmp(Wv\=~9-vC% >_'?f,_-%pˠ I*kg3~Eᒰ@p_]7kB1MgC`#ܼRU|Yl6.^fϘgAs0F 苑'x& Z,EH`]c!_^l^g<Ӫ=2aJ*Dz ڙ4bPɡzd!Ueapߨ~5Pm}7DjqSR^D/c-ĺ5 =M8vCURFjIпn[8k$Zq]bۓ `IbB%Ƣ4vDjnU 4 sG`L)q,^r\"B0| t{ ~5@[xO ڨπ"q0XOmmoH6Zjb~\\G!CYhᒆU*U>]]oo}gf,uoڴo_wҔ]׬x,z͔"y󙖎s.7V4bYC&< ((F瘷K+.=sOn87j:y4+(`p4[d/-Й\/zF { )Ɂ4a3It4`';WڵY`^u&  ppH[J)v c(4!dzaD/{+sFi@c@zZ0gWK͙!ck+,c6&iMcD^t$@>X h@9>ތSꒃb&]CТ/8⁎^) zńk2Lt+ːmfF%:Q~4[l'k*Y@ʡcr;7/wFr݌vzS:ˣfR4E<_v Ɣ%k}8+2_*R)Sm[t!.\Ku=읠Mx [(|?`ё" 3J%xo9 ךFwM0׵Q荧lh Sm[$,2#%/wㄎR$۩CJL/J})SlO ^(\$p*puc4¡Ε~gP8NņvAT=UTg< .R7ĉ6w-[Ҫ͍6~۾Ƽdr^],'e{_WqoQ,Y;I~xŞ{ v*|MwCGG} R96.ph6VeV,k3 c0HN2 \~?fv # vm'1miDW&# D>&ɣt(p!0v>CF֙)`08uR`DӬqSc=Tߋ9z ~L"tɃfFJחx<Sd>h|ӋÓF>n 8k:Rl"`#eK/f.fz%mXj|0TXKg!73EH1SAK`zfU7٪p.^pVObG;Y_=㻤uB*YK۱:JoLž7cV]uuy5ŀ}no;%SxÏ8y؇;n "%aW;GG$ihiY#GX(J`T W=VA|T8|yˎΓ ` &%Qkdۭ$0W ЗͶa:" pG':;4|1 |+3/y0pc>7Ha)9 PBl>n'.FWȶ]3x?d9>Ll},ޡn>Hdx.(z 7 0Fnܻ, z <5] zn۩s{Q`5 "JY`2aj.O"y"~Q: ^z [ڡ`=$*$A t@5{!p>36ѭ?~]/ښHO o$e}&6a[v0.^NI4/F2w\Rz'A($-$Hk6=/sa!,J3a@0XUfATY}b]@>5oFM"c`mr:[ZmyfmBKVoWkgnQvz4(cZgFBaJIAUi_-z9)\AD\p8Lmyud/(0)i\GT7 ,y Z;u<,  p x4,+ªT(.-389ܵ3+2 6}@UJ`YNyrU=rޭ{[wvHs.}f֜'gH1cNh%fi Tc_dFM:9^5-h4jDC围R10UHh?A[\6*6/$,Aghp0fI zfa_b(#.i> %:Gf(  l i`~&b%ݎ҆$v` !G"4rTs{k>hk>fū"qKXo^&{4(t@o9P> iK{We.E$ro_r_%VeWE&NZ: !_\ p:=y)kԏw!iSVb̭+i[ܯU$@ǩThΣ,[%S+ _rOwwwf)NEzp?oBj_˕]T;7Z;𫁰6=` B޲~ `<їTDmYqbnZ s ^tTy U}Ԥ]X.@ /5eٖ܌>D´R#NCX#0:վ",6a~py5RU9,0#AHQ8tt0 ևxmԄْ@4O@8rf op^s7-. [e}=!!ǕGYvmmjs,WlyߦG{>ᗋf\a&%y%Pō$@3u35^6I$7[Ip^?' ~)wՖ>f z\4hS{ k2$p*`ȝ?My2[8s=2 `]U=.A03 M%p Xg2ԫMo% z 3ެ9iG6t` ߅hpH`# k !w`7^<IuiދI/0U=cYT%4h1/uja h ,Yn0OqPc0Bt g gSB\B)9)C[ִcպc7.g`{W27pZK;4U5v=F_Nz"}CWݝj>n[.Ų4RQR[}j欢)>B|X-u7 ($*\|cx9=~>zucg \0!asGڼls7q~< 0`͕)oSP>Z7!F&t@[r$8{<DgbyVĊwG#}y4ˑNE K+0%v7Pedaa.YTFo<BWWj\ːOV~:,g >rʕm'ƺ`G=6aw{^Lw_:W8%^):i[߸%cN=O<ꅁ ;z}wS2xlNksR/GMkM)v lbvYIPMQ+|И|s謹g-U:_Ll+7B:[ aLg [UH=@4XfZ!+4C4f+;}u tBֳ *v 9HF,,}v+  T`hEV3+=>44xp|ZB&T$?Jy0㈾=oʐg&%pmCd}< /H`l̷^;NPH`2jlV?Sb$F\eU=YD8GU D~Pj~ CRGNwC]mTnMc}U>/֦]m5jXoೇmmiRˌ$FmC#_rn!5m"a!.Ibل7~tWBٗQʨ*Jsfhϲn ފ֎1p_Gi6Y'¶O]+"&4@Nthjm`a9/^;VO 1'e2Oᯔ%1m_!/E:z5SӔͫLsJXNTE OG8 \ UޒV {cE>_`J%J.Y0N xsڳg ˸௖BTf"ٵZK9K?Bkr slZ-ԕP,gkʸB7C`*ȖmoXScN}!=jXKeeoNsjWK+oT.1wZظiū׀#AUT1ゼ6랁buf\!c?1n18iF[둩Ι3^ѽr闽l44[)'A{bC Jyf|TDʞe7mz\cr`>\eҷȽY?0y>opƔTZ3઻1WZ O}A#A0?a"CpswzBUBǖ.q2yGGe۩9S10us lͿI06^ЀVK0W_+Ziq3uCFD|0G&"*xsBH_-;Gp|e3)X,k#I, % 2Z(" OvfsQQ]} -H^us pF5q?]'|۔WE_ pXV:YI߄w= ~Z%_pxPYᒡ N`l`Iw‹~ lql&*'0Y%៕6gXGl a [嶧A 0!X`K U/H/SJMJ2 pF13^O"팩_ULD" HmAx=xg_Lu(d]$IKω:ZLҪLBCaa9qGG&rtr=iBþ/QtX7o 0 +dA2beYS3yEwjC b7[[5ǺZpo-m3{4tI1L+74=b"~L߳ӗa'7,H iHJ^7' 2૕gF|2 +` ҉#7,?p@]a}#h8, `$pC[AGp!(]OC* xPR3 m7N&2D`PY4̩ ϶JWjVeV1ؙ!(FC[x?Mآ~&z{{Ͼm_WFVZ㱃_Rfz#+77i%kO5|F7׉FUH.?J>tnnUø9o?ZeO[ _% ],qcx{Ri):-L r.ub) _T%#y_ 6]9Ao[;GcϥyMpH2 oU $JCBr9JCBcD8[JœN;ݼZIJ^Wrf:yEEn: ydĻ)`Y_L (4`HjN߳#{W9XSe7,ߏ؀F^lQ!)!0\<=il5"| .C*7yG i> yC^h3W R:X7N2Zs,6eA_S>iq̠LMMc ߧt7}oе _j|}~R䯠զR-:Wp)Hrj0)۴2q٣ X(`m&0 :ˋ5#\I^TY U aьRn * 8 R*$)Ω+%敕U"f&}840@LsA/筲X6" wמv0#+q]Ui-uoJXcgW) ߩ`l,Ff}M4>r+! o90C˗Ȗ@?.V`ni}3GKyƾ}NΤEm}Z*AD`p]Ќ|_ܭ4"WrH XuG*8C(!I W`'pi 1pCca]]ln_Lw/[E%SK ^ }jS` .~+{sO/ٴ]lsZ[,,;c!@LJ bs>͖x5+KnUHѷ5!`i+ROr10ס$`wAksO95+PЭP|@Fw`NXsZQX^̙W%/j.O& v}ҞWuø:۔M|EV$aFvxNl`×}*B^[miAp nwGe8 CB0C B0UHp@@ +lJ!zQg~h#0[o-CߙSI \lQV_MYЉ߬Dz8%pP6IpWЗ #\8^Y'AlPvv$$q屲 m|JԳt65z/^ߍϛkϮhh\׼$n={DPߠ,֭/CѹMP./>/'Λ3o\ ry?yAv3<pn˴is,QXT?)cdpf[b/R0ؽu.@FXm8V>}v߅4b+r,*bRKs/PP3͖h~ 1[aG=.Ǩ`IAx$y*BZpXLS,0.Av~xV41`:Ԩ;|+?#蓚TlLpAY8.fS]`Lzxq/F@*S{$5N=y % EYXB C=@}"g&2a%1݋kqI;N fٜޘ092gpXQ v3FX`)`iX?#_IX`o򷄀@ZH`3,H-+:·:'T+<\|/=R ۗj"fvo oǝpזֶc{UɌVr+3nY~۽ª7T@pxqFSI] 2Zзȑ>A]P8vמ/c1M|$ٍ# zzuc_o_u(`>k+sE@k dNuRk\d/h=9N4IT.:}gÜe"򭥙-t!pɄNtG*!P\dm% Īпa.|*WX٪{A'>J`IXoR3zء0CHzk>yV_} 6 \inaQcm &];ϟ;N @`lZR_AN1Kj-4^uO7/K6-G!<ޏ"%GL~/Y/cSVOW)gNRnimnOj򹽝R֦뢂W/E3QX(2^*z;J3Һ8ݍP҅KA 䚛PWGD N(BAڊ94\ MPlSD5M44_cϏ_t~~zޟDO;|:-'=5g֖ׯ_{܂\),ïLlF .kפcܣ`JJnKX.0W$$ Ft` '~:6V/gu7(-e}1K[y2|BZ]@p!p\ z"ꦍ6Xv:&S`80>a[(OvEҟ7o}k]G;6aŖ 8KQ =5EƮ==(o!0 z)X`KV[ݒd6B,g Z Ϊs `X$qgޔ&4]]'t:qb.M'\}hҾvC`*+ +`'LtWt`0$qfD܋Ju>cЮK}Q;FE}%:][zp |_?/FhdA'r `_ K{̦O9GTm 3l_ AE+E`j͡{Q}R_,Z`.qk `3471'+N;vLN_B}OŪL܏rz/ƹE) n -+X9X9\aRMĂsC^2c榫u<MgOwc?bw]+[]m)8iI#s_Cаki/ j:?˲n+1`kG- e}a4B`]-9+ c&C>-OmYS)3#Ov 8 ~$,a#oe&5g/J |e@8#3}W.1_,0CvJHD+;Dg`wAH/WPĂrKAa!0^f1i[Ax"USm )%6f/}ULA`wDK(@bz7Z^;[OX!>rSp7 unT!&=Num4F6݀[5VGNq2+SuuF+[5{]xO]Ĭ1jm/"se,VXb0,aIfSdƂqmg5Ō#> {5`YJ!|5bU#uasDQ 'I-Ak-)TG ^K7/ Xݺ}Dޑ[f0? \{NGU*@/`(pASN&j&87ѽog+oݺ^czp_()W8ɑ$u盙Fo8;'-Դc`s*Z& ZpK978  lU`0}Ȏ0{3wi/}OCLc8>iZZV־]*?Sp7NFW5v%K+;AnzK/j uRr>v(y }e]Kn B/5ڔ}o7mim.PJ{i, -b}=C'Lp+h0Xd]Eƻ̓(f@g+}AsfRW3( 75ͮ j$xq0؋FV17R1Jwi*=qh> ޹[a=viwܩ)LV3s imC0{ E+eeY|tЌ^ ֘+9aoԬ Z34է4|sF[ՆCv\,b$0VpEDSx .h vtT+Y}P4$0gIj0}$ZŢa6 D ZA`S[hz`E4.X8 .p/~/, \sQ ?/,B0uk$XB,˂]z]?bhr<hm64n5;?9$p9vifª&z`7&0@`&poQS\.8\g pD.F8W) kyw 67X^\me!ݟx.p֖-m\{26^!m؄5w/n@0FC`fDad*isWm:2|sL, dauz Eط[}\K)>)}K" ZkWƹJp)#2I{^6P:V6EB`.d=֒#K4qoXf`}`caqB'&2;v /,=n_M$I(`_7k#aΪŮ) 8! +l<.Sҵ=cҠltٽQ8Ik%Gzx9DW$]eV}KkTC"5SM/6-^fmRz0 ҾO Z(2$ʷ `LFe4m2p`L'&YD#A` G!pVlQ X 9Nӂ#Ya12Pif.fQ0ŒzZ lB-Rz? t><߃IV^vYXGL#'LxX&֞]]G;u CX,F >0VO9 ] `#$|*,cR XԂNy>$𻇒ujW]j%݋dsVmf7[u$)dW2܏t#4)@ߢ->E;Gn례={ieH20R $+DE^+ш+.v {kpV!Y61)%l4 La$k邆bgbc;^waoWC`wE'3SQ+7*H>8rq7*?߅ʡWt^?aPsJ҅c'EH `ɉnSoa/{of^iNhdE Z$pWv^䅜 dRqAcNh>nT$rW\ b40bw_^a^u y#:8 e-pn=}z\֥nf.'L :w-Ǐyq ":4  #ΞI}5-c.?}M$*_,k C_Ѿr`ĭ>Z4jfD_zm}D:\N f"$ _e̓;='dF4EZJ!`0_ `gq"0EQd2@c:m/ޓwSǚ}_>: ::.HUIrK| \V/ Dt8c zݒuz!n޴iFV{K:z{{+V|¬et:ubįya<`f+`OtH/J1\_ ׳>gdT+{P=a6np׭' NvU2(LGQ ܅ӱqA8D`@#J 0w#}X> oqBF؊u۰Pe.XS `ٽ^5MJx 7HI`Zr}H } } v*~mK_uG&^VuyAaX;c'p5]ԇc-ΞkVGxJ’CHNʅzXWvy3Y(ӧ?NיaBϒm?_~ᰶч^5 3yuzU.~ Db x`5g\BZ!$,j=1`˚^ytؓ8 zǀK4Y0( +rVj>rP&o=}T˃XKx-\e[*xpuV*hcvazt'{Y]+h=?vςf'_l'SC#\A˷]wA_1yJR'Hz{FـGE`{)< :B1:h/Ga^Mf=h64т[<vgJd54 ""$eD2nЈiWFi7aAUǴ 3{8\KdAoY'Eش $}oTwڵ߮+I}X"p/fm0?8F`>軂os>3PXbW_Wi=L[U ,7kk>_}Jq=UWe*{ӽo}֧ubaNq₶aXvlamMMh셕=b`'p"`CeACk]`'v鄎<*AovX,D~&x2.&Mqgw4kM{>+KWnpٹWF pF/JL_02p  `?; ('ܻICR`ebwܴ銸__:Lf'E5:@j-sl VLƻඒ-Cϳ4O"[EkeHy1XK["oF8/6!W*XjEa}a[aXQ*%ﺟ{nᑧ9rpy17lR8 )UF[+ `/6cp Y{`IRpaei@wiIGXX *+7.gӋ '!v;{nbL-DoV5YXFkE72 I]8IpM} s\/0`PZ 7<^LOhqW`.l1ec\2^xpqsB>Nܪu|[kEYh 5o) 7/yӚM'wwmߣwܽs]ݚҿ@T:AUERI-0P~r뿲whq& .]w{iimXv/ߩnsUv]Y7[= zv_+oL k F q㓑01F+ {;ɜ`o!KҊiKg!]ZjRum|yKIC1on.ۢx Lp6_na >hryCUx'~}a+^|<]$pGgc͞/oZ`tRI~ᇧoݓn$ 8hճN.pHqwLm*#_<--XЍe`(_ERt$p )9w`.4'k.s.Y`- ^wz6+jLJGA?e ~XW.#2H~-)F'a*٬Y0܉â3"F0A4_'a~QeȖ"+aRyyE[uc Utf3_r< A-eG0N>aNr=g~MHtxま}4@,CJ «;#>s_ 6!ꀳGV-ĭĀ _*-⌅nXJ.^>JoV!vOأ[ƮSNP۩H̹+Kg{TSV2Wu6rd?[jJ758bfC>,ӿj a޼eŞ>=4A(D$hQ $[!ptuldB8 = ΂b82S 00p##Z0#b Ĥob d  aq4GKocoŝ }N"\鸚QvMcv̰B13@6 ]M*\Ǔ|&śJ]wUW ¹ׯxˡ+1o6:z}vpz#w% c]O?IܖA}N}GEwﯬ 6 8p /+ࢁ1sQZc 0`uHwHFvϗt0!5[,F_Ғ/k0W\c_IYm/)Og/Ǖ=n;Ռ 6da^Y7ː"psw͞bj7۸m"_O\K{2x@p,OVWM?e|ftîqHB{47 |K9}Cm?_ӂ9 sY!.Sh DgbQx<]y)S;YgctWZ *űRT\a%,~7…-¸ۻNvmߡ",Ut k}S!0!|{=tMtӿ`:c`~E29\W<Ffv9NlŔfCC iP5|B-0'n&W5iX].ݍ+6Ǐ[ Xm$pNw"~$_ Xu \ kuJ' &] Y>yEi҃=)BE[xZ0Lhf .<_I`?[ `~Am9-#0nODVeW_tps(=D/%5tRN{Y#U,K/ᆶ`Ibp'HL,/X{{ۂ1`'< }EN&SOīdASԮ- #+V0fF zp\BWu,c0:H`oH`dpv%|,sn?3 1\+#J+B8 LSFc¯ZѼ `" 8)GM_9{)P93;"F=S12Pт#|>y`w" &BbcBݐF[i= EElOe9 ?^RAH@PTP,e/h}9ߴ$\[F ̾yP>я~l-[ P!pMg#+:'/)-',qdNSmZ)!]5hōN(;O z^<\BIifٴ:|+5*Zז$1y;]՛|E ~^MpXEw B+ErY]1C K|iPMゖuE_ǧe?l[EDZE{5 i0N ,tA`VvG+wbzAI y0( V:=2 0\LBo %ϛBx:^PX,֐%U\07_ le*A:W?K\cHS Hs1w^%`}u_ ,hkbl9m6pk0`!w. J+Jf..JP19`&V&mDuFZ#0&ZE`y{k(jՒk4ONV,L:tE^6kK*_G=>YU90d=JQ6Кe>ЛǎURa7zUЎ"I|)47^eK7hP|bAVkYmdi/GLјZp5كIfi,BW:_<B]cKN{3m;I3^+~yqwmZ SW,g'ep8[d(:bN|};Nݾ{}]*eHQWqA?jAb^yF9E,[Q U| p7FR}4TWŮش;C >gԿFe{ޓmUEpX#~ XG$J ʘ5";W(O9S?pVL; 0W,p,.֮h{[ -zEzem8`,E+.1`"%9N 6!OI`G6ݐ,lHH`},A = rFP=_YVU_zL-F 5$%J s<  ė7JsV:ShVK7g8T# 6rA% B_3BGU40%Ŕ4kbEGD>d~q`sA;&t pĀ 0 Xܵ@}}Ѻ4q6{gi͹(qH )j8j7*3l{=ju1F jTjW)>&ӡuAt?}~=gbfBlh|V|&YWGu]cL{_ҡ&yGUH_$CZ X c#p)H-D~ d;S=A`+ T"~\!CoC40~#؈}334M(S&YX?'^4AC \09#~G~`1'f͘\,̠:\f2nX:.ۋ#ʽr^bnm}f<wINA8EwfJч7+f:APe7Đ,DLܙYZP "av$fvaWO3 2$ګ(`[5i(C13- \,`L{0z=$f]C֨b#k|СUC?%%J ݠ/g#p`rk9@v"IU!oڗxrMXV@߃]LI5#X=s.?wZNgᅘa0x\Xh9 ^t,K80c#Xw߬sEeXs"0a8)yc?|z$^ЙhU\@Xgֻ<{w) ?!IO<%}G~D8p0+3@@;tY|3ԯ\qhNJmРo}`ofwiGBpW*$ Z'߳.k:n!{~FA|(p8c-?t?b E`> `t38U#ɼ8=h\FOccwEqE~]V ,6za~ fp4Xudr u'tyT{{[ S霮(`>h,.~>3{ΝU|MŐK:' tv`3pthWahl^pBҽP6- + "˯YND@$`-eF+8pMlqlQ5X$Qgg(NcX6VO$u"o~L6ZQ5Wm`1Rm`(ka0`W|~WeaE[mսbpņMS+ 81`Тfw3L}͊_OnˎX<?cP?p1ϰg87MQO0 ^e=Q5+bƬg:%#'yŪlMn^拟q`jV y6(-+;G]ʶ)kJpN]?v9ՊjYZΓ>_ЙN@ άx`}BC^GP#Ak2q=c_hRw%򡕛Չ`Çj.\ Kp"82p~w|GŠ/=.3N/Gp#߅E-k`HtA_Y_ ~ Fi!!EU#egKvEo=<%KZo7ߎ6«e{L"2e_t/'`=us0*FwC`"5ۡXƍoeETѿe`)`%6l^a -jZ3 qV71]e~rMBjk netRf+!W\to`yLҊ#vc K'( y.oKjc9$-o4H` JeJ*1O~7x'8n pi\b7 )I @.%UF lUu/$WfS#v7;$80׿.h+u| <OX.hFu\Cr3OnLo )LԽɝ:w+|gRN:e%c^]kj>q-vzF]Ḣ%, n[pԽ}&Ul.hAT_qPosqr3sWlHMWXnqq49qjӫBU0%t#p +׊ZȂ.~ #-NRdIc"b㷸@;kp INUwWAt(m29}Sk(Q?_XcU[~3f|%`&| Ĥ7LΏ_2ԫRf[?s0ӯLg[X?nc)X~0QKo}Y`p_/#=XOE E@\/S<ĸj3媭|;.h_, /i!`7p­gD!JTM!Pت=f[6* /C,\$p(vBWљ8#TΣ~%y=ucH.f\t/OؗM0m-|+Sh$EY U:aɜ՚UIx 9/p E``2d^l0AET`mV "CQvFB%jF7E‡%s'.#n~Xf$ 730o%h;O.1`0eW+6$Ew8%p_ٺyӠ4ޢ_\\0_BG% l.,vݓ}tS8|yw-EyKlnX9cV^Vnm8ißo|st{#~+1Bࢀg%i8?FXUI!xGutu3RN:_-_rn'N@[0g>P z⢀v~t_Pn;`n[ !6!M ٌ} Su8Ȃޒ xpcI Gȵ: B]5nW+K$b `ES!tA Ƚo: fAa0N ,H[nRe+\"qs,*`=)+g պL YE9kR6\ilU ;;UK@t\40/frTHuػAwREfIVb~Ys04AZhy|Έ[pA7.6e M|Tu/\rqSg>,2{`LN̅bJK,>fxZR2 u@I߂j>7x8y (`jr+ |LcEBe6S}s$KW,.xs`~. "h|`ΜA {gH:%uGP.tҧ/7= #S EYq@ $++ nئ1#2 ࢀJu\'_xx<-xϞ0sN:$!&~Z>յS.`8 pieew(ZM%ޏ85|_6JZ ͞Lݍ}mGaԟ}bQo3Ǵ԰- $?4swg?#l#cG0NU4 I`N- ,s L!u Iczz2 \LhZAZ<~&;$6N)?/W0?ΒBR޸Nt7 bzc9ϲ0ܗϯ)Q#Bf r.^-[I`W>X17r {'U{BbC4=P`cpwުF|ڍJJ ˫8*e 9"𷄁Y9/ LuJ[siExU7X%B/ ߿_u4%Ku -+VgF K8p:=N?{зkY`:lrs_UoVQ}MT pE[ҳh5e6/hɠ&` GUc5*`,3zB=u@lt(@u` DI7?zlX5}8n \oEliGeM0]P}'N( *w6ԯ,e2 ^)OJ a{ 4u[ v7,7k}1X>fWK[6b`nQ㮵-BpÖi?\toTsa3oɸ"fX3֚l/ ,A,AWF0mX=WZA_i85 N['0EKL2o]ƨ"p~ `T+/dz_fe LA :l/?y&J8*]$HƀtX{#\\S,5?h~1$UΒ{`ʆWFkv8uڋsa12YQnJ&e NcZj*ƜL $0<{Q% 8y鮤R$Qa断3L:3 eXAW4֠޼>.5wyחhap0k~ |hsAWgNsF4q؛7'0ھOD~m'R %8~? |3&}et(Ko[CЎ k):*&pxx|?U0 5ixodo0P]`PstRqHs5Hq+A[ZWxG?ꍰ^cXܢ N8 t \M C_l}|{7¿hﻼQYZ wY3-8V {htBuov,YbT"Q0yaeX{$ 11q Ao\ֶ 2Vm-܄ڗ`A#KЫ|pO V9)H>ݻwCQlqV[lFɩ E_R 6,ƍ ȸr'4!`VEN'4 xds?:qDJcFk VQ, #2 \\L_0=D40假ۣF<6q$0@'zibψr^ne!V^xɝWQgj(4o9 )̅!é1"{.߳Vдju+}pFT:Nߛn% #+lis-+ߢ}M/e2?.hkE"܂{f(H\0\qAaѢӧ%K+gy< q$t9V⍶qJVG}Ǽtzg^?pͮJ(JFtx~.Ƈ"kH0k X}s| ֌4,~ \N`g®X[eW"^Fn[տjm{<1'n}o ڬa&_пvRVOC\Φ5ʇ4M ;lF oZU9`뼡~ AdpSOY_\1f l{gV0g~>oL=|Gxx- -.썙/M'ifXplpϒH‚L{ Cvnܗ$,-qm-f)^FYC-7!]/s?YXJ/xX(/NA7٪^B l'':0$0Ht >:3[y6"tQg .B;G&sxql:Lp@!х> u*Psk)kuGңW+y)_]; EIDJԪIv'T;YO_q24 |xs 1,rnG%z`u*e+ XV|8_B$0Nh 0JRcI_ߛ Z I@Ypu\B6ya_ejJ m)v  ~+ 851`;L[2Y_&,+07hQPp+mRq?`kYCl Y VE:_̔+:>b7䛚.hv w/z!l]v޽o=?}lZ5v}W_}5[n HH2j*1[ݰ. ܡ9 GOs8wW};9o4G";u$, |ɸ=9Sj-kk{7q]WLқUlܸ$ REٜG$u=λ>#ld澓2WttVSv; VlN󃅿\>pA!;ع7xƇ>QQߴKu>fJ)ބlȸH`| )`K N %Ǹ"ss#TƱ.9Xpde.S?(OqOF,Gaj!16[UEpZ!;g_pG6/kXT?WA]_5VI]DlTXΒZ{݆^jI+SXeF27!~c$>@z/ndB G$/@7H`̂YWhF'# FO^8Y&4pF3KN`&'k.F,ݑB;!Ty[ұ-=(L,diHUKQ4£>01A``5iܲJvoLA, #8]X~>Η#;IêŦzͳwdN`J/Wd`P6IH` $.g"!2*ׯE)4PZ"{ וDnITHB`#p7L'$C`.Hv[Sjl0\_&}}]%׹tpv'~кx+VWZrWo X+: d!oЧ?ٮǿ7Z>ܺ x &27,s%{c(^'H!SqXf Zd&*5&6o6m7u n&kP!!ߒ?ާu㮀Q+V a O!p%\- ,i` V =](Gh`x[/K]B-͊Κx{F֑6x}N&we^"DݾY-h _M';[.I-ۼy+&;>};noUm)C[ p6[.8f>nGn?jed`Hy Ҏ"Ebw{:h~w ~t¤IDޥi~rG=X5 2";Hd*8ܬn~o?mnBE< L,hFpٺ$lc8g_ `50'XX 06yX2qWIWC>DF >fi+YpCJ||[_-cѿ_ުZP`9!p `^m`0eCC&넵֔ZSG/uv\r XDݩ5ȫTZ]I2J"Ka`SqQJ ݄P،T [4"i$! Zj(lJR#lSdӋz4MTstZzu{cٳsu(KKtlnq)Vm8:`̒^n~Lx)`9)[i>QvJI`Og!Vt*.NsRbĀkܼL{klOq03~4vV+g`#K`}'!z8PZEon,}ӷB+\@ð`++χ[p_w)t_}s}K/,A$0+6hLX$Bܦv ݚG&dȞqWB!+  )C9;{~ \ohkDŽynϔ]ionRĦu;.6|fJ'Au$actT>o(VbU0N{]͖=O=N"p9 % !K / 9i)5./^ÑpߑFuQ϶EUxlun~8o{Hn햯b">Pۦ\m=֡(`̚q<,/E_ 0~8TǸA:!_|I`]![[ahq@_l^WNh\uAj!0$ >u0Ty֥Q m:8TkQ\fiutVH|Or<)e.WB!M{>𳓻l}˟s9GM] 6%\pNr<ա&Y[+||w|ym~a_1CjVknrzҏԄ9Z0 X+`~BY"Fޖk7㿴olYXP/oln6f8pL{)Cӯ'/ƾO \epFl' Dگ~mB_u[)K')1 ŽE&x:ͱHX7~26_vI7usKN2ڞMX 5<Ш ` @_}<+;6,".)>BJVNKo+tX ?VX]n{ݻ k0>~rYR1p+_s0g X¢ IH,$EִѽHi~]N@U_JUw*ۅ-$TxB`8LQ?$LEQer:"0)- ZEHo}_*̃N I SA`3k]a\_dY z]M{V`o11nZTTJZiGY>ވP' Q4_QrRE$0>h$0&wyd4'ydɵqɠ/m;z"t كo-ߤ^7DNci\ ע/Eۏ@9"mcr$}ei}Z$Zpz)v Az s kSQ U#xj{7U].^$5m7WYp-3}e}R2$p U {5OgM}sD] :EN떎hFbB6M.$-2׿Wm ,=Z-- ^W1mIϏ'B9<fxkGR9~Uv?46MlO4_>zlw~em1v2/lg_&$oI˒X𷢀VsX?ls@'e`/ $sk1`1?(ԍ Ԋe^5ҿDIZy s)Vπsy!D0GAS1C8J|

@W#9 K֭wI᯲Ky[v ͖Y{}є"bKSY'p05 `)1{p[kkxS0;3Ӑ:(9l%2VU2XM)Цu :%0](X; %i'SW>i #Nj#|П{ j{ù:o uˡ֐9,&,DʁkG;p=!!<kl5"g@,A)^A_v.1!eBoboh62 2Ed6ZuZ!Vɧ|y;υ6w蜡+ `Rs1&s ќ{.PRsWu֪5 Qogj."/r⦅`T!}ҋN^_,ʼnTY*`|>_':2sS8A`=_&p8 |ɇ>*{}vf/4P_,vRɧ td'9-G Ư[rLmΛe)C_J? >H %BD+Ͱ9 3O+ ϊ/8k}`Nns}c,f,JXYŕ*OyN \vy/izF ?~}Q(ޑ1`pГj*E@^iX'/&eQ % 9{ӷzuQ˴@= [E%gxٖ)uAͣǎ뢋έO}}85MƇceIY$2̫]~ѿ u07ծ36U%5BWy3S+h6u_qŋO;jbh eJ4 ep]U{ Krtn_ե!58'!CңeuΛIhb/(N>!|%,˜/_~hyHk]fsX*^{[0n   {LC=(sqٽ>+7Q{_q_u}N/ fu9H/Ur =jv0c6!ύ ׿O>ʋ^ qt0?`}X,kֆ$4g+Jc^:A z}Deڢ&)ŀ# +0E2[CSoOYџ?9f6R_k [TkՍ(W&ᰳ,s'; IVUZIXUCǧݰI|p0}Z|Ƙ={5KK/*ႎV_  /NN_E:}p:6_Ǭ/ZȬlPJ WwSE^3Eݷ_ln6 pu'~m^ώ/\|56fg;qB]u s 0WJk-nY$sD.{ "ZbUNt:dk=S.]juz}Z:-M#e꽏 w|>~)[ۛ3F/W۲Y^>,߯x)A".h8$pŲ 4m G{2^Ŕ hρQ,~M#Kټ0֗2/4b_~[OҶ ?C'4[߭:J0a.}MXo:ŞV-{E◵YZԘ.@*1`0wB/2KvuZ7 '0bBRVbXR!~uI !\]>|CF K}G)SuKٳn/o9jY r){8DB3 Z.?HW9BlU:ukE^ COV`Voo ~Ib6/1`%{n[@VI`t*&GZ_OB`08@w X}6F` .yUOXt@:^o`?7y}aWLUmNCd =PFA@UW<0DȚoE3k* 1$Sˆxts*`QNq=nYlX71D?u'?y$AC3ևy}q7O6_r. C<[_\(_$\d5R9>Byb\sBG&mEh872d҅*ʐѩBo9+sI:?kfх-VLMq&RL'hSRP v7"_~Vu2p }YJࢀ[[Wv_1j%~V:j" Ǡ|g;sJX>/mx@0ż >#D38Y1<З6 IS"oh9y ӦM.Y & 4SoVQu_vV@\a3{Y2,qx}Ƶrµl޵!$w\c,Վ=Z룱mkV)rjHr+нzƤ5LS-_^!;*zl4pxO. Б )DZk9X\4pU 0VkppJ :(v(VJC_/FR| Vek\4&~FNM+ )Ɛ^&!댁-D#-uKpf o7:ݡ7y#A-#+ `N`,2_*~R u*C0ƮK?dFH|?OwO]*JǞi93O K=\%p}k1`~VcRnu4݉E_~Z ߸w=_|E#N>G 3^Gn0jRhZv6e.mX؊!p:'9Gh)`11;kvGp.}ƕڏ~ 6ITN̅j,yN` v^2Z2h.B"4zK/:ӹ"y0hDh/ib]F':"\U|agC{-LƽW|N` `/XC o#IigBuy9ןL@ko_NJ*t#$_U!sli zIWu/5͆zִ&0F s['i>)oF]xUiҼx:xu `"$@mSZZMV\1miŮaGoy)'(P2`F,0˪Hϟ/Vt->GY0o^={\6qG7L?6WZЭ@c5 ;訜.fƒ?M p5_Vo*jF7_NG}!`K1?s kAI&x,HKE)_rd׾KHG-HA`@ l_ 3>p,,oUV>!piaUkEgưv;kɳ`oP|M/lT]jNcI\"pజ˯]f\\(aZJi]2MΥEҿ'a􏾋2m`vx 8VX2\fjOg̦ [,5#. @0}IGq{2 쾉́}aL C {I8qSgK@i`gXQX0=;CCօr)VZ&SXF~~HXCΏdy!3_ڣ\i, .L=c>Y̱k],]ꋎ#>U!5 w9-NJpoT}.ah,2N1ܹƨ=*'d={Ն+`{QQWR|U`zpu Oxr|WnTPW!e4 U_0#-_}c[ms4̅ƼZXk)}{\~0:L``y×O;67ϛzp-?SI 插ý8uDR'DkY]1 M4~\-SO ~p;0 v4oI=NK :TcK3/"X=eJ̲IGɂ2bj.Pz_z6 #%NM@&̆#^00IX.Ko 270 >KK|-.h" X vHNT7[L2-U޵{7`9WkF/8a?oapP%|f` t+㚋zfo^k6xCO׶]j߮y,pCꔾ6/K2xqTo>&5OteN` k#nVOףZb-a!`Op `[B|z\0tEv, |sBؗ _E`k^Zdu8F܃ݲ]1{qH,4,tRj/,=5.V}I[v/>Rd}62' ̸U!To ]k'!0 ޻Dc #Vx'$3v`7^v % }%GLzg2?܋_[+2q]`E 4_zM3 dhO3~Z V `LY^D!03֯\TV$n5 UW+񫴀=-Rzm\|d2fEȸ0cjrw6t_V 4GkJt jFlM_jyԖoEjxr5KVMu0-R$eS@xAm7os.Gkt\/#BPYVm͒:L^B9Ƙ6nd(̂ᱣ o `+q#/3'%0h*fCQA|6!28XQC^LˆƐe@)"ʖ~ό1f\X^#in߾NE_G A0$K3PxGfԿ@5Hǡ/سcal(\Ƭ J#; CS+NwxجY1 `MfH_8+0P2#Y^cS> x4A.?u\ZAp<[J~M0}FIX2v V{+Qg6e@w  ύEE'P-v~lzd:ʀևcT'GjG3Vi+  "W*qmN+KX2;G1sNmB8#n _VR~)[M+< `ɃoW]feow܆/՜ 0Q, !=$b18cU51+QG#7=0?B_,06E͛߫Վ޽NՃIp}҉8{F & _ʄB:}`]qfʳʝwIג.%c;vqϢJ"k_iqm pXAkCrLgxpm 4y(#9#& qO ŒRLJ~=Q W*l[2]^e <7+3[l~쵧uAW_NtXw^zի. = Gu xɹN⩧zFJ |\OrJX> [yjEΎ9 lE2}/#={ާ_z/2$0.9i'r@`8>"k 8$c2M2 3}K`,42>QyL{Iy dMWX%?Aj]yN {\kSKU_0>;PwzN >TXNKb5t]`]}3F2x0"WPזǓ0 LsAո)  TwV.:5Sq33K&_,piU\/ = )ApիdvLY`A _O + WA~"U4Ύh` \Y`zO~Abavp$(sQH4`s5Hh7_fNߵal0EJSG;et(q*6-Ѐ.aCFgԿf3cw$}bVxE4Ez{Hfm%U><ϝښV5\bJ0o\-(jJ٠˖G#~M_٭Q4tԑ6K%yQEO ODPՁ QH` xgIMGZ%~ztE=Bc)~o+^\Cpdpwx8'+8&`mկ)EB.0]:wn©) .&ʶZԽG*[5R&? # `zWk u%!0f{8`i8\U\7_N+ %.( iI2H$I`lZ##G ٙB3eXTd]{U^.  )_=WOkyQ5@k 밄iQ0@e&cnp/gqߨQ#W)XQH`B/~X#^"? >4C3+KBGUCˬƯX2sU ܹb;.,x(!`Cz.Wkd7p s+&% ;^2[sYLMbC[϶*`$pӸZȀU]"YBUҐ{U,|{ ћG,"ܲ/p5 NqO`=2XVU L&Lsѿ!IUl80eIW\ĀMp C`"//Z> ).N#j_M{ݷ{wsK+nx?5ʲ$HH׬\;Y^رo/\pT5W݁tfxfwX!CF㗆lXX[t0xԽv"-@]'“1W0ߙCM[p([vXx .34ũe(/|[֊.ѿS(8"+.W۪0h_2+L2rB/ ~u'7VaDH"ha>kkX`'`Cx#m=fj`E:qPc>! 6o.7/)awqH7S%9O cؼ&oW/9kHC!ʪr[=}đg(HHQV={OVnT'p7\Vmn݊ )`l89~pMw^x #ȡN X C&/*-V [Vzr&\0`< a]TRNX&E[̢DŽۋo^ME){׽n__7 2eX)GO_ch8_TqA/~ orUQ-|O 3!,'sg֘28\ߕp*`uYyL-/4>Peo*` BiA_61 l3 k-r*>}?M^.#qF)͘n>Zh.cY{ eG ;zv~U$:rV<=\ 6WYngmeFyPt/F7Mr60}ѷk[e[ǀזp $^aWg8;A]IJ:|tMXtt65Qy恿Zyg>:ZTUy ;۹m{, i]fL%o.vFCȄ.EsD3^!pu, G.4aEt?0r!pU/g]ig]p0^I)z.u^<_A 6u` euL]Dp.!)IB k6Iu*hşG s[..EZ/+o~&jUB~u$\vL2Z_uܛ}悆<ݣ53?)`WʀwGo^A[Ҫp>sV,P7h{{4w\ǯ8]8 5M a}~ߙ~ޢn K\2COlڼ$)%TSݔ.XU؇([ьܼf@-UHfdA`1X<6zQWG}tG̾rwe1hhUg xH qb+ #hJsN9.oa ,Ъ x%}.V=шcciEiI2L2ѱ#Dۺ4wbʵCi Сp9EF惮Zcsʘl4c?.h:e}ѣF4|7Ұ>P&<}7Ü#{IwԀ\y׫ 3vs'fT"t#Gc/=8B%%Mfo<,ݞ-rwr%10?"ez,u_ʠ|u.r@0ǐDĀe&Y!`@C,Erl~PFGw g5uӪy7UZY }m䭡izoYf.nKwЕȔujFl%<<]kIϣX()CxJj}V-\sL]_Ҭa?wVRYfX07$ I~5т=uap  1,C,jk)3g=8mĊ $_rvFpa՜D+1t-z'$q0 ٚr=E`u&A;'?y-Qg]~!t)Cc3pqC+Z&S VľB1xA,[e7롯k|jB .h%|lR%!*nC[β_qVNuJVmq [UGp,^hvcNa 86+Ob-k /u0S__45\}) E+NUh"8E_3S 7d0X[~cUMłw({n`Q S {=?޺TIa .`5F$*GiA`p*$#pmz:b&A0fzW ˠN4b _yt Rø  mu-wgƽw0gӳON/BRk**a!MTHG;ޅ 6_z0w\2(g~8mV%/$6V,+%Hlz@{Eb!59mCu$0vW}G_=f_*2 Xo^dX"-9oT".4Mŏڵ5R84wkX|) ́ߢoPs14#}Ci`x.{Μ~F]CZ|LU }H&o2ޥкUce ٰ+J/Qf#Quޔ=4 `R0_]S=f}eWW\9 XR.` `]b׺w;߳[ ' ]+gرC]j~/*Tvϓuu̐؝|lAξB`N˃`yf <0f_""b\*`Ӡ ؓJR-c͏Zw8ٳ"O" f\u fZˌ45 }Ʀ!X^kU"!p1]ӮrBC`|K =<)%pM ) ]_<m}(k#Ik`Le9sb6hfhKXaQr` # L '~um6dN5'6ko=ìLX*MJC^_P@W8tASKgW@ 酵7/YM'ߢET|ЬwiܫR`ذa?$\ΆYUoV*uVUxwru&]36X|4s-nkh_5aNww~ +鶝ן/>[; :|IV/ aXN Ci>A/ζ[ԭUt*`|^8M6mh `*1(=Ϯ)f?u@3+M, {F$|[4^J#J g[I/za ;tW~/yXo_ `/Ƥ~8_}S5bEت 8YY w4C w8v Ze69D&A>̧0`-{˕CA#Q>!ڨNa g8= kVb_@<`G_.a1Xo V-7/U_1+hbZȋ_YxK_W޴wݽ Zfňϓ;zْ} ڵ!P뇳ӯq+x"/Uː+ \8D,ˎ_ hk` 5 1|][d+6NY_/X/URr 'LP6ȰUgNp 9c ]:^oտbi[˂Cg be>AoVܾp#LOo,Oܺ.Ę]M;f"=;`d#ݏ?kh;tɮ F wQj``T!]U q` ,<]$3eHL0^uVY[ &1&_'6=ď|iB/aRR~-!`_AXdo.軧m`ZYZ$ԪbC1 6b+`ʐVoy%TU>K J8=X(K֨ÁNeׯ?ؖN%vg8|Ь}ǀ [7n\Ccܩwk֚X6(g" pc}Y&1DztTy߶os%)%LEGd;Ȍ52 $>|FP D0g~7l+A og}F|~x!o*6zSp:EgK38Yi~vrs| xвP鮅f?]2Y/;ul46˚AG`=]+30}'HTЉ *8E0X =$aKXe !x),oa:@ ~4TWC(ZKߊ!\1~/0sU*pg%e-t2ӿ\VUPZG_/W:P xy+_?vAx06cBp~V43¯*30طj x'Z^ ~ ;wn)#Ƿwɮ'J"mEK'f_Ox| 8k8zEVtϹ /Px^ U,_*D0}Ro}Z/(8vå/&1`X8C~g"1)Q@J.`C\ S9X_G8 HuV gBg~qyq$ߨ/s{KANn~C!!CS<~B}dAGf:ݰrae4>vhh\4} #L؈5nQ;/8=|iu)lnL?wA]Nd)Cؐ`\Ϙj6Ow0F.Nv-b& p*^ N6gm8AתJP_0{[0@6_8So`w%}=υX-nҖIX`nOW"w2덠qMsAW7N91,X'=.`=,kY$adu~zUM0ZG*"`0̷&ܶJIzL %ߩ,h!  ;=[љ$uk8rРHE7ckݪ3mUMiٞ8 IXnmR)8bO,}np)_*)U?i; -2Sɢ@VVDtЖ Q(($YEP q*]sjhE504B9}O}rF뾟y%_u_mO  p\'7{G7VN.Z~+k'Ӫ[o Ia?x3E|7PR+ao+1 sӈ }gq XnPߺ۠ `;pA@ k>h\ Daួ",Cߡ9%ZBUGݮM2<2Z.?̀ux E  -0NTw+ܢ5z ^<tpGqs$|&- Pŀ-z;۪s}b[(YqU2%eͥQ>v}xKDMY-lj_\<nT `p"p"[\** `vtIނj >V]|.f3KRJ.zT,X>s}2@S߅d[3fʮIy-\X/ՠujLgYсwߧcV}Hh 4cp{ m.z>S'ׯa`'6(wA fdC~iޡq___vH7T,)Ze>qGvDI#2G.t=[[FJ -RAT)'C|\рgb\!dx C_ K}^V=`G0^!I_cW w;Li/EG6غ5ArlF׭4;v t[::eEUk~b3M]Yf id`_ SeGȖtAk6mQ-"_&CR164{Ǎ7  Sn.YY> fvܭ3l>h'=*UY{&\ܰ,"g)U\/CٽDp#K+=\˂AoyzD^ #4Q=f u,~sE$/oJCFymìOy,o;4aJd|[U.G^N.@ ݼ9PK%Esaj-Wi o<L3uo`-/1jפ>5;~*ݱ!0߄[xu-n LOu01ox-f"-xwj`mF&|VPZ *{_\N+9WG 9gY%h[/$`9Q _9VG)dYgXK[`[mHBa3'V 7Aޚ1W 7bc1/[*X2&zYm12@0Rc'Cv,>hܾhUmJ!Jf5 Ycf~O`ZKJ%|kxUqw<Ϝ9.m>RZ*& X0U9x}7]O>!v˭ab(0.+h!)ac0MbeWSP\R %0F酥 ܹŠ!pXk^M s݊`# ;xvE)P+g͊ftp ߪ~Pc2K> aJ[N#Xp(O][B9ǿ:+dm &'"^XblLSb EJQx)bô pre'15+GPd(^F,k8 F;F8"k0T/yTp~H)egi XFP4޸`  GtS”lk]n2k4_j:כ.%}M̟#Jpye,mPة {7B&/"9ZsVXϼ4ZW~ GOk08VN`_+O:Xof` $ Ё R}v4S[G~m<`nmwkF2/:NߧH3RP&-l{ 9e]nKN~z9 p~F_JYBŵۯ=͸t l(boU@ٯEk~sD`!05_mIXu'|#)QxA?~k>h~؋ׂY&m vL ~Ng)«Gy1w +-F xkG*Hf-f:g!|/1C'K9g{~%pY/of%-, `plgAMl$aKQd+4Nt/Kֽ^KЂ;/ )यBRM% %ҾWPz憝 ^m 8bd61#yS0mIU wnX%TC'L!l^ \20GW/X c4WbEhiX pɃ#k h. ¼0h.B$av\'!xڸNXY kda߄&W \HތA?="0?Ā iKUј2jk16,W,y\q]86Δ6:s{v۸I o  ), eEREk$G#ѪZ:<oڨli 2[nv)3?[G)Ѿ`<~]40iX6000pދ4v_,O>}؏4~+[kX{ŗllM$mt^Mh\{r^cT_ ~ׅ" Mt]_aVGwfa BБp#D+u8>8Vj9Oӑ'N<`v O b(oOh~Z݇m kV/-rk&Q^g`25rͱw=D5&YivK{Pڃ'/f%<ѩ,(`fb>tb+6<4e%/2AԯwUpc=p@WyRgOk9!hX\-1XHYW:G+W'9&@x"s" N /n.#b\Tv!ыK wRttB! m׌3&X?C&Sžy.1>2 wx6ZJXUͺmQɫe.R{"TT h&s)`<,LG`T=`rvlQ`/cXivrP֑N9L&OKVO+>Bp |Ah`Oh͇swD"qXZg 3 d߷gA`2$.b.ud*V .o')LIn_XgMx27W ^)n].sǀyN&}Y+ثDW `)0S)S 67UkW>lHM\Mޏ?dm75 /fxfm[Kٚ.wi)`x5۱k4ܲYDbBk6pZv- ^zo;rt8,O)]fh95^1/8|9լ/X :jZa`jb# `*Kђ3`#l9 r?+ D3 UgJ=Mp-+hBUyo05 ׀{&0YM]śZ/'<Կ/*e6VG!CNhMaF~ӍZ + âAOG~-En zG8/7c?̮)k5@_ѻojz]g[$^Sr[ZK V9P]ߥyeiWa^ٲd_пEJ'N$}aPLYCslSm,*]`pަk{m ̃MT l5zV_ED`E E Tx >&L! ԉVgա>M .t` 8%pc}qҾD |AW6FnP dwX碇0gڊѝ>laThV47li#wXu1SN#nPg [@0  0k(Vcp `!E `8hPNvS @F nA^8,b`Ҡ`c|;.Gsg- 6  h2XUEn"+%}C6%1_^rimj0,'HPoo7kvؽV :8XkJ"8e2 EǕDvm3;O dYR'&p$p!o>RY3"KgW8 _TGghO\wցr-‖xDd,;3qu@0NhX}\hR̤L 8 vaWBİ*AXHDDΔ/~bNu=~rVEQ[5j`!-3O1̴W2'BJtnFq]2fA^}.+wto?OB-#yȒxlzA0xz /ϤQM{R%aU6]4oV[6|,IdXZ9`'WpN t a0Q  V'| p8O~~J~n+Dܝp,t\cW*auX *7a N}NUWCNa86Ɵ_M 0o!M _- ʞ`tHzPL0h|: nl%E+ۇ Ey?}WKJ V|<  `ݟܱMZSN1FU+첆әŮA ~5m*Aڢ;~T9h!/#Zo}pebܓW rcШ g7MNck8( e KM6,a+!6 m,4!ծ[Pᕞ`[包t߸Um:0Wj ji#I_ `WZ,u;fnִ8lV8Xy)3%Y`YlFW` z$bQJ/z׻.2{'7# 7k:qJ(An?,"Uz-ch+abK\nq < i`n=MϮg}9EOUט SV}> yf*.6v>A_,V߱uW3eGlrx\|՗_?F=X>u W:z3]m`Aeg;.lY F1Xc片DH А{ȆLkzlXvO_̉]XXf4)XUxLxx%B;A/ϩ~G1=X&` S3%0֝OslD:  l.xWMf/җ榨â_ W!yҪB{-Z,{c7paަYK\;ʬZCX +=ϡ}nUM9XP{[\[,aܮ_QK4gk?oay^ܴx«n;ձ逼q/CYMyU 7|&Oke- d"L 6 V^^_i`6Z* \l-[5jT֏f&+T=TIxO)cx<4zd\=- K0؈JD+Ÿ-leص=݂u63 `Xbf8yӒf˙W=E#FNF ڿhL/nn`Dthm2kر|<1+aɜZm/yA·U]xnjV}71ӧҳSQԾV zí>D`/`yZM<#?q|0au v`E Up<ϲ!/ ^, _hSvdMHZ˘.xF+E/V /Cs дެ?`gmIF5kF^1R1[,VcVHBѼM̶tW V߸댪IpMxҏnh]:NEJ|b78 `EzRt pXhQ#0Q`Cbw;, )zvW%7zO`C_ps Ar|8{cwsOZ@aPK ޏ1)bͳ͉8~0Ÿ(!`F= 3< 8 &}oXlC*C`l>է$Y%Y]ve3 X0s@Wu|1]?4ߙa# G# <4Cx9 s3Ly H 0-1^sB^ Kjb(-(bGnY@HSgՇTHvxFDgX8*>蔿ј_o }pIdA4' :81԰*o߻` [,,GyLO'!i]: `$Bbv2ۥ3?+vzZtR[2Wme.| "31;( NKo"] qqpǯWL:=ǁ/p7(,ϱ$0%uS!f~Hl^-]' I]k޸qâ3[v_Y*2ā;>䁛 |eK{'&ui ɹ\6zWK}ۿpl_ALP= u/3$MSI #ԭiV>nh+lǚ.Z-˴-/3&5*>hzy54cƗX~b&~Y*'''Y19}NIPu,F"b[J ~Q?!%0V6^ pc3WjyvL㈞C[֦`x(Y٭?W3F185v^i &aӖpb:J"KcV-],)+j.l=#ftÏ>[о5q0ٙ 0?1Jsʪw] {6Iu1[ٚ>9n˗@#bdNVD R6mХzoݕ{G/؆$!X=,)*c ɸigsoFk"8%aHԓ!ǟ& [y&j0t`nV 8e>KvM`p_b"c2<㪶[ *~.1`9w~, S] 803K(x rqgRe% j{QtQ/>}Y6EM^| = w<^ IYn o|Ien/-,$  1a)/Ȭ#}2'.U,Z(>n&[`vҿ%rTd1ӼBm%fI1L^r=բؚXB _Q%ŰE<^jfPʭ]Ǘ)Tpb0a#}KڿcᶡYVn5' }خEM>T3a ">iwuTUP2t`,EG| ,Uԅ'IBBa]@c+)XGR{ K7jwBG?kÓyfU$leuᄆYIؗ1b6G LW(FYpϏ>٥v+. E)&: }qx}c6 8(ǯU2YX-W6yX͑ԟ_ҪRcǏ'4hɤ?#"{'2q/x vyf[ӍyBL7IN._cutM fj*>`p?3_Smj ~9ū/{u]] [%hGn"2Oi8.z!I:~KsįPT"eR8]{O|aƫL7 2XRza/}lj8}O'7 n8 |)7̼'\1U >!Eڃ&a `\9`8eLnN4e!gRÜ푽;${4r`_r1^[yRW#9,MbW0/L0Wx.N ;8tk]v|T1gPGHtҳ[taMG[7f% LB53ө[mۈ a*A.OG 容6 _ x]<2/1X= OOv -c+Eًd8 ʓ< 1)`Y:/eJ!sCn11T"`& n/Syc%} ͭ~(`U!fdmp{σX5K ^,1}rҠv{@+jk 5JW؉$K&Sh=';2)eR`6g]_篷-7v%{Կи=*M.GeK_~GN?Z՞ i?5Rm|RR%!һGb%-mvٯY4.ku,@ e1|D8WyZl~d X%4~% .21n0^k1ʷiwS\d SZRG߃o'^!;𭕑bj XJ;-|1 k#dt3F| 6~` ۬Ic XFZ@S)dpIIQ tb˾G$X`C0}X;ࢀ3^( ¹ha|9 sigqkWIf r~VִK*gʦ1LˈHeTwe*`9u9izXp#veZpCBj2غN/NlWN`R*ABxn_Յ>[#'AT`_ooI^,w4i`T;_7U_*1&}%pUjn)i~n'ފլ},iozˋ^~wǚ.`Y+7nAOpǔ!S6Q}2$J@t;kݓ%˚Bg14餯b> '="SwL:Tl/R7Llle,VItށִj/QfoqF.КlanȖb|'[R1Zl\?r +]v }W3Ϩ_]9a{QG: ;⑂.5: C9IZk=w7T>|28tF~1ߜPJ^_<%o8H`S,įGab jEKIĮ`)6\oUkI[iJ^>j/©"_sF#&Mr[֗L4ˋf&5A7*`*MT{(|> 8m6'Qd,_!o{ `xˆ_RZ.uԿ){y!ib]Ps֗aD5fyJNEU-_(ط'+GkּV `ƻ9˅.=߬ .Lzp@C` [|}ջDWFTX~2'ر@\1aaXƛ˴R-8g몤ɸ.O=ԃWaG8vbWxpv8Oen{"3c9Yʓf156{~+uG,]X8+xE]s:XoB /u5L#=&v5p?m׼r:[ ;K<-_^mUrKm^Öތ%QV@IDIvDru)I𛇨6H0( ~0^x]/\ SR't!ac-=okvK }T ._#U+1e0fš@ \Cb!!3 ڵ}8¼^O5UuqF%=1`k6eR0#<$ `sXݎ7#۩A!i\'}1 HyX}L o}oYݙXqsY{U;4nU5]ve~ _l& @aKda:o$Tb &6+‚_*}OR/޻є cܞ;FX0\O1XG'vLߡlK9u}Ylݡ}*LoqW{OSYF wAi5-q⃎ эIs<}`f1=R+N N8$׊872MFvf>]NT־<+ 3\qOǬb0F YestഢԛI5fK@"JIlsF#yjBl[3xs UG8x`pA+W !+/gheӤY l6^Gtڡ b;u8Z$pCMϐrUwfzqH>Qp5Jf*-7dy+fJ{ID̄d9o..o\ulv!`yzB`3MjaJGJQإ - {LeH!`x x Xv7Vm z\6"{ XPpN iWUNE`7^n!lC*YQ `׿W ^׾לr߀-fV#˟+,UVMVt\g0J{^lM{bw /&{zoe}'0Se80|iD(a i6OR iZഋyf{hĎdiB']+9%,Nݐj%uAܨL7`ံ:(b$Pw*qX7nk,%c!h;Egl屆JB;%|N??sy2#m6`0a4VVB|y `p8S B||f"p:U+Z+L{xebp<{<KX\ Ti>J]KoZW yBn!@/pw֟@ǵ]:(`1蒄U˰jRCB,"<>x,/JR:V|^ ȃЗ $0F?WsJժnF7ێdHVO2¢"&_5%ZǪn0U)=5IXp6?~9ٛAZ; k 8 4]\%mF850L.^>1{W-&; 3_vFXf@;E_M_f[y'PH]8IC`5K;v 1F5 o1g,;n iүk40iV{Z˄k.zcX֚c%|ubEer9>5|72,@~Nb([  5UiGVu>;~>GUz|Lv$e7:S4yNH[dsˠ\rLRmVbgsTqm3䐕V"dӂGA  $ɫewiLNUe7-Y| WӵpKH5łT#8F8ldb!Jů m?FAsk ~g)NYU ,8\pU1w `Kv|x0X->G6/n(GRfg_ Aa2Bq툣5=z%,BÚNgM>/׿Q%LZFUN\>J4 i />h/<]Ibc{@- XJϚ4}I `%u"M/ {R@uU_/{ͧ2K"gXڊiт֘e MQZ* n4v^i̲Uk=RM]X߱#mP7ǀA)ӭrQo-3gwnA1s+gJ >(d]K@ Dk4+Sۨ-In+ڲ"a(-!c 0 #v j˗[qJ}g =h'E|nQPdpʔ6fc;U1_h`8<߿\w"0^D 6C{`E/MN{6}6Ɔ'rp69p35 M++[%j5ݨʯtOc&~\ˎ a #-F`n^.3vFK] |Ys3 ـAݚf- ]݅`f_pւN+ +(.2k OwY7%mCS,yUEyɥ7'mԿ(Txl@b!ۭ5We OgUog7:MvR* =h -73ZʌdQ3ˀoj z)9;A_X̼*\T]y(> 9;YjNb'5[m͍ӁU.x:oy~{귡hAV#)am%=?k͖]iV*z>-Eū%s9:AnUm]|YrsZS-Qa`:zk؀Ti:ؠ698"kZ]- ԪH ̛3y 8d)蔿qJrA%(쵽 9>wKߓ6I!sH7g%B3*́xGѳ_ )v!)pǴ,k /"* ᆶK]V ]1T/W/e>f♑bf֬.xݒ~xߚ=\R3o= N 藽_E[n[2;YXNFV C` `Oֿz 4Ql!^ʶ_x^Tk*c*+)wE"-M(eW쵓WД >EcTe^:#_W }a V l&N;G?~iM zu8n.FY?KuK`,y55N?JðѸ QjcwVi\wBspbprV\ Fw7$A'hL*NU<& XDh n[tFYVҠ&ntQԍQ `p[k*8βߦhÌ"ӭ̾/$VA851Fю/3V`-Ntir}K]sG^7MVfH zԇ`e(048rg<Ϻ[ܹC~y ݄.@E4Qغ`0zgVம[;F21`=O 6T>򢤽Kkj^Osg|drټY 8qxWT|[}MӯHwWvN@di;M^FW”V K#/,xe4dЍl% 1fxxې )qy)np$. .Q|c7.&{: ̠/7L! +oVk.+ bu*3 05# ݭ+xVpsp3xOق,R sVR_ Ε;軯ӊA0bo|@y-։ReM ,`:@C !4. 3!F}+^"k/5[XAQ'6iЗ8r,|ޯ  :^w\ΜV6˹}o?([p]'ţXPְqoy'E[9NYY5;`gm (o G4)W{>$62+Oނ駟FwrIC*x7]|O\w+b|[о'0z*p{{M4h+r[qO[ {w\QjV\-rUfߙf%/K:\>g{@{g/vW<_|# 6H_6$U>h}z]5 vY@e#7RqF/h2)hd܃uȝ2 \ ~ $uy5oU_1B-}잴YFH@k+` 5'XpNzٻ^rW>X<`B !A#Qwʌ, ۨ7wOɌ}1t\xb:߇.u)+Ҁ&\+DQ|XPAp—|:kv {#208[૙f*ɀpoiA,RI\[[2e9l*?; N_>CvohjV]K }BTͣ38-)#ѻ= p%ydwdf;ѧriK=?xۦ֜~_e',lF31`AW y簠.+gF!Tf_*ׇ0h`}KUjW:sr?H6Hػ9ߘ*,+M^#/a`Mg%,VJq ъAIeIP xpJ_f`e=*وAL C xy~]V4o XW^oV^U/G7:1ȒI`=&OCVWQT]Љbf/]$aoWp ++j}_.-jK U[p5 bB*-#CrCoV .K0ӮFU2,ΝU赶TL,<ӟ inhpR,֒\ln0汚 ˁ ʔQ"/#Y#xY\D")A^^ Pũ`1om{.Gq iLgrz]޼bK[&^a0d,Nhn=jn7Cpز1X0JW(s}_L.  Vo&͂.YX5ib24>'ZzifEL6Ee}&ӐyJnTz:I"K0"WSs"Upn.J7UokzRH\"Rw]G |>d7l1؋AKLVe1c;6(`N!12Qk,iz uy-KmQ G6Bοj`Uu[9* Yߋ_Pn:3[rB/=O_kMr& 놹]ٌuFGFL%(PdW~չy̘A^WfhYsC'^nG k6+{NU f߈ UKI/Ko"8/s-%8J8҂9#ItDu}woRi[mCIϒ:7G1Yj8 pb%|axK^P^?ه+`҆h B;3 g,cg]Uqku**E  UVF@j T#Q6&Z5B Vl%VrHBNK=Kj9{!U{7̂דt扼h\j spS?%kcN` %`=\nh`ٹ+^2sʦA,ӲJ/x\`p[څd^S9' Ûlv߯lժs8[i2+h:Rݽ&CawMLrv,?) a519-Y`aH}S5+09NAS!O9Noc+[*z`jܪ/\GX &+ )cROxI3IvW&sU N ?p4꨾[`^N!=jbłOHƳ8 ΍Q"+>v2_]SZ ,lf4>H,{:M{gϸÿ&x7\Xnetfa5T ,_V&Xru_ ` K-˨yX\+`0|Ȉ 7\j9 @ќlLg, ?N '<| v[. 7iNg5aҰ ?>?rYP06_@M}!6+i!C 0IRýh_g/L |#R|#K!1/1nF^t^J쫦~Y)MW HuxWj$.ۍ.͏RlT*`Uy9r/}ookEb$A-zфs;d0\zVxP+Y|9SLM?T@pj`vOm; Mw;8z5 ^$p֢gu-Ta1t)8}=6B" F߆ KAz̚O[#幂2p ljd1绳A`bSLp Vk%k!e}w̓1~2 e6 -~ [؅&raK6oTr{Gƈ k#ccQm\h0%syM+hJ70|m 8q収 fo a~_ ~7e|yY +ǕFA C ~Tf7܌#fu.3y-qx1f!$A3d> WY[go90YX?qf !, ,[x#^t`0%'#LX10ԓɍH`"i7NpniE'3[68"[eaa(p6IJQ>ppݏ0+pld(`B/{ʀf8/_7pp!VI*"Xރ6Y3/sV.p]pт{tX>н̙x%db9~qBOTƒ^[pm`@_7gjء8?m^39RL~Z6O* %ݨÙ??Je)Mn?vUr3* ~񖲷װ|博!*8G!x (E?mm1N2) )]2fk O'ǟQ(1Rp'pd_ 'jGyy1"~5h_Ӷ"M\da!vy9\("Xk8-e0^ p] *d 'S7$Q?`6Q[_tw7tF3PBOb\I .'{<"TEcR<, Z,h'`']vl!j3lE; MMk=(,' 2`^ XC~O,5C^Ʋ1NЬuٷֶuc0K!WթޞN8 9,pfͽ(` EW3ih VU(+06 g⭳f͚ڹCc-O6wwoVE-_yx^C.Ѽ,!_XД DW24Y4//xWD[ܞ66;7h=8eePA8 ~,+rvU34<ϥk鹭 6 ܀K*&e^>s2L ǂq%o1r#'.]P/Ps$Jз `E-EgĔ  RK_b?i?0_$W("k9ic V `0 wvRet̚ E I^0nEߌO5fo#paN̦ YϤЭAw,n7ɝf9pf3]ߖ2f< \b#|c. ^B7m?<寊_^ lڈ^k$pfc 1Imǀ #ǰwҥ(@]sXݬDR&]:pOܪ/Bt؀iG վQ*gmFm[;ٷwݰlpϒSXGS_~4c}1)c4g͒f:^el]5`1 XC"  yGWKyeIZNg-Az`SzFA)a~?k W{xC|xJFoS\طDfP,װmЗW`>.5?=~)SxLIh9* Zo^qf4ӲҒJ-)R];l|S Uӧ_(0 v̼Kj߾y.)X+Paʹ"_?Kē@ϐXZ`H1b?8p^H7)Y,X`RSm/ Lg|~&#WC7up>O1,{N8J?M$kvSƩYߩq_h(.>h0.(Cwo ]Q`B ,]AlJfo?_g`Hv0&+SA-AC\БiX8;o߃D̋V؝==XE` ݃v*uq I .";t,Ո`L3l2oS;`8.XS+ rѓpqޣ -SnD  X$|?ձj% Ǧ놻7w^3KΜ:e;8` , IO3 4fM lDT7K/hIcQ1 C[, ~A0~Q?` ;X>Bp(a;@ ,Y6g| G`)3+)ւ0nCb^y hzysͼ[lm N,Z3VB0  Ni7ZkQ lCqyg6N:146(gBVpcv#;:E⃶@dAtC}Hh`Vkr.Η}tAC vʥ)H+֔f,t.uM=5WQ9L_0sd~`k}Zb2 vPMuoYm#2L[`Ӣ ~y6$X% [J@XoN5_GG!τ# ܠ ,faN }=N^؛Qi֧tN,D?̝) ?psGݐCnCzz6`Hlk]{coҍfizA`tM3B/I{}*HXgDY}/mfo۰zæmm{/Zf;ݛf`iJ/o| X_[h\j!Gv=L g\ݎzr7 D2ƚ2.5i2_,NI,y.#.ճ@ҽv`سZ= EO*Z8Κ=mVmoyYt"}ሖmPլ aDa~z"VVC_% y$n#^Y@0GvpJAim d )T\|( )u U6<rCIt]aA@C+aqY!6QNJh+>.q3$0>_U RIc 0/L_}in16'8~l9XKCp֝U jvzݕ +6=u;B!ӏz%O~vKJVf[ qw?yٓ7ph7f  x}u,2WF!}Ӻx0~4اzBH]c%Oݲzїd/5!l"߸5~C!9H`SX),`Fo7d=5<=3 <!͠(Hxc(qϗ-fkRخ~UN'x! (`dvM=dt i%s{ftJDڽ剖%<lC8#bzE*5Ѿ]T38[$f:6sIBP;G9ϬYkApM`޳-7\ΣZVu]qxOɍ qJX.Y9mwB2iW"f{.m+ $݁ci+Á]_R<=;S7Ej,L,HF$el3Bw9 K)ʗETd;Ok§8''0 DF-h:ؙ100 >'"=]e%؋uɸԯ9}pIBɒ-ېFդL)K?_!D,H\% /9-{y%`-ʃ>o?PQ`[Ak|m1`pE1Jbw`A`mI=Gl+d풴&_ "npCcP[ޱP5:`U]v2Y"/ }̘"csT@xWƌڽnwLiVU5s\e8m|C0 Xb/a)ȺŒ2V=ܐP2$=-/Z- _OإQ޶EgtKX;jklǰOiaQ JzYh_t*'܃w[#>^N^-P\ ]߶dkR-DN̛)|V]й^|1Y4o`poxǯ[RX`>+E2x岒):[;k5}[.gtB7AO}i+vt.<p?#g͘*يMCogvxӵתD ƽh6)쥰R."벗BD#pF1 ,+ ߂уZ_K>q0:W&.Ӭ }e^z1(:hM \ `,$cVp[%i`pNWIX*eO~Dނ_N睷]ߛ ֶ./EG_ftV iđ-_}÷ }7TCze:y1|XX,s94| '#sr,,|?eجdQȍ5kj\z=CӚa2r27ۺ/:-f!;#o *F=f8smBz:s#UHE@Q}}}gz;c swϏ㣇 z"N`yX|Mj»ѯQ ےk3~=ZűѯAks[d%ιXɩoUY 闩ѕ,K"B̞& M M Aa\+;G: *h`wJrtр|SLaRwc,z_G03e0b N#/_m.mk׾1ehā a*G7JA7"5pU ++a*GyȭC+.Ћ1_RK9#YЮC {d4G!d|ތ?2qo̷#C!6 w}q7 p`#_ɂN۴e8] n/v>5 CV=/墚Z9ڤ0&v|>&h6iE:b7pԊߥ^ ,^0E`t,V񪕸gV=zT"pES iO[%/W7{3(Tk%P}~)XGG- ܥ|7P &nq~w;X=,'OWN&!_b~b@<7n=Lև5.}\a탮Z׎x'y |CWS+M4éP8p@sT(:|J&-uzIA̷̦ 5o0!M ovv. jק UgD1ROi`ܶv,]Dy߃zΖnrS>=q8GgWkUUVߤoÚ0IgKbrvOd*`kkٳsNO~#- ^#17Qn`.8\6HCOv0:mwkѽK)FCMMh[#|W~ 1#/mi~Їަ 46% YǾ [.2[`9:4Z<+{5A$1G}")l_ۈoV]4ܯf=s6dKr+t n:<o1EfĤJLFs=|2 ŭr0iMz{PX`=ʂN -hzyD}5Z9 i%wϸ$~Ԉ.K_W1C-k#9\̆=-Jӈ!b .埛-)j l .$j}r)|630 `7_fkQS`oxu)=Ð@I`mwwE;!pz=U16[FGpIUBn-燇G<|㿵:4j6ucH$hm~+`Rw?[@_ \pC+v9~HY~V~\ɋ@xqlvv7(G3¡:pv *ߺvW XdPa0JH]|`|о I6XAc' 0D*bw5v. ;-SƾmXm @,8`/nBX[ [0۔bp 7!ۇAJ`Eug,>׍/^m3EsW*p{t䦧ݴr\fO*H/t֭E<4ֵnzM7]ri'T:u }Y\Nbs-a Q0;۴%}:ʄ^25e/Pr4 %+Yd!?{ʯ=,Svح̈}]VaR@sYp#\hQ`Egh؇YCc?^=2D)pc>Eo5Z⁞pWX< cQp|PGyD@_}rq#p_ʍ̃F?3V0A૊ w0tN!#LJo氓\K gzHc{^|iV"0:Y#Y< S!U?GXhĒ6t}ˆ.e'%h5c[,,zM#[&oZwYclià^-K]eL5yqmۓH9߳ۈskKlXnLspW(`ثK8 z`}htthpxmBwےQB0eb +t( X rA7 |Ok;D5o5p LUİUC|،Yf#\V,n1W-L*DEeֆ{bn\_#2 ewT%G*1[^ګRkӛoW1&/7(<xY[:멏0a_s$ z ZRwз0nS̪bXS I`#pil,'1N{3q` $(w(`)Hu[/u4~>0$=_v"d'$h&`f2 MfQߔU-ʊ+/zVǀ |)\p>!4r4o_qpULee\C3@` N4'`&@0NB 7h̢n\.:Kh5o㖀fq61},` ”,+PFU(#)` Mĵ9Gc>.D{O7XE/Ȼ`/V[85wަl 0t`i^;Xshp靖/–j%ztn ytuʝlpԿ֯f%6嗊h`B24T#R_x[GmM  e/4/g\jvJN O}럣 D^'GY 8Y*M˨C.? jc8sl.Q`28kGK *1xE9s+,#JZůDp@G}J߸:;oI߉G[,CKu{:M' %\sRY 26f{ {룜ZQj&fƼyGGE4.N`]w#-)!o_ 8 V"봚::¹ =B~,ۣ^4i1`} xC˴ U7n`k$!UX& ]v1Y38@ {œ#0Ô0vY8fڅr^sh07ۀ~"04[a{w _C|DZԋH<>`*Z^[pܽ/:3n\$Mݲc\`LЩ$VP;V pCGbXCKn/lWI-5^.[@(m!qJ59^xy9t$]Ϫ m^hk,m-qF{ NjJ Jԯt寴K7Φy_FPx{Dzk)a+6>eyjзyN\HlC23oj)͸oƀk_M\o*` ɽSْ͙3n9\&C_@z K{=S}'L{8CV0"LHOeqDpB*=TGɐ>]d/1`x8p&mxerlu- 6W NBV>,\b%~nsULn٣o}'?y3 \\t/Y߆ X=: :bT+HWzݺ1KTSaFuKeM>-UUIxI5lȴf$x X wS0p)}hr.iEAq?3+a%䟰MI=S>4(!v~1 0ŜwʳEmx" yiX.Ģ54B iУFg;{1O{7yN᛹Sk$pNҍO8m&$r ŰQ ښ1|,qoν&Yc 뫙vv:4w6!o1(c?̑ ˂S ~ 5=`c`}f92NܣCNs} * fčDD0 Ђq+bYJéT*'6|NbTae碀G ƲK`e(=K}趘6}EہE43t0Y4 #] K,ݲ>.:7_<4ؿj}׋)^0i /M۸Z,M=;MnGc5+  K"_~}p)]-vR7CܖEVV\ ƾ$pX 7x(ǻw_]v^b)nݐ\4ܿ̚-EK&/,[. ] _p\~ 70O bYdAcW_foXia ̲Wl;yaC̡l A[Vq`i[(CB26%p@XvnG"=O=XA&]} ٰTJXX+|a8_̟vX=/ޓ(@1Z "g^w/nMs X]b=wMEeIOК5!ޟg`-u=bф^qWuU#`/2x[^A޸i Za?k3Y㼂C:6BcyQ9dhmQ`*d 7=Z |-..)(`kָ4fKokhH v6Ɏ'J="W4O<#邆i`|вșƃ& ~x_K $abz  yU&bA_N XT`/ìs:ˆoJ>'԰xrh@/J$Q*>~ףh,¡Y4AƑGX1@0W Y` 8T,jOUUa>Ͻ{_,;O``b}_ Q < f"V8 1E翏1OK07 ZlruN:~U`[fă0կl ^R}dƜ"x}/fbe0e0 o"P׶[ )o4qIy{zznvRX(Ao~z#Dս17 }ֽn(,~ al'fy)|7c WhR+{yџ! 0ҾxFw<|[̒}6 fe$n2[Oy֔*K}NV<i+}ViHࢀo+YXh$<ci`Xo{ 瓀7>q(XXzW0)RvEFUBEc}JTX>蓆tAg‚v1c0(3[ϫW證EsTMKxg `JzU.Ј^&|J`yAeaU.hLk k' ߹P+A8hAZP݀5{4NhWڈD6JqZs=|_b)~[us{7[@3 Y0_k1;.$r }7{6nYb͘s7ǔ$.@+n%sj0⬛ɭu0Yrň̘7 Xt‚_c4 |$)m7usI{6bzA{+G.[(X8t|ZãII^}.wrj[m[),'YLh&o{3(L<;K 6`ɼ>=WlxG* v{ 8UXE @pie)R̋W^x9E3 $ 2Ro{X*V$sTߢ~W&~3׸:.)7N`̰{k j!ىki?Í~*}b5)iX'ҠY{űNhm$-\ pqA:@(1@piܦ!*i"+\|"bT%[]MFL<9X&0N}[djFx|ٹ43yM4Єgݰ)]չW`z\ŹN iO V!}~ OI yd.馀1({r[G( $,,M+ϒg@nWzme% uxrrEE`Q88^fB2wr34  KR|wdDTah8=-p'N^#05Vm{-m|{ˊU}m*fo4AE {FGU#mлz]07 pݹ 8wFoyW=~}ŷv̔NP]h#;gK8nB`/8u#W:fY^w3NB`;M[w4I7Qf< F kaRXH0K% l' MxVB ?'NHsL<߷ek=?Mhƀ0K1k7* hC}U}YYIª5p:ɂ6f {?G:?klO[òO!VubO+m;9886jܳ H7cwӎM;wX LC_#}|f įܴW3$DH.e:$B$FBw*_֢pT,X`(hN}LïnHv}Yn"jYXk)hssU.f*/]}qYo}yU.1 ކt/jSƐ `M1L' Ov$$0Չ; anDC_pA`fX k& u^aX=xJV <fb(`U8q^Bț#: #OtS1O .Z[}ÿ]r5˾6G0WmW3ϛhst;_n4$)]o\K-h AMkT.֔9n_]j^;*Bc5S2:4$?nW_G?5=P*-yCW~uh(\/ߏ~) S#Lt:[HS2R _\0(f֜y+n.d~?H> ~O@&]{aBX# /n_Y,^w9b.MWU=u7ܝ#$ՋZJ<]+ɫS="Jzt2W[x?Okal۴opu7 oNʛ ]]ԯ| gvl3QX$ s1k`vvSba@ ?c<·*b0@(ҷ*;SvZCA|-^KqBY CK] J(rf6[ rjRd)g 4,(w*XUWNRQ^$0ۊTF~q7@0WxYVu~$C>*b_?e pCN`8F-R]wt{$4]8_Ə2[p (L {ѥ'd0(l/nnM𖧲eqATMW?VHdc~L;וW!,,hr6ʦe3dUo:Ԋ`d/ T*Z9w%x*pХw:?߾]E.- K-nkD8o{8F^SP'~g]ƼYg O1Ԣ9j xyͬ RsԗQ9 lGeDc3$ݨ? EX[@ QAkQҬZ̡V71XĴGE6 a f^[o=2}*ОA.JYްa):mˈ+/ s f`'lmÌU$ŝB u>͹MZҡgftr:q/i]WJў. rͿy悙uVk|? VתL_ raomt+Lf Zns!p `6LW V?Z#eU>TDmap[]:_eVi`G3p3j~Ua7@kXl {W+`a7|O=pE2|f~tB qU3nDQnW)xMS oٱ #GIrsj>')ZПzÖYÒ|2o- 8 ~wpv`l{  Bp/FQSOU&} 5*75pE`dsFr4tpe8K_ahȋƌPGJtpZ#+y56lU#!Dp`nE`;"񒼈gYwR^z70z'0Yvcm;L%{)u٫}3$hM̘6uuJi]ʥ]n}aZk)͙;t)sg[~uo.;^h {ZF_#:IѺd3 +|ОuHipVG`+.Ōi7 bT636y| Sav.V0sV&}KQ.m K Wϭ87KX^2E#,'t PpG/FjSߊc1f̹/&@pc`֜Nes;Q`#S u[Cm}qK; Vfts eAvAWk۬"L|Sho?\y>`䩗<:yY e]'Yn0 }7 ~W'+]ҋ b D1"5F)s3t |Ջz+[#Ygکފo^l'CMVHK JJ2g$8!y,D)1CC0v-ڕ0Ne$Dh^.W) As,V|[1Ø_ fushsY 6 n>Mc7e'gsd_͚15}C憤IsąFzTgxL7Gҵe;{F}}w]b~W)JÒ;(cQK{}>[yK# D& v3ú!p[2iV)X< lb6Bvgw?:Y2"bqN*&+Jtjj^seɠ-X4RO%|ڐXYɄS< k?W_MDTXlG{G/YƫP(.uZ|Kx0j̟=22wd0+ZMek,N1kԥ[ضcW9=RXn 8ղp²mJsLC`_?Õ39wA;lM l+gx~.^ ~].$Z0Ҩ!`6dH-@-F}[6*ӽ[c6p اw?Q 7`3.$oppSkYns촦!\ \ lo0Wa捦k|ѯ26 CpC` x3fkXyt_q7ǩblv 7 t- <&Qۮ{SVW_TB+T05fsni0߶m6VWLljP4n_0)J20_ -K2v# ./G|oTQޖ vbC(4, Kͳ43{V,^ɝ*ٹ\13,:߀\ WySi. uT&V%{r} ڄ?s /4FK_}gnXF=εEcۜ(|-I󀇁=z3Ʉw*Um& \yynqOޔvY ZCE4[ oɻf9[G~qe"OF~sx $zG)dCx Rh_;If]I6 ycnڅ ~U遅s\\ڕw)؋ =<Р_d7 R4 fՙ4*Zw+ j|lddD,/RdCwM\>]9zW:2„l>Sk63K`S%Kez/@qzyʲ B:Y䉫r4ϒo,Ŀgt.g|Wnp/lKN5w bΆ  Wkij1Fh0 q`ڐaֈ?ѺizՈ\]aY1JfGVK_/1v](b5Z˅Jj3:n^˒W6п'v/AkX%+Wtb2n'Ҟ]gl8ugݼntśpaqҿ{ebp" @ct_N`YW@, !/-~F:sbKz+Ws Lª}H X㵖J-L$~[ߺk:h:7KrG˃^t^˚C7ZnzR u ~ST$"vJA7s7$A ,oEÓR3؃2T/\PL %(=xsT'j50K!hP\U:7C!;9PCF#;h\`Fx.!z؛mXϡ^u$0A`x"/?C)k,K,=Ib) =ctt<5mn2תÄhjZsC.wvS~Rk[VQ`,j ;vf@"u /=9Y<ϵ et5s-`fZ1kTEJ%Y²%t v<Ь {IXgny'z1 מKs^,ANtm8X!0"lƮ?փJX\;=:X Գ?)upvv%MO *+kga~ DwSgHtnrt#ΐ?ut܅B` ?\q峞QQƥj/5%mV's-:=f ? g仁-  bg,H'c//fnk/&6L׫K~ka"jcA`Wp 2 yPٹD~ۿkH`ҰY`d@`})Eߖ[QG7N.bip|w"Gu 2G>q˒ۏ<ͅmX79m3}v`N@_3)ืBze("O$"jx 1n7RMpCJRU{`C.5+ `K*Gkm4a8 Z~N!z]cԏ͆`pVx7g/-uu|Ԝ55rda-9pzIA+~^ 0&-rEX2;_䠑~C>+ű4L _i…tGhk+,ɃHo=/Anc=/ -C$XF4gK,\ӟ9P t.kίҾ#K~% ' qBf߰Ks'40K?& S7}֨+[VҹeWCOj2\@鸔lHj1 !`r ,Ϝj5(Y|R5J*ಆe~Mг '!gFu`%~yN38 Fͺ5B`f 7CS o9|ɫܡ ,PY|K_ j۟[`QXXбt ezCB`$p)`Pv#`p kt/f.3E/p˥N1w~7_M\=5}m п@A=:t<fy}X XzMT_mL2'8[Ja]YäsU7t_X-EUJKoؿFΛ%vxix-QxiQkxE`lzs6@s={;0C2ʂ <¶'k `W!⯟ʌe3 Rbv( =Zee}WgjB/k`T8Ѻ[uۂZ[;-׭ɧ%aU V`,KyP' φʄްaaN[ŘZUB `<. \$Jʰ|<-BB/77W]N_-dqb2RhL1Nѓ.{.WpNk oY[*TQXw6:׻ ʼ;?}._9/7~VWc⯦ ֤~gX99_k%#4N}ɟtM?M?^hk蕉"0W0 ~)0 }Ѧz~P'H$p G8x޹|V]2[oD+`0#d0uӭ-J-̛GGLY94r!0=}JWǀF k+ڴ~RٍmC;o֍[gFGzXCw5~>bD~V ܘ# _#r#Բ lǁ``SsN %{)|^+Ke^\?1(+k~kWbjaWd`1oqN\O(/H?'bF^aY{Kn_qHo0 UQܷ朵=MJYZ4p\f#07wiە#kQqp56)mS KBJqL)QJVѐ8\1w$+,Nh'0ƷyTSkx{w}7-W\Ւ]"n76nvϼ[տX"4ƀkºYj@'ȪiiSxb꧝8ApV/$ P9`f3f)`8j>/I[3\w\Q`1X) x/6+"N X]DrC=C9p3 `ۛ&?aw+ap{܃B˭NC3?h+,'>%&ly Kho w< ;I3aS;f_Y\:cNqtZ"a^!41`]B`syTA?CA`\f.tToi=yeKt ,b/.Xm/gM"x,R%`C,.$z6x]Cqtz4$ of59IX>o_~7V[-4ued$X 4=տf+_a9va6Dhc-2 ύNg݀r]` u_/~jPHe\uZ mHrt$pe@p6V:/'F$g7[m < _<~tgU+͡|KA&k.ƺ@dh gB^PQ5 Ww|f ET3SpUԕΩMj;k58 l򖥞K VjI%}{IWێ2ٳJ^`+%|h\̒w%?˪JUet&3OM]oOMH3˯~7uJm$§ݸhTԐ/o8zyl62vծ*L#-K DVU 8-T`#5d pM:{򷇿ڙ[ nc> Jx bLmw?NYqeai_f Y@O%@!r_kv/,j/~>˗tp).YXD\[Z4F_|dcL,,0wp(fӍe ʂoH[yP ,˷~7߬J < h֤sϳn%x)"-'{jc+"G `'^[S{`D;lɠkN%=(WP ,z~#7?z5~;۰'nv5IncN┉M*Vj9ȸqu3(ۺUv{&`";xћzњNgVa-(iEvuo7/9G_j% -ߡ)z5ZnrN: uJ$?ep5 CQC,TڈIY`sQrCN!cʡ?_XA Gti X3(Fg+S+#WG8 |nʅ-O}VڈDT# Cpm.mY~"u+72;,]Dbrѳɰd]qߘmeXRxlApI`,aX9[I`#+7x{AK#|vΜw-mC@Z܊O2. ~~ Gd5(%&YlzBʄg+^7󦂮]a"pxvXϫ`ZXmK="_ e+^xCN|Q[N =\uї|z2K޾TؾrY)焕` TJ3u+B;nh[1`XM~_+~?w LFߊW,A_ "`7߷i8c`\`lu\h#E+Jd<>Zco]Ѱ!8g篡׿^fU# "1jаKaȽ r pH_,$.+t֪Sn*M=xl߷Y/hՊ1J'5,:=d[-+٢}ti76×wa -#Ms`AxhwxXy偣Gb_{߁_?~NaN"a+2o7%]V֚Կz^tێT(a{kNLK~׍\?TsTPW!HXx[bv.B=Sbor *E`v,N8ϰJi>hZ#{Dyʖ]Xa~q7gg_9}XҞ 4 0a`4!Epl'ҞaPgmQ$o[_Ұb0je(`E(W\7ΨϤh}\)Iݲ-MY}󇤁&`{J.n!Yx߾{}UNdRg0\A2=4l N]1`=`%wEw?A_1aEt"Xg\ѩk(t\wfЉ߃&t_s.uť<Ԧh7<*$Q(5 ^_:0BX1{%5dF,؇MT}K9k`]x_\hÀDG-J O+ mU( 1꫽eVIM( Tt ~䈊w1U )蹲s]jbDŽFHVKP?6N~M<;:PĶ_=EHD 8#,~NGw%q&>dSWG\5[Vr ,"%so(qdnɵڬ揋Ysւ`FgYa{.{,VM| V ~Iviuvf>ޱG=`'94L WLXԒW2]ȋ&{9,Na.4V V̷p,"ͷԔ+)+b{{gU+ыƇU MJMO i#ҀBUh 4I mqEfƆ,ׯWcz||xG!r]бWZ"wUe\lpO>{ҿnjJ崎nW$׾~eB7`_e+3 -6{cui[/S*`Nv|֖(6ρߤ7sV*XCG7Xz K?H?Ś[/? l>HJ+2V_Q>]{ o.^(sDsJJ/ߝl_j1\% 2 ={Io!8D%>O8kp:ekEւtyYl`KVx#0_}%y6~ (AߕzX85FhG8sY~όSYCÓ50+s+6 j' WX0rHG@;:~x;g 觱7i-`"F8pTDZclJ絎^2yũ0\W5@"NScm^mqBgBE*>Ŏ-|$gm\c>0X6t7P2xۀ'n fuo;/4'KhsHr<`s /Z:s/&!JB21f6"-h|-b MZ -cJ~^Z M1[ ##SchJxwL2N5g.St2#R-p_YoEFf/O:% :VBcƒ~Kf&WL} -f!k޳?'+j6z2aDv_U߃F&ͪ1^$%B֖$ JI2lѳ~(*+ ~u</ ï|mB㾞M V׳įY׿Ϊ~ַz9@05 ٟ7:z8LgsfB Y0!,3sSهpQW|`sH:~k)9q#l`Rґx^p^jx9 g\+ۯ}.>jFTWUjզ'۩$JX.mckwErs8q m[~MR3 28ΐU.nZZN5_S)>.hz1wW´QL쭵Ap].'QH٦GKpɡh0 %SΐmoBk_rtn"Xݾ¿oa]Yg0v;z`P#\9X]^yvdwPΌݣh`2t,mu/8 `!o{3%_Tg[Nh3RJ`pt!h0+^Bm!H`ʔ\\2뒛sKÁ (EyM vR7ID&*jq̚Td'F&hWG.XiliLڕ[U`=G]| #E)C6_F +F*ăa_aQj8.?}"/(gj#ORA`!8;2@x/q&&৬ٰbL{%A!"s GpŬ(0]6B/g^MJ`V5A3G܃_#,oyp'\I<,,]Ѝ=,Ҷ)|,fJBK>dЄS꣎_fukN*[3;?=d`A)WVt%{ *Fډljc6E9 b }+2Nrhۏ_! $}kc08/C|_f,L& ™_G Q9(;Nw_/5 7D0H_}X0{,F[@X pZ/IoˀkcmZ;kATø%a);Mr<Xƚ>tA;y-Y ` NkKY`v!)jrtFOذuL~YNKv )O*֤ NmSՄ$+,ZQ-%-ls*"mwmKSF?Qf/ۺ(%_VL8;VfYSU2oJ.R6kIߵ6b\D1ΊXt/9 Q5Zԃ&amWX9 d:zk 7d-W.?ƮF# mC0.0u*1 YG'f`ϻ)?'~GYj޴ vAB2@V+WYA:V >:җ/VVdt_Lxp_zч>t3|X-` 2׫"p\`Ek8oxZcx/4-?;Ɛ/ˆc{n2 >kRڍ=._\slcdضgnC8"0}Э=t:=셾PeNz췗a`,dbd,}OEc~gGc"FN*4Sxy`ϛ.L,6Q%dѿ:8_4+/xzR{ Szt[xuBah,5k^Kl^"$)Xh_0OeAT bQ`ݛ:).٤VV`YE+Qy A{5h[to] &pyú.lthst4ßoL.w?;u,A*9[#c|kțT(ٜ'7\;[R_0.v luK&tDek\7e}\pzY_~`' XѶpͶ8 ́psp`)txNh41-X z݉2'0o.-:'3T2 mĪ)Ye+FV]ɋm9;{&~=No(`=,۞K(=_]r-Ɠ p)ј_ʜ~=6N\ǾG|#y 84 `^, q"; }o!WL7$߻#W4e`8 <{' }߸ٺ.oA' *rp"R2Kw}1NQxvWo}^C8$0,lo4 }PһLJfQx6څaxy9iL&UH,GK3n\Dp&y"v&rlc8C}߬@t;E_}\H mdV]r^4ʧЀބ#-\NWt=A|v{S֣k6\EВyy0V¢/_ ՟+4]>.˲ ҳ]nE5Eڵ{/Ұ\zݸ Z |jlܹ\->$ ~hf$AW3+T-Fzf`f `OQD,3.0hfK౨֢\K,pfnO,!|40#zY3n~K_RE`DWكLWp|_5v`' 9eӪ@ c1gKRIFG\aI,22t@6Lo$R`F4:'_o%:96R.`d/W7GOA qSeTzQځH}F!2dp|a/Zy?}yXȆ>(~scP2׀y [{㷽:S\;K=w0iuP7Gplg RW84nMsVɪ|kȹv' J|&] -]ͻF+ }|u]qeئݲ JjN ra!w,CKk/0w/݄)8 Vt\a~B qy;(*k Mgʶjq]`()L?ZkR8 MBRW۽:ߢ 0L' k،$_w{A~P~Ec/:׾veJ-0ַ󖾙ʀ. cQ?,}bt8Bp0>h!Stf%0yYVbpX7\Fqjݎɂu r; Љ_}$ݾĂٓ m_<Ͽ蒿;23r-QZg!\;}O/ܹR`d Zf^ Kw,ZӬ\뫕Ee, VbW"}/_5:@Jҁw(kUPG#s#pX\`7%8<g2bV 4_;~;g؜h`U& ѱI }D>D saGf]"C V9:(su>B @`%߼ `K7*,\Lh!d]8OeB.Ck N.C4 ˇ< ]63|]= ؂f@;W6o6 ,?f[]$g$c#qգ4.!j]C`zTJW4hI?ӟY:/mM8pup쁐\IJMs请U0\Nb#wsv=ЌN[C+ Agam3w-&4DeWb {?82pÚh̡hqKp( 3#_]y!h~B1'@QFf`8,򂉫{ahA/m0E( JwL!pJ`q8Y +Mn<{kT\$T41j^)`;7fvNOw,6qf;z9;\Xi@FxȆ6OfV[,$ 1̈́+[N-/}ۆs9~YQ`bh0#X2q"ny w14>-Lw1AtB :Z*;r޴X &Q(}/~p::>1 [M-`'~c$z9* : 3 pҷc$]_B= hMiFLktKgQFzA}>Cg\i6|D e)揼MH? RyWsY:/+`*oCVWG#ZeIMSbY{Jv!YNވ Vܸb&UR[5~MTs‚afԿvH2850e %y7yO=>:yv (;Xטi[L6 |W*aܗCPXS,}5Ӊ{ܜ๣T 4{BZ;S"0_oO4bA7=6p ɐ:?w]!!L!!o6ms G ~cmw@i_[T`$yAx>2oNrϧN2^+KYv̑l_xz#9$&Eǿ Wrsc ǔTEï[Ս~xӏP_q ܆  WK[ oq fϫ80k(/R޶MHߑ 7ػRg&xdY~ |ڷܺn=o.8ذlv3ȝoJg{cdH,VsR ?|r/\ZKm+Kw2}%Cvc+'Q k}=hβPIDoW=g?JYE|D k[<dJ $. p7s^͚җ: sY  wb7O2i[S>c qjTV z9a'&{EϿ_Y0>hҢN;ʫl;DO m&$%ザH_ͿVGf%C EK&b8؜v_n]gz7JvS4%(r+}J`'0!`Rn l] U(T=V8ewroBp |ЍH%o~!ql^ku0.i-f+@Ma p; YAs\牿8]x򱼏h9, t7,P vEΖ $UNP s.o7=t` ` _Aj]% X68a|چ֗sq$<3ۊ]iSS mr1pu.N7v>]iWX A輜=8xv+>.Śv odu<:Xgԫ:7[+m,d ocOl8\`oWugs Z9rCo:@ d>-b`ךn։!2y7h0D['Wɥ8 ΚIİVgbMO46?MH3u;QqjS;IX̅[PO/|W= k+; I)`I%_^6KTC=~] + ʅ 't#E{7U a+,#kA^ãn}fSSCo|=hҗS[1$wo~7,e] }H3sc]i?R%0|KBB0ki` ~Q@unܸ 4gϵ8ҪǍ^ [4h$rnP8Lƈ0.n2iB0y6'[ ;˸C G-0̉S`>r*XUPS}pq@Cb8p?QU.%o+ o%6'pL\!&3@1ϓqQ}NhM/540~p e_466ppDVeۚ6ޱg͑$Z#nz?IZnC=%<׾Bk~*n9a]ouwf=m!ڐdU8s}$6T`3tqf^y`Q7h{h;zrtL+&<|V|/X|1c0IJNan; \ܭ30l{m8GCm9t㖻 m2L MBgjL4^|ݰї19]^*+ l`pb{ ᒖAEoPZHҿ,5q_Ń) a8 [^P8n`ٛ1iՃoֈSә4w'Kb$o5FM. "T]c o\{,gY7 q5P8}5J^v$M)hM_<$p*` F &r*( A-k`O$VʿSWӎˋ@\è+rAy- G!dksJm.dHWC?t#|D{تD&ooDF$Lتs } UGEw/ڻ׊/ CX~bkEH4[2nDk }S'{K^~MI[QRsAݪo|?/U m d48,dZY +6)9ڞ4ϡW@ZZW `fH't.PUaM9thyRlV`I` ܹX9X֞ hsXJ,|Gj g?C>親F۶@G=}\D0]尞en_WT3^1Lk@`U Y)SޒqC`z_H{\qSٌojA?,+#Io#2m%yVhjE]XFLL4 sL{،loSݐm %d5zk!*m, !qK>/%L,)#qaqz&޻CcvGީJ&|*`da 4V}vz>}*Ae^4M&9H#e e`k1h w2aK&wY}4;/& . 0>.^'^wb8?{uW VǠk`WUY>m ,Pnb4g`uG19nuZDz?-P F>%[_*K$WLڗE8@3  9N3B0D#-z"rJ24lNKU(pUA`! ߽ ,V-W`i.h\мP`v0rBw)Lb2\2Ht+RUIE3f`΍u0UqۼZP"DI`AgS Ɯh`E FV[FL_g%_e]=:P  +:{`8[)`p&l n1av,6Y~M[&FO/yj!ZwD_* E` R濫Wg[xyO||VWJR?a3&؍oG[ 2صjo"nƠ^)z*n%&`lt%MwADC`򮱂EC|E\tƈQy؉_3LЇ q4cMN_󼋧,KKUi.h!pklNt]k'!A? 1㬧`i`v1jrV.99g~{T6XF`~>-v!ʁV@0g2A`Ext^I84pI&X]KkNs> G AW"4xrXI > E Z*;Bva;1䍙ףTw^UUi"$+fY*(!X R!m$H JKbRXSr5Q39?}?gFLyybss:`pHkᗗpp^z+wӗ(;9$Jv·,O&/q*+cݫ,6Cgt{a}_zyj&:#G\kբ0g` L^s,YE V)=m\ ЩeH&m[ c  sn>JgOX 1W1'/hJM`[15S t Kʵp 8G"A ``{+ݪchhqSLyS%=6 )DZ5 :7yBSs~gw-Esr,ShgX ڪ"#t fi~/Zmӥ]?$&i] OzL3ǯ'i%I`5+̠J7"뙔jJheJJ n Vq` qw2N2:qBCoV~HWgqs%Pk?P&b\iwV; ȶa%uow ;{ϴ 'h0!`p0h@Vj_EU$pF >!/@ `'B;̼9Y1C g r)n>rَ뤁<E؈$]hvT 5nixu\_SYv/[bn'MA_0JkiwG>vV,ےߒ_wLTp_h8gZ&j[ĉx#Uƾr<00 qA>x{_p#b_hAIpxTB{Q<гǨ}޷|6%B`X޽()Wk QN_H[EcP6~8p*;oc;x̎Ɣ5vp5 tn^`/O5`%ǯ aYAj`7u1<]j0㒪q]:k`_<-\ 1rA[>]nu-WӂCle}ro`=wEǪ^jף3 \ Dc-[jHM ƴɜjϊ"b#Nd= LX QL %3ҿv!iwוkz.m_&xV.׋ zlkTM[2p[58l-ڬ$m7zn:c8"uQйgje"&9yLH_> DGWNP8 xgǧ<[X @ toxNȲkoVa!~u+btm˰عl f+/-jW"kGZ ぎC*1:Xx5UIlY,hVSs;*Ϣy8%67s9ʩL koW\*$xQ4bs'42ϛS7K.w\!w0N#v}yyd [fA_kF{BOs2JEWOb[fh=7-[ʃXwꗣ݋>]pj`B理5u.ߥZ3nX t=1&, ,PE,ҼBm^nl&%,sqn#H׻9놡 !2zZi&$+]q7]xI|%u] 4I% k%^p_ŀ' BcCKSC̦M |ОN}RU^X5X _1fߓq'<:l-I[p8b EiQ7Yif$pD*u0 #?{:'=:VK7ۮ9p,=] ;!8F uXu{͊{O~+_&k !-kcR;a2wf#NxqOx3WM?| < 3s;pqy9=H.kW6\+[g=7!̹k JiŃCdd !+)=r#6L7ֆiCW,?p0a~R,Z+bTF.`O^rY‾ `!w > Fc޵ '0h.WÌ|&akuíB XAq4=.m j1ߴ:XtdA.~Lωn ;}W%ueB– =[ٿk8ӧ ӡ1-J`-<뼁s9 I~FV@`kZL LRVpp>S'e ,9d* Lcq.0pjD,/E1˿:< {Ӹ)䎬oƂT0M9y>nbaupm:xm LtsyNm-{;־0RI KP:~-Gu޶oc5~gU} L %`('=w؊BW[~"GX(`j|Bh0<*`V-zpyG<#|ً\$\4`jp/]7ot}6^ ~; 8`yU2 |vMiG'm-nd, ~(h"mu)ăn?)s<Қ16/:Ii 󟧍HϞ6Mj_p΍|[C>K+)ݱoџ p _8V/j7ylu_#4e+r"eFI:~rBa(`[^,~;0C0E9ө~hߤCRCwUXk}fXWя#AvR, L/BE0x'$K`]f&4, `Oa-R eK$*78_Uo?|^)Й=O__iXĀPqrA/;:GϠbl7;cB+ +t`.u$17w Pn8Z+@'}܇7~P εoR]JzµZ9reՔ *5s7H2t9aOI:,0zmCzԁ4t,2`iٳ0]wݵ ^hY`gW`e\{Kw#,s q gs>tO3p_U0%nX:~]_7k^F_yްe_&E z!; ҡOE_g=򑣟2z`;ܪX_Пr89i˸Ƀ0QPrF:(\v  mvJԂO*y& A9<@  O{*4(q/ ٱՉ@=s+?/k5;3֔Ǿ)gf8و$46wKKnFCpd_قQiKl6]s&E$czѱT3ngN_ہT)m 4EO04A(Wu/8?;NF9.4#Id{O<C0?~9̲9gvĀ' !kJ#Ѿc5~U{YY>ؔV4E c}WΤ&܄$W bl1ӥ=_H\tM>mk95s13IS7nQ. j|o~aϩ({]&M OFh3-\&\IZ)]k~[ lx?$ڷ+Q\I0X) 6)̀}`|I>*v>)/^sCMKsV-zAzf]nV/XsN_@6.c)[)`Ϻyx<44e\ţGvhpH'i oUw$֟г5}ˁ }I>i߇$fEfGa+ḩSvE6֔mضҰ }*( 0c=_H([0e&b[+yIA/Y_o}n!uW/іbX ױ OVo`62k=@,uHyÖ5[nXsÖܴipGS0ݸq˖ocQBMA*ʸF_R< p L!y=,I$)\@/ (!R.HkhB;[㻞i_>FZ8ߠ/؜q'/ߪDhbiͯK8%bv޽!7(Un+vh*+-y1=dԸEnzֲ7-cBڃ,<&<yOIy`] ΢Xn]AJi,KC`> `G%Aa̮х UsG1.uCtDGX@E*Mv&KsvκlK*H`]mп쫿+ LU~ lt}Zz KWA2y/ĹsGx mUXV'AH2Vo$BcYxE)5|W:~4&lI/zoZ0jwޝ@!Q3XiYN_';;AZ%}w#K0Ė̖DQ Cvp2 Gn/1.ot8f˖Vi_obٸi[6bMlٳIݣc4tg=`)~E@X>~!zq%*G|j&OYG.?%pxmi:p5k0Pz,;ON9Xѕ#"o=0hIYhXz:Nē{nS"֥0'}k/^4#Q|VB0Ю2<>}O-9W!E= S))@/~5,,}>2$ߠC! }]"Uko^օߔ p[J]V^0fBOspyj.1}g柿.eI?o}ND:K%+F 3ч` zA[r'ڀ S/ZN./49v2'4uzkuw[ ʎ(/3[pCd;&ܱ} 3{+TOGSHeJ?뀼L8 +4pl7x%|Wq'Icv:16`Au yV.Dj \pkW.V3_R*U\ײF#p@+C`@_QH@524'_Џ?z2뻁F ,<ƍZ4ƨR'Ioݭ;35@o`x'H &KEm3_R)XfRg>_KBUҲ%쭠l{y"uNsՍWD+_+g]w ݐV!"#$]p[p"gr2g`^(3p@ۈWD&)4TLgJ _Y"W=vV6u_Oj"Jgnַ.z^~6wSxkظ! nP8Loݷ_`߲";o|wJxI s< {y[_;qKcQg͟p>BXG(k٣v ǭ:֛uxTm-z 0.hIkgOC_6 `I` oc@T諁sJMV{w k[{j3 ZGY;m oʪ"A'~ }ܳMwnWXg"XNehZ, < 2hc{z9e7 L^yEON|=~QvQY96cBLg(k?g%#9YS# cAsL/~;!3`&;KNWh`ŁJ< f !0s eY,c-S.[sW̶lg܇?ZXS VNF9,Xhu1kݰb$qBcN`6K :kpl7Xq cvG#0`C|N/tg=z/2-c ]y龻zX"}"c8vku]Ŕvձ(9a#FyC7,=ǽ)/~ܳLkzOyxD*j_:)Э.sůW2з寯&LcbQ2bƶM84'PU+ ` {}EߞH~@> 6PJrF%5 &K#Z^G KI[G]- w4R ]w_[_,o0mM.vqF簠0N{w`/u1ޥsX`ѩybwEkjᡃ;Nb- g!0nA_1Ylknu7zEfNMa{[(XCbM=,kN3ft39ҵ8Rq]ßp=kL4>h>'!AuJ  _8['Bӎ}8=Sq%< L'qDl Cբ 2kMhG/8cn҅jq܅`)B]ǾAVto{]O]8 < W6 9rWItntOYZiqYXoj:3.tvK]º,ͥ__!1!#b`{4/F_vg .tV[Ap| _& UR>-N$|F`'&=󗊐BpY_UV~-$!vBpgon߈G>ulvcT>5a{服m/lb^dr|{/ݻw- 3 Sp|/5/tCkTQ/qroL(`B$Č`tU"i|ƶQS"e x7l[kכ^FӚ:<FBU~/EG8d(_a%cKhՋw2q hpZӓ?;B ?Ri` D.G^=K㭆RltD c;sϴOEm7prP|9Wd^ɔ\yz6z#! b<|٘cDi{틴Xw6a2yd]me͛_I׽rEU/}eezOͯ?ib~yo_K^><a"mh/mbUri7p)` 0Lk}VqK-~3Asn#1%_ w5p\iN@`$p'ʀ, ~pDwinf 840`'/!35t7$tLE}7F*Y..N -]H7L^N.LHDS E#8[6E=76d| {i`%_1#o_1#28Pwr;NaT1V)ݽ࡭ mW ˡ{u@R͆W[(\>_I`4E),sЅuǾmBZ..߼YQ`FZpأlݵUz՛%~- G+aV^܈;++ʓv{#`m@&h`dp g r/RHr/1zsp9$00g0o% Z%ky/( W@7a- ײw Ϧ]E6#1 ͞YW(c|Jh^҂ ~[ΒͽLeusIyJ[57l/F~Skg/:Zk}G>ai5o/걗=|ct㸵WtJܺz_Sc< +y>Fkaf)XN.h@V.8_/򨅷?Σbw?kn?ړ{◥oCoy͘dj cNYq35}ɬٳzCl]:Gg=_zc;Y5Vڶ*mpW֝?JYXݧφpRx3xje͹kigf).v;4ᮕ\>hJ3Bzm`FX)`Ϭ6 rX)_ky} Rxv~_e AଃA;)wFZ*W<#e YZʂoT /XB`Up]a`kOT䯌}si%N`sl@X8fZ!""?bXЃڊ2Lp5ALgՠfQx,Y3GXI'=m.xW_dzM!mQ _%*ƾޙQ`Upq`QűI}qv }5y" OLT`FpH{-tBp". fRr4LK0jdSDkeI_e76o=kp~3ިL-a!&^"Xjc [ 8+Qbfuzw@i7@>LUW7L*ű JFE3>d>n;wDlWvqտw% ?;uX.lcA0%Vd ewuNdvglXYXчPzO] $^`|했uq`%,I`ۋ !i `3*LO@Y>s~U!`ܞi0^@<]Ks4GMnOp|m\ڬ5델}7_Y{?ocEaOе%5'߀$>a 0 56#QԡoKKq{<_]*K7kR$#c^zߺcN;O,bQ6O%OE!>h'm@`쳟}\*=I/DH`.]Suc5&F`cX/KP|#D0:­}`ei n%, H2^JJ\y5c?A䥗xUϋۘ҅aeYK^2o/aj8 8>gcFg/~Oyl9]6 pBbhKv,,čn5(T5Q4"̙nXM²6^ "g"F$f/_~/o=6{5n5~γeGmG8X1N^Zê$DFoeylN*7&V?bnƝvNA]^+ݹ4pA]sK]f׺J+!pBY7, Kb` lwV6醾g.|VVKlERj9GfK)QDdbm`oA"Lp-`Y'D6~3x`gi +,% XpW,e׍˴q,Ap }?\I"s?xJX_X&>t HXγq??(W+.Z+>I𫫥cK^r+Ozԋ䂖 PAʫ_tq;s#8 }Khx:* \Nhz7:NZ#(lf{b^PTκ-ya/FzO<ȼ`$4 .xf`93'4rU7dz򠋲0jqtz/tci Eq8>֣uf#𗂔nxkH gGDJ imt \HrOoWw?e"Ca[Rt"d!`}cڨj9Ffk\U\ƀ ],6QW6۱X*^+ (Ŭp<ܡ,1ﳜs 6g/V"آh0a5)K } u1,fߎi@ Ə4iIR7oضL Lo9YROC+iH` X(`wJ",af56)T.Xܯ YYӂoA6ഝ9\ϒ[jA7E¶Ă%ŀ/ dݾQfĵ ]W.x3J%V}/3Rg{gߥ)PJ }>hw40^.S)E/3Lyfnd}Ѯ#u*ّTd:{3.ۜgAwv/IQ."80J`%"xXsgS\ۑ l5)6\`_cGh̆V_%8]X\{4y8 @̑?WΌufQY=583ں/7/p `ϓ&Ж)hx.ִHڠZ,yдC x([w | LكሎJJ>hk,ԩ˥WIouQ)=˻} þ nLܷlxb?` Lֱ2Xu7dD3$fe5q d\?aVB~KwkQ7N^D M2-~I`GpƀMȃ^-W!sku-7Q1eGwZ,0YأwN.fV5ۏReٽQNm#o}!ӌdjA+H:܎+S,VDNw@8k^U c0 8-eٞ|!g;RG L_&O22^Xdv/l{J,hcoC`ex`B INzx ,Q.rʍK5rr옅p4]fCg[V(:S3yh+Z5s^$ lo] xnZƀY?Q?r <fJ pA`?2i߷]${TyGMZ~da%ZyAm(OEf[C`u3[f2VYZaq]&{ !p_8aomHU1h_(]@g)EWTv>/C؟QNjxޜW<>@ϕg}VgLV5o+,/ot~] ePn/ˊ#3@42ӎRⷍ{GlG':5Tݗ0pwSAӧG \uyW)] j [ ]W0X{,ք7Ʋ"R} :DBv.-8ՙ_9Qe(CG V9 XNGZvUI.͂um.tnS{4( K$'L}&*zp8}Hн_ԯE~ >?rJ<+⎍a4\P^; Nषဖ$-ea)]1 =-@a\ b'sfG|Zv*y 9+5چo뺠ͅ ЗF]6G!yWg.>9.ΛuXr"ٻϾUbdhmKoGh<$q5_%3fboϞߌ ,^ k Rdm"c @wIX!'%N`V9 ^#lt1+SX[KSsԴJ!ZJRϝ~[VXr S*(mБ;H`ӿF+Prp^H7l:g 5aŲU?u?'c^~pPM| BrЖhI`!7 e 4,*c9ګԉ4 Mǫ.\hCݿ_y$0U841ڄJkT3s;௎R];A/CK+~@qF9,ܷz$u q.gBFgQnpK ߍhsbK\?cyMaۏZ=p'q~+ H|Gbx}%{Auugڎ e^GKoYV>q&'V۠.GQ՗r Z9evAlks,[@W:o_LjL'?-%v?c@f`7TIVihpjh̍mB.Ux! !=Kdda_z℻s@]7ev#RM\bE 73Mf?# %oѷp"Һc%f^Ҕ7zД&w-\,\ڳ}Xmqh~`)My_ן3|ZoD,k긣GMŬǨi.yù*5s,C^o٫80 &{aj#1c+.&o[3.sI~e"KO~g/2KJ}% 'A`ձsb\JKv9`_?.Xd[gjRI 9 .+낯-_ւSiIJvc:r g۩e>m=-?L& #^66H_ީ)IE`ّ  @: (`0x뢷[7nht';Q : R'V7z84Zj: l~I]ܥoq46J5[A:9CL^WXv`pPY *A3@SZ :6H?A ׾{^չ݋?o/Nۍn 08R/ZоiԴir=o@ā`B9KߕdA&1,hȁ Ҡ`^u&~! 08chw%huEPXW/K<T> L.t8K37faY#6NK$p![%;YXQg76VrMaV.x-Ec=#^-$U70 67ʘSn(2@;ٮ?TpXE}@_f2ͥ kM&%+[>,R립3nL|Х5}+p]{ 8T2xAx¿ew /d5l~X GX-4ƍ[:f\ًW8:Q*Xxgp `M/]6Yj4.xtkҢ700P_kKX81"A`6cr͌ҥoaN|Е~pr=Wi'5u׃C$+%kmr&dq۽- No "kM75k$5FTb$)4FIW榖%+rzc-=8i1޺qPμj``ϷR{BKrIpa@_cڕx-&U0 8Eoucne[|!\MZ7;V(9 \$!,HY dh[H# ǟվ50nܕ}; {,4.h`ҠW_Dͣ6oݦ4}FC޽Ad ې?qG,բs#C!`oR6噃=KH ]Q f#!pv$`׃xܤBgU=Q +A.+~ [ƜhJX3tv g8 +X`˩, nǾչɕY3/8b}?0i^.Zp;+Jb kཪ*Әqֿ` :JH_,2$>gl[<->.e^[ `fߊ2} Mt6lk2[/EO3`(>zehTd1LH^h4xZS,\x뻁 qᯥWc*kBZvk֬ B3Mbg?N6#|կ"lێ#\Nqf'wїv_%ݚe*Wy]_:к8}NCƢaqܕw$!j/XA@3?k&ZHp4:l_oz XձS.|u2]<Y݊gfX}D5| ֚vR܅.p-[ z+ͦwleb),ЯHh&  kv {Ɗ3wDZ!{+^S`{B^4G 3~GR21, I+[,m{yY&0~#&yÈEo`I~>N-JĴSξX^MWXJ<8|СXN~#8C=!gXCt+Vz4n_p4Z>i|طK ${}a6>)#P~= T:A`cR#BӐ`O6<7AI,'7<g$03Iץ7pXp5`|mE0w;xO'.oғ!X2X*c'b}"0dhm7^0+k-9ɪ%m8p )g'?uΦ~o\Wu>ayUWOZ~8Om)H7T/c H+) k[ Y"pe9SLC /4:8Qё & |.uB]A7w]_6d;/q׊[z, '[ |WN賠/Kb0>:`_N'tp>asVQxpA=ih^ *,aI}lH2afLJXc׿ŃǺONdrǟ s6q$_,C*7MwdB ="lZlɋL1&$`9"!{ٍ܍ڔ dKN%ҮUg xuVZ_47;"pO/E.=h/F-eD$j`1` ! |\R1glPzV"R/4&z=_=wh`I˪Xix~skVmo1A=;Qf=œhz&ӢRE%CgN7`z<'(z)!GҾ4&:?A~ ~c(IO.ԍ}|!nA$pQcŭ-չ8+B1ZYQ'z}0կ A汣Ǿدc{[oB%iی8)6_Gubj~)'/({ +:5{C);gr ,ܒ MX:_+K9_/ ~0܈ crĸ.Cp `a1a_k]Mc)v;Az|$ʂ%; G@0pv:!e t\HyZz[.`n̅Zx}_и}Z'79qQ}kl/Kb]&[nĚ~CgEPnV Zw;Ȩ_c?%&ZhGk7UoILKtv#nw wA Uo0 X!{u(>` ~H}Wmd(Z*kW0 pā  1&5 >=L?xI'_pGha$0_^BWM}pk\~ӝ)ZX\+`eu7/ۊL, {u`Hs -8'*)bw%8N)ӳ+ ZV_½Z&4]H29o|cQw 鞻3L_իL f wyO~r7L`՘' 1Ơ,Q%_ja=,PeQf7/"OY{e2kbs 0yX3&\ҭB1~fWB.rHp:CJ?kF-k!\Jڻo0338sYy1Q`ϟFOUԬHB(}axLXd F!; }p%gtSK<?_~ӕ>"Gmjnw Ⴖgnh¿ 'Yah|,躑a] m,B7BзoQ_:g!F!I`r@+JдdX}dwG> p,'M`x $]?i&Zڃv%aWOz/7Kܷ)-{i#U,u71Eo'[r%[ xh_,(`ca8+4 u24?`6#i[R0^5w??wo#O6Fҡ֬W;1.4 ڹ͈>Ix7<ѿ]sln v P z&k&dPD_ pB@j_ :lO^h$i؜GriߺELky毈!jg,\NOGMM?6qfAۓWXH.$}p7 P{!ag04M mm6i% _ wa0E,^ܵ I{v\?ggϞ\1`k`iK(v[FjV+Krw?xaQYە /Дw8v= &,¶rCN璷eVӞ, ku j\c8 Nh U^F^h }18"Ho 67ŸJ >z+ƋwX7qXw? .]1}،EV97RVknA8'qRv a6sBdzXA?P$^<SlUeQzҤO6qC.>|G޴~/Q9tbhl+F `YgAAo)9wɬ\־8o0k5kN'4qʩn'wKA~8|k~$ \sp=/}M-f15zƚfHq1!m )oJKB`^g1ۦ`)`ҕA?ɛ˰*KiX7aAwˈX'L_ m{<;% 7Onq0{#XAz^px~M+7^ B=:Dcs:,m+ ˗ -GvhZ [nx2zsvS=}|82hb߀Y9YZg<c],1xXa8|\ݷj0X+EbOV[ Rf0Bm,IrM`: T[);, XvX웴 +6CšYx٫/z#Iʵk9· mO4~:E X..w(K3ܧ/7^Jjc\`z'H`ޛ;  B34 [384oԶ -,沿ϗxj8U遖rW\!'|Ñ<7m7'~5+bhMv[&xI ,m80` s} "K:k/¨d%X&x\341Nu~Lgl惛^g`XL2#xgnسIۋȕ 6lQaM$p8H 8w_~T  `*F~b-f{2>E2Y]rb˼eUy70_]cFl'Y܊T)`rX8 ]3:L_8|e9uqʋ-kmaqwKV~L[p76ܸK;L*ŸW=hAແ`|7D|V"sxyps^}>k[pjbo `VgG#A1 MS';/ߍrMV X- ;O4$h \3 nBүrpBp)Vy l @p f:2޶DN zɌ&~2-y3˙Cp_[_KO\1oцDp:qVhp~VB6A߻۲(Ұ<mgˊ5x;bn(& \I.sh 泇\?If+`22pJxȝb/ے Y_m=2<% ;!5 qsKCcXK _4({駿sJy|Nҝ)!AOP$AG_ĀW7n'x'-4Ofټ^LR*X=S=n"J瞸!߃LSCp6F iЄx^/NH9fϘ67sj;{ }Y}]X_@ZV8u5Ag0S#YHW6}^~{e>saUS⩪3l9GхJ;7\cXޚAf$8U+sj+0~,$`Vc#Fb|tg_Ф`#1oǭuRG9!Q_X(`o#;|k]IӟoYZEn[lSluE` AcQ`4pH`E^m-fe(0,pEnqB3boxL-[zfK =G> dI1[Bj#N돜 p6v>(! C`OX$48M'{VK׿ag6pah./<?>qVʧ>|sVrzO2eʆӷn){-kS)`=9.hvUV,X?H TWf3x<7_/bQ.Oʳ}e"pB1XΒxI.YWdbyYJX3 #fHqaJ߈D '0G}FԖ,;iNPֺ3a[?ODq[ژw=+㗃-'of`',o8@&`w'])]'MzV [h? ؏2i5hGNQ cQ2Ъ<ݱ!6GCy {NJS!ثqXo`#!qљ\|p'迉 ڏMsNJB& lz)`ڔK4Tы6 JJ`з֯"zF_Jb`fm2GMc)WML-YqCDg↦%Ix 80Z(G7 &_x]ΧaK!T P6ݶtO7^\h/SFma'eV!$ ќ_Ha0 ]@8Ҡ`N5 _@U0/@<k|<l/@=|;f zOhozX"ߋ_;0Xjy!.fz.BWr<ЫV]x-/ˬm{2`Lk[8)~GV& muMe7pSڄ:5Q]}@>Wgi  )ZPiC_@ +/ @ss'Kʁ2g,1V +WKi(5[(waoe{# r u,S*&^rA/VGpe%* ǫ4Dh GVDqAKcXOo?e7o/VеۼHٝ \,A2/KKok4 &*N糜)Q@Ȅ{)kTwշvCk|W iCln@_rL3erEC@A|+,G7* <M![_c)fӲT\peGX<40Tu{w+Tl tɒy\Zor  dpUCCC`v0o/rB#49b]+9[ Q\8h4is[fnv!E? Feެl `%郚032j-1HXW5*~Cf:yC_7i,$R,LB$:맹ޱ\[S?k{Ni%d !`k]pov> ~ߛr%\U7=1`[1=Б8Yި!|P+dN n728 LܧyźF֤u0[kՆ-_CLV zM#/EUhA#.X3Kap;sq[Ү`^68̶j;B$n-]م!pkT&\3c#GdhRdH_l+`B/ݔ EM ^&!K+C<,4ˋ]I ^EٍNZ4 bK5: UK.\|+& a[-,5)9CR7X5-HԳ `YX i $@&Y{m~3b @_̃ԃԍÜ,h^ bTM~Dɓ "TR\:ُ:4(|9xs,I=Lݫ2;Lg#w/gꀿtdYYb%Asw! ,*{-(RV2x: =zebh!{OjS }$0f;,CA]gzJBQWwuXOv, u_ :oK{76pU[̲0, dBc@$kZ C^VEq&I`Bp 1G*BR5 q)eNݳ0=&;pf$~+D#HOz|v:G_Z!Aym w)M Qg:kލ{Bח,_-1C`J[ppW4 x7lWXpČ_ 4*8^=[.([5 p@V>ާne9#x߇i^<4;rN -]\u4 *XW-YKq0Mh7cs1XC`4b/2ʗ\Ai r'7o}.t .;kv(uioasU5mw# tw[~X7 CrA` ͆i5P5]6 }ƩO8Sx6F $lYi`ӞueP XBOyV*ҫ oA+ ̒ʷ8^N.')#ےއ0i5妵,)kFjdAh V%PfgRvf74%t-㣱 umC/2v$Zo qjwk^A/|`0t<ҿk\b exU[؊Q˶C'k%*b& .%r6[3]/nNA4z,Gek֡ʚ.pԃF ҵ<Ċu$#Kaa,Za|$%{%j4)X8pGY:G5n^͏537ҺZܮP!kbh_53*C sH6)3g|ZkTҒKMJ?}`Y!-~ŪͿ&:ZFJM"VZM.fW$D>]`0gEx[!X\4r7S a~,c݃9uu\܆nTHVWvTK6*Qkc+`uF6$p%ԣ<8dP80+?:tt܇nv댼㠮:?hS1Z'U @cY*w|Mcȧ^ ?4\ !Gt7$jBzwkD]*ӮPx U K2Z"XUX႞ _p3mJ,,]$?I1 ||#I{fL E/|˄K:, #švWmUtn6Qӟt1x-ٛ7w/ (qGB%Rnn4v$ݼWZ޵LxafS˃^ݳG]X=cJB0D% %R?`26{9FK`x+s|Y-歽0ބVW{/$,6rl]|CzfN'j5>?4%3a07vVT CƆ8Riٌ>@Wg`>4cn犿r%F^3d]w mnѵ"1nov5ٌR " MQbCXJN{ %#=,˂VjF y ԫ.ٌ^r_oK:%j+n)? {敻kCv=ӧ '{ 0Mfɥ5Cٖ  n>)ko8JvT̕K8f[reT_]F 6/PqZ#!oXSl).] QkphHozUš q9^( Yv'] :o-;u q*:YBrF'4&Ր^L'yLRQڣnAagMvs޽[w`{EͼkK~Mז{mRc`X6@e6.T÷U]0ސKWֶyt`XL`l^ |F!)O߾d L7M.Vy3WXvx N& +CWRYxcq .`0R7@;5a }d.>|H޼{<|s\hOѕa0m] (0հJv4iiC^s-_Z;vHP i0#%K#*, |_Bߠz|!{^->[JRXXS]? #]K(f6 tg/V>d/I]v2]ؽK uہ2Ti3yT+ X |cƇWmxïrvQ-? !!݂ӹZ)jxGU)TB0=##<,>FM, Ns+o rQ~M0asްzTwbf%JhqWvm u,,h+Dhܼ5wX-\q:6bXk=qȅ _V65fC- ʕ{E`kˎ`XOI'S:oRhԭԯ:5 p% JWY>uYGf];d9㉖ *ƩIvy츭#ntM3׿K`Kq'tNX}{!/^ m-iXH` efߵJN#J(u86&5@8Z3=Ko؛ip6$K Hu1_|C!54M8xǡo(̇įYp+© ݭnƧl=KcF6s.*WfĀd`Utmmi.~+ՑY^q*ٮy!V?鮀k9rp- x9vq>*CCa sR?1UBW(SݑҌ .'}S>=_V==kэ8n‘ũxKo1ֿnpƀ)#H~`%b0Vb: }}Nhlql{p  %0>跮Z7-SM]TbxҤI!_-Nkjxd5jp "YgA{=JX8rAOWY{;vՅ' `oKk'߹zT>E 8|/hH(F' G8CW6vFy%HI }gBif-x(|$ !9c/i6HVE 3\L}7q&' o%(X't4V~+`FsglvnrMƒZZG:v~D*̅wc6: ڙhyUq|(+ 1 Q*FlXKKPqJ ө։QZPU+uD%&ƥn_~{w\ν}wAs=۬'ghdD12CsGNK;"5,j3у(`c.#Ln$w)^EytO`2}fxPE2{> 5$0 :XR ^U sP"SvA¼0{\l(Oc 8w0/"*x|FՉ([y]7>̥n:MXحn>ix~")qKNؔli Iv_Q"w{|߱Z K&YML ~+M).'6K^nPp\|/= KV)o:]{Oߔ-}Qe-C'ys7yZqe$gcvZ ׬EsU?oѦA7l9';ӭamWg K/^\2\k:cAB%pH:7э⑺V5,Uv" S?;/s4U.}G=Ekї<,M~)~Ibп{FpREN'df `_)v ϸIʬ DoتGP75* yk40_W+~7Ac.n>0}bŀW8C)X콁3jO-;S8!Yzz.Ssc5@+a5'M7UmeT˸RA`*_p-_N.vɓ>Moa4 g$pi0 A`X|o~KA]d)3_8,Jՠq`KˉJY K`t1 {xM=FaMd()`fA`ve:˲BenYBUX\Y ڰh՘з;x\\N,sFτ P.nvu%ufÁ]f#)}#Idg0X^.xwӍw{aF)~P:[A4ˊU>Zq{t"OY8ҴnVc.apbƬU׾v45J1.XF4̌-H"Щ%+l>2U wWRāwx*3W\xcr K-[]H0Llo- 8_=pDZG.3FǬ!qJ,A[B v%͂ڊ~,v#h4EjZCV,*"R|aU!яG 6lpeO 0ot0B_E1cdoK >/;K-R v̏#۰yn- I14ͯԍ_};q\ s0֞hjvpy`%-֗+lnmڹ,}A7b Ʉa7cV9OS?\ПD[YhA_|h S7JkS0cp?L4߈Wd*S_1x[kMZ%s]m+p*Lš8-挐Z6^hhH$,AK^lS3Q 4 WNsGYϭsxR"Z#pߖ,ne. 5q>]rv/"Z}&=8$(HZ8gE(GVBC(V7|ȱ0W.>,=!WL*4N]ٯ~kE>Ht\HUS>*WMffm{1M:) :cN4Yh0Զ9nԝ4|kBTyUy/gxVdŒ ̼nLD0 @k33D`_v:3X7~?lƜ7OԮ4/j|h`I0Q-$t,-޺e(`Jp"^WISev4TGY9b!`j]$ֹyKL",,b\AP=>CQ֝T ؎ZZ-#ĥK"]w+umGu׎'Ν2 0U4<65#apz?lci` rD5,!`u:w3λF_OFGfޤoD ~1.Vgƕy2~_Oq9{j8 <}}o/;tq|;x{n+5&sah7zfv0oӹ`0 % }ϝa=zXā]C0]ǭ3كpZ(< KGHc6xJXh'\Vkjn4$op{Ke ړ/ 7bjYfKTc&(嚴%O*7ʃg\kTf.)`O5p^4}8w L~!`lՏ~USF"|UEї!,QI`S(p`$ Z浞(*o /@oh] +Q0ν]_BM9%+,u}AC`_"O Cʃ#,` k?ݕ""Px-xSS#LlvrdRŜ/iZB00Ű&)DP5;EaQjāY[ ލ!w7e[wgHJ5.R_Pٝ[aH{ g4wL\@ uOi ~2al}ߒﲺFyt"tovK%q!y1V$~ Ӟ?w:X^qSK@VA[cwͬh8wR@u.t[UQD̙Ox Wip70^zҥlWeΠ83/Q`.rp }qDV\h!wV: L1hjۦ#, մ-*Y/iC7^{L4rY)zrF"XN 7o%0f M,֩V^sf_RDJҙak2V!5b<{bB|/$QB|@n"|.{$ #?.+;(;8>>qVXsH|2䥿Ȥ*o ю;{ɔ6~&Q̼GiPȕU|_~E. }#*#V-nBL{feq329Bwy ZAyss CoJ:Z0_@es}<Ԉfk~"hw'?kGZsuk-^!z=a-Ph pcԯE7;HVgbun@2-ٜ|B8N| b]^}fCsl\LG ?=е& pƁQ`\ 5"ۡ" c xV h1MMK6"c  R/ S[ -8^b)U3sEL hxf2qxX?bRŤ w䆟({>u }e_?C?+#hw ʅ~`Qh`02'_>h zV2l{ow֕ qmn_mFKRY7:u"0.I/^$'PҦ%j0>hqo51-a9m7HDoXxl Vdjv0-gR> E0ݲcB§$0a`4Z73o'#gA`fVĘ]WWzM %nE0^K+O&[4, `Ld\dcJq,h0_}_=o ۸ t@{4Ю,* Ѻ 7-sA] +ad\q5حy aqއ[&[(tn |%YbC~Xu$0lg"|UChĤAdTĀ{'Zfh f## ™ |yiU~s7i3Y?z 4Yб 8p4a9 GO*w,Ge;4DK쓢%C`% q" HXXA+ }L2m/pAJ*o۸.߯X>#F`bA_`-(Nv|gN`flM-oHFWiLUV`W- 9I>X,u[N %0qFd^XDal+KuDZ1Ty"ț81<ʷCRdZQutȍ$,҃p Sy*2rB_XGSg.jI_["B1+I%aCξog(ơ)`L'@:Q~݊|Sjq\RE?k|ykEfKr^ntP6sͨ<L2_ӛH8UwE`V-Ps2 鉮PJi0k>o}L#t l'j E+@EϺ^,(`ۊ4\h<\뗃ܐ$! eS+,Nh!ߣ .4[\} 3|Kmޠoֿ:Gl>q["p&A`$u_;wx:\; 5:nXt0Rxa`F]F'@ 0-0TrF){XF?{5,|LpkAKq,VDvY6N1W൪.(0B#ck<u)~@2>˟ HrNdan7NAf7p`&/DfȆHq8&v-ۘQ}\ 5 |sy;_=˽N=NA L$/ LA, KO<ИeA"ݱ|'bM bNٸP`,&]}CW7ʻ'~)`M^n`pnUڤ];vЕ`*Wx(fߙ7': Y40q` ~'rC` [@Bօ) VƅH`|#v  ^ ρ.˝?hcX*a%_!ٻz~nWWu+ -:clX ޫn\{/?<)a@\QX 9`4S a$k`Xf !6zc`/6F cjF |L󈰷`8T<BcXaf= 8ghh!qT"EOI`O~8wXɰj<%X*C15_sL=.k-\h@h}q*p56s5ӅloVproi]a>{x9UXmc1[yZ с ۴# >_@H2X l p%2"ɡ8t[GA-fKrhd"qo.胋@7p͉=OhHPuS p H`^l^9}3z&R"0xHϘ4֍DSSx;[dx<$/,ǵߓ,.%? .oѷl]WF` `m?6(`NLIM)edV}hvOg~'n*`$V3ku(CQ+N֞Ƃz.,9Ndb' MXul>֤CDXPmAͶ #(j?)b!UgC.B8'z(Q!x2Qi; 1sVK@Q&ե{…\cl%zX8f5P^qf1`:9U(wIVf;0իj vʉlC0nPpJ<&Z67ضiIFv*Vmz3o-&f|?W)+t`Uċ)L`/`tc5{Gk`:@E`sB'e@4̑qL4h Mծ ԭ2gv/T$`xeo!i`\:e˘5exa 8TQSV%nq'4LۻT,̷"iD`1X& ,C`AGJS/ٺ_?(g.V`*YCH$ZV!uBv 01Xnv"8w(:p.\}5cdJ\v!IvdJ`Hi ,(lDµ^`#C -# wkWr6 !V Ȗ5!I_{ 3H]L'm1 7 e`u<"EFv`;>.dt49/530XwOGpNoIrŬp*` URa5-nEc9dy@q|ECd\ų?) gmM_7mSkHTe/V][﬛&p_.Gmy\.p,Ng׶sP\ЪGvgA,0fgB5׬--P{vV zxtQK.gLSÂolΞ<V}+n.jip"8hR1#3x qiS>Flظ:@7+Q޶q`- 4e2|t-ȭi=jȭ:b)ԕ3:fy/m7r5ڗVC\"t!1 `WAg,K, L̄Ne+sS;0~ẅ́[bo7ҷmu(pРNRs={Wx6K 0w5uyf$4^z2VXh`Mòk v{M p!F\D< &KD/Ov H^&.VXv "0 ˲ Q +eZ{[_f4wU'A=*$lGh_1KR$0A`0D0$0Q1pcvIWz_2 -=jf}9,YjٌwѪ%5zߨiC5kBI0/W[gïmlVBԾߍ M0M. >4-E>hm¼~鏸'N&$<W%ݶMJz֬WkKq$bչ/U87BY}ȲX߶pdaѼB-ߗHgkq 1˃Ԥ\buѾ>e1/Rmea,@ؾW/K#[97h`.:evIċA7K_~׉G?^m)?b`cE_= <`E): ~CIm6ƭpM =Ukӑ! 0Vf>,zb`+i - \,_xfWncau dwR5Zb*lk*hoX&Ί8%>qhMKqha5= LoBH6iXSŰN9&| nZO`W.k99OqrV@W${%&_ޢ?ı&B.umot7c<8΋GLߪ 1BW',QrBm¯& Xш`;k)m[#Agߤϼ[A=#X[ۣѫU7o8( :奩<"gi 4E> 2sA;otFB"[xEe7oVƒfvlկ8_!ܷxVstmp.OНo:*,v[ ikp3 - yvǎ$Ah`uaWvm\, ŀJ6[g`Z2];* ~I~/w9ZN/w]hxjXղ7^>8gpQ߬KhF*n,* *^mB&Zea0o`WГ 0z$0(0 I!E{74$k;fmq:9e0Ŕ-z{}dAG&ǯƎ6R{綹g0I$h-uaEo떤<}L-)vmGFU4"f04|{x͋֓M]cPF ͞ _~do~ ;}7eգҍ '3"c۪x[k-A/:3# &`,ŀLYO1T8@&K 4bk;߸{spTθ{Sх!\T+l2R7 r`I;CC% /%.v P$f>hLWWkCdYTB3:CsCw>Űv mۏ(vylDקe OY3ِ[щ5}_KXy9Vm=m96MVզֲ55^C d4 XoN !)&j܀K]woloJۦa[<:p3mT7%C/#m|S0Г(ᢂݥ4++)M, !6ҰL(uS;{HiŇ}}8I/_"Z'`lb9oeP txRl3bsۆQo?m.Ca 6 nX0x!2Hp6v +0kQQI%}bI܇n"ϏoІ)[>t2`g &bjL4 |a >_П/mnq}Z3ReҡY֬Qǜ (~ӨAҾlڼpq'A7EN_ _g3_B_4s- |]$p 3Doeث m'R `5Q_ik⁖w,ݿ+[}ۏl}"by |P(#&p4k׵ΑNݲ a=*eUCF"X MZAgT5bS0vyoBI@|^0S27D8$1<CbkȂ*XQC$f3#욙wf͗=t`ԡhX6 -4;OSyK\:V૫V Z$bm Gvk` mI9k-2y28S~ӷh`plC" oĘ{e&% `9q@_ `'. f` ^xSdB3x0d2rdv"=llDy[?UoҸMt13 mk%*8,NN6Y6]kМ#_aa#?"4o;<5$0ik'.t&Hv@7La3opTJbGu0CO^Xz)Ѕ`i-YNykHy`!4&̆1*uv_I`_#!š_(B,Zr%+W.JX~L, ]atgfqk_'CߝОn /L%o/# Ls~F0"?tc/+O_E_*x2e GG<[)s/#\;SGo%<idN`sY %fDzd_S#nɃzqyc:J ѱH+;yy_(zyx<~EVr郋3*\ _id[V7Ghm"f3KXfmPAku!Ԧ8lXZG/|XZ. ֭[]n%.{X]VhxUch ?t @Ue9kkE3N~R/^ɬm.A"v#MF$yu|I0Tj}v(6[C] ]y'N5KJXWXS?oxʃ+umHVT+ ST[}Ge:tj`t`&XT82!y )]3_IXD?Llv; +ܢ+orK u .`Ops_E[sEs}\ۅ%?>W:Xߴ0AQHRI[ 0 NflE秪be˝`k.h^კGBЁ<Q5U'>i`.2+*az[ 7~Cμz>wBOQڇ4#Kb'2&$ +>!o/rI%q9+;o>(_~}J?zʼGU5{F zrS]0gA)+pR>6xȬXllU͌Ա̀m ,娈I=*܆9ӯl3 3Gm>OܯMԤ~5Yb7/䫸ָ8m ﴋ?[m0._"]E8kRYS~hgp-t?풣oد'w}tki-q;`] fZt`U-׺!|XG7%-f Fw?A`m8uY%'2GNj=dG)G`$, #hSY[rDEA]F]kx̿ /ŠtO45Nj60<6oJzpebu.[X[BVk1Eatkf)d"e3 g YSp]صow5<=e80LY / W%Xp7_R[ :-e[w";!tNګCZvb֖Uj$+{OݪzXB V;(u1aWU m)X䳞QγOΚ>.. }}_1, N+Z5XK/-d@08h!=@Y.nC^\$:\P/Фe~/~*WSJn#`0<^VL=!)ћ7~t959@T㉟\ep`*B$H`@!3\,H[ˆ'a!F<YL/H[Z&QTvyi?eӼjJJqh2X 7 f\} XS"8sSzn] lMjqVnpA/,Ӟ^CtkW;c['t 0vssa`6ga,@s73`L ӬpXy`@_OeP+!4o( (z,BͣXIMsEFKQp2^z-<ſi^ /,sGčW#׃4n~VVئl$cSv̥k׸)Yu0h [Fo N㝸9*e n9uoxXu8v* ޝlEy*­NX:"UN^<ɂZ3ۿ#cfd?E(ਃ wbw4/=f.hA3eEc?_P>u48\7P.OKstS+EJ1n5M~gT+W}c ؉ M]CB`Z9e.0SCૄFBρ_\ t1 vd9f9k{owܡyǭWMW =ڳdVIX0^9o \$0 D$A5=Ьe7#µs/et8&x9a vsjM3EC\YOJ 'ߑmaz(5To*aȅ6YA0}=kJ𥣰ҠO ֍P鳼fWAX 9.XeJc5gf_4h0BvTvᘵ&v . vpV|՚uㅘHBHJr֪;Z߃[W4(K0:lЈ_709AeE 8"θ&o}~8ҒPS8ckB:S}׿3T ̍`4v)+70U8d Zt:{  vW=l^16wh|]٩+[+`#X 8YP!V-…lCb׿c/@"l 0/ꕗ_w|eߡ#3gN/Di9RGˈG4層 i?K=Z{޻wvҭ4vA̻'"0W ݆39j[XP1`LQrjs0$05, ~hXe[w^ X]8'5|+R1o^ִ|O*@j x@kmK8\ o5ݖCUsc0#ܩ.R7"d)sh4^ȁexӊم.k!-\aqBVG,+9iqwEoᖃ%n T[0#qjMۦL,E]0;~D|%a} KY "ofAZ5-j#2Rx9t;_1`@Z_a(,_ pݞ<ȇwm#c*u!ߎíu(N\5c{7Y !pӿ ] `5>YCf lg_xߪt3g.еٛZe`F+O4 :$ oؾ]}JZx8t5<8x `qWd|B"P_N6ߔM.7̌ ^ !;,,]Ms )ؑayJ- M$]?DTw^D) P혟BbvEs)^? ,e_=zZ( نum$WܫgLAJg8qU*F߶9p!09n$,,E.8Y|䣞 TY3$pk`wE ceae0{$'K%VJcf{ ױpCO /@aa=.W_܊'*\[`lMY3^Pˌ2{Ө*=XnԾ&X"m[1حIϹs$m0- 6GXх!kqZZ5~pB[I>8B41pK}7I`\z1$l 5}8~z[Yڵpηԉ~!C;;U֕{ov p fNKv],-co]da;35S$0NkFs5ez=V SCPJX*s_\syPޗuzw:h `9}YD!ʀX `WKQ(Z>JjZei(.67?3=[l(8{ ::႖*xp&B ;e٣%Ȉx +`G8!pa7 \ ݄u6ӫz_lYm < -K3͍%\=@.W`篫_`n^ޞRP6@[a1"jp禍Q,*Wn$zI 0.ѫ ּ$~+.@0N1`p/jWG/K:L NЕVmFkޏ}PiokC_3Nθ4&sly*,- /R:Qũ (do, x(zCh<8 B kտo^jb9i4<̩bt9 ~A$s'9Ն&>f֔nB1k}ACyL.r^x%Aiun8&d&V[_1 wt.i\Œsz)@&f@ 6N(N,N۩FmՖMVsV s;]+pl56_W鄮~, haZkive=8#Jʚu]Vqpr۸y]˺#a1LhXZ7 qf,_X4q4iH#"MQ̊Y-Cr&Wa}&/XCG8=76y+V܎V Śtr9}4Ώ5 yJadAg6^a\2mI)޶"L =Vva;Y;Z+v|3 y_N[ uu5.Ijn 4N+aFtv V۳o֤7r4 01`ٔ^u5sDc R:|bB-X> =xУK!pX3qеoKBڇ Ֆ_ѷ''e7f,,m>VMظ.u6@ⶊ6IX3xOn\4`wOr' qa bYIhKO^e%qA#Io1' `SLt]S8v0 6XR< %n{'2Rn0[Fc1 K 2鯥Niy㎄j<e.c(0`׽rsA3!-Qu'=wrQ[C\PsJ:%_9!VɡD8 \*s *|++r!._+ ,L!,ŀ%~vP@؆NQ_;rsk̬=5.],,1CDYauqn:xsGGDjO9œSv+7^3wmG{쿪8Zk݀o\hSn S/2<'( 0߉~nMw֏.h{VXt,ۣ=_{dd u,LM QlS"+i7(|߽vi 7=`Yx6FP<Ϛ{7$%p9h: u h,a<Д]6Ԃ&*@g_U.3܊@UߔD- m]r(fdnp^9j*w*~}&w. >0;m]߿3Q`*#dwͿ! G1ֺG \ cò}OvJ6mڛn301 fdždGp^ͭʜZIo܅cXwڒߗz`Fk JšMB{O$ Q`'I/yf )U$0jӆ/U2e`$c~&jO p#3)Pm5/6 $h qzLS\g pve1F&8dPA gԉۓ@+:p@[-)%vÓN_\?l_KGjsKoXMG7ijR7::-_T,,[6`qf#HV jՇYD4ut׷!7vhԾ7F5ks\EE֓%嶻s2cyڈfтE,W]EٲI`v5k#̵xεKO޴VlT?IȔrF ᳆U.?žb/Z#`O 0,h W/6'\7yUJNyĺkػ8pgXQ %v`ֆ>|\ -ӭU,x<ǿum%z^"1 p7.sRX7^N/_w@@,*8-,IU@kiə2Az㪬' $qi-ҝۥ7^4,[~SO?b4.C` Q8|~;y$93 ,–Esw^wjK"nmmBA7Q 8|!qq&⪗rV:JߊzAbr hjtns))Ѝs0p[Cx^7-?Cص ,.ȁF֭ҿLo3ؾ=خ8KqDGfB T,'W ,r;йQ;]W ŧ PkO_dM*ڦ78xNC q4 O>๳EWX7\Psz2@e;R\!x\֣u.xvLR(:k@/~to]pZwd9 &'E!Ƕ>zR܄ :E/7`n2PZte ߦ GMV[,}45؃vhRmb!0`]7?ad`2ccN_wZ`3HJtV-e- +s#Ӥ1eC+X.ߞ Lhb06,R3.\wLjGhAٳ]Fk L#~/Ɖy"t*>`p?Փ W5o.*Pm vV[7K>Ɯ]V7C,`u'nv h"`S`kU",#̅s9OexP)_sF1N*b#p8Kn΅#Kmo}[5mcC:pV` <Ādo^T#,Otfbq`(a]y5>0ԌXQ2\+; LF%Q` TqA:7@`iE5a䨧ތ,u &*1pckp_ӪP B>ڐ}7 H#*K˷:Srb kaҒ2' ZOHVClbY}Z)\z.~!߈hc9H3[n)Kb{.6Wnw;N뭄-9V]ihT6 ]ҕv`{'o28uKY3ɜ `gmp=6$@KpJl,1*h+3erـW5YeBYMEruVbT_QϔfA`T_[ʾB 4{QOXqɰ:L0>Pb)9Osd㹡ӽ4hqW0u{ ֗ im"375 Vo`~\v{薿&KWnB 9gѹ74p8z{671e=ްj:ȁN\CtYrm+ ؽღIZcyBEsDz`pG#pcFe^s'~!qDb'V EYĥ}1_l>h#1KOq^7.dqp Pj0WEY/ L8Y¯` `S k|j fCvnٻWU@qK. 4vbEÉlF~a1MuD.0_ؠ\$nUr5[?-0ߒXo7,[oPSF]t3[z)Ύ A[jVt$N<~]b;<+j%JPAur]:eE h> o`Vo/UXF##Ngי&F@7.ghbḅwӠ15+^x5k>SmHGt0ZLh^ս+`F+ ["l6_qq4t2 m*sٮGKGy=Lӥ?cD@ț^#:o[ˑpJb:_z^2#ٜҌ!K d}X;wY{y修N՟O> V/0 ''=m^=F0 z@؇YqC&L͟øyCWzD'z豇; bIauVJ۸q/ +)v 8ˀx)q 7!,fj%%Bwx3,4e`[L~14I?56 8ժ<-F|fdoFg*,/˕9ej?c>hҠ֘zcekY1-2]mؖ'`z{tQYIv#7\KZt'}wn`o/¶6 *8$ `BYBo|җ{ ٶV`I0V႞;}/n6$wM Gw{,xo YL&~,vY ʂvw(ax?G x\C^Sӂ:9!)75so+ß%ypZ/mԴܫ'5@ATX2;9 ,ƅ-ʙKb9\e\ |Y Py@ęݥJUZ8ύys;怖#:_"&HXc.bNa \ Yᮀ)p'B7O.'<96E7 4ZY&UˣG=tL'UԡT:+OO~L `rWKv gKaSق?ǩғdi7q;Fof7X7\ʫq{xI] snN1e Z,˽+ " /*XwYEfӓ8"|o?js ` n܄&6 UL&~5k+7 ƥ=.V'p kpu.5sWoIRxEc0q2 e!!, 8$,COXdX np4}izԻ\}{vF`cl_2(@n_3^rzh) ,S桇'9@3DsR=S p׊"^)mkc|M+i&+ 0n2hdK zKKUv݃Rgb `֡lP2 \y7!B[JVF}3B;p` ^;]{RESBYp7>ҍ7o~ӛ_ԭaQoT妋x/He_2^w4WHK6 X%GvՈ/&#ؓoKY&nÜ^*I3Z/2Xu 4$0Ol#{= ZhV#SaGB( In$AެV߹5˒ۋ+,VA^WvOfqD1P|АL"}?cN^cĪV'/o+Vt=4&`m Gyk4@0oAq%ԳH JҜFgZoQ˜G-b`XsԜn qVOܨeMx$%չ6Khڛuf &_֔?5COQl75mÖ|4%h>'2vQp~Wu ϤqU$CU1u_X5Xer/ȕqu+ FsSM^F?hM/cvQӾYvxyN![юA.3X7J<ڞe)v{h~cW rUyG>J[75 X5}'_p!Ě`¾I`aP)кEv" /OA+j8ާwu^bD_8;'Qwx] l8$.h0`<,/6| nNDqMSQ;_mBW  -9'TCC:үX-Β :7GN^|u()0m3 vc\O@X72i'vmu׽'OX`b'^>a"OEɀ;'3^G zʋ^vBEe۾Г`~ } 1G֏dv`͒%QD05ZnE*; mo5s\lBé҉T'Bp߷2]Ju4#dA{-|M^Cxz-lkuy1C[k|+4YX^ŵ̕BF`EC8/c0`vyпZ&GLf۳<.Ni:k˾@p3رn)6obV܆sѢ{Sթxvs3f6 p1.D;/F&4>Em7}^vfA'~q@+*ktqq?v`M) ꤅1O'0e54"^c@e, =r]gq >Hs>S*KijMq><YQ$Zhv#A`A-:5)~5s'O0orYk1e2ve@#7o:72wmFc=ڶ-P(,54VcGɤ=ť|Gu0d\D:Xq`O r1X]~!%CdZAnhL91nt\~wS9uwDȪ^J-N>G8g.iTȽ0`*a=g5&0|xo!ͫ얭[][!:EwIfAMP>33blTXr@c?gѿnu宯5~CJJ++ o%! mr&7~9C"n `nXK`'7pӇ*$ I( iъPEW%CX.`JZnH~"4Q p޼smv !7P8hVĬ+0 +Y פt|)KP}(d4iֳp%i*,k6U7 {J=kYuu}*,!~53Nm0 X1-)m0Y R0jZ^;f{ gCp1d,1SޡBŲز.xmsײ쐶^!,MtF 1˫@}9\@'xOqoZfͫJS7#O9bs4/8e8 {7yh_V ^c{%Ľ%.]_Ox8.sT|H k!KUL{-xscIkxYb}_nzu3N kDžol^M񿸹 p 9L%S%k o `_$<v(`̵Ej0CV~ILRAW(Ho$!6#ØKEhC;_}UWd=4lRl^H}b =}xaI{yJt;5u3" \ax=w'YBۚې\6iXfRLWEC} ĺ|ѱ访Mh VT-FjJk& ~G\%0 {WYT b[+{].=HNb/R9cU />h! 8+Ѷo2,Ke20+Qny u,y, 8[*k V텛Ѡ1=H oVu&$Q.>i q9G>v z䔇:Ib^FYTpXƀ3D{-|fIS{NݦqJW:8nI#Udr0Gy< ^;#Vep9-F<c-%>)fL-=w \E +zLU(CpzKTmhۢը1g3di[0iPnγ}33s%Q~nP!FxkzeE[5{暃 p;_G"؞{n)_=i6׃:%y7h=M v_/ Z><#_y˾,bނ_^ jk=yZ0VeV XA+٫iUA`Q/䖾憿R/6BG̫D7.iXFn.}_@ e r9`\7 Њ6j]Gip~ u 3j&[y%,8=jl gK)?.z˪#R_kb)1`v|5۾d7:# ZpA' ZY>8** | 6Ec }84IJAKKˆ ӷN}kmzaM¯nQ)`A"+K*4DM@;웘URMi0xu11융f }]`1r4zo^3np, ּ 擔~YrINW)UC ~ԁecMk]q7!1I@B;EDAF%$@W1B*53KM+)̢R'li"*muʩݳws7j¥>g{f\-B,"f6m$ⅻ` _Y!]Ʒ ]pȍH~XN膝7Gڲm-n\'&s4fEO}dnx#`;| 2Lj?&#읿̪*HT grU00ȵ`CpXwY'{Tād0 lٚiX! `,_E'B{6__C8a[(`,N`hX Q<p[ Ye,V ћ w`kz. )Ne&QEpdprf"~16'w5o2{jA/?R 9\̟> kLXL.e`&2)O9U0y-V1t,cX8 Z1Abq&mi!cI|=Ilxdr0& qD%萾q>\zMXUm ےSr}"qTT\)IT7tp,p,,OCdiCS9c_SJq-JcR/.@_Be5 <Ʋ903Bp㝧;ujnk㸪,'{xk_k~8!luc4I2HB:oZЮٚ0p| 39 -unE` 8'47 }`ߎ[> IQPm{ 'G}a(`l`= toi `vA_VAР8(RȊUe?bޢ!%v @lJVn-7$ 4GΚ^K8R8֥I_/,{nR@G;1`Ҍ fݟyS6޽#:%aU, ֱp1 O >V#(), b?%A}3X]<  ,~Zt0#eJWn0NuҤM'do |ҷGCR>u\)ŌV3an%}i[FS]3ݸʏCVo_9, `'p<{ƌ 7[>g %AL_hʄY{KkƖauQ6ܕ*qcH/K@ƻKN#;mpk_, #ůnutQQ+`)jC(xͭ\\Uoz9G{;Eap!Ԩ-"A;!y}ގTe֍i 7о5=ZXzZ[킮1k'n+| r`Go;nahR@uWHtA91_CSٱ`d cjJ;﷟0~ې_+aoepJ`U`w車%8b085%5^0LNVN^R) V\Kt^v7ퟒ˴ m|5[E1::jBc:=' W/Dk'vb9//xt(uUnne Rpz¾r xA(e>fAJ|p)N)eMs؟V,׉&ys'pe#D :U-*px6cXMwΌxֶ%4="G\$.+iVUS݂|eqdvMIKs-{ %Oc{n}G(:H xQxUh`K˜['j`X.\_"aXFFD;"q*4pcӊ(6SˇmRg;qD겚E$v-5IC ,kִ?j!Q9YBjPMH)?smr\C֌qf>odzuo Gsf̘t/ph_)w~H a7 rbY ;[9͐ZKbN8"Ɇ+sv!"_ w?wd7m !d_l%73҈{Vt۠c6p0vwqӷl䖥(2}F݀y֩ &>9^V |D|+_~ B` , -ȳp.YN+羖KD@GxsUc84 )PSkKqpdtgWx5,/M&}IpwkWVAa6hE\o6L_\n-Ԁod&{b%}wrn]'0PVN[7ER\ w|E;fLt6IM3G/>92??qiQrp߲ᙅN`d[0b޵uxpbLx |*~/,K&`ł!08z`E8p[ :{ŀhV3'c#X?,s uVo+ع. . .=B&4BcopVk"k& j$O00&y)!^$¹ ~H,xc2M 55MQ3qC&$`X"2XdƲTgITZZj7sRo[6w-G*J+B@Wva@H g-VW'T'ceLgv/" Kv[v&Ѡ{kNpš50zN©N` \BkԺr?hU H(. NH1 梏9jEA|Sv„cgO,}Y\cdY+B<׿B[)8%55y8ӺmXd4ġB:k])P8s>!I&V`_M%,9B8F]d/'ۓlbK7{pJ;߸Sm]u'] Zgm7Θ=X?'/{_HCpA·;vB1`~Fcf hQ;Gή$pwאTG`\5顾$eDkzR@ < \$BُTv tOI _v[>ks/"2QUmK`/iupZ7kPA_c!}A`D]C/w+n`V'^)gHy&0oΧdhm}Xv_XlCr.U5};t瘮EC BwǛ6n] }|a0viƥ|a,ouc`<ߥ؞021뼟 vsrOӧiUKkE`lmooرcm`=K $0qZKKlټM$aTHg5,cMTpN}W!X\jyvD[ŠRXKy u:}uȊpzyd=+L~m}i iUqJe4LӍ[鶿$ZX\Ƽ_! !p:s W UXmjk$a)~AgRC`ߋs[DoމY/m7jɟ3f9a53{p_;4;BcuV ;-O_^Z3`on[< "+!$Mʡ={X y}꣫e+?#FbjMbQO,ĭfZ kl+9˗W zb b\ݼԯ{+E'e:YҴ;>:yD+/Mn/Jzozo,/ V%mjol|`2i_NPX5jF},-KόJ bᄶ(|м(OW~2"2'M0خJYMن$,k`ݭ8)}-+bI pSƛ,?rW `]@0CȠqHF" I LٱPa`%biϱI:@7hC`Aw5@078jP^s-8}ΦK-ڲFIĂUّ!Ryh )jAc\Ue9ћVGzݫ^`XhM[p.];*K9vBYEx!ѯ<_h#:針K!+FJ పݹI?zj5LܺqX*u߾}Ҿ:}Q . ^Ĕ%ʫWawlCa ga _~i7wL3œ%ryAi׳=h7=vZ`x5f(o"˭Mې}967&AY7mE_8!k%6?1[*!]Wxܻ*jST*+,Tlf!ԛz9fOFG3mV Z+t^} r#/t66`A+ z 7I'Rg(a|5Rr/ x,Tvs@x @q \3؍U0kX|9Rm5p8c7p'Ke=3f>% YR+[ݶi* l@[XƏNX:~zu[B7ϱ׏̀C}o/_.* ʈv.`S_K# b/ ǥmCbdA:%GU?xs5eӲfGn.[ vD::̙fo!uܳxK_arAoܷgh)ޡ}#dl28_aౝ%f?Hs֧? /Qli3Д.aW]Q9;"ubhqSsh>\=wG=tP/ JRp睤Я `s|ޔnխAͫJV`V7, |lJ/X]\:UrPaۃBҷYXOG(?Ixrd_3x{N #j5f^)^Y|2/bY'f~VI`2N>4~˄_UA`%aِL,BC`WSY' / XN e= 2 \qoV|!@k%}c+%7Ը|ЙͽQAJ^Z\8 E74&T0\1޶"Ҫ@+,*xAM`fJ)=М*r`zǮ߀L_w? }UcADe>"xh;0:,sM{9Yl'*ύ `V'22|N _[0_fƌH..JC U fSe7[erƌVy᯹o|O._:.XUض.M x>M'cp`89NB0C~i4 YN59.{2J5<~8"Sv6뮝q<p"Ta1YjQ^%+5Xscu-Fok1,c'Dk7VV'E ކV<;E:th r.gB,8DZ[e מ%Qxmڂsu{#%6cCHf-`!]_.X:8X `֊ϿmeG𱳠y9|?:JXJF`U"j}סIH0v'Co2 7vD ) 8m05&E˂^ˁN?D}ޑu //_Ks߿ï&0V÷hW[dO,V55j\80+cR]c`W.E:;8+ihyZϺ=1G peC9k؜{ϥFtm k?+Y#+^40 t0V6sGyGQG}J414ޙ88SO {У/?t@`֍<ʂEaVunJN Fz;i";f9gݴdtºx)gRW̦jԿ-OvK0α;j.6)TXc1:𮗜̼ rKƞ;m JÒz\׍,Z5m8NS|OQ?`Cߴn4=x "LCAA ]%k10\ z>U$Syć!p`6C~]Sbp(`waQڅ13{@S;nGϽ }M-1xm]E` *al Sj|DW`k``Mp Di߰TX|̲iꃄ8֕(AL `t@GI/ .HEߙ9Z3%+xe ^^,ڳnE0t˔,9UV-Hm;]`.t ZLF^ݗϒm逎,-\CY *9i/bPN 1OL;Z3`G؄pZD"},Xp]m-Y!k3S@J$_;R-OM$Gxաܗ~][;1"ӱtX9yX6`LFw}L#!4eZ q. 2iݪ,՛DMLg,|_|-~BƘ8gÆ׾tpEFTMh`Y%X X۞-J!tTȎGBOX3 +ݳ!_N VKWI`YJ2mD-_,}8/Ն7R86$W.x 1CK7/KmV4A3oV}I_JR)`^՗~fD= wGۀ;s4lYWNIu)kX 5`1S3@]>K(2r2kʼZ mCOhpK$V"k *{ש!!^1 O,_E-a) x}]MXB0`d8#:rsPbҒ_p1Oi?􌥥k͹֪8 﫿o ̀ 7sS +GUNh/nª$%شS#// ܋hj}]XӚW6ĵ m^sqC\!$ X7Xw,0H88|ׇ}L~K^:7f{ϭ &!RIShm4 0{,3οb_axؙ F?w8#o|$]ך`&vVxwhD, b5hn$^j+Q滲B4U@|d1D5`c|]3C t i~,RvDBG+ds81 מ9 1by0M.4%-&vo W87lEKo|;,+Ѹ1|G0I)sz)OCA%r;UfxXmDX}qjDo'VGzʩ\j\B6%)ԆmVn]DPRV +b_-N_0'L8< ; Nl߼_r=ؼ42,t̑3OC|`{?qU/vpAc_|q7 v U{6QiEe;R7JA J֌VyW^d.{1/& \j]>TAmˀ%b{E/ ۋ% 0h;e"/5O*K#识K+p  I!7vf8ϺS3U1o,// fp!- \$",u(BЦm)V#LAx.:8+:ӡ/}(Ie믙E8@(?- 363E@潥hGЏ) wpK V47s[oyޅbIgV;۩#~h+ŋo~@N贯#?zF"JL[l0ì%3؛唌 ǰ\9۔dUk}ff`MMKPW`@P]Ku3Tݿ5Hڻq]0 y>|:6x|u3,t*3=\6#9.jt i*ȞxS#p%9i%l_|ÁC3@5 CG=Z+$3V=?]fZ->F#m 8$hsRtUgBrĪ2ˆ IݿDYi-t)0 ZT[Cqš"!tK =#O9  0x#kCk!C;; lq_da ݃,g>u.U X6|ZsnBS;,iK_Ly/%7 S+8pN/47N Wo8p$0NNIsp4'8xu[ TH6?`ҾcWY*,ÿm 7;CyhWP/Gn<Կw"]bE- B1bpJŠw7 C W2~> q\p@[,ֵw)%:_e}Nۺܡt 0JêdWFale.aGB6^CcRf&IWN8{bI?{t'ONJl̹S:6}ƭL6Am`5g9,-B~9enaP q ZGSxp`mB2Sϳ|_|7 To67 VrJ8}Xn>ɇ  c- $_Ҡ?>|r/}|կy0_uUg>R5US`X{l&c-5cpJU64 J 1*BW~XSL`O*{MvOgMfV쭺 \੬Cx 0 m T X!ɾ^Xrw\T iW2hIiBX0į_3վ6sr\2x!4&X]ou` 5{qaӝo2HN߳,>SUǮ[#ᛗ`$x".^0ou w n2 Yl$S{ϹK粝i'uȷ"QWx FEd4V)_gXf=,[k߆;OG9bNJS+p'X]gԭ`|Yi?&$7k~?0߉νϓZu1Z"|% MG 3{f` >h"T02dW_KTr)[|0JN>|)`LԆ~{՛1(%#뫿mZWŸEә%pxN)[?'ApIX&PAE`b  xԷ]!J/d5%(-k<5Vx|)UiY8PHlKhf6ڨe:0 9 _dp ) dM H+Z wbaH0qiG0- 2~x~`VCDkڒgg:B`gp{l]{`c03ѡ! a76|x_8_b|7淼on2pgU}FwV% JCyC [C`[wT&bϞMe$1з2eW.epq@#>5ɐuV?'Ϋo7pQ܈N _++P @")@-O(`HvGu2Dc$&3!Ab;m/Tt7Ӆ!-=ϻbSbC\k\K&;d,J~h$0 \1mݻ<0X֑-PF 5+WB6+-=_>f8z\nd w:Op&u[frN$'y r돪c-uC(U7]՟_N4Fw&){籣h[PAZ/h'k.c5dipkKIFLus★owt w(`v&ͳeuo - -HRw-oppϐ^mJ n"pɄ%A,w$\^**;v,ԅ*_ qmdh=Igtѵs4pp@G _'{:2{lZmyxۑTʬgf"2F卑.&j Q`e~;)C&ft_IjY*xhK*vJ ڦs KKhޙ6:˸us"ŻUGr5߲S61:C?n~92KjfP8 f%푼|lo&6ۑku1V-:Up8˲GS#+lXG~U Gs (7)+~0ERO1`cB`LU\H艺-|NEj\|3|cM ֠o6?sbMOk<g0VS NdoՂDC$2N͊[lG%<įT-iӮ~v`onI`, ,,͇0g˭g|遖' .;D_|< 8[,9VW'Jt*::n`&S{*Y&[(f]fu8/J?HX=_;*, 't92bv#-CztX3#:?_ws)T=9T'e (|lߞ .9z,WۅCSxTNGHʁ8O~IDOR]VH*̪3-}=6fѩ| o $Xn7SԨJWy卓L~3/G htDr C\ 9_mSX_~4pAR?=)wܪ,l>$)`w;,^W>f 8S9 pt9BߙΚУje:`O *,mj{G)edu]o> ]Ƽp'V?jg$H>R  X_Uho7ob vXFؒ(`/Xl߇T9U[B߄NuLGƪNN|ӻ \x0]9~}&$nl>x" y94,hs_3;׉O>v5,G97ι q8bp* m;~hYOA0RW+g'kF5ϔ,dlV*AԞԏ  \[Y SJ`Org@rG2 `.3/yi0EBσv V5DS?K/j3`,v"$!;崙o!DcFG0o 70`Q,"q,E-sfI{.8nҞk)ݰJAY]ξcvmKB;lYxݺuJ_;~{>}$_{{#(B[]pM005 Az 0XBwb e!+Y1va+pPp7 md@KƜɁ6_3( pmPr5ծE>e8`) 2"*XXTKmpr%#]\}2|лxVعS"4HeEZسtZ{5y_Ws.$Җ#\ y_x3 g L #7AW G ;M XЪ'|}yx\d(Kf/*#ڭsA.}~!x.3-7OݶB'B?B~#p!Crk ܁:ٯZ/ѿ1, b߄ŀ 6CP_׿ `gXu 1ш}(\xҌ]E#XOl <<7|[?2l.p+cs^Fljz;_xwY?h`s=s;X_]8+aI [`с+]H--G0[>rȑ.T]i5Ⱦ/ 3_f=d+O_$O[}~cVW`\WquټWR`XmBVBm*|%o5ri 8r/yҮNJfw_X>鼞Qpz$rGek$1sΘ7_^@Xo} 09mHjʏ xO=A-Sר> }WʲWk+]{ˇ:H $bfdyE- :|߇Tp*: :~֫_gя~ݖnWC`glAg?ٙ0"0Q0YɅ=)腄E*[ KGuoI^% !׽疼3AV78|0=H!WvQgWuG3\j}.v:.CjnT^kN g 9 K;R+$pÜAC<*WƟ" P/'wQ'|~7^pֆ߹~%kt"x5k75+ sA WW(܃QkҿL,TW /\{>zW]oIZMC4E>-%?%%pEL!N苟` {vcN?[քf^AHL=bW,-B[XSp3`0;r/=yȇ[ly5<{-F Y& z / ݀!0  8T ^7lh8FͶ^+ַ>HI<:Zհn{kFD1J }/yG;Z낎pwK7ap;/0X {_L=5# 93r#U%,x)%B_{!,pa)A 1g\U.@W[2;/wƃ:[_Dhh8r0pe0Ke a\tkZe\0+;'Adzw?c%qk;9uaJ~n!sߟ#c & BZ*-xcw.vFf0!X8 Z:BjW`I࣫=z(c8͛4l=Y^k߻sHQ'?{@:N޶E#(eMyW~iry3zut/6}jZ|0wގ;6HЮA7jY5X-4}w8FkP2u R]R87 nf2$i c YY~l^:|G,I«< C؜8GzzX.^u/;̹w7+{ŽZLhǛ>o}kT~Ezu7nԢt쎛dN /~ ^pB${ÖuAU&^k_ Xn* NJN' ;D jV U,Nh-Slw\i6۬D-P[_ y;J/"v?A˜oǣjwބp8tFpsGLm!%`ۺ6z>z3y g<7ׂyT>ĕ՟r/W^iu&3F-|V8z2Wу`yPӡ.{^tq[oUݺuӦ f͛7o&L.X1hrwmu)cRV x֭f߆FsI7tS+m_|'0vZUU7#a;`6lfE)o9*;gB4ֆMHT`_V=jx=E`oڜZV8{oYY?m_?vVvOK_"X )h*Ƒfml<2ӍNFzf$S4 )՚!#Z7 ^\(9.J޿ۿ|pWt {4 jg4.C`F_[hY+oJ#a3}N :XMxx2UmO9rliO-_}; AWA`33[Vx-[t,&jNۻEX}<˖+=:T3~Ĕ*g9K½6(Gb;t.'2#B z[4/$]\LK_8(zyKy"b'QLnw.:tC!Խg򝮍wQ$9gz,ڀՂ`ђwz @i# {2 | 7kiXNft#7W|C/H4.&p"v.QhW ^O[#JZ1p8υΊC (m:exw0+] rf G=i{_kCR ;7[C_ aјD33K`A@jG+CfWaOtﷂZ m u9RE^6IXj. h)ˌ`HNLg`xk.2p ^  &ru8qTp]H>l[wf1a~(G?vy܇`HE^^ |1T/%5(f}g]X_LsRNkGۜ*S1S+#]sGLu0ԡvYFtX^b 2|).e\ӵ᠒]n\|kg ʂZArz # #K~0]]'߸jUHu腼ӎVصxbi̭׾&`74ٖ ~.,p8PXtM~E1pƠA/+u ((l0^7GK&Ov`GpGmsX`L +=]8L/4S[ՍTL @&A Z~KӨ(54IыF6#7^dA MBl?Բzan^yXr B>2fM sm .Y# v`ߒ,ޮׯߦ(Y^`[\r9q[g ~3ϩ*R,.v]S)c }Z$a^&f~x\8 #k+Bj30'8ǩ-xq9b}:`G1ǝOGn=Ӵ EN3/c>vn9OzO]s㺫(ģ. 6w:+E_ kⲅc˲9*cBp&յnlΐxn,7{z5i{)g/{VG/ 6d.M;vj΂14F j(iHvKOYfJ]߉:mgUQ兺])oNQuu-qA,:Ց:9@]|c|cvq]`3zҰnaYB:SOXyϋu`jOFɭV1h Q&a* \˦Zl`ƚiW=]Y=~ qnS :XJh@G xh^)?_:\7cKCN=](pqKֳ7$+mbXmfR a{)աDڵd& kJ Aot\kAG+$6gkLcm,9]PSCK^0|@!E0 ƲLK 򦎗ZV\trΙM_نazʩWx#&kMX){E=ZB1eMiO:<$q#w-:I"_ /-gSUOX4qڰsm3re^-sQ`4a(Ӌ^Fwm'^,wfu-9SCx00jG?dvڑ.LX[u]gG8y Lh |1w082 LZ2V\`Zt \ 8AOU+߀?hm۶Ha#] }A- wvsfw܆kE@["yi-F]Y﯒2uoP݊I큝& ,؆!tuz6$Obo"vWj_wkh"9u'3M:~ ; w x۶us:w~ٞQp EΓ0aɄ>/|yfā]|=]܋0*Z%g;Hfx6-p $lt=.k `S+yiNG4=!]mS0ecYN(22 1ܗ `˨Ky,ӆܺ{ B;O7,=\70A һ uHr?Q$9ͪܲF)HC߼6 E.+~{ph_WmN3 @͠)h \2 ݞ% |V tkF:efؓB0zMUmnBAH#l2X =(Lw.,Y20J8X%>vLzL==?[ jѮ [3rk\W}`Ujv}/֤\K-rÑkCfۿ "pT4s ߙp*e Tnh%m6+E] #f $;Zj\A D_}^|ܲaSj@{wi38^ٱWNwO{۾}opW̙5cӭjfZz  , ,LlXV. u9ò4p׼_U֩NaF^pB;!M(bau+ |9jfD4 7H_玗V8㲒 f2` f]1~XN'ij-dϔt;_>ZнZ`"0?[eEGT)b[jp( MX5FˣI;^,#w}6wޣN%hw*s}*H5:r7Lz[®c8_X/Wߡm l;yƢFD?K%+ pLiFDЯhvYlm^MiͱvUk,iOS~,rBaklGϑYS&>ޑoWjOA)Gp~UU:7K; $|-}9۪4ս=\x>FMٔ{˵[2|ax]pDs؍ζ=(+v+E+gl}*voE\ H~_|b7;(1 zYXdlF-o<逫5`7`UxCNSRO_(HNt8C'${| n/9[a["aIfxї+ф Z`r@& =^x`FWVV0kYRcЉ߳_z(tol+~ ,6hઝ,b E#?'obBЃ[hLe4Ec8Kp/xvU&+O&I`kuFĠ-?'#Ha+&0qҞTYM,<&Zn 5kUx:5HjWwd&]_l.-z$@,9#w]+4N ȑ`qX&<pz-Bzmqe[B$үN(ۏ+)l)DmQj,$i9>a[͊Z+Z$,d5;YkfQw||lJVjsuvLTDW&9މIEබ6!Mc~\ow7Αf;Cue^{-(/tyeea,!FcXg 3?(Wc_}ކi,=w| '`TN>RA] ֦$C`CN$g$07X@# W ."%NߕZf#/93 Afss7ps[ BБ @u74R+2AW7 :7*zyjgEY++vB+|0-8<. fu?ُHMvy;<.mDB/ASLK"~b%} ]Ӳ/<Ie`} ^JeF[{Ț_+.] $%Q\{b+|Lפ׀@sX#!9T7T~xUEJ hۂ$=_Vw_LuX5A򾢯Iw%%b%(%8R#\$^\$hVS,Uu=rX_sL!>ҭt-϶c`V6.'zm.~%)eoϲ^4PͻZ@Ka.=f\-m䥪5jG ԣ؋/U/ӧB7%Hri MϘMxdzE+˽ᑝKlK8` - vpm;΁b#v w= òkcF9(IɅygk9C r\o-|TT2o{SˆM[sk yIW{!,3-/gg`Y.v_EUZVo`m}WܢTT}*gḳ`C(Nx8?!IMoWxXc"o.R B_ʞzp8_˕z %d]3٣opЍG1x_RE >F'$6kI, f/\L.J qU-P ny6 y*lK/\ E`7sD׉WN(sMсۙkzv .,:LM?X1ݥc׮{ݵAcLn\~S6_qW#+1|}8w\_8e `p1 B`Kw_WK; f 9 'OYiau:V j<u(E_}܍l 'd: dMEs/I|/bNK {OEx&Z.I(L^0| ~Z;g-7K{Θ/9wdbљL ={=Ly"7_IGo*%t~'Ϲ.5D,M`, [2֒xP/޵zôW>!FQfzOnPoY( "p8`/x=><{ !pֻM />^@cf$+y}KrNJF}֞'ZzZPqa b!hj4b~갰Rg ~`/Ş5&wNuAܷmFb&4(do%Tr3J6{E\餹o#+|s/38HZ>`#gQjt9fq3[޹f%uN]i ^čcx9Cu ִCK^Ȼl%^R7l߯V {}, 6I:SIr{caQR|xzM觹O9gwv ,Al_9`@iU+XumG`px`B /hKBυ\ɼoAh cWv--ွ3n5(ᵠ5-vh:`篟18r)r Q+ 0-U7NLr1} } y|[ri=Y:`tv@mȀ"Tܻ_~o֬4p/'NBa[LZ:9c!8:@twy5_^7m҂oe}onUz;z9Su@ϗmX*-s'8`E12.vH'8Si rϙ ΊM [i7_0 |_6AKvF9[q4D3;^:j\f״dm> 4x6ïy^[^S׋qoD(~B:x󢡨%CAȌ>kCV47 wDJ`馯g1aMyP;} [WrBG]T_E)hH.f*7{ +  s9Z PKwF:࡙f3\mB Z[wL4~@XP^}oyP0%.S:`k#r[3aCϴ Uey$뭎5^EݼYs>x/hv`8/M%Vo[[5kr`yXW3E_}Tliݝ OF\.d6p# A#OJP; i.>^a8;;= ZA`*q¯9v*S ҰB"/,}X_o [ ,F}2je휾ꢋI?0o2qk*}nnvWh\Cї9#p{ Z Ԛ8[} z(Zٖ;-ERuZ}VyRWok2 __L=wd<|KvV7Yuq@u˔&iɗo[xVkI(}/0 C2Cg꫟Rv[9=_%(7'~!  8`7Ӱ" $g8 41 X}ِCNl\& W,0>:}/n#mh$WIn5n߸ڔMG/dk7čTљGE7pZ5H(E,_n& 9|,=dHrwYB3VEuSze APSEG!lut }IS_d:lKbPYWW+ ywCX`}-=X8.+DdycunU!g5ېn'pxW}&w= <,:[髣*{H 0DC\";:/?+.݂ua}uN3bee'waC0`"hJ39){roV]\)snb" ALvg=5 1wKqUSs^B]@̳?, 835wiAw,.^lQbuEc+Lx dE/-lzdO){2vX>o4T~?D>ٔ&*XE$ݹ;) 9bj㐪E″#CTL,ˁqa]1xKٞXEMhNCpN. mZ+8!Q oX`0^ W\7 }8vV+y`WV^|2 U\؉anKjmĢQ䬉ש"uyUHȲu>rr +`0ѩ5`{>A\q 㯎@2vH"g$37{I;,]3A&4kL_`q:(o`tem'T%A>Xg TUp;ϟ{ߵכO`'O>9۴Է|^۸ˮ/1'.a.n}I 9|ULT~!~*=oiћ 6oe,G~79GLͺ!_ }u$ U+rќY O2x/&褸w5^=WW^b-ibdɘŻ\qι w`+kRlY-`X(_h8k{9M4{QHtձi(LqZ`u<g4e௾SGU4)9`KNTGh A=,0{' >+&[V8`x_ pGs9Cp6spc>7-#Dxp_n3 [>Y:z! ]oX g( u5[z !3DV2QjMgcLku9}W{͜`MsSzQ;*{{9Z&Y6s;w :xp+e"? 4hE[3#nuɷq^ߥGIK\/<יHbs7cڥ+/=h2;;v79,p`` !"ڶD~uFaovzpA3LjؙKn$(sS ҩx*)׽Xdַu__5S6OܿqlQ豥;#e)%lT \˭1!T?,E`_AIhծ_\vߵ/ %-ŽU=/^%1!FNw7I.ZAx鰵k`V2 x+1Vc| _VզUjY %.8"gAhRlxޥM[o~˿-`~17 \< Dh%,Og Z4ϱ0ҜI4f}lmʯe/~I;PqĠ#]!]M}` }rlkQ|pDxp_k17'dMf.+=e kh tu:4-*/M-{_lv|r<^]w+:E_`Iycq#.KXẄ́u}pSO}6ˀݔXnF%`}Y&Y3$X6 {vWn֦\Fctxw;- :C1$j&paQksWdk8t#DԗM)m“^uM>Po4B_\jwʆ]v]0_nU_qgkԢuH)+ ` XOB`%]'W&wىؤoozit2ny;[Xv!]+fnk v^2pfxQw֌ E3M0YHW\tڵ .I[_2rԾ.Nqz}9څ1kXJpX8y RnE2 L%ЦнXWYJNĮ)نox>h+:@@:-5NX{Y]D :By`dQhRbliM0\d1 SjgE% $4YWt#3L tI_|oC߄..7(%.;| :—ЋCv g3 n:5Qj[)wB0Y?[D^e軜[SWÏ<"b`o_:˯`R-h1~qTW$^:e!h_$~5 "4ϊ871pF_M ,V#s3|D`.|E^qelSFR^RDʐ.8G1Nr+$ }a7x-xA*A,ɛ7:e3άψgB fo\mPUdy~ ӷ8L_ зMU'Xs[^)&ڏZ"\kw ~'ky^ѱcwгϜ5;,j(?dOʣ$gC/.)^:97>~{)7pjBJ/mMfQ%ïv9߅l[ s{Eb^`2NԍIu뫸2b,KS[z{ůOo?>;#zx}k9[{КO pK&4Ve Gz($0SK7>}思 &tCZ(,XIvZ\=|0|n6 i$}ג,"ІnT؛e -A|C_{Q=BlN"YnaA7l OԥC_ha7e C!'/3|4"g pϏ~#!XΗ"C }XS(QwWA#qe%xĬm{įtͣАSvG&H"AA^C묉ý H6ߐ6{ML_+w'.RҰOcŒh=K{}cT8 ŵ֭KT5xo#/c{lY E`w(WW\}5oG`Փ/K "]0x9njՠK ;} ㈛Itr}`p?Cp$pt g h: p8`|!x9+*Z՚jEbuJQ2:k.$hJXr̍c8OF` *l 1~9 }a*/=U %e$eMVߜ`I, ( 8qgڣn `'\-s؟veL\|_Xt45 .M ;{0 [/F’9`,ClK{Y L|{,e+wMk97߳j߳.x~G:/wܪ?1]%W? I oI¢4_pqj:`n]`p{K/#?lqR/}IJAﮀvH7UR!_TD-z1LXp kb%>#`^ -0M9i,0._ ׇyc_ݷqj=z>nfHUbTb_uc}ܚmaX^KD{E.WXg8ӤrP%<CࡦRwiy4E4?g}-؛{ +.DYmy%,' $̓"9QbW+Βզ""gajp L-: ~c8{a.=L0A~HV,,/ȝ7KPWYI"y|zJ`!ܯ{`n37ݪHWnXHwn,hL:L)Jg!џ ab0$`QR뿺%1kX_8 m{}2JU~;u٪;6g4ik= MepunT~#<}aϯd-"cw{ 4GSU>fy:rpJ?Sg7ƉaY΢N5w_0{,yC|] a-}̂vf+Kt),auIӔH.@zx$BcG hhu4nƆve֡rae V .PWBgXGK#h $.֕ZdB[֘I7<н~{z4 ~;@ w;eM R0AXk$L+Bpƞ#mĔڨvyt@HDkFfG0 aar6[̯V}k>%IJNb&N i9:ێvU$|#A_(V> `Mg{o/ضYwy7Xt5::'5ѣûl : }w}a_]a녆y'ȑKr; p޸Є7&A`B;۟&Xk>Xpٍ5PM9/~ K ‗vZFz,voF`Wn0旚/_ h ߧOʧEY{S ~⭗i%X_ϐ5D`*^1,zH iXIz^M:١ͻji| } A_7o<$~[ߺ~ _·oݯץ/|w+,Kb0UqY: RlD*L,jf)`'p8p=8w_? EيT -%cXW]+ေ*kZA/S8{|sEߋ*,KL(IX*8 Cxtg/$K<Ķv7`lkUKz-pw5MYg/TL,J4  YNmS6@Y_G ,g Zb/ ,K>|e~;k0^4гs XT8v |q~0,Eyiy] #SǨAT JZ!GԼWlmFܘ|i,0^2"#FށGD.,p  6 G BnF!il<~X`|LK ιJdAoc౩~%fk_,pXb87Q(,'9!oꍈGMhV;K.U/}^v2t+~_")h%j*,s+ ];0Q +,pz5J$<򰺔  H3WX'f[ZaWrY&A`}w `X 6e?k{{62:o#+mg8 ~'-ƾ#T[qiK+ւ, c!G7֙3EfUȪcl:8׃_3\u9BGLn,|6}1ݏG 0H;|gNW]]_NWt/^$ktD;y;5{s-vYcDϴ KIF`<Gv* ]/n.#0v#8l Pq^9_W tiVsM}k9}¯N<_1M0]4 <Gй`O7(n{On,3g2ZZ>}~WX¯^A括yC_7+3,DA `laG'_@޸SR`N`18這4ႁ;޶w%w%Qٶ{%nȫɎ_/k:*Ñt,S[~ܪK(h;`ߒ LA똽W[t a\F5Aĕl/uºUa!/V_m9;+L^w=,wljl ѕp|Qe~1F`PC'׾dz%w{_M {ّtew}EVP+؊b{߀o](c'4oF=&'Cs|!ljTWOKl7րe[vyk%Zb_Xے4K譊Gh!?:^vX.M boX~^ѥN<ҋD9|Q/28| E.W7>h֗/U`5VmwV5E&YOFA華(:D`.pmH_Ub\8#LM=k";?YAs :ė^W^A:G_,,@p$M'#YJ%MR#p8`5$lF-=Ӻፈs\,IҤ,8U"qHɤ-d 0؈ r?%xR.E0P>ED5ߝ\`<0 a a c  R "0F- 䎳2XPE:ی:Dh2茚D9zy.-[>=9]ޅtˬKF& l|P &}An?{ru9a1՚Y?B+W$a nϺ=uqEfZ^}yn$L;=;`U$`bJ_ܷhww#T=uͽ{ٳMYѸwzKζH/e|?)#f6!R냏_)ACsO.Kuz?K%x /w^]A/=Z)pÀ[!2ӟ* 4&se2 3 > jnR$ yMJYn` /c_;&&^a+0'};c'='0iֆ|*l:i xy.pdOOW L6_M5Ahkd<}&O>#?a~q+r  X_'fu7CRM WX1P4[fV{j4*x1kA)-da g ni]G) g)0wu!叨.*.H <$hrMsndɮOh`:mOច`}+^mv|c a믒|"R_x&[t :X 2 cZK&r8s)??…NۏD>3Xc*\/sYW]zg4 `% K s_sX6+S { _JCj}ɔ=-?-;ebJဵq~H>Ϟ]}e>gm_9,<kl1i,$jw*}"LZ~h^N}Y3" {{^$}pKeQ*0ݯ;~YGF_$}CRw_;_T*i9.lU(vŰIXRW!r;X,\~DjūSCqR! p/Ԝ#'=6'M2BYe\ -\vo']gv  |FlDh3s]t]Mmij(. } }^8qӟd`tkPy׽gȷ- '~ K :pvH(bN0YP X`m8G 9p D%]Y%{_bܥi+6<#97k\@W*hΙ7lc>>, 0kg[(-' Hp 8`!3`H%pDž8WP/]_R磧;/].%6>Z M%SXMOoW>C#oMHx\$avxk|^J_zyF.G?EIyA.{ Б?:?7ĽjrߢtK˟tŭAh+|wE1&2ڄT7H^9V,\~YC]/WnyWG>U*Z}`M߲ׯnz/ X`g0Һv"= \M wR{ljXcӅeOY} `=}`s_! ]+X7$;&لmۈ]I+R^BCsVz"mۄt[o86 8}}HHRnMwY s!X%9Rwúc `E6z9wRR{o]4H"K~wE6/Xqif_aoy#zVY`,%ӽ{C]= i/_u\ˆRs4^)z|n䅮rwqOGj`u}GU{) t_Ұ|!xC=p>scVc>א{V-uVnWR֦dpe:ྃ p꘬L ZjbX~iIYѶaq#v$Zɍ)!qO$ϧ08YN*h~^{mo0_?4 #'ORyT+b9**o)Y}l6> ]Oŗbe-Jko[6vHszA |ׇ - #݀SJ `{ҀV`Z:` .9TxInEz1[`2n% `l 4X;+ ,ne9pF^{?!8ր=JJQ܃08[t|8\{F4f9_٢+K%l2B,Z5׾# + Xsnݴ`8z^86,. v5'1ka_ wtJ'-.lm4N_\ u߅+{Bm1ߒ Y]}n["М0XѶj68 & :-</>`%mj\0k}gV7]}+-[eʇ|XҺ~^W`ݷoνWFVtDaoJ%hC/ ~ނ~#$Z D3kNM']U }]^]~ȿV7 XA{+4A`2b;R,`[7H=KOzfu3S:pX/A0PǗ~g-- dl|s~dÚ߾8Z{I(r,-EyD=G𙃻>}z-B`|x/<; ΊI)|p-AyepK ;)['Vdp O'syz"h ,3\]danې@,e-]cvf 5P.A`Q\xyL ny9#J?&$!841eX{ \8[ 9}Cz18-F80Fg1 QCh>-@.XnUYݤ0E>8m°,lD"s].61w) Kuc༣s˦_g >DZ_{ k6Y"̙g>o>s<#/#4uh~kGۼyjRDɼhPgdՀcX”Jº"u֥݊Awm5BAb q,'}Y[so Hz3])3(El: arJE6 JVTg7⁍`p pKޛ)\qWZ?$JW}G2#C3*k*?wecݯ vϭUthG434+0H%, oO]똵n?}K 1gB@VU)`DV] ,՝G/^BxxjoXռy2/̢g5`O{v3I m^0{W ,pX5ogі~zWw}K~W:^`Hmtwf~M uYA[:940 pi02lҶX<Ƕ{]Mc6Зݾ^hrwBН`~Z`{ʡ{嵐ׄ4cƪ*eu;Rtq(tEPp8t2r0s70vzt8q82߾!e!- U|;<;v]}k]qyq[l_zQ2v:ԣ+2Yt%M| 0pү O/Uhq 5I֠ R*73mGJrErX[rt\& 2?O}9!l֗__vE,ޣE0oԻ^_rp.W[`b4$_BZ2Q K!D24_}[[e\;3".[x 㛿 ;'ُ  *sf>g]hj/܇$ҋXkAV0n I3myFu7 {nBa~a/s/f"]v.r1@uKQix4As:uO_zt u,2J~wͺ(1o }WWJsH g(L,IxꙒMXNX&sKs^"+|5 {ݰܪ )T=/Jƞ?պb.زyճ̔񹄠iHXḭs棊F,h%fړ + e@؆V~KsQp^e̱-AbJzoc;9X;Hgi`X$G?}!**wx2/Xa] VGߠ!cgv >וvBpPYհ" -J]@ ZUVR{7|&LVhhmQ 2e+ 5+IQ `6%#" +w)7DՂXG pG4j?v" xՃ?~c~Z=eü%77*kÜP;ʼY1̖U+궁ѿaسu,:p X-ai L^@JdH|NۇnB] VԄUQ^'=ޙ5k="+%NH mȴJQ^ϰXl, AnYX62m !Q> 4,#A; |y 0/&>-~FaQ\`M ?/DChx,vY0Di6&# F\o8mQ`05#soI*8V yd^$JYh\WtJvurgMXYUBҳp` ?. K̗^n t#WY[3B͚`~}`8jo%/K~6#iX#Hu0t"p8p4M8?)78"8}BUoQ= !sK]VԙOYϧγz)KB7 Vmf1L4pzKϞy*bźo׶ZYփXuJ!W[JƐdiN!/O+sC03%eׁ?c^k)䍥`-' OnŠ!-Xвl҈3[Ϟwt/QTcd0e8,0NE'{ eahMyRQ fSRF1Wv ]I! twEݫ^f2!뚳c_3u2Jg2bt[|u7UB`pW1JB$R `kAndȐ<=JB_bp TWB ʒXf[[!-@!&kHېB[D.l޺D gN{,?HVfp z_@_5Ta̱%[mi/Ŷ#&|/)^+fjeG&szna. T]5$ p1`G/>v)% L䙂d p)c:,K!J(KmEp& M5vлzjTt5Пc \ _Ы+ ;:+f[aeduhȖɢ9k`V|@*~TrdK_mE|JH̴j}oWΕUi{s0-xᵺ wV\"ڌcJ3_Z Z!VhwFd՜,&b905 v6lH9 >*j AC`jaMs*':a^Bmx"X& z+ E:wv؉ Pغ!5kI74 :`. aaV:\`e1t\!<7)< y`ۃ*e?Td T9)F7#Mෂ_. fۻ^C l1hc0ܽT{/Ħhg*)T?&!y} fl8`/v;m&HYm4M%޲qDg>QkǮXկ}xfXzwƦ+;i줱&}>ACip~IlGw1xJ5= tT #KuvJh[o^0O}~5௱|o`-@-/i云F= tf6kV9ρT)Q6-  _hBԣ.HrK^k XPbSE_|هT mv.b~+w.\ UL ) zf_u` =}#paYm~Aj5 j-ֳ́O[j@ĥMZ&+-60~-ۑX, \_ n0tؾt(g7h0I+2;8(+q8i8+ϔN~lwĕi&ެ2cSx1<ÒP7o wqٛEޅ:jnrq:^D\ M±Hk1\0hЬ?蹟=z``/ }\O7ZZYjL^v鄸kʃ&$G~i ~SxiX| 8h>cV)e-ЃKL ˶"sX`pkutq k:B?D׮\=o֗tan`hV+jtɉ,6Ђo'C+c^'k]Ipxe^ 3ډH'J> a3]pp.$޸9--|78j>H:z^Z5;nVǪ!\G(cVFMe`XVĆ`CgSOsFpԣ̦kv gxt`nb^gɚ9K )\prws/f`EF88".]hX  xQv'RXO`|.N <eO qX`ۨ"ARհzr~iLH:td %cQ܄iu1򿲿V_K+Epob 5{zU] $@ϟ˗;{%Tn-&[ sˀ688M1 4V>,h} `t?" ~wiy`՗ۏkV waa&$pWN` `߃de8k .9cL00)&SC*%fʂzuz/)mWI~ܬkEJ;.G`Z@6+-QX&e~ oM%_܄V{ۗ.[a)BN@ _'Lra}nP.o^tFH7s*-SE]g ٰ_B#KЅ}oy5 BedBlza9}8~*=` SK񭿬 X^0klD≗:|IѶ{K?jV0ʥl& Z*, R"^ߢ%42NK8gv3!pIrG]7H~Fͷ]-Ww ,]F`595a<-iDkm-_ ϫ92q~ ! X1eGg:<|Tfomh V7]Sƺ ,+$dF;~q͓~Ĝ2~Rjk=ݲR7;|ov ozԶ ӀV"R8Kdݖ\hI&f<o C(HF:Ɨ!&"E KFs(C9,Tn;< ~ˍNWpA' 02^`oa1!]^ƛY`X 4, M蟖4ZML6DpwhpŧGy0vr}ʛ*~Տ{WB706%-F|/M} :]E%l[SFS6vLa}}q:K4+ 1'9'4`/}Y& $g aq ]M ">#l%ˆ{޲?EBnCfH+u8$4sG$_|x;f??Xz 7^Nd׾誃 Zog]$kͯkBόH6n7kf 8,=fjCx CGo*S0هT~ ̺Y!_+SKXĠ;m}޶u+`A AN_aUzG ȓhX;0#Ϡ~Jڏr5REy s8-p- ZU;~$ ~#:+* lJG}om9`,j{K Rgw C_"AhIiTaY)Ӡ/O $,Mo3iXAyv`Y@%a1a1lBb˒їoyM 1h1ahbX+E,ze&_t(py5E&㗃7=Xe ğw %a녭.4W%ol3K|*i`V{]^N~2y_/&]ߗ*,&/WSC;z?n@$~v@@:)`4Ewa$B@7f"`oXzG9MXn𷼝Mtn0kD ZK?NE8ة+|҅?F`:5K`iVo=LhϮ8aQu` v}`#_9C$&;e0.;ˤWN7ڭ7Rl |qI2ôn6Pt𷒄U䓆x6q sՑ=5Ϻ,Uz3wI>X\xle3) dD`ܯTh۷-e_m/eLө^E[w$-G:1*Mv0YXv]DAǠλqVJʋ{,߰꛱)̯bɜyrEP a3NBpdCe` w*u6jܫ~Ҏ8rf@f o|pU!:-\$ 8 IXF`54IE/Nxtwbpj qLЎ?5;pƠnkN_K:QXR=pD ,( B:,p)uhYAhmJ:>2r-}VHP_\R bɧ}17˥uo}mhEw8q9.qIߜxQ|8`V~CsQ#XoqŇ4Ak$w^ {ˠuspzoG³ŝ`'Znܭа}qp,>~_!XX`? /b{P>%!՛`}VSrQFH?)UFR5w lm p) mC*K%92MuYX51+k׀rX1h[aK:"%nʓe[#U*B]։ %8*M8EfvE ?ۊE\^ ll5F)dmwKq+Y_` g][0W\;{u炳ymv&WUޮs0wş,vIA_8~ M%G,C yԆ>D֝}ע2<=HDee~N܀D#BoS`wjvh`Nfx|U cW6?m? }]7A)>"(,KF:z _<q8`)xDW+'+q8^ZW8`\(qkv~$@cwmF\r0 aMC=[T`.ĦR[Ҙ3HMV5_LNA/' ,f 0xWg^8MŏϨBwVG}*> b@S Ԑ=p"84ݾ& ->`Pe#pT5Vdhlx8a_4JR5`,0A0xط]YX#X`#k)qp*qTcBu{,Qlu 6L @쁿`Qv"KO??VaytM'%75!hG/#(c =8[z5i>1A,O"HTB\jZ$3ř0F5ơ0M WGmtp[_H VDnC?bv^ 0-r1ȾJjTlx*ۡ]K׭u[Πs'H¯uA;}Q,ǯ0f:r1h pCgT*\!0*yks1A0&XZpi+1h}F:,E |+,-2<šߪJ^&eVK-!hPej_t Ê[Iv#Z4*MMJ"k6 mu)Np=lVfaI` -fq$zA1*Msh;vճ pVz9o]eɷC7m-;p3ޥV^ |n`8 SSIxwnB_9`EQW#O{Q1h D횝U;W5tؒ03IWl\l4iWe7q.*w:ԯN 'ZbX+}Sf 8LxOEUFnq YTi6]B]N0 ucx. F~3n܃ xQ,``*!NeF2tFm2~#Maڊоi>i8w/MCmLMƐ vfvlM {kF%-+N3oHAgD$`[ºmLĥ"M-)wخ}yz`o8r;*m IL%%fa#_ؖrA`L'&0e:d=z`bO!' Y= m6L`{$ ^`289`pq3 Ґ-puUWU1_Jqx-px4ېHB xjEnք mہ;C}}#pv!U;ٯ'~REo|K|ۭ'aP8,59|p^B@2 dXes,kHCB/\ [={m֊A ?o \7ۊp48 a4-~C@۝/Q-ݭ7s(o:.^mJ] {[@e~D1o|B6Qs@-H<s%;% R7g R|KR~nt >Ώ=0$EW Wk8|칋} mYSO*%9b!x \|oŴTn7T_OP<)Kթl)=Ƀ?˚߂w=Ģ㶲(?ʒOQk"!p8fT","p2,k^m۸6l׾tQݭe0W+@*N!DPێ߻؃D:zBe I/|uH08g9Ue/RN:,q7ap )]X D8tφ f10@+dh́?"pSW[`Ky0l! (> _/% x` 1hՄDfAWNjB k׽`ڧ?] pp ;h oܯ探 |k;,%rgOm&E3$AXSoCU`v~K|G@ ؅msAGM^ۊgxp%lAh+, ş]YhC7|/WYf'ŽCd%F6|IPv*:s֡-ۛ]KU>q1Ac1oUzJ3(*CoBYU7ivTSϣ\] ]M=] /$iĴht LQ>Or׸_۹8cٌZfh,SHP]kӕ!lX l(MoИ$h4eN_k, {ՏM7࠯.z\noֶa2D_0z 4wEMw[7n||\l9."+ٓ"y^ٙM=WS:ԕCv_[N %`4ˉ:07""p4c@`ۥe9XRKfWGVUGKoA`$fv 9Lpp.j-e]5́|b7cӑ y x<*,n@p563͎`0#l8><5D6m6&uG|Z!J "`1_wv+JNeFE JS/˕j虣hN߳F^W7IOyA=CmjoLth2 }7+>TZnmQX9E  x쯴x "my:ba,_:(r'cݗ?Nvw ߲[[/=G7v: 37$b1ߠbNkG “ܕ.= ۃ3ۉN],h*T* EFnp^#pt&fm7,qh&Ӷד )Myt+jRI'NXY:/2V4V ` D9h̔Ww52&s?pWjsp>S^"otW?tE^!3m vd{d$5onS3+?jew BnjS~ GzDߧ[NwA-&8,8w_ڜ8Fo? p !ta/C`/T\0ķǗ("=Hps CkLaX-űDž.vHx]A;L |S(,p(qhuiY`)쯇n$~i^ 7 bw!'#Aux = CMN'̆KiWU1."+^5rEq>_^[۞QGjbqd\iw,iH#m VϋEZ2O',vk5`} #f8kM]S8䷙{%^7>hPA:i;|T(^j.ՃM齚4(`rꔨ;`ixZW]Dtt/X\~x;l]546:c^bE`Xo䰅`ll BB/IJ+W.-nu_/6{ݐt5} 8"ǵe;Eo'\o8/? * \Oa0*X/wc~kR)"+q5|[":Śߵ>w-9jy"/gnVhd kiN20QX1B/M-9l!_gX` p8LcS Adž+/ k1()ϢBދ K0tτJU  @~'~)JiV da8 Ӌ-2pN`_oˠsXE%+=N߉ Mxr%Hc.g:`,O}'hIp"cyq*+\4 VsfX_f&F;̆g8)m\-N HI"UDBV0VٟsuH-sgMʶވF~db:V޾0cWAt^h ?0Df0Iϵjt>An/*,c7 >O>t{89`>>K6]- OP&քWO39o;._K~WQ~hۑ`&!ZVX2Opt ?u gNp+q[ہ5!H(͑8$3wٞ07#]c+IAo zm 81AYn*oZ?'[;}sy} `#q +O{;`m\xڎBi5ljvub }e!T@83IM]!h"}%0[|k|KXl3Qv"UN }Q_ ;_$\J$'rW:-:FۙyUa)B.tX A*a1Fd" (2"hl.1h\G1jB4.QC1јG{c}ogs=g[RN & (5Gw?gUJqX{ZOa~V ူ䕉*H #EiL]V76&xyL>LE<CZDMLD^ ?ӄ2#TLVyTʔoWĀ!lO"ʮ:C\Oq[h^ܳ_WX]Qm~hNA1I}j:SG|dGp¶ ]PZU`WEgcrU L%y^ @_/MZJX!0w*BizhdlEW,*-×!GNKH"ٖ >E=W6¬-뿚3= HF n~O#Gl[xk_sC^4ICqMJ 1eI6ZZ+x{(`jFe ?*pm8v!iRu;e]{כt4켐aai؀TWo`4@ڍpD2 |V+~ nE"vp+. lL{B'0E'9pSjzr"9Rh l"$]V_ Rr &P+çDc|H w6P]=820wwM3f;KU'"NwUUnuTa ۍ$$;눜Roԙ[`~c״TWaui֙37#pWO0Iб 1Go4 p_ɬEq~'O1/~f` Ŧqf%c?/KO(O9ױt$I!/Xx߾WI>VovMgXӞGӊ04h[-9aրyZ/exGXglF&xeB^uTƋ\ ojԫ6[ywDYESP [T}(ߕgT3UC.`E:UX%U V #D,+E` h sTݰvwIY<۟* !} {ޫX؀P"x%._$/+NcƉ.QMl_ B?8M&xj-4{r: P ꕠYG} 338Qx마CkT;zk u29pֱݥ_1,ag)$y}c{ÍTU=O^b߈4}٤6k;^-N?q- Z Ҡ Kt`rUk8Twa "pBm6?PbY`\ֽͣXp:pJ'xp~ysYaQ !+TwcH4*a`QғNAC` qP v*жxc*սܗ}sY](HŠP' X H+'/^&O '# *V&G6se !ځ ]n | rRbuAѼ)2Xϗ})]-ۺrx[xP̯N.u'YdS^fuy^ \Bot;}KFI3*C3AS#Bd`vH`ejnd uNKo,)w3"\1kPrr[]B[Xj": /CaCS8/yE~իضcipOv$9w`H yjV,nK;`G~h0QBptGJ7_13?LۃS`nigK~Æ,Xջ==oy_[cubfoܱC=}Q@?E闶mn۪>=l<;w|p4p o= K{f9S~8S@&X 'MZV_W؊ra[x`N^Ef p8* <1,k oq}BЫanM\Ye9OkYN :&'Gg`(-5Ow` B]!h\,~c-r0Xu B7_dr˘h6BMf<8a}$53eyϳ,G||bO$@2d1S5`+.G_@|?Lw^85JYrr:7^]n&"@%sUuҶ6o2U`[E:>jyZR·.L-»ь+ƘfAp`)@,Zè2XvrI/Z4yS_MkSyt 4(\A!J/B0e 肔3VRRئނq?:*C'`)p} N(47ZyrnVt;kݳuxE4'|-VCI2N..pS'O߉uWaբ<" ~]jG~C5qt-H?3^? ң"/f/B(mJG$h p%Wd.. k]/GW} ұ j`怷m9:p n/_QV_o0|~AXH[=N9Ȧ4e`gxO-pHorЖ(]\0 C v;( )p0( :Rp$Mw9Gfe%woS<|\Voe  2s:saR:ిNf_c%U  ̙w}p3[b`,;>,뵞6nHf!`V?Ǯ표4{0:l^ͽE\ M%ˏ:$Mm /j3 r2{V倣ç bn^L'3 ߾ f+c,#,KI+'N7aT2=Qr<-k]23֬qMŊbt + 0ۑXvKb.Cmy[<  Dz 9r >$!&z &X'tspYdqSu [V_0:ȡe]j׫ߞVXׂh ߤw,ŧzz%䥓g5@/omm\އ*ϟVޞg8t.Arղ3\"X^Xw_N2ʹ[@lNl6Ml6_ evX08 < ]1Q6[U,:p %a2Ŭa-iSAW|؋n؋aVG*e^ȷ:]1RX`ぅ_kB`J L?fOZo$ 0Kq4|aS,,0! փ.[7QHV7AѰ`l<%q͐3o>?K*S&q&S:NDN$+_LsZ7pu%~)^Ah ݔq&),Ve'_0dG|dp Axxe %-^r AɰR|_%3&/wq5ԿH>x !dY~8m5,i⽅+Em#9q\կ]U{d(ۋAmN9ثuU VDa,3ApDaIБeJ[pEHT WQ:I`}HvxzʛXqEϡU)6m{ꊗr>!}C8{{e=JB`O_r煤#= GN:0%</K_~׈š$#+p&Bp3JspWXʭH`Tآ,,϶dǫj;0"\b5*9 "Љ_.o&C9~o!Nldv `o2n60ׁ(Yޙp~~L kh='86Sq4"5^wm};m:z,.EfwhkO޻oG79@o;rl#j=h?I:x\AO]L%LO~e{Qh!hIW {f+C#㯄viXu/lWi:`zv03  Wz{xQݨ$$p!h&Y2 j4`520w>F>_Q&_ GI{sxG~x{x)Y]'o9[+=lM`npEiJ9^:~C,G6.Zi~x]:Vr',`3/JⲵYHs:ߓ"pF[LoWA~2mG8!xXU?>: R?UJUKf`Ӗ{r jūpF_TIVֶ6u:i#ez8ӟqTZ)7R:AOVo6e%V wr]+ {)܈1%L(0x"A5IA .eBsJ׌k>Ʈs) ې r A!v;~bcMڿ0Ry<ӳ-{k'Sڶ!E ZYKÍ} Ͼً=׬偵Dž/eB~hE;%C4srd@& -0UXϵ~iƯQ!X.F w 6b^rf5ȑKUzЖz_H%kt+3 v\78-l؆tێ1uF C_x;lLv |v-7'~y)}Z|6BB`*) GZ,ʛ@lRL8{a ?UAhW>.wfDց0j`0 W22#_9U7ds[a'9صmy5 W}9̳'=;/doqxaCC\,[~ux*V~_=W>G]T;`ȬhZ=1#00tE4 'MQpsӠc 7owW^g?кO_}4OmÝsz>q_ipxƫA*?~t}{_&lxf5kό}ێ`}P jQq } p%FNᩇcXGzar*XnƠK);Xmv?(4$?SA'Ne43 ,) 𱖚Y:? AZ;g' 'Hm&ց9Q2wwGӢ&0ZfՈ;TD`{ ̥p_@ݠqݹ@kmwCvr4la7u8! w"ͺѲͺd]lm!]&_оjQMfI*6BeV_.z9%0uд&0ŠIX `9`|:nQч:wNД|oqc!X!/~w2+ } o.^:X/y/>ul|+J/'wwԗxnq܉Rac-^]Ibr#J.?A)+z6Gcն(#j:A [.اeРeٲF GF/w=2X(p b@_!\1yЖÒ?/|^8/|Z[Aooǃ-R8`յq:1/S!7YU >H5r`XچTu|TM,b| c3*3'+3[Z}㲒k'&`7^>`6!͕EmXn)My ;Kșo- %_M^-p?kؕN;;gva GJ._Y+)0eF6/n\(z!>rb* ,)Y~!0*vZx rE逵 {x]: VkW"j\%*_jYA/e(aQh(lZe%8phaN&29Keo4kIۜXblʺY2~5{c5n*Mr$a=|#kdRUy*KSc;R!0`B 45n?J_3=gUCDZ 4Ѷ}+-!9+_:פtF8[d\/uuh)CTx&N L煬9!ۤ'u*lDJ\$}o|}hu8.Fe'p,Mv5'w‱-N z_ '0 \*{s_A'[8`篇 X!i4~UE 4+/O{3;S&ޗ!î60&svZgMԦOOUEz', $PA`N+Ak€<ZL>[pk y+yft_ΪF6n_`"ХA0޷L ' s@qCV_f4xK­s/[A'IXT4=0?ZKj _m'ceWzEn>J#e( )N`o ݖЃ:A:7qSןcp[_GMظI! ~h2ݫ)J NeaGڵJK~TMa'(Lǽka=1m+T p5Ġ`xo[MZrthGa| s;p^"0:]+##i _ 5e VSfHNբ~{97:1|u 8_u肿_@ T7n==`td]F$$,F'G=`k l?flpey^ nnfF`BSW^p#  m2sEyʷ3m'hA&AeU /Q" Q͠/ p WdFP`\/c$fin#̊W*__n~A7N{ hCnFEdm}|zAӫkݢYz:qQ;7`;2DWbth5j÷ԱwhݿG:s^J7Gw.G|pI0fnw  # R3 uEdGAyh3FOBā6|lWr< N i XUa 7'\ 0lQGTOfۭkaEvH{P G z +{ ZoG"=pz p [&tqG!謼Nrm ,[U-c~1`FB> Ćd OkfM ][/+]AYp:%ŅlIA9,0*nDc7^8x>i X̜(4>X_zQoRaWg7D̆#+WG;5Gt~sYQWi7/GΣիw^s4&sum_B~7֒ Y%9HkAou[ik-?NYh]8`|*5^rPUǺzW`/`ou_o0xoEJIXŰ nHJဝ!h ciR*QSUl^S]ەM2@x<8ZFیU1qplz*d׬ 1[6"6zo,&C\yO6*@sܤ? 9с`G #|{'^J"%c q*Z{Z}\ Wȑ{i]a_V8헁@ꯩm:i~ h\{~B>:|Q"`oo3ޡWӧWHloW/WEtݽTy_4hCmH.WJ/q ".8KXh4mRr0O*tۑDB0ahcXFll `#tx0Nt(3in1#I\ah4>k7}#hKVi~!wk.:z>jJ1[UmX~u}5Ġ<7BU2Z1*pu l.0bЧGNH^ŕMր__$>5,Ăo39@iE\ ;j;E( GħK-|󑳏}68:1ObŨ_-jsؙrw O 䑣bPrF~$J'`y`Jg }]fep2$&UQ [ߧ? ;>mJ"כ*klxŸqPgDXoU{\Fʀ'yl ܵ5 I_0W&~+^1λ&ye'Qhsْ_9}e4jds:`>r"}NjSJUfX*XZ#;myɼ>7 s7D;ʮ ZDKŸ8瑳j{KOmK=`|*P /)JLQe*3 @ZrX75X;^+A_oa2}*)}6kqgk" $,ѷ!~f@_p&u@QW xiY -5+〯Vd.YВCju`VAwg Zv'ZY+-A70 ߶J#VN\{L "+qrd~Wn[pz76j/3g' ݙY#TnNf/9 >$1- IaoFp[Dh?\K(4mHWXonO}nX >mm 'Wg[^wy^!WIZ_q w=iO{ ?>v~7wNC9 񂏏tQ|ܹG`wnTΝǎݺ`grP8*-ݵ]4WV>h[&'Ўcp1);oԣ cGQb9 A@ό[5c %ka0wS~` +$ 3&vK;RUg.P^E@cyae-d+G>CfJF4Mrd]ˤE*B"0v \@7kna^$˸YdW]=+B].3{8po$Awm-WwR.o4w*Bn7tvD2BL%]e X*FY~Q@ f}U̙n9ugh~ 21ٱ]|gaZǝ9H6,pނY䷈k|g'\+3uaL< 80Gcz2cA6`^7b#{z (qoCh&sL~AbTr%υ{怓\+7?KzI׀qj@KwtI@dN-X|rE(zDF{z44/ZUh'WIZ݉>Ț[[E/jqCށ\#Q(g@sf(/].Ą!a_ f7`)-/4 h H< 6=>Yl9X_ ``8@mQ"[*s@^h7t -̭%;݈!4u5\j~k ~ LͦF 6Sr bkɼr.fɧ%󞱇npy A9Y1W$@.I`ox _#ݹ&s ۉA.W8Rc/ Q7[E,0~r"]m#\7aDn[m -u*4fwusn~p}haeJLM6Ǚ{|uo8U+bvdD?n L _k'^']_'; tFb~î:q[IfۗQ3^X /wg_;C+wȆ 'LI^@NT+惱81fDk@Rl&U//e)L&%?eomI`0^ '̸շkVYf͘5fuR3y0K.9:y$d0df{Oyʰ ~Y~e愞QC# >NЦUxpp pa4hOÔ'?~f fu"Ϸ2hU=i7bH4]>Xf3]pI+k؎tjXBkNX`b^siG 'pފYOnyk~8GH_lدae?+LU+&5 |7U)RdToWjzkO9l+A9ꯀ|<_0댡y[>_S3H) ΋ -w>I;'`37#Ttu`~hݾ_߫^}9~oa2f*z (  Mhyek_"9sbJ^p,O}M79QF#s! ҔXU*VWx q\΍N[rX,)A'~V0!* n27. r o7c7kʫ1gիw.sМ;K] {: E#oQ#[ns/}Ԉk72ב .8%)_$8(TLȁX\o- t|A@uXvF34+oiR&a5,0GƠ} 9|!JJS,piН8kB* AQmdN^b0  yIB|f0 )@5p_#o{nM&gs[)Q[?z.ЗQ!j `JA ܭaNֿ#4A7J|տX I, (kuU !>I4ڐsD;lU.Ο֜$ M77̎9]`_L٣К :mybP3>sm!+!2"$zIlIy\cn< SF__"0 T,~C4d{va]b1F1+ƌѹw+Vػ^-rf+G_rJFLR lG \E#X~Rl3v 0b_Ѝ`W4%j.*Fmf'Nc߰T~EA[-w 8/OYX}RRïϥ/+C!jqqX`Q<,0x#X䟯"(}҂F鼟6v!L{Wsrߤ[ۈ 2`1g:`S|Jy^9E\Rx_K2_U:Jvf[ᑫ_{?YZ'RnUEᨅaO`rN/=raU9o[8it0 +[z`?-sx g8Avap᯲TZSކF>6V%GhL{6RVWDz-NAHld }!>Rq`&B_W1\=}`0! ј9rHokG>r L |<Pz^/ޮVc׾V,>ڣN#3\,5ϔt$S8X* ÙK". 8 0񼺵 D[ g(Q` yйXcӇp3B`IVE9o}?2%Hyӯ92/#m 'g%bm'Yi& $ؓ 8Q_S"ր*7&=7NrFV0e(G`}F %C`rr6䬎tlrbNtfԭ?e*/gzXqTiRV8?~ ~Wgv?OAm0-)1].'iR7(|]x pׯE Lx7pmu,U6-AZX;\Tf6f 5GV`Rة C@ၑA{1h<蠯snxa} >M ) s~(ݒRXQCƛ|n)}r]1C^aַk9 ^WR8Hv+TFr}@)' 6SXYcNPx !z^'/]z/;dMHKxLrg-*qY {~*ܡu}L\lx, P'XN N_ؼ] [+vq;z%u|?fB.G|qwխYk3naoߒGSIh3@㗂620 \2IM C|ۯu_<M>$c96o@'}$3X;{oci_= QCiS;{?v'+!S`*jr {b..|2`\Ҟ6ϸK/U+{$ ٓ(>,|k/@-A$4nmIE\_ 6< E#䷼aHLo77 ՐB1"u/i<M oU` K]OqhIXnC +\-Snht.˾3*d؍dL7ݺB3 Wf6z7+'qsV%l1Wl3L |NDECVxUݤc"=@5q!Ņk3m!o*=,9M|{Z  t|׵?7teB_G }jVψ/!h\B~1 Œ6RC q~3TX>v` H|Ulǟ `L/r\Z2^."Z{{ߵv<0_b)Pӭ:gƉx*[=12a5f2Jwڹ͞JW*\bv~çe'\@a.p&%M Rn<*)X`BUՁD|9`Lz.Mr:1t=%p>ܐ :Kf!J.t,8. l4,.uVz 8 1`5w!}DmY2 :aAdZX/0o'^w8`Bp8`d8B~SWòe160rW:]ކp+Mu7jNjH6m:`7%Ӗ̞h72QT*a&5/y嬶K*@禤 Ktv\Nnޠ[ @@9Q@0 k&x>)X~#\D-j<,Ui0{?u oƠǣaa~4_ .]U|3V n뾇%&f(Ng  u^ kTCYB`<:×i| 3#,v@+\~pwGsU:`2pncȄ|~;o)Mٔm GnƜ S>wE႙~HI`RQC3k d]_$g)QA!(˛0y`.kxC(:Ԗٮ ?I*\͏eʅcYO?c?*߽jFB_/ ƾk@ )xn y~1 -N9c'6&߀)R[csbWvjpxY3w%53Ca3,ܶ`tL-=.fj?Wba ]s 0f(ʼg:.c>qߩG&+N@?Aߡ>Gԩ C{4a(l{bX 6ր^4H^!Sn.'S;%z~G:,0wX`UmNy+ȂveI?3$N Xs;A_&# Eo,yM%|5r,mHny^R&۠j3 \BmC5>5`/1P/ׂbLa=?`8S|(uPf`' PW~u@ o"u_07|7|AK~ј͛"=iUj3w[JW#\i:'qM:2fC%“%Pumt+r<|[*x-3'%~K9px3,V3oAN/ yry[̣2.Qecphq( k%n ~`nU$ Wz_~F/{dB=2(F؇43 !pZW7 pM`,_54΄U`Zh->Z2[UN ԈM,NoK !lw#W9_&s][; V8`_RԈ|&u,+awDyoR;`g_FM|DgK̒]4~fX*Y1F)`*~3NZ[]t`lHKo6J 32+Mur7<{1ӫ &8T'Y弉>$˃N uݟ84oRljC[MI#6~<߀ӗS[ `+V :7V`rpY!amre~5tj U_߮s>7.[ VsC1.l?p3?o8`5 ;}uP Sߩ36/8_¥K'~9(ELc0>(bZDVhU*]@+2 Ja-  U@LEkXkjCjƥAMhL4;98q}.3Tf~{9Tyw i܏>gob]7; 0$-1ېE8ff_18Ug%X7 6$ڒ` LǺ7zK5r#*r^SROsh_YS C`.,`0ѣt!2%g6Q,1 pA׬l'rx=8` N.0 \Y49SV_`j*0";01">j7s}w[_qϾrˈUA9BGSO׸OHC>[SOE.<] Xەqint3_^;;},ZtbŊC^ѩJMg Z~^\+^k= z]=gJmm_%m  f/*Ep~HV#"r]q:4t.86_Rn0wU/w;=&.2gRI$tj W/`OJnm.*gBU~=Oblt6S>5/%"Q.SYo(28& ;[p@x`XXtf[/0p v,PM j `pnŋQRQM"p }5D `BFRswBE]lFZQhj`qR- #XD :+"0T*40npnCj` $Y5Bm'~B%sSW}%?s)A 1N[[ {Ԅ`-5B^T^p6~׳z! O=*["#xmD lpeQ8`[Բ8^mv)Ax1uJC`"ЋS|R nׁ[b`#x*6 s /ɫ_?4'!y9l/e5@k eV:DEj YkMH Kx5[ǟg \3xH){vő3h*wVn2hTIͮcE6Wkcӯ;JCTՐۄ`G,s0 &ky `i/+8ttזПn.Ѕ{5*']Gn!_ba> 2|z}ݹg/!h; /V ^4KE9` QL/IXm R'^櫶]U'aT~Ol\ E;}ٔKgBhhCh,"ιAdNC? X݁_g ̏p p XK)67寋a_=m}^q9BTc|9tJN0̼576bEKI7畘 R{l|a ~}ٛw˱M!qTĊV64U9F( 53_ ]zWG<߸_~b%燿ūЭľ\ esV!៙m 8#L:kwk E`,8VQ6Gs+09 \xa8րV y?֯=W9^2~zmFU_`ɛsCF+[9 o#[7v 5V- uyX֘@]Aak6luj QEizڑu{ pxBW@,TM򆳡;Rp 3o7Dknyv}DE}V$["A%`SPtTq3C%9^&en8^F/|\ Hu A`j'Jxw8#gI[0h޷|d1*ĭ<"00T:@C#+kNF1*]pۀi_૷:{~u${mFp+77>R/yC `\Nl_,வkת?3/T5mo%'^A#Z/(Kt_ف?J_՚#qQE3%'%k$W5ɳ( \ˊp>=ȶ}q%H 5 vGg",&F p8]_iAsiÓ{e?@:p LLpx~nCpIX`AZ .vb~ e۞3O1'2n 8A1ڎDs`{apTb2pԤDɜ`ՄY }݄8A|Z@٫/VRxZ`pÃ}ކ[Z#w߽yr5+okk?ħ&r8,p O|(|l3oM e+*X<*Ka=K̅ȫEts78`|Yr^N :u GyN >oma9Pުd CX83 !9X11lޒ1> e[ o<ߖ j Bf$M2@n[cQv:"cl7~1YZn]*. D"#щ2eHVv'RtCJwn 3E` 0͢L3Cc>-8I0~[#/y}oWՂw35gv_`G5\PJ _-<^wzrnW9"EBilJ Ǟ0̋8Ps xtY9sv'N;tV4tf7m^ڊkcjH<K_ce#@pIp g`/`y1Jp 4 hxmGU7~;}>|I1k~CAa 81qzÔÆMټCc͓շ7%'hY,?!z[f_?y.ZUDW@Y^O#C0 v.HҢ4_9KZv6W7h}5wwIDAp~X`^!0ҵ["0I`[0ׯeB9.|$c逧Ie6A3t}ШaYboo޽;lV ^  }ԈDs8cB~ Ѓǟ'PkGvY ڡQ/Ç=+n.ͅ9Ov`%^ּMװ'.^L{l" NYTY>8v{.8H_]5a.W"XnYiXb^U4G`G.tPO>9%K^5 _mHj04Bƍ'n=~CFY 6o70d+ ln:KV' tţSaϾ7e6 &yJX7*|&k PC5:S49Fۀ.9``-ݻO-Wl7[MK(Gu%!_3WtvCSb'lVX.yYlld*5]ٯjSpm<X GZ`vXb^ ~\8vKoS?Pi`=aSnSMf dMp4E aN`e*AOۆd%mxTKT'iKOd 5F|26F\\]X.~ OUUktJ F9f*1 nqc])=uuMf|| }7nwg6|V %εaw7=@` g*-{ T]놡"`iBy[m4e\W\'?,3"qJclQ_ͱnBb4Z6u M}ڴ12xȭm>QǴq:6/_[όxpdQJmvEf \@t7bi) r,~Νwy[F6y(EXaA@njrЙ1gΤ0y֔w/3gX׮][o4}f^rf4A2nܸ}\xxdyv\%_G$"jX W+FS MiR1f_A27o+ΟzVW誘lKhI`3`Ag; Aޢ閄Yh ~!ed4Bcp~\#xMmprfpVR,'A/nE#C:}^ f>qtON8?,0 ѝaL[& /1QS7,p ;_Ly_'͓ }׻s\?dng[ LXө8tY C} &Xhs5G.׳ ')Ru]9NU` sԅ1 CGț 1{;/gaqVa`J /fo>% _}?ֵo}OB`e]R*dv$)ymvE|(^wdZ0[T4pӰsҽuw^}7Q&3q0,ԇ>q+w _w31ȿ {V~ U`E-^gua ed.8AھHB(ʭPABx_. ܜ> ׆?› C$p.)u0.)ݑ]xaTJ >\;EyE8 6W6n*?~[BȂfʠm3sV|t\-8AKԘn`B`v áNo[~CGU#˨ ,^G<e4nj;W,m=qs8]-iXIF8:"K]?V(+kk5" ,U= #sϕ:!ޣߎr&9y< W#Bp!ªjۥi_̃nR92;0(9pkJ [L`J4c-Sjl<<!lGU8.uh-%?2Q7̸:+CQhHh 3x%\o$esxtD[]Ki<ɦ_/UF;w) [ڋl["ޮMeO089$] ߏu'DKF\یt5lȍϺ+( yЮ]L|_7jD-Ǐzߕ UGo{<{ K\ }B(Lb_>4\! e'#'o8ho0$ѝnK2t7#e-F;_g01 Ĝ/_o??uAO¯ ۯ1h_Ł8[lX":pX`0 h'aUgΧ)vB_ ?^u`'p+ ;~&Wk\`Ri׏̩R/#wy3oԺȢW噓m\FK1ؗx^S ,pmUq MX6y@9:~cWF׬᫸Y]î;lި-ҥB_|E#'Q'%s1Cp.6fH=xs2 O͋eڅ4j~v~!\ Lөyܴn;5h(17 y%‚ˣ"GV2عN`;>-}K%?Aڷ^_ b|/Qٔ4AYkXam>u]ÑXeW~uYi@GwV] ^}雵$7cq~󑅏 ş?O%@;圛Iٳ/3h?R-LJZ˗ܯ 5 L \;: ‣!yX_81hܝv&7w%` oHN}쭰)//>$on -!V2^"%g4,62#C_d t%D +x";`Ur~'A38|ܸW5WL56ޤ/3 2 *Qᷢ1SS;(7:B\Gc7Qٛ|vQs^@mrn? D"Ck&X; `>P'm OkDZs7,E#,%nU˿`۔lW\r`,p6rz9>Sڳ?O%~0]`R/3Ϙ1CVwpzaۈK}JI mIFSA-赕aTQr g:Hh[oWL&*}q| 5x/x p/{JSzih ٮ=nD#"E6hHM syI6du0s G$Aa+Չ-_7a4C ,67o~C6Xh!#tpB0/jvE5逓M0"ZE8 B-x`'pb|Qs{tSv`(G8kPӁ еT>2esȃ)/1W 3 N6n 0gShmA?~nGzK;H!s8uEU0$fnǾ-5#mN^e4_>Q@MKr>t܉ '`mI>盒%|'t%X${7eoFFDkP.G V rK $p` YwDQNCtno-c}aI5,7?0 L,@8L\*R2a,lCSj[ :18j7Ab?,FမV-z;b_*iMpaMl>=2[mozG_~L޽wr?(ݳʛ%kҳTGp~J`_G8L]J}r'~}ڨđ&8K_~3 >pX`wg :~,1l.8B  ~<0~ \HUlV}*O7SNv1M?LTY`cda`Š3nEN`3,G:]0#}o&f{{ܯ* ]7 9xoψNz*,^So` d0C1 + G-O#XDZr4PKz{#+;wvn{YKL5K|eɃz=d`0~!ŢmXPAIhd@IX )kAgtmjӿ}]:t3<|j xѪ{1-4Em('  4/5݇S=/$D3Ț!0/I_ïY/~4}=C(Vt/W ?wv}{#j %CFoM@x˞ֿ[Hqҥwܱ-TncB}Q| .'C`R 5AKg~9ˇ>-sre?p BCAP~kS[-\^WΠ0`6 &-|,s#Ь[4eR~ '}u怵>1h+m8 ⚥8FAIns/>YXwA}S8-%o;&Z4_z/ S(tv*JQϩF >s6Nro2I `PөZYFp16=12$vئ h×_7_6kp-.` ' za3W5 +}3{'~_!BpA+tӷ}H 1ǙݐjfA(/h?`7mr>t{He6| )}ˬ / qml ֫_'GB D" +Zc W󻄛5?`4rکS Lc_/ΝtWm ݾaٲeVƂ8Xd?R2͵LVC[M7:z+/쮧w|z ^"^]xVg΄/e(>~hLp\Ndp|7]`" #Jm.Owڊ[bn_J:3n^hAWǶb9C#-}T[t 53xЗ3Oll'v:4ˬ}޼ujWӿ0r䫝>a޷3=0Xp__~<)f` 3?ԡqGdA5;UMt% Kz,B~yhlIWF e>/2zfFBpw_;Oq36 vX K$X}\)w,[){i_i<>v 7R{.-*g!_yO e?nj6nƫկ꟏Y{Ém'z>N+3r Y-33&p0 3%HClAj 5W9<L̃S7&1h8`f1eUjCK5K&5Nڟ ޣ4(.D슔;@,iXa<{~iOj |[4}3x`[ .oq=* G^z: dM2YnޥѭwuSinI> Z}Sw2-n]kQ¹[G]:jWK5ݴ^Y~=mgMx׾ubߛ{5?S_} ʚ\s܉S` ΄hR? !!IFЊIW|u_95r\9`i9g9|<V`34tvd"k`ژDKuT5\;9E%@p"0jf4Jȩ8!HrLi~%;`Ġ4B)l;vۆM˫,8/~Ğ_cyXpc~Wo6t >yh)6 (.g,K7PT,/s5]L)ۅICf/iZX`DpU.--_coK.g\vIrmC'wDՅgB"_@'MC`?3G=mC/U+zܣf{;4[T3toy灲1Ďbu'~k=C8`IxtwVTw_o IXpÆ'[]{[,1rUI@G[(O^QhP!pIÂnfQ,tB^N= kSb{s4D_b;UBX)fXvwENok5v+=A3ҵ ڽ'>˴|N[nJC&-?.y9UnYwݤKc7:7~vnǦfo:[!L^,Юmg_|ג]IlwC?xcJ^fVV. MS/F4+å0喹n֤3'C3|rap"8j?48-Q[`B`L}"p A[Hf1z5 b\ 6+ y9mjѣ8̨kiMk.v./ZX-3G\!axҦ^I;UqWU9}XjvҜA`tҁ6"3]7'}Ž=B/G<#Ӱ4,f7"_njdn0a, u.Wxz _Al`b&o3RGgaY+r}"ʴg70(T|PVmy}p#e.[n>6gG,$-@)!(3P)N{`-)t ,,>DVRe~t@{&ټKn|΍fSYJRd7i_$NhHvgu7Eڶ 2rdaX6c jg6Iö=w- . @9q_ܞUdnj[K>E_{Z5i' uq@M5gaYO)G|L[c=H;pSև0\p) X6teZ%*vK\`!KvbCljF;GWmrp:`m-.v\Y`?׸tp]e%o,.`gp-Ja^f.HMEXĵ@4U*192ɛ w4$`.ktd(*r ĠB|B7e&*Kֳ%EgZ'#ErŠ{={o:~WJ/{0_l x|0BXǏ$@}J`M'o7o\9`(mj 82mz}CJ^T|&Ef&r Uɫd V7BRHIr{`H= ?i?@gfY,bܫcF2h؇GtTl^/xkJ6Rc8܁pǹtrɓW3sתֈN9rr禍lUxRx^A^3h,wԖpom$}!o7l&RE`w}|Bk/(6 G %`i_~5`>|+JNo@ühƀp:0ېV|#K@{/p/c}v!+C=,pTVrHbC{(ʡ {-6*F7i>o#(5^8y3#Ku_0 xm|37qѫN٥ ZZ;s5fb͚GGߓ "гwkxOh{9`W261Ǧ>o{0Pid TV#Es[_ ʂJ*\hY  aE 5=}i{e0[~3ӷG1&,# 4j:/&I`N^0"0[ko4 1.[1t/ (GB_1U۪"`/-N0G.L]\G7naĞ|3̈X^2^ק&d=Q@waܱwhany$QZ*u( ١ZUk :t$VgE{.o:JOys. e~̯ܯ6C5Yήaq9Q\F G:pI!pסC%d`z."J{ }QWE}j;}X>@ht]yOR+duj#|ZQ5V32F6͎:f22(k|6l}z|`7`~ YlHAX?k&d6:0_.7%Z&L4.\Ҭ)˯`.l&8uҠ n)EǠ  `uXhN[ z1I}sU%10~~BߜbTXk k6J02;$uϼӧI<"p Oo~M6j _Y~%EL`uLC;צ<_:c:(̍kAoRDtv%_z= `|N"EQ)pQ"8 lh0HFz;!AxV:`k(B %# nu`ї aQ倍-#oCs`)ˀlt,ibV!h0hoxB-E6"חB(4yX`zN01۴REdj)s- +rJ_ZNzʘO JIsn!NZ`+bCz&A3s{`-urD&<0O6B*~`0`6+G boN `!hL#6 <" o+؈uQVl" !V(eab0U5˻Mǘ = g=J ~|, =E{fl?y[yn7}o\{$߾3;!UG'v-,uk=w0o18سGsz/o{iaoi/߿mxtߗT2W)9ۚ^N)\(FԍZXjܘ URqCBRk;G A#O&u-@K;i:RcLA|u~>>[f\xր^FtKdg2qU"Ö:xػ2f M.w[9}t倡/;~`eH@:>e%֢<4ѯ',Io^mB;>ӏWXAb~QN`JrPAe J:Ȫ=̽_s7 i`0 @ _]g59C->:g/=U !#-:ֵaŲF0¶ zFkUy;˛ge% ,xQxf9YbL%= ,oZ%$ci]p&a_Sc9@m׏P1⯲+X8KTru}[ȋ%䵃}tK 8<V g4ЅUfX PҷL`fqA- cj8Uf:1ykgaE-,1`Pl v%/UGU1,D{ێ|0NXcw\d4d@ $)oW/b xdoMkS2L4&%)nM8 n$ Š_8肺 3.8[<0_gsC- A!{s9mE$;$NV6o?eG%Vz D`BMHY q\p~Qdh6ܸ!96EMQA7nÜLV--{ǑXW mo5Go`M=qY:,(d䍃SȜׂ:gcZrBK:^1T"  MtdpH"(X95!, }Šq _A{>;{IJK,D2*;+Wi! ,ʔa iVU9DQ,\`Ldt  ufA^Bj&*F3 |[ܹ iºE7⯦u06ysBv]_5s9z~嵁2i.4q)6/ځ={FGWw:’eTcI45Vu Mugn^.92L'KZ9 R7зl62 ,_7j5p$c,LFcL]6uU(`4.u L02Bt0=ЛcpDC$H)`5(_YeAs}i`K Z4_a~dAysR e jPNH&` )xdߙ^LJ, _?P,U/C7 qP#7\4ƅ ٽcV=Do/]{LϏ))~vo G\@]6'Q+=m&9yG+AWaߘ`O\5dl0YːN}0B0ːxy bO.'ATB:G-z3NI-fcm#G. 0~}ooLjb%}kGF-0gғGbXÌ pyռ$4e^ï'^M ΃~}7Y s"((!XԅvQ8yezZdb^Dh~6eEcxǝ3-qX1wWLau<'_-| p6Ċ+=!p7o-6 E9*YO.V -b亟p>Y^DyKxiVnP _īܔ9MI0.qːђQ$ A_L-}ƳtL s6Fښ&_V_ Fխt䇿Qbxq6Dr[,~08<Fvo`Jw6v@"B?crfg:4NF`T|ɁL÷j^ǯg<[ xmwQ"-3[%,$%`Lp'ga=q lg)8/ъ9Y_6l5KQԣ=^iGR̲wf[;68͘~-(*iM + -o L _ f C`V}: 508gZ-,0?E"Z A=kN\03t>Hs7A_Ni[mF i Mp!hs3xmղ0f-  "q#UFa/8lYЁ`i`Vq,jϴH!/o-ÛEܦ;/hW~;/۵YKW6ZiƦKԒ4#day+qz]8pou]?{G 4Rhɨ+' V^ 5K>p]QPq<,b"Ap֑妝xjYxorĢ&6D~];_X vCۆ 6ۼ]܅]/3lg2QW==}kw,K.ЀݰC ?}f־dd:FsRD(RV2ġCZ/tb2Ewu V4!Lṇ\%&a'ًԥ;F= C r?7Єrnq?Xݕ '1#ֹC Z%"``l޷UAqhߴYJ$C)KZ~(TC5[&] tr1< Ő\VCf4,,p(\eayGiRAp\t6\0X{V? 4 w?h~.QœQW҅TӭA\:yFx~x` umb2pp`un8SxcNm xQ ۡFpq_%R]=^LlgzKFN@pt?V8ȲmcTc{]}: O*)^c 2r'M =HM18I`|VUH/Ko@B``hVi71B`#.b' ,BnR),FU58,g05=Mƀ (=Z:j) )4 [+Wuh3BෞRX/E#9 B;~%[=̶_/%ϱ=Rj6!Q|6o .ÿ ~z^d}5;~ktOqNrX$ cTnB~7T.GbHe ]1:"1rjcܛ]]׭lP#X-hB4p0XH8vF?c`KíM$ֈKφ_/OHkqjO~ :g!n6fTJF͐<b"zcWF7ү֗W1UR!02OqZM_g~2ŜolƀF]֥8`ֿ/IS+-q 7w| J/UeRb])CC_-5cpV 'pyq Ztv+8`ט0/;3A(U 8ro@ jfqV!0 4ztu1 A;j7,nXfhɠs0z7=N ,ßF=$䴿iX +ᯃWiR_id멷NܶЗ6 qo}"1[*o/U&e_d)M%]YHc f$0#n ;ֵFO*K)%f_)2Cc??sx{.>;.LJ%Hd ]'+`% - 2|L%&~Q}KwXzDYo+L}/xfx&m!\$2rbn2ξ8e-ы_9Q;\J^_rMJ^tQ:2{VAsvspϒNah\p \,_d/*X e),<hKO,r y:{tY@mR|T*CZ*M;>AO9 %p}Y:Gep^3erm2^;"ǜef0w39X7򓋦MJ$Q/$0>sD4ͭ:z9\_L$I\{u X$;SՃY%9yg. c{y-0&& o{e5u^'+0~Gdmowր&/[~CXxP\bRUvdl+:a?]} 2̆H9p*N#ߏ=#|yQۋM3m@,X׾eåotU WW_=G+̂<W 4C*S[g~^A_FcsW#R5%qda=w?1ǿA% _}VO7d~,T.1h>( LӋ a!N?wԄ} O3޲WU-rCDvز5tZq8Zqt+ $9-wKo75B_/MVcۗ`ie4,eF`ObBT\ ֹAMnt$iW!,=M^j;4xh8Pp|*NT!/0tL9}6~9 \\&6OgШ8JY`8ld8i ;~j 8`_+~L۶W7%,w~K\.->*`@Z0`<y?1C]O$)Gg}p*LKEۼ#qZNyI0 :Pw\k׻\7t |ֿgg:WY?q3Low.FS/jv۶M}Iu `w}K,;!p/M"\jOAtFd`r%dG!0!hQ>Po3yWгn?f"Co{ST.^հ}~5z }i VPwDH" {?(dhϛUsj Ň9rS.`js4pِw%>u89 "D ( &k`S.V`߮.p~B+ O  kcH'6VB`nc&٪H+r 2:Jy2W;7 68U~ qJ^R`v9 `KyŐ ޚ1b\¯{W]|淆/g?zиIAװ0ɍ8UΎ@7wq?wlMݖmȽ{E,!!h[:1h6+C/6EҭI 86≚J C`Հ>,Cʃ6"'OF |fwIF܏?]p!S"& ^A'~3XoԼ˲#/'DE>#8` xxg_x`j8h0d,JWgCJϜn@l1b't p2uW9 f*Ag1֯tգ/RPUZ!X/JK2p93}WI[x_ׯy ܸe<6 0=Z`Z*!aУ9F4QT,92eΠs}*~Ke_e7ú.GD-WA&J_U`Yte':p4& Jqj)5tço:-PKGV̀/Pf/A&ע֔x+ L4ۢcVʾ %']0=ΩExRI?'N!ʘ܅\u-J\$pZlo8:G3xB'ZM_TWmjA?m}g[w&@t0 _ֳW'F{1[MY`\8jN`Vz_II|5VA GiN_.` %s.8$žRqbX4g⧋ҔO7ɬot63|dž\:/ͷ!hMۯ%-Agd{~.(^_(brt߰GqxF]Va~(X!A`rlW1f;ɫPI`!`;TYvT/ZIs3Ӷ;Q~?X[&Tckᬹ! {tԽz v0J^c35IV#^Ku+#WŚ0Jʐ>D M´:k[MdutںD; v٧J]$lYؿ NxR.!i6iVt_d6;猿nQZyLC| |*B7a ]Y6nn&ڋB߮M6: )Kwej xfMBn!0Q>OTC>t-?v¹loon0E:czg Z#.0GUr"bln(qj_#[@7"o훵`/ENfɄp8NQ ֵkYya/̺2 9O:b<\A]1ү~u' M U/= 0'zS$h߶yb+:'+ʼn+|_g?:c M |/~EpnD* ~M rxa:" 7e0j@zQ\R$j̞Rxg b~Ks8_$s9\KA{:/Dl\wJH_DestQ×勥k2$X$}΃nIWP7>üvXҭ,~o|Ցʬ#!b:C".C\ŭg BgAF25z(/1N bc74B.0t}~e2 s\\3U,:J |d}@܍|MF**kVd{[gAA_,"$ s c`0#XTS^0|+1_K)v)϶RBz11xpFBMN {>tZ qr_nq_o wf?Np+ /;p1Ѣ_?7~8tTAdtwpBOS:VCߏ/}җcO_mIM=NU^]l\wo5iC;i .ݹAJ4'fnZ^N$cOYfVnS ;e3 8n9؝1 ,1 ~\CS!Qڤߒf{]$>5@xZRVȮ썫Ah_ xç"6ZZ(d퀚ԟD%_ρ'l0fj.Y`-i4,"Q WkdA߬08/~6e8~(wR =Q>:>O ڌ:c_`u6zoqolCɚO GOA~om0UX`oX|5}` Npq_kE 4u_ǯ*^9k%"a_T?䌖(+`ԥsO.9'3KCč+)s?/![:[;XZqen i&yM6_ltg&L IUfe>KO50,, L;.^M¼cV#]+YqzN%._2b(ϭЎ`Yi>/#C*]9E Dj!p\{i$p&=CFO`{ے. |6X%,CsE2bf!aaKSD$k_O5KOsz. <+bd R@XJJ/_K08#+F{mTWpɵ O'"Q:7CfbMj2:TV=k^oV~V0=q+`бJMXeGpW !8oc&bM7,Yķ}˯~QiNu,:q|7`?zyj7{) 뭚}_c0$0rpK9`ဧ`9 F1ʫV!舏{\%*_VΜa?&6s0i}6\0^^l׏ /O鼖h)[VmWNhHc1  3_6:YCDN XG¾&ELr1/#,3 eW:}O K}6 dw1~Cr$ I'^E]Q9ۓg~G Cy%C(|cXs7;wA.&x^fCWt$mr6J@sWG5CجNPE. TLT\y諏݊\n=S vQ&~E_u;䖗/[*"\+g`Zכ1h ӢZ6 A@^/nF4GAŶF09{6fu)E)F3rtVK EwG7HǵGC0v{l fya14<>b~YkT\uUIef#![\>gS\wWWU ۛsnUu VuLW ࣊>oJ2هXX 7/9%MJ7߼wha'}e~{oQ;"W"MYq(:z928ԣ.QprIM  X&B3Ej(qo)aLw^.LfeI~Uf_v@n)|1~_c+H3C,V86۴y}I?:ku~6YWP)v(W{rK?q QIѥa%#!(_"8#t-]J9JȶkAꫮ9 A] n+VA6q8 :y?b=po~32];''2  Qv/hVw\Ղζ95^/cNTLcߣN J)wuUubWbtq;]v^N>\T &r朧y눖ߠ.?A['aH-}*}_clk`6cHxs,,bWԃ_o!=ffJҟ倻h6 hP%1̼25UdU}吴X -.!%' ;OȀ4C%T:-3j~#<z/+w/ݏw&q}o ij3Μ$]Z׉ЙsR-lh8f`@ DG}TxIF` 4*[)ncEsp7x>:>|$f%5Iz%Olc50-N =] (y!}7.[rї63@`)/ Aa#mfy߫&asφE^p?kxhlĀWR!"/p` gn-kGtQ1p"T"넟E`qxʉ :}9㙷72{^sB…@;ǿd"--/Qй%<8SW-ϕm2Lv<-0Cu\`* :0V aQoQ6hƨdNl w3a2 Z0bxx1q[IpB&X௖!:PngJӻi-jyJi \"Й |iZj!qZ.*Պ+^zUׯvۏ5I\bI1)s 7ʹ`p2:'&|E.sМ,qdb?k"0]PSZ^ ")=9ZjDKV n ֊hnU#N/T-pxj"G8̖ e䫓s?2|&ga諗\vރ!K+7hW&h=VڰU@tCpP7;Yiρ` 39~#V~gtï{Jy8`}~Sdisuyӿ)[Ӣ"ʁFu~J-jGlVUq59{tδ/#7ٍt{Ym1Dy p U/{7\=2<0{8`Xݐ(P׆GA\Ld,Z,2 /H]ʀՓZ~l[Q\Iת M%s 5ۍ|/Ћ06qOr[Oֶ~k[}R`~X=sȷCd{wO `Dh,k_WE`Y=;\.;|ch[їб^tW`ny=]2~uHW΀(ZZ8< =W^ ht]ܗ>j"ݚYuG-m-4Μj@pĠ"֣U̯ aϟ'>Wo%h-Ϟ<b`LAjZ="35Ziel"c9}Dg킱 wXmwo7>Zl dp6ӳ1MJaHͭԨ cq 2^˷5|ն,`'|ւoCߚƌ4 ,n\8#_r1. |1 xUd_ Oq;Wr{aJԂv_%K_5}Zϼg :*nŇ 6 xCbawǑC؍0njA_Bpgi0 Ib}Ykؼ-{-aG<>ϽXf'%C7KKRT=KO$SX`:s ~++2-? xoaiwH V5o7]TvFnRШJ竭BKҶkJ}퇰>V:La`_~痹dL>vj* ך+RKsUgMFmx,-!&- 1>((Sѷl5V6ύK25KV/qJ6@_mXg &E>kt㢫dgvq$F^G˧eZ-Q%=s*[N`j ںGsew<rtσ.4c6*3riN_TC4N^N  z{cl2Qwi-m'w:85q[l֍.^Wit/D/[rO2 9¬>Yw/Vz#OOϝ;}ڍ]$#Fuy_ާ?- ډAn+9|b*8ȥtS`[/UIXMkt9VMo64eWDEowvOleĊ]=zgΰ=V96tB*֑앩r, Kз93 E?`-Eb'Ԏi[BݚZ7wJ4u4 Zpun?бӕT~'3`ٔe w?y3ߩ= TM_\j4)ŸУUf$Ӈ `EiT4"r8n"89'sCBkJ\h|tÆ%BY_W#&Od}HejKRsi:'5 |g^W'ga}XL=[?bw_vyɘ-:[{>r{B"vGp dh5}p!p`Įp`CJ vKO̡ 2/F| fpgrh Е |!2;E0[_X fsQm\S`9.urR_|ml/:uUvG bkM{jybfJpaYv /Yf~׭o\\ JO'KG%6'JoжDt]-&EFU.^M-5ʴTu}C_3#(%aXzngHU[nb#m7c1 |ҫq$o++c35m*@pfo?{7la~ gnp:|dǷ5.JIur& 1 '$7C'yz8`KslGL*ox퇯ݵZZrl{s _~}tHSBT9`#"6+Age EԭL0boFˀ̂3gokZ%޸3w<6ˬ U8eD"*j3 SH "H:S`T$vd 8=hQ40&K>sw}}|_; sn[w*(2~=Qfj,pNXd}Д(sO| t00\Q'yTFO86&~i~3ͻP& բNp>lǎ~NҢޒi[`*/࿩{mP/UܧyX#([Wb8qu)Ԣ ֔ uӗ ;qЀY̚}ՓZhũSJm^x zU_eja4'c=-(~[`0=O׺[kjX'0&s;] JPCPF$:wRwBfvVf͂Dǂ y}l]SCGoaٳ}ߘfWgRqt4Bի_ld[`Gد`11{,ׄ\DfWBTEQ'8Jbɂ9uj w]\`3:{,X<)=ׅfɯޠo42VoY/{n{?XHfFEq'?Q 0Xa $b@@ۏ^5:v@ꁿNZ[ = `)shKw+Mmh8&^,k- cUk$BY=vv!/O-t]!a`7Ҍny- r"67V$q9K F;{H'TjY8{~,'Wu70ZRq<,BжL]k?Upq{0 = ܜpCu~3B  ~|&{t%Mڤ 79=bXME8gDnaWyq1𺷭"\ώ;篺1,qef' q'tOJL^9y@E*M` s8`8{m?H_o^z'(~E¥V/ݯM`k-~[8CP!r`/ A_T ;Dj⯺OOi ]_a=a@vv IDAT5 XzsJM}T,n()oz~_ sQUn %Ro,UHhE9AhF//-Kg wZ>m*¥믟򼺔4g(` :b068sSiH-xUX|=;G-X[8{ƾc;h8Gq[->%^;!0-m" ~Go`xp%Յ` ;9o!a=FQX p]u"^Ioz,gf]{tgl*pR*όPakz]4;~>2_'VEp ˁ3W8Mua B\r4] Ղ?)~9Z!,k X^ ;^8jB::ℚNC%AOߜ7oP8+r+ U9XurpsEq^Y@㕸bҏ=O 2"3Xg.B5^\Z 8Lp0KBy[otڋEejof/0~sXǿ-PSWo7\WK9 Cv%|9Gj8__E'zI}J .DGJ5iR(l CgߪS/$C6׫- Zn_)#=s-~.0}+2#q!m)!۰{p7qmt! cP\;C/NXQh|R9{n$֭N8dF ȑ٫I7k-zPoWM#ұP\.yۄc.l5V6 _C*f^~S2|8 g>$S'P71S,NmoZ`/dԹ N7J>mJ:)#`sʒxm;Ā:Vrhg23@ՠD WV.~]1 UI?P ( TKc|Ƙ\oTF4t2%Z-8g=ֳ2){?|-/w8K7 Ē{A.9sdv;~JBQrEibJ4ߢبiO 9<{R}+{Տ1]7X7%S5'!CEw=?d7UH' 9`k'+ӰA093:MlX7+ow&% _DVajm|5  hem}F~U1' 69dЗQ}-8{ * Z!uSBϒ)l u.!/4^HCn6x[G*-a}  Un\F5`)E_C'E`_H>5@ 'P\7-̘qN^'+|/ {S;|AU PQ̕咗%I`̟';!n݆r 5ߖWု߬H_9hK?w]s!ѷ3[;` ? ^0?t\/xiuGдqW"p`_s˛X5Drˣ JglOv*wn7rJO4㷗&m e]ѮS}ʼVb͹PUu!g{;cѻ:(sj0+0wSXW;R4&,* xwV{P0X sS\#g%Npa&_mN#|+F8[g|qF]DEIzy9V ,ʐtL뷍i`LO/0׳چf_-}BfW00V=ԩ_ o4o8`mXVB;woX@ӿ9`x~c &g ~R50:J/,.6Q0fV{Ν"ZyaW͇4b49qK(Y> 77 RV]mw` \Efnoqް#rp=l,3B)g}ܗ6҆u3uQuS;f˂.:}.eC_ߍ0~5LK(0 $A;uVxN퀁Sx4\Y`5@[9/8c@V5Lj_6kO+jbSK>+W3_kr@I` "͂[STEFDDZz9FsEZNaޟtm`ۀ'2%+k i+Q}cc˞7o΋Ƕ0l_[_T MYqeΥ$;0tB^ PMO߉й~ >'~W""Yr$m B0-X=;+ 7_9@g`>K)OB]%k{D' NvYz\1өh=ї62&|h,.q!Z) rzR+3Q!p824/M=ܹj_!mVo9.oh>˟HF5>hWƻܳ&foW&/eVYgd9_ @_RӞl _Gз i|=^~$" IB|s:`d 0U.D;ѕUk8`'u{tZ=3W!ō*lB6l5Ji:x +Uh<-p[/W b/] x%%y_hE`9]W~o*5:“BS=f+41͝&Aʩvi0c!Z{% _4'MSE}*YThN`ˑ|h*#l &l5fw5:([ôR6_~w~vהUVNe ~ pDq@fUv;7NеX؍/g]eU"8I=h cI¯'`ϿbO4/̥ph uT6U$mWmlcxeWPD[ςR *E;|am Zkd0o\~&?LZ3\s^&U5K:,]b_}VTs¯$_nX:F`CpUd-dplA })p`er˧'iևYnSF xak_iO05uT2R/1h;3)7}Ş >/ Mqcst#ٟyR,#viX`P&gu^ydy^!c[!׌>TA@'=-5OsE` 0]!NT=31l^ X l%~TX1he6G0. ;_o!x<oonN<u ٛvMI +Gu[O芶!?8kaMJ`<& }KtЗbH:_ФpJ=owAdKA^hjgn:LX",T.r~VcrS5|p:]F op338=7IϘ .o-[~Oɘ= ~*["**+p`3+~ǜf/`Xu.2Y{~%3y O4b|}m9`Dn 31> k!qvqUGCPSZknF]@gTlSu-G!xzZ6KNYHբs[2~p.7 by4uGrσVD0r*7zLtɻP3M|ԑǎ@̃vcQRWXA{^˞޿ 4޿qt5@\`Jd5,ve1|& ]hxT>_ˆ~ko_Qw=cHǝr8' ğS /xטvJ=W"pqrG%sr0~^]{g!<ۢ+2=r3k@A`;dhR* =MAOa!([a#Q{47K{z<5^7hQz{YU"=99yOBrèDy8A`l!D گ`/&)|McR=1Ղ}_ _x*W# K_aN_h(5ːT8;j[ `X Q{ދ`Gp:5}ry}aMb|p^?E'hڤa Xނ}/g  cV;ޤ/-m7KAA\05 bsBujş8Vˀ0J_LTU{I0k׎r?L/ E`J 3n[|D-/<׿y%xX8 5&`Ұ`-@4߆f>(;}C}(R?fHUV?GPүl|NFP=mȀ{@~1'd©2shA+C; kJ'#/2z4&8V"eKIzN!Љze7ŵ=kv7&Iֱgl@M9rdǑ;vS#5I|.Ų<6|$@Ϻeϛo7u-CPg qg 7ej$ޘg;47h|ѷe3j&t]C-B7*c4^_uPWE8}5vNaso4>67I{A`Ր^`K`|! L`I`0MwE\0i1hϢf,߄3|"#eo_(\ߡhgXyW̝Pޛ9SmCXwA9`Xkگ `V Q1#˛8Nׁ}~"JjSp߸nFyw0_͜wE`4!X(N- lMB|*QVT0Bx]<V;0.u0![f5г$aWz_">CAL׈}>T_Ox.5"n+Ԋw8~ߌ&;CZn,D s,Gyn\aWPagR:j~9ٟR1o;?ugv%IW(RA=b$/O!70aaHP_^ge3C+偯ult-=1̑·~Hz^JY C߁/:8qJFXg=;ૡl&L逃6+VdKL&y"VN._+ 0~),qLA$`]_?Fψs5\%qtbЬؚEQ_KUlp n1$pĽ+c,@úZ5cb8fW.}*&XHXQ&}!~8'~u_Zfwf8k-0VD0i`w.s 4,`)"BƎt/=2܃r9KG H썎AuK"k[pʦ)GE)Y:Mf3ǖ1 ^زCB5+߻nʺ^o6WWn`0bتb,/\,Ӵ\Nj]o^UGծ=J5ؾFںBϙ9o>Wn1ȠJ@IX{Jߡ.Q&\]ԉu֕/s8wdz7J_=5d2lDM.Inc7jW[j4A` 8 0~;qj u^X /T @3l3@/a8<7 8&_P=UwZZsq |ȷf i0\'dߊʖ/HV Nv&g(Wm<4**.yU._WxՂ UsdRͶh;#v`G9a g):2"$o'; 9թ&n!Givl׷)+fS0f1RMl P0A_.IX?*`*bYC]k= z-1"Y:XjNet _}zf;oQX 0226m \2_f{걱HD`߬Xt[1e(`pW 5_%x" ]#Iv]逸Ut2&ˏvTl,qRu`a}ڲuEhkgi1OYͽ*Nܙ4( C3h¹/9݆_v~;|= &ضDUuX` _g ~S qWn7l68dI&]otg4a^u%s,^s Z7ԷN'|dnVV>⫤kԯy5 6W%Vv_;1wV?Ϡ=IVYU]{ߗQ(|`sĥ@>ݺ\!6 ;q KӾ%jv 78Rc/23-[tF@Q{9)zu&Xy1bめS WOH)XXG(ル+lt0()`MjB}@pցY0 CPo>FUu7*v igV$`E)Jz+^rCG^g?vOC_ķG"8`G1 ,s[%#)NU @- ؖ4 Nqo+xk zifѬpu؆apP]@vy2dɼYnfS[ eW =ުW4 :' oڻ@ty5u i,;h Do_?&O!P`bPߣNXMܜo7!`Zk=\BB`F˞->]wM uɟA`rWks|1ҟU҂^غUXਲ=) ES6&9`G8rʆlkm}Wi`-ԕ`nX6I:Ԕ=5C{˅il02Q8 g5W^+*8.k"08:}KVEHfp`B$a;M484<^JX XYQ%A}Mu4/ /pՆ/7c /"ۊb@o7goL~F8~Xf{ih7uɓODpQ NZcbg-aJ7OR-Z4{6)*bɣ 3asuw%58s{5o޷~>< Q:(ƻ9/h ' m9+a*g0ƌ\Wу͒S8BG!ٜ0p/Lp$|fX{)nbfE\qB5g5kABк`,%ɏh 3MdauuUw}+9ʨdA5"щ8_go\ku#~VyP#i,oD*dnX|7K`NYm[ƠCTj@ 0V7P*uHqIG'Gԡ/ ~w|2QND`#Ӡ>(<_M5 e/E8 0{!Ez pl;$n2iW-JءWvs7kA3^ >Ƙ8޽I`}~ |Lwrw9j2Go&qkzcE59M,Y`أdk$47{` 0o>>Nw%VpwD^ ]]h(M0+pX &`{vwO7^v-.a"1jJ؜FN w2r8q ϗm2q%H+%(i Wn9|hKdU'>" Ho1>| xaZ۠2HI`&5mX%8 [fs*mlje''r\ ZsNsXڷffYx~¡u)щG0~OX+X kS= ]jZ}_. }%A#&eLhC 1rn:v/Ķ ܦ.X(>C-}&|"b&vD }As+5)<6w$<`pdbQX722C_p\A\$o%3aie#/NbsʃȎ^.W⹱և@01Ih'`BXxɍK Mp/W"aV8wxj}nk0;Bds]< kPMbԓpa&V8woz`Iz)=r_S18$=lKۺSJ^ Su~ g*m8C`nEYb57瀫ZJc.!RZMR\M-^2W^߱C6嫦9`_g/ %zϞ\]tZ7&%-;Tr“>j ?_'$zq|Uֲ'Ud.xy n1C=!A\Ƽu/N0:l5)7(nZqK ĽD zLL9+ 5` w]xr0c?:)M5)k=pg.V.c0]$bW%305q٦E@ǫ^:[`?ePͨsXd=`Jqµ^\8yUPKh 1^{JH^GAAWU;|f)1æ+*:m";u@_DBzm؁z!5xiA z4׺6愴x?.@X[/΂_ԑ9J!_0-$t¯}MG!pe8RXbS`Z4pbg:2"j1[CLz鍾/.7T&=b=0`;urƴ/mMBo0f/-:Owd:0 [W>\$NqMMAWk1,)qݛ:kfϜ?*B` r-{6^r*=ԵIgfsMlY#K_@x vsk a/u`̮7ͣ0]T_dlh$.cTRv~_`Z~)ZS!oez`7V!ItKJZh֢ҦPM1t%E߭`oPsb0[j*+`&A^2-lwyq<Ò9Q닅:kx,LV s8]ms]Դ|#[ȌegE܋'AAxd$0MX}'r=%GB *84V҅TN3aR/g\I}yw =qBu}k/22k2eP8񊾂5G0gx }> buB1BՉ-o&.+I^4o)*hm,?%G5Q4l&tgWsn,/@qIvv:Uh԰R,=Z;AJZ8` p }[apo0 n,c"\`4f| [@HNIߗ 3"ޜLiQމN D9;\xôIeK~ nOtc":f@xU 'ME4䯏i {Ɂ! }ٟGWko^`Q,ԜiΖUR?:czˉaagz} ^t#0{X3CCњq͸< \4,6:1x_ }]bŒTr>ٖVDO󘷪,659KjBNsY/!UK+ xO >8VJ; v!0U4hppo3\0f^=#͑R ^mp^}Mp>ғ:E]#;NYݲl,EJ`R O5=|*!-.$M0 ea#ٲ WeҰ(nreaoQyS`^ qK%IbAutpy Fk`iyq8`ρ3ҧ nG>ݹ`R+u:Z8\kۛ2i)|. '/j-W-8 p®HT f(tue[w˿ Ӟ50tɿH q7m݋2G7vMQ'yqNŎ,בj6!s8z=TKw" jZi֧.~=瓾5ȥ MHMz?_$e?6~~ eW:b0B_5AW EZ]9NL:v#|Ucr^}IOG( o3:;Y Ravcq4 a}pj+_ϕ.){_vゥyS6dwTS[] {(llZ*\oB*`53t2| VzbThFgQu6b˕)7-tZ4{q|Q1,؆Y(/xTsfU?j P4Ћ@߸4IX^ x W;_RAsG^:bYr*)xض O_+ ~GLGҠK#0/p:vl-5Ru"kGLJŻ]YO%Ӏpx)Nlq9O ˀb35:cW-(̛չ˥%`$ =-/w,Hr~pe:a핒S99؂?IB\U$Xo],7zٟtJ!/O3 X;-y ]@xBsp!_70`L&E_rP)l*qIg>a7RC2g4 6}JX5~ `57Kugi-w*ka_뭤@Kݯduc;U /U8FAĢMuoFsM#F5FRIbJMZ왁ѣ=pTFX Ѐ+l m9ůh]V=Oi~ȪfKҡtFW&6>2_5؝Xv|5 b1k-Xf"`6 rc~p ˷Iv [%)M)3A/s8>HA`:Wyih:/ JBN`rI`kr+P >W)Hr7PdwЫ~Ao_wJ K7[?j\h~^O6 >@؀ uw'@296(d1h#p"i,WWğ U]ɮ,:#w``gmܯH궇g6rޘ8&]'yMF&ZCS|@x%9,_ _)Z.*/{Ї׀1N`ot/8e>8+Kq~qFUC# $ڥNsܣIX-%/ʠ08$nWh"u |UΓ=|cmM- 6gvn|B:ЕQ*-pE_OxH}z0ͥXwȲVG>|9fZ9,@2ϺSSFU򉕳J-[ୀ$;<  os L9,\1`6q흅-p vIXNVDo n|E.) 3pA~aa**ގ 'auK ~|;+̐/T _YF:RX0pp?^4{ n}})/= yajE ׁ_BQ+n9_hU0|, cbyko1wFQyc#͢av\bN6{߿en'uXjaN,j *j_X@;!VW3O\6JRϊnK! AX@ՠ=][z8r4}-5zəW ]V8M֋|&&)ƫYv"}GN_)k9jCNLgd|mE+VkH ,.xt|NnU/EGNi#Q5%\ã9$~Fm[慨_ 7 kwt;0m"GuUVya TI`΁;+1a+M.tk֏g=_}B˭I+ m4 N{гNzEUaF8k*+_%[o=\3kgUq܍`QbJbT4)j2 RhefPD(! 5.hm4Tc5&.1UMM4ιϜ:Ͻ})e~{o`yUE\祺-/ۃ9Jql0bHU;JGT`bgo:v ,k(վ ' ȹ`9׹ykNq)\QI.v -bVOE =/=:#~VNX\W'Hw`Lt$,}+.(3 A?"f']$эSu`/MC:~d,&g$V#myֱ~"o\*Q8`AfPv.ԨGi.ZibI9d+|\dmd >Kau)hofb߸ ev_cJEY`g>QBJd_%}9boBYDR"mOEnVE`I_mdME6b0Cvdtרc@0:k69xZ=pa " 8(̑%(!4nG!؜K `8R7*V 3[JPg3WDa]w,nYn5Q#0Zi E^r2`/) $?ߢ6/ R/C_̰hkw19cl ;l "-%ZA5ۢKa*_H`|c _0 z(Er|t EېntΌ33s=8u >(Z|y!Ƨ\6kW&2q)GYj:G)ʫ!N'O_24)2oK,F~0qGܩ6:豉\/Aj>{x@7KQ-N+93\v^t#hN7߸^#+-JB^zx`kW*M`z\;^Lkt+9U7L;l 4;M0bA3-s €Yx5{@uJ|e!}y:M ,={:|i_d`ګ0،~ Do6̀m;n~AMdun&X~N~W~Қn Vq^td UR.zZ]6Q~U6z?v2H " u/ݨs4=X5 I2K/Mo?C73Q`e3$o:2?>=]YKu9`L0K,[i<(m_fͅУCW$=@0 NWIvyskp\d;Vv#8 `U n_@+ps F%kiQ-0bsxn½x,ߥ3hk\64OokQ&ٸ^-BjM+ `¾ի6B`F2|)h;0vm |g2x {#krVsnnhiLQoJŶB;'[sau*r-}fi (oUfo}q˷E)y cB蜾7@<5d9 8#]_×F t3ch~_wJi*_i 7C3jmO{ VziEP.}ox٦CWpqN)a-,m$$!,pr2a9Y k kR0< zc2-CWːVgj lJ9;q Q36{& X 9XjGW!a `kCc%:t vi}##-x͋&03rgwx Vۜ +s#v8*f' -y֞#qB&w`|<Ѻ.5ߗ*; _8"16ŕ՚ZigW؂NZC[QMQ"6"7iQ~[E˿냎yr`R\p1 pە%I޿7B˖iSoe@^^}uv 7 :oj 8vTƕ{X9V:qX@X qW&p$`-k kb}F؆DN0 ! `J`Uߑm t4_e 31]!;}Wc7t2l "׈.m"AյV,[;;ʊ zS)k궵ǏkT(V ռ%m&9*S :_&tOcl*i !#߻;d}8z~z[7Z8b0O. :o ah2LaN8y7M%#o^KbE(J خ&(a:>0t+a >GZ {u7+%!|b 9OTM74)56ߓn>h!se@S p؞ăD;ozp8HaQW^䕎rwG(r gƚ~ na87ߨ*e,pQh&0ms¯Ck?W XaLh5.vt-Zv;L9o ޲e~TLBǾ=pv.~U}fx8^L lߓ5FprE _p_5nsCRg3 6M~vyXi !cœ#U׎uOyF-74䥖I<#yY`Zx ~ /^~׫ѫ6_(6)&ҳ/-WV z a,ZpTz"Nn HVwXZ؜q3k֍S/#_}n/ vL_w2jvUZNyU[|Ap]4#'ߜE <_9&`LȋV.hiϣ] ̖ymʹhl0X_u Мj$YP4|R b])=4R D +* i_eKu4(&C .~ u+aG=3G eit6/& *L{7F1ǖn9 `%`¯:(.tI{Ғ<W։fcoI M+ W/[7 @Ѓ*S /WT`*\5NlD% 73=\rm!,Ŗ 6]{|I)uzj1WǹvHƐy/žZ8z/kX}w?׾X sͯdB~ 0:um?$wt3$#SI`$nj&0!x|m!ASXΖ|/}Kg@D0梥 Ռ`Y`PNfA6ˑ `/<#ƌAW3\*}c<%+J@_/[IʂQ˖5Cᵗ&Ǥ8]״qV_u;v6;ub|1gm{ǖyI`zCPQǖջ7];(5}.]ȢQ`"0C4I` 옦ls{Pg:A&0uSx |l 2ҷ?-0m2 @ 0-,,55Ҝx)ro10Uό*b^QOз:(KWTq@=yilK~n|A7K C_m~௓ƍ k] mC _0M/F:s%Jzߝ@ fV"%L"01])XW 0wtKaQ}aA:yjjlx\r͍Z F5䅙_8 zFHi/D cyjn~,KЗv{ o6ol5;b5fƭ-fk1bf5npqZԝHꢵpןǵP"{r:b/b$oU*}37w-n>,=L`SAM~haqDU.hb؅m ~9` N; E7y&86A_K/]%GNB:(knl"n8$l띲 |7re;WvC]t֨bnQO6氃άm)~5F~ˌߍ1w>o/&w37fu_O8ed(RZ'>/  %ЬE&[i}&Y>-{BIA. gx5#e*LiJpk@ @o .9wē;ElrFoZbH~:"4 `i]yOO4yX@Y`pm\؅'_|q*D[S̀`o`l5\uzW.w{{qjۭKơ^| hT7Ͼ:ف-=cɸ,e׉umsF5=PYLcGPW:|U OJ%{ru s_H g-L( \u0N~g}wJT׷%`Ac $@cǺf•F7_/eqŘ<cߕ$`N eY Ҋ p&Cagu y{~#\W9  K#^fC["G 6ejKY$=U 0hG!aŹڳS8zapiPCWYfv%2\jq ܦM9 F !x;+I @]p?.e* %ff9`'f]5 H!["+$Dŋ`t~UsxD&Pp7c^51'綝v,k[y;IRuWa!\g΀7:$I EDw- mUȲyش3$Pњ0Dݞ:u)t,~o-ޝ]s%WATg:mXӾߘwEf|c!Tn6oY\zO\Loz,pzA삲 Oֆ[>.ޙn)ٞ;_(Ma/SSk: w|=/򺧁m=j~_r[7W ژz,QV._W5KF}08䍽Z ͂`^*s#YSݷȑi-:MJy|Fs!{ri3OROK+ chQInshgx`髾 }'{&ɇ޾]~kSz*R6sUףFN jWx@m% pZ:J_۳ڲ#(Y0t%8=_:Txn r|o..}>Guh{Xї2| uIzcy5MjЭ"$WoH`%@/xZeKH-Zx[[s\Fp'% 95I x1Mb2ړ}(cςunBƵt;ao^ p[.ouJV{?n 3Hnd߀^Ϧj{AfcG` * n_*p׆cq@:CuyJ30t|դZ_5=38lj%&*UNW 4Ksy$ 'u_Y9Iˏ埝e8u`i͚DUH]uׯ0>Ri? S;kDNla~%؛Cq}ЭLial_UO- n KEY ]褄[nn<9NuE`0w1+_[6 f-j[8G m|ͭW-bRĠmeAyi\]-geE&[[0V1Cx kwfAug:+^gD,a.zܚtUK .6ymApx]8` q=[']%:S "'@oG*2[#HneT#?*{n[_.,A`R@oZ_ǵHm}b=Gy=izpLc@\ #HWpQZ5\Um`j(ѩv =>؋6dwL=-6kgǎ<~GJPgۉ?w%bmt0%LSu-䚑/` 6}Rn:A;x%W5Jr3U 0GWgLo[ӗ[󑁆',Vxlk抒P,*'kPr8S:,h*$劏6F=C `_׼wr.Ңvm_K4CH9[a{}vřwIv@7~3ɫnk`! t>G'#85w10fYlUAd9{ xhKސi~8f:t}^CDEߪ:J`S4r3gBЕ=iZ<<;`ײs#v/C s֮-i5B^ƘHU[PoF6XkOiַzo 􅿔 %u.7rTUdK.ͦ7/hMv^5~q>(@ZX-}m hB^PpU9YέXT['* th"w ܾP}ᷞO|ηI|J^((D߃X߃jwE8!&~[?(=[FG=m }=O Ye)xVk Ν?yw@I++ZeaU@߰v:>\]w3 c_~IJ&{תvQ~YG1/Z,'V*iN>PUFξUFe@c|:=?f]=6o_z||ѥ8fAK+=&&SW-GFጻt} l7sq[?`Y2Ŵ}j7ZV=[ ~3WO~׻_P&H7c Sn6u.Ǔ!謇= LuG1pWC A_j}<(3 IȂa p"ڍVAVAϏLSGv; &95WPqyǟ{+L5]t/_1!ŸRH>Z'9_|< `߽%R,*vޗz]u2 jleLP?ՅE'Yu6z6ko-whY `,S5G4(TB^ߜu3)jȧkk}OSpZ zݬP౛ߓ^"{Ѹx\&(/%wXz~ Ι֐^i&hnOitOhl5h8nG"E۴imʵ-YK+mY(O~x^]Ou*WVV,y9a\5[WKO[1ݯX-v?R+KC^Tp}3CHZ( K[p&zm7:?iuі s|0&M0UQ[ڻ)t!ΩK( 0e ' "z?suʭĖ9恣4&0xMKhM^Rhv&pK'']N[,!bu6~xu2;W- +5<6#, l \nXvԐ#uԙ |[oU:`:=a ;:'Մ[NNqãO+v6|1?:W!|OMJ>kV※n[" "8++@YW#mSbÍv8dl-_5(o8/A75]FmBh0Kwy&upq= BC`P9$hdE'/03 ;(I¯KC_b%>D֗ݕKQ+^slױ⼚MS]%_ӗEq F&,hoO/g#縈ck,qU'; p>^zx2 uvtzlXCVZizmA&Z +?wNm*;C_u5FCޚۘTI`Ԣ- ~9rg.*oW *l}ŧxdEW`p/x{fb i2uL[Q<' {iqX5]^KpS퀿ǡ]p\-7 \+;#UsP-o]♔Ol@~!ׂ͈Kݦ%m]Jv-?sN~XUSYԾX@s]YM>U[] ]n:Z\)N!8Ŕes%W5GLے˦; =( VG^v-4.&'V|G%3B7lP]r?O1q+-p`_Y`[}rfV{܃32LKr!hQkb匧foҜ:"f 9_/UWb2Vƿ5tA_7^Ia^r8 _N4I@΁,?o*,5/(ߥW_9_lGE]M*>-/g zA~L7bKS8gswA'ԅb&2QXV4ٗX`uKzh =Vw/dsT+CF Ϭ+p6(ri&!UE0ǜ0180і:)VEpY/}; 5jIa Z- z d+lk!KO|fy8PJKo=veg3.MHtœ ,kE]N97ҠG;) M]p ܠ-\-n-A]P"t;j# vanKoDJo $v%eӕ)[fS`7q o]SVy ػ^lA}r? W*kh'D/b_]zW;MS/ʢaZ/%鎏^e G+ xK/|98pL8?1hz^%}yVžͅ=j 9^<.\XirѨ%vJiiMWYhEQK:>*~<7}I -Gκl < f.hP|[.ru9 1Q~ ׮Nf1]w9i[+29&偗췆X Q#n~mQ-+[p66VO6[ho-!tީG9ߺ~6_z?rs]um-} 1h;F^D99ԋ!{O;`Xj¯NE>[zA-暹I]\39,KY#i3hvfvVQTW! ( l bm}-H"[|%w!Ai!_iI%9;;! $VMF}x#0r'/#Uz0>1$Pt2xЁ?Zh+{!y {\3<'d赛D#'7o~&l|!_`)G)̀ `neq~/ 8kjQWMjMus9>B={H /5 Yj@NiZ6ʣ0>p‰`3Ku0簷@\Ô.Pyƞp+L`+^)EAYsWW#A&r"?l|k ;-$S4.ZG;շ~W `##" آkf{ػ-E_ܯA 䯥u8X^p_ U9]9 0A0-a`dX['TkJ={O5r9- 1_ C["qc&~_2ꀱ}`X~"̄Qbx%(MJ7TuP -lZMmg}t9y!h=Kze4g+,&{MoBM,G9 hvyNzJzCB7/| Lfpw5:37\0F0Ig-ԏ 6f />tUn챗/ߋ ލQrZ氧2Bc<Bahq::bM|yc|ԑjF嬾EK9ksc_ZiInc!#UՑ&x%)kt=f#$*=z# i=5GY>?8 c9J8[k:ԥ%XXçfX`3^6&z_W.Z{6\}z"77X'XKY^<) pvDܕj(\u/p)9=s s)\.{+l+^ZJSΨ`~~wok+1'FZ. \wy8{ S43tܐbS}3c.?;Q9h|I@6{,wjɽr+r.ϊȞ0xp]lB|~OR+)'EVyδYGF%'~.9'W`F8zT>JV`p8+5x7ڈZ&ûz[$0c9׿7IJ/:7Zf:dWn53ݰGXeŠkMĖ17Ht߭Wjz&}ekEB]bp9'8z$רt1h˛ E 48q3.7q+znwip:N6ai Iވް!,0WO ݰm7<{=U8e*n: hl@;}jI] a/ݠ)8,|kXgx˂T_ A~bȞ{1X]K ȫ,G繣׮M⛃{^ ~EhJ08M Ia[KgO /=OVuy{`Ћt8#QU耷ok ^ W~$L7Rs%QEmxU,@*O]8Yu :'Atg]<"|0 \_[QߒיDVO%(L?"/@uW5`FfHZYdK;ss;,jmN0!Hi 4H[bX}{Y+MsD 6 BZ\ډ.5e }ZP7>=b-P9koٰ­*:66n=QʶBC/y*WUz/!{ETWRQ+7 0PA))DQUX6U'Ռ_ _+\1k޼l"~*RU7H u_P7QhLb/ʍ~/G`e?%C`.ޖtfw;0@߇_cQ :Iqyq9UK[zenAH 8pKZ"KĽh]`F23'UOO8`(+ 7+b ;Ht_י V mԘV-}yL &sc8`;ƀ; TMd.$_5Gl0ԣdۢT 'T3OG|`5`~wJP&  j{!uClc/RefYQZ\80_ٝ.$[\ns(-p(oɻFV\rln|"j,~33/It!EQDQ*kRPJe~ &tߖ)V{_J163񅾜 `l_ 4Z`'l5bFbp8`#x^_* Qe_5*#Z~MvEQpFf%˃1m~/C2{Kj;KШzs 8Mp8OgOߜ X82"%-on?X ZfC_U҇q3D;RA܂!Kp4~E\d`R|L~^WI&^X,AJwX^_D**E> p,k?$ xL/B$@aW#55}GڽɧV*gXOHĎ}FM3 K ^Ux_ fC j da9#9Z*+H)9+m7gpQL9wfk 8ꐸ>Ȑ̫ dl%(kf\ SL dsQweHmGȎ[z!Uw$ *2Z.N9!Z瀣n1wa5.=7tM pYR XCR3xΊCe,2&~G`m݀-=CM^?sZLU&{s^@/y ~xN {[I`k|MoՂJ5I[6(rFh8]c z7?W SߙH6WSbw5o2͑bE10k¦tų8" sv\syu8M,]17te^Z+?Foѐo]$_81ՄufW `ߋvB-/RZ=N'uϯ/'/(-,_ͷB# #U )`~\pZ<u}Y.\]7蟋;X;ik:gΐ@u3-:on}BOg=K=pAp#p92ލ;|2{~9``` ;inxgr(O\u1SY޵t?sw9-+[_u2}Y[9\&}E~ĥF&72} n*(v"hg^ťߖ9ѩT[oMfdSH[v>pV~Gx`YP7Gvb+73XڻqU8^ &DݗJ~鳟엾DzC s#4t?^.Gfݭ6`Bʛ_n蕞vbW[[g_#/Mb_Nj"2Axx=k+rZJ~\ܣ> ǵtjǂ_$G|f{[Vf0f(gIW0 X<@s~&;N8 I='ɱbe {L`Nj3bg5Y[` gA$7?+{An-"gøk-*G扱5S[Q`jۥ>y 7[ W& }C'.`m ͂+ wC7:֡:HD$ܲhӑȡ5¤ .g oR7n9}H#hrR%d0͢3ZTlo%/lڿoJ=COY1h~/ RpmzKpG`W )-p\Y`̨-ȵj#5Ϻelo~3k`!7F lz-;`V`WfOs=_+c`恃V2t[~W%MH9z{EB'K9~l_ު4;A8pYY 2F8gUJfC^d {5/eSXc0Fb0*FlԪ1-8 S5hc:B bQ(TmbM&Zc5ޒ4Zuv̻k35yoAO3w we}5 np$n#H)_O-E`M_B??AEK.6`iXEĠctC~ ?}v 3ǂj`i~%R&ި%|r2:̓Q 7eoo _/_8CTGt=C*{U.V w8K ?cU׌&)oXF=TV_Qζc`t0 ~>J88Ņ9~P8=FR}#W_!|+s_!ǝ}x2:WY/ElD ǫ]*cW<tNc\wkTϤ@_`:W+Q(,oRs afMǝKeq@zc^۹d{__qjXFd8V@jFWF7@n'\0v :YM G^pǟ{\mH2|-xv@GZ'+S#=oi+$|9`͵'> zﻬ;aVfA6w=zqK*:}J%Nd[`B}s@1k4`p):/ { n. } +ot1QM=ê+OEl g1x6Jta[̵%}uHݮ X%FW#g~۞ }K"b"^!#x&f3ߡjc ok =ǀ,[$֩>mv{3V8AlGVѷm}}㷟IRV]\z7?>_!]F߷ nz"w`pWF-gګ? ,3 tƠ 0#7`<pSrޢ7sS|u'1_<չonU|hѯ$.͕F``MzQ9aӷA^NMRZ:Va;t H(M[z`O,λ!LA-vߜ.ǰBRI>,])Z . ߳/]W_i"3RlȊ?޻XħU>+"Cy02 .ֹs]L7"+5Nq$~\h( > v_o8``sfȡVU_6K5$p;yyj1 >^w o%(,;keݫs>[rjKoHb'=.!woxގc|(! pm PNή_f5k{%4z/կ 69~7``U^.[8 `y,e::'it0&Vk8Ŕݾ:)[q5_d/{`Qe2ili,|<0x8C/?AodWe }eWNi^PH6swgwvj?1^Wpg c9`0-.Q4Sm1&`n6DDA0N|eqg6 JtB:43dp蠰N¯`'B ]:hV90&5'-sd>Ce /#"jtM{3+ e} 3M7 "2gBP$U: *rXo&yYt-Xj=< pY#VlouDD0o9#Y^72rJ^}m } ȫ^ pxt%0FjLn6~a/Al@8)7?\\2=f!0ASeAC?W_ǧ^翆Zh) povgzWz#_1X s7.<|&{/0|mSWh,67ݠI^Ū-誡1Ufu馻~5]GbW50l{7?^PUtou `^V *NGw꧞]_|4  V1Atk;Veջ5bU 1W+ fq;U_/ӿ15p"Q M F+6P0{]27( LYJyRR"0b݂u6|k_WټCY}tGK_8&_X6 Ag;JZHlWZc4!jGFe{CY Xwia7c ġ,vx;ٯ S3a\:0G Gh_r.˦Ns^Fu2Swk; Nhe 9,lXaf{]`+,Ch`;s~L$#oX*EM0`zi X I yKGT/>lunE/o gOx_5ྋ;}0vU+iyu.^`oU]^m| oĿ]łߥcWy[#Gi29K' K\/J3? tK\g[QNE*q5tWuF8g G],apUKvh`eh+%_Tbp"[[N-# 9Ϥ=v}3ǭezAr*~Ґw)gס 0W_+ s.8,6mt:`~4,І 'Agia:Y$-x_P4|N%[uxGuxFA7u^jvXU3o Xn^pvY /-5h^2TԦ,7~i:]ބ}[%[AjP[;G$̙Am A/6Xr/_P!geV:yel/V߳ y% @}.Ay ,Ak|/g `[-~kYYM^],{io _{}\j>}A=T&j͉8ZKz[ +"30kbI5;Ɋ^%QXn:jk/jg1wBO* ew. @yY`{`[A X1XE_Z^zkBd$3SI(Pr7{ Զ/fiH:IJsNEV7 zLdMZ5V^_BBRjA%[7Tc|V£7~a{dZ- ŠU8ތ5> KpM`<`ˑ6 pzy^kԯ{Mş!.=#АnA? gh&3-Mo9ӌL}@ߦauX!:7I: p9K: [`4a\}L/95Nc% \6 uxұb/}rO[[Yfs7jN cFʀ]y5 /8`8f-"2KˈnrTЙ_%l/jQ4F5O+iL(w5 #{'w璫_v='C/-3 }ԫLJڴBauq[^I1UqYr"t_1n .iY]͒I\SVC?HfTofVƮola3 i~s;%rbo1w(t+qrsbvfgLlwWW}{I_}8`5p`uXZCM }4hn$8O+̎n>Bm72ZtKcF =U瞽4oɏ.-v>R+W\Qh՘ *V#X"<_ş*Wy7`6Ʀ@)LJan9_qW-AfSq/ tk$z_`qםⓑqB{ w,xTWİk!rh1sjwƺ\Ìq1P>6˓2G_` Nx+uDQ-%uts(/7@a%ƀO;pŏ`4b-WS߳|OlZ/l|r|Ŝ {0Ğǩ\5s/]*g$u9 Dp6 6Y(mI@bmuC ꥽j^&o,/-p$F]7b|W؋"+Z.Xf2<,W9Y`rZտ]TVN fۋfc(v&^/t ~oD iIXpMr zO2`Km|b;)/HI DpbG`OfnlxejNӒD)mrU 9X#Qˑ;4u5Ax_/k8L#q hk[>w&q[ ,5{,| yZ[{%W &d&Av(`<%68d<9rYC/`KX`p~s!NS^ 5(m@S7/̉ $pMd7E$A[ vs;`Hy-u (4!V߿he)x2h;9"%kO<%bLgZ-6*ཫV3uI~ԫ~{4'sy()Q=}UCn]6m2U`68Lݾ$-G:8c@Ӆ> śA*K|B3^qy@0LJcWף^d[7R^"ys^1f{-X{1v[ SXVC(D `>+M[v5ߐ/86gOngMHrYl0lkibЌ~l) puA y `XfLH4[zJ3J}s}֨g>=?K|Ga ·cO8XW+ק_}󾎿n 1_0m51lnrƳq3@wjJE  pQ"798[}e>ci>%A*w3fq:a_fwK{/N^p(Xm(HR:U C8ZA\:`U+iD倛#̄+9tQt:wi"X-%n2kW{UGv&١Fw67eklAPҽy_c0 $hV"z+ VE.ki`Wܭ4f #Iߧ񑰳╼W̚bnMp#0 |C8Q3eL/zj{A{ ntW74+n _~Iw+J8M Xy_q0XQMg(|+;wjRL-0&\tO~G gIv"ۂ+>b7-d[Kd2ԉ旋RTy#;Kkh"p&ˑjW #Yc.򭾡Vg+Bi/pلGh`Xr, k; `uQf_`_启hj|0,D|l.?YS]x=Y;@5SA K&qĢg9I_ug{LF0'gY2 'v{sD&0!/CF2 27o!hG5xd_3 wɴ+ z}1IWG{=W41LP: ^:=^Wr[η<[\(~Z[uRX+|Nt9L~_ٵP-=#HҦD]o֏K\r! a~/ >wrQ3|4_x.I0KyhYFdpp18`ת_C1Vk cpĂ3{v>!Ɲ y^kx沧j2j+_7@89@"Յ@ rN|ig`ItE덩0goM{{#=77g3j7}p)`=mGq.8`G9LN9JF͠.qjWgNέsňcZ0okE"1~<u>0/ \!Vv$'pDad h=BTGd_z T]~haqߓ+z_Ԣ9["ͳnYeą{.O; ]CZ`^7%p/jp>Zj#ݷ`7#1~KSb-A801U,תŮ{y Q0B8B09"09&(t,8e/R%N6̝9Vq.$k`I D7 Fޑ;T1,MF^Dj_@o5@“X`0^yQ+;jkN;58ˀ?vt1h;`/׮6ۊc4'UBP;i1]@|O˒'~%2%|񞾜㠡zwn涃p䇕Rpvnn[",{z݊׭pq[ ru ;g4C9^6|ofs\9`di`,E6wKd[ t9`קOŒ]aoLrB_^TDLf^ I6qʎmMb3 e䠥-=:< %!p F(io?ֶ܇a3{T#돞:-ޱ-%KVW%"-g _Ao>E{e`I :6 .CXSl c3Q +a x^ E/-@|<]F`"0F2l<MGpS荶1my-so@Z- V/Bέs5/zҙi&GM0' ר48 02~u2~-H˹Rܗf?u$ "{?ׄ́. { +j0!m{i4aNf*Gu'%L-آ;FoG^"8 @C^587 Y>~5(yf oE7 m*M6B=s]tu Rq7E40,/ao x3/wcKe\,pS\< (G_=[Jo >Vo7,|~Ow~̖ /`.zZW޲gm ՊlO>\_ id՜/COK2=ij^g<@̯: U%Jj>OuKgL4lo"I+`\Gm7ۼu{ᯭu޻]-_e_kz.*.[g۞YXgvyW꤆x zRNOn\}NEW]jG3 qf?0ok=YTYN@"NJ m/E$gKSG׍ע l~ƅCF0[zXW)=`?"1g[#[>g*a&},ۧ\b2 LoQc.|Dz UuSB5Ez]upәh6Ѽ/ڠYs83UrH<G1:< +>?@quxX x- IF p Z`5!~?6B{Pxˣ pJ-HN iezm%ݥɵ3FtC{xO 6fB\!}$w_]/ߝp;_]sվ9 hݰk$Fk}l)ʓ/rZqwz|7: z;QːFs8OyP=<:; '9KfL Ԁį<6 /N\S`>W ޕMc:Cimi+%-^jOyOaU5v$2=5 ;6o e—tfOsLe$my, jE=J?z\43:w+@..δmz~#/4 eg35s  @xTUM+J`p=ҰtdA{R}E^0w%/`Q8o7,p^'pUңMj> k)5Ƞb6=lJ[.s.UUl˘ז4jtH&Omm$BzK5tEvCohwl畸mRL'~Hh/`MH´]օ^ mllO1 "XVg3a,! FpΓuu&ҹb\nm fWĄsA` 0%+,/-BJeA. 4flVSC;a-+g Y62d{=@ P ie\!eJ:hpPkm}sۃp X5;\ragjpt9aUC{!;_b`Tn\+N<η3uZQk\n_[CxqNFsf0[՝:R[C`׎#:*ì{9,~[s - F ohtӸšY`W}8 lVCd@4Op-~+ iMcP2>|6;j_.JVA31[RRfgG.zwws {Z\m?4ǟc8>!h\7=//m~^a _nִ/5г/7+]VP14g'.w&Ko?<:&EK,@ӹBn!*NIQᩫ5h: "0:;n%\Wf IF'j;].ksDV-?=9 Z]:Y g f*yzxfmDXT芹pkY)-\[zkBs/6&9cdG5,o-Mph|恍bY/KV"N~Zz-\V#ut 'scy*M0 $0iߑERWO Pc@oӯqm@^LoPUg~Yt\yx^ /| CB$Z XC,ט2=2$pC5_z_l+{hӽ 酫K<+#3kW_E@DžDp1\3v.ߔ&5*=f(t)AaBR[h4* :&mxbb0# KwșoGUKҀH~ֳ֨r|F.'gzF0%ӞusL_Wpx0d Ldl `239ϓ@U-q1r'J;0_m^$0kd$f)[.4> Ԗ 0A$ 3áV`xmy~C,8$>bo h7@:B= p<teh>VQ`2#KZ 46%%!MV.͘UWHx-F7pWҀ0J=օH9Uk S?Jlj0WZm! cOd֜Ek @fW`y` ,Q…@;zv(KxpiTiypQh)SÉ9.xSPZooRm9-_< amlҊkְ딄vOngᝬ_o~} Qj4l/X6tECJΫV}09bTҎ,,W2} hLb{@c]o`j&V2;H i? nҧ,gjoDA0|NĠ倅r1 ,kaG[nŠ$~Y:LvT>xt/-Ir}WDJ_rX522/h/2|~k8N2Tq%ezi-Ȭ,(A#MWTaܤJF {vGR'&_%]*%Ø,y;84B/d{ӌ9|n˜`]\# ^Bмt{FpZ/ASA.06XH,%|5ru4_TIY.'~uh}w./o.%u$?'`4ï;t_y_d;bh6n+*mlYQج˅G 3oY,~KV~Gmo@H/R$ q8%ݯ4vmv1h9`Cй+) PKZo}=# #Eێ?1w IJX9`XnqǫC9׫ߴlWmF/ k*v y-]-Uz%ޗ `VdxZWUɚ |&z 4Jpk nCT]fTdb%]zkW= qN%qAt̾ /֗rtU@p`D0}I /y&p@_Zk/zH BB p f]a)$Er|Y:mZ4j%paO[eKr^w1sD{kA$y[ sqF7~[>/ל';9 #R%rk[*8ߤ+m.*9Z=@{~+e~̯95EѾU{ʹ)o]39bz#ۼe׽XD1vc%o}]*IKn\+:mH7/6pR +D,% JHb(%yGɹ"2Kߴ1o-[ &FK 6u=~!jުxg3CvT7<w5~DicLE& +CRnXڲ`Z}K&?WhhK_m)+C`Jmh?ᯎ-aE_e_a9 `~?{*+o$/x-m%viJ%o4) pwMX-a0f r,GdR\ԜQQ rAGe9z<6|"- :d6 0kK$<5=KMCrMwBl\I_/淉/b#pC2x:hqtֹ KpQ=7kl4x#$-zxQ<>SiGh3 [C;lh盌x#&}}2iK\B>-n@Mgh߽h K+~[kw%n`2׎Ww(,#_W1Xk?5pX`X~Jϻoߪl}y߈{^cqBז`VXV38 ּi\s{_&?NQM禚|$1{1|9WY&g ]#$wgfvuBaMWX<7+zXso\ ~ `K"g Q'd 0eFbo=퀁+7%b}eX#Y42߹UZ@sLX0ހ.*#0'KD!<;e73[.dp\B,ؤ'#tH9o{aY 8wޤ KA8 `8T'q }O ~\ƹWooGUą!n.eebw\ 6ibNT'%}Aw_~JVuZ%=G+ }%?CH8$ݸ`( $ [%rʊFY`.痓:gclOS O 7Pd3"M04 j`A{ 8$&MRzTEJ@ Wj`mv_6#% u$$4{wz&]q3|}HIFCQ E^b ԆjN؝lX܂p|fe1FG!Dt WnIb+䂗67Nyy4Hٿ}żx_j2<$\w {RkrjD xk +xQwU6 ij 󁜱?6.y6*OcG;p"j. w45 ~>oVʹ^.`؈ sN )eQHˍr=oLEg7$+L$&,ec=Zx~{MC!Q bUl$S+ M"zV^=3@/h / (:-܁rFg0QQ$`0*$~pV X0uwT1! &0)ۓVH0'M`Eꑋk<L|˰hEɅn`Bb8 p,[`18Z%  32)y61Ps("-5~c)dF`:*/5FX۔[xV+-Qē(ṁJNPu#go:f†-S u=f* awke/ MW\fޥIp\#{߅VB/1,+]:J/sɴyXOk&8ִ̜M_+W_SYrt1e<ZOI>Eg b4ָ26+G]M;ʞ1kWWXţB_KA1%U̎~^̈hf3;d|&tr󍲿TGQze`RَWRBBT1/2%8뿚=5}檋Џuq!Aab|5v~&xtp,JZ9o`Xkv tX`=V#.&[crt>e<'M r gg |v} =>&`U$/oL x9xk] LJը}mZ@<6%߲%K|me_])\±PX7LȏHֹE4<#ikm$FWk@bm c2y7G/5~vJ ,K_2,]8!5~HcʇͿ,p[MrFߘ_W2xϚX^I5*?4{&OʗJv~-=L-'ޱ5|FɝtW}] =,;눩  >sm!_Ib%W. #|1h2#.Յ=/֟ISh0\FpSH$t]__`o@<`/OQ|IӷR\]iBN} 1k0c_3ؚ_.9p $cPW zim;J6)>$}0}vY?VƵ ^gLlD ) 0b1* %^ ~энߨ@JtK8 3sM v/J%6o63>~!xv:+D\YhԅX^}ua -VBp {O/{vJ_!8; ^jbI؜\+ ~]ژЄlǥ542JD2F6ȡpaݣ[[]7|7WfK`4e2 ߺL -6/&:Jo6/_\:Eh`o3tz(ϳ~cdwX_S_ڹ kS׮~W}~1W|5{C7 zy^veyw~w"7q$g'H`#XR{Fɜ*olߒ>Vsܯ粿~`C8`/&,`ndo胓EʞzKL/@wȣ_K萷{} *`#/3ᲄr%G\r湔jn t\Np?VnH h,Oa;UZu:50 >%Z>RW3$1^"ֆ4< mӄc6'f1c2 br-`-zy V+4 Y`߿q`8.K$%)"v `;k068SAkWQ(\į_Uט>Øu00Ҍ>r},BέK:r `FH?_ry7~!n؋\rM"c|FI|㸋N#,)c (਷=LV:%: r[^8UUW}o`fFpBa欠0Nd3}<pjݳyld%߻T DD✌xWז֥!|o G .ò~bha֏AWM ߞѷ ¯.]=&^H^׿kOͱG&0w\/?domLcI)igVWGQ7Ӽ9̍g]tsTGMЊA !x*VPَ$p6^GM2_*h]Tbq:+#W)@^CtMVt >^NOaRliFV` pz3Z(~v K`Fb>DbN`08gYce<,4{Wb/3wԅ6s'@-d ª(У뙀7\"zWoIlֳ_g7VYE#7\5_.r־ܯNj⑩ ؅2q7;p@: >qu_L4}4KfvIk{aH4u]̻ @ 0{gpxd |(n.|͆¿>xT.4.t ڟQ8 }/!/   }7e3,U~4Da[o&4o$Ҕ/iBHwK&f_KwA<}!S~}nݎ7,o H5X54w+5]UW kP%KϚ9**vVz e6"RŃlW)m5{bӶb5VzTǶ|DbH(G }W4*v "M\;7--gJ aЛ2h/V49OxP:&8em4X+l0v{^ RpVNsx' ^.}5<Dz_di0X7 R"0 2Yvg \k` 0+FOE@vGo=4<9,co.7C(>Ԩƒ-.l,ld>KI5Cnu89бPFtxAoR༘(gȯ낽W&d sK}JgyPvwZe5T)h,𵕄N޿v߄Lڽ'yb՟{C\/-W!L /oFb5B |'[X"]Qo]5`+ ,lH?HP Wj5)VUN\nB.NEL ;=mc^TIHFxwm sb9 ^XSAi9 .隸SXYa ):oƯ'փU} 4:FppրS tbXc `[\BFǪ`"r:Ld WhK0{CcRhݗ|񅽤yɅp\s}YsW*K!0^V^{U~.I?kwA77`wۀ)kV)×;9-S16 >aݨH6z/u Qzm_lY^J jTx2Kg-▊K~\ORW|~V~zO=|0 M *V+N <;`xWA0 U@-ʏq7`ĝk7]|I.:3_ 8LsR |<88AWz"-O`_~ӏ`X }"Mt>1SÛ7򝌳DGU_(,v[INznM_O)a\$_1SnBjwsw\uwjq6|SHE`׶ gwa!Xu{HŸ-; r!g#bQ= 8.I;#o*Wʩj=iwL.bH8ON?/[c \C_qoWdʞeh4_-[v,W3Jjq\_0|:`.Wp@+" p~'}n,:M4M,[Q 4z/q% J &ũA 9[%:nZq<k}QlLtWeX6WBLV8WJ ɴ3~e® L׀$YPscgZv [ 'he /ϛ`n% *kb/7]mcpW6"Z^t^n;'h*҈2~o 㝀~W .p n qxMŶp,pc &{M8&$oYAo{?׋3}xq4en^sn$&p7w" Lr{ҥ ~@5 HW+jjK#58`ka">U>H Zjkmv" [}cwe/f?/s2<{%ňrv"pLV qm5iQa>QEÆo ~ljW=ُ߅'+K0XENSiSI젺+/G#o#>%%~Ӂ`+x8A` p",ىq&'o}!{kum?',ecR\fW8,ba=V6ݍ# º  y0{{N% Vdʛ78|_9`諣\\o/?o4Q -kKpW. B */^L[Xz_<`9 M$f ~Ic}P0_'5Xv q t_lpZx; 8IOUԫ )_FBh5.}3o~qr 8 `nkU:倅SCTP Aj]%@˝_%̬Hed 0Yin+ ,oJ\iYV:J6〝I;<䫮at 4n9g;C*j;<-{eOkAup?#7L"zBzU![f/1 ﰊ44\Llg˝F6+zҝ[47w Bֳ la }%ցGB蟯0Lgmav~z}."K5.m_ ΗZbfZ%ZG5S9KXVH}Xv#L=͏)Lx/oί3(D\Z_"Ad_X}B__Pl B_ցLgT=oQi+M6߉\"hvXx`&:nqN?׬1٤$:v[Sl1 s  -}X6Eg%ArׯbADz)^f$8~seAqY<_ K[|}6=zBL+#q7ivo!MI(5b\ɭ4Z5(bHڸCXu','m +]ak#KFgj4XZ> TGC඿/ݺGྍ*+Bjx+FXe Us>Rrݳ:,]> ae8]UTD42ve ɉ˂+#Ż]3{_,Z/+@믂$(+|\TKvowrfp\E Ba+\N=_В8_aid8C*|-n3B fX xe1u>WAlyoi+^17֐\߀R M0iPZ.",p)AiI c.A&p5~"R#lIS_X>&vb-}#i'yP-pJ#J5ck?s1FC`B)` *n%Zh[m^+_=/~{ϋ%Ezx[`~po1U^>ei_f-ZwU fyW.NQ  an,_KRN,}cұ'?|Ŧ܁`[g7.~C^.Kc15x3t E|Zp%xM^-Eפh}(Ke t`lsr\/ZoEbN9h0ُ". /I/223R{ \f^NLonb/W/) V5foAۦYO!p-;] }~5__KZ;W5yj ғ4"!2m=M^]ckn<2/o s9*͍huVz"5ICɎ d+7aӐ2Àv7&'< .Bib-6AtW0g6큙 41?-8)?[1|˵gXpcGi#R#v i?topBrw#[4IENDB`assets/images/hero.jpg000064400000325256147600374750011004 0ustar00JFIF    ""*%%*424DD\    ""*%%*424DD\*" (`Z^4QB*ө #pK6_F׮XyIdYd{EDȣjF"5j5F5qp,{][+3@&N,K$p mf=~DH$F$UAFbƍ`٨a"()ׯ^ZTsҧV*ԨիN#UKbZZ:W\fyeiitK+r2(֢֠"#Qą!"8W*Y<QVīQNig+!oF]Ez1ֈ*ZG11Dh:GD5A^*j֭^ 4UN:4jՆ6ۿ~VlX=Yids@Dcm`Dh$ldhH$$Eq\~UkTV&i}leˑjv=eFZր$"ccH(ⅨƢ4=A}#blI qE0 5jUV U*VJJ4jUmst/۽rSڱ5Yw%t=^sJZD5A6q66E$UhyCʧC7/6؇2ƅԅ\zNfPhFs{QF10ajF(dqcB4șqEEz*իF*իNJ^16n^vۗn[fM4O,4|҃D6" c#8ڍA"lMWVvvV/)r" ᮹nދ,+ʭz 7^"#ZIQ5!adHȚؾkYqE pPE^j֫VJW^JT(ӡVxcGf˚7ݱnśgiYk*Y@A0jc[ H4B5^d1ޞo;>]dGDW˹<1ޕ׾,@]b½Q+Zֱ2`Ѭdc@PV_| F#LDAQC 0C^jjTRx+UBv}TŒ:W.߻jݛ,X͙ٵbřV 5AآDh""FDx[Sס7Sd6guDױ =[:oj??+^ A:IUưQCUbFDkc5lq&260FF(`!j*U^Jsshօ]ҽr֭ڳn4/^n`ֱZֈƣQZ1dKS ~J ,Yn_|gT: }lu}-UI^1pGPIhƀ$_w kY#61أ8`kׯ^ZkԧR 9sӯ fջ/޻z5t٘AѨF"5;׎N6. %si@M%ˌvI $r@lqcPD@#Hdl4F#YQ1CAj*Nt(P͡JH"t[~>tQԆ60Q$Py<油fֶkLNtz5z@Wr8#(54cZ( `cYq1cQc#dq0^kAZJRNXQdzkt;VZb268Dh 1q&DkQv5Zwh iQ#dpSkoJPUp! "1dI ddl&24Fc#dlV kTV T3ggagnj[F1bW+A1#k!@Dk.֍fbr9YY+.ty,׵GVh;-'{ާv,r1C@ƢDp k؛Lj#Z1QA  ZTB܎w;F#XrAQE 5f=R>Ai7EhltxeworoC*J9zk1 #F5*}  ֵcY#֌ +^( VZsq9K{~Ѵ#֢"1xr Zva^ YW38N1 [n8ӈe Sz2^p FDjkZƀm(k#8ё lldq+VGzm["5k@F k@s*$m#HoRhgPťj|p>g,ucuxU29r8=C9dt! 5FDcZk@Ph֢FțlbѰkgcs[:cBӄc@h֪^ck#oG,σ+##/./rg__Zkʼn2{K]={ĎōF 8_` c[ DZ2 Y<t6v7.HD#Dh +j26ccuffQmזrpUG}qM67_7{9aP~zo(fl+ϑ`LlcƣPz ֤qC)lL|ѰF Q@D`j W(ؐk,?4攃ϣBg#U,&"Ұt}gTsͻ.FA~ٝ"4QT@jGh֢xGW.}?湻>O{oXd%jyG_KK*ThP4=N<۴MH dqDQ2$lT*7{^vddpjEmb p uƶFfE.ϽOVƪ+T~xw#3^}9w)r<3ؗʥ{IIq($Q8ƀ" }*#8v ރJ(Pl{@,5b0<κM3kgغck[3MG8.#R4~czbcZFE;EPPgؿrNHPHlL:Epr]ZDqItX^-^y [[{'c*j<ܜgOwz1gڹsHѰHc"6 Bؠ@4s<M˨׿rR TbDDPPq&*+BW]5mqT&LmDkAA"8Fk6`U8h|1LN` h59Uts[|D,zWb!m|\st_:]K+'V88^GqV[l[9|n9Rjh4rȮ{._zJЯwz+}BB*=2O)|W4-Av^C'm6v991#1r"l=3!8>{z's!Uh4F֢4U=WD~kԺy7^?L>ĒDziy5v&]=c:6$p=sbHjk6@CpgCzd  #X F5p*{(q}v23GceC6m5 ? N3=|c, `*wU֎]uc OؽXdH#c^"I&Զg0@Arx/ݕN( 4#X#Q@UAUsܪGE\Jc}{\nSWO:`r^K#š_3ִ^W\l2=c=uቮ60q!GK,&# #07z @ZF5UYUTlyy|rWO/CSmryeIKny+o+'2y>WswU6gc-Oݦ+6 rFG$M#"<>EPQDATh$8oޙͭVTp4Fj#@\(J| yNzH{4=G#>vEz)et}\Kτϰg }ǒgz6tZM1:}Zэ`9ΖI&U,Zep* 41+ѽ3Z" Qƍhse|뒫P8;[_%x8zx>/?|vRkIC6+{j(#"5rEt>Y${VӀQVUh^̭V\Aj1 W91~WDWSSM;~p2rUkj}x;zɭ=U]~{^+E :G]$N46v (DH1skUsAFh 9ÜU8 X%x:r7=o[r/U8Ws^a靦^>USYPƄ`փdҫ ,q24G궬"A^E֫\* kB65AQ$XiQ0Ko75718.z_s>.WpT={g;Mn硺Z򬎑Z׆8}ӑ@# 㰺>zUsQj ֵDA W?ig[7n^{}^gm[b֕noۼ]r{~kd(t$׳oDH`%|#F-X8ƺMoJckEr .s2>wBl9X1DDDb j#FPG u}zUk{]%KV<ˍ4zVQp |MoAFCkZ,I$"j#zb(ԒQVWO?  䭛sXt.ٞ0\"EPD1ڈ֢4D!2]^ߵx+枏%[&*er~=oo뽖vz8V|Va7qj^a^q5sWN5󺴳-it܏G>68Ƶ+|1"k[Шؠm]רP<̥bV[nߦwSʫ DE#G`֢5Dj5E>I'J {zիf2<J;} ՏhA7z1W,rFAVb ,PJuZ0i"Fwl0֩U#YX|cDkQƣXkQ,/mJW?F +O뽵7Tzdރ湎9.lN~:TY$\  lDbA $i%epS7~t$U`؇̊(F"&c$%|8ѭkZƵƵ4YT/Z+w{=ܮv C圦GSw]_3Nj9nEn/ctK3Z"61FIYEdn?xG3,Uov#{z A}l^4Y_;&0b1֓;o.xy eC nHie{o]mFČ(D&6*ucʼne9F5cZ1QKw:;ѓG}n6'a y|30:k^?W);=Q3bR6D,L}K,d$KK,Bz~ƤQG F)R4Yl[rM~DZXֵllPd5楫,͊^w>jyWgTnc>ŭGߤ/0.+^gbOap9xwrns3G{\]4#@j$Q1 [vS"nT/(/י~uz~fZGC}=4j26$pթF,M3. Ƶc1,"Db$s ~u?𼗃S9GE<缽CK͸5\U8O9ֺt~)u7s~k#0 V^>= ̜ZCT~b5zZ=DLj2t["OfHF5k֤m\8k(-7ke>g+=:҃:;׻,O`fgs}5d\"54x̥s9}7M&'HUߐw}[َs-kJؠW&A4Hb#aRDF[F##bFkp5 Hk|~NP.:>S~+KWff*TS$=' #X4 .KK#&_7e=m~S ў([>=Ne(Sƅ8kgmr"ƣ*UD \ҵxj5HƣQpQW#b90}m~hQewEOȺ/h]Vq^ymw7Ȯiok~0 ¨ c%_GMC3).CK^$Y:'oZVHj5#a# >Ѩj15hH3y',b\m.wo+Gl$:Vb=R|o[_r"Fbe9-ޗvo??A[P~ShG\+#Hꑵ=UFb6 ,p$m֢5cApZE<<=_yߘn+v=-֟52tko⢻cԴkuu;fԏ5{OppsldhЍt+sjXٵrqrz<ݻb5UzzcF#!LV2 %z"5cR64{0>bnW`; ?BE:theldy.|Ϗi3;3w6qf Pr^DhJ5hC=n]uÙdOQUJ}_Y-+FYqADUh7XFQ8#Qo?_g;<hm̿lU}nc;ֶ>{z;+G/9j }5mm"(spX@kR*Bʩ+ *+gPOB4ؤе*(b(eEFfO~w"5#>G"G2yq~ݖJq/0 \Oz9Mcu9@4i65W59U+5ƣX#+b3Gj٫c?<4b`Ҋc vcF28!BY^iWz6֣QcR0G(3j~l\~wF4Xv9'y/βr2| XWr[t+W* 1)(bvNzX$<-OE!4-HFȡT{*CR$5DcZ,p dQ{ZLN+9>ok%9=nSgwRcxoʼ.3/Њzr\^ȻַQWg=99+UccD-(W' +/l5^ >͎9^G{ U]) ([ز2IaFs]Ի`DkQF58\mh7⼿ͣKƟ[32SfUTeqBv敖5r婻~C^*=WLA.,VvPɒc~@WGje֕i֍DWo/s,=jFu ҲkiT11:j~I:N,\Zۍ̯MF2 |яZZs]NmҰ5֣Zj9FآkA9_93s<.޽_õ/!YڞSzIYإfCjɑ.zgGϑʢƾ̊NK/n.SGETSg59-GWkit68kzFF58&7ֳ.~M?y:N{G/O לxw!E;N#6,|t(ˢQZ@笊Pړ*YJGiV>{x{.2{py=޾9뗴nYR=s :?WkNv5j#QÜ"520+>%޻kw'?n&>Mգiw_tt^3WrqzX6pouFg.v)v7@v2>UP@pƶڽu& ֯ZzQ.Y3 =]OA˾9?kDj֭m=5 [ukyWiz1?.tNj_'Ks*QsܪFGu۰R\m^-/T\[sU:?Ypλ)SD9[,KKϼdo5c@p(#DkYlg tYx_A`ct|53VV-[ky^u5> ͧ]ޗظ:Meϧy]gf89i-Ε9k%/1,l|ghhZ)w8ս;Z[nIh[FؘU561S:YHjfc$K:[^|>1-,cҢGI l%zgO:QEAٻf̮^}F#^;.oD=_Buc]bV@x[4o1h pCog<͝&&>}:}?yOǫǿoٶ3b[(o+gB\ܺN'JZ/QU(w[C._g$; L \[qKUÁc.ޝη:MHl`  c;y8Zx^|FM|΃՗/}zt:;lH-ӲMVs]bF=>ѽВF(D=z".$\wa:Y{K\=iA A*ԣC 7N w^Mk-c#61\ 9 &Gp%T}'K屶:='g]'v88)s2D%Z&׬۷,:V5Es6.cCGCGGJ*ϠXGʼ8(y}{ѴrЍckz||Ҹ$LUEz⍐Cٵ/Jt qx왯g__.;N+9J{hZd(I,,$cXDskVўօ <`d״:@s5A*Si{U"y`gggAп,tL̬%YF l>C}?;3zl^#4>o uuy;sŖXH=U!zٰUz3 bgٲKf ]A TTU"oCXGztsSwOyMEd>k||]6/,rU%qסvOɳ4=|-w7Zw,9r5kU}Cp ףBEG cCOFruw" @pD(~7pG?}[UY5(P^ FX\hjhXxF%|"2(F{ʞWiStWN#<e|ו;YO@lVJ9r5%*̳zz/r>*K>A^eWKbkfG-|'};PPZKŇ=+GO>HW[чQz󸉬jIȣjKO½4n;K7} {#ÉBI˂̎\8EcV"6:eV]Kt{:9Uv̒6 qgfW Y+&A=j*>[3=tkQj==X2[̹<)zut9:y]-Ϊ{OtAy E헼$ft+#cFF;vת2YyYnpt[:,p\7Υ۶4>\( 8`uyߘVO+5:oAnx)F3i.P,lO3k,PkXԷ,^=\ei25VץzFf۸n9<: mql̎BE+#::Z۲nn>.m{ mep|&+&nՉ֏S^dr*"ҖP- ϡmw;ϫ^>mcKojTiE4Mjytu@U9#ZֻBp]G9{=Ogx,~S7v~iie9aFhctIepPK+_>sEu~u{2+Psi؞ȮsrͮӽuJ8p lt,iN -3*u}}XZ6tz[.Mޱ<$x #4|U\5&Զx;7Dj :s{K>כpNϯv#v=\t7vlE],ܷbig"1F4Fr1;JʾEC;L]CtfԐt=w`t(4} ]AnŦ+68D k E\K- szTU$U|M+ηA@2|{OP yGYΗީ1:Y4B8#b8P][BfxG~=h2fԵ3- kʳ:[ r:65 W1UFsGX5V8+p9z], Hij8hu2"~L͝ݧCz.ML-n'8wZΥdbU"Gb*ޜ9O!~V[|z5D4/k{8.O'yG?.2{V,'Ekb5H"FMe@W޷7օTQUr:U$>:G_PkQrw:ɪСKS`UZGAjlc*$l4oy/xfE~F:>ri,OwnNѾAV]d-\˝*#[ ϫ~VEld(>rbӅUUI%|9Y bX_s[#}?ӑ&ҺAZ\2EUP)5-+8o+O5˒< >.{o<7yr^?qޚl%$1ۯNyjpm=jR781hR<ZFfSkDs$=kNשVz52sz8`E57MS7rqlק4\g[Ah\ߝY]j˲$H6 Վd0UGXI8 Tc]*Ib{~>ES&B:]\s>njEs:F 52Kv{W$d5V}52"aMa ?,TcZܿTFy?<ز)}.8׆>E[3Oabf1JƵI6r=((=Ul(HaHu~UFTȧ3cq\3yz2(f{i^vu*뱹nˢ R}yl,Vxs0a9+ƈl\76]Olu Eaۿu>n*XzԗtOcdk6#G̦K#X{!NʱFtfпd^rTǣz(#*CZ{_o.Hmu=JA^| ŽvޞS BA:(vWo./G;rkU<˔ē\V۵2\ZyFa$h#5F8=A^<{ 1-J(}lX\ L\܏kFLo(y|55M粞uHn>4qOG X5AѶL1^>W5*Pm:,YYـ3)gbs|]}92yr~,&~W-kVuh{FץUE.vE'B]bMLj W9ri<^Ϻ X..9oIWFJ,ڔ{ЮAYYM9C7k{_;Ob j52{^)jdSe;(6yoojY~d5( nFq)=\z-_yc=6ED8s"V]?Qu\\F"+#\/\W%Q"+QAI$ H'zh +*RMZ7oWoRSǖcdYoA&G<Xt]9svse4}qպ^G"8UD#cv9PH&iLKmt Lh"@Koq,@"! ZDLOF(&4!adBRLL#8D >e4ʹNt)&b $L aXbc=tg{ڜu]2UJ2L8wOMg Lۢ[z;`, L"T LՖgѶ<7 ,"IB@BQhH%1Zon;9yv"H 2@E))@r.i˧|guL^"h&I E`g 7۫lm~Ͼ@Zo3EF>,O]+gtku|+n-;LX"I [riò;µ)חuicX(L`HFܱ]珢VU巢ceu OUYc`ȧyӟN֚/Cp rt`,Ƭ2)\Nx{7) }ZuKLzq` mzVxL|޾e"_]'6L$L@&W5gXG/O;neϛ*u׋ ryI2&U"n  qODgr[6Oїkes۪Ƭ`kf~:hkl׫O?޾Ud-n [Ƭaisxuzώؿ_&{rdi[kYD·+qeZ:7νzZX&I'O &NQ\ MBe]WȮ>)m?G:xߟ\b>fec׀4ǖS:DVfְ7O'2ND+Zuwm<Б2&S@V#tcb*Du19^iU#q߳妃زS0%DL_R"wkiJor nϏSLbg\ym~:HpwvJ52k@m͎lq*V΂@?7=3ꌫ<|G:z\\6n XZ\J/PˆYƞJ"rmL+_G yӳe×p :V+nF W:+r\_HBS3×<9[>m:p &Ь@n~.8W&"LB"zm("ɕyǡNB+UvNǓn DП\w ;v╅k vD Q_]ssʱnOO}cH.o?$ġ:CԸ'XZ[E;YR3x"^7_-"{:|KklyI 6H'/;Wz8] U%=$[cY.L:۞4YeW1u6]xspl˒“LM_Ty wKͰO|&b&^W7ϛ V.{V !͆{mפMO.v3jD0]w/}0פ9e{caNsutb"^.:oÊ]_}D'w񾝮 [ۣxcX_t1oSԙL4~߹螷G"_0ai9^F_g>tܱkz}SQt|Wzgѵ]ʭOhR,DDy0-<}O~eɆV?E,L%J߯`OfϹo]N~"!0*iD(0#_S{4Oѽ?ʸ#)DF=7%pt_-uMUZ@L '龝u/|# 1j/i; ry~޸;{}S"J&k2D*,ȡ~gz_~Ǘ8QJ*-i_^%>g˯}O8a7Ұa3Y!Bl/ [}[?ּ\PDȶ}#OSR=/sBDC*!BĀDBU% UiZ%(Zֶu0 !XL "de^c6EcYS ,VPL R"%332 *("7}zLg{R^0kA* LH D OG ^k9J!!QBW觝6ծm98h 6B !mDY kњaӅwxS/`UTB{*mt+o.=Dsg~p6@% v[۵a^,c+c̀6B!TNm3T Lw5\5s~~}\}!" -5-2D"mɧZy=TW?/6wMy+O6t+2+Ll^׸be{y)_Lq^4 +^JZ +;>NL%0Zm3rT5%0pNv{3jsŎZ\q]ǐcpdχm{A;y=< ۫ϙ}g6}Bd zt OO78z;#IN̼h_6ws"p @+yסÓ Dq! LJ{m{Β͎5kiǮwpualeF-2&EX׽` \g~9z/.gXϗ:rбQTA25 N&-Ϗvɏv_ϗG%t}=8r|~wW/Gvqu|D&O'"G>1Zme ]_AOc=>_=ste8Ԃ Dy 1~ܗbՈ "y路Zu=.l}V']=L[Fo,B Dw +y w)k[cTHvӞMksgpz}SI:~&i6%5 z}o'.ގ]Qɞ?= h)pc֝'ǬemyԘr߾ݝoe,8g4o"_N֑Z}@Zח/W9^ҬBYg.O0YMuˇYxz?7R f`,߃4_<L@M}~zs^KM-x:k6Ԉ~[8>} ̾\t:0 ݾ?6}oBQ/3Y{lW99\|@?wjS3g<mw GJW(Rt|b /J42z-_3=0wU4Vvvt_~ZޟQG\=鿻qDׄ*7GZyxHgn}f^_.*w[~|>;גo~sGXJ8# #_~o;7ҕӇ.ycQ0:e-JϱpcտͧtV 4G\r?EMvߧь%;Ɇ3PՎ<9ʫ5ǣ槃R-ӝ!n"~ҜU2GMxtc(kŌ$@7owc(o|5~M3Yi{2/g^3_JNo?@/:^OӚx_sBȉInϽ'V>>n>,)tҞfyWUy"i@TǾ|1ҝwfyf!0&>;jynˁ( mF]ޜaoKI.asTWۦϏ}y~wɬtV=q2olk3*+RGV)M%׫.uϏxM[43\NNzH!nb]+KqF~w>/=+\q% ;@TVdЫؓU˓=ߛk4^a6K9LJD v=hNzg ǁcB^o#Y@%ӇUY?>j֕lα? k=-CK_S<[?8ͭ2z`&i? 'ϟ<蕦#<37ѷbGy-ֶ'i^e& 0@P`f3a湬k5SPjmMFkMQMf}ĢqemqmYpJ$ }h ;:#Y390`)ּvgf Oi~DP !$YkZ#Zֵ5ku(P1f#k f՚SjfkU`u}Ău\Kqma7K DQ'I~ݷ-k5x?ZkZև.Mcf-ob;w 1]fYf1Γ,ÆׯkZk5^=f>31&k5fMVk sT5k}]5$-[mm BȲ, a( Og~{zkZYd.Yfm8sdְFk] Vte*|ֵkZրֺ]zR0FkZk^浭kZֵ:cF#0 jVjƹkcQ5CP5:[=q0M =gI?nkZֵkZF0DkZִk$Xj +rݷ+ׯUU#d X bx*`4x++N5z+^yǩ0f|ÚֈkZֵk^5>uԧO__SF# a0L\5c\kTjmI5&C\S;ȴ[lZ`X[q2̲ ?IR$v^jנAWH3^{YHn>N VKcHdCh|FkX^5ֵק^:ztk5^:c1zF# `5s]湬k5FjMI]ืضشYIhWRk_yÇË"I :SA :\I%nIu_adiXF~95}DFZקN:tkYkN t1^a0 \jV5ZRjME5&Vk'--n;pنh6B~Z׍x־F6|YD9# :,b@Ҽ΋ɛ<_$>f;0ʷE!^a ?NkYuWB:ZuׯN_b1L&k湮kcTjM5&ZRjmP1ֳZh$)1FF]]eGCGh qLLnX9z̊A46Ce$ֺԧ1Zֺ1F# a0LkƳUjRj-EڛV05Mvlj?w/4ՐkY#v/H_I묊$+rÌRxFkN=}:tֵk^:f#a0 \5UjMRZ*qQ >9ep\Br247i)4qʷa'K4Ľ#3+PIR>N{n']\>86ou /J#a}g)ފԉbReDr!1[ V+>gztuW]Jd9c#R4EUÒf2`qV_ -DٌҼ}ʒI$,'8>C4 #aFj3ֿk]zөC#Gz׍fxkL&cA70#&N7?iX%jV+VM 9AgZ2tR' i\`4Aa 航YL&22<8=MөcǞ=(E60u+݁C< $,L\jl8 t+]dN(8E˜r r8d7.qPNh@弟+!1py8q} iRui4HڋDA嗈¥Yd 9ڗ`* or91 d|*'12NIiD30-\AÍםk6$[ g͋3K#Ǽ Hk^K)% d$Np c~fڳNf )U>rO b66Ņ%9ase419q@ˀy$myr?'$kbA7-OyxS2HXըȇO?o'+0|7L. f <+$qU_ pwŤ\b8QܫVul96Dx5&Wrή%l\| C嬟Abb>R Pzg5f'RzNO79Lr[*QHsP݅NWn,sqW˂ce򨻁l'sZֆ0`r\2 L_ÍkZ:$j=-4U'FR;ihԮo&nJ`ᠬ{O.].66Cfs dyXdMt3ư )?4gִ>yrO q1~7Ԩ\Շ߳6=)Zƥ.~_5u9&J% jH3NcH`ʯ̥\c\2՗ x8 <hH$۷1-dr'{3ܷ4S/ͺFH[(41d:"'YKَeyR8<9Y$KQPrHXK\^2ec`݃w8q eCbp3{ [-dhzA% e䛕o~W^x`_ɒ"4ɕMQU椲f-!_`7gu][ g'Ð8<8_ 3#5)mūg!!c-6|aqJL$N[g35ʜ;qܜ;|r^}Rf !.je$2+Hmafn=jIFGG=?eCp?1kr֧sbݨ-Y?n6YYRP6K%Jt n_IO)k.hZ2#R p3C'd۰u)bu?&9?r,\_Çf{9;-;$KJ(>-L[Z1_ 1,˜<*irQ8nNdvjZ>׍}'m%f)7 1fX< kOX#1>6ZQ*j\?HAaX+VORI3%b<h 06NyGkֵk_I~7RJ"۷߷m쳼LX+ӠN:ZoK3ox NhY`~9xG.McU C&LjsYgq>_Ȳ*xY22hVakεkZ֏Nx~4A:iߓG?/rs`ؒdr,kZk#ɘ~RII<1ZUׁ a=aD]\Wdll,g/^1 "X{7]Ul/$q5 C~ZkZ)kVKl[YOt{_N`r/yH  ƫ;{߃5#>r-6[{&cˤ/"ƕU-^@NIlA{wy|ēn$YȲ=X+ԡev߿g~gο|g'F"!pg6,ו|O3^riԖ~tVLjl>pQM 0H'ihYj p0{<Q^0o &. dr#ڕڊ,_/ oE]2mN+zA|vLy 8'20BQ dÈ1Äy!j%y>a,$wZF᱇NRu#,GVU2׳@S(md{snkzJRV q"”ɉ8H.)V($$Y#,s\XjRdXӲdrKBY^G0yFrѷ. 4u#DhFҢ?Xj[J`E֎60x<菙3=YL*GCB:%nB5!d{ےnIn~Yg$%(ƑrKNnj@8VyU9mkg5'['KaJ XJ(HrT"7o{obMB&~S`c1HbT+~`hj!@>N<4p SHQ֪X0peNB1!g !U8Rq3xے~?S\9ܣjlKֲ6rqq,J "#G+9 j4q ;vi_oz? QvDu8!bh: σ0`$b8pקNu 9w%$ؓ:Yr*C^1-8jn6~N/q|7V5i\љ#+$, 3bҨ/O WG wyz%g^0-XbмıheZ(74q8AuZ# y#Z0vYd)q$X9\w%o 3ZkOǭ͡`dqIAIvU#(ˉSz[Nkvg/#4Rrl8'ɟrU(mЈV(.8pʱċQÄk5!կ'TD%wܳ q[M$?%Z%fHc9 c*`5r29l+-XDJ raWhJ˕3aGfFF$ÐdxD2vETĠ2Wee_;#AON??N~h C4k$5+V䤌XYDmW^JKjؓ*G>"2GʙYpՓQ#lDXJTS˳3A3/!.nCUP_?s!a8 βE,3#pG8p$浭*A9fU zN<2D ZV e~Fvi$GgJmMld2Ǫ]ᖫ[!8?a¬WTP0btd)"X24Uz3w>>3]Hoc xiioK+ؒqy&lk:jM~kV^9&mc.LN_Y;ɴ[!shuԡ*He+cH9}vgifJߍ>O>GaJg&(sXc/a,8h'^Tl8|<ݚg͏亜l+F^|4FC"D.F`icÍúgZ 0dte`B)ńlc߿n$9MM?=K1'1j͛VHMBJ@N"'4?~X{v2O`\QaIhx>+B$Ȕfl?0`sf24X!LHQi 'vi^if3j>>'6XKᅫIN../91O,5mJA{ e d{YOO, bF(Ғ4ͤ[*'pXőxqNJQ1~;±cp?˘_%2PɓdGUZ1Hǃ*AbS;X{Mf9d;&./Mf[7^T*ΞV&|c;Dߋggwf^|Kvsx!Åu!|9^a͡W*ʍ1f,YbJ_bhX* \ɉixO&I"zD4cc~nOw{ ))jm۶l'jW; {U#x9ERrAHmUisguSV8U2sAa274(F y9"'N:D l2(\֪G+ID-vT F>1Q[$ӗZr`lD`^ jbZ8ӞץeW`B5dN0Uh{;%H8"nKIwSU9Ձ ODWpP` %p&>ܶ hxnŦ>BA;]brf,Ԓ(B`{*G@ᑟ:۹kXcSH pbB k >YdB~2r4D7WV;'0l>FQEJdjceZ9 $I<9$M A PQA||#.es$Ѵǜo ڕvBG$iv^;br nV08ėox7*h-B/5I+qxL TG"Ȯ6@?az k hks_7/,K;HzGӪ3^c?7nͫ n\&*!-!E\*8\gVZIթYִ\|Afvp#ظݺ"  uo$KYIVVWYTdgbHUS41XX՛uГv>$3;CG?Ç%nJN7˒Ʈ\w"ٙxL3貃YI\禕_x2:y^I$LZo}7~>q\GI,,Q0M2k2ygleٙ ||ׁ5#*|S9O"G3a8rC!|X!8" H9nO{%°bvfnQzO%W'%z;,إN Db G,So>k܀%wJJ٥fff,[D00yB}Ü~:I)JKז)"- yᷛB[ qK3[Yf#{3X~ A\};,̓읤}u(@ay'$75ּoZL$hwgj68`:,N,J1L#{7mGkyrC]!,r3MKI,Nqlbd8Y䶲KIgz+^ksX3@xL| OggΊk9Ř,7bX~GBfIo??dtI,M$H'mәz9!X:9~:I9EԎ$KSJՆݻ769ڥ1>rrN|trUj[[>?.yc99|}& ?~D,[vI"ziylؽoyL2pQEg#?Fv*fÊ4,A6AsZ (68?pA^fYE;]`&wLy+q&b㯁IkFlmMa}k:A-s/x~܄KFo,j@۱gI-5נ@:em9.2KV!J,B[Ĝllo@'#U,elMrh8Lcp}3ٞuD8,7݂, B37W`d Y5X XɆ%XK1}.윓ֹiU<`Y+r?*5~AfJsYGhV(b66Y͖ٛf-4(^u%J`g<.\8^vHձ%ۓA,#0y>OG3JEǎRD${"hr^R/'~f^QC1J_ʫK3՛8#;_m'\}"qرggf#QP ,N/PL_.Q%<ՊZOBI3;aRiNJStF-KmgK2#UN)|{Hox1Y\v09EHA$,e0[Z׍k5kZ}w{ߺXSgLxKnžN"zFp^)jM Idy;vff25O@`kZֵZ#Zѭ}畐v&dž\`y@D(R3d3{5Xȋ7[p [ >t(ўy5`xadY2hֵkZֵ}CݷŻq\dr<_g2[ QEYwVx,䕟y%iqbHo:+|;$f0d;+,|01I(|xD` LNF"=݉rdi=זi%tV%B7۷n-8˿!jy-Z9"~Iń5*Aa@εIz.Z`^vtD8sxA0>O2L|f\$bIq7C~9қ|M9 db29fn둪a0zZ +[Ik4lG aÛnl!ߚw[V[/+ rrysٙq*g1$00`Fmp  c|;6`Adx>[sOqrWEܻȅ2@k~UjSjqWc®h""K7a ~`Q>w?ggkmn |/v7&ZKsUi`H*kY E$XiֿfJ,d0i!w&Tr} hp.} |Gx<k7x0yfyflY8$QV"az vڱ(FÇll$`=w8~&nG<sgQӔs  /ge1g+MaTg+hG5@{Ll |v:;Z `/㗗~o<{.ҽ/X3ɓeP0c6;RF:22"U$ 6yۿnEp<'{~ǿaؘ؏Kjl̶ 4bhE*e+64CC)\\\ӫb ld5ou_Y;;'{`!?`YlOz[g2\k1C(P!IDlll X@pÇIÌ61߰uuue`|M3KndLV˺-ק<ɕ+GkG\w<ìmܰ֜EMu*\8`ᕉ^O$a;'x,3\LA&L%D!TBJfydg'LGÇ"ĈI$8~:`ݻ+YW~;qh^u|zx 7{be;`XbDf,7pMٿ?J?@ $<1$#FJO[gb=.\q_q^HIUch&^IG$~#=s\WXkĉѐEE@JFW JPG~Yqj'z=Gz= X֎ոBa}"I}- XDsEfy+EV($+EZZƷ~~߭߭j+G z=Az=G`s_q^H$E!1"AQa #02PSq@BR`$3bTr4CpDcу?-watB;at4H!_Qkws.su/B2̷!{ ʼȺ ?]C?]a$Hqu;qu;wc:y/]o'at; ܎!c y$>w]fw;^s]~+o.cLĽwcv;aCvA>Gc4H!%̐w;w;w;rC1a爱{{緕ާv;y;v.Ewc2Kǹ%ՏsuSw䋗;h㖅:ym"峰ԍ3BVccv; vAtM݇1$1$ﻹw;sq.Bvbަ#c-SЗBI\LZ dhк+;v;orvM݇}В$1H}Ns.sww;sw}-CFW5ezr9D3 (?gCmͭd+FSjgtB"UeJnQ1 ߘc.v;c$H&L!;swSw;u'c?Q9pdS,*7gWꢕ$a`m VŠ7bMBT 6j3e9NeJ,evvv;cv/]cD$4w;sw܎}%VF+3IJREIJ!" !ԥg|x̧Μ(j-*Rx%]QE[.Uh._N 9(Iq\i z;!t;Y"D$1u-~tV)`QJbu.RxvFVY4Dt*?GWeuNt̤휣 쎕)qdDlɕa]_k'ԫ WnD%gԍH+ĝ<;5svv,2H$!vizň̺yxxFo"s)ɒZbRXm|ʔqd[*%w-Jv9qFwD*s9ffՐ,c?}q^,nPy-PG?]wc]v;۬4ƚ44444^]]"ZSB^*= TNӐ1KVs!QZe7XҾ WsϚdL*J@Ŝ4!,'CQV+&B*l򴋬ˠ n[3FJųg2%uG+qN>SJ7%IRd\QbN:jcJ9dX"cKNRr93eY^ 2MֈČ0ji%$|Kf*YBnC\H-+NJ")`lp#?[dYNߡ=t0T<ѷ4^9Ŵ)ӌl5RcteR%24bJwT@32e#(S$cF)pDH8II?JZUT𚨗کGQd1]7$.JWkS}L2q^%R= 8|#Id6KF`J0q1NW*U|6Jy,bQk]KmLвFT1d/SfB&+*vY X9g hBKpMc%5BMg.gd])=tv/xbqSS}-7ɣ $a# z٘n(/9o~w#C-ބyny8l_=GNyn q0ͦaqG1S]K-Ub%s=v:ZW\08Mu1J˥өp82S5s/o~^}}a.b|_o/~-LWs%:]{pM&V8OnC?-]Q3 cI!"8 88I{ZHоMv?^ΛkB;>RIJ<:2ӔonqZOM32z_a!Ğ8:\rlI*%hJ4P&SvCpvat $;& 5(h/ɹW0uw42[mtP.ɶ61XEK([ĒO"U.rO$<<]K^j}M;L82q콍2,ߑJ:8_F &ϲKf(VqMS*NmT6V-'s%m̻̏A#&6֥+38g 1O.d\ۖV#m5/@j]j(+Ϧ:j_gZIF 14BttYjA2gn){]D! z223ݟ~WK&ff/ȵ"۲2BB(gb?faE2ݙv~C/-LȺ0MamJLXatls rv_WNQTKɮel.B瘪J獲TOX8R./0Gn2Q.^b()R)'2Jhޥ91FZ_v~^K{&p_371Yyl|ɑ5,$zXɑN}l`cpE# Esá~vg/zPhǰxhi܋evo lgI8f,KJOF+[Cn9cQU:^HWBʭ&Ccܝ!XEcLy2uT7/uJRtaUYy/s)!#ži|F * nmw&xt‹'27x].rBN_$c+se' dmPˆ|GPU"4bO!/m*VᘸZԜpmyH4ԯ2-4)YSNi2V%!֓xtLŪ^31[]Ⱥv3eىQQd*f%GVl<-/]㱶]Dsz+ K3uKANWIâFt>Z9/k=Ei]&MRj2F_xf˯wY:ҔqeUHwN}ER^Ժf2ͮ}=GR1;nɗFE2,ieoVUȲF[V!Tó175c㍺826JСܯ^m1/rto͉B>r11aq_1J#Ts# Z$N*+/,Ơ17,QCr).l2O~_R,v-HPrKAe<$F)E.p}K /t#Pnv=#'$*JꗴI7)ORf(8qgG{z9jJ#?ίcG )m-_SYjc:b|sӅ.+{0VES2H26Zs E ijz 7~Fu tEŒu&Qj串4/v*qm*twyKuKר Br^b%rP$eK sbKScKٛ,LG=6w tj#v;Zi)4~+7(rBJ{qr0k==z\x[_͙ˢB-~Vl[cJ1zւyԙc6EBCz5*QΣwr0mд+W-YTϐsQCSV-zqb{.NjMAׂL^u%)[|v;ۯ$$Y{'|8\EohtjkX쐯j'™zQaH-Y"E9b5PГ^{!dNO"Exi&mO;9=\gI/ U\diIsЪm+;?hF,VDx[=뙚bNz!<7BU+CMnCFzBAGhR r*v-<;pf >iFU.F*5בv=TZZ14kөeuXjFGN>Yu(}[^|uP鉋 E OR< *AVV=s)5"k{KtY#j?)9N]%g fy2/$QOc'hj7=.1FzH}/2q{Ddp#ħ"Q9ۙ_5bU^9E $F0p?O6qu$[4u)ARxu+OdRa^F^6;j[U1[}KDxt|˷RCx )9t0՛cg' R 2tE}C\_ě|AM>H8i G-^ Udmcpt]1OIM2̝Yb2y7|R.x=%VmVB|\36hm m\]˱QWQVYD+cv7TPr03cZ10C#%Ԓ\AecsZŨ 2̎8vÓݜ4`4njE1=9j3%#1!yWx/tBwf z̾c:nT̕Y<R2:ǃ! RMQ nB;>c/ȷ# 55I`lt湻go{uV6aJa-oRHVUWy.F%ؼz쳋z8˸k75)X+>(p4[}3Op=`M/J?/u&gbz/]Fݠ[9n‰M( )v` KәWb ߲_vjrļHꋤ\#Q3fnlec\ghS?F*rZ9ے%y9oQ>/S)ű^v2E5YrQE1XGdX# Lbަҋ1Qwg븿%rEbz-IT<=9yMar^,vC %{m9\|?vxNXUaCن#;Dzΐڜ&^ <0Mt^$ԴnG_{_=-FKjRF-F~rfbPg~^jرQ2,߭ݗ׽,Y[6F &JMJB8gD=~=в%ujxtj|Fo1X])z{W)m5-yy+#f7cERY%qםzr^Z_4O4/1eF}5ȿ-,hg.Hwgnţ媿žY>jC;E^38.:/{o. }ّ17=}u)Y*Ɋ1s۱Lj1Z1KSƝC¦0')E6v3Dr0S7lPnlRIIXL]D\琒ycl[Sa.Y2wѫ?*m0YVeb|qшoDVgؽV3/G/4s/Qv E!Sf 6]:{yvx|בf|nc=u!ޣ~?rdacM16Q ꤴ߇4 C+- S0!Xc' )Q4`Kc[DTRQuS3\̬V#! ճƢ|tjq?΋}Q2cDlO!ȹc%m׋92sfeIw,g8N8ލ*ܾܱ{;oe1[D {#&9|˟Ⱥȓ׽2fٍqyY\"IK$axQ#3xFFlS٥Fk'N|ͦ 6lVP‡!<=lq +&$z8U%EHÉ 5aJ Ñrb©i\]Go-U12'hᄗOpgE{C/imȰ[lccb{j90E͓S ųUj,\:!G.cm4͘߉Q F܈Yt1LJC/r!ⱇh.BW-,Y%&I,Ȅ/HRiIm*9i׿I3R5˨x>D+^ yW$ȕ'Öy¥K1j[2d[=E,8ksèQWq*1S*)F_nbsgwr_o6dE޻=3)31eїOq*o1֨zq)l;6 M]nln1P-+pFnM#Ŗ,k!FJF'GsW,fqKF$/ ӾkyǑR9h6̯"3JJSRVd|iJ9IhW%VjQɽS173ZehE){jN_!gc,1&E&[zQEUXByF/mHB囧$DԚQ)եqQ>sSYv-Nu7zR]Iu$J䮇' ({"間3ܷew63|E45c/uZ3q5lRضtRΤm5pC %";5+Eq24Js,0*QYe+/# ھҸZe,EIIsyŝQ#%lO+= 'KA찌*ֽi8\(w!RUXs]_mVSAO6SAuW!k_!}h2̩BYU iO RZЩ;ZJ9&{Gd ibQRmMϠok!bFq~F?/s}3C nɚoua'sŬůw+iъVH3dI,w3N7-RdTy[>s;PPVY~EjRF {)QLIZRnЋU+{_Q C"8u8")ETRΜV*Fdj48սrUx]1o![1hdIZ&m,\E㌩Zh4Y ZI=EnN=a|vؿ#bFGXw_vzHzɗoϦ7i;lԆͱ6מhȌ"LV#F-"SvR3KE{FUofIَ"Ĺ#TХI5l~*کd\QS^D\ܕ0i>Ѵ]&g'h+cʔ#ҊCwW*^өB{QEXƊ^O zQSo=EIr.d][vhGbEG*RM1ĝ9)bȅh^0UaȺj'aڃ.?Q>^kȷv3Bomo~&dddY5䲸˲(?5U.g0Bnuj_N1=IV<"E$JnF$\rb7RYb2y>Ge}r|(Ϩ;W!luCR);Ez"݉hbd<%aC{GC-|u#eOOH$U'BYG ,Rۡ{%Rړ(ux8˓#*Q(F4b*=Nbh/x2nXc/22.Yu17TnUp|Xt<`J^Z1uЕrB R-Qi(\^$F/*ש|"4bdo~֤[ij+W:4o؞7Fn R6x%CͻuV|O.sp!BQYX1}ےZ{{Kh2L>W**sE=8Ԧ<'re)(ϡ]%i2r\Ӗ(iREPh7/22ݟlYjd%.dw WLhJWB 8p(f)fϳ)N혊ǃ<7LQQ[$(nO9N*qmu1p )SKHcB*NIO KB1S9ː:Z͕–V̡SNvJiȸVXj%6S!6̡:lKRWe^[ٳmFW2&JLKRe"HcBhvvDbI$ݭ|HD\,TpQ|NWF5k~{nۛܶ͐*mRWF73x{(:o Dr7FNYa+|d~&5l!^8 z ; O( rmVג*3A,\݅Ud)ANkvqTid"ڎ}7~G>\:DvxJ^#[pQB9d&LU\ˣ)l&5N%#XRaŐ+rh{#X -DN1}B1xm8ٴnynyw%;&)Y-&Щ<ڱᜎz˹ qMDS8O/ECHP+؟WQJ㖝"4b/u RbXIZTwI, Ə2G+.lGBvIIW¿% ;tȾ^K켹Xs؈+sE4G:L]G•Y_:l2R]Fy-w;o/z] 摅aQد_w`ʻM_ ŵ fVF- ͣmJ;lWkd7s3%AzOh63PEsBZ?塪`Wf-A# /.D)ƪRZv'ʷh{u!BnWʻN_svujhk͒&(rvm{hY ϐ}޽S!Nrbt^> {G.)ep&deOz,хK1Zb2~M}F~Τ*,eHĮĥc3'"uFґFc̜ZȌSDֶG!#MZ_D(ѳ+'8цh~e{x_20C,rVCI+ɑm'b.E}reMN|˿d1T"7*헊X*{VV rfK3rdZߐ.g)Abڲ="Eie6blJ-`NNZrAGA{jB8K&8K/gx(# !Zq- udGGcçPBaSx#NWXVKr|С ㋓#JM ~!I4;9! jF/Z}B.!]DL̔ߩfmV)7ܥYENyj$2J >_qE%\G{`ȋ i o"geJtuw3"M2ScQɧsDŽv`Q08-zo.d6j?Ui z 6d)ů'*٬u%2ռ`,`mע~$6U7&JE/-HgXT;Wݖx\ⶤc!uE)#jkO$UU?VgܥUe$E[)s۳ߡ$qH՞ÃXKQe: FkmNŲD-? x\d݈85bҳ-TSi#)wgrөSUI8~-EdXqBF=ڛdb*rf',?>dFz?QN_|3(-L\幎ړԨo''$m;5ռO(OB|S|d_ݞl$e2diC3UԆhJpqAb$F-$i1O26QB3 *15Mh:0,ġ/AZvgu^sv2* aGcl2Mi!ғn$_}brblQs,ee=ʲs$7R]Gh{%eF}!=y)ɞ-V_d.mܮ4Y;GRj6pxB\LNQ]Y1ZyLozHT͍EDC)$GƼbeE/l_V%冚'G\(}[J3yc<pɢ_+{R,aM.Ė^33ݧCّD5Q"3~!SmanŎ$'lŐ^K\Ku\pa~7 v$=9dXxk3M>sfF=߉W^F/ Rrb q%5M$^ kԐUЧ5wFhYyw݅o1z='O!ыMr_&]a]LFe,X属1Nlu V0,RNH{e塡1krt.TQ3_RVnah8lsz2W1VKÄxwT18\Pw/Ydjb{HDZ#Z I?V 3Ůs-veEݞzfK`\j8ԕJGN(<:/Fat^Wko"ۭ\RRU#cĞ6IUˠHo̴\ُhW/GlF_j#RZIgyџ?>F'/ZJ-Nq i.~~&1I[țݙ"{-GfHޘcv9M i)Xl9IX>獳Q!dddf}+͋%)%:84!9GK_6`٢4`X渽Ԝ9,cՑ4c Mۘ9TO91K|HQT⹎/3m+ߩO_uX{&7RZz YMa,w;[ˉŹ cjWՍ c™wf+b\DbMmۙ)l&2ݎi#ڔaO!yu*VK.6Y? 6+7V7Q.Wxmrxoy~kbRL$xru*aJI["ZF QfB{\i --v[-ܗ0Ij6x]_gbQ{nv;c"%E>>......."RR" xia:шhEԹ$?R8Kfe_ *̥;BVQeRvxr;(1T%gCJLVzAMम-5 7>|Zz+#*нU3|3B^[g{n^˵ɴ*UbK};cǺȹcmݎat-5ݑ0yT۳3kfͯ_6m_~!Fm?Wfؗ )]=KFub&H%RU*1N1qӤ2124vq]ASjwJ%bH҆N*~Geom療-Af|U_u B ;JiIK'cu-g%oɦ+}gW]M i١ŝΗ1.f-kcv;v9Ƴ_wc; F:b""D[8;ŕ>" Qȍ=L{FшEdbhi,kVKS{EuVy)f(D:1_1Sn] oĭCfyhTvƒXDVZJW<1%I',~\Ō˯6`^O^?%s-|Ԕ2rן=gvOe-Dv~nsa T*'FFؓ<893NyI/#|1O<%Q1eŇ3 e K2N.RWlLr"JҒt)(B/hSJrNoCY\emt䞭6 _z[e܄/-zHcv^cdv<98~s_g9#XBWL 8&bM,Ҏfiyy_Kzz d0ӳQQD6 /Gflypl™)xRܛ빱%%.SMefZ,wq7deJesDj%/9\Q1T#QqusXasrBKM[ ]q)3L!E nψٶXb3(F$ e-bJ5)|Trka w=ќ'k1 WuU'.f( -%=w44deu.gEmtfj^".xRQlS_N i##SR0+*TIf{")%(ӣ7 ND5(+GaU֬VHJo[Ir䄄w;KrbR$guQJcͲNIHȶ^m>͗Bi:\DPmobF83,:$?"3u;nN*:vV̧Ia-DQaÏS~?إ~ >PlҍSQBا-/؇_¿bCG!C؏_ˆ(V !tB..D.DG?(_¿b~?~?ا#?OG)?ا#bCG!WG=!tD|7Š><>P0QCE> >P0QCE> >P0QCE> >P0QCE>??zJ6ol??gSQGCE~>RPKCE/?b‡_ KC(PGCEo}(58(~ȧ#OC)c~GFϏl(ٯkAv ? 6OOWQg)(/AOFЍ=?7zB6olٿ#fOKFЍ=/7z_B6olٿQ[OFЍ=?7zJ6olٿb J(Yz}(aҊJ(|}(aҊJ(|}(aҊJ(|}(aҊJ(|}(aҊJ(|}(aҊJ(|}()()(SQCE?gҏ+!1AQa q0P`@?~|!}$~ |E|bp_|`ο^'2_0=@wo }lur庵_z>D0~`/f>Lj߫6.>e|Yeg$ْI$IeY,&Yag,f1yygzo_"s4χ=vQ؇){fkCmkskl2_9ʠ眴4nc{| Y<2Yex|>47dYYeY~$,$HXz%#ܓŧc#!_99OfsQ Cmi v/r&O4+^>ƣ|-_d}͏ݟ6O;噙$$',I $+my mR/iWКgdޡjNnOwUc/+d),&o Bxxu1OBu>*c:~!1"u<| I} "}#t_9DC+`Ô/_(Phh?+Z'X}o<6 >;+|c?!3| ?ooK/܊x$2-7;@xY\`6qV&qz1:op~Ͽ5e}؏m!}2h?0~`zc I'YeY%2K<>[$dYed~k|yeId7{pGUxXKůͲ5kmR nFbt_] ,!P 6Υslus1"agԖ_WeŐ_DC~LI'__Dg?I~~c,ɌE2_sq''sYn׆Y~ӿv2̉ g6;weh/WOc?+\<X/P0Vvov`}C X6ޤ/dY3$,K2HY͖YeYdY:{CYg/sEA&zr :%YٞpA|^[k &`X~qƹCM +udCQaq9oVA%x%AG̛̐ ߿K=_߽߿y2͒,z?ISG~~տՖxgɜ|Ou}rLLJ%[z󡾣!\6op}5f(9u aK0$7/;>Qvfc|,紟?7y2 >9\m“gY'嵗 ,IOϫ,IrYeY$,.q<$ Vċ;9cx;w.!,C.X<2i!q,"1IZW&L{\`|n1:{»{tg?0ON\i|KBXryaRxyfYe}Ie\S,x,,abK"L 8.ݯ&d-2>d0l2~!DO7!?P}̹ >_O?/FK=)7/q9xz<>6_Y%2K'_D71_U[G}W_"iolut7Gkoh-Gp.X&|iiI$?rG&KBvEhfL;W3i߸^ X,هŤa]G؃:E bMC/KcP~fWl[CQ:Fh6Y+G.1e#C9?x<-mf|R?#18'<,xOc.Qoŭ|m5_D\od~Oax!1yDNQj gxy|#sd̄Yt2g,0V+cl 8lW'IKq> \d?gv?lzOg'O.g3ݯK$,Q=͵0,S zoM6?< 2?g|zE@,,,Ye1~~"~'GRVSY~#~D0'q}7_x@z r!XC*tI⭢8R m_?g,}Y${r0qf<\]Xx~6?Pk9̓q H6>S_W mip#Cs,쁊oyqn@9Ǧꏯ;Xk\ a͂r\Ga=74BQ%"v=%>O~%U<: `C<$ߝmemm|>Yr?rexK,: ܯeN=N&ku:>H,2f}I_..&d2m-8 |m <3YeY8+9.9Vgh K 7f z>ng8`;.X] rGmӆ֪6H}b e=g{.6Nu3 #n `sƞjBn,-ϩ[K+Pٻx 0͓?fexO,ϫ'̏9cOg?Irⷫ?$?IOϣ/H/+X2>x??HXY$̱OIb_p_T8r17V/ğvA~}&D>9۰{L:d3c G5VC+:I5i?&ws~f5:u $npA@ܠRC1ę#o? ,,|XI]?W~:m.خ789,,,,K,,,,~ eer ][c)YutFY5 #؜maq1Al&^T}|~6_goLT }(ћߨ ie)]4P7@`;H4@pr?ydzK g^RzV6u \#:<  f3Fxg,g?Y, bf1a͐G ]3y2 <<2IeYl2,̅F.) l e~u <>92[Z9l:x\@(>hN> 1IDy>e!y-f'f 8]̏=l$ ~i֮vCl-tg/@Bf'rsy>GKK-p0 ,HI$$ɲdYdqd>2r,{|2,; u?Xxs?,,Lg@#O1i/,!Xώ  ; ϙ88Z5fW:'2tːBEc{?hJއNsUK^[9`z yyreF?q=4G:b{}[s26.?(#FvN,zb6HB !nj~&zO%'f|E |g|d ]|3v';mU{,C>дVۤ.F7b4-}=OjgJI.˷-$.kv_cQx0~--5pskS^r;>a"c=ANqš0u<凁< K,x??9Epȁ˛W\`Gmo2,Bdmm|C݂YÉB:IoPw"FSbu'rPsxH]ݕf}8%X1:?v&C{8P~c1; >Ƿ,c 2, kθ$H2~ֳ7 Hxg38 rcHm?I 9l,$͒GĖY$Yaae&Olm,3[mx>{| [m|mm2_&m<天ɳ lBσ.bcR{¸['CqpΜsu7ęB}ZwO/\rGJA S[ʧ 71Znl!_oYeޘfD\P3Bhqw|lqxO#HIۄds`!f!'Ie_ĒY&O9^3 >?&D/Hy <2=ZO d %E rAzmQі/226', H (QYw ˃kSJx)9S7#kF=ɏ~ܐ6|hd@hosƆێ 3y% Fb:~sOb(|=%@I2|aaaa%oXYVaxDbe3G#3<ۼ$rŽPu?wE0#x' $_Xr=_)Y4 'p.wz&ܖw˕]gO{N_6Z[U7G#N_q-G e9CaN[30Џ/y|YeYe#w|Wmv~MÌws 9RrH 73 : \' 0㟡clN΍ س|  |> $,ɉ$y2,S?>^˒A8Dt>Hy,xfG'OӒM zgs^rXc/S|rT^=ߒȻ_Gq4ӄyfGM䋙@I<au0=Ļ01'CB Oa33,OB<䟉?=Gȟ=v~9xO'?|'Wx,|VZ)tf{#l/eȮ-FE6EDx 6{2~Tsl=h2xY8 罊-io xv.9C7.V~ ?B\be<ۮ%c$?x3c;weu3#Zϗ{h{lGgO&2,3dXXY < 2"\;vcX6u]vGCv 䝳|I^-v+ rp;wߞ.1}[=nJ6`4lxfWyU ';]@9#Iqi$~aߒm~Y#>?X峼_ kkkmI, ,!$dwc#] 0ЯqFqx-Xqrow :0>D&,T˗Se6ݮa Ę:l=[aXq'oL5k,Yl N$;mY󐠲MI!$ ?>^v <>߅?rO$y#3MZ9kT(m]GיoG˲[x_!3Sqbr6Xe};?ҙm]@7u#Jc-/ؒQ|l^1yʻ|j~op;o71tALLno?Vvkwm 3??yHO?CŸ]v<Xm2̟,9`8._#mvۓb.΄zQh h]aI CгO%Z;1m0g]~ɬ]Oqzn.4?f 쥳?%X|NY%m;%ՕFűX, 7˃%(K)>67A'?: π <C e?weYntޟ,B $BC,K,YeYx#2\,8c&#ifj3nycLDm.eBL[ɖ'A^/S '*̱z O~ϗ",FS6c'zϷ'bwNEl]SG&;Ā7܁>M=slg8€ٱdWCWZ#v9ya$Iɟem3<< 9moῆφ|Wz~ĸn|Yjի$ՒIj,Gd,,lxdo^%˔gq^;Gml?wSC@w hvBL,d%V3nll7GO(cd\ o̻*υv^,7c8?"4rϰ yD'E,cEXa ,Y{a=/V_^]޷:tg>_uyd#įb*tw:^lN-qqDAR "CG!=̤rLNa.\o)?2xɽw#8,H8?\[ˏO_dGS7??͕X;ƿŖRIg^ĺC#}e &|&"~ ۑe6(?~O|>zeC_y~/,~OwSP[kώ!q]( Nh,ltK2T0l`qOc3F`1!'w6nn(F=x0B=,}+fy\o3}dá! Cݷ:'p$m9^AGO>aA'{ x5u󭭯??/t^W`;N}Df6XgmXHYabN}j|IjiOktֱWNXArf w=k@9>Xv "_7,Fwn?ķGc:]rȠG2FAG|q#v8DfIy x!֑U 8ny ?̺Q.TN;8w^B%gܿrbY|7D0z{?Vlb˞~5tz #^z>LUc_%'Dh?ܴDpmu=́rZ.'{ώ_k?SоM?v|-"m@c0N3{Sl0{&L Y"ʼneHaͿK>:ׁo[|=#?>_~/2^ϛy.Vl2ٞ3?Ł5Բ0 h`]=KG:&zC`C$ AOr/?̌=)gBg$\l{0`uxRy710l4\ëdc#xFd&Û &Y3fmF9Z !]me2VU`~<YeIg9dYd~{o/3kٖONsA@Bci'ݔad۲f*m7$s :ܫ4L@7%4=:ߙX.G53/-!;8ď oe%3Zf68!il+|ww3L,'l'D'h=yfe-g~@E52aB,H/ߋ'bwղպc#i*V+[x$Y<[m-ŶR5M^(ǻSP0Vs̛dhG@]P[be{ փtG aWR,S 1t=ċVw~`CEq l> d9|Af&}2 s6 ggJֺz|v`%gxMOWHRxW /2 QII)Hx:~e%ۃ;l6r?60`jӝRK[;/?/cD)mzcz,jϚςf߇G0K}?e¶IK-\gdaLśDŽX: IDS׵ӭ}$h~ gOw5?!9p-xÏOg L>m> πĸAX3RT[a7w;/1v B{az[qE-Ǹ_, βp59iYqg, 6q&$% q(]]Ӳ.; y@˓ !9sǃXv{ @ֶ;w2)}[elDk8{ {r`w =W,OA, |̼'py-<Oq܀xFeli솚O2y>fEO2=D8MD]<1qm9 s?_ $a-4VEK3: ~zp}^Oahq&w&saThmPch{ ͉}1)l&1d<#yd<3<>=!΋#1\.dWwn͈ nY"į6{&8+n!Ѳlxxgbogk<]lZfh>g͹]/{s̴7 0+o %u8Ѹ$d<Pɛ]~}ydOxqD $?oV F/Z%$AO؍r畦x $IlxrH ,2a?vor&MٓRI{7RȌ@"r6]fMsgfokJg81$2GŖC2I&<r!S#VxJn#Won 'άzA_zn1xPk \I+f" h lO+LL k5\>x Z0\u*gI0GQg_|FN~6Qlq l'4b>՟E$u|i9;RpP?ۙ&8aCt,l(yűK,Ll| >9o|̞ AXg#"sQa3KGY3ş4G>I2|o0ar,z#x?"m]H"?)ȭx{.߈%&=zv3m{rܘzq@\߆bLӱw{O:x8gv_PR=>N|Y|?9m&]<v:2tМn/rWDF̃xkcCp={7S'*NA$;w&OD81'?&;=HQ3 4L{#7" _K]\G/ <|$@|=<o%HMLG,dv H񌥳0cgg']B{s(u7"3qX]ψUEH>̱68ܛ FrtGzEA;?Le+aLaVc;WpzJ?cCZ8fG:\""8Ig=3 /a'Fܿ85nOdm_&WЗmq~r1}蒎j~L$2L숆kj92Y{{m>bH #=x$'2,x3dgŖYy,,>C;3g[y3w d|HZ8JQG\O<-5&XC =\}1>3HlңGU`54oRhc!D1?lYmm]9|yYX:6~fenKh]Z;{H%'~P;ڼ 4O< ԅd,,0a ǓmYI|1q{?X.2mXdP0$I#gG<卒66Xe~ 7$/.v OZTtO[C-P6ݯ@DR x9?V]$\[ip\!Oͨ=g}M9z/!0$\&g/}ڽ˻ey6g>Y\ X빁Nfifb/cn=jl~'h z=:z5 lƝoq%Wf?BJ-mGO*ks-MH[M:3!7lSECXr;R&cw<-юy͓G1k:>s3&!<_99|HKB}Չ_L]m3ʼn^TԬm ̨q3D%{ISNo,~Ӈ\KG[: _ks=֣~19߮2.0 B m3%,+`u- /gzƹq1gq`Yٝ]~d|t1&nρ3um^2o;'ENc[5faa3Ycힿ̆ `XigV)c5c'L,#ԏH]q0`ko迹4nݹLۅɻ,EMq䜡e*ճ/+m|kjڃa ܻ/s!dYgŋ,Hl,lp&%Y'[q ~V#y$YqrBqr e1ɱg ȺoVnAMN{inȭ3cAq쐳Hz u&Z6M:8\?N{֫j1t\cX?6&vf0?mxx7Eɲ eCgl_@XFgcʧ=tK||.ȶmm~ g'~N&e^H^&Xx#8.%牎-?Ix\<6Y>h<,Ĵ!FcΓ"m%%)" d'H9x/sceY#6ym.d8 /軗aKn$b/-9ܫ>tՕfql#<ȃϩ6ͯ >Xϙ뛸̺%xx!Đ=㔞8>lBA%@6xǯ'oj?a'N?wj}BEuY'{e#?PeYe),~$?d"9xrOϑC]đr^g6x|H.[H'3ׅ7Feݻ<]>Y;l H/2!%`{E|@GN#g ,rn [{q~t-k^up\c}$p_5Gk_j}a^_'^7jy!tFzCvG°. z,\&G!'m$B{rvE# 3eW18&w,{x;"|}=%H 3>C_~&cm(ٛ0I@n6:cV ӏ1A&+{DmN.Ed\oưĹՑ]c.]?_W^g %,†;?MKQYwѦ>Lfs>BY_;sd?I7PG^_!RO8>}\75u zMȭ,v tOOBc#䟹eX,;{! $|&vOI8Zl{9Qe?_ ºK:[MU'gk36/`K2D3c-Km-Ydf ?;L8}MuL',mL]O2E?7'~<=2웧8X ݢ˿&0 Kso%mc ~ǁl (6.- eYs.ll=Ȳw-׏'~==-p gR P&$r ūb=g#h6?܆?mx'1.Y]۫-/)Ԙq #;9 -8x8nŽr1f 7.M!'n?CeW&lXx:<9c2DNjpc m]MޒUM|[ffu~6|(`W'x/ t|nVo1zGg|'8WsΉߢ'ԍ\ /-8 Ƒ%`}%Rd4 ֘ HL6pgv Nfk0n9KV 3&`c[X6:0; 7/ 6L tCo޿97 & { Oyy<'g/ <}&Iޓ#xGǩΈ[ =mc/e\=~g&/+Ċ~>.CH - f3 Ix227ȼ9 ?||O9xϗ#ffսr.6Aͱ}O.Vi/ESڏw mvعϴ8K}dہ[4Oi|ϹkOfZEˁE<&{|6 ,69ኵї0DМ$*d M ;bǫ`0VzSM6.I͐7|E@ze~_o?-0Vй8'ӈH"wllHR!#/8=7W#jQABzVyBȣVzк6x< Fbϸ"TtT{vy[3Bqt%'C2I񁤊u;ZJ 0w HC;8\ թ+lrpL6p1!ܤ\FC|_fbc"e.*[ iV^ y"kF޿ݟqjso>>l>2xϗnL} ;R=ohq k0>olr.i=@ޛul>18V8#;8X3-GmfxIay!pzs|XE !}'I0g*9}ý1l~:.&N[5Yx f]%IeY3'>C[6vX'.j0]N8\d]vad)ֹX6ym@ho Z%E{?5 sm $Ar+ 0 ƼɈ[O\56 e.d|y'pFt2Np}Ẅ́l'#`d3oHd`Yrs,|O,X#\\d{1l] /E.%]@JR|]ml9m|3>K6 p8zygedDV|u9:?O-ȉDH#ECG>11`o>owvLȎbFB /w9̟3[#sc|9{KTz$( ld|mmK&HYd8cӑu35n 0 9qؙVY ݢF5C: B_QdǕ8Dlbx\7 I~,Z`:vx[pFpsv?kMl{;A͒}a>[لAx0^y0=W#yozmX.aL~!m[?psnHBYT-+WDy<Wa:olg3/9QǨ'Ķ+xplFzJ?p[q3͸sp &tFNOryx,wsQzN 0GV'x>8y{?||9_ HֲQT Y92 cd+.\ ɳ.A_Ik8$v{ⰥMWBZ=sE] 籜bbgg\b/ϴ߆}Z9//XQ99,j_{D'f pqNj4̱7ng3niN.Zdn|_?i0c8?->/TG|Uyui0Ȥ "{cQJltu2sۉblݣ@Bp.&La ş, a9Ql1^1GO_[ G~OH`y/*\mpu>!~ ȸM7,~glᘜ{E=K4gd2H.m`ݵ6R SOd=c埦kAN'c$a,VEt9~Co9'a[<΀r8A]f85{WY' >x܄ퟔ!Ӌyuǧ~d\˲T';Ӑ !}4%(m:/;`^wG|2x>[ไgca9E=|\@vat~6A[ mm~%Wk7Mc˓n7ryTHWCdq>_of]:y',n!?>O72W,x9<ȈBj]~&;`16&x8\ > y?>wO3';@xP'ѳ#= #f'֡.\7\$(hB M}Ѿ>x'oHav;0$GKdp(1,~0կQ']nw&鋮,V NKitr# A:ʰ< ">WA|I9ߛ"ɖY=TY"Hܒw4&klG[plq~x}K3_ki qt]H0 ݺ<[??>_@Qc(UZRpn/9q #idg?@i[N>,w g?(HXA ȩ:7)HN9[9ƛyZB_5R{33=j A:l8-|%$ MG,.:wwPk1$Xo^KlTfPm/; SK#?wMr6Yi#~R\1GLҥH0m&?vlcm-<~wo|x\D.ZcG%hFa0>"]3c]܆By&N}_4}3QgxSd9~-}[@3fgm|瑲~& j9KK`DWչsߴ޴$ OԀrX!Y~T/;dKzd~[Sq':ߩN?d0593A9.s%ɸ{l I~Q&q968Ö3y>6'LZtܓݲe/`>C| ,ˇ~AyZ biۧ0esmxb2:?{_9- HծLw3kta -u.&±h\/-WNjNMu/K>2.V>#}ljˇ=]$keη, _=0%F2[6-lžmØt kv7{ oȺ6Nb~vt#fmٽm\"#eٌp\̢Ec Xylیrknv3(ci?{~3_K7YпqCc][O:|oل#ZEnĻ.o-&;0# &0yCLBvqj߈}t:?Ya!EǪ@< ]Srq8? i8v<~'4zgGPò./P5ٖTpl;ɡuKSN?}fC,ێ\7~b~@$NY$y'>6ᅒg@ mLK뙯F܇FR \=Zd02໶aq[ {1+Mǧet0H#tkfh y}st.$PU܃TNrx]Oy;I1\% 3ՒI- Q 3cl+4t]B UgC=Z0Ah9.60nL~3 5ͪLomm6Adynx"A-y6\HnH9Ƨ:8r&!{258-l=rOjVI lZqCPuCaȉWDDŽڝ88n:1v Ĉf|s||z.UnX 1zbDǂw-xݴ\%4&ʳ<'6YdD GqVWYqSbx{u#@m (1zx7p;\sg|qVk|].3E- >OEdi;v9mc23dm^Ipax.؇8F@'kn; $pG.\D,Gt:oྶq@n#9mA0]ۆ8]}rWR4иuӨ%%hf=Xbxw9lna|7 V7FZS͖ewoxd7gQJDOSl,2(y!7V@|2vjmq'rY(6+2|#ӲupXӛ\Z9ھewK~0"[Xc6VޤӋr}X^y{J}؎_w9/%g~}?侟N?qmol?([̪ߣŤ?{@s?9 s:$ #g==ǝX!&3GN/ esX@YV vD]>ϩr]J8\۲l珙z̷!00}C kc `x18omew ]>a\$gԌynXF C 2ϪZi)`> M.,ge,8[:C6Ha#ςpKnύ7dNc ,vY@<[rReyw5m+%p\P-%f.5w{2HLm7+9ME\[.ss8 >3˓]W:i螧$9Ն@e{}&^~x#X>d=N%InAZN;Rԍj#qF fu`9Y(`l9lGG0{>l(3u:t)Kie0^f6 s r, ۛdvh냫 _v'NXP=$.3nr\k%H8v'712_(CĻaak, v{~Y់m|g1cK3N}X䌑IgDݶgۓTq@luAɒ-3cD5ɘ|em@zvY3-f<8ܼYt}Y3Lia 2|ciiwށ<y刏xzmx0zÑ!%uo{c uy$L}6n+6 І8x3L]ڍ' qpkfu2x;%O>Qm\c.jyǮ09'GӜZ^m 6wz؞Ͳ9Xd{g52݄?-8[H=E쒎p 宰Cs$r\r0e\/tv .5U9K|t+ͯs`sX-݉ |˩݁lfx%v* @Y <%~/7wo 6x7;\q8f{bb˧0~}ȯ7 svjr$ؠ7_b])q?K51?DOD$J"LOd DIaI$H$$I$J"HDoب EIpb 2:c7f쬟/{ofg*DZ'{_Ŕ;yQ|12W1WWOyֳj|XaڿW:[ X/:y?_]X_.RF/?꓇Kˉ\K5 n}÷$YeI$>dcf1x\ۂ\ McAPPl=/o)"V.|1"$BW[7^K,??????'qg)JV#@c%LZCjsG܄hE龏QEzYeYeZ-QEPYeY}lpJCFhmc]eN:E;##2^fn/HXyQ%{Y#*Meً/1QEzɲ,e:G3;E PoǂSH" ##KPL-HǙ!r\п{eZ,9ђTe#ՑdqqɁrdًPIKd4[_ En-4cͺ>,$߰kOpMI㗹8Ln"lI]G5tGbp嘥WM|6`ֈ].>XuH*FC?bC #2]ezgqhlu(:FэZbmIGE}̟EjQD n#%w2]d7蒲Q2ƙBV(աfJ6V%:}2*Sb-F,%i:#+vh'2mwGOg_3[fvl__.{.Y{tvtȡ&AKI.17HgVBT,k-2/ubMy_KF V|N`gwF?+-X_%|hd]ђ/MZ.Hb#ɏ2n~ĥ>DBVbu"rc+0;L%Ĕ3j1 *T,[XE^./64M|,s$V(=l[{f=>&=.>F8LϚ?ШÓu["7,F_32=ӣ*'a`ʓ_Ybm&kNWHђ/E|\+UUQ X2/df;bd d35yr}ɳMHd5eGbn1KzɎU&`˹rY~XbNуU>5qwP)Nu-*#Q&KZ'M9yDAQD`(6,irAԓ4n672o^g1vVjڎ>Yqbt;DRoِ{-zX{rFJ67&bZ?LQ2,|$_b3ECw^l^辸z5؉=3d}͈b~}E%hHe8FTl^F=e횏Lђ7ti2KS/J47ȪqM_b)%ljx%7'MFӔo}yE)}eCr7~MnqI3ntDX3 N5te̻GM2KUX>ɁT3ʕPTgب51&$#lr/ H2/io. >U8Q(q4[[kE$b+@J Ф)XBU_ITfLdeQ|Ljq" $E#Fi"6_D4S"ed}-}Ǖ.,y#C7ݐcL/Rdd;29<}I!bVȾI>E܅.1ųa`t\EdebtC?&E(>E.3M 2qIdERy]4{ƗLpUYw1G48`_S$jCF??!?xhr2*}hhB4ȾQG~ՈW}WtNNnET;r!sZP xKPF4LqC&e,#*̐Q5RIwd?8Qҿǡ|B#Ҋ*ъ~QM5*ͤP1̱69!ȿT~{!RFLԝ2ܧd`5Q[# hpWfr;# Iы553MՑN,lD՘ɮD!FNΉ󉢚??Ѕhk $bQFҭl̮#.et](DrhD+&AͲ9"GKsmE<Q6F-fL:HoČq}͊9#UɗG4;HYZrmAiOJ) Ѫ#QTJ$2F٘pqME" #h}$][&)g<*1GK+2evɶ芳1H^}2:$I$!>_"O&{nQ\dm_o4 VI%٘ۏcV3o's΂iǗ/xg/|_<H\LvI2Qwx]mzYh\lvROzٹ*Rr# >lU㓕qcV,Vy \$ 4M6uqlbˏ$Rf'_*3#"/Uw;]3Q r6H#!s舺H }%J.rvl#D9"H;63j#':E5 hө>d)%v~ZI"yyhˍd_>$:Y`51]r.bwa:D&)hhʽ}fcoJ%Qe{ز*!H]{*666 o'q,58mPdq؄j-NJ?T4IV$plXaQ'xV~xd|Cg,kSc%kC4?b.Kw32NģƯp*q2Gl$"#Dq% eCurDG-5&7EK1ci̴K4 Jb-|y+1A9>:K؝b5 .%1cT1ɳŴb܇‹7elUwdA>DYGlZL0FM{Q?$VI#!}Y%'!A]( $RH7 Jh> չ$j4spSfLRB&<}Cbl K%Hqk"鉕bE%2C%NYCw.9+KVF&EVN_!ˢ.FiQ[v# c|rT]=RL2a%[O[b(fvQܔR59VixIf Qtd'k>^J?G3T]c72;^<9(h_d$u/v<7"#b6WU<1dȞ5_"}%HTn.ĨT}2N!օ͆+ Y-!;.(,Ln|.OI/f[cUM<ϱ5*ճh y]%Qܣ., )Ff#;nT> K%|G?jkX"9! .)]d]#!;1EF1Fw9(E:0`QQeeÏ4\2J/kLs=NS(*3/wuB߱IY(jxKiiٓș:!+m:'I"lc脬HQ]!&M&cu^]5*5f\4j2odbRF%.Ty& VчpdgYyqN`(p8s93k}ӹ}NGDņ). Y~ϧèǒ*\w-񌗣Eȕ{5F ,w]D@/ӹ xa옝"ZTOJzTjp(ѕ4V>E&]hYZ_*"tJF'k/s& BFIRM.Y'dy40MciDr<ѭ$F.2$_c)X Bd't/Et)m$Ѷ['QEzh_KgzW${.N`}6MѥDj_ū̙ d<~V?Tx4(gsr-Jj,9ч"}TyhGw5XX/-fAmBn)+l9.$Bi}?aXD&>cKHզ''Te•IoiNQҏM0\Qt׽kn:,򃦠:jmѷxJR?F5D<ډJXq00crf :I F$i!_ɏ-$e>K?\$#m#bĐ8rM5R}#և|{eehPdٔ>ĝc11|Af9گ8F|nr!ug~Q͖i($BٓrBX2T: ~o6$##Qay2?+`4 xNhT|t`0p. j̞vssG7܎`FJ8n7,R7#qYfqXdf.Ҥ}*IDOy"E5%I%(fED"<=CMqF)m>Ҽ_Ӣ(WJe'/},/b̄QCT>}LJ+מ(~K/Yb fn,/ߑ\3a3UL'wMx'#w($5re2/!6" M2qvQEb(hxhpfS+(It#KFH$4L}'4I'>/:nި2Ӎd.U=rW2AN  EWV?2F(7$ KcѩudTa\#z7#rDde:":2$zR>שN.Dv dgK$-# ?hM3X䡢c[H&F[$R~F8ƙYlJ1;FhY7GkFH$-eٓR&4cI4'M^$-42G"G_J萓fOT&FE4ovHNŝ.Ll('p2w%.6'JZ;Ns 1ɼkr1>Rf+Kd^lzCB6F#w\WkkD= MV%{ٖ_Aۢ?iG6Cd]$gWp·'?^!~"0ʅh\D{:Df\t)Bv2''D}ًlh|ߍe'}'b~#&._EPY;ri))9Y#I*MS 7NF`Tcݞ=>[Q:șTת"DZ0p{*5PqE(і/7>ĽzG"._ɦJMՓ&I%RD$Gh8q>Hӡ:Dqv!lM5?lMGRfz8c$~a\bWf5$4ɶCkn7~uy>ȗHDE~F9m|,f<$aqEJU]OBPМQ7n1? qC#꤈.Hhj'<,xd"NƉӡqmUOl)RL܆RXLͦMӋ:-2D]K,):^KiӜ0іN)5 BZSF6:%xb U#Wt7zR QdaiHn$d`cVf|;],lP(bc4k4A2ڟ!(X6OD{! uQi[CUTz2n/%1C T#hJLNd$ISCȇ˄aMCioNU#ݑ#VXGvTMdd}\X$H#˦SM,2)RɎXd69S Ȏ,i􈖝Dž1◩,MDJoE'ǾIWEdu\Mw1q$KRD\qR\wSHJ䆪(ݟ>lݵEzW섔gj?#2GqҬ*M_v"0Dcelb 4xHP^DڿFi~8o~fOXf ):,G3BhefM#[*F&ǃte~ȥbBtTm0bPѨ{;0B幮 2w4&Ve4|=&eY KQ㕥G_2_wKn7LȶA'ق!K#'I$bVJW+e3qi⧏$-b3_Ou-zzXݺ &.2|дbx쌐ڹ%/eӱPdFC|x0ڶc1egb\md4y:OŦ0Z4fWdy5MGȵN*7#"AWRLn3YXYc}3|𲳺ÓE[1xGC t Tk:$yבq0OI2UF#SDgO^ݶx0–(w]ؾv5A2;cXpAp>YAېc%wQ1Ä( I[bj$'lHt} ~qfqT4vsD4ӣ*bԚfI^ )MfőiLMdTvi"Ni3'a]tj,S53WD9nq7(c$}j[ޑfh~FONB,DSd!m'5 |/ÚB{ZTaid"Dk>։Ź2h}(",}kVEw"yf[&in#N)lxrKξlW~ef->8s1H˪be96Qeآ3$1 Qf|-Ql5 f22](cBbƑF5xaKЊO$N41zPD> bC.pP>2_YЪ<7F mS6bm :l&f[8_薣$_5wq?4?)3,P ҶAФB_)%h(&dd!1M\$d^ժ1d=md]fJ>%etcK뾕l#l$8Fm$dpP]6n29VXrFRF)E>͒#F dOi'iQv/Db1;EJ;"&O"D[_s\ IB\c ~љm%C*Kٓ;}~2Id;[Q4m xɫCTxoxeƙTC5+kh}K[ j(͒"r1qi"YD)ی1j IcVjuVoE[bj|4OzP4IW$W%S]!#kT] /fM #U22"K?,o!Ȇ8GD'd!-#J#{Л|>cK.qdm~Ȇ''lDI䢔SI7Hi%M %-lgHXb]"tM6 !,:H3U JI ccɭς{!L8#Q9dXA2(IPtiҾP(x.F==ҕj(yeb{Y)b dɓ5j"7B bdv #F/jqn3O(RvZK!豖`tIm%5DdeiF~UcF2Eв!eF+ۚHwDQB%ѯQ!dLS'n2Hhߖ%J>h)(D7'(n}̹6|1|*Nd򤶒r90br̲I2复ޮD6c3(JZQqݗ!53#D*Oͧt?L k-2BCb?,EY|-G,n7ԗoƢ).H56I*1z69s]8rងD"]Dł/#Uɗw '?e,m=:nMFxQ2͹ ÆdsmqF>ݚ. Ktޟw#dU'd9TKC"wъPTѨ6ƺ?LM2ItFV7kimD{~*+4^9ޓ!("' #IIw"Yy<+R]'%p&?"?BE'8'3.V]䒊\F 4=dFg#ݣ fX$rC}qQM|'˕Flç]6J11{D] On3D{~*;h QQlBt%HDehRQLE.C$8<^j+Έ1BvIّVȎxV[{Q!5jg0{ڿaMc,NJ>lϓd:$v>U>>drшIQoluFY=&U4iuQm)C6m%o(zY~F86]{G"udF%$x\+[VB$|d7Ȇ>ѓ%?6dyȈCI=Z%Txw-bP|ƒ3O!n3A8)Yi H{cݲ?${v*r5bq>7OE+hkC_ b<69yH09.SpؘEu 98$z! I3Hfi`t4i 8uf4D!uK˔8 O[F(4I.Nc<ҍ#;ضܻR3_,sS><9=w^'2fdTiaJljEtHۃtd۪h*Չ6}͐Cp_*>Bs~WF>cOF5|q#6~nǖ2bdHoh1ёϓ LdHFR/L2*lqfI ٢TnPlŷQ˲Dqc҂M2.L6&Nw1ˊ:)Z1eܢ|&2qPIL ՙtK_=.LSR/|GE:ht̓&8eN)(kȺ_[..)O%|i>'*P̯ C*M?a%y_V?#ꐢӴ)4jLk=Y̑(z:#iO!ĬLJ(Dkn$,j̸fHӓIW+5ۇb KɏnQd$3jsVJV48S?2ȌQԛG1m4;.r~O1lwG~ERoKѮIG\y/.Sd׆٥t&NҪqyXFI#FEVzM 6$qXjqk8%fS=*ͦƙEtc$ ǫ=z|;Ne5,[Q;@ J͵21G^ibg6)jdaa6c4M1c5N494[c/]54Ee_[,l#HH|J#$C"G,Djbf$2Nj7G#{#sgδzyNo}rs<ۤi~K)#CXeLR,Xl_ġĜm S-'cG92%5fFbQ]KÇ5Rt`N3ؕ2O$kO6Y(O'7[H`åǧģwlu#:v̯v8;L̝+V%QYboQEUYeY~V]Ĭi2bLLJi#.x |NQYPrE$Y>=R>MN(KN 4h %LR"+V8 WF̐'="-r%g1f5ffFIK,Uvf8lTڇ[34Fܢ%A_;OM$b"h| $8vW]R*9Ԩ^ICȉ&fR(N> I8$1k,D|>jhCtbuI"NXW!I.Erf6f(i&Q 7_kOk-Af)&"-ݟ zr*Ѩ+HZy;K#ͳW=25}OJ?Qt]]P}{dwddrF]}?ӹ6p2wEYǵ>N4_j7%(P!dBte L&ӿ<{>eLj,,7s$dY49b(Vz 3)I*loJ21eZW YX+NnV4uFQl 4"sm=;som6};qG(J6MaooFVqoq6{=ςPp(|QnɟSӤl>95S&(m~?bSf9> wS7♿n%?cq)+LRdQFh/CK9FJ #Rerm6{({nO=,ɻ$W;LdJ|:r|uj6ٮnyolFlFi^C\sgl6{=͞qCm6qP6{#assets/js/glightbox.js000064400000345673147600374750011046 0ustar00(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.GLightbox = factory()); }(this, (function () { 'use strict'; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var uid = Date.now(); function extend() { var extended = {}; var deep = true; var i = 0; var length = arguments.length; if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') { deep = arguments[0]; i++; } var merge = function merge(obj) { for (var prop in obj) { if (Object.prototype.hasOwnProperty.call(obj, prop)) { if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') { extended[prop] = extend(true, extended[prop], obj[prop]); } else { extended[prop] = obj[prop]; } } } }; for (; i < length; i++) { var obj = arguments[i]; merge(obj); } return extended; } function each(collection, callback) { if (isNode(collection) || collection === window || collection === document) { collection = [collection]; } if (!isArrayLike(collection) && !isObject(collection)) { collection = [collection]; } if (size(collection) == 0) { return; } if (isArrayLike(collection) && !isObject(collection)) { var l = collection.length, i = 0; for (; i < l; i++) { if (callback.call(collection[i], collection[i], i, collection) === false) { break; } } } else if (isObject(collection)) { for (var key in collection) { if (has(collection, key)) { if (callback.call(collection[key], collection[key], key, collection) === false) { break; } } } } } function getNodeEvents(node) { var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var cache = node[uid] = node[uid] || []; var data = { all: cache, evt: null, found: null }; if (name && fn && size(cache) > 0) { each(cache, function (cl, i) { if (cl.eventName == name && cl.fn.toString() == fn.toString()) { data.found = true; data.evt = i; return false; } }); } return data; } function addEvent(eventName) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, onElement = _ref.onElement, withCallback = _ref.withCallback, _ref$avoidDuplicate = _ref.avoidDuplicate, avoidDuplicate = _ref$avoidDuplicate === void 0 ? true : _ref$avoidDuplicate, _ref$once = _ref.once, once = _ref$once === void 0 ? false : _ref$once, _ref$useCapture = _ref.useCapture, useCapture = _ref$useCapture === void 0 ? false : _ref$useCapture; var thisArg = arguments.length > 2 ? arguments[2] : undefined; var element = onElement || []; if (isString(element)) { element = document.querySelectorAll(element); } function handler(event) { if (isFunction(withCallback)) { withCallback.call(thisArg, event, this); } if (once) { handler.destroy(); } } handler.destroy = function () { each(element, function (el) { var events = getNodeEvents(el, eventName, handler); if (events.found) { events.all.splice(events.evt, 1); } if (el.removeEventListener) { el.removeEventListener(eventName, handler, useCapture); } }); }; each(element, function (el) { var events = getNodeEvents(el, eventName, handler); if (el.addEventListener && avoidDuplicate && !events.found || !avoidDuplicate) { el.addEventListener(eventName, handler, useCapture); events.all.push({ eventName: eventName, fn: handler }); } }); return handler; } function addClass(node, name) { each(name.split(' '), function (cl) { return node.classList.add(cl); }); } function removeClass(node, name) { each(name.split(' '), function (cl) { return node.classList.remove(cl); }); } function hasClass(node, name) { return node.classList.contains(name); } function closest(elem, selector) { while (elem !== document.body) { elem = elem.parentElement; if (!elem) { return false; } var matches = typeof elem.matches == 'function' ? elem.matches(selector) : elem.msMatchesSelector(selector); if (matches) { return elem; } } } function animateElement(element) { var animation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!element || animation === '') { return false; } if (animation == 'none') { if (isFunction(callback)) { callback(); } return false; } var animationEnd = whichAnimationEvent(); var animationNames = animation.split(' '); each(animationNames, function (name) { addClass(element, 'g' + name); }); addEvent(animationEnd, { onElement: element, avoidDuplicate: false, once: true, withCallback: function withCallback(event, target) { each(animationNames, function (name) { removeClass(target, 'g' + name); }); if (isFunction(callback)) { callback(); } } }); } function cssTransform(node) { var translate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (translate == '') { node.style.webkitTransform = ''; node.style.MozTransform = ''; node.style.msTransform = ''; node.style.OTransform = ''; node.style.transform = ''; return false; } node.style.webkitTransform = translate; node.style.MozTransform = translate; node.style.msTransform = translate; node.style.OTransform = translate; node.style.transform = translate; } function show(element) { element.style.display = 'block'; } function hide(element) { element.style.display = 'none'; } function createHTML(htmlStr) { var frag = document.createDocumentFragment(), temp = document.createElement('div'); temp.innerHTML = htmlStr; while (temp.firstChild) { frag.appendChild(temp.firstChild); } return frag; } function windowSize() { return { width: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, height: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight }; } function whichAnimationEvent() { var t, el = document.createElement('fakeelement'); var animations = { animation: 'animationend', OAnimation: 'oAnimationEnd', MozAnimation: 'animationend', WebkitAnimation: 'webkitAnimationEnd' }; for (t in animations) { if (el.style[t] !== undefined) { return animations[t]; } } } function whichTransitionEvent() { var t, el = document.createElement('fakeelement'); var transitions = { transition: 'transitionend', OTransition: 'oTransitionEnd', MozTransition: 'transitionend', WebkitTransition: 'webkitTransitionEnd' }; for (t in transitions) { if (el.style[t] !== undefined) { return transitions[t]; } } } function createIframe(config) { var url = config.url, allow = config.allow, callback = config.callback, appendTo = config.appendTo; var iframe = document.createElement('iframe'); iframe.className = 'vimeo-video gvideo'; iframe.src = url; iframe.style.width = '100%'; iframe.style.height = '100%'; if (allow) { iframe.setAttribute('allow', allow); } iframe.onload = function () { addClass(iframe, 'node-ready'); if (isFunction(callback)) { callback(); } }; if (appendTo) { appendTo.appendChild(iframe); } return iframe; } function waitUntil(check, onComplete, delay, timeout) { if (check()) { onComplete(); return; } if (!delay) { delay = 100; } var timeoutPointer; var intervalPointer = setInterval(function () { if (!check()) { return; } clearInterval(intervalPointer); if (timeoutPointer) { clearTimeout(timeoutPointer); } onComplete(); }, delay); if (timeout) { timeoutPointer = setTimeout(function () { clearInterval(intervalPointer); }, timeout); } } function injectAssets(url, waitFor, callback) { if (isNil(url)) { console.error('Inject assets error'); return; } if (isFunction(waitFor)) { callback = waitFor; waitFor = false; } if (isString(waitFor) && waitFor in window) { if (isFunction(callback)) { callback(); } return; } var found; if (url.indexOf('.css') !== -1) { found = document.querySelectorAll('link[href="' + url + '"]'); if (found && found.length > 0) { if (isFunction(callback)) { callback(); } return; } var head = document.getElementsByTagName('head')[0]; var headStyles = head.querySelectorAll('link[rel="stylesheet"]'); var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = url; link.media = 'all'; if (headStyles) { head.insertBefore(link, headStyles[0]); } else { head.appendChild(link); } if (isFunction(callback)) { callback(); } return; } found = document.querySelectorAll('script[src="' + url + '"]'); if (found && found.length > 0) { if (isFunction(callback)) { if (isString(waitFor)) { waitUntil(function () { return typeof window[waitFor] !== 'undefined'; }, function () { callback(); }); return false; } callback(); } return; } var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.onload = function () { if (isFunction(callback)) { if (isString(waitFor)) { waitUntil(function () { return typeof window[waitFor] !== 'undefined'; }, function () { callback(); }); return false; } callback(); } }; document.body.appendChild(script); return; } function isMobile() { return 'navigator' in window && window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i); } function isTouch() { return isMobile() !== null || document.createTouch !== undefined || 'ontouchstart' in window || 'onmsgesturechange' in window || navigator.msMaxTouchPoints; } function isFunction(f) { return typeof f === 'function'; } function isString(s) { return typeof s === 'string'; } function isNode(el) { return !!(el && el.nodeType && el.nodeType == 1); } function isArray(ar) { return Array.isArray(ar); } function isArrayLike(ar) { return ar && ar.length && isFinite(ar.length); } function isObject(o) { var type = _typeof(o); return type === 'object' && o != null && !isFunction(o) && !isArray(o); } function isNil(o) { return o == null; } function has(obj, key) { return obj !== null && hasOwnProperty.call(obj, key); } function size(o) { if (isObject(o)) { if (o.keys) { return o.keys().length; } var l = 0; for (var k in o) { if (has(o, k)) { l++; } } return l; } else { return o.length; } } function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function getNextFocusElement() { var current = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1; var btns = document.querySelectorAll('.gbtn[data-taborder]:not(.disabled)'); if (!btns.length) { return false; } if (btns.length == 1) { return btns[0]; } if (typeof current == 'string') { current = parseInt(current); } var orders = []; each(btns, function (btn) { orders.push(btn.getAttribute('data-taborder')); }); var highestOrder = Math.max.apply(Math, orders.map(function (order) { return parseInt(order); })); var newIndex = current < 0 ? 1 : current + 1; if (newIndex > highestOrder) { newIndex = '1'; } var nextOrders = orders.filter(function (el) { return el >= parseInt(newIndex); }); var nextFocus = nextOrders.sort()[0]; return document.querySelector(".gbtn[data-taborder=\"".concat(nextFocus, "\"]")); } function keyboardNavigation(instance) { if (instance.events.hasOwnProperty('keyboard')) { return false; } instance.events['keyboard'] = addEvent('keydown', { onElement: window, withCallback: function withCallback(event, target) { event = event || window.event; var key = event.keyCode; if (key == 9) { var focusedButton = document.querySelector('.gbtn.focused'); if (!focusedButton) { var activeElement = document.activeElement && document.activeElement.nodeName ? document.activeElement.nodeName.toLocaleLowerCase() : false; if (activeElement == 'input' || activeElement == 'textarea' || activeElement == 'button') { return; } } event.preventDefault(); var btns = document.querySelectorAll('.gbtn[data-taborder]'); if (!btns || btns.length <= 0) { return; } if (!focusedButton) { var first = getNextFocusElement(); if (first) { first.focus(); addClass(first, 'focused'); } return; } var currentFocusOrder = focusedButton.getAttribute('data-taborder'); var nextFocus = getNextFocusElement(currentFocusOrder); removeClass(focusedButton, 'focused'); if (nextFocus) { nextFocus.focus(); addClass(nextFocus, 'focused'); } } if (key == 39) { instance.nextSlide(); } if (key == 37) { instance.prevSlide(); } if (key == 27) { instance.close(); } } }); } function getLen(v) { return Math.sqrt(v.x * v.x + v.y * v.y); } function dot(v1, v2) { return v1.x * v2.x + v1.y * v2.y; } function getAngle(v1, v2) { var mr = getLen(v1) * getLen(v2); if (mr === 0) { return 0; } var r = dot(v1, v2) / mr; if (r > 1) { r = 1; } return Math.acos(r); } function cross(v1, v2) { return v1.x * v2.y - v2.x * v1.y; } function getRotateAngle(v1, v2) { var angle = getAngle(v1, v2); if (cross(v1, v2) > 0) { angle *= -1; } return angle * 180 / Math.PI; } var EventsHandlerAdmin = function () { function EventsHandlerAdmin(el) { _classCallCheck(this, EventsHandlerAdmin); this.handlers = []; this.el = el; } _createClass(EventsHandlerAdmin, [{ key: "add", value: function add(handler) { this.handlers.push(handler); } }, { key: "del", value: function del(handler) { if (!handler) { this.handlers = []; } for (var i = this.handlers.length; i >= 0; i--) { if (this.handlers[i] === handler) { this.handlers.splice(i, 1); } } } }, { key: "dispatch", value: function dispatch() { for (var i = 0, len = this.handlers.length; i < len; i++) { var handler = this.handlers[i]; if (typeof handler === 'function') { handler.apply(this.el, arguments); } } } }]); return EventsHandlerAdmin; }(); function wrapFunc(el, handler) { var EventshandlerAdmin = new EventsHandlerAdmin(el); EventshandlerAdmin.add(handler); return EventshandlerAdmin; } var TouchEvents = function () { function TouchEvents(el, option) { _classCallCheck(this, TouchEvents); this.element = typeof el == 'string' ? document.querySelector(el) : el; this.start = this.start.bind(this); this.move = this.move.bind(this); this.end = this.end.bind(this); this.cancel = this.cancel.bind(this); this.element.addEventListener('touchstart', this.start, false); this.element.addEventListener('touchmove', this.move, false); this.element.addEventListener('touchend', this.end, false); this.element.addEventListener('touchcancel', this.cancel, false); this.preV = { x: null, y: null }; this.pinchStartLen = null; this.zoom = 1; this.isDoubleTap = false; var noop = function noop() {}; this.rotate = wrapFunc(this.element, option.rotate || noop); this.touchStart = wrapFunc(this.element, option.touchStart || noop); this.multipointStart = wrapFunc(this.element, option.multipointStart || noop); this.multipointEnd = wrapFunc(this.element, option.multipointEnd || noop); this.pinch = wrapFunc(this.element, option.pinch || noop); this.swipe = wrapFunc(this.element, option.swipe || noop); this.tap = wrapFunc(this.element, option.tap || noop); this.doubleTap = wrapFunc(this.element, option.doubleTap || noop); this.longTap = wrapFunc(this.element, option.longTap || noop); this.singleTap = wrapFunc(this.element, option.singleTap || noop); this.pressMove = wrapFunc(this.element, option.pressMove || noop); this.twoFingerPressMove = wrapFunc(this.element, option.twoFingerPressMove || noop); this.touchMove = wrapFunc(this.element, option.touchMove || noop); this.touchEnd = wrapFunc(this.element, option.touchEnd || noop); this.touchCancel = wrapFunc(this.element, option.touchCancel || noop); this.translateContainer = this.element; this._cancelAllHandler = this.cancelAll.bind(this); window.addEventListener('scroll', this._cancelAllHandler); this.delta = null; this.last = null; this.now = null; this.tapTimeout = null; this.singleTapTimeout = null; this.longTapTimeout = null; this.swipeTimeout = null; this.x1 = this.x2 = this.y1 = this.y2 = null; this.preTapPosition = { x: null, y: null }; } _createClass(TouchEvents, [{ key: "start", value: function start(evt) { if (!evt.touches) { return; } var ignoreDragFor = ['a', 'button', 'input']; if (evt.target && evt.target.nodeName && ignoreDragFor.indexOf(evt.target.nodeName.toLowerCase()) >= 0) { console.log('ignore drag for this touched element', evt.target.nodeName.toLowerCase()); return; } this.now = Date.now(); this.x1 = evt.touches[0].pageX; this.y1 = evt.touches[0].pageY; this.delta = this.now - (this.last || this.now); this.touchStart.dispatch(evt, this.element); if (this.preTapPosition.x !== null) { this.isDoubleTap = this.delta > 0 && this.delta <= 250 && Math.abs(this.preTapPosition.x - this.x1) < 30 && Math.abs(this.preTapPosition.y - this.y1) < 30; if (this.isDoubleTap) { clearTimeout(this.singleTapTimeout); } } this.preTapPosition.x = this.x1; this.preTapPosition.y = this.y1; this.last = this.now; var preV = this.preV, len = evt.touches.length; if (len > 1) { this._cancelLongTap(); this._cancelSingleTap(); var v = { x: evt.touches[1].pageX - this.x1, y: evt.touches[1].pageY - this.y1 }; preV.x = v.x; preV.y = v.y; this.pinchStartLen = getLen(preV); this.multipointStart.dispatch(evt, this.element); } this._preventTap = false; this.longTapTimeout = setTimeout(function () { this.longTap.dispatch(evt, this.element); this._preventTap = true; }.bind(this), 750); } }, { key: "move", value: function move(evt) { if (!evt.touches) { return; } var preV = this.preV, len = evt.touches.length, currentX = evt.touches[0].pageX, currentY = evt.touches[0].pageY; this.isDoubleTap = false; if (len > 1) { var sCurrentX = evt.touches[1].pageX, sCurrentY = evt.touches[1].pageY; var v = { x: evt.touches[1].pageX - currentX, y: evt.touches[1].pageY - currentY }; if (preV.x !== null) { if (this.pinchStartLen > 0) { evt.zoom = getLen(v) / this.pinchStartLen; this.pinch.dispatch(evt, this.element); } evt.angle = getRotateAngle(v, preV); this.rotate.dispatch(evt, this.element); } preV.x = v.x; preV.y = v.y; if (this.x2 !== null && this.sx2 !== null) { evt.deltaX = (currentX - this.x2 + sCurrentX - this.sx2) / 2; evt.deltaY = (currentY - this.y2 + sCurrentY - this.sy2) / 2; } else { evt.deltaX = 0; evt.deltaY = 0; } this.twoFingerPressMove.dispatch(evt, this.element); this.sx2 = sCurrentX; this.sy2 = sCurrentY; } else { if (this.x2 !== null) { evt.deltaX = currentX - this.x2; evt.deltaY = currentY - this.y2; var movedX = Math.abs(this.x1 - this.x2), movedY = Math.abs(this.y1 - this.y2); if (movedX > 10 || movedY > 10) { this._preventTap = true; } } else { evt.deltaX = 0; evt.deltaY = 0; } this.pressMove.dispatch(evt, this.element); } this.touchMove.dispatch(evt, this.element); this._cancelLongTap(); this.x2 = currentX; this.y2 = currentY; if (len > 1) { evt.preventDefault(); } } }, { key: "end", value: function end(evt) { if (!evt.changedTouches) { return; } this._cancelLongTap(); var self = this; if (evt.touches.length < 2) { this.multipointEnd.dispatch(evt, this.element); this.sx2 = this.sy2 = null; } if (this.x2 && Math.abs(this.x1 - this.x2) > 30 || this.y2 && Math.abs(this.y1 - this.y2) > 30) { evt.direction = this._swipeDirection(this.x1, this.x2, this.y1, this.y2); this.swipeTimeout = setTimeout(function () { self.swipe.dispatch(evt, self.element); }, 0); } else { this.tapTimeout = setTimeout(function () { if (!self._preventTap) { self.tap.dispatch(evt, self.element); } if (self.isDoubleTap) { self.doubleTap.dispatch(evt, self.element); self.isDoubleTap = false; } }, 0); if (!self.isDoubleTap) { self.singleTapTimeout = setTimeout(function () { self.singleTap.dispatch(evt, self.element); }, 250); } } this.touchEnd.dispatch(evt, this.element); this.preV.x = 0; this.preV.y = 0; this.zoom = 1; this.pinchStartLen = null; this.x1 = this.x2 = this.y1 = this.y2 = null; } }, { key: "cancelAll", value: function cancelAll() { this._preventTap = true; clearTimeout(this.singleTapTimeout); clearTimeout(this.tapTimeout); clearTimeout(this.longTapTimeout); clearTimeout(this.swipeTimeout); } }, { key: "cancel", value: function cancel(evt) { this.cancelAll(); this.touchCancel.dispatch(evt, this.element); } }, { key: "_cancelLongTap", value: function _cancelLongTap() { clearTimeout(this.longTapTimeout); } }, { key: "_cancelSingleTap", value: function _cancelSingleTap() { clearTimeout(this.singleTapTimeout); } }, { key: "_swipeDirection", value: function _swipeDirection(x1, x2, y1, y2) { return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down'; } }, { key: "on", value: function on(evt, handler) { if (this[evt]) { this[evt].add(handler); } } }, { key: "off", value: function off(evt, handler) { if (this[evt]) { this[evt].del(handler); } } }, { key: "destroy", value: function destroy() { if (this.singleTapTimeout) { clearTimeout(this.singleTapTimeout); } if (this.tapTimeout) { clearTimeout(this.tapTimeout); } if (this.longTapTimeout) { clearTimeout(this.longTapTimeout); } if (this.swipeTimeout) { clearTimeout(this.swipeTimeout); } this.element.removeEventListener('touchstart', this.start); this.element.removeEventListener('touchmove', this.move); this.element.removeEventListener('touchend', this.end); this.element.removeEventListener('touchcancel', this.cancel); this.rotate.del(); this.touchStart.del(); this.multipointStart.del(); this.multipointEnd.del(); this.pinch.del(); this.swipe.del(); this.tap.del(); this.doubleTap.del(); this.longTap.del(); this.singleTap.del(); this.pressMove.del(); this.twoFingerPressMove.del(); this.touchMove.del(); this.touchEnd.del(); this.touchCancel.del(); this.preV = this.pinchStartLen = this.zoom = this.isDoubleTap = this.delta = this.last = this.now = this.tapTimeout = this.singleTapTimeout = this.longTapTimeout = this.swipeTimeout = this.x1 = this.x2 = this.y1 = this.y2 = this.preTapPosition = this.rotate = this.touchStart = this.multipointStart = this.multipointEnd = this.pinch = this.swipe = this.tap = this.doubleTap = this.longTap = this.singleTap = this.pressMove = this.touchMove = this.touchEnd = this.touchCancel = this.twoFingerPressMove = null; window.removeEventListener('scroll', this._cancelAllHandler); return null; } }]); return TouchEvents; }(); function resetSlideMove(slide) { var transitionEnd = whichTransitionEvent(); var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var media = hasClass(slide, 'gslide-media') ? slide : slide.querySelector('.gslide-media'); var container = closest(media, '.ginner-container'); var desc = slide.querySelector('.gslide-description'); if (windowWidth > 769) { media = container; } addClass(media, 'greset'); cssTransform(media, 'translate3d(0, 0, 0)'); addEvent(transitionEnd, { onElement: media, once: true, withCallback: function withCallback(event, target) { removeClass(media, 'greset'); } }); media.style.opacity = ''; if (desc) { desc.style.opacity = ''; } } function touchNavigation(instance) { if (instance.events.hasOwnProperty('touch')) { return false; } var winSize = windowSize(); var winWidth = winSize.width; var winHeight = winSize.height; var process = false; var currentSlide = null; var media = null; var mediaImage = null; var doingMove = false; var initScale = 1; var maxScale = 4.5; var currentScale = 1; var doingZoom = false; var imageZoomed = false; var zoomedPosX = null; var zoomedPosY = null; var lastZoomedPosX = null; var lastZoomedPosY = null; var hDistance; var vDistance; var hDistancePercent = 0; var vDistancePercent = 0; var vSwipe = false; var hSwipe = false; var startCoords = {}; var endCoords = {}; var xDown = 0; var yDown = 0; var isInlined; var sliderWrapper = document.getElementById('glightbox-slider'); var overlay = document.querySelector('.goverlay'); var touchInstance = new TouchEvents(sliderWrapper, { touchStart: function touchStart(e) { process = true; if (hasClass(e.targetTouches[0].target, 'ginner-container') || closest(e.targetTouches[0].target, '.gslide-desc') || e.targetTouches[0].target.nodeName.toLowerCase() == 'a') { process = false; } if (closest(e.targetTouches[0].target, '.gslide-inline') && !hasClass(e.targetTouches[0].target.parentNode, 'gslide-inline')) { process = false; } if (process) { endCoords = e.targetTouches[0]; startCoords.pageX = e.targetTouches[0].pageX; startCoords.pageY = e.targetTouches[0].pageY; xDown = e.targetTouches[0].clientX; yDown = e.targetTouches[0].clientY; currentSlide = instance.activeSlide; media = currentSlide.querySelector('.gslide-media'); isInlined = currentSlide.querySelector('.gslide-inline'); mediaImage = null; if (hasClass(media, 'gslide-image')) { mediaImage = media.querySelector('img'); } var windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; if (windowWidth > 769) { media = currentSlide.querySelector('.ginner-container'); } removeClass(overlay, 'greset'); if (e.pageX > 20 && e.pageX < window.innerWidth - 20) { return; } e.preventDefault(); } }, touchMove: function touchMove(e) { if (!process) { return; } endCoords = e.targetTouches[0]; if (doingZoom || imageZoomed) { return; } if (isInlined && isInlined.offsetHeight > winHeight) { var moved = startCoords.pageX - endCoords.pageX; if (Math.abs(moved) <= 13) { return false; } } doingMove = true; var xUp = e.targetTouches[0].clientX; var yUp = e.targetTouches[0].clientY; var xDiff = xDown - xUp; var yDiff = yDown - yUp; if (Math.abs(xDiff) > Math.abs(yDiff)) { vSwipe = false; hSwipe = true; } else { hSwipe = false; vSwipe = true; } hDistance = endCoords.pageX - startCoords.pageX; hDistancePercent = hDistance * 100 / winWidth; vDistance = endCoords.pageY - startCoords.pageY; vDistancePercent = vDistance * 100 / winHeight; var opacity; if (vSwipe && mediaImage) { opacity = 1 - Math.abs(vDistance) / winHeight; overlay.style.opacity = opacity; if (instance.settings.touchFollowAxis) { hDistancePercent = 0; } } if (hSwipe) { opacity = 1 - Math.abs(hDistance) / winWidth; media.style.opacity = opacity; if (instance.settings.touchFollowAxis) { vDistancePercent = 0; } } if (!mediaImage) { return cssTransform(media, "translate3d(".concat(hDistancePercent, "%, 0, 0)")); } cssTransform(media, "translate3d(".concat(hDistancePercent, "%, ").concat(vDistancePercent, "%, 0)")); }, touchEnd: function touchEnd() { if (!process) { return; } doingMove = false; if (imageZoomed || doingZoom) { lastZoomedPosX = zoomedPosX; lastZoomedPosY = zoomedPosY; return; } var v = Math.abs(parseInt(vDistancePercent)); var h = Math.abs(parseInt(hDistancePercent)); if (v > 29 && mediaImage) { instance.close(); return; } if (v < 29 && h < 25) { addClass(overlay, 'greset'); overlay.style.opacity = 1; return resetSlideMove(media); } }, multipointEnd: function multipointEnd() { setTimeout(function () { doingZoom = false; }, 50); }, multipointStart: function multipointStart() { doingZoom = true; initScale = currentScale ? currentScale : 1; }, pinch: function pinch(evt) { if (!mediaImage || doingMove) { return false; } doingZoom = true; mediaImage.scaleX = mediaImage.scaleY = initScale * evt.zoom; var scale = initScale * evt.zoom; imageZoomed = true; if (scale <= 1) { imageZoomed = false; scale = 1; lastZoomedPosY = null; lastZoomedPosX = null; zoomedPosX = null; zoomedPosY = null; mediaImage.setAttribute('style', ''); return; } if (scale > maxScale) { scale = maxScale; } mediaImage.style.transform = "scale3d(".concat(scale, ", ").concat(scale, ", 1)"); currentScale = scale; }, pressMove: function pressMove(e) { if (imageZoomed && !doingZoom) { var mhDistance = endCoords.pageX - startCoords.pageX; var mvDistance = endCoords.pageY - startCoords.pageY; if (lastZoomedPosX) { mhDistance = mhDistance + lastZoomedPosX; } if (lastZoomedPosY) { mvDistance = mvDistance + lastZoomedPosY; } zoomedPosX = mhDistance; zoomedPosY = mvDistance; var style = "translate3d(".concat(mhDistance, "px, ").concat(mvDistance, "px, 0)"); if (currentScale) { style += " scale3d(".concat(currentScale, ", ").concat(currentScale, ", 1)"); } cssTransform(mediaImage, style); } }, swipe: function swipe(evt) { if (imageZoomed) { return; } if (doingZoom) { doingZoom = false; return; } if (evt.direction == 'Left') { if (instance.index == instance.elements.length - 1) { return resetSlideMove(media); } instance.nextSlide(); } if (evt.direction == 'Right') { if (instance.index == 0) { return resetSlideMove(media); } instance.prevSlide(); } } }); instance.events['touch'] = touchInstance; } var ZoomImages = function () { function ZoomImages(el, slide) { var _this = this; var onclose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; _classCallCheck(this, ZoomImages); this.img = el; this.slide = slide; this.onclose = onclose; if (this.img.setZoomEvents) { return false; } this.active = false; this.zoomedIn = false; this.dragging = false; this.currentX = null; this.currentY = null; this.initialX = null; this.initialY = null; this.xOffset = 0; this.yOffset = 0; this.img.addEventListener('mousedown', function (e) { return _this.dragStart(e); }, false); this.img.addEventListener('mouseup', function (e) { return _this.dragEnd(e); }, false); this.img.addEventListener('mousemove', function (e) { return _this.drag(e); }, false); this.img.addEventListener('click', function (e) { if (_this.slide.classList.contains('dragging-nav')) { _this.zoomOut(); return false; } if (!_this.zoomedIn) { return _this.zoomIn(); } if (_this.zoomedIn && !_this.dragging) { _this.zoomOut(); } }, false); this.img.setZoomEvents = true; } _createClass(ZoomImages, [{ key: "zoomIn", value: function zoomIn() { var winWidth = this.widowWidth(); if (this.zoomedIn || winWidth <= 768) { return; } var img = this.img; img.setAttribute('data-style', img.getAttribute('style')); img.style.maxWidth = img.naturalWidth + 'px'; img.style.maxHeight = img.naturalHeight + 'px'; if (img.naturalWidth > winWidth) { var centerX = winWidth / 2 - img.naturalWidth / 2; this.setTranslate(this.img.parentNode, centerX, 0); } this.slide.classList.add('zoomed'); this.zoomedIn = true; } }, { key: "zoomOut", value: function zoomOut() { this.img.parentNode.setAttribute('style', ''); this.img.setAttribute('style', this.img.getAttribute('data-style')); this.slide.classList.remove('zoomed'); this.zoomedIn = false; this.currentX = null; this.currentY = null; this.initialX = null; this.initialY = null; this.xOffset = 0; this.yOffset = 0; if (this.onclose && typeof this.onclose == 'function') { this.onclose(); } } }, { key: "dragStart", value: function dragStart(e) { e.preventDefault(); if (!this.zoomedIn) { this.active = false; return; } if (e.type === 'touchstart') { this.initialX = e.touches[0].clientX - this.xOffset; this.initialY = e.touches[0].clientY - this.yOffset; } else { this.initialX = e.clientX - this.xOffset; this.initialY = e.clientY - this.yOffset; } if (e.target === this.img) { this.active = true; this.img.classList.add('dragging'); } } }, { key: "dragEnd", value: function dragEnd(e) { var _this2 = this; e.preventDefault(); this.initialX = this.currentX; this.initialY = this.currentY; this.active = false; setTimeout(function () { _this2.dragging = false; _this2.img.isDragging = false; _this2.img.classList.remove('dragging'); }, 100); } }, { key: "drag", value: function drag(e) { if (this.active) { e.preventDefault(); if (e.type === 'touchmove') { this.currentX = e.touches[0].clientX - this.initialX; this.currentY = e.touches[0].clientY - this.initialY; } else { this.currentX = e.clientX - this.initialX; this.currentY = e.clientY - this.initialY; } this.xOffset = this.currentX; this.yOffset = this.currentY; this.img.isDragging = true; this.dragging = true; this.setTranslate(this.img, this.currentX, this.currentY); } } }, { key: "onMove", value: function onMove(e) { if (!this.zoomedIn) { return; } var xOffset = e.clientX - this.img.naturalWidth / 2; var yOffset = e.clientY - this.img.naturalHeight / 2; this.setTranslate(this.img, xOffset, yOffset); } }, { key: "setTranslate", value: function setTranslate(node, xPos, yPos) { node.style.transform = 'translate3d(' + xPos + 'px, ' + yPos + 'px, 0)'; } }, { key: "widowWidth", value: function widowWidth() { return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; } }]); return ZoomImages; }(); var DragSlides = function () { function DragSlides() { var _this = this; var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, DragSlides); var dragEl = config.dragEl, _config$toleranceX = config.toleranceX, toleranceX = _config$toleranceX === void 0 ? 40 : _config$toleranceX, _config$toleranceY = config.toleranceY, toleranceY = _config$toleranceY === void 0 ? 65 : _config$toleranceY, _config$slide = config.slide, slide = _config$slide === void 0 ? null : _config$slide, _config$instance = config.instance, instance = _config$instance === void 0 ? null : _config$instance; this.el = dragEl; this.active = false; this.dragging = false; this.currentX = null; this.currentY = null; this.initialX = null; this.initialY = null; this.xOffset = 0; this.yOffset = 0; this.direction = null; this.lastDirection = null; this.toleranceX = toleranceX; this.toleranceY = toleranceY; this.toleranceReached = false; this.dragContainer = this.el; this.slide = slide; this.instance = instance; this.el.addEventListener('mousedown', function (e) { return _this.dragStart(e); }, false); this.el.addEventListener('mouseup', function (e) { return _this.dragEnd(e); }, false); this.el.addEventListener('mousemove', function (e) { return _this.drag(e); }, false); } _createClass(DragSlides, [{ key: "dragStart", value: function dragStart(e) { if (this.slide.classList.contains('zoomed')) { this.active = false; return; } if (e.type === 'touchstart') { this.initialX = e.touches[0].clientX - this.xOffset; this.initialY = e.touches[0].clientY - this.yOffset; } else { this.initialX = e.clientX - this.xOffset; this.initialY = e.clientY - this.yOffset; } var clicked = e.target.nodeName.toLowerCase(); var exludeClicks = ['input', 'select', 'textarea', 'button', 'a']; if (e.target.classList.contains('nodrag') || closest(e.target, '.nodrag') || exludeClicks.indexOf(clicked) !== -1) { this.active = false; return; } e.preventDefault(); if (e.target === this.el || clicked !== 'img' && closest(e.target, '.gslide-inline')) { this.active = true; this.el.classList.add('dragging'); this.dragContainer = closest(e.target, '.ginner-container'); } } }, { key: "dragEnd", value: function dragEnd(e) { var _this2 = this; e && e.preventDefault(); this.initialX = 0; this.initialY = 0; this.currentX = null; this.currentY = null; this.initialX = null; this.initialY = null; this.xOffset = 0; this.yOffset = 0; this.active = false; if (this.doSlideChange) { this.instance.preventOutsideClick = true; this.doSlideChange == 'right' && this.instance.prevSlide(); this.doSlideChange == 'left' && this.instance.nextSlide(); } if (this.doSlideClose) { this.instance.close(); } if (!this.toleranceReached) { this.setTranslate(this.dragContainer, 0, 0, true); } setTimeout(function () { _this2.instance.preventOutsideClick = false; _this2.toleranceReached = false; _this2.lastDirection = null; _this2.dragging = false; _this2.el.isDragging = false; _this2.el.classList.remove('dragging'); _this2.slide.classList.remove('dragging-nav'); _this2.dragContainer.style.transform = ''; _this2.dragContainer.style.transition = ''; }, 100); } }, { key: "drag", value: function drag(e) { if (this.active) { e.preventDefault(); this.slide.classList.add('dragging-nav'); if (e.type === 'touchmove') { this.currentX = e.touches[0].clientX - this.initialX; this.currentY = e.touches[0].clientY - this.initialY; } else { this.currentX = e.clientX - this.initialX; this.currentY = e.clientY - this.initialY; } this.xOffset = this.currentX; this.yOffset = this.currentY; this.el.isDragging = true; this.dragging = true; this.doSlideChange = false; this.doSlideClose = false; var currentXInt = Math.abs(this.currentX); var currentYInt = Math.abs(this.currentY); if (currentXInt > 0 && currentXInt >= Math.abs(this.currentY) && (!this.lastDirection || this.lastDirection == 'x')) { this.yOffset = 0; this.lastDirection = 'x'; this.setTranslate(this.dragContainer, this.currentX, 0); var doChange = this.shouldChange(); if (!this.instance.settings.dragAutoSnap && doChange) { this.doSlideChange = doChange; } if (this.instance.settings.dragAutoSnap && doChange) { this.instance.preventOutsideClick = true; this.toleranceReached = true; this.active = false; this.instance.preventOutsideClick = true; this.dragEnd(null); doChange == 'right' && this.instance.prevSlide(); doChange == 'left' && this.instance.nextSlide(); return; } } if (this.toleranceY > 0 && currentYInt > 0 && currentYInt >= currentXInt && (!this.lastDirection || this.lastDirection == 'y')) { this.xOffset = 0; this.lastDirection = 'y'; this.setTranslate(this.dragContainer, 0, this.currentY); var doClose = this.shouldClose(); if (!this.instance.settings.dragAutoSnap && doClose) { this.doSlideClose = true; } if (this.instance.settings.dragAutoSnap && doClose) { this.instance.close(); } return; } } } }, { key: "shouldChange", value: function shouldChange() { var doChange = false; var currentXInt = Math.abs(this.currentX); if (currentXInt >= this.toleranceX) { var dragDir = this.currentX > 0 ? 'right' : 'left'; if (dragDir == 'left' && this.slide !== this.slide.parentNode.lastChild || dragDir == 'right' && this.slide !== this.slide.parentNode.firstChild) { doChange = dragDir; } } return doChange; } }, { key: "shouldClose", value: function shouldClose() { var doClose = false; var currentYInt = Math.abs(this.currentY); if (currentYInt >= this.toleranceY) { doClose = true; } return doClose; } }, { key: "setTranslate", value: function setTranslate(node, xPos, yPos) { var animated = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; if (animated) { node.style.transition = 'all .2s ease'; } else { node.style.transition = ''; } node.style.transform = "translate3d(".concat(xPos, "px, ").concat(yPos, "px, 0)"); } }]); return DragSlides; }(); function slideImage(slide, data, index, callback) { var slideMedia = slide.querySelector('.gslide-media'); var img = new Image(); var titleID = 'gSlideTitle_' + index; var textID = 'gSlideDesc_' + index; img.addEventListener('load', function () { if (isFunction(callback)) { callback(); } }, false); img.src = data.href; if (data.sizes != '' && data.srcset != '') { img.sizes = data.sizes; img.srcset = data.srcset; } img.alt = ''; if (!isNil(data.alt) && data.alt !== '') { img.alt = data.alt; } if (data.title !== '') { img.setAttribute('aria-labelledby', titleID); } if (data.description !== '') { img.setAttribute('aria-describedby', textID); } if (data.hasOwnProperty('_hasCustomWidth') && data._hasCustomWidth) { img.style.width = data.width; } if (data.hasOwnProperty('_hasCustomHeight') && data._hasCustomHeight) { img.style.height = data.height; } slideMedia.insertBefore(img, slideMedia.firstChild); return; } function slideVideo(slide, data, index, callback) { var _this = this; var slideContainer = slide.querySelector('.ginner-container'); var videoID = 'gvideo' + index; var slideMedia = slide.querySelector('.gslide-media'); var videoPlayers = this.getAllPlayers(); addClass(slideContainer, 'gvideo-container'); slideMedia.insertBefore(createHTML('

'), slideMedia.firstChild); var videoWrapper = slide.querySelector('.gvideo-wrapper'); injectAssets(this.settings.plyr.css, 'Plyr'); var url = data.href; var protocol = location.protocol.replace(':', ''); var videoSource = ''; var embedID = ''; var customPlaceholder = false; if (protocol == 'file') { protocol = 'http'; } slideMedia.style.maxWidth = data.width; injectAssets(this.settings.plyr.js, 'Plyr', function () { if (url.match(/vimeo\.com\/([0-9]*)/)) { var vimeoID = /vimeo.*\/(\d+)/i.exec(url); videoSource = 'vimeo'; embedID = vimeoID[1]; } if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) { var youtubeID = getYoutubeID(url); videoSource = 'youtube'; embedID = youtubeID; } if (url.match(/\.(mp4|ogg|webm|mov)$/) !== null) { videoSource = 'local'; var html = ''; customPlaceholder = createHTML(html); } var placeholder = customPlaceholder ? customPlaceholder : createHTML("
")); addClass(videoWrapper, "".concat(videoSource, "-video gvideo")); videoWrapper.appendChild(placeholder); videoWrapper.setAttribute('data-id', videoID); videoWrapper.setAttribute('data-index', index); var playerConfig = has(_this.settings.plyr, 'config') ? _this.settings.plyr.config : {}; var player = new Plyr('#' + videoID, playerConfig); player.on('ready', function (event) { var instance = event.detail.plyr; videoPlayers[videoID] = instance; if (isFunction(callback)) { callback(); } }); waitUntil(function () { return slide.querySelector('iframe') && slide.querySelector('iframe').dataset.ready == 'true'; }, function () { _this.resize(slide); }); player.on('enterfullscreen', handleMediaFullScreen); player.on('exitfullscreen', handleMediaFullScreen); }); } function getYoutubeID(url) { var videoID = ''; url = url.replace(/(>|<)/gi, '').split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/); if (url[2] !== undefined) { videoID = url[2].split(/[^0-9a-z_\-]/i); videoID = videoID[0]; } else { videoID = url; } return videoID; } function handleMediaFullScreen(event) { var media = closest(event.target, '.gslide-media'); if (event.type == 'enterfullscreen') { addClass(media, 'fullscreen'); } if (event.type == 'exitfullscreen') { removeClass(media, 'fullscreen'); } } function slideInline(slide, data, index, callback) { var _this = this; var slideMedia = slide.querySelector('.gslide-media'); var hash = has(data, 'href') && data.href ? data.href.split('#').pop().trim() : false; var content = has(data, 'content') && data.content ? data.content : false; var innerContent; if (content) { if (isString(content)) { innerContent = createHTML("
".concat(content, "
")); } if (isNode(content)) { if (content.style.display == 'none') { content.style.display = 'block'; } var container = document.createElement('div'); container.className = 'ginlined-content'; container.appendChild(content); innerContent = container; } } if (hash) { var div = document.getElementById(hash); if (!div) { return false; } var cloned = div.cloneNode(true); cloned.style.height = data.height; cloned.style.maxWidth = data.width; addClass(cloned, 'ginlined-content'); innerContent = cloned; } if (!innerContent) { console.error('Unable to append inline slide content', data); return false; } slideMedia.style.height = data.height; slideMedia.style.width = data.width; slideMedia.appendChild(innerContent); this.events['inlineclose' + hash] = addEvent('click', { onElement: slideMedia.querySelectorAll('.gtrigger-close'), withCallback: function withCallback(e) { e.preventDefault(); _this.close(); } }); if (isFunction(callback)) { callback(); } return; } function slideIframe(slide, data, index, callback) { var slideMedia = slide.querySelector('.gslide-media'); var iframe = createIframe({ url: data.href, callback: callback }); slideMedia.parentNode.style.maxWidth = data.width; slideMedia.parentNode.style.height = data.height; slideMedia.appendChild(iframe); return; } var SlideConfigParser = function () { function SlideConfigParser() { var slideParamas = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, SlideConfigParser); this.defaults = { href: '', sizes: '', srcset: '', title: '', type: '', description: '', alt: '', descPosition: 'bottom', effect: '', width: '', height: '', content: false, zoomable: true, draggable: true }; if (isObject(slideParamas)) { this.defaults = extend(this.defaults, slideParamas); } } _createClass(SlideConfigParser, [{ key: "sourceType", value: function sourceType(url) { var origin = url; url = url.toLowerCase(); if (url.match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/) !== null) { return 'image'; } if (url.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || url.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/) || url.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)) { return 'video'; } if (url.match(/vimeo\.com\/([0-9]*)/)) { return 'video'; } if (url.match(/\.(mp4|ogg|webm|mov)/) !== null) { return 'video'; } if (url.match(/\.(mp3|wav|wma|aac|ogg)/) !== null) { return 'audio'; } if (url.indexOf('#') > -1) { var hash = origin.split('#').pop(); if (hash.trim() !== '') { return 'inline'; } } if (url.indexOf('goajax=true') > -1) { return 'ajax'; } return 'external'; } }, { key: "parseConfig", value: function parseConfig(element, settings) { var _this = this; var data = extend({ descPosition: settings.descPosition }, this.defaults); if (isObject(element) && !isNode(element)) { if (!has(element, 'type')) { if (has(element, 'content') && element.content) { element.type = 'inline'; } else if (has(element, 'href')) { element.type = this.sourceType(element.href); } } var objectData = extend(data, element); this.setSize(objectData, settings); return objectData; } var url = ''; var config = element.getAttribute('data-glightbox'); var nodeType = element.nodeName.toLowerCase(); if (nodeType === 'a') { url = element.href; } if (nodeType === 'img') { url = element.src; data.alt = element.alt; } data.href = url; each(data, function (val, key) { if (has(settings, key) && key !== 'width') { data[key] = settings[key]; } var nodeData = element.dataset[key]; if (!isNil(nodeData)) { data[key] = _this.sanitizeValue(nodeData); } }); if (data.content) { data.type = 'inline'; } if (!data.type && url) { data.type = this.sourceType(url); } if (!isNil(config)) { var cleanKeys = []; each(data, function (v, k) { cleanKeys.push(';\\s?' + k); }); cleanKeys = cleanKeys.join('\\s?:|'); if (config.trim() !== '') { each(data, function (val, key) { var str = config; var match = 's?' + key + 's?:s?(.*?)(' + cleanKeys + 's?:|$)'; var regex = new RegExp(match); var matches = str.match(regex); if (matches && matches.length && matches[1]) { var value = matches[1].trim().replace(/;\s*$/, ''); data[key] = _this.sanitizeValue(value); } }); } } else { if (!data.title && nodeType == 'a') { var title = element.title; if (!isNil(title) && title !== '') { data.title = title; } } if (!data.title && nodeType == 'img') { var alt = element.alt; if (!isNil(alt) && alt !== '') { data.title = alt; } } } if (data.description && data.description.substring(0, 1) === '.') { var description; try { description = document.querySelector(data.description).innerHTML; } catch (error) { if (!(error instanceof DOMException)) { throw error; } } if (description) { data.description = description; } } if (!data.description) { var nodeDesc = element.querySelector('.glightbox-desc'); if (nodeDesc) { data.description = nodeDesc.innerHTML; } } this.setSize(data, settings, element); this.slideConfig = data; return data; } }, { key: "setSize", value: function setSize(data, settings) { var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var defaultWith = data.type == 'video' ? this.checkSize(settings.videosWidth) : this.checkSize(settings.width); var defaultHeight = this.checkSize(settings.height); data.width = has(data, 'width') && data.width !== '' ? this.checkSize(data.width) : defaultWith; data.height = has(data, 'height') && data.height !== '' ? this.checkSize(data.height) : defaultHeight; if (element && data.type == 'image') { data._hasCustomWidth = element.dataset.width ? true : false; data._hasCustomHeight = element.dataset.height ? true : false; } return data; } }, { key: "checkSize", value: function checkSize(size) { return isNumber(size) ? "".concat(size, "px") : size; } }, { key: "sanitizeValue", value: function sanitizeValue(val) { if (val !== 'true' && val !== 'false') { return val; } return val === 'true'; } }]); return SlideConfigParser; }(); var Slide = function () { function Slide(el, instance, index) { _classCallCheck(this, Slide); this.element = el; this.instance = instance; this.index = index; } _createClass(Slide, [{ key: "setContent", value: function setContent() { var _this = this; var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (hasClass(slide, 'loaded')) { return false; } var settings = this.instance.settings; var slideConfig = this.slideConfig; var isMobileDevice = isMobile(); if (isFunction(settings.beforeSlideLoad)) { settings.beforeSlideLoad({ index: this.index, slide: slide, player: false }); } var type = slideConfig.type; var position = slideConfig.descPosition; var slideMedia = slide.querySelector('.gslide-media'); var slideTitle = slide.querySelector('.gslide-title'); var slideText = slide.querySelector('.gslide-desc'); var slideDesc = slide.querySelector('.gdesc-inner'); var finalCallback = callback; var titleID = 'gSlideTitle_' + this.index; var textID = 'gSlideDesc_' + this.index; if (isFunction(settings.afterSlideLoad)) { finalCallback = function finalCallback() { if (isFunction(callback)) { callback(); } settings.afterSlideLoad({ index: _this.index, slide: slide, player: _this.instance.getSlidePlayerInstance(_this.index) }); }; } if (slideConfig.title == '' && slideConfig.description == '') { if (slideDesc) { slideDesc.parentNode.parentNode.removeChild(slideDesc.parentNode); } } else { if (slideTitle && slideConfig.title !== '') { slideTitle.id = titleID; slideTitle.innerHTML = slideConfig.title; } else { slideTitle.parentNode.removeChild(slideTitle); } if (slideText && slideConfig.description !== '') { slideText.id = textID; if (isMobileDevice && settings.moreLength > 0) { slideConfig.smallDescription = this.slideShortDesc(slideConfig.description, settings.moreLength, settings.moreText); slideText.innerHTML = slideConfig.smallDescription; this.descriptionEvents(slideText, slideConfig); } else { slideText.innerHTML = slideConfig.description; } } else { slideText.parentNode.removeChild(slideText); } addClass(slideMedia.parentNode, "desc-".concat(position)); addClass(slideDesc.parentNode, "description-".concat(position)); } addClass(slideMedia, "gslide-".concat(type)); addClass(slide, 'loaded'); if (type === 'video') { slideVideo.apply(this.instance, [slide, slideConfig, this.index, finalCallback]); return; } if (type === 'external') { slideIframe.apply(this, [slide, slideConfig, this.index, finalCallback]); return; } if (type === 'inline') { slideInline.apply(this.instance, [slide, slideConfig, this.index, finalCallback]); if (slideConfig.draggable) { new DragSlides({ dragEl: slide.querySelector('.gslide-inline'), toleranceX: settings.dragToleranceX, toleranceY: settings.dragToleranceY, slide: slide, instance: this.instance }); } return; } if (type === 'image') { slideImage(slide, slideConfig, this.index, function () { var img = slide.querySelector('img'); if (slideConfig.draggable) { new DragSlides({ dragEl: img, toleranceX: settings.dragToleranceX, toleranceY: settings.dragToleranceY, slide: slide, instance: _this.instance }); } if (slideConfig.zoomable && img.naturalWidth > img.offsetWidth) { addClass(img, 'zoomable'); new ZoomImages(img, slide, function () { _this.instance.resize(); }); } if (isFunction(finalCallback)) { finalCallback(); } }); return; } if (isFunction(finalCallback)) { finalCallback(); } } }, { key: "slideShortDesc", value: function slideShortDesc(string) { var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 50; var wordBoundary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var div = document.createElement('div'); div.innerHTML = string; var cleanedString = div.innerText; var useWordBoundary = wordBoundary; string = cleanedString.trim(); if (string.length <= n) { return string; } var subString = string.substr(0, n - 1); if (!useWordBoundary) { return subString; } div = null; return subString + '... ' + wordBoundary + ''; } }, { key: "descriptionEvents", value: function descriptionEvents(desc, data) { var _this2 = this; var moreLink = desc.querySelector('.desc-more'); if (!moreLink) { return false; } addEvent('click', { onElement: moreLink, withCallback: function withCallback(event, target) { event.preventDefault(); var body = document.body; var desc = closest(target, '.gslide-desc'); if (!desc) { return false; } desc.innerHTML = data.description; addClass(body, 'gdesc-open'); var shortEvent = addEvent('click', { onElement: [body, closest(desc, '.gslide-description')], withCallback: function withCallback(event, target) { if (event.target.nodeName.toLowerCase() !== 'a') { removeClass(body, 'gdesc-open'); addClass(body, 'gdesc-closed'); desc.innerHTML = data.smallDescription; _this2.descriptionEvents(desc, data); setTimeout(function () { removeClass(body, 'gdesc-closed'); }, 400); shortEvent.destroy(); } } }); } }); } }, { key: "create", value: function create() { return createHTML(this.instance.settings.slideHTML); } }, { key: "getConfig", value: function getConfig() { if (!isNode(this.element) && !this.element.hasOwnProperty('draggable')) { this.element.draggable = this.instance.settings.draggable; } var parser = new SlideConfigParser(this.instance.settings.slideExtraAttributes); this.slideConfig = parser.parseConfig(this.element, this.instance.settings); return this.slideConfig; } }]); return Slide; }(); var _version = '3.1.1'; var isMobile$1 = isMobile(); var isTouch$1 = isTouch(); var html = document.getElementsByTagName('html')[0]; var defaults = { selector: '.glightbox', elements: null, skin: 'clean', theme: 'clean', closeButton: true, startAt: null, autoplayVideos: true, autofocusVideos: true, descPosition: 'bottom', width: '900px', height: '506px', videosWidth: '960px', beforeSlideChange: null, afterSlideChange: null, beforeSlideLoad: null, afterSlideLoad: null, slideInserted: null, slideRemoved: null, slideExtraAttributes: null, onOpen: null, onClose: null, loop: false, zoomable: true, draggable: true, dragAutoSnap: false, dragToleranceX: 40, dragToleranceY: 65, preload: true, oneSlidePerOpen: false, touchNavigation: true, touchFollowAxis: true, keyboardNavigation: true, closeOnOutsideClick: true, plugins: false, plyr: { css: 'https://cdn.plyr.io/3.6.8/plyr.css', js: 'https://cdn.plyr.io/3.6.8/plyr.js', config: { ratio: '16:9', fullscreen: { enabled: true, iosNative: true }, youtube: { noCookie: true, rel: 0, showinfo: 0, iv_load_policy: 3 }, vimeo: { byline: false, portrait: false, title: false, transparent: false } } }, openEffect: 'zoom', closeEffect: 'zoom', slideEffect: 'slide', moreText: 'See more', moreLength: 60, cssEfects: { fade: { "in": 'fadeIn', out: 'fadeOut' }, zoom: { "in": 'zoomIn', out: 'zoomOut' }, slide: { "in": 'slideInRight', out: 'slideOutLeft' }, slideBack: { "in": 'slideInLeft', out: 'slideOutRight' }, none: { "in": 'none', out: 'none' } }, svg: { close: '', next: ' ', prev: '' } }; defaults.slideHTML = "
\n
\n
\n
\n
\n
\n
\n

\n
\n
\n
\n
\n
\n
"; defaults.lightboxHTML = "
\n
\n
\n
\n
\n \n \n \n
\n
"; var GlightboxInit = function () { function GlightboxInit() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, GlightboxInit); this.customOptions = options; this.settings = extend(defaults, options); this.effectsClasses = this.getAnimationClasses(); this.videoPlayers = {}; this.apiEvents = []; this.fullElementsList = false; } _createClass(GlightboxInit, [{ key: "init", value: function init() { var _this = this; var selector = this.getSelector(); if (selector) { this.baseEvents = addEvent('click', { onElement: selector, withCallback: function withCallback(e, target) { e.preventDefault(); _this.open(target); } }); } this.elements = this.getElements(); } }, { key: "open", value: function open() { var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (this.elements.length == 0) { return false; } this.activeSlide = null; this.prevActiveSlideIndex = null; this.prevActiveSlide = null; var index = isNumber(startAt) ? startAt : this.settings.startAt; if (isNode(element)) { var gallery = element.getAttribute('data-gallery'); if (gallery) { this.fullElementsList = this.elements; this.elements = this.getGalleryElements(this.elements, gallery); } if (isNil(index)) { index = this.getElementIndex(element); if (index < 0) { index = 0; } } } if (!isNumber(index)) { index = 0; } this.build(); animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade["in"]); var body = document.body; var scrollBar = window.innerWidth - document.documentElement.clientWidth; if (scrollBar > 0) { var styleSheet = document.createElement('style'); styleSheet.type = 'text/css'; styleSheet.className = 'gcss-styles'; styleSheet.innerText = ".gscrollbar-fixer {margin-right: ".concat(scrollBar, "px}"); document.head.appendChild(styleSheet); addClass(body, 'gscrollbar-fixer'); } addClass(body, 'glightbox-open'); addClass(html, 'glightbox-open'); if (isMobile$1) { addClass(document.body, 'glightbox-mobile'); this.settings.slideEffect = 'slide'; } this.showSlide(index, true); if (this.elements.length == 1) { addClass(this.prevButton, 'glightbox-button-hidden'); addClass(this.nextButton, 'glightbox-button-hidden'); } else { removeClass(this.prevButton, 'glightbox-button-hidden'); removeClass(this.nextButton, 'glightbox-button-hidden'); } this.lightboxOpen = true; this.trigger('open'); if (isFunction(this.settings.onOpen)) { this.settings.onOpen(); } if (isTouch$1 && this.settings.touchNavigation) { touchNavigation(this); } if (this.settings.keyboardNavigation) { keyboardNavigation(this); } } }, { key: "openAt", value: function openAt() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; this.open(null, index); } }, { key: "showSlide", value: function showSlide() { var _this2 = this; var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; show(this.loader); this.index = parseInt(index); var current = this.slidesContainer.querySelector('.current'); if (current) { removeClass(current, 'current'); } this.slideAnimateOut(); var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; if (hasClass(slideNode, 'loaded')) { this.slideAnimateIn(slideNode, first); hide(this.loader); } else { show(this.loader); var slide = this.elements[index]; var slideData = { index: this.index, slide: slideNode, slideNode: slideNode, slideConfig: slide.slideConfig, slideIndex: this.index, trigger: slide.node, player: null }; this.trigger('slide_before_load', slideData); slide.instance.setContent(slideNode, function () { hide(_this2.loader); _this2.resize(); _this2.slideAnimateIn(slideNode, first); _this2.trigger('slide_after_load', slideData); }); } this.slideDescription = slideNode.querySelector('.gslide-description'); this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media'); if (this.settings.preload) { this.preloadSlide(index + 1); this.preloadSlide(index - 1); } this.updateNavigationClasses(); this.activeSlide = slideNode; } }, { key: "preloadSlide", value: function preloadSlide(index) { var _this3 = this; if (index < 0 || index > this.elements.length - 1) { return false; } if (isNil(this.elements[index])) { return false; } var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; if (hasClass(slideNode, 'loaded')) { return false; } var slide = this.elements[index]; var type = slide.type; var slideData = { index: index, slide: slideNode, slideNode: slideNode, slideConfig: slide.slideConfig, slideIndex: index, trigger: slide.node, player: null }; this.trigger('slide_before_load', slideData); if (type == 'video' || type == 'external') { setTimeout(function () { slide.instance.setContent(slideNode, function () { _this3.trigger('slide_after_load', slideData); }); }, 200); } else { slide.instance.setContent(slideNode, function () { _this3.trigger('slide_after_load', slideData); }); } } }, { key: "prevSlide", value: function prevSlide() { this.goToSlide(this.index - 1); } }, { key: "nextSlide", value: function nextSlide() { this.goToSlide(this.index + 1); } }, { key: "goToSlide", value: function goToSlide() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.prevActiveSlide = this.activeSlide; this.prevActiveSlideIndex = this.index; if (!this.loop() && (index < 0 || index > this.elements.length - 1)) { return false; } if (index < 0) { index = this.elements.length - 1; } else if (index >= this.elements.length) { index = 0; } this.showSlide(index); } }, { key: "insertSlide", value: function insertSlide() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1; if (index < 0) { index = this.elements.length; } var slide = new Slide(config, this, index); var data = slide.getConfig(); var slideInfo = extend({}, data); var newSlide = slide.create(); var totalSlides = this.elements.length - 1; slideInfo.index = index; slideInfo.node = false; slideInfo.instance = slide; slideInfo.slideConfig = data; this.elements.splice(index, 0, slideInfo); var addedSlideNode = null; var addedSlidePlayer = null; if (this.slidesContainer) { if (index > totalSlides) { this.slidesContainer.appendChild(newSlide); } else { var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index]; this.slidesContainer.insertBefore(newSlide, existingSlide); } if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) { this.preloadSlide(index); } if (this.index == 0 && index == 0) { this.index = 1; } this.updateNavigationClasses(); addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; addedSlidePlayer = this.getSlidePlayerInstance(index); slideInfo.slideNode = addedSlideNode; } this.trigger('slide_inserted', { index: index, slide: addedSlideNode, slideNode: addedSlideNode, slideConfig: data, slideIndex: index, trigger: null, player: addedSlidePlayer }); if (isFunction(this.settings.slideInserted)) { this.settings.slideInserted({ index: index, slide: addedSlideNode, player: addedSlidePlayer }); } } }, { key: "removeSlide", value: function removeSlide() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1; if (index < 0 || index > this.elements.length - 1) { return false; } var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index]; if (slide) { if (this.getActiveSlideIndex() == index) { if (index == this.elements.length - 1) { this.prevSlide(); } else { this.nextSlide(); } } slide.parentNode.removeChild(slide); } this.elements.splice(index, 1); this.trigger('slide_removed', index); if (isFunction(this.settings.slideRemoved)) { this.settings.slideRemoved(index); } } }, { key: "slideAnimateIn", value: function slideAnimateIn(slide, first) { var _this4 = this; var slideMedia = slide.querySelector('.gslide-media'); var slideDesc = slide.querySelector('.gslide-description'); var prevData = { index: this.prevActiveSlideIndex, slide: this.prevActiveSlide, slideNode: this.prevActiveSlide, slideIndex: this.prevActiveSlide, slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) }; var nextData = { index: this.index, slide: this.activeSlide, slideNode: this.activeSlide, slideConfig: this.elements[this.index].slideConfig, slideIndex: this.index, trigger: this.elements[this.index].node, player: this.getSlidePlayerInstance(this.index) }; if (slideMedia.offsetWidth > 0 && slideDesc) { hide(slideDesc); slideDesc.style.display = ''; } removeClass(slide, this.effectsClasses); if (first) { animateElement(slide, this.settings.cssEfects[this.settings.openEffect]["in"], function () { if (_this4.settings.autoplayVideos) { _this4.slidePlayerPlay(slide); } _this4.trigger('slide_changed', { prev: prevData, current: nextData }); if (isFunction(_this4.settings.afterSlideChange)) { _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); } }); } else { var effectName = this.settings.slideEffect; var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName]["in"] : effectName; if (this.prevActiveSlideIndex > this.index) { if (this.settings.slideEffect == 'slide') { animIn = this.settings.cssEfects.slideBack["in"]; } } animateElement(slide, animIn, function () { if (_this4.settings.autoplayVideos) { _this4.slidePlayerPlay(slide); } _this4.trigger('slide_changed', { prev: prevData, current: nextData }); if (isFunction(_this4.settings.afterSlideChange)) { _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); } }); } setTimeout(function () { _this4.resize(slide); }, 100); addClass(slide, 'current'); } }, { key: "slideAnimateOut", value: function slideAnimateOut() { if (!this.prevActiveSlide) { return false; } var prevSlide = this.prevActiveSlide; removeClass(prevSlide, this.effectsClasses); addClass(prevSlide, 'prev'); var animation = this.settings.slideEffect; var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation; this.slidePlayerPause(prevSlide); this.trigger('slide_before_change', { prev: { index: this.prevActiveSlideIndex, slide: this.prevActiveSlide, slideNode: this.prevActiveSlide, slideIndex: this.prevActiveSlideIndex, slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) }, current: { index: this.index, slide: this.activeSlide, slideNode: this.activeSlide, slideIndex: this.index, slideConfig: this.elements[this.index].slideConfig, trigger: this.elements[this.index].node, player: this.getSlidePlayerInstance(this.index) } }); if (isFunction(this.settings.beforeSlideChange)) { this.settings.beforeSlideChange.apply(this, [{ index: this.prevActiveSlideIndex, slide: this.prevActiveSlide, player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) }, { index: this.index, slide: this.activeSlide, player: this.getSlidePlayerInstance(this.index) }]); } if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') { animOut = this.settings.cssEfects.slideBack.out; } animateElement(prevSlide, animOut, function () { var container = prevSlide.querySelector('.ginner-container'); var media = prevSlide.querySelector('.gslide-media'); var desc = prevSlide.querySelector('.gslide-description'); container.style.transform = ''; media.style.transform = ''; removeClass(media, 'greset'); media.style.opacity = ''; if (desc) { desc.style.opacity = ''; } removeClass(prevSlide, 'prev'); }); } }, { key: "getAllPlayers", value: function getAllPlayers() { return this.videoPlayers; } }, { key: "getSlidePlayerInstance", value: function getSlidePlayerInstance(index) { var id = 'gvideo' + index; var videoPlayers = this.getAllPlayers(); if (has(videoPlayers, id) && videoPlayers[id]) { return videoPlayers[id]; } return false; } }, { key: "stopSlideVideo", value: function stopSlideVideo(slide) { if (isNode(slide)) { var node = slide.querySelector('.gvideo-wrapper'); if (node) { slide = node.getAttribute('data-index'); } } console.log('stopSlideVideo is deprecated, use slidePlayerPause'); var player = this.getSlidePlayerInstance(slide); if (player && player.playing) { player.pause(); } } }, { key: "slidePlayerPause", value: function slidePlayerPause(slide) { if (isNode(slide)) { var node = slide.querySelector('.gvideo-wrapper'); if (node) { slide = node.getAttribute('data-index'); } } var player = this.getSlidePlayerInstance(slide); if (player && player.playing) { player.pause(); } } }, { key: "playSlideVideo", value: function playSlideVideo(slide) { if (isNode(slide)) { var node = slide.querySelector('.gvideo-wrapper'); if (node) { slide = node.getAttribute('data-index'); } } console.log('playSlideVideo is deprecated, use slidePlayerPlay'); var player = this.getSlidePlayerInstance(slide); if (player && !player.playing) { player.play(); } } }, { key: "slidePlayerPlay", value: function slidePlayerPlay(slide) { if (isNode(slide)) { var node = slide.querySelector('.gvideo-wrapper'); if (node) { slide = node.getAttribute('data-index'); } } var player = this.getSlidePlayerInstance(slide); if (player && !player.playing) { player.play(); if (this.settings.autofocusVideos) { player.elements.container.focus(); } } } }, { key: "setElements", value: function setElements(elements) { var _this5 = this; this.settings.elements = false; var newElements = []; if (elements && elements.length) { each(elements, function (el, i) { var slide = new Slide(el, _this5, i); var data = slide.getConfig(); var slideInfo = extend({}, data); slideInfo.slideConfig = data; slideInfo.instance = slide; slideInfo.index = i; newElements.push(slideInfo); }); } this.elements = newElements; if (this.lightboxOpen) { this.slidesContainer.innerHTML = ''; if (this.elements.length) { each(this.elements, function () { var slide = createHTML(_this5.settings.slideHTML); _this5.slidesContainer.appendChild(slide); }); this.showSlide(0, true); } } } }, { key: "getElementIndex", value: function getElementIndex(node) { var index = false; each(this.elements, function (el, i) { if (has(el, 'node') && el.node == node) { index = i; return true; } }); return index; } }, { key: "getElements", value: function getElements() { var _this6 = this; var list = []; this.elements = this.elements ? this.elements : []; if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) { each(this.settings.elements, function (el, i) { var slide = new Slide(el, _this6, i); var elData = slide.getConfig(); var slideInfo = extend({}, elData); slideInfo.node = false; slideInfo.index = i; slideInfo.instance = slide; slideInfo.slideConfig = elData; list.push(slideInfo); }); } var nodes = false; var selector = this.getSelector(); if (selector) { nodes = document.querySelectorAll(this.getSelector()); } if (!nodes) { return list; } each(nodes, function (el, i) { var slide = new Slide(el, _this6, i); var elData = slide.getConfig(); var slideInfo = extend({}, elData); slideInfo.node = el; slideInfo.index = i; slideInfo.instance = slide; slideInfo.slideConfig = elData; slideInfo.gallery = el.getAttribute('data-gallery'); list.push(slideInfo); }); return list; } }, { key: "getGalleryElements", value: function getGalleryElements(list, gallery) { return list.filter(function (el) { return el.gallery == gallery; }); } }, { key: "getSelector", value: function getSelector() { if (this.settings.elements) { return false; } if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') { return "*[".concat(this.settings.selector, "]"); } return this.settings.selector; } }, { key: "getActiveSlide", value: function getActiveSlide() { return this.slidesContainer.querySelectorAll('.gslide')[this.index]; } }, { key: "getActiveSlideIndex", value: function getActiveSlideIndex() { return this.index; } }, { key: "getAnimationClasses", value: function getAnimationClasses() { var effects = []; for (var key in this.settings.cssEfects) { if (this.settings.cssEfects.hasOwnProperty(key)) { var effect = this.settings.cssEfects[key]; effects.push("g".concat(effect["in"])); effects.push("g".concat(effect.out)); } } return effects.join(' '); } }, { key: "build", value: function build() { var _this7 = this; if (this.built) { return false; } var children = document.body.childNodes; var bodyChildElms = []; each(children, function (el) { if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) { bodyChildElms.push(el); el.setAttribute('aria-hidden', 'true'); } }); var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : ''; var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : ''; var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : ''; var lightboxHTML = this.settings.lightboxHTML; lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG); lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG); lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG); lightboxHTML = createHTML(lightboxHTML); document.body.appendChild(lightboxHTML); var modal = document.getElementById('glightbox-body'); this.modal = modal; var closeButton = modal.querySelector('.gclose'); this.prevButton = modal.querySelector('.gprev'); this.nextButton = modal.querySelector('.gnext'); this.overlay = modal.querySelector('.goverlay'); this.loader = modal.querySelector('.gloader'); this.slidesContainer = document.getElementById('glightbox-slider'); this.bodyHiddenChildElms = bodyChildElms; this.events = {}; addClass(this.modal, 'glightbox-' + this.settings.skin); if (this.settings.closeButton && closeButton) { this.events['close'] = addEvent('click', { onElement: closeButton, withCallback: function withCallback(e, target) { e.preventDefault(); _this7.close(); } }); } if (closeButton && !this.settings.closeButton) { closeButton.parentNode.removeChild(closeButton); } if (this.nextButton) { this.events['next'] = addEvent('click', { onElement: this.nextButton, withCallback: function withCallback(e, target) { e.preventDefault(); _this7.nextSlide(); } }); } if (this.prevButton) { this.events['prev'] = addEvent('click', { onElement: this.prevButton, withCallback: function withCallback(e, target) { e.preventDefault(); _this7.prevSlide(); } }); } if (this.settings.closeOnOutsideClick) { this.events['outClose'] = addEvent('click', { onElement: modal, withCallback: function withCallback(e, target) { if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) { if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) { _this7.close(); } } } }); } each(this.elements, function (slide, i) { _this7.slidesContainer.appendChild(slide.instance.create()); slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i]; }); if (isTouch$1) { addClass(document.body, 'glightbox-touch'); } this.events['resize'] = addEvent('resize', { onElement: window, withCallback: function withCallback() { _this7.resize(); } }); this.built = true; } }, { key: "resize", value: function resize() { var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; slide = !slide ? this.activeSlide : slide; if (!slide || hasClass(slide, 'zoomed')) { return; } var winSize = windowSize(); var video = slide.querySelector('.gvideo-wrapper'); var image = slide.querySelector('.gslide-image'); var description = this.slideDescription; var winWidth = winSize.width; var winHeight = winSize.height; if (winWidth <= 768) { addClass(document.body, 'glightbox-mobile'); } else { removeClass(document.body, 'glightbox-mobile'); } if (!video && !image) { return; } var descriptionResize = false; if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) { descriptionResize = true; } if (image) { if (winWidth <= 768) { var imgNode = image.querySelector('img'); } else if (descriptionResize) { var descHeight = description.offsetHeight; var _imgNode = image.querySelector('img'); _imgNode.setAttribute('style', "max-height: calc(100vh - ".concat(descHeight, "px)")); description.setAttribute('style', "max-width: ".concat(_imgNode.offsetWidth, "px;")); } } if (video) { var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : ''; if (!ratio) { var containerWidth = video.clientWidth; var containerHeight = video.clientHeight; var divisor = containerWidth / containerHeight; ratio = "".concat(containerWidth / divisor, ":").concat(containerHeight / divisor); } var videoRatio = ratio.split(':'); var videoWidth = this.settings.videosWidth; var maxWidth = this.settings.videosWidth; if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) { maxWidth = parseInt(videoWidth); } else { if (videoWidth.indexOf('vw') !== -1) { maxWidth = winWidth * parseInt(videoWidth) / 100; } else if (videoWidth.indexOf('vh') !== -1) { maxWidth = winHeight * parseInt(videoWidth) / 100; } else if (videoWidth.indexOf('%') !== -1) { maxWidth = winWidth * parseInt(videoWidth) / 100; } else { maxWidth = parseInt(video.clientWidth); } } var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1])); maxHeight = Math.floor(maxHeight); if (descriptionResize) { winHeight = winHeight - description.offsetHeight; } if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) { var vwidth = video.offsetWidth; var vheight = video.offsetHeight; var _ratio = winHeight / vheight; var vsize = { width: vwidth * _ratio, height: vheight * _ratio }; video.parentNode.setAttribute('style', "max-width: ".concat(vsize.width, "px")); if (descriptionResize) { description.setAttribute('style', "max-width: ".concat(vsize.width, "px;")); } } else { video.parentNode.style.maxWidth = "".concat(videoWidth); if (descriptionResize) { description.setAttribute('style', "max-width: ".concat(videoWidth, ";")); } } } } }, { key: "reload", value: function reload() { this.init(); } }, { key: "updateNavigationClasses", value: function updateNavigationClasses() { var loop = this.loop(); removeClass(this.nextButton, 'disabled'); removeClass(this.prevButton, 'disabled'); if (this.index == 0 && this.elements.length - 1 == 0) { addClass(this.prevButton, 'disabled'); addClass(this.nextButton, 'disabled'); } else if (this.index === 0 && !loop) { addClass(this.prevButton, 'disabled'); } else if (this.index === this.elements.length - 1 && !loop) { addClass(this.nextButton, 'disabled'); } } }, { key: "loop", value: function loop() { var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null; loop = has(this.settings, 'loop') ? this.settings.loop : loop; return loop; } }, { key: "close", value: function close() { var _this8 = this; if (!this.lightboxOpen) { if (this.events) { for (var key in this.events) { if (this.events.hasOwnProperty(key)) { this.events[key].destroy(); } } this.events = null; } return false; } if (this.closing) { return false; } this.closing = true; this.slidePlayerPause(this.activeSlide); if (this.fullElementsList) { this.elements = this.fullElementsList; } if (this.bodyHiddenChildElms.length) { each(this.bodyHiddenChildElms, function (el) { el.removeAttribute('aria-hidden'); }); } addClass(this.modal, 'glightbox-closing'); animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out); animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () { _this8.activeSlide = null; _this8.prevActiveSlideIndex = null; _this8.prevActiveSlide = null; _this8.built = false; if (_this8.events) { for (var _key in _this8.events) { if (_this8.events.hasOwnProperty(_key)) { _this8.events[_key].destroy(); } } _this8.events = null; } var body = document.body; removeClass(html, 'glightbox-open'); removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer'); _this8.modal.parentNode.removeChild(_this8.modal); _this8.trigger('close'); if (isFunction(_this8.settings.onClose)) { _this8.settings.onClose(); } var styles = document.querySelector('.gcss-styles'); if (styles) { styles.parentNode.removeChild(styles); } _this8.lightboxOpen = false; _this8.closing = null; }); } }, { key: "destroy", value: function destroy() { this.close(); this.clearAllEvents(); if (this.baseEvents) { this.baseEvents.destroy(); } } }, { key: "on", value: function on(evt, callback) { var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!evt || !isFunction(callback)) { throw new TypeError('Event name and callback must be defined'); } this.apiEvents.push({ evt: evt, once: once, callback: callback }); } }, { key: "once", value: function once(evt, callback) { this.on(evt, callback, true); } }, { key: "trigger", value: function trigger(eventName) { var _this9 = this; var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var onceTriggered = []; each(this.apiEvents, function (event, i) { var evt = event.evt, once = event.once, callback = event.callback; if (evt == eventName) { callback(data); if (once) { onceTriggered.push(i); } } }); if (onceTriggered.length) { each(onceTriggered, function (i) { return _this9.apiEvents.splice(i, 1); }); } } }, { key: "clearAllEvents", value: function clearAllEvents() { this.apiEvents.splice(0, this.apiEvents.length); } }, { key: "version", value: function version() { return _version; } }]); return GlightboxInit; }(); function glightbox () { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var instance = new GlightboxInit(options); instance.init(); return instance; } return glightbox; })));assets/js/app.min.js000064400000002656147600374750010410 0ustar00window.addEventListener("load",()=>{if(document.body.classList.contains("is-active-focus")){document.querySelectorAll(".active__focus-row").forEach(function(e){for(var o=e.querySelectorAll(".active__focus-item"),l=0;l{console.log("lightbox opened")});var lightboxDescription=GLightbox({selector:".hesterpop__galleryDesc, .gallery-poup .gallery-icon a"}),lightboxVideo=GLightbox({selector:".hesterpop__video"}),lightboxInlineIframe=GLightbox({selector:".hesterpop__inlineIframe"});lightboxVideo.on("slide_changed",({prev:e,current:o})=>{console.log("Prev slide",e),console.log("Current slide",o);const{slideIndex:l,slideNode:r,slideConfig:t,player:i}=o;i&&(i.ready||i.on("ready",e=>{}),i.on("play",e=>{console.log("Started play")}),i.on("volumechange",e=>{console.log("Volume change")}),i.on("ended",e=>{console.log("Video ended")}))})}assets/js/app.js000064400000004413147600374750007617 0ustar00// Active / Hover window.addEventListener( 'load', () => { if ( document.body.classList.contains( 'is-active-focus' ) ) { let activeClassRows = document.querySelectorAll( '.active__focus-row' ); activeClassRows.forEach( function( activeClassRow ) { var activeclass = activeClassRow.querySelectorAll( '.active__focus-item' ); for ( var i = 0; i < activeclass.length; i++ ) { activeclass[i].addEventListener( 'mouseenter', activateClass ); } function activateClass( event ) { for ( var i = 0; i < activeclass.length; i++ ) { activeclass[i].classList.remove( 'active' ); } event.target.classList.add( 'active' ); } }); } }); // .starter__swiper let swiperCarousels = document.querySelectorAll( '.starter__swiper' ); for ( var i = 0; i < swiperCarousels.length; i++ ) { let swiperOptions = JSON.parse( swiperCarousels[i].dataset.swiperOptions ); let carouselSwiperSlider = new Swiper( swiperCarousels[i], swiperOptions ); } // Starter PopUp if ( document.querySelector( '.hesterpop__galleryDesc' ) || document.querySelector( '.gallery-poup .gallery-icon a' ) || document.querySelector( '.hesterpop__video' ) || document.querySelector( '.hesterpop__inlineIframe' ) ) { var lightbox = GLightbox(); lightbox.on( 'open', ( target ) => { console.log( 'lightbox opened' ); }); var lightboxDescription = GLightbox({ selector: '.hesterpop__galleryDesc, .gallery-poup .gallery-icon a' }); var lightboxVideo = GLightbox({ selector: '.hesterpop__video' }); var lightboxInlineIframe = GLightbox({ selector: '.hesterpop__inlineIframe' }); lightboxVideo.on( 'slide_changed', ({ prev, current }) => { console.log( 'Prev slide', prev ); console.log( 'Current slide', current ); const { slideIndex, slideNode, slideConfig, player } = current; if ( player ) { if ( ! player.ready ) { // If player is not ready player.on( 'ready', ( event ) => { // Do something when video is ready }); } player.on( 'play', ( event ) => { console.log( 'Started play' ); }); player.on( 'volumechange', ( event ) => { console.log( 'Volume change' ); }); player.on( 'ended', ( event ) => { console.log( 'Video ended' ); }); } }); }assets/js/admin-widgets.min.js000064400000004160147600374750012354 0ustar00!function($){"use strict";$("body"),$(document),$("#page"),$("html");var HesterCoreAdminWidgets={init:function(){$(document).ready(HesterCoreAdminWidgets.ready),$(window).on("load",HesterCoreAdminWidgets.load),HesterCoreAdminWidgets.bindUIActions(),$(document).trigger("hesterCoreWidgetsReady")},ready:function(){HesterCoreAdminWidgets.initRepeatableSortable()},load:function(){},bindUIActions:function(){var $this,template,$widget,index=0;$(document).on("click",".hester-repeatable-widget .add-new-item",function(e){e.preventDefault(),$this=$(this),index=parseInt($this.attr("data-index")),template=wp.template("hester-core-repeatable-item");var data={index:index,name:$this.attr("data-widget-name"),id:$this.attr("data-widget-id")};index++,$this.attr("data-index",index),$(template(data)).insertBefore($this.closest(".hester-repeatable-footer")),$this.closest(".widget-inside").trigger("change"),update_widget_repeatable_class($this)}),$(document).on("click",".hester-repeatable-widget .remove-repeatable-item",function(e){e.preventDefault(),$this=$(this),$widget=$this.closest(".hester-repeatable-container"),$this.closest(".widget-inside").trigger("change"),$this.closest(".hester-repeatable-item").remove(),update_widget_repeatable_class($widget)}),$(document).on("click",".hester-repeatable-widget .hester-repeatable-item-title",function(){$(this).closest(".hester-repeatable-item").toggleClass("open")});var update_widget_repeatable_class=function($target){var $widget=$target.closest(".hester-repeatable-container");$widget.find(".hester-repeatable-item").length?$widget.removeClass("empty"):$widget.addClass("empty")};$(document).on("widget-updated widget-added",function(e,widget){widget.find(".hester-repeatable-container").length&&HesterCoreAdminWidgets.initRepeatableSortable()})},initRepeatableSortable:function(){$(".hester-repeatable-container").sortable({handle:".hester-repeatable-item-title",accent:".hester-repeatable-item",containment:"parent",tolerance:"pointer",change:function(event,ui){$(this).closest(".widget-inside").trigger("change")}})}};HesterCoreAdminWidgets.init(),window.HesterCoreAdminWidgets=HesterCoreAdminWidgets}(jQuery);assets/js/admin-widgets.js000064400000007317147600374750011601 0ustar00//--------------------------------------------------------------------// // Hester Core Admin Widgets script. //--------------------------------------------------------------------// ;(function( $ ) { "use strict"; /** * Common element caching. */ var $body = $( 'body' ); var $document = $( document ); var $wrapper = $( '#page' ); var $html = $( 'html' ); var $this; /** * Holds most important methods that bootstrap the whole theme. * * @type {Object} */ var HesterCoreAdminWidgets = { /** * Start the engine. * * @since 1.0.0 */ init: function() { // Document ready $(document).ready( HesterCoreAdminWidgets.ready ); // Window load $(window).on( 'load', HesterCoreAdminWidgets.load ); // Bind UI actions HesterCoreAdminWidgets.bindUIActions(); // Trigger event when Hester fully loaded $(document).trigger( 'hesterCoreWidgetsReady' ); }, //--------------------------------------------------------------------// // Events //--------------------------------------------------------------------// /** * Document ready. * * @since 1.0.0 */ ready: function() { HesterCoreAdminWidgets.initRepeatableSortable(); }, /** * Window load. * * @since 1.0.0 */ load: function() { }, /** * Bind UI actions. * * @since 1.0.0 */ bindUIActions: function() { var $this, index = 0, template, $widget; $(document).on( 'click', '.hester-repeatable-widget .add-new-item', function(e){ e.preventDefault(); $this = $(this); index = parseInt( $this.attr('data-index') ); template = wp.template( 'hester-core-repeatable-item' ); var data = { index: index, name: $this.attr('data-widget-name'), id: $this.attr('data-widget-id'), }; index++; $this.attr( 'data-index', index ); $( template( data ) ).insertBefore( $this.closest('.hester-repeatable-footer') ); $this.closest('.widget-inside').trigger('change'); update_widget_repeatable_class( $this ); }); $(document).on( 'click', '.hester-repeatable-widget .remove-repeatable-item', function(e){ e.preventDefault(); $this = $(this); $widget = $this.closest('.hester-repeatable-container'); $this.closest('.widget-inside').trigger('change'); $this.closest('.hester-repeatable-item').remove(); update_widget_repeatable_class( $widget ); }); $(document).on( 'click', '.hester-repeatable-widget .hester-repeatable-item-title', function(){ $(this).closest('.hester-repeatable-item').toggleClass('open'); }); var update_widget_repeatable_class = function( $target ) { var $widget = $target.closest('.hester-repeatable-container'); if ( $widget.find('.hester-repeatable-item').length ) { $widget.removeClass('empty'); } else { $widget.addClass('empty'); } }; // Updated widget event. $(document).on( 'widget-updated widget-added', function( e, widget ){ if ( widget.find('.hester-repeatable-container').length ) { HesterCoreAdminWidgets.initRepeatableSortable(); } }); }, //--------------------------------------------------------------------// // Functions //--------------------------------------------------------------------// initRepeatableSortable: function() { $('.hester-repeatable-container').sortable({ handle: '.hester-repeatable-item-title', accent: '.hester-repeatable-item', containment: 'parent', tolerance: 'pointer', change: function( event, ui ){ $(this).closest('.widget-inside').trigger('change'); }, }); }, }; // END var HesterCoreAdminWidgets. HesterCoreAdminWidgets.init(); window.HesterCoreAdminWidgets = HesterCoreAdminWidgets; })( jQuery ); assets/js/swiper-bundle.min.js000064400000410776147600374750012416 0ustar00/** * Swiper 7.3.1 * Most modern mobile touch slider and framework with hardware accelerated transitions * https://swiperjs.com * * Copyright 2014-2021 Vladimir Kharlampidi * * Released under the MIT License * * Released on: November 24, 2021 */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s={},a={}){Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this)}}function l(e=[]){const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("e.split(" "))));return this.forEach((e=>{e.classList.add(...t)})),this},removeClass:function(...e){const t=l(e.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...t)})),this},hasClass:function(...e){const t=l(e.map((e=>e.split(" "))));return o(this,(e=>t.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(...e){const t=l(e.map((e=>e.split(" "))));this.forEach((e=>{t.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s=0;e-=1){const s=n[e];a&&s.listener===a||a&&s.listener&&s.listener.dom7proxy&&s.listener.dom7proxy===a?(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1)):a||(r.removeEventListener(t,s.proxyListener,i),n.splice(e,1))}}}return this},trigger:function(...e){const t=r(),s=e[0].split(" "),a=e[1];for(let i=0;it>0)),i.dispatchEvent(s),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;tt-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(...e){let t;const s=a();for(let a=0;a=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(...e){const t=Object(e[0]),s=["__proto__","constructor","prototype"];for(let i=1;is.indexOf(e)<0));for(let s=0,a=e.length;si?"next":"prev",c=(e,t)=>"next"===d&&e>=t||"prev"===d&&e<=t,p=()=>{n=(new Date).getTime(),null===l&&(l=n);const r=Math.max(Math.min((n-l)/o,1),0),d=.5-Math.cos(r*Math.PI)/2;let u=i+d*(t-i);if(c(u,t)&&(u=t),e.wrapperEl.scrollTo({[s]:u}),c(u,t))return e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.scrollSnapType="",setTimeout((()=>{e.wrapperEl.style.overflow="",e.wrapperEl.scrollTo({[s]:u})})),void a.cancelAnimationFrame(e.cssModeFrameID);e.cssModeFrameID=a.requestAnimationFrame(p)};p()}let w,b,x;function y(){return w||(w=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),w}function E(e={}){return b||(b=function({userAgent:e}={}){const t=y(),s=r(),a=s.navigator.platform,i=e||s.navigator.userAgent,n={ios:!1,android:!1},l=s.screen.width,o=s.screen.height,d=i.match(/(Android);?[\s\/]+([\d.]+)?/);let c=i.match(/(iPad).*OS\s([\d_]+)/);const p=i.match(/(iPod)(.*OS\s([\d_]+))?/),u=!c&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/),h="Win32"===a;let m="MacIntel"===a;return!c&&m&&t.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${l}x${o}`)>=0&&(c=i.match(/(Version)\/([\d.]+)/),c||(c=[0,1,"13_0_0"]),m=!1),d&&!h&&(n.os="android",n.android=!0),(c||u||p)&&(n.os="ios",n.ios=!0),n}(e)),b}function T(){return x||(x=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),x}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var C={on(e,t,s){const a=this;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if("function"!=typeof t)return a;function i(...s){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy,t.apply(a,s)}return i.__emitterProxy=t,a.on(e,i,s)},onAny(e,t){const s=this;if("function"!=typeof e)return s;const a=t?"unshift":"push";return s.eventsAnyListeners.indexOf(e)<0&&s.eventsAnyListeners[a](e),s},offAny(e){const t=this;if(!t.eventsAnyListeners)return t;const s=t.eventsAnyListeners.indexOf(e);return s>=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(...e){const t=this;if(!t.eventsListeners)return t;let s,a,i;"string"==typeof e[0]||Array.isArray(e[0])?(s=e[0],a=e.slice(1,e.length),i=t):(s=e[0].events,a=e[0].data,i=e[0].context||t),a.unshift(i);return(Array.isArray(s)?s:s.split(" ")).forEach((e=>{t.eventsAnyListeners&&t.eventsAnyListeners.length&&t.eventsAnyListeners.forEach((t=>{t.apply(i,[e,...a])})),t.eventsListeners&&t.eventsListeners[e]&&t.eventsListeners[e].forEach((e=>{e.apply(i,a)}))})),t}};function $({swiper:e,runCallbacks:t,direction:s,step:a}){const{activeIndex:i,previousIndex:r}=e;let n=s;if(n||(n=i>r?"next":i0)return;if(n.isTouched&&n.isMoved)return;!!l.noSwipingClass&&""!==l.noSwipingClass&&p.target&&p.target.shadowRoot&&e.path&&e.path[0]&&(h=d(e.path[0]));const m=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(f?function(e,t=this){return function t(s){return s&&s!==a()&&s!==r()?(s.assignedSlot&&(s=s.assignedSlot),s.closest(e)||t(s.getRootNode().host)):null}(t)}(m,p.target):h.closest(m)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const g=o.currentX,v=o.currentY,w=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,b=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(w&&(g<=b||g>=i.innerWidth-b)){if("prevent"!==w)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=g,o.startY=v,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.emit("touchStart",p)}function M(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return s.allowClick=!1,void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(mn.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(hn.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function P(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick){const e=o.path||o.composedPath&&o.composedPath();t.updateClickedSlide(e&&e[0]||o.target),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)}if(s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e=n[e]&&h=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}const g=(h-n[m])/f,v=ma.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(g>=a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m)),"prev"===t.swipeDirection&&(g>1-a.longSwipesRatio?t.slideTo(m+v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+v):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(m+v),"prev"===t.swipeDirection&&t.slideTo(m))}}function k(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function z(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function O(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let I=!1;function L(){}const A=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",k,!0):e[u]("observerUpdate",k,!0)};const D=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var G={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function N(e,t){return function(s={}){const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),f(t,s)):f(t,s)):f(t,s)}}const B={eventsEmitter:C,update:{updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let v=a.slidesOffsetAfter;"function"==typeof v&&(v=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,T=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(g(e.wrapperEl,"--swiper-centered-offset-before",""),g(e.wrapperEl,"--swiper-centered-offset-after",""));const C=a.grid&&a.grid.rows>1&&e.grid;let $;C&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+v:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){g(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),g(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset()},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)t.visibleSlides.each((e=>{s.push(e)}));else for(i=0;it.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;ir?e:r}r&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s=0&&p1&&u<=t.size||p<=0&&u>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),l.progress=i?-d:d,l.originalProgress=i?-c:c}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e=a[e]&&s=a[e]&&s=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;eo?o:a&&e=o.length&&(g=o.length-1),(p||l.initialSlide||0)===(c||0)&&s&&r.emit("beforeSlideChangeStart");const w=-o[g];if(r.updateProgress(w),l.normalizeSlideIndex)for(let e=0;e=s&&t=s&&t=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&wr.translate&&w>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(b=n>p?"next":n{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return v({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.transitionEnd(s,b)):(r.setTransition(t),r.setTranslate(w),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd))),!0},slideToLoop:function(e=0,t=this.params.speed,s=!0,a){const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e=this.params.speed,t=!0,s){const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndexc(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;return void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),a.slideTo(m,e,t,s)},slideReset:function(e=this.params.speed,t=!0,s){return this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e=this.params.speed,t=!0,s,a=.5){const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?re.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}},loop:{loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e,r=i.children().length>0?d(i.children()[0].parentNode):i;r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let n=r.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-n.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;an.length&&(e.loopedSlides=n.length);const l=[],o=[];n.each(((t,s)=>{const a=d(t);s=n.length-e.loopedSlides&&l.push(t),a.attr("data-swiper-slide-index",s)}));for(let e=0;e=0;e-=1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}},grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"-webkit-grabbing":"-webkit-grab",s.style.cursor=e?"-moz-grabbin":"-moz-grab",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:{attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=S.bind(e),e.onTouchMove=M.bind(e),e.onTouchEnd=P.bind(e),s.cssMode&&(e.onScroll=O.bind(e)),e.onClick=z.bind(e),i.touch&&!I&&(t.addEventListener("touchstart",L),I=!0),A(e,"on")},detachEvents:function(){A(this,"off")}},breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=D(e,i),c=D(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses());const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),f(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t="window",s){if(!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;es}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:{addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}},images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s1){const e=[];return d(s.el).each((t=>{const a=f({},s,{el:t});e.push(new H(a))})),e}const a=this;a.__swiper__=!0,a.support=y(),a.device=E({userAgent:s.userAgent}),a.browser=T(),a.eventsListeners={},a.eventsAnyListeners=[],a.modules=[...a.__modules__],s.modules&&Array.isArray(s.modules)&&a.modules.push(...s.modules);const i={};a.modules.forEach((e=>{e({swiper:a,extendParams:N(s,i),on:a.on.bind(a),once:a.once.bind(a),off:a.off.bind(a),emit:a.emit.bind(a)})}));const r=f({},G,i);return a.params=f({},r,X,s),a.originalParams=f({},a.params),a.passedParams=f({},s),a.params&&a.params.on&&Object.keys(a.params.on).forEach((e=>{a.on(e,a.params.on[e])})),a.params&&a.params.onAny&&a.onAny(a.params.onAny),a.$=d,Object.assign(a,{enabled:a.params.enabled,el:t,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===a.params.direction,isVertical:()=>"vertical"===a.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:a.params.allowSlideNext,allowSlidePrev:a.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return a.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},a.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},a.support.touch||!a.params.simulateTouch?a.touchEventsTouch:a.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:a.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:a.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),a.emit("_swiper"),a.params.init&&a.init(),a}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e="current",t=!1){const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;sn&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e=0;e-=1){i[l]-i[e]1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t=!0){const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){f(X,e)}static get extendedDefaults(){return X}static get defaults(){return G}static installModule(e){H.prototype.__modules__||(H.prototype.__modules__=[]);const t=H.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>H.installModule(e))),H):(H.installModule(e),H)}}function Y(e,t,s,i){const r=a();return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function W(e=""){return`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function R(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;ee?n+t.length:n}else a.append(t);for(let e=0;e{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)}))}function U(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function K({swiper:e,duration:t,transformEl:s,allSlides:a}){const{slides:i,activeIndex:r,$wrapperEl:n}=e;if(e.params.virtualTranslate&&0!==t){let t,l=!1;t=a?s?i.find(s):i:s?i.eq(r).find(s):i.eq(r),t.transitionEnd((()=>{if(l)return;if(!e||e.destroyed)return;l=!0,e.animating=!1;const t=["webkitTransitionEnd","transitionend"];for(let e=0;e`),i.append(r)),r}Object.keys(B).forEach((e=>{Object.keys(B[e]).forEach((t=>{H.prototype[t]=B[e][t]}))})),H.use([function({swiper:e,on:t,emit:s}){const a=r();let i=null;const n=()=>{e&&!e.destroyed&&e.initialized&&(s("beforeResize"),s("resize"))},l=()=>{e&&!e.destroyed&&e.initialized&&s("orientationchange")};t("init",(()=>{e.params.resizeObserver&&void 0!==a.ResizeObserver?e&&!e.destroyed&&e.initialized&&(i=new ResizeObserver((t=>{const{width:s,height:a}=e;let i=s,r=a;t.forEach((({contentBoxSize:t,contentRect:s,target:a})=>{a&&a!==e.el||(i=s?s.width:(t[0]||t).inlineSize,r=s?s.height:(t[0]||t).blockSize)})),i===s&&r===a||n()})),i.observe(e.el)):(a.addEventListener("resize",n),a.addEventListener("orientationchange",l))})),t("destroy",(()=>{i&&i.unobserve&&e.el&&(i.unobserve(e.el),i=null),a.removeEventListener("resize",n),a.removeEventListener("orientationchange",l)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=[],n=r(),l=(e,t={})=>{const s=new(n.MutationObserver||n.WebkitMutationObserver)((e=>{if(1===e.length)return void a("observerUpdate",e[0]);const t=function(){a("observerUpdate",e[0])};n.requestAnimationFrame?n.requestAnimationFrame(t):n.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.push(s)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),s("init",(()=>{if(e.params.observer){if(e.params.observeParents){const t=e.$el.parents();for(let e=0;e{i.forEach((e=>{e.disconnect()})),i.splice(0,i.length)}))}]);const J=[function({swiper:e,extendParams:t,on:s}){let a;function i(t,s){const a=e.params.virtual;if(a.cache&&e.virtual.cache[s])return e.virtual.cache[s];const i=a.renderSlide?d(a.renderSlide.call(e,t,s)):d(`
${t}
`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",s),a.cache&&(e.virtual.cache[s]=i),i}function r(t){const{slidesPerView:s,slidesPerGroup:a,centeredSlides:r}=e.params,{addSlidesBefore:n,addSlidesAfter:l}=e.params.virtual,{from:o,to:d,slides:c,slidesGrid:p,offset:u}=e.virtual;e.params.cssMode||e.updateActiveIndex();const h=e.activeIndex||0;let m,f,g;m=e.rtlTranslate?"right":e.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a+l,g=Math.floor(s/2)+a+n):(f=s+(a-1)+l,g=a+n);const v=Math.max((h||0)-g,0),w=Math.min((h||0)+f,c.length-1),b=(e.slidesGrid[v]||0)-(e.slidesGrid[0]||0);function x(){e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.lazy&&e.params.lazy.enabled&&e.lazy.load()}if(Object.assign(e.virtual,{from:v,to:w,offset:b,slidesGrid:e.slidesGrid}),o===v&&d===w&&!t)return e.slidesGrid!==p&&b!==u&&e.slides.css(m,`${b}px`),void e.updateProgress();if(e.params.virtual.renderExternal)return e.params.virtual.renderExternal.call(e,{offset:b,from:v,to:w,slides:function(){const e=[];for(let t=v;t<=w;t+=1)e.push(c[t]);return e}()}),void(e.params.virtual.renderExternalUpdate&&x());const y=[],E=[];if(t)e.$wrapperEl.find(`.${e.params.slideClass}`).remove();else for(let t=o;t<=d;t+=1)(tw)&&e.$wrapperEl.find(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`).remove();for(let e=0;e=v&&e<=w&&(void 0===d||t?E.push(e):(e>d&&E.push(e),e{e.$wrapperEl.append(i(c[t],t))})),y.sort(((e,t)=>t-e)).forEach((t=>{e.$wrapperEl.prepend(i(c[t],t))})),e.$wrapperEl.children(".swiper-slide").css(m,`${b}px`),x()}t({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),e.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},s("beforeInit",(()=>{e.params.virtual.enabled&&(e.virtual.slides=e.params.virtual.slides,e.classNames.push(`${e.params.containerModifierClass}virtual`),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0,e.params.initialSlide||r())})),s("setTranslate",(()=>{e.params.virtual.enabled&&(e.params.cssMode&&!e._immediateVirtual?(clearTimeout(a),a=setTimeout((()=>{r()}),100)):r())})),s("init update resize",(()=>{e.params.virtual.enabled&&e.params.cssMode&&g(e.wrapperEl,"--swiper-virtual-size",`${e.virtualSize}px`)})),Object.assign(e.virtual,{appendSlide:function(t){if("object"==typeof t&&"length"in t)for(let s=0;s{const a=t[e],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),s[parseInt(e,10)+i]=a})),e.virtual.cache=s}r(!0),e.slideTo(a,0)},removeSlide:function(t){if(null==t)return;let s=e.activeIndex;if(Array.isArray(t))for(let a=t.length-1;a>=0;a-=1)e.virtual.slides.splice(t[a],1),e.params.virtual.cache&&delete e.virtual.cache[t[a]],t[a]0&&0===e.$el.parents(`.${e.params.slideActiveClass}`).length)return;const a=e.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=l.innerWidth,o=l.innerHeight,d=e.$el.offset();s&&(d.left-=e.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let e=0;e=0&&s[0]<=n&&s[1]>=0&&s[1]<=o){if(0===s[0]&&0===s[1])continue;t=!0}}if(!t)return}e.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&e.slideNext(),((d||p)&&!s||(c||u)&&s)&&e.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&e.slideNext(),(d||h)&&e.slidePrev()),i("keyPress",r)}}function c(){e.keyboard.enabled||(d(n).on("keydown",o),e.keyboard.enabled=!0)}function p(){e.keyboard.enabled&&(d(n).off("keydown",o),e.keyboard.enabled=!1)}e.keyboard={enabled:!1},t({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),s("init",(()=>{e.params.keyboard.enabled&&c()})),s("destroy",(()=>{e.keyboard.enabled&&p()})),Object.assign(e.keyboard,{enable:c,disable:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();let n;t({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),e.mousewheel={enabled:!1};let l,o=u();const c=[];function h(){e.enabled&&(e.mouseEntered=!0)}function m(){e.enabled&&(e.mouseEntered=!1)}function f(t){return!(e.params.mousewheel.thresholdDelta&&t.delta=6&&u()-o<60||(t.direction<0?e.isEnd&&!e.params.loop||e.animating||(e.slideNext(),a("scroll",t.raw)):e.isBeginning&&!e.params.loop||e.animating||(e.slidePrev(),a("scroll",t.raw)),o=(new i.Date).getTime(),!1)))}function g(t){let s=t,i=!0;if(!e.enabled)return;const r=e.params.mousewheel;e.params.cssMode&&s.preventDefault();let o=e.$el;if("container"!==e.params.mousewheel.eventsTarget&&(o=d(e.params.mousewheel.eventsTarget)),!e.mouseEntered&&!o[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let h=0;const m=e.rtlTranslate?-1:1,g=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(e.isHorizontal()){if(!(Math.abs(g.pixelX)>Math.abs(g.pixelY)))return!0;h=-g.pixelX*m}else{if(!(Math.abs(g.pixelY)>Math.abs(g.pixelX)))return!0;h=-g.pixelY}else h=Math.abs(g.pixelX)>Math.abs(g.pixelY)?-g.pixelX*m:-g.pixelY;if(0===h)return!0;r.invert&&(h=-h);let v=e.getTranslate()+h*r.sensitivity;if(v>=e.minTranslate()&&(v=e.minTranslate()),v<=e.maxTranslate()&&(v=e.maxTranslate()),i=!!e.params.loop||!(v===e.minTranslate()||v===e.maxTranslate()),i&&e.params.nested&&s.stopPropagation(),e.params.freeMode&&e.params.freeMode.enabled){const t={time:u(),delta:Math.abs(h),direction:Math.sign(h)},i=l&&t.time=e.minTranslate()&&(o=e.minTranslate()),o<=e.maxTranslate()&&(o=e.maxTranslate()),e.setTransition(0),e.setTranslate(o),e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses(),(!d&&e.isBeginning||!u&&e.isEnd)&&e.updateSlidesClasses(),e.params.freeMode.sticky){clearTimeout(n),n=void 0,c.length>=15&&c.shift();const s=c.length?c[c.length-1]:void 0,a=c[0];if(c.push(t),s&&(t.delta>s.delta||t.direction!==s.direction))c.splice(0);else if(c.length>=15&&t.time-a.time<500&&a.delta-t.delta>=1&&t.delta<=6){const s=h>0?.8:.2;l=t,c.splice(0),n=p((()=>{e.slideToClosest(e.params.speed,!0,void 0,s)}),0)}n||(n=p((()=>{l=t,c.splice(0),e.slideToClosest(e.params.speed,!0,void 0,.5)}),500))}if(i||a("scroll",s),e.params.autoplay&&e.params.autoplayDisableOnInteraction&&e.autoplay.stop(),o===e.minTranslate()||o===e.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(h),direction:Math.sign(h),raw:t};c.length>=2&&c.shift();const a=c.length?c[c.length-1]:void 0;if(c.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&f(s):f(s),function(t){const s=e.params.mousewheel;if(t.direction<0){if(e.isEnd&&!e.params.loop&&s.releaseOnEdges)return!0}else if(e.isBeginning&&!e.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function v(t){let s=e.$el;"container"!==e.params.mousewheel.eventsTarget&&(s=d(e.params.mousewheel.eventsTarget)),s[t]("mouseenter",h),s[t]("mouseleave",m),s[t]("wheel",g)}function w(){return e.params.cssMode?(e.wrapperEl.removeEventListener("wheel",g),!0):!e.mousewheel.enabled&&(v("on"),e.mousewheel.enabled=!0,!0)}function b(){return e.params.cssMode?(e.wrapperEl.addEventListener(event,g),!0):!!e.mousewheel.enabled&&(v("off"),e.mousewheel.enabled=!1,!0)}s("init",(()=>{!e.params.mousewheel.enabled&&e.params.cssMode&&b(),e.params.mousewheel.enabled&&w()})),s("destroy",(()=>{e.params.cssMode&&w(),e.mousewheel.enabled&&b()})),Object.assign(e.mousewheel,{enable:w,disable:b})},function({swiper:e,extendParams:t,on:s,emit:a}){function i(t){let s;return t&&(s=d(t),e.params.uniqueNavElements&&"string"==typeof t&&s.length>1&&1===e.$el.find(t).length&&(s=e.$el.find(t))),s}function r(t,s){const a=e.params.navigation;t&&t.length>0&&(t[s?"addClass":"removeClass"](a.disabledClass),t[0]&&"BUTTON"===t[0].tagName&&(t[0].disabled=s),e.params.watchOverflow&&e.enabled&&t[e.isLocked?"addClass":"removeClass"](a.lockClass))}function n(){if(e.params.loop)return;const{$nextEl:t,$prevEl:s}=e.navigation;r(s,e.isBeginning),r(t,e.isEnd)}function l(t){t.preventDefault(),e.isBeginning&&!e.params.loop||e.slidePrev()}function o(t){t.preventDefault(),e.isEnd&&!e.params.loop||e.slideNext()}function c(){const t=e.params.navigation;if(e.params.navigation=Y(e,e.originalParams.navigation,e.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!t.nextEl&&!t.prevEl)return;const s=i(t.nextEl),a=i(t.prevEl);s&&s.length>0&&s.on("click",o),a&&a.length>0&&a.on("click",l),Object.assign(e.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),e.enabled||(s&&s.addClass(t.lockClass),a&&a.addClass(t.lockClass))}function p(){const{$nextEl:t,$prevEl:s}=e.navigation;t&&t.length&&(t.off("click",o),t.removeClass(e.params.navigation.disabledClass)),s&&s.length&&(s.off("click",l),s.removeClass(e.params.navigation.disabledClass))}t({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}}),e.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},s("init",(()=>{c(),n()})),s("toEdge fromEdge lock unlock",(()=>{n()})),s("destroy",(()=>{p()})),s("enable disable",(()=>{const{$nextEl:t,$prevEl:s}=e.navigation;t&&t[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass),s&&s[e.enabled?"removeClass":"addClass"](e.params.navigation.lockClass)})),s("click",((t,s)=>{const{$nextEl:i,$prevEl:r}=e.navigation,n=s.target;if(e.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(i)){if(e.pagination&&e.params.pagination&&e.params.pagination.clickable&&(e.pagination.el===n||e.pagination.el.contains(n)))return;let t;i?t=i.hasClass(e.params.navigation.hiddenClass):r&&(t=r.hasClass(e.params.navigation.hiddenClass)),a(!0===t?"navigationShow":"navigationHide"),i&&i.toggleClass(e.params.navigation.hiddenClass),r&&r.toggleClass(e.params.navigation.hiddenClass)}})),Object.assign(e.navigation,{update:n,init:c,destroy:p})},function({swiper:e,extendParams:t,on:s,emit:a}){const i="swiper-pagination";let r;t({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${i}-bullet`,bulletActiveClass:`${i}-bullet-active`,modifierClass:`${i}-`,currentClass:`${i}-current`,totalClass:`${i}-total`,hiddenClass:`${i}-hidden`,progressbarFillClass:`${i}-progressbar-fill`,progressbarOppositeClass:`${i}-progressbar-opposite`,clickableClass:`${i}-clickable`,lockClass:`${i}-lock`,horizontalClass:`${i}-horizontal`,verticalClass:`${i}-vertical`}}),e.pagination={el:null,$el:null,bullets:[]};let n=0;function l(){return!e.params.pagination.el||!e.pagination.el||!e.pagination.$el||0===e.pagination.$el.length}function o(t,s){const{bulletActiveClass:a}=e.params.pagination;t[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function c(){const t=e.rtl,s=e.params.pagination;if(l())return;const i=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,c=e.pagination.$el;let p;const u=e.params.loop?Math.ceil((i-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?(p=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup),p>i-1-2*e.loopedSlides&&(p-=i-2*e.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==e.params.paginationType&&(p=u+p)):p=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===s.type&&e.pagination.bullets&&e.pagination.bullets.length>0){const a=e.pagination.bullets;let i,l,u;if(s.dynamicBullets&&(r=a.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),c.css(e.isHorizontal()?"width":"height",r*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==e.previousIndex&&(n+=p-e.previousIndex,n>s.dynamicMainBullets-1?n=s.dynamicMainBullets-1:n<0&&(n=0)),i=p-n,l=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(l+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),c.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=l&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&o(t,"prev"),a===l&&o(t,"next"))}));else{const t=a.eq(p),r=t.index();if(t.addClass(s.bulletActiveClass),s.dynamicBullets){const t=a.eq(i),n=a.eq(l);for(let e=i;e<=l;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(e.params.loop)if(r>=a.length-s.dynamicMainBullets){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else o(t,"prev"),o(n,"next");else o(t,"prev"),o(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),n=(r*i-r)/2-u*r,l=t?"right":"left";a.css(e.isHorizontal()?l:"top",`${n}px`)}}if("fraction"===s.type&&(c.find(W(s.currentClass)).text(s.formatFractionCurrent(p+1)),c.find(W(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let t;t=s.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,r=1;"horizontal"===t?i=a:r=a,c.find(W(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${r})`).transition(e.params.speed)}"custom"===s.type&&s.renderCustom?(c.html(s.renderCustom(e,p+1,u)),a("paginationRender",c[0])):a("paginationUpdate",c[0]),e.params.watchOverflow&&e.enabled&&c[e.isLocked?"addClass":"removeClass"](s.lockClass)}function p(){const t=e.params.pagination;if(l())return;const s=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el;let r="";if("bullets"===t.type){let a=e.params.loop?Math.ceil((s-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&e.params.freeMode.enabled&&!e.params.loop&&a>s&&(a=s);for(let s=0;s`;i.html(r),e.pagination.bullets=i.find(W(t.bulletClass))}"fraction"===t.type&&(r=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):` / `,i.html(r)),"progressbar"===t.type&&(r=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):``,i.html(r)),"custom"!==t.type&&a("paginationRender",e.pagination.$el[0])}function u(){e.params.pagination=Y(e,e.originalParams.pagination,e.params.pagination,{el:"swiper-pagination"});const t=e.params.pagination;if(!t.el)return;let s=d(t.el);0!==s.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&s.length>1&&(s=e.$el.find(t.el),s.length>1&&(s=s.filter((t=>d(t).parents(".swiper")[0]===e.el)))),"bullets"===t.type&&t.clickable&&s.addClass(t.clickableClass),s.addClass(t.modifierClass+t.type),s.addClass(t.modifierClass+e.params.direction),"bullets"===t.type&&t.dynamicBullets&&(s.addClass(`${t.modifierClass}${t.type}-dynamic`),n=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&s.addClass(t.progressbarOppositeClass),t.clickable&&s.on("click",W(t.bulletClass),(function(t){t.preventDefault();let s=d(this).index()*e.params.slidesPerGroup;e.params.loop&&(s+=e.loopedSlides),e.slideTo(s)})),Object.assign(e.pagination,{$el:s,el:s[0]}),e.enabled||s.addClass(t.lockClass))}function h(){const t=e.params.pagination;if(l())return;const s=e.pagination.$el;s.removeClass(t.hiddenClass),s.removeClass(t.modifierClass+t.type),s.removeClass(t.modifierClass+e.params.direction),e.pagination.bullets&&e.pagination.bullets.removeClass&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&s.off("click",W(t.bulletClass))}s("init",(()=>{u(),p(),c()})),s("activeIndexChange",(()=>{(e.params.loop||void 0===e.snapIndex)&&c()})),s("snapIndexChange",(()=>{e.params.loop||c()})),s("slidesLengthChange",(()=>{e.params.loop&&(p(),c())})),s("snapGridLengthChange",(()=>{e.params.loop||(p(),c())})),s("destroy",(()=>{h()})),s("enable disable",(()=>{const{$el:t}=e.pagination;t&&t[e.enabled?"removeClass":"addClass"](e.params.pagination.lockClass)})),s("lock unlock",(()=>{c()})),s("click",((t,s)=>{const i=s.target,{$el:r}=e.pagination;if(e.params.pagination.el&&e.params.pagination.hideOnClick&&r.length>0&&!d(i).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&i===e.navigation.nextEl||e.navigation.prevEl&&i===e.navigation.prevEl))return;const t=r.hasClass(e.params.pagination.hiddenClass);a(!0===t?"paginationShow":"paginationHide"),r.toggleClass(e.params.pagination.hiddenClass)}})),Object.assign(e.pagination,{render:p,update:c,init:u,destroy:h})},function({swiper:e,extendParams:t,on:s,emit:i}){const r=a();let n,l,o,c,u=!1,h=null,m=null;function f(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t,rtlTranslate:s,progress:a}=e,{$dragEl:i,$el:r}=t,n=e.params.scrollbar;let d=l,c=(o-l)*a;s?(c=-c,c>0?(d=l-c,c=0):-c+l>o&&(d=o+c)):c<0?(d=l+c,c=0):c+l>o&&(d=o-c),e.isHorizontal()?(i.transform(`translate3d(${c}px, 0, 0)`),i[0].style.width=`${d}px`):(i.transform(`translate3d(0px, ${c}px, 0)`),i[0].style.height=`${d}px`),n.hide&&(clearTimeout(h),r[0].style.opacity=1,h=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function g(){if(!e.params.scrollbar.el||!e.scrollbar.el)return;const{scrollbar:t}=e,{$dragEl:s,$el:a}=t;s[0].style.width="",s[0].style.height="",o=e.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,c=e.size/(e.virtualSize+e.params.slidesOffsetBefore-(e.params.centeredSlides?e.snapGrid[0]:0)),l="auto"===e.params.scrollbar.dragSize?o*c:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?s[0].style.width=`${l}px`:s[0].style.height=`${l}px`,a[0].style.display=c>=1?"none":"",e.params.scrollbar.hide&&(a[0].style.opacity=0),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}function v(t){return e.isHorizontal()?"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientX:t.clientX:"touchstart"===t.type||"touchmove"===t.type?t.targetTouches[0].clientY:t.clientY}function w(t){const{scrollbar:s,rtlTranslate:a}=e,{$el:i}=s;let r;r=(v(t)-i.offset()[e.isHorizontal()?"left":"top"]-(null!==n?n:l/2))/(o-l),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const d=e.minTranslate()+(e.maxTranslate()-e.minTranslate())*r;e.updateProgress(d),e.setTranslate(d),e.updateActiveIndex(),e.updateSlidesClasses()}function b(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:l,$dragEl:o}=a;u=!0,n=t.target===o[0]||t.target===o?v(t)-t.target.getBoundingClientRect()[e.isHorizontal()?"left":"top"]:null,t.preventDefault(),t.stopPropagation(),r.transition(100),o.transition(100),w(t),clearTimeout(m),l.transition(0),s.hide&&l.css("opacity",1),e.params.cssMode&&e.$wrapperEl.css("scroll-snap-type","none"),i("scrollbarDragStart",t)}function x(t){const{scrollbar:s,$wrapperEl:a}=e,{$el:r,$dragEl:n}=s;u&&(t.preventDefault?t.preventDefault():t.returnValue=!1,w(t),a.transition(0),r.transition(0),n.transition(0),i("scrollbarDragMove",t))}function y(t){const s=e.params.scrollbar,{scrollbar:a,$wrapperEl:r}=e,{$el:n}=a;u&&(u=!1,e.params.cssMode&&(e.$wrapperEl.css("scroll-snap-type",""),r.transition("")),s.hide&&(clearTimeout(m),m=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),i("scrollbarDragEnd",t),s.snapOnRelease&&e.slideToClosest())}function E(t){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:n,support:l}=e,o=s.$el[0],d=!(!l.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},c=!(!l.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};if(!o)return;const p="on"===t?"addEventListener":"removeEventListener";l.touch?(o[p](a.start,b,d),o[p](a.move,x,d),o[p](a.end,y,c)):(o[p](i.start,b,d),r[p](i.move,x,d),r[p](i.end,y,c))}function T(){const{scrollbar:t,$el:s}=e;e.params.scrollbar=Y(e,e.originalParams.scrollbar,e.params.scrollbar,{el:"swiper-scrollbar"});const a=e.params.scrollbar;if(!a.el)return;let i=d(a.el);e.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el));let r=i.find(`.${e.params.scrollbar.dragClass}`);0===r.length&&(r=d(`
`),i.append(r)),Object.assign(t,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&e.params.scrollbar.el&&E("on"),i&&i[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}function C(){e.params.scrollbar.el&&E("off")}t({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}}),e.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},s("init",(()=>{T(),g(),f()})),s("update resize observerUpdate lock unlock",(()=>{g()})),s("setTranslate",(()=>{f()})),s("setTransition",((t,s)=>{!function(t){e.params.scrollbar.el&&e.scrollbar.el&&e.scrollbar.$dragEl.transition(t)}(s)})),s("enable disable",(()=>{const{$el:t}=e.scrollbar;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)})),s("destroy",(()=>{C()})),Object.assign(e.scrollbar,{updateSize:g,setTranslate:f,init:T,destroy:C})},function({swiper:e,extendParams:t,on:s}){t({parallax:{enabled:!1}});const a=(t,s)=>{const{rtl:a}=e,i=d(t),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):e.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},i=()=>{const{$el:t,slides:s,progress:i,snapGrid:r}=e;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,i)})),s.each(((t,s)=>{let n=t.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(s/2)-i*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{a(e,n)}))}))};s("beforeInit",(()=>{e.params.parallax.enabled&&(e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)})),s("init",(()=>{e.params.parallax.enabled&&i()})),s("setTranslate",(()=>{e.params.parallax.enabled&&i()})),s("setTransition",((t,s)=>{e.params.parallax.enabled&&((t=e.params.speed)=>{const{$el:s}=e;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{const s=d(e);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||t;0===t&&(a=0),s.transition(a)}))})(s)}))},function({swiper:e,extendParams:t,on:s,emit:a}){const i=r();t({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),e.zoom={enabled:!1};let n,l,o,c=1,p=!1;const u={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},m={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},f={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let g=1;function v(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function w(t){const s=e.support,a=e.params.zoom;if(l=!1,o=!1,!s.gestures){if("touchstart"!==t.type||"touchstart"===t.type&&t.targetTouches.length<2)return;l=!0,u.scaleStart=v(t)}u.$slideEl&&u.$slideEl.length||(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`),0===u.$slideEl.length&&(u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`),u.maxRatio=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==u.$imageWrapEl.length)?(u.$imageEl&&u.$imageEl.transition(0),p=!0):u.$imageEl=void 0}function b(t){const s=e.support,a=e.params.zoom,i=e.zoom;if(!s.gestures){if("touchmove"!==t.type||"touchmove"===t.type&&t.targetTouches.length<2)return;o=!0,u.scaleMove=v(t)}u.$imageEl&&0!==u.$imageEl.length?(s.gestures?i.scale=t.scale*c:i.scale=u.scaleMove/u.scaleStart*c,i.scale>u.maxRatio&&(i.scale=u.maxRatio-1+(i.scale-u.maxRatio+1)**.5),i.scalem.touchesStart.x))return void(m.isTouched=!1);if(!e.isHorizontal()&&(Math.floor(m.minY)===Math.floor(m.startY)&&m.touchesCurrent.ym.touchesStart.y))return void(m.isTouched=!1)}t.cancelable&&t.preventDefault(),t.stopPropagation(),m.isMoved=!0,m.currentX=m.touchesCurrent.x-m.touchesStart.x+m.startX,m.currentY=m.touchesCurrent.y-m.touchesStart.y+m.startY,m.currentXm.maxX&&(m.currentX=m.maxX-1+(m.currentX-m.maxX+1)**.8),m.currentYm.maxY&&(m.currentY=m.maxY-1+(m.currentY-m.maxY+1)**.8),f.prevPositionX||(f.prevPositionX=m.touchesCurrent.x),f.prevPositionY||(f.prevPositionY=m.touchesCurrent.y),f.prevTime||(f.prevTime=Date.now()),f.x=(m.touchesCurrent.x-f.prevPositionX)/(Date.now()-f.prevTime)/2,f.y=(m.touchesCurrent.y-f.prevPositionY)/(Date.now()-f.prevTime)/2,Math.abs(m.touchesCurrent.x-f.prevPositionX)<2&&(f.x=0),Math.abs(m.touchesCurrent.y-f.prevPositionY)<2&&(f.y=0),f.prevPositionX=m.touchesCurrent.x,f.prevPositionY=m.touchesCurrent.y,f.prevTime=Date.now(),u.$imageWrapEl.transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}}function E(){const t=e.zoom;u.$slideEl&&e.previousIndex!==e.activeIndex&&(u.$imageEl&&u.$imageEl.transform("translate3d(0,0,0) scale(1)"),u.$imageWrapEl&&u.$imageWrapEl.transform("translate3d(0,0,0)"),t.scale=1,c=1,u.$slideEl=void 0,u.$imageEl=void 0,u.$imageWrapEl=void 0)}function T(t){const s=e.zoom,a=e.params.zoom;if(u.$slideEl||(t&&t.target&&(u.$slideEl=d(t.target).closest(`.${e.params.slideClass}`)),u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex)),u.$imageEl=u.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),u.$imageWrapEl=u.$imageEl.parent(`.${a.containerClass}`)),!u.$imageEl||0===u.$imageEl.length||!u.$imageWrapEl||0===u.$imageWrapEl.length)return;let r,n,l,o,p,h,f,g,v,w,b,x,y,E,T,C,$,S;e.params.cssMode&&(e.wrapperEl.style.overflow="hidden",e.wrapperEl.style.touchAction="none"),u.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===m.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,n="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=m.touchesStart.x,n=m.touchesStart.y),s.scale=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,c=u.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,t?($=u.$slideEl[0].offsetWidth,S=u.$slideEl[0].offsetHeight,l=u.$slideEl.offset().left+i.scrollX,o=u.$slideEl.offset().top+i.scrollY,p=l+$/2-r,h=o+S/2-n,v=u.$imageEl[0].offsetWidth,w=u.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),T=-y,C=-E,f=p*s.scale,g=h*s.scale,fT&&(f=T),gC&&(g=C)):(f=0,g=0),u.$imageWrapEl.transition(300).transform(`translate3d(${f}px, ${g}px,0)`),u.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function C(){const t=e.zoom,s=e.params.zoom;u.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?u.$slideEl=e.$wrapperEl.children(`.${e.params.slideActiveClass}`):u.$slideEl=e.slides.eq(e.activeIndex),u.$imageEl=u.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),u.$imageWrapEl=u.$imageEl.parent(`.${s.containerClass}`)),u.$imageEl&&0!==u.$imageEl.length&&u.$imageWrapEl&&0!==u.$imageWrapEl.length&&(e.params.cssMode&&(e.wrapperEl.style.overflow="",e.wrapperEl.style.touchAction=""),t.scale=1,c=1,u.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),u.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),u.$slideEl.removeClass(`${s.zoomedSlideClass}`),u.$slideEl=void 0)}function $(t){const s=e.zoom;s.scale&&1!==s.scale?C():T(t)}function S(){const t=e.support;return{passiveListener:!("touchstart"!==e.touchEvents.start||!t.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!t.passiveListener||{passive:!1,capture:!0}}}function M(){return`.${e.params.slideClass}`}function P(t){const{passiveListener:s}=S(),a=M();e.$wrapperEl[t]("gesturestart",a,w,s),e.$wrapperEl[t]("gesturechange",a,b,s),e.$wrapperEl[t]("gestureend",a,x,s)}function k(){n||(n=!0,P("on"))}function z(){n&&(n=!1,P("off"))}function O(){const t=e.zoom;if(t.enabled)return;t.enabled=!0;const s=e.support,{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.on(e.touchEvents.start,k,a),e.$wrapperEl.on(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,r,w,a),e.$wrapperEl.on(e.touchEvents.move,r,b,i),e.$wrapperEl.on(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.on(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.on(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}function I(){const t=e.zoom;if(!t.enabled)return;const s=e.support;t.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=S(),r=M();s.gestures?(e.$wrapperEl.off(e.touchEvents.start,k,a),e.$wrapperEl.off(e.touchEvents.end,z,a)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,r,w,a),e.$wrapperEl.off(e.touchEvents.move,r,b,i),e.$wrapperEl.off(e.touchEvents.end,r,x,a),e.touchEvents.cancel&&e.$wrapperEl.off(e.touchEvents.cancel,r,x,a)),e.$wrapperEl.off(e.touchEvents.move,`.${e.params.zoom.containerClass}`,y,i)}Object.defineProperty(e.zoom,"scale",{get:()=>g,set(e){if(g!==e){const t=u.$imageEl?u.$imageEl[0]:void 0,s=u.$slideEl?u.$slideEl[0]:void 0;a("zoomChange",e,t,s)}g=e}}),s("init",(()=>{e.params.zoom.enabled&&O()})),s("destroy",(()=>{I()})),s("touchStart",((t,s)=>{e.zoom.enabled&&function(t){const s=e.device;u.$imageEl&&0!==u.$imageEl.length&&(m.isTouched||(s.android&&t.cancelable&&t.preventDefault(),m.isTouched=!0,m.touchesStart.x="touchstart"===t.type?t.targetTouches[0].pageX:t.pageX,m.touchesStart.y="touchstart"===t.type?t.targetTouches[0].pageY:t.pageY))}(s)})),s("touchEnd",((t,s)=>{e.zoom.enabled&&function(){const t=e.zoom;if(!u.$imageEl||0===u.$imageEl.length)return;if(!m.isTouched||!m.isMoved)return m.isTouched=!1,void(m.isMoved=!1);m.isTouched=!1,m.isMoved=!1;let s=300,a=300;const i=f.x*s,r=m.currentX+i,n=f.y*a,l=m.currentY+n;0!==f.x&&(s=Math.abs((r-m.currentX)/f.x)),0!==f.y&&(a=Math.abs((l-m.currentY)/f.y));const o=Math.max(s,a);m.currentX=r,m.currentY=l;const d=m.width*t.scale,c=m.height*t.scale;m.minX=Math.min(u.slideWidth/2-d/2,0),m.maxX=-m.minX,m.minY=Math.min(u.slideHeight/2-c/2,0),m.maxY=-m.minY,m.currentX=Math.max(Math.min(m.currentX,m.maxX),m.minX),m.currentY=Math.max(Math.min(m.currentY,m.maxY),m.minY),u.$imageWrapEl.transition(o).transform(`translate3d(${m.currentX}px, ${m.currentY}px,0)`)}()})),s("doubleTap",((t,s)=>{!e.animating&&e.params.zoom.enabled&&e.zoom.enabled&&e.params.zoom.toggle&&$(s)})),s("transitionEnd",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&E()})),s("slideChange",(()=>{e.zoom.enabled&&e.params.zoom.enabled&&e.params.cssMode&&E()})),Object.assign(e.zoom,{enable:O,disable:I,in:T,out:C,toggle:$})},function({swiper:e,extendParams:t,on:s,emit:a}){t({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),e.lazy={};let i=!1,n=!1;function l(t,s=!0){const i=e.params.lazy;if(void 0===t)return;if(0===e.slides.length)return;const r=e.virtual&&e.params.virtual.enabled?e.$wrapperEl.children(`.${e.params.slideClass}[data-swiper-slide-index="${t}"]`):e.slides.eq(t),n=r.find(`.${i.elementClass}:not(.${i.loadedClass}):not(.${i.loadingClass})`);!r.hasClass(i.elementClass)||r.hasClass(i.loadedClass)||r.hasClass(i.loadingClass)||n.push(r[0]),0!==n.length&&n.each((t=>{const n=d(t);n.addClass(i.loadingClass);const o=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");e.loadImage(n[0],c||o,p,u,!1,(()=>{if(null!=e&&e&&(!e||e.params)&&!e.destroyed){if(o?(n.css("background-image",`url("${o}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(i.loadedClass).removeClass(i.loadingClass),r.find(`.${i.preloaderClass}`).remove(),e.params.loop&&s){const t=r.attr("data-swiper-slide-index");if(r.hasClass(e.params.slideDuplicateClass)){l(e.$wrapperEl.children(`[data-swiper-slide-index="${t}"]:not(.${e.params.slideDuplicateClass})`).index(),!1)}else{l(e.$wrapperEl.children(`.${e.params.slideDuplicateClass}[data-swiper-slide-index="${t}"]`).index(),!1)}}a("lazyImageReady",r[0],n[0]),e.params.autoHeight&&e.updateAutoHeight()}})),a("lazyImageLoad",r[0],n[0])}))}function o(){const{$wrapperEl:t,params:s,slides:a,activeIndex:i}=e,r=e.virtual&&s.virtual.enabled,o=s.lazy;let c=s.slidesPerView;function p(e){if(r){if(t.children(`.${s.slideClass}[data-swiper-slide-index="${e}"]`).length)return!0}else if(a[e])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),n||(n=!0),e.params.watchSlidesProgress)t.children(`.${s.slideVisibleClass}`).each((e=>{l(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){const e=o.loadPrevNextAmount,t=c,s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+c;e0&&l(u(e));const a=t.children(`.${s.slidePrevClass}`);a.length>0&&l(u(a))}}function c(){const t=r();if(!e||e.destroyed)return;const s=e.params.lazy.scrollingElement?d(e.params.lazy.scrollingElement):d(t),a=s[0]===t,n=a?t.innerWidth:s[0].offsetWidth,l=a?t.innerHeight:s[0].offsetHeight,p=e.$el.offset(),{rtlTranslate:u}=e;let h=!1;u&&(p.left-=e.$el[0].scrollLeft);const m=[[p.left,p.top],[p.left+e.width,p.top],[p.left,p.top+e.height],[p.left+e.width,p.top+e.height]];for(let e=0;e=0&&t[0]<=n&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==e.touchEvents.start||!e.support.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1};h?(o(),s.off("scroll",c,f)):i||(i=!0,s.on("scroll",c,f))}s("beforeInit",(()=>{e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)})),s("init",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("scroll",(()=>{e.params.freeMode&&e.params.freeMode.enabled&&!e.params.freeMode.sticky&&o()})),s("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{e.params.lazy.enabled&&(e.params.lazy.checkInView?c():o())})),s("transitionStart",(()=>{e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!n)&&(e.params.lazy.checkInView?c():o())})),s("transitionEnd",(()=>{e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&(e.params.lazy.checkInView?c():o())})),s("slideChange",(()=>{const{lazy:t,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=e.params;t.enabled&&(s||a&&(i||0===r))&&o()})),Object.assign(e.lazy,{load:o,loadInSlide:l})},function({swiper:e,extendParams:t,on:s}){function a(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function i(){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)}t({controller:{control:void 0,inverse:!1,by:"slide"}}),e.controller={control:void 0},s("beforeInit",(()=>{e.controller.control=e.params.controller.control})),s("update",(()=>{i()})),s("resize",(()=>{i()})),s("observerUpdate",(()=>{i()})),s("setTranslate",((t,s,a)=>{e.controller.control&&e.controller.setTranslate(s,a)})),s("setTransition",((t,s,a)=>{e.controller.control&&e.controller.setTransition(s,a)})),Object.assign(e.controller,{setTranslate:function(t,s){const i=e.controller.control;let r,n;const l=e.constructor;function o(t){const s=e.rtlTranslate?-e.translate:e.translate;"slide"===e.params.controller.by&&(!function(t){e.controller.spline||(e.controller.spline=e.params.loop?new a(e.slidesGrid,t.slidesGrid):new a(e.snapGrid,t.snapGrid))}(t),n=-e.controller.spline.interpolate(-s)),n&&"container"!==e.params.controller.by||(r=(t.maxTranslate()-t.minTranslate())/(e.maxTranslate()-e.minTranslate()),n=(s-e.minTranslate())*r+t.minTranslate()),e.params.controller.inverse&&(n=t.maxTranslate()-n),t.updateProgress(n),t.setTranslate(n,e),t.updateActiveIndex(),t.updateSlidesClasses()}if(Array.isArray(i))for(let e=0;e{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===e.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r0&&(e.isBeginning?(p(s),n(s)):(u(s),r(s))),t&&t.length>0&&(e.isEnd?(p(t),n(t)):(u(t),r(t)))}function f(){return e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length}const g=(e,t,s)=>{r(e),"BUTTON"!==e[0].tagName&&(l(e,"button"),e.on("keydown",h)),c(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)};function v(){const t=e.params.a11y;e.$el.append(a);const s=e.$el;t.containerRoleDescriptionMessage&&o(s,t.containerRoleDescriptionMessage),t.containerMessage&&c(s,t.containerMessage);const i=e.$wrapperEl,r=i.attr("id")||`swiper-wrapper-${function(e=16){return"x".repeat(e).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}(16)}`,n=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";var p;p=r,i.attr("id",p),function(e,t){e.attr("aria-live",t)}(i,n),t.itemRoleDescriptionMessage&&o(d(e.slides),t.itemRoleDescriptionMessage),l(d(e.slides),t.slideRole);const u=e.params.loop?e.slides.filter((t=>!t.classList.contains(e.params.slideDuplicateClass))).length:e.slides.length;let m,v;e.slides.each(((s,a)=>{const i=d(s),r=e.params.loop?parseInt(i.attr("data-swiper-slide-index"),10):a;c(i,t.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,u))})),e.navigation&&e.navigation.$nextEl&&(m=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(v=e.navigation.$prevEl),m&&m.length&&g(m,r,t.nextSlideMessage),v&&v.length&&g(v,r,t.prevSlideMessage),f()&&e.pagination.$el.on("keydown",W(e.params.pagination.bulletClass),h)}s("beforeInit",(()=>{a=d(``)})),s("afterInit",(()=>{e.params.a11y.enabled&&(v(),m())})),s("toEdge",(()=>{e.params.a11y.enabled&&m()})),s("fromEdge",(()=>{e.params.a11y.enabled&&m()})),s("paginationUpdate",(()=>{e.params.a11y.enabled&&function(){const t=e.params.a11y;f()&&e.pagination.bullets.each((s=>{const a=d(s);r(a),e.params.pagination.renderBullet||(l(a,"button"),c(a,t.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))}))}()})),s("destroy",(()=>{e.params.a11y.enabled&&function(){let t,s;a&&a.length>0&&a.remove(),e.navigation&&e.navigation.$nextEl&&(t=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(s=e.navigation.$prevEl),t&&t.off("keydown",h),s&&s.off("keydown",h),f()&&e.pagination.$el.off("keydown",W(e.params.pagination.bulletClass),h)}()}))},function({swiper:e,extendParams:t,on:s}){t({history:{enabled:!1,root:"",replaceState:!1,key:"slides"}});let a=!1,i={};const n=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),l=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},o=(t,s)=>{const i=r();if(!a||!e.params.history.enabled)return;let l;l=e.params.url?new URL(e.params.url):i.location;const o=e.slides.eq(s);let d=n(o.attr("data-history"));if(e.params.history.root.length>0){let s=e.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${t}/${d}`}else l.pathname.includes(t)||(d=`${t}/${d}`);const c=i.history.state;c&&c.value===d||(e.params.history.replaceState?i.history.replaceState({value:d},null,d):i.history.pushState({value:d},null,d))},d=(t,s,a)=>{if(s)for(let i=0,r=e.slides.length;i{i=l(e.params.url),d(e.params.speed,e.paths.value,!1)};s("init",(()=>{e.params.history.enabled&&(()=>{const t=r();if(e.params.history){if(!t.history||!t.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);a=!0,i=l(e.params.url),(i.key||i.value)&&(d(0,i.value,e.params.runCallbacksOnInit),e.params.history.replaceState||t.addEventListener("popstate",c))}})()})),s("destroy",(()=>{e.params.history.enabled&&(()=>{const t=r();e.params.history.replaceState||t.removeEventListener("popstate",c)})()})),s("transitionEnd _freeModeNoMomentumRelease",(()=>{a&&o(e.params.history.key,e.activeIndex)})),s("slideChange",(()=>{a&&e.params.cssMode&&o(e.params.history.key,e.activeIndex)}))},function({swiper:e,extendParams:t,emit:s,on:i}){let n=!1;const l=a(),o=r();t({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const c=()=>{s("hashChange");const t=l.location.hash.replace("#","");if(t!==e.slides.eq(e.activeIndex).attr("data-hash")){const s=e.$wrapperEl.children(`.${e.params.slideClass}[data-hash="${t}"]`).index();if(void 0===s)return;e.slideTo(s)}},p=()=>{if(n&&e.params.hashNavigation.enabled)if(e.params.hashNavigation.replaceState&&o.history&&o.history.replaceState)o.history.replaceState(null,null,`#${e.slides.eq(e.activeIndex).attr("data-hash")}`||""),s("hashSet");else{const t=e.slides.eq(e.activeIndex),a=t.attr("data-hash")||t.attr("data-history");l.location.hash=a||"",s("hashSet")}};i("init",(()=>{e.params.hashNavigation.enabled&&(()=>{if(!e.params.hashNavigation.enabled||e.params.history&&e.params.history.enabled)return;n=!0;const t=l.location.hash.replace("#","");if(t){const s=0;for(let a=0,i=e.slides.length;a{e.params.hashNavigation.enabled&&e.params.hashNavigation.watchState&&d(o).off("hashchange",c)})),i("transitionEnd _freeModeNoMomentumRelease",(()=>{n&&p()})),i("slideChange",(()=>{n&&e.params.cssMode&&p()}))},function({swiper:e,extendParams:t,on:s,emit:i}){let r;function n(){const t=e.slides.eq(e.activeIndex);let s=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(s=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),clearTimeout(r),r=p((()=>{let t;e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(e.slides.length-1,e.params.speed,!0,!0),i("autoplay")):(t=e.slidePrev(e.params.speed,!0,!0),i("autoplay")):e.params.loop?(e.loopFix(),t=e.slideNext(e.params.speed,!0,!0),i("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?o():(t=e.slideTo(0,e.params.speed,!0,!0),i("autoplay")):(t=e.slideNext(e.params.speed,!0,!0),i("autoplay")),(e.params.cssMode&&e.autoplay.running||!1===t)&&n()}),s)}function l(){return void 0===r&&(!e.autoplay.running&&(e.autoplay.running=!0,i("autoplayStart"),n(),!0))}function o(){return!!e.autoplay.running&&(void 0!==r&&(r&&(clearTimeout(r),r=void 0),e.autoplay.running=!1,i("autoplayStop"),!0))}function d(t){e.autoplay.running&&(e.autoplay.paused||(r&&clearTimeout(r),e.autoplay.paused=!0,0!==t&&e.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].addEventListener(t,u)})):(e.autoplay.paused=!1,n())))}function c(){const t=a();"hidden"===t.visibilityState&&e.autoplay.running&&d(),"visible"===t.visibilityState&&e.autoplay.paused&&(n(),e.autoplay.paused=!1)}function u(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===e.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)})),e.autoplay.paused=!1,e.autoplay.running?n():o())}function h(){e.params.autoplay.disableOnInteraction?o():d(),["transitionend","webkitTransitionEnd"].forEach((t=>{e.$wrapperEl[0].removeEventListener(t,u)}))}function m(){e.params.autoplay.disableOnInteraction||(e.autoplay.paused=!1,n())}e.autoplay={running:!1,paused:!1},t({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),s("init",(()=>{if(e.params.autoplay.enabled){l();a().addEventListener("visibilitychange",c),e.params.autoplay.pauseOnMouseEnter&&(e.$el.on("mouseenter",h),e.$el.on("mouseleave",m))}})),s("beforeTransitionStart",((t,s,a)=>{e.autoplay.running&&(a||!e.params.autoplay.disableOnInteraction?e.autoplay.pause(s):o())})),s("sliderFirstMove",(()=>{e.autoplay.running&&(e.params.autoplay.disableOnInteraction?o():d())})),s("touchEnd",(()=>{e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&n()})),s("destroy",(()=>{e.$el.off("mouseenter",h),e.$el.off("mouseleave",m),e.autoplay.running&&o();a().removeEventListener("visibilitychange",c)})),Object.assign(e.autoplay,{pause:d,run:n,start:l,stop:o})},function({swiper:e,extendParams:t,on:s}){t({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let a=!1,i=!1;function r(){const t=e.thumbs.swiper;if(!t)return;const s=t.clickedIndex,a=t.clickedSlide;if(a&&d(a).hasClass(e.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=t.params.loop?parseInt(d(t.clickedSlide).attr("data-swiper-slide-index"),10):s,e.params.loop){let t=e.activeIndex;e.slides.eq(t).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,t=e.activeIndex);const s=e.slides.eq(t).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=e.slides.eq(t).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-t1?a:o:a-oe.previousIndex?"next":"prev"}else n=e.realIndex,l=n>e.previousIndex?"next":"prev";r&&(n+="next"===l?i:-1*i),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(n)<0&&(s.params.centeredSlides?n=n>o?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>o&&s.params.slidesPerGroup,s.slideTo(n,t?0:void 0))}let n=1;const l=e.params.thumbs.slideThumbActiveClass;if(e.params.slidesPerView>1&&!e.params.centeredSlides&&(n=e.params.slidesPerView),e.params.thumbs.multipleActiveThumbs||(n=1),n=Math.floor(n),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let t=0;t{const{thumbs:t}=e.params;t&&t.swiper&&(n(),l(!0))})),s("slideChange update resize observerUpdate",(()=>{e.thumbs.swiper&&l()})),s("setTransition",((t,s)=>{const a=e.thumbs.swiper;a&&a.setTransition(s)})),s("beforeDestroy",(()=>{const t=e.thumbs.swiper;t&&i&&t&&t.destroy()})),Object.assign(e.thumbs,{init:n,update:l})},function({swiper:e,extendParams:t,emit:s,once:a}){t({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(e,{freeMode:{onTouchMove:function(){const{touchEventsData:t,touches:s}=e;0===t.velocities.length&&t.velocities.push({position:s[e.isHorizontal()?"startX":"startY"],time:t.touchStartTime}),t.velocities.push({position:s[e.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function({currentPos:t}){const{params:i,$wrapperEl:r,rtlTranslate:n,snapGrid:l,touchEventsData:o}=e,d=u()-o.touchStartTime;if(t<-e.minTranslate())e.slideTo(e.activeIndex);else if(t>-e.maxTranslate())e.slides.length1){const t=o.velocities.pop(),s=o.velocities.pop(),a=t.position-s.position,r=t.time-s.time;e.velocity=a/r,e.velocity/=2,Math.abs(e.velocity)150||u()-t.time>300)&&(e.velocity=0)}else e.velocity=0;e.velocity*=i.freeMode.momentumVelocityRatio,o.velocities.length=0;let t=1e3*i.freeMode.momentumRatio;const d=e.velocity*t;let c=e.translate+d;n&&(c=-c);let p,h=!1;const m=20*Math.abs(e.velocity)*i.freeMode.momentumBounceRatio;let f;if(ce.minTranslate())i.freeMode.momentumBounce?(c-e.minTranslate()>m&&(c=e.minTranslate()+m),p=e.minTranslate(),h=!0,o.allowMomentumBounce=!0):c=e.minTranslate(),i.loop&&i.centeredSlides&&(f=!0);else if(i.freeMode.sticky){let t;for(let e=0;e-c){t=e;break}c=Math.abs(l[t]-c){e.loopFix()})),0!==e.velocity){if(t=n?Math.abs((-c-e.translate)/e.velocity):Math.abs((c-e.translate)/e.velocity),i.freeMode.sticky){const s=Math.abs((n?-c:c)-e.translate),a=e.slidesSizesGrid[e.activeIndex];t=s{e&&!e.destroyed&&o.allowMomentumBounce&&(s("momentumBounce"),e.setTransition(i.speed),setTimeout((()=>{e.setTranslate(p),r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()}))}),0))}))):e.velocity?(s("_freeModeNoMomentumRelease"),e.updateProgress(c),e.setTransition(t),e.setTranslate(c),e.transitionStart(!0,e.swipeDirection),e.animating||(e.animating=!0,r.transitionEnd((()=>{e&&!e.destroyed&&e.transitionEnd()})))):e.updateProgress(c),e.updateActiveIndex(),e.updateSlidesClasses()}else{if(i.freeMode.sticky)return void e.slideToClosest();i.freeMode&&s("_freeModeNoMomentumRelease")}(!i.freeMode.momentum||d>=i.longSwipesMs)&&(e.updateProgress(),e.updateActiveIndex(),e.updateSlidesClasses())}}}})},function({swiper:e,extendParams:t}){let s,a,i;t({grid:{rows:1,fill:"column"}}),e.grid={initSlides:t=>{const{slidesPerView:r}=e.params,{rows:n,fill:l}=e.params.grid;a=s/n,i=Math.floor(t/n),s=Math.floor(t/n)===t/n?t:Math.ceil(t/n)*n,"auto"!==r&&"row"===l&&(s=Math.max(s,r*n))},updateSlide:(t,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=e.params,{rows:c,fill:p}=e.params.grid;let u,h,m;if("row"===p&&o>1){const e=Math.floor(t/(o*c)),a=t-c*o*e,i=0===e?o:Math.min(Math.ceil((n-e*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+e*o,u=h+m*s/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(t/c),m=t-h*c,(h>i||h===i&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(t/a),h=t-m*a);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(t,a,i)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=e.params,{rows:o}=e.params.grid;if(e.virtualSize=(t+r)*s,e.virtualSize=Math.ceil(e.virtualSize/o)-r,e.$wrapperEl.css({[i("width")]:`${e.virtualSize+r}px`}),n){a.splice(0,a.length);const t=[];for(let s=0;s{const{slides:t}=e,s=e.params.fadeEffect;for(let a=0;a{const{transformEl:s}=e.params.fadeEffect;(s?e.slides.find(s):e.slides).transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}}),F({effect:"cube",swiper:e,on:s,setTranslate:()=>{const{$el:t,$wrapperEl:s,slides:a,width:i,height:r,rtlTranslate:n,size:l,browser:o}=e,c=e.params.cubeEffect,p=e.isHorizontal(),u=e.virtual&&e.params.virtual.enabled;let h,m=0;c.shadow&&(p?(h=s.find(".swiper-cube-shadow"),0===h.length&&(h=d('
'),s.append(h)),h.css({height:`${i}px`})):(h=t.find(".swiper-cube-shadow"),0===h.length&&(h=d('
'),t.append(h))));for(let e=0;e-1&&(m=90*s+90*o,n&&(m=90*-s-90*o)),t.transform(v),c.slideShadows){let e=p?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=p?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=d(`
`),t.append(e)),0===s.length&&(s=d(`
`),t.append(s)),e.length&&(e[0].style.opacity=Math.max(-o,0)),s.length&&(s[0].style.opacity=Math.max(o,0))}}if(s.css({"-webkit-transform-origin":`50% 50% -${l/2}px`,"transform-origin":`50% 50% -${l/2}px`}),c.shadow)if(p)h.transform(`translate3d(0px, ${i/2+c.shadowOffset}px, ${-i/2}px) rotateX(90deg) rotateZ(0deg) scale(${c.shadowScale})`);else{const e=Math.abs(m)-90*Math.floor(Math.abs(m)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=c.shadowScale,a=c.shadowScale/t,i=c.shadowOffset;h.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${r/2+i}px, ${-r/2/a}px) rotateX(-90deg)`)}const f=o.isSafari||o.isWebView?-l/2:0;s.transform(`translate3d(0px,0,${f}px) rotateX(${e.isHorizontal()?0:m}deg) rotateY(${e.isHorizontal()?-m:0}deg)`)},setTransition:t=>{const{$el:s,slides:a}=e;a.transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),e.params.cubeEffect.shadow&&!e.isHorizontal()&&s.find(".swiper-cube-shadow").transition(t)},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function({swiper:e,extendParams:t,on:s}){t({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}}),F({effect:"flip",swiper:e,on:s,setTranslate:()=>{const{slides:t,rtlTranslate:s}=e,a=e.params.flipEffect;for(let i=0;i{const{transformEl:s}=e.params.flipEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),F({effect:"coverflow",swiper:e,on:s,setTranslate:()=>{const{width:t,height:s,slides:a,slidesSizesGrid:i}=e,r=e.params.coverflowEffect,n=e.isHorizontal(),l=e.translate,o=n?t/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e0?l:0),s.length&&(s[0].style.opacity=-l>0?-l:0)}}},setTransition:t=>{const{transformEl:s}=e.params.coverflowEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(t)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function({swiper:e,extendParams:t,on:s}){t({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const a=e=>"string"==typeof e?e:`${e}px`;F({effect:"creative",swiper:e,on:s,setTranslate:()=>{const{slides:t,$wrapperEl:s,slidesSizesGrid:i}=e,r=e.params.creativeEffect,{progressMultiplier:n}=r,l=e.params.centeredSlides;if(l){const t=i[0]/2-e.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${t}px))`)}for(let s=0;s0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${a(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),i[0].style.zIndex=-Math.abs(Math.round(o))+t.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=i.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=Z(r,i)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=U(r,i);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:t=>{const{transformEl:s}=e.params.creativeEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s,allSlides:!0})},perspective:()=>e.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})},function({swiper:e,extendParams:t,on:s}){t({cardsEffect:{slideShadows:!0,transformEl:null}}),F({effect:"cards",swiper:e,on:s,setTranslate:()=>{const{slides:t,activeIndex:s}=e,a=e.params.cardsEffect,{startTranslate:i,isTouched:r}=e.touchEventsData,n=e.translate;for(let l=0;l0&&c<1&&(r||e.params.cssMode)&&n-1&&(r||e.params.cssMode)&&n>i;if(w||b){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!e.isHorizontal()){const e=h;h=u,u=e}const x=`\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${g}deg)\n scale(${c<0?""+(1+(1-f)*c):""+(1-(1-f)*c)})\n `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=Z(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+t.length;U(a,o).transform(x)}},setTransition:t=>{const{transformEl:s}=e.params.cardsEffect;(s?e.slides.find(s):e.slides).transition(t).find(".swiper-slide-shadow").transition(t),K({swiper:e,duration:t,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!e.params.cssMode})})}];return H.use(J),H})); //# sourceMappingURL=swiper-bundle.min.js.mapassets/js/swiper-bundle.js000064400001161447147600374750011633 0ustar00/** * Swiper 7.3.1 * Most modern mobile touch slider and framework with hardware accelerated transitions * https://swiperjs.com * * Copyright 2014-2021 Vladimir Kharlampidi * * Released under the MIT License * * Released on: November 24, 2021 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swiper = factory()); }(this, (function () { 'use strict'; /** * SSR Window 4.0.1 * Better handling for window object in SSR environment * https://github.com/nolimits4web/ssr-window * * Copyright 2021, Vladimir Kharlampidi * * Licensed under MIT * * Released on: October 27, 2021 */ /* eslint-disable no-param-reassign */ function isObject$1(obj) { return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; } function extend$1(target = {}, src = {}) { Object.keys(src).forEach(key => { if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) { extend$1(target[key], src[key]); } }); } const ssrDocument = { body: {}, addEventListener() {}, removeEventListener() {}, activeElement: { blur() {}, nodeName: '' }, querySelector() { return null; }, querySelectorAll() { return []; }, getElementById() { return null; }, createEvent() { return { initEvent() {} }; }, createElement() { return { children: [], childNodes: [], style: {}, setAttribute() {}, getElementsByTagName() { return []; } }; }, createElementNS() { return {}; }, importNode() { return null; }, location: { hash: '', host: '', hostname: '', href: '', origin: '', pathname: '', protocol: '', search: '' } }; function getDocument() { const doc = typeof document !== 'undefined' ? document : {}; extend$1(doc, ssrDocument); return doc; } const ssrWindow = { document: ssrDocument, navigator: { userAgent: '' }, location: { hash: '', host: '', hostname: '', href: '', origin: '', pathname: '', protocol: '', search: '' }, history: { replaceState() {}, pushState() {}, go() {}, back() {} }, CustomEvent: function CustomEvent() { return this; }, addEventListener() {}, removeEventListener() {}, getComputedStyle() { return { getPropertyValue() { return ''; } }; }, Image() {}, Date() {}, screen: {}, setTimeout() {}, clearTimeout() {}, matchMedia() { return {}; }, requestAnimationFrame(callback) { if (typeof setTimeout === 'undefined') { callback(); return null; } return setTimeout(callback, 0); }, cancelAnimationFrame(id) { if (typeof setTimeout === 'undefined') { return; } clearTimeout(id); } }; function getWindow() { const win = typeof window !== 'undefined' ? window : {}; extend$1(win, ssrWindow); return win; } /** * Dom7 4.0.1 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API * https://framework7.io/docs/dom7.html * * Copyright 2021, Vladimir Kharlampidi * * Licensed under MIT * * Released on: October 27, 2021 */ /* eslint-disable no-proto */ function makeReactive(obj) { const proto = obj.__proto__; Object.defineProperty(obj, '__proto__', { get() { return proto; }, set(value) { proto.__proto__ = value; } }); } class Dom7 extends Array { constructor(items) { super(...(items || [])); makeReactive(this); } } function arrayFlat(arr = []) { const res = []; arr.forEach(el => { if (Array.isArray(el)) { res.push(...arrayFlat(el)); } else { res.push(el); } }); return res; } function arrayFilter(arr, callback) { return Array.prototype.filter.call(arr, callback); } function arrayUnique(arr) { const uniqueArray = []; for (let i = 0; i < arr.length; i += 1) { if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); } return uniqueArray; } function qsa(selector, context) { if (typeof selector !== 'string') { return [selector]; } const a = []; const res = context.querySelectorAll(selector); for (let i = 0; i < res.length; i += 1) { a.push(res[i]); } return a; } function $(selector, context) { const window = getWindow(); const document = getDocument(); let arr = []; if (!context && selector instanceof Dom7) { return selector; } if (!selector) { return new Dom7(arr); } if (typeof selector === 'string') { const html = selector.trim(); if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { let toCreate = 'div'; if (html.indexOf(' c.split(' '))); this.forEach(el => { el.classList.add(...classNames); }); return this; } function removeClass(...classes) { const classNames = arrayFlat(classes.map(c => c.split(' '))); this.forEach(el => { el.classList.remove(...classNames); }); return this; } function toggleClass(...classes) { const classNames = arrayFlat(classes.map(c => c.split(' '))); this.forEach(el => { classNames.forEach(className => { el.classList.toggle(className); }); }); } function hasClass(...classes) { const classNames = arrayFlat(classes.map(c => c.split(' '))); return arrayFilter(this, el => { return classNames.filter(className => el.classList.contains(className)).length > 0; }).length > 0; } function attr(attrs, value) { if (arguments.length === 1 && typeof attrs === 'string') { // Get attr if (this[0]) return this[0].getAttribute(attrs); return undefined; } // Set attrs for (let i = 0; i < this.length; i += 1) { if (arguments.length === 2) { // String this[i].setAttribute(attrs, value); } else { // Object for (const attrName in attrs) { this[i][attrName] = attrs[attrName]; this[i].setAttribute(attrName, attrs[attrName]); } } } return this; } function removeAttr(attr) { for (let i = 0; i < this.length; i += 1) { this[i].removeAttribute(attr); } return this; } function transform(transform) { for (let i = 0; i < this.length; i += 1) { this[i].style.transform = transform; } return this; } function transition$1(duration) { for (let i = 0; i < this.length; i += 1) { this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration; } return this; } function on(...args) { let [eventType, targetSelector, listener, capture] = args; if (typeof args[1] === 'function') { [eventType, listener, capture] = args; targetSelector = undefined; } if (!capture) capture = false; function handleLiveEvent(e) { const target = e.target; if (!target) return; const eventData = e.target.dom7EventData || []; if (eventData.indexOf(e) < 0) { eventData.unshift(e); } if ($(target).is(targetSelector)) listener.apply(target, eventData);else { const parents = $(target).parents(); // eslint-disable-line for (let k = 0; k < parents.length; k += 1) { if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData); } } } function handleEvent(e) { const eventData = e && e.target ? e.target.dom7EventData || [] : []; if (eventData.indexOf(e) < 0) { eventData.unshift(e); } listener.apply(this, eventData); } const events = eventType.split(' '); let j; for (let i = 0; i < this.length; i += 1) { const el = this[i]; if (!targetSelector) { for (j = 0; j < events.length; j += 1) { const event = events[j]; if (!el.dom7Listeners) el.dom7Listeners = {}; if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; el.dom7Listeners[event].push({ listener, proxyListener: handleEvent }); el.addEventListener(event, handleEvent, capture); } } else { // Live events for (j = 0; j < events.length; j += 1) { const event = events[j]; if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = []; el.dom7LiveListeners[event].push({ listener, proxyListener: handleLiveEvent }); el.addEventListener(event, handleLiveEvent, capture); } } } return this; } function off(...args) { let [eventType, targetSelector, listener, capture] = args; if (typeof args[1] === 'function') { [eventType, listener, capture] = args; targetSelector = undefined; } if (!capture) capture = false; const events = eventType.split(' '); for (let i = 0; i < events.length; i += 1) { const event = events[i]; for (let j = 0; j < this.length; j += 1) { const el = this[j]; let handlers; if (!targetSelector && el.dom7Listeners) { handlers = el.dom7Listeners[event]; } else if (targetSelector && el.dom7LiveListeners) { handlers = el.dom7LiveListeners[event]; } if (handlers && handlers.length) { for (let k = handlers.length - 1; k >= 0; k -= 1) { const handler = handlers[k]; if (listener && handler.listener === listener) { el.removeEventListener(event, handler.proxyListener, capture); handlers.splice(k, 1); } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { el.removeEventListener(event, handler.proxyListener, capture); handlers.splice(k, 1); } else if (!listener) { el.removeEventListener(event, handler.proxyListener, capture); handlers.splice(k, 1); } } } } } return this; } function trigger(...args) { const window = getWindow(); const events = args[0].split(' '); const eventData = args[1]; for (let i = 0; i < events.length; i += 1) { const event = events[i]; for (let j = 0; j < this.length; j += 1) { const el = this[j]; if (window.CustomEvent) { const evt = new window.CustomEvent(event, { detail: eventData, bubbles: true, cancelable: true }); el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0); el.dispatchEvent(evt); el.dom7EventData = []; delete el.dom7EventData; } } } return this; } function transitionEnd$1(callback) { const dom = this; function fireCallBack(e) { if (e.target !== this) return; callback.call(this, e); dom.off('transitionend', fireCallBack); } if (callback) { dom.on('transitionend', fireCallBack); } return this; } function outerWidth(includeMargins) { if (this.length > 0) { if (includeMargins) { const styles = this.styles(); return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left')); } return this[0].offsetWidth; } return null; } function outerHeight(includeMargins) { if (this.length > 0) { if (includeMargins) { const styles = this.styles(); return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom')); } return this[0].offsetHeight; } return null; } function offset() { if (this.length > 0) { const window = getWindow(); const document = getDocument(); const el = this[0]; const box = el.getBoundingClientRect(); const body = document.body; const clientTop = el.clientTop || body.clientTop || 0; const clientLeft = el.clientLeft || body.clientLeft || 0; const scrollTop = el === window ? window.scrollY : el.scrollTop; const scrollLeft = el === window ? window.scrollX : el.scrollLeft; return { top: box.top + scrollTop - clientTop, left: box.left + scrollLeft - clientLeft }; } return null; } function styles() { const window = getWindow(); if (this[0]) return window.getComputedStyle(this[0], null); return {}; } function css(props, value) { const window = getWindow(); let i; if (arguments.length === 1) { if (typeof props === 'string') { // .css('width') if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); } else { // .css({ width: '100px' }) for (i = 0; i < this.length; i += 1) { for (const prop in props) { this[i].style[prop] = props[prop]; } } return this; } } if (arguments.length === 2 && typeof props === 'string') { // .css('width', '100px') for (i = 0; i < this.length; i += 1) { this[i].style[props] = value; } return this; } return this; } function each(callback) { if (!callback) return this; this.forEach((el, index) => { callback.apply(el, [el, index]); }); return this; } function filter(callback) { const result = arrayFilter(this, callback); return $(result); } function html(html) { if (typeof html === 'undefined') { return this[0] ? this[0].innerHTML : null; } for (let i = 0; i < this.length; i += 1) { this[i].innerHTML = html; } return this; } function text(text) { if (typeof text === 'undefined') { return this[0] ? this[0].textContent.trim() : null; } for (let i = 0; i < this.length; i += 1) { this[i].textContent = text; } return this; } function is(selector) { const window = getWindow(); const document = getDocument(); const el = this[0]; let compareWith; let i; if (!el || typeof selector === 'undefined') return false; if (typeof selector === 'string') { if (el.matches) return el.matches(selector); if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); if (el.msMatchesSelector) return el.msMatchesSelector(selector); compareWith = $(selector); for (i = 0; i < compareWith.length; i += 1) { if (compareWith[i] === el) return true; } return false; } if (selector === document) { return el === document; } if (selector === window) { return el === window; } if (selector.nodeType || selector instanceof Dom7) { compareWith = selector.nodeType ? [selector] : selector; for (i = 0; i < compareWith.length; i += 1) { if (compareWith[i] === el) return true; } return false; } return false; } function index() { let child = this[0]; let i; if (child) { i = 0; // eslint-disable-next-line while ((child = child.previousSibling) !== null) { if (child.nodeType === 1) i += 1; } return i; } return undefined; } function eq(index) { if (typeof index === 'undefined') return this; const length = this.length; if (index > length - 1) { return $([]); } if (index < 0) { const returnIndex = length + index; if (returnIndex < 0) return $([]); return $([this[returnIndex]]); } return $([this[index]]); } function append(...els) { let newChild; const document = getDocument(); for (let k = 0; k < els.length; k += 1) { newChild = els[k]; for (let i = 0; i < this.length; i += 1) { if (typeof newChild === 'string') { const tempDiv = document.createElement('div'); tempDiv.innerHTML = newChild; while (tempDiv.firstChild) { this[i].appendChild(tempDiv.firstChild); } } else if (newChild instanceof Dom7) { for (let j = 0; j < newChild.length; j += 1) { this[i].appendChild(newChild[j]); } } else { this[i].appendChild(newChild); } } } return this; } function prepend(newChild) { const document = getDocument(); let i; let j; for (i = 0; i < this.length; i += 1) { if (typeof newChild === 'string') { const tempDiv = document.createElement('div'); tempDiv.innerHTML = newChild; for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); } } else if (newChild instanceof Dom7) { for (j = 0; j < newChild.length; j += 1) { this[i].insertBefore(newChild[j], this[i].childNodes[0]); } } else { this[i].insertBefore(newChild, this[i].childNodes[0]); } } return this; } function next(selector) { if (this.length > 0) { if (selector) { if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { return $([this[0].nextElementSibling]); } return $([]); } if (this[0].nextElementSibling) return $([this[0].nextElementSibling]); return $([]); } return $([]); } function nextAll(selector) { const nextEls = []; let el = this[0]; if (!el) return $([]); while (el.nextElementSibling) { const next = el.nextElementSibling; // eslint-disable-line if (selector) { if ($(next).is(selector)) nextEls.push(next); } else nextEls.push(next); el = next; } return $(nextEls); } function prev(selector) { if (this.length > 0) { const el = this[0]; if (selector) { if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { return $([el.previousElementSibling]); } return $([]); } if (el.previousElementSibling) return $([el.previousElementSibling]); return $([]); } return $([]); } function prevAll(selector) { const prevEls = []; let el = this[0]; if (!el) return $([]); while (el.previousElementSibling) { const prev = el.previousElementSibling; // eslint-disable-line if (selector) { if ($(prev).is(selector)) prevEls.push(prev); } else prevEls.push(prev); el = prev; } return $(prevEls); } function parent(selector) { const parents = []; // eslint-disable-line for (let i = 0; i < this.length; i += 1) { if (this[i].parentNode !== null) { if (selector) { if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); } else { parents.push(this[i].parentNode); } } } return $(parents); } function parents(selector) { const parents = []; // eslint-disable-line for (let i = 0; i < this.length; i += 1) { let parent = this[i].parentNode; // eslint-disable-line while (parent) { if (selector) { if ($(parent).is(selector)) parents.push(parent); } else { parents.push(parent); } parent = parent.parentNode; } } return $(parents); } function closest(selector) { let closest = this; // eslint-disable-line if (typeof selector === 'undefined') { return $([]); } if (!closest.is(selector)) { closest = closest.parents(selector).eq(0); } return closest; } function find(selector) { const foundElements = []; for (let i = 0; i < this.length; i += 1) { const found = this[i].querySelectorAll(selector); for (let j = 0; j < found.length; j += 1) { foundElements.push(found[j]); } } return $(foundElements); } function children(selector) { const children = []; // eslint-disable-line for (let i = 0; i < this.length; i += 1) { const childNodes = this[i].children; for (let j = 0; j < childNodes.length; j += 1) { if (!selector || $(childNodes[j]).is(selector)) { children.push(childNodes[j]); } } } return $(children); } function remove() { for (let i = 0; i < this.length; i += 1) { if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); } return this; } const Methods = { addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition: transition$1, on, off, trigger, transitionEnd: transitionEnd$1, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove }; Object.keys(Methods).forEach(methodName => { Object.defineProperty($.fn, methodName, { value: Methods[methodName], writable: true }); }); function deleteProps(obj) { const object = obj; Object.keys(object).forEach(key => { try { object[key] = null; } catch (e) {// no getter for object } try { delete object[key]; } catch (e) {// something got wrong } }); } function nextTick(callback, delay = 0) { return setTimeout(callback, delay); } function now() { return Date.now(); } function getComputedStyle$1(el) { const window = getWindow(); let style; if (window.getComputedStyle) { style = window.getComputedStyle(el, null); } if (!style && el.currentStyle) { style = el.currentStyle; } if (!style) { style = el.style; } return style; } function getTranslate(el, axis = 'x') { const window = getWindow(); let matrix; let curTransform; let transformMatrix; const curStyle = getComputedStyle$1(el); if (window.WebKitCSSMatrix) { curTransform = curStyle.transform || curStyle.webkitTransform; if (curTransform.split(',').length > 6) { curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); } // Some old versions of Webkit choke when 'none' is passed; pass // empty string instead in this case transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); } else { transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); matrix = transformMatrix.toString().split(','); } if (axis === 'x') { // Latest Chrome and webkits Fix if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers else curTransform = parseFloat(matrix[4]); } if (axis === 'y') { // Latest Chrome and webkits Fix if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers else curTransform = parseFloat(matrix[5]); } return curTransform || 0; } function isObject(o) { return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; } function isNode(node) { // eslint-disable-next-line if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { return node instanceof HTMLElement; } return node && (node.nodeType === 1 || node.nodeType === 11); } function extend(...args) { const to = Object(args[0]); const noExtend = ['__proto__', 'constructor', 'prototype']; for (let i = 1; i < args.length; i += 1) { const nextSource = args[i]; if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { const nextKey = keysArray[nextIndex]; const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); if (desc !== undefined && desc.enumerable) { if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { if (nextSource[nextKey].__swiper__) { to[nextKey] = nextSource[nextKey]; } else { extend(to[nextKey], nextSource[nextKey]); } } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { to[nextKey] = {}; if (nextSource[nextKey].__swiper__) { to[nextKey] = nextSource[nextKey]; } else { extend(to[nextKey], nextSource[nextKey]); } } else { to[nextKey] = nextSource[nextKey]; } } } } } return to; } function setCSSProperty(el, varName, varValue) { el.style.setProperty(varName, varValue); } function animateCSSModeScroll({ swiper, targetPosition, side }) { const window = getWindow(); const startPosition = -swiper.translate; let startTime = null; let time; const duration = swiper.params.speed; swiper.wrapperEl.style.scrollSnapType = 'none'; window.cancelAnimationFrame(swiper.cssModeFrameID); const dir = targetPosition > startPosition ? 'next' : 'prev'; const isOutOfBound = (current, target) => { return dir === 'next' && current >= target || dir === 'prev' && current <= target; }; const animate = () => { time = new Date().getTime(); if (startTime === null) { startTime = time; } const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); if (isOutOfBound(currentPosition, targetPosition)) { currentPosition = targetPosition; } swiper.wrapperEl.scrollTo({ [side]: currentPosition }); if (isOutOfBound(currentPosition, targetPosition)) { swiper.wrapperEl.style.overflow = 'hidden'; swiper.wrapperEl.style.scrollSnapType = ''; setTimeout(() => { swiper.wrapperEl.style.overflow = ''; swiper.wrapperEl.scrollTo({ [side]: currentPosition }); }); window.cancelAnimationFrame(swiper.cssModeFrameID); return; } swiper.cssModeFrameID = window.requestAnimationFrame(animate); }; animate(); } let support; function calcSupport() { const window = getWindow(); const document = getDocument(); return { smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style, touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch), passiveListener: function checkPassiveListener() { let supportsPassive = false; try { const opts = Object.defineProperty({}, 'passive', { // eslint-disable-next-line get() { supportsPassive = true; } }); window.addEventListener('testPassiveListener', null, opts); } catch (e) {// No support } return supportsPassive; }(), gestures: function checkGestures() { return 'ongesturestart' in window; }() }; } function getSupport() { if (!support) { support = calcSupport(); } return support; } let deviceCached; function calcDevice({ userAgent } = {}) { const support = getSupport(); const window = getWindow(); const platform = window.navigator.platform; const ua = userAgent || window.navigator.userAgent; const device = { ios: false, android: false }; const screenWidth = window.screen.width; const screenHeight = window.screen.height; const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); const windows = platform === 'Win32'; let macos = platform === 'MacIntel'; // iPadOs 13 fix const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { ipad = ua.match(/(Version)\/([\d.]+)/); if (!ipad) ipad = [0, 1, '13_0_0']; macos = false; } // Android if (android && !windows) { device.os = 'android'; device.android = true; } if (ipad || iphone || ipod) { device.os = 'ios'; device.ios = true; } // Export object return device; } function getDevice(overrides = {}) { if (!deviceCached) { deviceCached = calcDevice(overrides); } return deviceCached; } let browser; function calcBrowser() { const window = getWindow(); function isSafari() { const ua = window.navigator.userAgent.toLowerCase(); return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; } return { isSafari: isSafari(), isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) }; } function getBrowser() { if (!browser) { browser = calcBrowser(); } return browser; } function Resize({ swiper, on, emit }) { const window = getWindow(); let observer = null; const resizeHandler = () => { if (!swiper || swiper.destroyed || !swiper.initialized) return; emit('beforeResize'); emit('resize'); }; const createObserver = () => { if (!swiper || swiper.destroyed || !swiper.initialized) return; observer = new ResizeObserver(entries => { const { width, height } = swiper; let newWidth = width; let newHeight = height; entries.forEach(({ contentBoxSize, contentRect, target }) => { if (target && target !== swiper.el) return; newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; }); if (newWidth !== width || newHeight !== height) { resizeHandler(); } }); observer.observe(swiper.el); }; const removeObserver = () => { if (observer && observer.unobserve && swiper.el) { observer.unobserve(swiper.el); observer = null; } }; const orientationChangeHandler = () => { if (!swiper || swiper.destroyed || !swiper.initialized) return; emit('orientationchange'); }; on('init', () => { if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { createObserver(); return; } window.addEventListener('resize', resizeHandler); window.addEventListener('orientationchange', orientationChangeHandler); }); on('destroy', () => { removeObserver(); window.removeEventListener('resize', resizeHandler); window.removeEventListener('orientationchange', orientationChangeHandler); }); } function Observer({ swiper, extendParams, on, emit }) { const observers = []; const window = getWindow(); const attach = (target, options = {}) => { const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; const observer = new ObserverFunc(mutations => { // The observerUpdate event should only be triggered // once despite the number of mutations. Additional // triggers are redundant and are very costly if (mutations.length === 1) { emit('observerUpdate', mutations[0]); return; } const observerUpdate = function observerUpdate() { emit('observerUpdate', mutations[0]); }; if (window.requestAnimationFrame) { window.requestAnimationFrame(observerUpdate); } else { window.setTimeout(observerUpdate, 0); } }); observer.observe(target, { attributes: typeof options.attributes === 'undefined' ? true : options.attributes, childList: typeof options.childList === 'undefined' ? true : options.childList, characterData: typeof options.characterData === 'undefined' ? true : options.characterData }); observers.push(observer); }; const init = () => { if (!swiper.params.observer) return; if (swiper.params.observeParents) { const containerParents = swiper.$el.parents(); for (let i = 0; i < containerParents.length; i += 1) { attach(containerParents[i]); } } // Observe container attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren }); // Observe wrapper attach(swiper.$wrapperEl[0], { attributes: false }); }; const destroy = () => { observers.forEach(observer => { observer.disconnect(); }); observers.splice(0, observers.length); }; extendParams({ observer: false, observeParents: false, observeSlideChildren: false }); on('init', init); on('destroy', destroy); } /* eslint-disable no-underscore-dangle */ var eventsEmitter = { on(events, handler, priority) { const self = this; if (typeof handler !== 'function') return self; const method = priority ? 'unshift' : 'push'; events.split(' ').forEach(event => { if (!self.eventsListeners[event]) self.eventsListeners[event] = []; self.eventsListeners[event][method](handler); }); return self; }, once(events, handler, priority) { const self = this; if (typeof handler !== 'function') return self; function onceHandler(...args) { self.off(events, onceHandler); if (onceHandler.__emitterProxy) { delete onceHandler.__emitterProxy; } handler.apply(self, args); } onceHandler.__emitterProxy = handler; return self.on(events, onceHandler, priority); }, onAny(handler, priority) { const self = this; if (typeof handler !== 'function') return self; const method = priority ? 'unshift' : 'push'; if (self.eventsAnyListeners.indexOf(handler) < 0) { self.eventsAnyListeners[method](handler); } return self; }, offAny(handler) { const self = this; if (!self.eventsAnyListeners) return self; const index = self.eventsAnyListeners.indexOf(handler); if (index >= 0) { self.eventsAnyListeners.splice(index, 1); } return self; }, off(events, handler) { const self = this; if (!self.eventsListeners) return self; events.split(' ').forEach(event => { if (typeof handler === 'undefined') { self.eventsListeners[event] = []; } else if (self.eventsListeners[event]) { self.eventsListeners[event].forEach((eventHandler, index) => { if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { self.eventsListeners[event].splice(index, 1); } }); } }); return self; }, emit(...args) { const self = this; if (!self.eventsListeners) return self; let events; let data; let context; if (typeof args[0] === 'string' || Array.isArray(args[0])) { events = args[0]; data = args.slice(1, args.length); context = self; } else { events = args[0].events; data = args[0].data; context = args[0].context || self; } data.unshift(context); const eventsArray = Array.isArray(events) ? events : events.split(' '); eventsArray.forEach(event => { if (self.eventsAnyListeners && self.eventsAnyListeners.length) { self.eventsAnyListeners.forEach(eventHandler => { eventHandler.apply(context, [event, ...data]); }); } if (self.eventsListeners && self.eventsListeners[event]) { self.eventsListeners[event].forEach(eventHandler => { eventHandler.apply(context, data); }); } }); return self; } }; function updateSize() { const swiper = this; let width; let height; const $el = swiper.$el; if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { width = swiper.params.width; } else { width = $el[0].clientWidth; } if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { height = swiper.params.height; } else { height = $el[0].clientHeight; } if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { return; } // Subtract paddings width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10); height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10); if (Number.isNaN(width)) width = 0; if (Number.isNaN(height)) height = 0; Object.assign(swiper, { width, height, size: swiper.isHorizontal() ? width : height }); } function updateSlides() { const swiper = this; function getDirectionLabel(property) { if (swiper.isHorizontal()) { return property; } // prettier-ignore return { 'width': 'height', 'margin-top': 'margin-left', 'margin-bottom ': 'margin-right', 'margin-left': 'margin-top', 'margin-right': 'margin-bottom', 'padding-left': 'padding-top', 'padding-right': 'padding-bottom', 'marginRight': 'marginBottom' }[property]; } function getDirectionPropertyValue(node, label) { return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0); } const params = swiper.params; const { $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper; const isVirtual = swiper.virtual && params.virtual.enabled; const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; const slides = $wrapperEl.children(`.${swiper.params.slideClass}`); const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; let snapGrid = []; const slidesGrid = []; const slidesSizesGrid = []; let offsetBefore = params.slidesOffsetBefore; if (typeof offsetBefore === 'function') { offsetBefore = params.slidesOffsetBefore.call(swiper); } let offsetAfter = params.slidesOffsetAfter; if (typeof offsetAfter === 'function') { offsetAfter = params.slidesOffsetAfter.call(swiper); } const previousSnapGridLength = swiper.snapGrid.length; const previousSlidesGridLength = swiper.slidesGrid.length; let spaceBetween = params.spaceBetween; let slidePosition = -offsetBefore; let prevSlideSize = 0; let index = 0; if (typeof swiperSize === 'undefined') { return; } if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; } swiper.virtualSize = -spaceBetween; // reset margins if (rtl) slides.css({ marginLeft: '', marginBottom: '', marginTop: '' });else slides.css({ marginRight: '', marginBottom: '', marginTop: '' }); // reset cssMode offsets if (params.centeredSlides && params.cssMode) { setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', ''); setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', ''); } const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; if (gridEnabled) { swiper.grid.initSlides(slidesLength); } // Calc slides let slideSize; const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { return typeof params.breakpoints[key].slidesPerView !== 'undefined'; }).length > 0; for (let i = 0; i < slidesLength; i += 1) { slideSize = 0; const slide = slides.eq(i); if (gridEnabled) { swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel); } if (slide.css('display') === 'none') continue; // eslint-disable-line if (params.slidesPerView === 'auto') { if (shouldResetSlideSize) { slides[i].style[getDirectionLabel('width')] = ``; } const slideStyles = getComputedStyle(slide[0]); const currentTransform = slide[0].style.transform; const currentWebKitTransform = slide[0].style.webkitTransform; if (currentTransform) { slide[0].style.transform = 'none'; } if (currentWebKitTransform) { slide[0].style.webkitTransform = 'none'; } if (params.roundLengths) { slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); } else { // eslint-disable-next-line const width = getDirectionPropertyValue(slideStyles, 'width'); const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); const boxSizing = slideStyles.getPropertyValue('box-sizing'); if (boxSizing && boxSizing === 'border-box') { slideSize = width + marginLeft + marginRight; } else { const { clientWidth, offsetWidth } = slide[0]; slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); } } if (currentTransform) { slide[0].style.transform = currentTransform; } if (currentWebKitTransform) { slide[0].style.webkitTransform = currentWebKitTransform; } if (params.roundLengths) slideSize = Math.floor(slideSize); } else { slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; if (params.roundLengths) slideSize = Math.floor(slideSize); if (slides[i]) { slides[i].style[getDirectionLabel('width')] = `${slideSize}px`; } } if (slides[i]) { slides[i].swiperSlideSize = slideSize; } slidesSizesGrid.push(slideSize); if (params.centeredSlides) { slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; if (params.roundLengths) slidePosition = Math.floor(slidePosition); if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); slidesGrid.push(slidePosition); } else { if (params.roundLengths) slidePosition = Math.floor(slidePosition); if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); slidesGrid.push(slidePosition); slidePosition = slidePosition + slideSize + spaceBetween; } swiper.virtualSize += slideSize + spaceBetween; prevSlideSize = slideSize; index += 1; } swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` }); } if (params.setWrapperSize) { $wrapperEl.css({ [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px` }); } if (gridEnabled) { swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel); } // Remove last grid elements depending on width if (!params.centeredSlides) { const newSlidesGrid = []; for (let i = 0; i < snapGrid.length; i += 1) { let slidesGridItem = snapGrid[i]; if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); if (snapGrid[i] <= swiper.virtualSize - swiperSize) { newSlidesGrid.push(slidesGridItem); } } snapGrid = newSlidesGrid; if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { snapGrid.push(swiper.virtualSize - swiperSize); } } if (snapGrid.length === 0) snapGrid = [0]; if (params.spaceBetween !== 0) { const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight'); slides.filter((_, slideIndex) => { if (!params.cssMode) return true; if (slideIndex === slides.length - 1) { return false; } return true; }).css({ [key]: `${spaceBetween}px` }); } if (params.centeredSlides && params.centeredSlidesBounds) { let allSlidesSize = 0; slidesSizesGrid.forEach(slideSizeValue => { allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); }); allSlidesSize -= params.spaceBetween; const maxSnap = allSlidesSize - swiperSize; snapGrid = snapGrid.map(snap => { if (snap < 0) return -offsetBefore; if (snap > maxSnap) return maxSnap + offsetAfter; return snap; }); } if (params.centerInsufficientSlides) { let allSlidesSize = 0; slidesSizesGrid.forEach(slideSizeValue => { allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); }); allSlidesSize -= params.spaceBetween; if (allSlidesSize < swiperSize) { const allSlidesOffset = (swiperSize - allSlidesSize) / 2; snapGrid.forEach((snap, snapIndex) => { snapGrid[snapIndex] = snap - allSlidesOffset; }); slidesGrid.forEach((snap, snapIndex) => { slidesGrid[snapIndex] = snap + allSlidesOffset; }); } } Object.assign(swiper, { slides, snapGrid, slidesGrid, slidesSizesGrid }); if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); const addToSnapGrid = -swiper.snapGrid[0]; const addToSlidesGrid = -swiper.slidesGrid[0]; swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); } if (slidesLength !== previousSlidesLength) { swiper.emit('slidesLengthChange'); } if (snapGrid.length !== previousSnapGridLength) { if (swiper.params.watchOverflow) swiper.checkOverflow(); swiper.emit('snapGridLengthChange'); } if (slidesGrid.length !== previousSlidesGridLength) { swiper.emit('slidesGridLengthChange'); } if (params.watchSlidesProgress) { swiper.updateSlidesOffset(); } } function updateAutoHeight(speed) { const swiper = this; const activeSlides = []; const isVirtual = swiper.virtual && swiper.params.virtual.enabled; let newHeight = 0; let i; if (typeof speed === 'number') { swiper.setTransition(speed); } else if (speed === true) { swiper.setTransition(swiper.params.speed); } const getSlideByIndex = index => { if (isVirtual) { return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0]; } return swiper.slides.eq(index)[0]; }; // Find slides currently in view if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { if (swiper.params.centeredSlides) { swiper.visibleSlides.each(slide => { activeSlides.push(slide); }); } else { for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { const index = swiper.activeIndex + i; if (index > swiper.slides.length && !isVirtual) break; activeSlides.push(getSlideByIndex(index)); } } } else { activeSlides.push(getSlideByIndex(swiper.activeIndex)); } // Find new height from highest slide in view for (i = 0; i < activeSlides.length; i += 1) { if (typeof activeSlides[i] !== 'undefined') { const height = activeSlides[i].offsetHeight; newHeight = height > newHeight ? height : newHeight; } } // Update Height if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`); } function updateSlidesOffset() { const swiper = this; const slides = swiper.slides; for (let i = 0; i < slides.length; i += 1) { slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; } } function updateSlidesProgress(translate = this && this.translate || 0) { const swiper = this; const params = swiper.params; const { slides, rtlTranslate: rtl, snapGrid } = swiper; if (slides.length === 0) return; if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); let offsetCenter = -translate; if (rtl) offsetCenter = translate; // Visible Slides slides.removeClass(params.slideVisibleClass); swiper.visibleSlidesIndexes = []; swiper.visibleSlides = []; for (let i = 0; i < slides.length; i += 1) { const slide = slides[i]; let slideOffset = slide.swiperSlideOffset; if (params.cssMode && params.centeredSlides) { slideOffset -= slides[0].swiperSlideOffset; } const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween); const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween); const slideBefore = -(offsetCenter - slideOffset); const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; if (isVisible) { swiper.visibleSlides.push(slide); swiper.visibleSlidesIndexes.push(i); slides.eq(i).addClass(params.slideVisibleClass); } slide.progress = rtl ? -slideProgress : slideProgress; slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; } swiper.visibleSlides = $(swiper.visibleSlides); } function updateProgress(translate) { const swiper = this; if (typeof translate === 'undefined') { const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line translate = swiper && swiper.translate && swiper.translate * multiplier || 0; } const params = swiper.params; const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); let { progress, isBeginning, isEnd } = swiper; const wasBeginning = isBeginning; const wasEnd = isEnd; if (translatesDiff === 0) { progress = 0; isBeginning = true; isEnd = true; } else { progress = (translate - swiper.minTranslate()) / translatesDiff; isBeginning = progress <= 0; isEnd = progress >= 1; } Object.assign(swiper, { progress, isBeginning, isEnd }); if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); if (isBeginning && !wasBeginning) { swiper.emit('reachBeginning toEdge'); } if (isEnd && !wasEnd) { swiper.emit('reachEnd toEdge'); } if (wasBeginning && !isBeginning || wasEnd && !isEnd) { swiper.emit('fromEdge'); } swiper.emit('progress', progress); } function updateSlidesClasses() { const swiper = this; const { slides, params, $wrapperEl, activeIndex, realIndex } = swiper; const isVirtual = swiper.virtual && params.virtual.enabled; slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`); let activeSlide; if (isVirtual) { activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`); } else { activeSlide = slides.eq(activeIndex); } // Active classes activeSlide.addClass(params.slideActiveClass); if (params.loop) { // Duplicate to all looped slides if (activeSlide.hasClass(params.slideDuplicateClass)) { $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`).addClass(params.slideDuplicateActiveClass); } else { $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`).addClass(params.slideDuplicateActiveClass); } } // Next Slide let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass); if (params.loop && nextSlide.length === 0) { nextSlide = slides.eq(0); nextSlide.addClass(params.slideNextClass); } // Prev Slide let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass); if (params.loop && prevSlide.length === 0) { prevSlide = slides.eq(-1); prevSlide.addClass(params.slidePrevClass); } if (params.loop) { // Duplicate to all looped slides if (nextSlide.hasClass(params.slideDuplicateClass)) { $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicateNextClass); } else { $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicateNextClass); } if (prevSlide.hasClass(params.slideDuplicateClass)) { $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicatePrevClass); } else { $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicatePrevClass); } } swiper.emitSlidesClasses(); } function updateActiveIndex(newActiveIndex) { const swiper = this; const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; const { slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex } = swiper; let activeIndex = newActiveIndex; let snapIndex; if (typeof activeIndex === 'undefined') { for (let i = 0; i < slidesGrid.length; i += 1) { if (typeof slidesGrid[i + 1] !== 'undefined') { if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { activeIndex = i; } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { activeIndex = i + 1; } } else if (translate >= slidesGrid[i]) { activeIndex = i; } } // Normalize slideIndex if (params.normalizeSlideIndex) { if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; } } if (snapGrid.indexOf(translate) >= 0) { snapIndex = snapGrid.indexOf(translate); } else { const skip = Math.min(params.slidesPerGroupSkip, activeIndex); snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); } if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; if (activeIndex === previousIndex) { if (snapIndex !== previousSnapIndex) { swiper.snapIndex = snapIndex; swiper.emit('snapIndexChange'); } return; } // Get real index const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); Object.assign(swiper, { snapIndex, realIndex, previousIndex, activeIndex }); swiper.emit('activeIndexChange'); swiper.emit('snapIndexChange'); if (previousRealIndex !== realIndex) { swiper.emit('realIndexChange'); } if (swiper.initialized || swiper.params.runCallbacksOnInit) { swiper.emit('slideChange'); } } function updateClickedSlide(e) { const swiper = this; const params = swiper.params; const slide = $(e).closest(`.${params.slideClass}`)[0]; let slideFound = false; let slideIndex; if (slide) { for (let i = 0; i < swiper.slides.length; i += 1) { if (swiper.slides[i] === slide) { slideFound = true; slideIndex = i; break; } } } if (slide && slideFound) { swiper.clickedSlide = slide; if (swiper.virtual && swiper.params.virtual.enabled) { swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10); } else { swiper.clickedIndex = slideIndex; } } else { swiper.clickedSlide = undefined; swiper.clickedIndex = undefined; return; } if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { swiper.slideToClickedSlide(); } } var update = { updateSize, updateSlides, updateAutoHeight, updateSlidesOffset, updateSlidesProgress, updateProgress, updateSlidesClasses, updateActiveIndex, updateClickedSlide }; function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') { const swiper = this; const { params, rtlTranslate: rtl, translate, $wrapperEl } = swiper; if (params.virtualTranslate) { return rtl ? -translate : translate; } if (params.cssMode) { return translate; } let currentTranslate = getTranslate($wrapperEl[0], axis); if (rtl) currentTranslate = -currentTranslate; return currentTranslate || 0; } function setTranslate(translate, byController) { const swiper = this; const { rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress } = swiper; let x = 0; let y = 0; const z = 0; if (swiper.isHorizontal()) { x = rtl ? -translate : translate; } else { y = translate; } if (params.roundLengths) { x = Math.floor(x); y = Math.floor(y); } if (params.cssMode) { wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; } else if (!params.virtualTranslate) { $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`); } swiper.previousTranslate = swiper.translate; swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress let newProgress; const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); if (translatesDiff === 0) { newProgress = 0; } else { newProgress = (translate - swiper.minTranslate()) / translatesDiff; } if (newProgress !== progress) { swiper.updateProgress(translate); } swiper.emit('setTranslate', swiper.translate, byController); } function minTranslate() { return -this.snapGrid[0]; } function maxTranslate() { return -this.snapGrid[this.snapGrid.length - 1]; } function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) { const swiper = this; const { params, wrapperEl } = swiper; if (swiper.animating && params.preventInteractionOnTransition) { return false; } const minTranslate = swiper.minTranslate(); const maxTranslate = swiper.maxTranslate(); let newTranslate; if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress swiper.updateProgress(newTranslate); if (params.cssMode) { const isH = swiper.isHorizontal(); if (speed === 0) { wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; } else { if (!swiper.support.smoothScroll) { animateCSSModeScroll({ swiper, targetPosition: -newTranslate, side: isH ? 'left' : 'top' }); return true; } wrapperEl.scrollTo({ [isH ? 'left' : 'top']: -newTranslate, behavior: 'smooth' }); } return true; } if (speed === 0) { swiper.setTransition(0); swiper.setTranslate(newTranslate); if (runCallbacks) { swiper.emit('beforeTransitionStart', speed, internal); swiper.emit('transitionEnd'); } } else { swiper.setTransition(speed); swiper.setTranslate(newTranslate); if (runCallbacks) { swiper.emit('beforeTransitionStart', speed, internal); swiper.emit('transitionStart'); } if (!swiper.animating) { swiper.animating = true; if (!swiper.onTranslateToWrapperTransitionEnd) { swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { if (!swiper || swiper.destroyed) return; if (e.target !== this) return; swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); swiper.onTranslateToWrapperTransitionEnd = null; delete swiper.onTranslateToWrapperTransitionEnd; if (runCallbacks) { swiper.emit('transitionEnd'); } }; } swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); } } return true; } var translate = { getTranslate: getSwiperTranslate, setTranslate, minTranslate, maxTranslate, translateTo }; function setTransition(duration, byController) { const swiper = this; if (!swiper.params.cssMode) { swiper.$wrapperEl.transition(duration); } swiper.emit('setTransition', duration, byController); } function transitionEmit({ swiper, runCallbacks, direction, step }) { const { activeIndex, previousIndex } = swiper; let dir = direction; if (!dir) { if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; } swiper.emit(`transition${step}`); if (runCallbacks && activeIndex !== previousIndex) { if (dir === 'reset') { swiper.emit(`slideResetTransition${step}`); return; } swiper.emit(`slideChangeTransition${step}`); if (dir === 'next') { swiper.emit(`slideNextTransition${step}`); } else { swiper.emit(`slidePrevTransition${step}`); } } } function transitionStart(runCallbacks = true, direction) { const swiper = this; const { params } = swiper; if (params.cssMode) return; if (params.autoHeight) { swiper.updateAutoHeight(); } transitionEmit({ swiper, runCallbacks, direction, step: 'Start' }); } function transitionEnd(runCallbacks = true, direction) { const swiper = this; const { params } = swiper; swiper.animating = false; if (params.cssMode) return; swiper.setTransition(0); transitionEmit({ swiper, runCallbacks, direction, step: 'End' }); } var transition = { setTransition, transitionStart, transitionEnd }; function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) { if (typeof index !== 'number' && typeof index !== 'string') { throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`); } if (typeof index === 'string') { /** * The `index` argument converted from `string` to `number`. * @type {number} */ const indexAsNumber = parseInt(index, 10); /** * Determines whether the `index` argument is a valid `number` * after being converted from the `string` type. * @type {boolean} */ const isValidNumber = isFinite(indexAsNumber); if (!isValidNumber) { throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`); } // Knowing that the converted `index` is a valid number, // we can update the original argument's value. index = indexAsNumber; } const swiper = this; let slideIndex = index; if (slideIndex < 0) slideIndex = 0; const { params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl, enabled } = swiper; if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { return false; } const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { swiper.emit('beforeSlideChangeStart'); } const translate = -snapGrid[snapIndex]; // Update progress swiper.updateProgress(translate); // Normalize slideIndex if (params.normalizeSlideIndex) { for (let i = 0; i < slidesGrid.length; i += 1) { const normalizedTranslate = -Math.floor(translate * 100); const normalizedGrid = Math.floor(slidesGrid[i] * 100); const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); if (typeof slidesGrid[i + 1] !== 'undefined') { if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { slideIndex = i; } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { slideIndex = i + 1; } } else if (normalizedTranslate >= normalizedGrid) { slideIndex = i; } } } // Directions locks if (swiper.initialized && slideIndex !== activeIndex) { if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { return false; } if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { if ((activeIndex || 0) !== slideIndex) return false; } } let direction; if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { swiper.updateActiveIndex(slideIndex); // Update Height if (params.autoHeight) { swiper.updateAutoHeight(); } swiper.updateSlidesClasses(); if (params.effect !== 'slide') { swiper.setTranslate(translate); } if (direction !== 'reset') { swiper.transitionStart(runCallbacks, direction); swiper.transitionEnd(runCallbacks, direction); } return false; } if (params.cssMode) { const isH = swiper.isHorizontal(); const t = rtl ? translate : -translate; if (speed === 0) { const isVirtual = swiper.virtual && swiper.params.virtual.enabled; if (isVirtual) { swiper.wrapperEl.style.scrollSnapType = 'none'; swiper._immediateVirtual = true; } wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; if (isVirtual) { requestAnimationFrame(() => { swiper.wrapperEl.style.scrollSnapType = ''; swiper._swiperImmediateVirtual = false; }); } } else { if (!swiper.support.smoothScroll) { animateCSSModeScroll({ swiper, targetPosition: t, side: isH ? 'left' : 'top' }); return true; } wrapperEl.scrollTo({ [isH ? 'left' : 'top']: t, behavior: 'smooth' }); } return true; } if (speed === 0) { swiper.setTransition(0); swiper.setTranslate(translate); swiper.updateActiveIndex(slideIndex); swiper.updateSlidesClasses(); swiper.emit('beforeTransitionStart', speed, internal); swiper.transitionStart(runCallbacks, direction); swiper.transitionEnd(runCallbacks, direction); } else { swiper.setTransition(speed); swiper.setTranslate(translate); swiper.updateActiveIndex(slideIndex); swiper.updateSlidesClasses(); swiper.emit('beforeTransitionStart', speed, internal); swiper.transitionStart(runCallbacks, direction); if (!swiper.animating) { swiper.animating = true; if (!swiper.onSlideToWrapperTransitionEnd) { swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { if (!swiper || swiper.destroyed) return; if (e.target !== this) return; swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); swiper.onSlideToWrapperTransitionEnd = null; delete swiper.onSlideToWrapperTransitionEnd; swiper.transitionEnd(runCallbacks, direction); }; } swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); } } return true; } function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) { const swiper = this; let newIndex = index; if (swiper.params.loop) { newIndex += swiper.loopedSlides; } return swiper.slideTo(newIndex, speed, runCallbacks, internal); } /* eslint no-unused-vars: "off" */ function slideNext(speed = this.params.speed, runCallbacks = true, internal) { const swiper = this; const { animating, enabled, params } = swiper; if (!enabled) return swiper; let perGroup = params.slidesPerGroup; if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); } const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; if (params.loop) { if (animating && params.loopPreventsSlide) return false; swiper.loopFix(); // eslint-disable-next-line swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; } return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); } /* eslint no-unused-vars: "off" */ function slidePrev(speed = this.params.speed, runCallbacks = true, internal) { const swiper = this; const { params, animating, snapGrid, slidesGrid, rtlTranslate, enabled } = swiper; if (!enabled) return swiper; if (params.loop) { if (animating && params.loopPreventsSlide) return false; swiper.loopFix(); // eslint-disable-next-line swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; } const translate = rtlTranslate ? swiper.translate : -swiper.translate; function normalize(val) { if (val < 0) return -Math.floor(Math.abs(val)); return Math.floor(val); } const normalizedTranslate = normalize(translate); const normalizedSnapGrid = snapGrid.map(val => normalize(val)); let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; if (typeof prevSnap === 'undefined' && params.cssMode) { let prevSnapIndex; snapGrid.forEach((snap, snapIndex) => { if (normalizedTranslate >= snap) { // prevSnap = snap; prevSnapIndex = snapIndex; } }); if (typeof prevSnapIndex !== 'undefined') { prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; } } let prevIndex = 0; if (typeof prevSnap !== 'undefined') { prevIndex = slidesGrid.indexOf(prevSnap); if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; prevIndex = Math.max(prevIndex, 0); } } return swiper.slideTo(prevIndex, speed, runCallbacks, internal); } /* eslint no-unused-vars: "off" */ function slideReset(speed = this.params.speed, runCallbacks = true, internal) { const swiper = this; return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); } /* eslint no-unused-vars: "off" */ function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) { const swiper = this; let index = swiper.activeIndex; const skip = Math.min(swiper.params.slidesPerGroupSkip, index); const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; if (translate >= swiper.snapGrid[snapIndex]) { // The current translate is on or after the current snap index, so the choice // is between the current index and the one after it. const currentSnap = swiper.snapGrid[snapIndex]; const nextSnap = swiper.snapGrid[snapIndex + 1]; if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { index += swiper.params.slidesPerGroup; } } else { // The current translate is before the current snap index, so the choice // is between the current index and the one before it. const prevSnap = swiper.snapGrid[snapIndex - 1]; const currentSnap = swiper.snapGrid[snapIndex]; if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { index -= swiper.params.slidesPerGroup; } } index = Math.max(index, 0); index = Math.min(index, swiper.slidesGrid.length - 1); return swiper.slideTo(index, speed, runCallbacks, internal); } function slideToClickedSlide() { const swiper = this; const { params, $wrapperEl } = swiper; const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; let slideToIndex = swiper.clickedIndex; let realIndex; if (params.loop) { if (swiper.animating) return; realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); if (params.centeredSlides) { if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { swiper.loopFix(); slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); nextTick(() => { swiper.slideTo(slideToIndex); }); } else { swiper.slideTo(slideToIndex); } } else if (slideToIndex > swiper.slides.length - slidesPerView) { swiper.loopFix(); slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); nextTick(() => { swiper.slideTo(slideToIndex); }); } else { swiper.slideTo(slideToIndex); } } else { swiper.slideTo(slideToIndex); } } var slide = { slideTo, slideToLoop, slideNext, slidePrev, slideReset, slideToClosest, slideToClickedSlide }; function loopCreate() { const swiper = this; const document = getDocument(); const { params, $wrapperEl } = swiper; // Remove duplicated slides const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl; $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove(); let slides = $selector.children(`.${params.slideClass}`); if (params.loopFillGroupWithBlank) { const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup; if (blankSlidesNum !== params.slidesPerGroup) { for (let i = 0; i < blankSlidesNum; i += 1) { const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`); $selector.append(blankNode); } slides = $selector.children(`.${params.slideClass}`); } } if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); swiper.loopedSlides += params.loopAdditionalSlides; if (swiper.loopedSlides > slides.length) { swiper.loopedSlides = slides.length; } const prependSlides = []; const appendSlides = []; slides.each((el, index) => { const slide = $(el); if (index < swiper.loopedSlides) { appendSlides.push(el); } if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); } slide.attr('data-swiper-slide-index', index); }); for (let i = 0; i < appendSlides.length; i += 1) { $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); } for (let i = prependSlides.length - 1; i >= 0; i -= 1) { $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); } } function loopFix() { const swiper = this; swiper.emit('beforeLoopFix'); const { activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl } = swiper; let newIndex; swiper.allowSlidePrev = true; swiper.allowSlideNext = true; const snapTranslate = -snapGrid[activeIndex]; const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding if (activeIndex < loopedSlides) { newIndex = slides.length - loopedSlides * 3 + activeIndex; newIndex += loopedSlides; const slideChanged = swiper.slideTo(newIndex, 0, false, true); if (slideChanged && diff !== 0) { swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); } } else if (activeIndex >= slides.length - loopedSlides) { // Fix For Positive Oversliding newIndex = -slides.length + activeIndex + loopedSlides; newIndex += loopedSlides; const slideChanged = swiper.slideTo(newIndex, 0, false, true); if (slideChanged && diff !== 0) { swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); } } swiper.allowSlidePrev = allowSlidePrev; swiper.allowSlideNext = allowSlideNext; swiper.emit('loopFix'); } function loopDestroy() { const swiper = this; const { $wrapperEl, params, slides } = swiper; $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove(); slides.removeAttr('data-swiper-slide-index'); } var loop = { loopCreate, loopFix, loopDestroy }; function setGrabCursor(moving) { const swiper = this; if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; el.style.cursor = 'move'; el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; el.style.cursor = moving ? 'grabbing' : 'grab'; } function unsetGrabCursor() { const swiper = this; if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { return; } swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; } var grabCursor = { setGrabCursor, unsetGrabCursor }; function closestElement(selector, base = this) { function __closestFrom(el) { if (!el || el === getDocument() || el === getWindow()) return null; if (el.assignedSlot) el = el.assignedSlot; const found = el.closest(selector); return found || __closestFrom(el.getRootNode().host); } return __closestFrom(base); } function onTouchStart(event) { const swiper = this; const document = getDocument(); const window = getWindow(); const data = swiper.touchEventsData; const { params, touches, enabled } = swiper; if (!enabled) return; if (swiper.animating && params.preventInteractionOnTransition) { return; } if (!swiper.animating && params.cssMode && params.loop) { swiper.loopFix(); } let e = event; if (e.originalEvent) e = e.originalEvent; let $targetEl = $(e.target); if (params.touchEventsTarget === 'wrapper') { if (!$targetEl.closest(swiper.wrapperEl).length) return; } data.isTouchEvent = e.type === 'touchstart'; if (!data.isTouchEvent && 'which' in e && e.which === 3) return; if (!data.isTouchEvent && 'button' in e && e.button > 0) return; if (data.isTouched && data.isMoved) return; // change target el for shadow root component const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; if (swipingClassHasValue && e.target && e.target.shadowRoot && event.path && event.path[0]) { $targetEl = $(event.path[0]); } const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, e.target) : $targetEl.closest(noSwipingSelector)[0])) { swiper.allowClick = true; return; } if (params.swipeHandler) { if (!$targetEl.closest(params.swipeHandler)[0]) return; } touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; const startX = touches.currentX; const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { if (edgeSwipeDetection === 'prevent') { event.preventDefault(); } else { return; } } Object.assign(data, { isTouched: true, isMoved: false, allowTouchCallbacks: true, isScrolling: undefined, startMoving: undefined }); touches.startX = startX; touches.startY = startY; data.touchStartTime = now(); swiper.allowClick = true; swiper.updateSize(); swiper.swipeDirection = undefined; if (params.threshold > 0) data.allowThresholdMove = false; if (e.type !== 'touchstart') { let preventDefault = true; if ($targetEl.is(data.focusableElements)) preventDefault = false; if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) { document.activeElement.blur(); } const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) { e.preventDefault(); } } swiper.emit('touchStart', e); } function onTouchMove(event) { const document = getDocument(); const swiper = this; const data = swiper.touchEventsData; const { params, touches, rtlTranslate: rtl, enabled } = swiper; if (!enabled) return; let e = event; if (e.originalEvent) e = e.originalEvent; if (!data.isTouched) { if (data.startMoving && data.isScrolling) { swiper.emit('touchMoveOpposite', e); } return; } if (data.isTouchEvent && e.type !== 'touchmove') return; const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; if (e.preventedByNestedSwiper) { touches.startX = pageX; touches.startY = pageY; return; } if (!swiper.allowTouchMove) { // isMoved = true; swiper.allowClick = false; if (data.isTouched) { Object.assign(touches, { startX: pageX, startY: pageY, currentX: pageX, currentY: pageY }); data.touchStartTime = now(); } return; } if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { if (swiper.isVertical()) { // Vertical if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { data.isTouched = false; data.isMoved = false; return; } } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { return; } } if (data.isTouchEvent && document.activeElement) { if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) { data.isMoved = true; swiper.allowClick = false; return; } } if (data.allowTouchCallbacks) { swiper.emit('touchMove', e); } if (e.targetTouches && e.targetTouches.length > 1) return; touches.currentX = pageX; touches.currentY = pageY; const diffX = touches.currentX - touches.startX; const diffY = touches.currentY - touches.startY; if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; if (typeof data.isScrolling === 'undefined') { let touchAngle; if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { data.isScrolling = false; } else { // eslint-disable-next-line if (diffX * diffX + diffY * diffY >= 25) { touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; } } } if (data.isScrolling) { swiper.emit('touchMoveOpposite', e); } if (typeof data.startMoving === 'undefined') { if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { data.startMoving = true; } } if (data.isScrolling) { data.isTouched = false; return; } if (!data.startMoving) { return; } swiper.allowClick = false; if (!params.cssMode && e.cancelable) { e.preventDefault(); } if (params.touchMoveStopPropagation && !params.nested) { e.stopPropagation(); } if (!data.isMoved) { if (params.loop && !params.cssMode) { swiper.loopFix(); } data.startTranslate = swiper.getTranslate(); swiper.setTransition(0); if (swiper.animating) { swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); } data.allowMomentumBounce = false; // Grab Cursor if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { swiper.setGrabCursor(true); } swiper.emit('sliderFirstMove', e); } swiper.emit('sliderMove', e); data.isMoved = true; let diff = swiper.isHorizontal() ? diffX : diffY; touches.diff = diff; diff *= params.touchRatio; if (rtl) diff = -diff; swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; data.currentTranslate = diff + data.startTranslate; let disableParentSwiper = true; let resistanceRatio = params.resistanceRatio; if (params.touchReleaseOnEdges) { resistanceRatio = 0; } if (diff > 0 && data.currentTranslate > swiper.minTranslate()) { disableParentSwiper = false; if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { disableParentSwiper = false; if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; } if (disableParentSwiper) { e.preventedByNestedSwiper = true; } // Directions locks if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { data.currentTranslate = data.startTranslate; } if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { data.currentTranslate = data.startTranslate; } if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { data.currentTranslate = data.startTranslate; } // Threshold if (params.threshold > 0) { if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { if (!data.allowThresholdMove) { data.allowThresholdMove = true; touches.startX = touches.currentX; touches.startY = touches.currentY; data.currentTranslate = data.startTranslate; touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; return; } } else { data.currentTranslate = data.startTranslate; return; } } if (!params.followFinger || params.cssMode) return; // Update active index in free mode if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) { swiper.freeMode.onTouchMove(); } // Update progress swiper.updateProgress(data.currentTranslate); // Update translate swiper.setTranslate(data.currentTranslate); } function onTouchEnd(event) { const swiper = this; const data = swiper.touchEventsData; const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper; if (!enabled) return; let e = event; if (e.originalEvent) e = e.originalEvent; if (data.allowTouchCallbacks) { swiper.emit('touchEnd', e); } data.allowTouchCallbacks = false; if (!data.isTouched) { if (data.isMoved && params.grabCursor) { swiper.setGrabCursor(false); } data.isMoved = false; data.startMoving = false; return; } // Return Grab Cursor if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { swiper.setGrabCursor(false); } // Time diff const touchEndTime = now(); const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click if (swiper.allowClick) { const pathTree = e.path || e.composedPath && e.composedPath(); swiper.updateClickedSlide(pathTree && pathTree[0] || e.target); swiper.emit('tap click', e); if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { swiper.emit('doubleTap doubleClick', e); } } data.lastClickTime = now(); nextTick(() => { if (!swiper.destroyed) swiper.allowClick = true; }); if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { data.isTouched = false; data.isMoved = false; data.startMoving = false; return; } data.isTouched = false; data.isMoved = false; data.startMoving = false; let currentPos; if (params.followFinger) { currentPos = rtl ? swiper.translate : -swiper.translate; } else { currentPos = -data.currentTranslate; } if (params.cssMode) { return; } if (swiper.params.freeMode && params.freeMode.enabled) { swiper.freeMode.onTouchEnd({ currentPos }); return; } // Find current slide let stopIndex = 0; let groupSize = swiper.slidesSizesGrid[0]; for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; if (typeof slidesGrid[i + increment] !== 'undefined') { if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { stopIndex = i; groupSize = slidesGrid[i + increment] - slidesGrid[i]; } } else if (currentPos >= slidesGrid[i]) { stopIndex = i; groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; } } // Find current slide size const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; if (timeDiff > params.longSwipesMs) { // Long touches if (!params.longSwipes) { swiper.slideTo(swiper.activeIndex); return; } if (swiper.swipeDirection === 'next') { if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); } if (swiper.swipeDirection === 'prev') { if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex); } } else { // Short swipes if (!params.shortSwipes) { swiper.slideTo(swiper.activeIndex); return; } const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); if (!isNavButtonTarget) { if (swiper.swipeDirection === 'next') { swiper.slideTo(stopIndex + increment); } if (swiper.swipeDirection === 'prev') { swiper.slideTo(stopIndex); } } else if (e.target === swiper.navigation.nextEl) { swiper.slideTo(stopIndex + increment); } else { swiper.slideTo(stopIndex); } } } function onResize() { const swiper = this; const { params, el } = swiper; if (el && el.offsetWidth === 0) return; // Breakpoints if (params.breakpoints) { swiper.setBreakpoint(); } // Save locks const { allowSlideNext, allowSlidePrev, snapGrid } = swiper; // Disable locks on resize swiper.allowSlideNext = true; swiper.allowSlidePrev = true; swiper.updateSize(); swiper.updateSlides(); swiper.updateSlidesClasses(); if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { swiper.slideTo(swiper.slides.length - 1, 0, false, true); } else { swiper.slideTo(swiper.activeIndex, 0, false, true); } if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { swiper.autoplay.run(); } // Return locks after resize swiper.allowSlidePrev = allowSlidePrev; swiper.allowSlideNext = allowSlideNext; if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { swiper.checkOverflow(); } } function onClick(e) { const swiper = this; if (!swiper.enabled) return; if (!swiper.allowClick) { if (swiper.params.preventClicks) e.preventDefault(); if (swiper.params.preventClicksPropagation && swiper.animating) { e.stopPropagation(); e.stopImmediatePropagation(); } } } function onScroll() { const swiper = this; const { wrapperEl, rtlTranslate, enabled } = swiper; if (!enabled) return; swiper.previousTranslate = swiper.translate; if (swiper.isHorizontal()) { swiper.translate = -wrapperEl.scrollLeft; } else { swiper.translate = -wrapperEl.scrollTop; } // eslint-disable-next-line if (swiper.translate === -0) swiper.translate = 0; swiper.updateActiveIndex(); swiper.updateSlidesClasses(); let newProgress; const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); if (translatesDiff === 0) { newProgress = 0; } else { newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; } if (newProgress !== swiper.progress) { swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); } swiper.emit('setTranslate', swiper.translate, false); } let dummyEventAttached = false; function dummyEventListener() {} const events = (swiper, method) => { const document = getDocument(); const { params, touchEvents, el, wrapperEl, device, support } = swiper; const capture = !!params.nested; const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; const swiperMethod = method; // Touch Events if (!support.touch) { el[domMethod](touchEvents.start, swiper.onTouchStart, false); document[domMethod](touchEvents.move, swiper.onTouchMove, capture); document[domMethod](touchEvents.end, swiper.onTouchEnd, false); } else { const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener); el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? { passive: false, capture } : capture); el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener); if (touchEvents.cancel) { el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener); } } // Prevent Links Clicks if (params.preventClicks || params.preventClicksPropagation) { el[domMethod]('click', swiper.onClick, true); } if (params.cssMode) { wrapperEl[domMethod]('scroll', swiper.onScroll); } // Resize handler if (params.updateOnWindowResize) { swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); } else { swiper[swiperMethod]('observerUpdate', onResize, true); } }; function attachEvents() { const swiper = this; const document = getDocument(); const { params, support } = swiper; swiper.onTouchStart = onTouchStart.bind(swiper); swiper.onTouchMove = onTouchMove.bind(swiper); swiper.onTouchEnd = onTouchEnd.bind(swiper); if (params.cssMode) { swiper.onScroll = onScroll.bind(swiper); } swiper.onClick = onClick.bind(swiper); if (support.touch && !dummyEventAttached) { document.addEventListener('touchstart', dummyEventListener); dummyEventAttached = true; } events(swiper, 'on'); } function detachEvents() { const swiper = this; events(swiper, 'off'); } var events$1 = { attachEvents, detachEvents }; const isGridEnabled = (swiper, params) => { return swiper.grid && params.grid && params.grid.rows > 1; }; function setBreakpoint() { const swiper = this; const { activeIndex, initialized, loopedSlides = 0, params, $el } = swiper; const breakpoints = params.breakpoints; if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; const breakpointParams = breakpointOnlyParams || swiper.originalParams; const wasMultiRow = isGridEnabled(swiper, params); const isMultiRow = isGridEnabled(swiper, breakpointParams); const wasEnabled = params.enabled; if (wasMultiRow && !isMultiRow) { $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`); swiper.emitContainerClasses(); } else if (!wasMultiRow && isMultiRow) { $el.addClass(`${params.containerModifierClass}grid`); if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { $el.addClass(`${params.containerModifierClass}grid-column`); } swiper.emitContainerClasses(); } const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); if (directionChanged && initialized) { swiper.changeDirection(); } extend(swiper.params, breakpointParams); const isEnabled = swiper.params.enabled; Object.assign(swiper, { allowTouchMove: swiper.params.allowTouchMove, allowSlideNext: swiper.params.allowSlideNext, allowSlidePrev: swiper.params.allowSlidePrev }); if (wasEnabled && !isEnabled) { swiper.disable(); } else if (!wasEnabled && isEnabled) { swiper.enable(); } swiper.currentBreakpoint = breakpoint; swiper.emit('_beforeBreakpoint', breakpointParams); if (needsReLoop && initialized) { swiper.loopDestroy(); swiper.loopCreate(); swiper.updateSlides(); swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false); } swiper.emit('breakpoint', breakpointParams); } function getBreakpoint(breakpoints, base = 'window', containerEl) { if (!breakpoints || base === 'container' && !containerEl) return undefined; let breakpoint = false; const window = getWindow(); const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; const points = Object.keys(breakpoints).map(point => { if (typeof point === 'string' && point.indexOf('@') === 0) { const minRatio = parseFloat(point.substr(1)); const value = currentHeight * minRatio; return { value, point }; } return { value: point, point }; }); points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); for (let i = 0; i < points.length; i += 1) { const { point, value } = points[i]; if (base === 'window') { if (window.matchMedia(`(min-width: ${value}px)`).matches) { breakpoint = point; } } else if (value <= containerEl.clientWidth) { breakpoint = point; } } return breakpoint || 'max'; } var breakpoints = { setBreakpoint, getBreakpoint }; function prepareClasses(entries, prefix) { const resultClasses = []; entries.forEach(item => { if (typeof item === 'object') { Object.keys(item).forEach(classNames => { if (item[classNames]) { resultClasses.push(prefix + classNames); } }); } else if (typeof item === 'string') { resultClasses.push(prefix + item); } }); return resultClasses; } function addClasses() { const swiper = this; const { classNames, params, rtl, $el, device, support } = swiper; // prettier-ignore const suffixes = prepareClasses(['initialized', params.direction, { 'pointer-events': !support.touch }, { 'free-mode': swiper.params.freeMode && params.freeMode.enabled }, { 'autoheight': params.autoHeight }, { 'rtl': rtl }, { 'grid': params.grid && params.grid.rows > 1 }, { 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' }, { 'android': device.android }, { 'ios': device.ios }, { 'css-mode': params.cssMode }, { 'centered': params.cssMode && params.centeredSlides }], params.containerModifierClass); classNames.push(...suffixes); $el.addClass([...classNames].join(' ')); swiper.emitContainerClasses(); } function removeClasses() { const swiper = this; const { $el, classNames } = swiper; $el.removeClass(classNames.join(' ')); swiper.emitContainerClasses(); } var classes = { addClasses, removeClasses }; function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) { const window = getWindow(); let image; function onReady() { if (callback) callback(); } const isPicture = $(imageEl).parent('picture')[0]; if (!isPicture && (!imageEl.complete || !checkForComplete)) { if (src) { image = new window.Image(); image.onload = onReady; image.onerror = onReady; if (sizes) { image.sizes = sizes; } if (srcset) { image.srcset = srcset; } if (src) { image.src = src; } } else { onReady(); } } else { // image already loaded... onReady(); } } function preloadImages() { const swiper = this; swiper.imagesToLoad = swiper.$el.find('img'); function onReady() { if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; if (swiper.imagesLoaded === swiper.imagesToLoad.length) { if (swiper.params.updateOnImagesReady) swiper.update(); swiper.emit('imagesReady'); } } for (let i = 0; i < swiper.imagesToLoad.length; i += 1) { const imageEl = swiper.imagesToLoad[i]; swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady); } } var images = { loadImage, preloadImages }; function checkOverflow() { const swiper = this; const { isLocked: wasLocked, params } = swiper; const { slidesOffsetBefore } = params; if (slidesOffsetBefore) { const lastSlideIndex = swiper.slides.length - 1; const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; swiper.isLocked = swiper.size > lastSlideRightEdge; } else { swiper.isLocked = swiper.snapGrid.length === 1; } if (params.allowSlideNext === true) { swiper.allowSlideNext = !swiper.isLocked; } if (params.allowSlidePrev === true) { swiper.allowSlidePrev = !swiper.isLocked; } if (wasLocked && wasLocked !== swiper.isLocked) { swiper.isEnd = false; } if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); } } var checkOverflow$1 = { checkOverflow }; var defaults = { init: true, direction: 'horizontal', touchEventsTarget: 'wrapper', initialSlide: 0, speed: 300, cssMode: false, updateOnWindowResize: true, resizeObserver: true, nested: false, createElements: false, enabled: true, focusableElements: 'input, select, option, textarea, button, video, label', // Overrides width: null, height: null, // preventInteractionOnTransition: false, // ssr userAgent: null, url: null, // To support iOS's swipe-to-go-back gesture (when being used in-app). edgeSwipeDetection: false, edgeSwipeThreshold: 20, // Autoheight autoHeight: false, // Set wrapper width setWrapperSize: false, // Virtual Translate virtualTranslate: false, // Effects effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' // Breakpoints breakpoints: undefined, breakpointsBase: 'window', // Slides grid spaceBetween: 0, slidesPerView: 1, slidesPerGroup: 1, slidesPerGroupSkip: 0, slidesPerGroupAuto: false, centeredSlides: false, centeredSlidesBounds: false, slidesOffsetBefore: 0, // in px slidesOffsetAfter: 0, // in px normalizeSlideIndex: true, centerInsufficientSlides: false, // Disable swiper and hide navigation when container not overflow watchOverflow: true, // Round length roundLengths: false, // Touches touchRatio: 1, touchAngle: 45, simulateTouch: true, shortSwipes: true, longSwipes: true, longSwipesRatio: 0.5, longSwipesMs: 300, followFinger: true, allowTouchMove: true, threshold: 0, touchMoveStopPropagation: false, touchStartPreventDefault: true, touchStartForcePreventDefault: false, touchReleaseOnEdges: false, // Unique Navigation Elements uniqueNavElements: true, // Resistance resistance: true, resistanceRatio: 0.85, // Progress watchSlidesProgress: false, // Cursor grabCursor: false, // Clicks preventClicks: true, preventClicksPropagation: true, slideToClickedSlide: false, // Images preloadImages: true, updateOnImagesReady: true, // loop loop: false, loopAdditionalSlides: 0, loopedSlides: null, loopFillGroupWithBlank: false, loopPreventsSlide: true, // Swiping/no swiping allowSlidePrev: true, allowSlideNext: true, swipeHandler: null, // '.swipe-handler', noSwiping: true, noSwipingClass: 'swiper-no-swiping', noSwipingSelector: null, // Passive Listeners passiveListeners: true, // NS containerModifierClass: 'swiper-', // NEW slideClass: 'swiper-slide', slideBlankClass: 'swiper-slide-invisible-blank', slideActiveClass: 'swiper-slide-active', slideDuplicateActiveClass: 'swiper-slide-duplicate-active', slideVisibleClass: 'swiper-slide-visible', slideDuplicateClass: 'swiper-slide-duplicate', slideNextClass: 'swiper-slide-next', slideDuplicateNextClass: 'swiper-slide-duplicate-next', slidePrevClass: 'swiper-slide-prev', slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', wrapperClass: 'swiper-wrapper', // Callbacks runCallbacksOnInit: true, // Internals _emitClasses: false }; function moduleExtendParams(params, allModulesParams) { return function extendParams(obj = {}) { const moduleParamName = Object.keys(obj)[0]; const moduleParams = obj[moduleParamName]; if (typeof moduleParams !== 'object' || moduleParams === null) { extend(allModulesParams, obj); return; } if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) { params[moduleParamName] = { auto: true }; } if (!(moduleParamName in params && 'enabled' in moduleParams)) { extend(allModulesParams, obj); return; } if (params[moduleParamName] === true) { params[moduleParamName] = { enabled: true }; } if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { params[moduleParamName].enabled = true; } if (!params[moduleParamName]) params[moduleParamName] = { enabled: false }; extend(allModulesParams, obj); }; } /* eslint no-param-reassign: "off" */ const prototypes = { eventsEmitter, update, translate, transition, slide, loop, grabCursor, events: events$1, breakpoints, checkOverflow: checkOverflow$1, classes, images }; const extendedDefaults = {}; class Swiper { constructor(...args) { let el; let params; if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { params = args[0]; } else { [el, params] = args; } if (!params) params = {}; params = extend({}, params); if (el && !params.el) params.el = el; if (params.el && $(params.el).length > 1) { const swipers = []; $(params.el).each(containerEl => { const newParams = extend({}, params, { el: containerEl }); swipers.push(new Swiper(newParams)); }); return swipers; } // Swiper Instance const swiper = this; swiper.__swiper__ = true; swiper.support = getSupport(); swiper.device = getDevice({ userAgent: params.userAgent }); swiper.browser = getBrowser(); swiper.eventsListeners = {}; swiper.eventsAnyListeners = []; swiper.modules = [...swiper.__modules__]; if (params.modules && Array.isArray(params.modules)) { swiper.modules.push(...params.modules); } const allModulesParams = {}; swiper.modules.forEach(mod => { mod({ swiper, extendParams: moduleExtendParams(params, allModulesParams), on: swiper.on.bind(swiper), once: swiper.once.bind(swiper), off: swiper.off.bind(swiper), emit: swiper.emit.bind(swiper) }); }); // Extend defaults with modules params const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params swiper.params = extend({}, swiperParams, extendedDefaults, params); swiper.originalParams = extend({}, swiper.params); swiper.passedParams = extend({}, params); // add event listeners if (swiper.params && swiper.params.on) { Object.keys(swiper.params.on).forEach(eventName => { swiper.on(eventName, swiper.params.on[eventName]); }); } if (swiper.params && swiper.params.onAny) { swiper.onAny(swiper.params.onAny); } // Save Dom lib swiper.$ = $; // Extend Swiper Object.assign(swiper, { enabled: swiper.params.enabled, el, // Classes classNames: [], // Slides slides: $(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], // isDirection isHorizontal() { return swiper.params.direction === 'horizontal'; }, isVertical() { return swiper.params.direction === 'vertical'; }, // Indexes activeIndex: 0, realIndex: 0, // isBeginning: true, isEnd: false, // Props translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: false, // Locks allowSlideNext: swiper.params.allowSlideNext, allowSlidePrev: swiper.params.allowSlidePrev, // Touch Events touchEvents: function touchEvents() { const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; const desktop = ['pointerdown', 'pointermove', 'pointerup']; swiper.touchEventsTouch = { start: touch[0], move: touch[1], end: touch[2], cancel: touch[3] }; swiper.touchEventsDesktop = { start: desktop[0], move: desktop[1], end: desktop[2] }; return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; }(), touchEventsData: { isTouched: undefined, isMoved: undefined, allowTouchCallbacks: undefined, touchStartTime: undefined, isScrolling: undefined, currentTranslate: undefined, startTranslate: undefined, allowThresholdMove: undefined, // Form elements to match focusableElements: swiper.params.focusableElements, // Last click time lastClickTime: now(), clickTimeout: undefined, // Velocities velocities: [], allowMomentumBounce: undefined, isTouchEvent: undefined, startMoving: undefined }, // Clicks allowClick: true, // Touches allowTouchMove: swiper.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, // Images imagesToLoad: [], imagesLoaded: 0 }); swiper.emit('_swiper'); // Init if (swiper.params.init) { swiper.init(); } // Return app instance return swiper; } enable() { const swiper = this; if (swiper.enabled) return; swiper.enabled = true; if (swiper.params.grabCursor) { swiper.setGrabCursor(); } swiper.emit('enable'); } disable() { const swiper = this; if (!swiper.enabled) return; swiper.enabled = false; if (swiper.params.grabCursor) { swiper.unsetGrabCursor(); } swiper.emit('disable'); } setProgress(progress, speed) { const swiper = this; progress = Math.min(Math.max(progress, 0), 1); const min = swiper.minTranslate(); const max = swiper.maxTranslate(); const current = (max - min) * progress + min; swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } emitContainerClasses() { const swiper = this; if (!swiper.params._emitClasses || !swiper.el) return; const cls = swiper.el.className.split(' ').filter(className => { return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; }); swiper.emit('_containerClasses', cls.join(' ')); } getSlideClasses(slideEl) { const swiper = this; return slideEl.className.split(' ').filter(className => { return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; }).join(' '); } emitSlidesClasses() { const swiper = this; if (!swiper.params._emitClasses || !swiper.el) return; const updates = []; swiper.slides.each(slideEl => { const classNames = swiper.getSlideClasses(slideEl); updates.push({ slideEl, classNames }); swiper.emit('_slideClass', slideEl, classNames); }); swiper.emit('_slideClasses', updates); } slidesPerViewDynamic(view = 'current', exact = false) { const swiper = this; const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = swiper; let spv = 1; if (params.centeredSlides) { let slideSize = slides[activeIndex].swiperSlideSize; let breakLoop; for (let i = activeIndex + 1; i < slides.length; i += 1) { if (slides[i] && !breakLoop) { slideSize += slides[i].swiperSlideSize; spv += 1; if (slideSize > swiperSize) breakLoop = true; } } for (let i = activeIndex - 1; i >= 0; i -= 1) { if (slides[i] && !breakLoop) { slideSize += slides[i].swiperSlideSize; spv += 1; if (slideSize > swiperSize) breakLoop = true; } } } else { // eslint-disable-next-line if (view === 'current') { for (let i = activeIndex + 1; i < slides.length; i += 1) { const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; if (slideInView) { spv += 1; } } } else { // previous for (let i = activeIndex - 1; i >= 0; i -= 1) { const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; if (slideInView) { spv += 1; } } } } return spv; } update() { const swiper = this; if (!swiper || swiper.destroyed) return; const { snapGrid, params } = swiper; // Breakpoints if (params.breakpoints) { swiper.setBreakpoint(); } swiper.updateSize(); swiper.updateSlides(); swiper.updateProgress(); swiper.updateSlidesClasses(); function setTranslate() { const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); swiper.setTranslate(newTranslate); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } let translated; if (swiper.params.freeMode && swiper.params.freeMode.enabled) { setTranslate(); if (swiper.params.autoHeight) { swiper.updateAutoHeight(); } } else { if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); } else { translated = swiper.slideTo(swiper.activeIndex, 0, false, true); } if (!translated) { setTranslate(); } } if (params.watchOverflow && snapGrid !== swiper.snapGrid) { swiper.checkOverflow(); } swiper.emit('update'); } changeDirection(newDirection, needUpdate = true) { const swiper = this; const currentDirection = swiper.params.direction; if (!newDirection) { // eslint-disable-next-line newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; } if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { return swiper; } swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`); swiper.emitContainerClasses(); swiper.params.direction = newDirection; swiper.slides.each(slideEl => { if (newDirection === 'vertical') { slideEl.style.width = ''; } else { slideEl.style.height = ''; } }); swiper.emit('changeDirection'); if (needUpdate) swiper.update(); return swiper; } mount(el) { const swiper = this; if (swiper.mounted) return true; // Find el const $el = $(el || swiper.params.el); el = $el[0]; if (!el) { return false; } el.swiper = swiper; const getWrapperSelector = () => { return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; }; const getWrapper = () => { if (el && el.shadowRoot && el.shadowRoot.querySelector) { const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items res.children = options => $el.children(options); return res; } return $el.children(getWrapperSelector()); }; // Find Wrapper let $wrapperEl = getWrapper(); if ($wrapperEl.length === 0 && swiper.params.createElements) { const document = getDocument(); const wrapper = document.createElement('div'); $wrapperEl = $(wrapper); wrapper.className = swiper.params.wrapperClass; $el.append(wrapper); $el.children(`.${swiper.params.slideClass}`).each(slideEl => { $wrapperEl.append(slideEl); }); } Object.assign(swiper, { $el, el, $wrapperEl, wrapperEl: $wrapperEl[0], mounted: true, // RTL rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), wrongRTL: $wrapperEl.css('display') === '-webkit-box' }); return true; } init(el) { const swiper = this; if (swiper.initialized) return swiper; const mounted = swiper.mount(el); if (mounted === false) return swiper; swiper.emit('beforeInit'); // Set breakpoint if (swiper.params.breakpoints) { swiper.setBreakpoint(); } // Add Classes swiper.addClasses(); // Create loop if (swiper.params.loop) { swiper.loopCreate(); } // Update size swiper.updateSize(); // Update slides swiper.updateSlides(); if (swiper.params.watchOverflow) { swiper.checkOverflow(); } // Set Grab Cursor if (swiper.params.grabCursor && swiper.enabled) { swiper.setGrabCursor(); } if (swiper.params.preloadImages) { swiper.preloadImages(); } // Slide To Initial Slide if (swiper.params.loop) { swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true); } else { swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); } // Attach events swiper.attachEvents(); // Init Flag swiper.initialized = true; // Emit swiper.emit('init'); swiper.emit('afterInit'); return swiper; } destroy(deleteInstance = true, cleanStyles = true) { const swiper = this; const { params, $el, $wrapperEl, slides } = swiper; if (typeof swiper.params === 'undefined' || swiper.destroyed) { return null; } swiper.emit('beforeDestroy'); // Init Flag swiper.initialized = false; // Detach events swiper.detachEvents(); // Destroy loop if (params.loop) { swiper.loopDestroy(); } // Cleanup styles if (cleanStyles) { swiper.removeClasses(); $el.removeAttr('style'); $wrapperEl.removeAttr('style'); if (slides && slides.length) { slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); } } swiper.emit('destroy'); // Detach emitter events Object.keys(swiper.eventsListeners).forEach(eventName => { swiper.off(eventName); }); if (deleteInstance !== false) { swiper.$el[0].swiper = null; deleteProps(swiper); } swiper.destroyed = true; return null; } static extendDefaults(newDefaults) { extend(extendedDefaults, newDefaults); } static get extendedDefaults() { return extendedDefaults; } static get defaults() { return defaults; } static installModule(mod) { if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; const modules = Swiper.prototype.__modules__; if (typeof mod === 'function' && modules.indexOf(mod) < 0) { modules.push(mod); } } static use(module) { if (Array.isArray(module)) { module.forEach(m => Swiper.installModule(m)); return Swiper; } Swiper.installModule(module); return Swiper; } } Object.keys(prototypes).forEach(prototypeGroup => { Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; }); }); Swiper.use([Resize, Observer]); function Virtual({ swiper, extendParams, on }) { extendParams({ virtual: { enabled: false, slides: [], cache: true, renderSlide: null, renderExternal: null, renderExternalUpdate: true, addSlidesBefore: 0, addSlidesAfter: 0 } }); let cssModeTimeout; swiper.virtual = { cache: {}, from: undefined, to: undefined, slides: [], offset: 0, slidesGrid: [] }; function renderSlide(slide, index) { const params = swiper.params.virtual; if (params.cache && swiper.virtual.cache[index]) { return swiper.virtual.cache[index]; } const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`
${slide}
`); if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); if (params.cache) swiper.virtual.cache[index] = $slideEl; return $slideEl; } function update(force) { const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params; const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual; const { from: previousFrom, to: previousTo, slides, slidesGrid: previousSlidesGrid, offset: previousOffset } = swiper.virtual; if (!swiper.params.cssMode) { swiper.updateActiveIndex(); } const activeIndex = swiper.activeIndex || 0; let offsetProp; if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; let slidesAfter; let slidesBefore; if (centeredSlides) { slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; } else { slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; slidesBefore = slidesPerGroup + addSlidesBefore; } const from = Math.max((activeIndex || 0) - slidesBefore, 0); const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); Object.assign(swiper.virtual, { from, to, offset, slidesGrid: swiper.slidesGrid }); function onRendered() { swiper.updateSlides(); swiper.updateProgress(); swiper.updateSlidesClasses(); if (swiper.lazy && swiper.params.lazy.enabled) { swiper.lazy.load(); } } if (previousFrom === from && previousTo === to && !force) { if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { swiper.slides.css(offsetProp, `${offset}px`); } swiper.updateProgress(); return; } if (swiper.params.virtual.renderExternal) { swiper.params.virtual.renderExternal.call(swiper, { offset, from, to, slides: function getSlides() { const slidesToRender = []; for (let i = from; i <= to; i += 1) { slidesToRender.push(slides[i]); } return slidesToRender; }() }); if (swiper.params.virtual.renderExternalUpdate) { onRendered(); } return; } const prependIndexes = []; const appendIndexes = []; if (force) { swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove(); } else { for (let i = previousFrom; i <= previousTo; i += 1) { if (i < from || i > to) { swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove(); } } } for (let i = 0; i < slides.length; i += 1) { if (i >= from && i <= to) { if (typeof previousTo === 'undefined' || force) { appendIndexes.push(i); } else { if (i > previousTo) appendIndexes.push(i); if (i < previousFrom) prependIndexes.push(i); } } } appendIndexes.forEach(index => { swiper.$wrapperEl.append(renderSlide(slides[index], index)); }); prependIndexes.sort((a, b) => b - a).forEach(index => { swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); }); swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`); onRendered(); } function appendSlide(slides) { if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) swiper.virtual.slides.push(slides[i]); } } else { swiper.virtual.slides.push(slides); } update(true); } function prependSlide(slides) { const activeIndex = swiper.activeIndex; let newActiveIndex = activeIndex + 1; let numberOfNewSlides = 1; if (Array.isArray(slides)) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) swiper.virtual.slides.unshift(slides[i]); } newActiveIndex = activeIndex + slides.length; numberOfNewSlides = slides.length; } else { swiper.virtual.slides.unshift(slides); } if (swiper.params.virtual.cache) { const cache = swiper.virtual.cache; const newCache = {}; Object.keys(cache).forEach(cachedIndex => { const $cachedEl = cache[cachedIndex]; const cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); if (cachedElIndex) { $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides); } newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; }); swiper.virtual.cache = newCache; } update(true); swiper.slideTo(newActiveIndex, 0); } function removeSlide(slidesIndexes) { if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; let activeIndex = swiper.activeIndex; if (Array.isArray(slidesIndexes)) { for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { swiper.virtual.slides.splice(slidesIndexes[i], 1); if (swiper.params.virtual.cache) { delete swiper.virtual.cache[slidesIndexes[i]]; } if (slidesIndexes[i] < activeIndex) activeIndex -= 1; activeIndex = Math.max(activeIndex, 0); } } else { swiper.virtual.slides.splice(slidesIndexes, 1); if (swiper.params.virtual.cache) { delete swiper.virtual.cache[slidesIndexes]; } if (slidesIndexes < activeIndex) activeIndex -= 1; activeIndex = Math.max(activeIndex, 0); } update(true); swiper.slideTo(activeIndex, 0); } function removeAllSlides() { swiper.virtual.slides = []; if (swiper.params.virtual.cache) { swiper.virtual.cache = {}; } update(true); swiper.slideTo(0, 0); } on('beforeInit', () => { if (!swiper.params.virtual.enabled) return; swiper.virtual.slides = swiper.params.virtual.slides; swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); swiper.params.watchSlidesProgress = true; swiper.originalParams.watchSlidesProgress = true; if (!swiper.params.initialSlide) { update(); } }); on('setTranslate', () => { if (!swiper.params.virtual.enabled) return; if (swiper.params.cssMode && !swiper._immediateVirtual) { clearTimeout(cssModeTimeout); cssModeTimeout = setTimeout(() => { update(); }, 100); } else { update(); } }); on('init update resize', () => { if (!swiper.params.virtual.enabled) return; if (swiper.params.cssMode) { setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`); } }); Object.assign(swiper.virtual, { appendSlide, prependSlide, removeSlide, removeAllSlides, update }); } /* eslint-disable consistent-return */ function Keyboard({ swiper, extendParams, on, emit }) { const document = getDocument(); const window = getWindow(); swiper.keyboard = { enabled: false }; extendParams({ keyboard: { enabled: false, onlyInViewport: true, pageUpDown: true } }); function handle(event) { if (!swiper.enabled) return; const { rtlTranslate: rtl } = swiper; let e = event; if (e.originalEvent) e = e.originalEvent; // jquery fix const kc = e.keyCode || e.charCode; const pageUpDown = swiper.params.keyboard.pageUpDown; const isPageUp = pageUpDown && kc === 33; const isPageDown = pageUpDown && kc === 34; const isArrowLeft = kc === 37; const isArrowRight = kc === 39; const isArrowUp = kc === 38; const isArrowDown = kc === 40; // Directions locks if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { return false; } if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { return false; } if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { return undefined; } if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { return undefined; } if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { let inView = false; // Check that swiper should be inside of visible area of window if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) { return undefined; } const $el = swiper.$el; const swiperWidth = $el[0].clientWidth; const swiperHeight = $el[0].clientHeight; const windowWidth = window.innerWidth; const windowHeight = window.innerHeight; const swiperOffset = swiper.$el.offset(); if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; for (let i = 0; i < swiperCoord.length; i += 1) { const point = swiperCoord[i]; if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line inView = true; } } if (!inView) return undefined; } if (swiper.isHorizontal()) { if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { if (e.preventDefault) e.preventDefault();else e.returnValue = false; } if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); } else { if (isPageUp || isPageDown || isArrowUp || isArrowDown) { if (e.preventDefault) e.preventDefault();else e.returnValue = false; } if (isPageDown || isArrowDown) swiper.slideNext(); if (isPageUp || isArrowUp) swiper.slidePrev(); } emit('keyPress', kc); return undefined; } function enable() { if (swiper.keyboard.enabled) return; $(document).on('keydown', handle); swiper.keyboard.enabled = true; } function disable() { if (!swiper.keyboard.enabled) return; $(document).off('keydown', handle); swiper.keyboard.enabled = false; } on('init', () => { if (swiper.params.keyboard.enabled) { enable(); } }); on('destroy', () => { if (swiper.keyboard.enabled) { disable(); } }); Object.assign(swiper.keyboard, { enable, disable }); } /* eslint-disable consistent-return */ function Mousewheel({ swiper, extendParams, on, emit }) { const window = getWindow(); extendParams({ mousewheel: { enabled: false, releaseOnEdges: false, invert: false, forceToAxis: false, sensitivity: 1, eventsTarget: 'container', thresholdDelta: null, thresholdTime: null } }); swiper.mousewheel = { enabled: false }; let timeout; let lastScrollTime = now(); let lastEventBeforeSnap; const recentWheelEvents = []; function normalize(e) { // Reasonable defaults const PIXEL_STEP = 10; const LINE_HEIGHT = 40; const PAGE_HEIGHT = 800; let sX = 0; let sY = 0; // spinX, spinY let pX = 0; let pY = 0; // pixelX, pixelY // Legacy if ('detail' in e) { sY = e.detail; } if ('wheelDelta' in e) { sY = -e.wheelDelta / 120; } if ('wheelDeltaY' in e) { sY = -e.wheelDeltaY / 120; } if ('wheelDeltaX' in e) { sX = -e.wheelDeltaX / 120; } // side scrolling on FF with DOMMouseScroll if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { sX = sY; sY = 0; } pX = sX * PIXEL_STEP; pY = sY * PIXEL_STEP; if ('deltaY' in e) { pY = e.deltaY; } if ('deltaX' in e) { pX = e.deltaX; } if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll pX = pY; pY = 0; } if ((pX || pY) && e.deltaMode) { if (e.deltaMode === 1) { // delta in LINE units pX *= LINE_HEIGHT; pY *= LINE_HEIGHT; } else { // delta in PAGE units pX *= PAGE_HEIGHT; pY *= PAGE_HEIGHT; } } // Fall-back if spin cannot be determined if (pX && !sX) { sX = pX < 1 ? -1 : 1; } if (pY && !sY) { sY = pY < 1 ? -1 : 1; } return { spinX: sX, spinY: sY, pixelX: pX, pixelY: pY }; } function handleMouseEnter() { if (!swiper.enabled) return; swiper.mouseEntered = true; } function handleMouseLeave() { if (!swiper.enabled) return; swiper.mouseEntered = false; } function animateSlider(newEvent) { if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { // Prevent if delta of wheel scroll delta is below configured threshold return false; } if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { // Prevent if time between scrolls is below configured threshold return false; } // If the movement is NOT big enough and // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): // Don't go any further (avoid insignificant scroll movement). if (newEvent.delta >= 6 && now() - lastScrollTime < 60) { // Return false as a default return true; } // If user is scrolling towards the end: // If the slider hasn't hit the latest slide or // if the slider is a loop and // if the slider isn't moving right now: // Go to next slide and // emit a scroll event. // Else (the user is scrolling towards the beginning) and // if the slider hasn't hit the first slide or // if the slider is a loop and // if the slider isn't moving right now: // Go to prev slide and // emit a scroll event. if (newEvent.direction < 0) { if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { swiper.slideNext(); emit('scroll', newEvent.raw); } } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { swiper.slidePrev(); emit('scroll', newEvent.raw); } // If you got here is because an animation has been triggered so store the current time lastScrollTime = new window.Date().getTime(); // Return false as a default return false; } function releaseScroll(newEvent) { const params = swiper.params.mousewheel; if (newEvent.direction < 0) { if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { // Return true to animate scroll on edges return true; } } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { // Return true to animate scroll on edges return true; } return false; } function handle(event) { let e = event; let disableParentSwiper = true; if (!swiper.enabled) return; const params = swiper.params.mousewheel; if (swiper.params.cssMode) { e.preventDefault(); } let target = swiper.$el; if (swiper.params.mousewheel.eventsTarget !== 'container') { target = $(swiper.params.mousewheel.eventsTarget); } if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; if (e.originalEvent) e = e.originalEvent; // jquery fix let delta = 0; const rtlFactor = swiper.rtlTranslate ? -1 : 1; const data = normalize(e); if (params.forceToAxis) { if (swiper.isHorizontal()) { if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; } else { delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; } if (delta === 0) return true; if (params.invert) delta = -delta; // Get the scroll positions let positions = swiper.getTranslate() + delta * params.sensitivity; if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true: // the disableParentSwiper will be true. // When loop is false: // if the scroll positions is not on edge, // then the disableParentSwiper will be true. // if the scroll on edge positions, // then the disableParentSwiper will be false. disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { // Register the new event in a variable which stores the relevant data const newEvent = { time: now(), delta: Math.abs(delta), direction: Math.sign(delta), raw: event }; // Keep the most recent events if (recentWheelEvents.length >= 2) { recentWheelEvents.shift(); // only store the last N events } const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; recentWheelEvents.push(newEvent); // If there is at least one previous recorded event: // If direction has changed or // if the scroll is quicker than the previous one: // Animate the slider. // Else (this is the first time the wheel is moved): // Animate the slider. if (prevEvent) { if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { animateSlider(newEvent); } } else { animateSlider(newEvent); } // If it's time to release the scroll: // Return now so you don't hit the preventDefault. if (releaseScroll(newEvent)) { return true; } } else { // Freemode or scrollContainer: // If we recently snapped after a momentum scroll, then ignore wheel events // to give time for the deceleration to finish. Stop ignoring after 500 msecs // or if it's a new scroll (larger delta or inverse sign as last event before // an end-of-momentum snap). const newEvent = { time: now(), delta: Math.abs(delta), direction: Math.sign(delta) }; const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; if (!ignoreWheelEvents) { lastEventBeforeSnap = undefined; if (swiper.params.loop) { swiper.loopFix(); } let position = swiper.getTranslate() + delta * params.sensitivity; const wasBeginning = swiper.isBeginning; const wasEnd = swiper.isEnd; if (position >= swiper.minTranslate()) position = swiper.minTranslate(); if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); swiper.setTransition(0); swiper.setTranslate(position); swiper.updateProgress(); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { swiper.updateSlidesClasses(); } if (swiper.params.freeMode.sticky) { // When wheel scrolling starts with sticky (aka snap) enabled, then detect // the end of a momentum scroll by storing recent (N=15?) wheel events. // 1. do all N events have decreasing or same (absolute value) delta? // 2. did all N events arrive in the last M (M=500?) msecs? // 3. does the earliest event have an (absolute value) delta that's // at least P (P=1?) larger than the most recent event's delta? // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. // Snap immediately and ignore remaining wheel events in this scroll. // See comment above for "remaining wheel events in this scroll" determination. // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. clearTimeout(timeout); timeout = undefined; if (recentWheelEvents.length >= 15) { recentWheelEvents.shift(); // only store the last N events } const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; const firstEvent = recentWheelEvents[0]; recentWheelEvents.push(newEvent); if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. recentWheelEvents.splice(0); } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { // We're at the end of the deceleration of a momentum scroll, so there's no need // to wait for more events. Snap ASAP on the next tick. // Also, because there's some remaining momentum we'll bias the snap in the // direction of the ongoing scroll because it's better UX for the scroll to snap // in the same direction as the scroll instead of reversing to snap. Therefore, // if it's already scrolled more than 20% in the current direction, keep going. const snapToThreshold = delta > 0 ? 0.8 : 0.2; lastEventBeforeSnap = newEvent; recentWheelEvents.splice(0); timeout = nextTick(() => { swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); }, 0); // no delay; move on next tick } if (!timeout) { // if we get here, then we haven't detected the end of a momentum scroll, so // we'll consider a scroll "complete" when there haven't been any wheel events // for 500ms. timeout = nextTick(() => { const snapToThreshold = 0.5; lastEventBeforeSnap = newEvent; recentWheelEvents.splice(0); swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); }, 500); } } // Emit event if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; } } if (e.preventDefault) e.preventDefault();else e.returnValue = false; return false; } function events(method) { let target = swiper.$el; if (swiper.params.mousewheel.eventsTarget !== 'container') { target = $(swiper.params.mousewheel.eventsTarget); } target[method]('mouseenter', handleMouseEnter); target[method]('mouseleave', handleMouseLeave); target[method]('wheel', handle); } function enable() { if (swiper.params.cssMode) { swiper.wrapperEl.removeEventListener('wheel', handle); return true; } if (swiper.mousewheel.enabled) return false; events('on'); swiper.mousewheel.enabled = true; return true; } function disable() { if (swiper.params.cssMode) { swiper.wrapperEl.addEventListener(event, handle); return true; } if (!swiper.mousewheel.enabled) return false; events('off'); swiper.mousewheel.enabled = false; return true; } on('init', () => { if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { disable(); } if (swiper.params.mousewheel.enabled) enable(); }); on('destroy', () => { if (swiper.params.cssMode) { enable(); } if (swiper.mousewheel.enabled) disable(); }); Object.assign(swiper.mousewheel, { enable, disable }); } function createElementIfNotDefined(swiper, originalParams, params, checkProps) { const document = getDocument(); if (swiper.params.createElements) { Object.keys(checkProps).forEach(key => { if (!params[key] && params.auto === true) { let element = swiper.$el.children(`.${checkProps[key]}`)[0]; if (!element) { element = document.createElement('div'); element.className = checkProps[key]; swiper.$el.append(element); } params[key] = element; originalParams[key] = element; } }); } return params; } function Navigation({ swiper, extendParams, on, emit }) { extendParams({ navigation: { nextEl: null, prevEl: null, hideOnClick: false, disabledClass: 'swiper-button-disabled', hiddenClass: 'swiper-button-hidden', lockClass: 'swiper-button-lock' } }); swiper.navigation = { nextEl: null, $nextEl: null, prevEl: null, $prevEl: null }; function getEl(el) { let $el; if (el) { $el = $(el); if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) { $el = swiper.$el.find(el); } } return $el; } function toggleEl($el, disabled) { const params = swiper.params.navigation; if ($el && $el.length > 0) { $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass); if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled; if (swiper.params.watchOverflow && swiper.enabled) { $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); } } } function update() { // Update Navigation Buttons if (swiper.params.loop) return; const { $nextEl, $prevEl } = swiper.navigation; toggleEl($prevEl, swiper.isBeginning); toggleEl($nextEl, swiper.isEnd); } function onPrevClick(e) { e.preventDefault(); if (swiper.isBeginning && !swiper.params.loop) return; swiper.slidePrev(); } function onNextClick(e) { e.preventDefault(); if (swiper.isEnd && !swiper.params.loop) return; swiper.slideNext(); } function init() { const params = swiper.params.navigation; swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, { nextEl: 'swiper-button-next', prevEl: 'swiper-button-prev' }); if (!(params.nextEl || params.prevEl)) return; const $nextEl = getEl(params.nextEl); const $prevEl = getEl(params.prevEl); if ($nextEl && $nextEl.length > 0) { $nextEl.on('click', onNextClick); } if ($prevEl && $prevEl.length > 0) { $prevEl.on('click', onPrevClick); } Object.assign(swiper.navigation, { $nextEl, nextEl: $nextEl && $nextEl[0], $prevEl, prevEl: $prevEl && $prevEl[0] }); if (!swiper.enabled) { if ($nextEl) $nextEl.addClass(params.lockClass); if ($prevEl) $prevEl.addClass(params.lockClass); } } function destroy() { const { $nextEl, $prevEl } = swiper.navigation; if ($nextEl && $nextEl.length) { $nextEl.off('click', onNextClick); $nextEl.removeClass(swiper.params.navigation.disabledClass); } if ($prevEl && $prevEl.length) { $prevEl.off('click', onPrevClick); $prevEl.removeClass(swiper.params.navigation.disabledClass); } } on('init', () => { init(); update(); }); on('toEdge fromEdge lock unlock', () => { update(); }); on('destroy', () => { destroy(); }); on('enable disable', () => { const { $nextEl, $prevEl } = swiper.navigation; if ($nextEl) { $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); } if ($prevEl) { $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); } }); on('click', (_s, e) => { const { $nextEl, $prevEl } = swiper.navigation; const targetEl = e.target; if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) { if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; let isHidden; if ($nextEl) { isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); } else if ($prevEl) { isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); } if (isHidden === true) { emit('navigationShow'); } else { emit('navigationHide'); } if ($nextEl) { $nextEl.toggleClass(swiper.params.navigation.hiddenClass); } if ($prevEl) { $prevEl.toggleClass(swiper.params.navigation.hiddenClass); } } }); Object.assign(swiper.navigation, { update, init, destroy }); } function classesToSelector(classes = '') { return `.${classes.trim().replace(/([\.:!\/])/g, '\\$1') // eslint-disable-line .replace(/ /g, '.')}`; } function Pagination({ swiper, extendParams, on, emit }) { const pfx = 'swiper-pagination'; extendParams({ pagination: { el: null, bulletElement: 'span', clickable: false, hideOnClick: false, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: false, type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom' dynamicBullets: false, dynamicMainBullets: 1, formatFractionCurrent: number => number, formatFractionTotal: number => number, bulletClass: `${pfx}-bullet`, bulletActiveClass: `${pfx}-bullet-active`, modifierClass: `${pfx}-`, currentClass: `${pfx}-current`, totalClass: `${pfx}-total`, hiddenClass: `${pfx}-hidden`, progressbarFillClass: `${pfx}-progressbar-fill`, progressbarOppositeClass: `${pfx}-progressbar-opposite`, clickableClass: `${pfx}-clickable`, lockClass: `${pfx}-lock`, horizontalClass: `${pfx}-horizontal`, verticalClass: `${pfx}-vertical` } }); swiper.pagination = { el: null, $el: null, bullets: [] }; let bulletSize; let dynamicBulletIndex = 0; function isPaginationDisabled() { return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0; } function setSideBullets($bulletEl, position) { const { bulletActiveClass } = swiper.params.pagination; $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`); } function update() { // Render || Update Pagination bullets/items const rtl = swiper.rtl; const params = swiper.params.pagination; if (isPaginationDisabled()) return; const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; const $el = swiper.pagination.$el; // Current/Total let current; const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; if (swiper.params.loop) { current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); if (current > slidesLength - 1 - swiper.loopedSlides * 2) { current -= slidesLength - swiper.loopedSlides * 2; } if (current > total - 1) current -= total; if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; } else if (typeof swiper.snapIndex !== 'undefined') { current = swiper.snapIndex; } else { current = swiper.activeIndex || 0; } // Types if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { const bullets = swiper.pagination.bullets; let firstIndex; let lastIndex; let midIndex; if (params.dynamicBullets) { bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`); if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { dynamicBulletIndex += current - swiper.previousIndex; if (dynamicBulletIndex > params.dynamicMainBullets - 1) { dynamicBulletIndex = params.dynamicMainBullets - 1; } else if (dynamicBulletIndex < 0) { dynamicBulletIndex = 0; } } firstIndex = current - dynamicBulletIndex; lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); midIndex = (lastIndex + firstIndex) / 2; } bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' ')); if ($el.length > 1) { bullets.each(bullet => { const $bullet = $(bullet); const bulletIndex = $bullet.index(); if (bulletIndex === current) { $bullet.addClass(params.bulletActiveClass); } if (params.dynamicBullets) { if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { $bullet.addClass(`${params.bulletActiveClass}-main`); } if (bulletIndex === firstIndex) { setSideBullets($bullet, 'prev'); } if (bulletIndex === lastIndex) { setSideBullets($bullet, 'next'); } } }); } else { const $bullet = bullets.eq(current); const bulletIndex = $bullet.index(); $bullet.addClass(params.bulletActiveClass); if (params.dynamicBullets) { const $firstDisplayedBullet = bullets.eq(firstIndex); const $lastDisplayedBullet = bullets.eq(lastIndex); for (let i = firstIndex; i <= lastIndex; i += 1) { bullets.eq(i).addClass(`${params.bulletActiveClass}-main`); } if (swiper.params.loop) { if (bulletIndex >= bullets.length - params.dynamicMainBullets) { for (let i = params.dynamicMainBullets; i >= 0; i -= 1) { bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`); } bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`); } else { setSideBullets($firstDisplayedBullet, 'prev'); setSideBullets($lastDisplayedBullet, 'next'); } } else { setSideBullets($firstDisplayedBullet, 'prev'); setSideBullets($lastDisplayedBullet, 'next'); } } } if (params.dynamicBullets) { const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize; const offsetProp = rtl ? 'right' : 'left'; bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`); } } if (params.type === 'fraction') { $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1)); $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total)); } if (params.type === 'progressbar') { let progressbarDirection; if (params.progressbarOpposite) { progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; } else { progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; } const scale = (current + 1) / total; let scaleX = 1; let scaleY = 1; if (progressbarDirection === 'horizontal') { scaleX = scale; } else { scaleY = scale; } $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed); } if (params.type === 'custom' && params.renderCustom) { $el.html(params.renderCustom(swiper, current + 1, total)); emit('paginationRender', $el[0]); } else { emit('paginationUpdate', $el[0]); } if (swiper.params.watchOverflow && swiper.enabled) { $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); } } function render() { // Render Container const params = swiper.params.pagination; if (isPaginationDisabled()) return; const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; const $el = swiper.pagination.$el; let paginationHTML = ''; if (params.type === 'bullets') { let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) { numberOfBullets = slidesLength; } for (let i = 0; i < numberOfBullets; i += 1) { if (params.renderBullet) { paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); } else { paginationHTML += `<${params.bulletElement} class="${params.bulletClass}">`; } } $el.html(paginationHTML); swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass)); } if (params.type === 'fraction') { if (params.renderFraction) { paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); } else { paginationHTML = `` + ' / ' + ``; } $el.html(paginationHTML); } if (params.type === 'progressbar') { if (params.renderProgressbar) { paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); } else { paginationHTML = ``; } $el.html(paginationHTML); } if (params.type !== 'custom') { emit('paginationRender', swiper.pagination.$el[0]); } } function init() { swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, { el: 'swiper-pagination' }); const params = swiper.params.pagination; if (!params.el) return; let $el = $(params.el); if ($el.length === 0) return; if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) { $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper if ($el.length > 1) { $el = $el.filter(el => { if ($(el).parents('.swiper')[0] !== swiper.el) return false; return true; }); } } if (params.type === 'bullets' && params.clickable) { $el.addClass(params.clickableClass); } $el.addClass(params.modifierClass + params.type); $el.addClass(params.modifierClass + swiper.params.direction); if (params.type === 'bullets' && params.dynamicBullets) { $el.addClass(`${params.modifierClass}${params.type}-dynamic`); dynamicBulletIndex = 0; if (params.dynamicMainBullets < 1) { params.dynamicMainBullets = 1; } } if (params.type === 'progressbar' && params.progressbarOpposite) { $el.addClass(params.progressbarOppositeClass); } if (params.clickable) { $el.on('click', classesToSelector(params.bulletClass), function onClick(e) { e.preventDefault(); let index = $(this).index() * swiper.params.slidesPerGroup; if (swiper.params.loop) index += swiper.loopedSlides; swiper.slideTo(index); }); } Object.assign(swiper.pagination, { $el, el: $el[0] }); if (!swiper.enabled) { $el.addClass(params.lockClass); } } function destroy() { const params = swiper.params.pagination; if (isPaginationDisabled()) return; const $el = swiper.pagination.$el; $el.removeClass(params.hiddenClass); $el.removeClass(params.modifierClass + params.type); $el.removeClass(params.modifierClass + swiper.params.direction); if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass); if (params.clickable) { $el.off('click', classesToSelector(params.bulletClass)); } } on('init', () => { init(); render(); update(); }); on('activeIndexChange', () => { if (swiper.params.loop) { update(); } else if (typeof swiper.snapIndex === 'undefined') { update(); } }); on('snapIndexChange', () => { if (!swiper.params.loop) { update(); } }); on('slidesLengthChange', () => { if (swiper.params.loop) { render(); update(); } }); on('snapGridLengthChange', () => { if (!swiper.params.loop) { render(); update(); } }); on('destroy', () => { destroy(); }); on('enable disable', () => { const { $el } = swiper.pagination; if ($el) { $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass); } }); on('lock unlock', () => { update(); }); on('click', (_s, e) => { const targetEl = e.target; const { $el } = swiper.pagination; if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) { if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass); if (isHidden === true) { emit('paginationShow'); } else { emit('paginationHide'); } $el.toggleClass(swiper.params.pagination.hiddenClass); } }); Object.assign(swiper.pagination, { render, update, init, destroy }); } function Scrollbar({ swiper, extendParams, on, emit }) { const document = getDocument(); let isTouched = false; let timeout = null; let dragTimeout = null; let dragStartPos; let dragSize; let trackSize; let divider; extendParams({ scrollbar: { el: null, dragSize: 'auto', hide: false, draggable: false, snapOnRelease: true, lockClass: 'swiper-scrollbar-lock', dragClass: 'swiper-scrollbar-drag' } }); swiper.scrollbar = { el: null, dragEl: null, $el: null, $dragEl: null }; function setTranslate() { if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; const { scrollbar, rtlTranslate: rtl, progress } = swiper; const { $dragEl, $el } = scrollbar; const params = swiper.params.scrollbar; let newSize = dragSize; let newPos = (trackSize - dragSize) * progress; if (rtl) { newPos = -newPos; if (newPos > 0) { newSize = dragSize - newPos; newPos = 0; } else if (-newPos + dragSize > trackSize) { newSize = trackSize + newPos; } } else if (newPos < 0) { newSize = dragSize + newPos; newPos = 0; } else if (newPos + dragSize > trackSize) { newSize = trackSize - newPos; } if (swiper.isHorizontal()) { $dragEl.transform(`translate3d(${newPos}px, 0, 0)`); $dragEl[0].style.width = `${newSize}px`; } else { $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`); $dragEl[0].style.height = `${newSize}px`; } if (params.hide) { clearTimeout(timeout); $el[0].style.opacity = 1; timeout = setTimeout(() => { $el[0].style.opacity = 0; $el.transition(400); }, 1000); } } function setTransition(duration) { if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; swiper.scrollbar.$dragEl.transition(duration); } function updateSize() { if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; const { scrollbar } = swiper; const { $dragEl, $el } = scrollbar; $dragEl[0].style.width = ''; $dragEl[0].style.height = ''; trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); if (swiper.params.scrollbar.dragSize === 'auto') { dragSize = trackSize * divider; } else { dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); } if (swiper.isHorizontal()) { $dragEl[0].style.width = `${dragSize}px`; } else { $dragEl[0].style.height = `${dragSize}px`; } if (divider >= 1) { $el[0].style.display = 'none'; } else { $el[0].style.display = ''; } if (swiper.params.scrollbar.hide) { $el[0].style.opacity = 0; } if (swiper.params.watchOverflow && swiper.enabled) { scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); } } function getPointerPosition(e) { if (swiper.isHorizontal()) { return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX; } return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY; } function setDragPosition(e) { const { scrollbar, rtlTranslate: rtl } = swiper; const { $el } = scrollbar; let positionRatio; positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); positionRatio = Math.max(Math.min(positionRatio, 1), 0); if (rtl) { positionRatio = 1 - positionRatio; } const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; swiper.updateProgress(position); swiper.setTranslate(position); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } function onDragStart(e) { const params = swiper.params.scrollbar; const { scrollbar, $wrapperEl } = swiper; const { $el, $dragEl } = scrollbar; isTouched = true; dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; e.preventDefault(); e.stopPropagation(); $wrapperEl.transition(100); $dragEl.transition(100); setDragPosition(e); clearTimeout(dragTimeout); $el.transition(0); if (params.hide) { $el.css('opacity', 1); } if (swiper.params.cssMode) { swiper.$wrapperEl.css('scroll-snap-type', 'none'); } emit('scrollbarDragStart', e); } function onDragMove(e) { const { scrollbar, $wrapperEl } = swiper; const { $el, $dragEl } = scrollbar; if (!isTouched) return; if (e.preventDefault) e.preventDefault();else e.returnValue = false; setDragPosition(e); $wrapperEl.transition(0); $el.transition(0); $dragEl.transition(0); emit('scrollbarDragMove', e); } function onDragEnd(e) { const params = swiper.params.scrollbar; const { scrollbar, $wrapperEl } = swiper; const { $el } = scrollbar; if (!isTouched) return; isTouched = false; if (swiper.params.cssMode) { swiper.$wrapperEl.css('scroll-snap-type', ''); $wrapperEl.transition(''); } if (params.hide) { clearTimeout(dragTimeout); dragTimeout = nextTick(() => { $el.css('opacity', 0); $el.transition(400); }, 1000); } emit('scrollbarDragEnd', e); if (params.snapOnRelease) { swiper.slideToClosest(); } } function events(method) { const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper; const $el = scrollbar.$el; const target = $el[0]; const activeListener = support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false; const passiveListener = support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; if (!target) return; const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; if (!support.touch) { target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener); document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener); document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener); } else { target[eventMethod](touchEventsTouch.start, onDragStart, activeListener); target[eventMethod](touchEventsTouch.move, onDragMove, activeListener); target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener); } } function enableDraggable() { if (!swiper.params.scrollbar.el) return; events('on'); } function disableDraggable() { if (!swiper.params.scrollbar.el) return; events('off'); } function init() { const { scrollbar, $el: $swiperEl } = swiper; swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { el: 'swiper-scrollbar' }); const params = swiper.params.scrollbar; if (!params.el) return; let $el = $(params.el); if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { $el = $swiperEl.find(params.el); } let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`); if ($dragEl.length === 0) { $dragEl = $(`
`); $el.append($dragEl); } Object.assign(scrollbar, { $el, el: $el[0], $dragEl, dragEl: $dragEl[0] }); if (params.draggable) { enableDraggable(); } if ($el) { $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); } } function destroy() { disableDraggable(); } on('init', () => { init(); updateSize(); setTranslate(); }); on('update resize observerUpdate lock unlock', () => { updateSize(); }); on('setTranslate', () => { setTranslate(); }); on('setTransition', (_s, duration) => { setTransition(duration); }); on('enable disable', () => { const { $el } = swiper.scrollbar; if ($el) { $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); } }); on('destroy', () => { destroy(); }); Object.assign(swiper.scrollbar, { updateSize, setTranslate, init, destroy }); } function Parallax({ swiper, extendParams, on }) { extendParams({ parallax: { enabled: false } }); const setTransform = (el, progress) => { const { rtl } = swiper; const $el = $(el); const rtlFactor = rtl ? -1 : 1; const p = $el.attr('data-swiper-parallax') || '0'; let x = $el.attr('data-swiper-parallax-x'); let y = $el.attr('data-swiper-parallax-y'); const scale = $el.attr('data-swiper-parallax-scale'); const opacity = $el.attr('data-swiper-parallax-opacity'); if (x || y) { x = x || '0'; y = y || '0'; } else if (swiper.isHorizontal()) { x = p; y = '0'; } else { y = p; x = '0'; } if (x.indexOf('%') >= 0) { x = `${parseInt(x, 10) * progress * rtlFactor}%`; } else { x = `${x * progress * rtlFactor}px`; } if (y.indexOf('%') >= 0) { y = `${parseInt(y, 10) * progress}%`; } else { y = `${y * progress}px`; } if (typeof opacity !== 'undefined' && opacity !== null) { const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); $el[0].style.opacity = currentOpacity; } if (typeof scale === 'undefined' || scale === null) { $el.transform(`translate3d(${x}, ${y}, 0px)`); } else { const currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`); } }; const setTranslate = () => { const { $el, slides, progress, snapGrid } = swiper; $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => { setTransform(el, progress); }); slides.each((slideEl, slideIndex) => { let slideProgress = slideEl.progress; if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); } slideProgress = Math.min(Math.max(slideProgress, -1), 1); $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => { setTransform(el, slideProgress); }); }); }; const setTransition = (duration = swiper.params.speed) => { const { $el } = swiper; $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => { const $parallaxEl = $(parallaxEl); let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; if (duration === 0) parallaxDuration = 0; $parallaxEl.transition(parallaxDuration); }); }; on('beforeInit', () => { if (!swiper.params.parallax.enabled) return; swiper.params.watchSlidesProgress = true; swiper.originalParams.watchSlidesProgress = true; }); on('init', () => { if (!swiper.params.parallax.enabled) return; setTranslate(); }); on('setTranslate', () => { if (!swiper.params.parallax.enabled) return; setTranslate(); }); on('setTransition', (_swiper, duration) => { if (!swiper.params.parallax.enabled) return; setTransition(duration); }); } function Zoom({ swiper, extendParams, on, emit }) { const window = getWindow(); extendParams({ zoom: { enabled: false, maxRatio: 3, minRatio: 1, toggle: true, containerClass: 'swiper-zoom-container', zoomedSlideClass: 'swiper-slide-zoomed' } }); swiper.zoom = { enabled: false }; let currentScale = 1; let isScaling = false; let gesturesEnabled; let fakeGestureTouched; let fakeGestureMoved; const gesture = { $slideEl: undefined, slideWidth: undefined, slideHeight: undefined, $imageEl: undefined, $imageWrapEl: undefined, maxRatio: 3 }; const image = { isTouched: undefined, isMoved: undefined, currentX: undefined, currentY: undefined, minX: undefined, minY: undefined, maxX: undefined, maxY: undefined, width: undefined, height: undefined, startX: undefined, startY: undefined, touchesStart: {}, touchesCurrent: {} }; const velocity = { x: undefined, y: undefined, prevPositionX: undefined, prevPositionY: undefined, prevTime: undefined }; let scale = 1; Object.defineProperty(swiper.zoom, 'scale', { get() { return scale; }, set(value) { if (scale !== value) { const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined; const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined; emit('zoomChange', value, imageEl, slideEl); } scale = value; } }); function getDistanceBetweenTouches(e) { if (e.targetTouches.length < 2) return 1; const x1 = e.targetTouches[0].pageX; const y1 = e.targetTouches[0].pageY; const x2 = e.targetTouches[1].pageX; const y2 = e.targetTouches[1].pageY; const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); return distance; } // Events function onGestureStart(e) { const support = swiper.support; const params = swiper.params.zoom; fakeGestureTouched = false; fakeGestureMoved = false; if (!support.gestures) { if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { return; } fakeGestureTouched = true; gesture.scaleStart = getDistanceBetweenTouches(e); } if (!gesture.$slideEl || !gesture.$slideEl.length) { gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`); if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; if (gesture.$imageWrapEl.length === 0) { gesture.$imageEl = undefined; return; } } if (gesture.$imageEl) { gesture.$imageEl.transition(0); } isScaling = true; } function onGestureChange(e) { const support = swiper.support; const params = swiper.params.zoom; const zoom = swiper.zoom; if (!support.gestures) { if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { return; } fakeGestureMoved = true; gesture.scaleMove = getDistanceBetweenTouches(e); } if (!gesture.$imageEl || gesture.$imageEl.length === 0) { if (e.type === 'gesturechange') onGestureStart(e); return; } if (support.gestures) { zoom.scale = e.scale * currentScale; } else { zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale; } if (zoom.scale > gesture.maxRatio) { zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5; } if (zoom.scale < params.minRatio) { zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5; } gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`); } function onGestureEnd(e) { const device = swiper.device; const support = swiper.support; const params = swiper.params.zoom; const zoom = swiper.zoom; if (!support.gestures) { if (!fakeGestureTouched || !fakeGestureMoved) { return; } if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) { return; } fakeGestureTouched = false; fakeGestureMoved = false; } if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`); currentScale = zoom.scale; isScaling = false; if (zoom.scale === 1) gesture.$slideEl = undefined; } function onTouchStart(e) { const device = swiper.device; if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; if (image.isTouched) return; if (device.android && e.cancelable) e.preventDefault(); image.isTouched = true; image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; } function onTouchMove(e) { const zoom = swiper.zoom; if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; swiper.allowClick = false; if (!image.isTouched || !gesture.$slideEl) return; if (!image.isMoved) { image.width = gesture.$imageEl[0].offsetWidth; image.height = gesture.$imageEl[0].offsetHeight; image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0; image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0; gesture.slideWidth = gesture.$slideEl[0].offsetWidth; gesture.slideHeight = gesture.$slideEl[0].offsetHeight; gesture.$imageWrapEl.transition(0); } // Define if we need image drag const scaledWidth = image.width * zoom.scale; const scaledHeight = image.height * zoom.scale; if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); image.maxX = -image.minX; image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); image.maxY = -image.minY; image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; if (!image.isMoved && !isScaling) { if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { image.isTouched = false; return; } if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { image.isTouched = false; return; } } if (e.cancelable) { e.preventDefault(); } e.stopPropagation(); image.isMoved = true; image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX; image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY; if (image.currentX < image.minX) { image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8; } if (image.currentX > image.maxX) { image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8; } if (image.currentY < image.minY) { image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8; } if (image.currentY > image.maxY) { image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8; } // Velocity if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; if (!velocity.prevTime) velocity.prevTime = Date.now(); velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; velocity.prevPositionX = image.touchesCurrent.x; velocity.prevPositionY = image.touchesCurrent.y; velocity.prevTime = Date.now(); gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); } function onTouchEnd() { const zoom = swiper.zoom; if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; if (!image.isTouched || !image.isMoved) { image.isTouched = false; image.isMoved = false; return; } image.isTouched = false; image.isMoved = false; let momentumDurationX = 300; let momentumDurationY = 300; const momentumDistanceX = velocity.x * momentumDurationX; const newPositionX = image.currentX + momentumDistanceX; const momentumDistanceY = velocity.y * momentumDurationY; const newPositionY = image.currentY + momentumDistanceY; // Fix duration if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); const momentumDuration = Math.max(momentumDurationX, momentumDurationY); image.currentX = newPositionX; image.currentY = newPositionY; // Define if we need image drag const scaledWidth = image.width * zoom.scale; const scaledHeight = image.height * zoom.scale; image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); image.maxX = -image.minX; image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); image.maxY = -image.minY; image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); } function onTransitionEnd() { const zoom = swiper.zoom; if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { if (gesture.$imageEl) { gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); } if (gesture.$imageWrapEl) { gesture.$imageWrapEl.transform('translate3d(0,0,0)'); } zoom.scale = 1; currentScale = 1; gesture.$slideEl = undefined; gesture.$imageEl = undefined; gesture.$imageWrapEl = undefined; } } function zoomIn(e) { const zoom = swiper.zoom; const params = swiper.params.zoom; if (!gesture.$slideEl) { if (e && e.target) { gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`); } if (!gesture.$slideEl) { if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); } else { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); } } gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); } if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; if (swiper.params.cssMode) { swiper.wrapperEl.style.overflow = 'hidden'; swiper.wrapperEl.style.touchAction = 'none'; } gesture.$slideEl.addClass(`${params.zoomedSlideClass}`); let touchX; let touchY; let offsetX; let offsetY; let diffX; let diffY; let translateX; let translateY; let imageWidth; let imageHeight; let scaledWidth; let scaledHeight; let translateMinX; let translateMinY; let translateMaxX; let translateMaxY; let slideWidth; let slideHeight; if (typeof image.touchesStart.x === 'undefined' && e) { touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; } else { touchX = image.touchesStart.x; touchY = image.touchesStart.y; } zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; if (e) { slideWidth = gesture.$slideEl[0].offsetWidth; slideHeight = gesture.$slideEl[0].offsetHeight; offsetX = gesture.$slideEl.offset().left + window.scrollX; offsetY = gesture.$slideEl.offset().top + window.scrollY; diffX = offsetX + slideWidth / 2 - touchX; diffY = offsetY + slideHeight / 2 - touchY; imageWidth = gesture.$imageEl[0].offsetWidth; imageHeight = gesture.$imageEl[0].offsetHeight; scaledWidth = imageWidth * zoom.scale; scaledHeight = imageHeight * zoom.scale; translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); translateMaxX = -translateMinX; translateMaxY = -translateMinY; translateX = diffX * zoom.scale; translateY = diffY * zoom.scale; if (translateX < translateMinX) { translateX = translateMinX; } if (translateX > translateMaxX) { translateX = translateMaxX; } if (translateY < translateMinY) { translateY = translateMinY; } if (translateY > translateMaxY) { translateY = translateMaxY; } } else { translateX = 0; translateY = 0; } gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`); gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`); } function zoomOut() { const zoom = swiper.zoom; const params = swiper.params.zoom; if (!gesture.$slideEl) { if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); } else { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); } gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); } if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; if (swiper.params.cssMode) { swiper.wrapperEl.style.overflow = ''; swiper.wrapperEl.style.touchAction = ''; } zoom.scale = 1; currentScale = 1; gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`); gesture.$slideEl = undefined; } // Toggle Zoom function zoomToggle(e) { const zoom = swiper.zoom; if (zoom.scale && zoom.scale !== 1) { // Zoom Out zoomOut(); } else { // Zoom In zoomIn(e); } } function getListeners() { const support = swiper.support; const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; const activeListenerWithCapture = support.passiveListener ? { passive: false, capture: true } : true; return { passiveListener, activeListenerWithCapture }; } function getSlideSelector() { return `.${swiper.params.slideClass}`; } function toggleGestures(method) { const { passiveListener } = getListeners(); const slideSelector = getSlideSelector(); swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener); swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener); swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener); } function enableGestures() { if (gesturesEnabled) return; gesturesEnabled = true; toggleGestures('on'); } function disableGestures() { if (!gesturesEnabled) return; gesturesEnabled = false; toggleGestures('off'); } // Attach/Detach Events function enable() { const zoom = swiper.zoom; if (zoom.enabled) return; zoom.enabled = true; const support = swiper.support; const { passiveListener, activeListenerWithCapture } = getListeners(); const slideSelector = getSlideSelector(); // Scale image if (support.gestures) { swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener); swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener); } else if (swiper.touchEvents.start === 'touchstart') { swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener); swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture); swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener); if (swiper.touchEvents.cancel) { swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener); } } // Move image swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture); } function disable() { const zoom = swiper.zoom; if (!zoom.enabled) return; const support = swiper.support; zoom.enabled = false; const { passiveListener, activeListenerWithCapture } = getListeners(); const slideSelector = getSlideSelector(); // Scale image if (support.gestures) { swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener); swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener); } else if (swiper.touchEvents.start === 'touchstart') { swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener); swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture); swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener); if (swiper.touchEvents.cancel) { swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener); } } // Move image swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture); } on('init', () => { if (swiper.params.zoom.enabled) { enable(); } }); on('destroy', () => { disable(); }); on('touchStart', (_s, e) => { if (!swiper.zoom.enabled) return; onTouchStart(e); }); on('touchEnd', (_s, e) => { if (!swiper.zoom.enabled) return; onTouchEnd(); }); on('doubleTap', (_s, e) => { if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { zoomToggle(e); } }); on('transitionEnd', () => { if (swiper.zoom.enabled && swiper.params.zoom.enabled) { onTransitionEnd(); } }); on('slideChange', () => { if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { onTransitionEnd(); } }); Object.assign(swiper.zoom, { enable, disable, in: zoomIn, out: zoomOut, toggle: zoomToggle }); } function Lazy({ swiper, extendParams, on, emit }) { extendParams({ lazy: { checkInView: false, enabled: false, loadPrevNext: false, loadPrevNextAmount: 1, loadOnTransitionStart: false, scrollingElement: '', elementClass: 'swiper-lazy', loadingClass: 'swiper-lazy-loading', loadedClass: 'swiper-lazy-loaded', preloaderClass: 'swiper-lazy-preloader' } }); swiper.lazy = {}; let scrollHandlerAttached = false; let initialImageLoaded = false; function loadInSlide(index, loadInDuplicate = true) { const params = swiper.params.lazy; if (typeof index === 'undefined') return; if (swiper.slides.length === 0) return; const isVirtual = swiper.virtual && swiper.params.virtual.enabled; const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`) : swiper.slides.eq(index); const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`); if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { $images.push($slideEl[0]); } if ($images.length === 0) return; $images.each(imageEl => { const $imageEl = $(imageEl); $imageEl.addClass(params.loadingClass); const background = $imageEl.attr('data-background'); const src = $imageEl.attr('data-src'); const srcset = $imageEl.attr('data-srcset'); const sizes = $imageEl.attr('data-sizes'); const $pictureEl = $imageEl.parent('picture'); swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => { if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return; if (background) { $imageEl.css('background-image', `url("${background}")`); $imageEl.removeAttr('data-background'); } else { if (srcset) { $imageEl.attr('srcset', srcset); $imageEl.removeAttr('data-srcset'); } if (sizes) { $imageEl.attr('sizes', sizes); $imageEl.removeAttr('data-sizes'); } if ($pictureEl.length) { $pictureEl.children('source').each(sourceEl => { const $source = $(sourceEl); if ($source.attr('data-srcset')) { $source.attr('srcset', $source.attr('data-srcset')); $source.removeAttr('data-srcset'); } }); } if (src) { $imageEl.attr('src', src); $imageEl.removeAttr('data-src'); } } $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); $slideEl.find(`.${params.preloaderClass}`).remove(); if (swiper.params.loop && loadInDuplicate) { const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`); loadInSlide(originalSlide.index(), false); } else { const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`); loadInSlide(duplicatedSlide.index(), false); } } emit('lazyImageReady', $slideEl[0], $imageEl[0]); if (swiper.params.autoHeight) { swiper.updateAutoHeight(); } }); emit('lazyImageLoad', $slideEl[0], $imageEl[0]); }); } function load() { const { $wrapperEl, params: swiperParams, slides, activeIndex } = swiper; const isVirtual = swiper.virtual && swiperParams.virtual.enabled; const params = swiperParams.lazy; let slidesPerView = swiperParams.slidesPerView; if (slidesPerView === 'auto') { slidesPerView = 0; } function slideExist(index) { if (isVirtual) { if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) { return true; } } else if (slides[index]) return true; return false; } function slideIndex(slideEl) { if (isVirtual) { return $(slideEl).attr('data-swiper-slide-index'); } return $(slideEl).index(); } if (!initialImageLoaded) initialImageLoaded = true; if (swiper.params.watchSlidesProgress) { $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => { const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index(); loadInSlide(index); }); } else if (slidesPerView > 1) { for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) { if (slideExist(i)) loadInSlide(i); } } else { loadInSlide(activeIndex); } if (params.loadPrevNext) { if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) { const amount = params.loadPrevNextAmount; const spv = slidesPerView; const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) { if (slideExist(i)) loadInSlide(i); } // Prev Slides for (let i = minIndex; i < activeIndex; i += 1) { if (slideExist(i)) loadInSlide(i); } } else { const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`); if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide)); const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`); if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide)); } } } function checkInViewOnLoad() { const window = getWindow(); if (!swiper || swiper.destroyed) return; const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window); const isWindow = $scrollElement[0] === window; const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth; const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight; const swiperOffset = swiper.$el.offset(); const { rtlTranslate: rtl } = swiper; let inView = false; if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]]; for (let i = 0; i < swiperCoord.length; i += 1) { const point = swiperCoord[i]; if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) { if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line inView = true; } } const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; if (inView) { load(); $scrollElement.off('scroll', checkInViewOnLoad, passiveListener); } else if (!scrollHandlerAttached) { scrollHandlerAttached = true; $scrollElement.on('scroll', checkInViewOnLoad, passiveListener); } } on('beforeInit', () => { if (swiper.params.lazy.enabled && swiper.params.preloadImages) { swiper.params.preloadImages = false; } }); on('init', () => { if (swiper.params.lazy.enabled) { if (swiper.params.lazy.checkInView) { checkInViewOnLoad(); } else { load(); } } }); on('scroll', () => { if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) { load(); } }); on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => { if (swiper.params.lazy.enabled) { if (swiper.params.lazy.checkInView) { checkInViewOnLoad(); } else { load(); } } }); on('transitionStart', () => { if (swiper.params.lazy.enabled) { if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) { if (swiper.params.lazy.checkInView) { checkInViewOnLoad(); } else { load(); } } } }); on('transitionEnd', () => { if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { if (swiper.params.lazy.checkInView) { checkInViewOnLoad(); } else { load(); } } }); on('slideChange', () => { const { lazy, cssMode, watchSlidesProgress, touchReleaseOnEdges, resistanceRatio } = swiper.params; if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) { load(); } }); Object.assign(swiper.lazy, { load, loadInSlide }); } /* eslint no-bitwise: ["error", { "allow": [">>"] }] */ function Controller({ swiper, extendParams, on }) { extendParams({ controller: { control: undefined, inverse: false, by: 'slide' // or 'container' } }); swiper.controller = { control: undefined }; function LinearSpline(x, y) { const binarySearch = function search() { let maxIndex; let minIndex; let guess; return (array, val) => { minIndex = -1; maxIndex = array.length; while (maxIndex - minIndex > 1) { guess = maxIndex + minIndex >> 1; if (array[guess] <= val) { minIndex = guess; } else { maxIndex = guess; } } return maxIndex; }; }(); this.x = x; this.y = y; this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value: // (x1,y1) is the known point before given value, // (x3,y3) is the known point after given value. let i1; let i3; this.interpolate = function interpolate(x2) { if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2): i3 = binarySearch(this.x, x2); i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already: // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; }; return this; } // xxx: for now i will just save one spline function to to function getInterpolateFunction(c) { if (!swiper.controller.spline) { swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid); } } function setTranslate(_t, byController) { const controlled = swiper.controller.control; let multiplier; let controlledTranslate; const Swiper = swiper.constructor; function setControlledTranslate(c) { // this will create an Interpolate function based on the snapGrids // x is the Grid of the scrolled scroller and y will be the controlled scroller // it makes sense to create this only once and recall it for the interpolation // the function does a lot of value caching for performance const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; if (swiper.params.controller.by === 'slide') { getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid // but it did not work out controlledTranslate = -swiper.controller.spline.interpolate(-translate); } if (!controlledTranslate || swiper.params.controller.by === 'container') { multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); } if (swiper.params.controller.inverse) { controlledTranslate = c.maxTranslate() - controlledTranslate; } c.updateProgress(controlledTranslate); c.setTranslate(controlledTranslate, swiper); c.updateActiveIndex(); c.updateSlidesClasses(); } if (Array.isArray(controlled)) { for (let i = 0; i < controlled.length; i += 1) { if (controlled[i] !== byController && controlled[i] instanceof Swiper) { setControlledTranslate(controlled[i]); } } } else if (controlled instanceof Swiper && byController !== controlled) { setControlledTranslate(controlled); } } function setTransition(duration, byController) { const Swiper = swiper.constructor; const controlled = swiper.controller.control; let i; function setControlledTransition(c) { c.setTransition(duration, swiper); if (duration !== 0) { c.transitionStart(); if (c.params.autoHeight) { nextTick(() => { c.updateAutoHeight(); }); } c.$wrapperEl.transitionEnd(() => { if (!controlled) return; if (c.params.loop && swiper.params.controller.by === 'slide') { c.loopFix(); } c.transitionEnd(); }); } } if (Array.isArray(controlled)) { for (i = 0; i < controlled.length; i += 1) { if (controlled[i] !== byController && controlled[i] instanceof Swiper) { setControlledTransition(controlled[i]); } } } else if (controlled instanceof Swiper && byController !== controlled) { setControlledTransition(controlled); } } function removeSpline() { if (!swiper.controller.control) return; if (swiper.controller.spline) { swiper.controller.spline = undefined; delete swiper.controller.spline; } } on('beforeInit', () => { swiper.controller.control = swiper.params.controller.control; }); on('update', () => { removeSpline(); }); on('resize', () => { removeSpline(); }); on('observerUpdate', () => { removeSpline(); }); on('setTranslate', (_s, translate, byController) => { if (!swiper.controller.control) return; swiper.controller.setTranslate(translate, byController); }); on('setTransition', (_s, duration, byController) => { if (!swiper.controller.control) return; swiper.controller.setTransition(duration, byController); }); Object.assign(swiper.controller, { setTranslate, setTransition }); } function A11y({ swiper, extendParams, on }) { extendParams({ a11y: { enabled: true, notificationClass: 'swiper-notification', prevSlideMessage: 'Previous slide', nextSlideMessage: 'Next slide', firstSlideMessage: 'This is the first slide', lastSlideMessage: 'This is the last slide', paginationBulletMessage: 'Go to slide {{index}}', slideLabelMessage: '{{index}} / {{slidesLength}}', containerMessage: null, containerRoleDescriptionMessage: null, itemRoleDescriptionMessage: null, slideRole: 'group' } }); let liveRegion = null; function notify(message) { const notification = liveRegion; if (notification.length === 0) return; notification.html(''); notification.html(message); } function getRandomNumber(size = 16) { const randomChar = () => Math.round(16 * Math.random()).toString(16); return 'x'.repeat(size).replace(/x/g, randomChar); } function makeElFocusable($el) { $el.attr('tabIndex', '0'); } function makeElNotFocusable($el) { $el.attr('tabIndex', '-1'); } function addElRole($el, role) { $el.attr('role', role); } function addElRoleDescription($el, description) { $el.attr('aria-roledescription', description); } function addElControls($el, controls) { $el.attr('aria-controls', controls); } function addElLabel($el, label) { $el.attr('aria-label', label); } function addElId($el, id) { $el.attr('id', id); } function addElLive($el, live) { $el.attr('aria-live', live); } function disableEl($el) { $el.attr('aria-disabled', true); } function enableEl($el) { $el.attr('aria-disabled', false); } function onEnterOrSpaceKey(e) { if (e.keyCode !== 13 && e.keyCode !== 32) return; const params = swiper.params.a11y; const $targetEl = $(e.target); if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { if (!(swiper.isEnd && !swiper.params.loop)) { swiper.slideNext(); } if (swiper.isEnd) { notify(params.lastSlideMessage); } else { notify(params.nextSlideMessage); } } if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { if (!(swiper.isBeginning && !swiper.params.loop)) { swiper.slidePrev(); } if (swiper.isBeginning) { notify(params.firstSlideMessage); } else { notify(params.prevSlideMessage); } } if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) { $targetEl[0].click(); } } function updateNavigation() { if (swiper.params.loop || !swiper.navigation) return; const { $nextEl, $prevEl } = swiper.navigation; if ($prevEl && $prevEl.length > 0) { if (swiper.isBeginning) { disableEl($prevEl); makeElNotFocusable($prevEl); } else { enableEl($prevEl); makeElFocusable($prevEl); } } if ($nextEl && $nextEl.length > 0) { if (swiper.isEnd) { disableEl($nextEl); makeElNotFocusable($nextEl); } else { enableEl($nextEl); makeElFocusable($nextEl); } } } function hasPagination() { return swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length; } function updatePagination() { const params = swiper.params.a11y; if (hasPagination()) { swiper.pagination.bullets.each(bulletEl => { const $bulletEl = $(bulletEl); makeElFocusable($bulletEl); if (!swiper.params.pagination.renderBullet) { addElRole($bulletEl, 'button'); addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); } }); } } const initNavEl = ($el, wrapperId, message) => { makeElFocusable($el); if ($el[0].tagName !== 'BUTTON') { addElRole($el, 'button'); $el.on('keydown', onEnterOrSpaceKey); } addElLabel($el, message); addElControls($el, wrapperId); }; function init() { const params = swiper.params.a11y; swiper.$el.append(liveRegion); // Container const $containerEl = swiper.$el; if (params.containerRoleDescriptionMessage) { addElRoleDescription($containerEl, params.containerRoleDescriptionMessage); } if (params.containerMessage) { addElLabel($containerEl, params.containerMessage); } // Wrapper const $wrapperEl = swiper.$wrapperEl; const wrapperId = $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`; const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; addElId($wrapperEl, wrapperId); addElLive($wrapperEl, live); // Slide if (params.itemRoleDescriptionMessage) { addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage); } addElRole($(swiper.slides), params.slideRole); const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length; swiper.slides.each((slideEl, index) => { const $slideEl = $(slideEl); const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index; const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength); addElLabel($slideEl, ariaLabelMessage); }); // Navigation let $nextEl; let $prevEl; if (swiper.navigation && swiper.navigation.$nextEl) { $nextEl = swiper.navigation.$nextEl; } if (swiper.navigation && swiper.navigation.$prevEl) { $prevEl = swiper.navigation.$prevEl; } if ($nextEl && $nextEl.length) { initNavEl($nextEl, wrapperId, params.nextSlideMessage); } if ($prevEl && $prevEl.length) { initNavEl($prevEl, wrapperId, params.prevSlideMessage); } // Pagination if (hasPagination()) { swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey); } } function destroy() { if (liveRegion && liveRegion.length > 0) liveRegion.remove(); let $nextEl; let $prevEl; if (swiper.navigation && swiper.navigation.$nextEl) { $nextEl = swiper.navigation.$nextEl; } if (swiper.navigation && swiper.navigation.$prevEl) { $prevEl = swiper.navigation.$prevEl; } if ($nextEl) { $nextEl.off('keydown', onEnterOrSpaceKey); } if ($prevEl) { $prevEl.off('keydown', onEnterOrSpaceKey); } // Pagination if (hasPagination()) { swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey); } } on('beforeInit', () => { liveRegion = $(``); }); on('afterInit', () => { if (!swiper.params.a11y.enabled) return; init(); updateNavigation(); }); on('toEdge', () => { if (!swiper.params.a11y.enabled) return; updateNavigation(); }); on('fromEdge', () => { if (!swiper.params.a11y.enabled) return; updateNavigation(); }); on('paginationUpdate', () => { if (!swiper.params.a11y.enabled) return; updatePagination(); }); on('destroy', () => { if (!swiper.params.a11y.enabled) return; destroy(); }); } function History({ swiper, extendParams, on }) { extendParams({ history: { enabled: false, root: '', replaceState: false, key: 'slides' } }); let initialized = false; let paths = {}; const slugify = text => { return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); }; const getPathValues = urlOverride => { const window = getWindow(); let location; if (urlOverride) { location = new URL(urlOverride); } else { location = window.location; } const pathArray = location.pathname.slice(1).split('/').filter(part => part !== ''); const total = pathArray.length; const key = pathArray[total - 2]; const value = pathArray[total - 1]; return { key, value }; }; const setHistory = (key, index) => { const window = getWindow(); if (!initialized || !swiper.params.history.enabled) return; let location; if (swiper.params.url) { location = new URL(swiper.params.url); } else { location = window.location; } const slide = swiper.slides.eq(index); let value = slugify(slide.attr('data-history')); if (swiper.params.history.root.length > 0) { let root = swiper.params.history.root; if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); value = `${root}/${key}/${value}`; } else if (!location.pathname.includes(key)) { value = `${key}/${value}`; } const currentState = window.history.state; if (currentState && currentState.value === value) { return; } if (swiper.params.history.replaceState) { window.history.replaceState({ value }, null, value); } else { window.history.pushState({ value }, null, value); } }; const scrollToSlide = (speed, value, runCallbacks) => { if (value) { for (let i = 0, length = swiper.slides.length; i < length; i += 1) { const slide = swiper.slides.eq(i); const slideHistory = slugify(slide.attr('data-history')); if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { const index = slide.index(); swiper.slideTo(index, speed, runCallbacks); } } } else { swiper.slideTo(0, speed, runCallbacks); } }; const setHistoryPopState = () => { paths = getPathValues(swiper.params.url); scrollToSlide(swiper.params.speed, swiper.paths.value, false); }; const init = () => { const window = getWindow(); if (!swiper.params.history) return; if (!window.history || !window.history.pushState) { swiper.params.history.enabled = false; swiper.params.hashNavigation.enabled = true; return; } initialized = true; paths = getPathValues(swiper.params.url); if (!paths.key && !paths.value) return; scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit); if (!swiper.params.history.replaceState) { window.addEventListener('popstate', setHistoryPopState); } }; const destroy = () => { const window = getWindow(); if (!swiper.params.history.replaceState) { window.removeEventListener('popstate', setHistoryPopState); } }; on('init', () => { if (swiper.params.history.enabled) { init(); } }); on('destroy', () => { if (swiper.params.history.enabled) { destroy(); } }); on('transitionEnd _freeModeNoMomentumRelease', () => { if (initialized) { setHistory(swiper.params.history.key, swiper.activeIndex); } }); on('slideChange', () => { if (initialized && swiper.params.cssMode) { setHistory(swiper.params.history.key, swiper.activeIndex); } }); } function HashNavigation({ swiper, extendParams, emit, on }) { let initialized = false; const document = getDocument(); const window = getWindow(); extendParams({ hashNavigation: { enabled: false, replaceState: false, watchState: false } }); const onHashChange = () => { emit('hashChange'); const newHash = document.location.hash.replace('#', ''); const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); if (newHash !== activeSlideHash) { const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index(); if (typeof newIndex === 'undefined') return; swiper.slideTo(newIndex); } }; const setHash = () => { if (!initialized || !swiper.params.hashNavigation.enabled) return; if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''); emit('hashSet'); } else { const slide = swiper.slides.eq(swiper.activeIndex); const hash = slide.attr('data-hash') || slide.attr('data-history'); document.location.hash = hash || ''; emit('hashSet'); } }; const init = () => { if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; initialized = true; const hash = document.location.hash.replace('#', ''); if (hash) { const speed = 0; for (let i = 0, length = swiper.slides.length; i < length; i += 1) { const slide = swiper.slides.eq(i); const slideHash = slide.attr('data-hash') || slide.attr('data-history'); if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { const index = slide.index(); swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); } } } if (swiper.params.hashNavigation.watchState) { $(window).on('hashchange', onHashChange); } }; const destroy = () => { if (swiper.params.hashNavigation.watchState) { $(window).off('hashchange', onHashChange); } }; on('init', () => { if (swiper.params.hashNavigation.enabled) { init(); } }); on('destroy', () => { if (swiper.params.hashNavigation.enabled) { destroy(); } }); on('transitionEnd _freeModeNoMomentumRelease', () => { if (initialized) { setHash(); } }); on('slideChange', () => { if (initialized && swiper.params.cssMode) { setHash(); } }); } /* eslint no-underscore-dangle: "off" */ function Autoplay({ swiper, extendParams, on, emit }) { let timeout; swiper.autoplay = { running: false, paused: false }; extendParams({ autoplay: { enabled: false, delay: 3000, waitForTransition: true, disableOnInteraction: true, stopOnLastSlide: false, reverseDirection: false, pauseOnMouseEnter: false } }); function run() { const $activeSlideEl = swiper.slides.eq(swiper.activeIndex); let delay = swiper.params.autoplay.delay; if ($activeSlideEl.attr('data-swiper-autoplay')) { delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; } clearTimeout(timeout); timeout = nextTick(() => { let autoplayResult; if (swiper.params.autoplay.reverseDirection) { if (swiper.params.loop) { swiper.loopFix(); autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); emit('autoplay'); } else if (!swiper.isBeginning) { autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); emit('autoplay'); } else if (!swiper.params.autoplay.stopOnLastSlide) { autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); emit('autoplay'); } else { stop(); } } else if (swiper.params.loop) { swiper.loopFix(); autoplayResult = swiper.slideNext(swiper.params.speed, true, true); emit('autoplay'); } else if (!swiper.isEnd) { autoplayResult = swiper.slideNext(swiper.params.speed, true, true); emit('autoplay'); } else if (!swiper.params.autoplay.stopOnLastSlide) { autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true); emit('autoplay'); } else { stop(); } if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) { run(); } }, delay); } function start() { if (typeof timeout !== 'undefined') return false; if (swiper.autoplay.running) return false; swiper.autoplay.running = true; emit('autoplayStart'); run(); return true; } function stop() { if (!swiper.autoplay.running) return false; if (typeof timeout === 'undefined') return false; if (timeout) { clearTimeout(timeout); timeout = undefined; } swiper.autoplay.running = false; emit('autoplayStop'); return true; } function pause(speed) { if (!swiper.autoplay.running) return; if (swiper.autoplay.paused) return; if (timeout) clearTimeout(timeout); swiper.autoplay.paused = true; if (speed === 0 || !swiper.params.autoplay.waitForTransition) { swiper.autoplay.paused = false; run(); } else { ['transitionend', 'webkitTransitionEnd'].forEach(event => { swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd); }); } } function onVisibilityChange() { const document = getDocument(); if (document.visibilityState === 'hidden' && swiper.autoplay.running) { pause(); } if (document.visibilityState === 'visible' && swiper.autoplay.paused) { run(); swiper.autoplay.paused = false; } } function onTransitionEnd(e) { if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; if (e.target !== swiper.$wrapperEl[0]) return; ['transitionend', 'webkitTransitionEnd'].forEach(event => { swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd); }); swiper.autoplay.paused = false; if (!swiper.autoplay.running) { stop(); } else { run(); } } function onMouseEnter() { if (swiper.params.autoplay.disableOnInteraction) { stop(); } else { pause(); } ['transitionend', 'webkitTransitionEnd'].forEach(event => { swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd); }); } function onMouseLeave() { if (swiper.params.autoplay.disableOnInteraction) { return; } swiper.autoplay.paused = false; run(); } function attachMouseEvents() { if (swiper.params.autoplay.pauseOnMouseEnter) { swiper.$el.on('mouseenter', onMouseEnter); swiper.$el.on('mouseleave', onMouseLeave); } } function detachMouseEvents() { swiper.$el.off('mouseenter', onMouseEnter); swiper.$el.off('mouseleave', onMouseLeave); } on('init', () => { if (swiper.params.autoplay.enabled) { start(); const document = getDocument(); document.addEventListener('visibilitychange', onVisibilityChange); attachMouseEvents(); } }); on('beforeTransitionStart', (_s, speed, internal) => { if (swiper.autoplay.running) { if (internal || !swiper.params.autoplay.disableOnInteraction) { swiper.autoplay.pause(speed); } else { stop(); } } }); on('sliderFirstMove', () => { if (swiper.autoplay.running) { if (swiper.params.autoplay.disableOnInteraction) { stop(); } else { pause(); } } }); on('touchEnd', () => { if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { run(); } }); on('destroy', () => { detachMouseEvents(); if (swiper.autoplay.running) { stop(); } const document = getDocument(); document.removeEventListener('visibilitychange', onVisibilityChange); }); Object.assign(swiper.autoplay, { pause, run, start, stop }); } function Thumb({ swiper, extendParams, on }) { extendParams({ thumbs: { swiper: null, multipleActiveThumbs: true, autoScrollOffset: 0, slideThumbActiveClass: 'swiper-slide-thumb-active', thumbsContainerClass: 'swiper-thumbs' } }); let initialized = false; let swiperCreated = false; swiper.thumbs = { swiper: null }; function onThumbClick() { const thumbsSwiper = swiper.thumbs.swiper; if (!thumbsSwiper) return; const clickedIndex = thumbsSwiper.clickedIndex; const clickedSlide = thumbsSwiper.clickedSlide; if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; let slideToIndex; if (thumbsSwiper.params.loop) { slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); } else { slideToIndex = clickedIndex; } if (swiper.params.loop) { let currentIndex = swiper.activeIndex; if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { swiper.loopFix(); // eslint-disable-next-line swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; currentIndex = swiper.activeIndex; } const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex; } swiper.slideTo(slideToIndex); } function init() { const { thumbs: thumbsParams } = swiper.params; if (initialized) return false; initialized = true; const SwiperClass = swiper.constructor; if (thumbsParams.swiper instanceof SwiperClass) { swiper.thumbs.swiper = thumbsParams.swiper; Object.assign(swiper.thumbs.swiper.originalParams, { watchSlidesProgress: true, slideToClickedSlide: false }); Object.assign(swiper.thumbs.swiper.params, { watchSlidesProgress: true, slideToClickedSlide: false }); } else if (isObject(thumbsParams.swiper)) { const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper); Object.assign(thumbsSwiperParams, { watchSlidesProgress: true, slideToClickedSlide: false }); swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams); swiperCreated = true; } swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); swiper.thumbs.swiper.on('tap', onThumbClick); return true; } function update(initial) { const thumbsSwiper = swiper.thumbs.swiper; if (!thumbsSwiper) return; const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { let currentThumbsIndex = thumbsSwiper.activeIndex; let newThumbsIndex; let direction; if (thumbsSwiper.params.loop) { if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { thumbsSwiper.loopFix(); // eslint-disable-next-line thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; currentThumbsIndex = thumbsSwiper.activeIndex; } // Find actual thumbs index to slide to const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0).index(); const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0).index(); if (typeof prevThumbsIndex === 'undefined') { newThumbsIndex = nextThumbsIndex; } else if (typeof nextThumbsIndex === 'undefined') { newThumbsIndex = prevThumbsIndex; } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex; } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { newThumbsIndex = nextThumbsIndex; } else { newThumbsIndex = prevThumbsIndex; } direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; } else { newThumbsIndex = swiper.realIndex; direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; } if (useOffset) { newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; } if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { if (thumbsSwiper.params.centeredSlides) { if (newThumbsIndex > currentThumbsIndex) { newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; } else { newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; } } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ; thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); } } // Activate thumbs let thumbsToActivate = 1; const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { thumbsToActivate = swiper.params.slidesPerView; } if (!swiper.params.thumbs.multipleActiveThumbs) { thumbsToActivate = 1; } thumbsToActivate = Math.floor(thumbsToActivate); thumbsSwiper.slides.removeClass(thumbActiveClass); if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { for (let i = 0; i < thumbsToActivate; i += 1) { thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass); } } else { for (let i = 0; i < thumbsToActivate; i += 1) { thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass); } } } on('beforeInit', () => { const { thumbs } = swiper.params; if (!thumbs || !thumbs.swiper) return; init(); update(true); }); on('slideChange update resize observerUpdate', () => { if (!swiper.thumbs.swiper) return; update(); }); on('setTransition', (_s, duration) => { const thumbsSwiper = swiper.thumbs.swiper; if (!thumbsSwiper) return; thumbsSwiper.setTransition(duration); }); on('beforeDestroy', () => { const thumbsSwiper = swiper.thumbs.swiper; if (!thumbsSwiper) return; if (swiperCreated && thumbsSwiper) { thumbsSwiper.destroy(); } }); Object.assign(swiper.thumbs, { init, update }); } function freeMode({ swiper, extendParams, emit, once }) { extendParams({ freeMode: { enabled: false, momentum: true, momentumRatio: 1, momentumBounce: true, momentumBounceRatio: 1, momentumVelocityRatio: 1, sticky: false, minimumVelocity: 0.02 } }); function onTouchMove() { const { touchEventsData: data, touches } = swiper; // Velocity if (data.velocities.length === 0) { data.velocities.push({ position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], time: data.touchStartTime }); } data.velocities.push({ position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], time: now() }); } function onTouchEnd({ currentPos }) { const { params, $wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper; // Time diff const touchEndTime = now(); const timeDiff = touchEndTime - data.touchStartTime; if (currentPos < -swiper.minTranslate()) { swiper.slideTo(swiper.activeIndex); return; } if (currentPos > -swiper.maxTranslate()) { if (swiper.slides.length < snapGrid.length) { swiper.slideTo(snapGrid.length - 1); } else { swiper.slideTo(swiper.slides.length - 1); } return; } if (params.freeMode.momentum) { if (data.velocities.length > 1) { const lastMoveEvent = data.velocities.pop(); const velocityEvent = data.velocities.pop(); const distance = lastMoveEvent.position - velocityEvent.position; const time = lastMoveEvent.time - velocityEvent.time; swiper.velocity = distance / time; swiper.velocity /= 2; if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) { swiper.velocity = 0; } // this implies that the user stopped moving a finger then released. // There would be no events with distance zero, so the last event is stale. if (time > 150 || now() - lastMoveEvent.time > 300) { swiper.velocity = 0; } } else { swiper.velocity = 0; } swiper.velocity *= params.freeMode.momentumVelocityRatio; data.velocities.length = 0; let momentumDuration = 1000 * params.freeMode.momentumRatio; const momentumDistance = swiper.velocity * momentumDuration; let newPosition = swiper.translate + momentumDistance; if (rtl) newPosition = -newPosition; let doBounce = false; let afterBouncePosition; const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio; let needsLoopFix; if (newPosition < swiper.maxTranslate()) { if (params.freeMode.momentumBounce) { if (newPosition + swiper.maxTranslate() < -bounceAmount) { newPosition = swiper.maxTranslate() - bounceAmount; } afterBouncePosition = swiper.maxTranslate(); doBounce = true; data.allowMomentumBounce = true; } else { newPosition = swiper.maxTranslate(); } if (params.loop && params.centeredSlides) needsLoopFix = true; } else if (newPosition > swiper.minTranslate()) { if (params.freeMode.momentumBounce) { if (newPosition - swiper.minTranslate() > bounceAmount) { newPosition = swiper.minTranslate() + bounceAmount; } afterBouncePosition = swiper.minTranslate(); doBounce = true; data.allowMomentumBounce = true; } else { newPosition = swiper.minTranslate(); } if (params.loop && params.centeredSlides) needsLoopFix = true; } else if (params.freeMode.sticky) { let nextSlide; for (let j = 0; j < snapGrid.length; j += 1) { if (snapGrid[j] > -newPosition) { nextSlide = j; break; } } if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { newPosition = snapGrid[nextSlide]; } else { newPosition = snapGrid[nextSlide - 1]; } newPosition = -newPosition; } if (needsLoopFix) { once('transitionEnd', () => { swiper.loopFix(); }); } // Fix duration if (swiper.velocity !== 0) { if (rtl) { momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); } else { momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); } if (params.freeMode.sticky) { // If freeMode.sticky is active and the user ends a swipe with a slow-velocity // event, then durations can be 20+ seconds to slide one (or zero!) slides. // It's easy to see this when simulating touch with mouse events. To fix this, // limit single-slide swipes to the default slide duration. This also has the // nice side effect of matching slide speed if the user stopped moving before // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. // For faster swipes, also apply limits (albeit higher ones). const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; if (moveDistance < currentSlideSize) { momentumDuration = params.speed; } else if (moveDistance < 2 * currentSlideSize) { momentumDuration = params.speed * 1.5; } else { momentumDuration = params.speed * 2.5; } } } else if (params.freeMode.sticky) { swiper.slideToClosest(); return; } if (params.freeMode.momentumBounce && doBounce) { swiper.updateProgress(afterBouncePosition); swiper.setTransition(momentumDuration); swiper.setTranslate(newPosition); swiper.transitionStart(true, swiper.swipeDirection); swiper.animating = true; $wrapperEl.transitionEnd(() => { if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; emit('momentumBounce'); swiper.setTransition(params.speed); setTimeout(() => { swiper.setTranslate(afterBouncePosition); $wrapperEl.transitionEnd(() => { if (!swiper || swiper.destroyed) return; swiper.transitionEnd(); }); }, 0); }); } else if (swiper.velocity) { emit('_freeModeNoMomentumRelease'); swiper.updateProgress(newPosition); swiper.setTransition(momentumDuration); swiper.setTranslate(newPosition); swiper.transitionStart(true, swiper.swipeDirection); if (!swiper.animating) { swiper.animating = true; $wrapperEl.transitionEnd(() => { if (!swiper || swiper.destroyed) return; swiper.transitionEnd(); }); } } else { swiper.updateProgress(newPosition); } swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } else if (params.freeMode.sticky) { swiper.slideToClosest(); return; } else if (params.freeMode) { emit('_freeModeNoMomentumRelease'); } if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) { swiper.updateProgress(); swiper.updateActiveIndex(); swiper.updateSlidesClasses(); } } Object.assign(swiper, { freeMode: { onTouchMove, onTouchEnd } }); } function Grid({ swiper, extendParams }) { extendParams({ grid: { rows: 1, fill: 'column' } }); let slidesNumberEvenToRows; let slidesPerRow; let numFullColumns; const initSlides = slidesLength => { const { slidesPerView } = swiper.params; const { rows, fill } = swiper.params.grid; slidesPerRow = slidesNumberEvenToRows / rows; numFullColumns = Math.floor(slidesLength / rows); if (Math.floor(slidesLength / rows) === slidesLength / rows) { slidesNumberEvenToRows = slidesLength; } else { slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows; } if (slidesPerView !== 'auto' && fill === 'row') { slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows); } }; const updateSlide = (i, slide, slidesLength, getDirectionLabel) => { const { slidesPerGroup, spaceBetween } = swiper.params; const { rows, fill } = swiper.params.grid; // Set slides order let newSlideOrderIndex; let column; let row; if (fill === 'row' && slidesPerGroup > 1) { const groupIndex = Math.floor(i / (slidesPerGroup * rows)); const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex; const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup); row = Math.floor(slideIndexInGroup / columnsInGroup); column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup; newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows; slide.css({ '-webkit-order': newSlideOrderIndex, order: newSlideOrderIndex }); } else if (fill === 'column') { column = Math.floor(i / rows); row = i - column * rows; if (column > numFullColumns || column === numFullColumns && row === rows - 1) { row += 1; if (row >= rows) { row = 0; column += 1; } } } else { row = Math.floor(i / slidesPerRow); column = i - row * slidesPerRow; } slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : ''); }; const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => { const { spaceBetween, centeredSlides, roundLengths } = swiper.params; const { rows } = swiper.params.grid; swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows; swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween; swiper.$wrapperEl.css({ [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px` }); if (centeredSlides) { snapGrid.splice(0, snapGrid.length); const newSlidesGrid = []; for (let i = 0; i < snapGrid.length; i += 1) { let slidesGridItem = snapGrid[i]; if (roundLengths) slidesGridItem = Math.floor(slidesGridItem); if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); } snapGrid.push(...newSlidesGrid); } }; swiper.grid = { initSlides, updateSlide, updateWrapperSize }; } function appendSlide(slides) { const swiper = this; const { $wrapperEl, params } = swiper; if (params.loop) { swiper.loopDestroy(); } if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) $wrapperEl.append(slides[i]); } } else { $wrapperEl.append(slides); } if (params.loop) { swiper.loopCreate(); } if (!params.observer) { swiper.update(); } } function prependSlide(slides) { const swiper = this; const { params, $wrapperEl, activeIndex } = swiper; if (params.loop) { swiper.loopDestroy(); } let newActiveIndex = activeIndex + 1; if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) $wrapperEl.prepend(slides[i]); } newActiveIndex = activeIndex + slides.length; } else { $wrapperEl.prepend(slides); } if (params.loop) { swiper.loopCreate(); } if (!params.observer) { swiper.update(); } swiper.slideTo(newActiveIndex, 0, false); } function addSlide(index, slides) { const swiper = this; const { $wrapperEl, params, activeIndex } = swiper; let activeIndexBuffer = activeIndex; if (params.loop) { activeIndexBuffer -= swiper.loopedSlides; swiper.loopDestroy(); swiper.slides = $wrapperEl.children(`.${params.slideClass}`); } const baseLength = swiper.slides.length; if (index <= 0) { swiper.prependSlide(slides); return; } if (index >= baseLength) { swiper.appendSlide(slides); return; } let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; const slidesBuffer = []; for (let i = baseLength - 1; i >= index; i -= 1) { const currentSlide = swiper.slides.eq(i); currentSlide.remove(); slidesBuffer.unshift(currentSlide); } if (typeof slides === 'object' && 'length' in slides) { for (let i = 0; i < slides.length; i += 1) { if (slides[i]) $wrapperEl.append(slides[i]); } newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; } else { $wrapperEl.append(slides); } for (let i = 0; i < slidesBuffer.length; i += 1) { $wrapperEl.append(slidesBuffer[i]); } if (params.loop) { swiper.loopCreate(); } if (!params.observer) { swiper.update(); } if (params.loop) { swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); } else { swiper.slideTo(newActiveIndex, 0, false); } } function removeSlide(slidesIndexes) { const swiper = this; const { params, $wrapperEl, activeIndex } = swiper; let activeIndexBuffer = activeIndex; if (params.loop) { activeIndexBuffer -= swiper.loopedSlides; swiper.loopDestroy(); swiper.slides = $wrapperEl.children(`.${params.slideClass}`); } let newActiveIndex = activeIndexBuffer; let indexToRemove; if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { for (let i = 0; i < slidesIndexes.length; i += 1) { indexToRemove = slidesIndexes[i]; if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); if (indexToRemove < newActiveIndex) newActiveIndex -= 1; } newActiveIndex = Math.max(newActiveIndex, 0); } else { indexToRemove = slidesIndexes; if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); if (indexToRemove < newActiveIndex) newActiveIndex -= 1; newActiveIndex = Math.max(newActiveIndex, 0); } if (params.loop) { swiper.loopCreate(); } if (!params.observer) { swiper.update(); } if (params.loop) { swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); } else { swiper.slideTo(newActiveIndex, 0, false); } } function removeAllSlides() { const swiper = this; const slidesIndexes = []; for (let i = 0; i < swiper.slides.length; i += 1) { slidesIndexes.push(i); } swiper.removeSlide(slidesIndexes); } function Manipulation({ swiper }) { Object.assign(swiper, { appendSlide: appendSlide.bind(swiper), prependSlide: prependSlide.bind(swiper), addSlide: addSlide.bind(swiper), removeSlide: removeSlide.bind(swiper), removeAllSlides: removeAllSlides.bind(swiper) }); } function effectInit(params) { const { effect, swiper, on, setTranslate, setTransition, overwriteParams, perspective } = params; on('beforeInit', () => { if (swiper.params.effect !== effect) return; swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`); if (perspective && perspective()) { swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); } const overwriteParamsResult = overwriteParams ? overwriteParams() : {}; Object.assign(swiper.params, overwriteParamsResult); Object.assign(swiper.originalParams, overwriteParamsResult); }); on('setTranslate', () => { if (swiper.params.effect !== effect) return; setTranslate(); }); on('setTransition', (_s, duration) => { if (swiper.params.effect !== effect) return; setTransition(duration); }); } function effectTarget(effectParams, $slideEl) { if (effectParams.transformEl) { return $slideEl.find(effectParams.transformEl).css({ 'backface-visibility': 'hidden', '-webkit-backface-visibility': 'hidden' }); } return $slideEl; } function effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides }) { const { slides, activeIndex, $wrapperEl } = swiper; if (swiper.params.virtualTranslate && duration !== 0) { let eventTriggered = false; let $transitionEndTarget; if (allSlides) { $transitionEndTarget = transformEl ? slides.find(transformEl) : slides; } else { $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex); } $transitionEndTarget.transitionEnd(() => { if (eventTriggered) return; if (!swiper || swiper.destroyed) return; eventTriggered = true; swiper.animating = false; const triggerEvents = ['webkitTransitionEnd', 'transitionend']; for (let i = 0; i < triggerEvents.length; i += 1) { $wrapperEl.trigger(triggerEvents[i]); } }); } } function EffectFade({ swiper, extendParams, on }) { extendParams({ fadeEffect: { crossFade: false, transformEl: null } }); const setTranslate = () => { const { slides } = swiper; const params = swiper.params.fadeEffect; for (let i = 0; i < slides.length; i += 1) { const $slideEl = swiper.slides.eq(i); const offset = $slideEl[0].swiperSlideOffset; let tx = -offset; if (!swiper.params.virtualTranslate) tx -= swiper.translate; let ty = 0; if (!swiper.isHorizontal()) { ty = tx; tx = 0; } const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); const $targetEl = effectTarget(params, $slideEl); $targetEl.css({ opacity: slideOpacity }).transform(`translate3d(${tx}px, ${ty}px, 0px)`); } }; const setTransition = duration => { const { transformEl } = swiper.params.fadeEffect; const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; $transitionElements.transition(duration); effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true }); }; effectInit({ effect: 'fade', swiper, on, setTranslate, setTransition, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: true, spaceBetween: 0, virtualTranslate: !swiper.params.cssMode }) }); } function EffectCube({ swiper, extendParams, on }) { extendParams({ cubeEffect: { slideShadows: true, shadow: true, shadowOffset: 20, shadowScale: 0.94 } }); const setTranslate = () => { const { $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize, browser } = swiper; const params = swiper.params.cubeEffect; const isHorizontal = swiper.isHorizontal(); const isVirtual = swiper.virtual && swiper.params.virtual.enabled; let wrapperRotate = 0; let $cubeShadowEl; if (params.shadow) { if (isHorizontal) { $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); if ($cubeShadowEl.length === 0) { $cubeShadowEl = $('
'); $wrapperEl.append($cubeShadowEl); } $cubeShadowEl.css({ height: `${swiperWidth}px` }); } else { $cubeShadowEl = $el.find('.swiper-cube-shadow'); if ($cubeShadowEl.length === 0) { $cubeShadowEl = $('
'); $el.append($cubeShadowEl); } } } for (let i = 0; i < slides.length; i += 1) { const $slideEl = slides.eq(i); let slideIndex = i; if (isVirtual) { slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); } let slideAngle = slideIndex * 90; let round = Math.floor(slideAngle / 360); if (rtl) { slideAngle = -slideAngle; round = Math.floor(-slideAngle / 360); } const progress = Math.max(Math.min($slideEl[0].progress, 1), -1); let tx = 0; let ty = 0; let tz = 0; if (slideIndex % 4 === 0) { tx = -round * 4 * swiperSize; tz = 0; } else if ((slideIndex - 1) % 4 === 0) { tx = 0; tz = -round * 4 * swiperSize; } else if ((slideIndex - 2) % 4 === 0) { tx = swiperSize + round * 4 * swiperSize; tz = swiperSize; } else if ((slideIndex - 3) % 4 === 0) { tx = -swiperSize; tz = 3 * swiperSize + swiperSize * 4 * round; } if (rtl) { tx = -tx; } if (!isHorizontal) { ty = tx; tx = 0; } const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; if (progress <= 1 && progress > -1) { wrapperRotate = slideIndex * 90 + progress * 90; if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; } $slideEl.transform(transform); if (params.slideShadows) { // Set shadows let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); if (shadowBefore.length === 0) { shadowBefore = $(`
`); $slideEl.append(shadowBefore); } if (shadowAfter.length === 0) { shadowAfter = $(`
`); $slideEl.append(shadowAfter); } if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); } } $wrapperEl.css({ '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`, 'transform-origin': `50% 50% -${swiperSize / 2}px` }); if (params.shadow) { if (isHorizontal) { $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`); } else { const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); const scale1 = params.shadowScale; const scale2 = params.shadowScale / multiplier; const offset = params.shadowOffset; $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`); } } const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0; $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`); }; const setTransition = duration => { const { $el, slides } = swiper; slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { $el.find('.swiper-cube-shadow').transition(duration); } }; effectInit({ effect: 'cube', swiper, on, setTranslate, setTransition, perspective: () => true, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: true, resistanceRatio: 0, spaceBetween: 0, centeredSlides: false, virtualTranslate: true }) }); } function createShadow(params, $slideEl, side) { const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`; const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl; let $shadowEl = $shadowContainer.children(`.${shadowClass}`); if (!$shadowEl.length) { $shadowEl = $(`
`); $shadowContainer.append($shadowEl); } return $shadowEl; } function EffectFlip({ swiper, extendParams, on }) { extendParams({ flipEffect: { slideShadows: true, limitRotation: true, transformEl: null } }); const setTranslate = () => { const { slides, rtlTranslate: rtl } = swiper; const params = swiper.params.flipEffect; for (let i = 0; i < slides.length; i += 1) { const $slideEl = slides.eq(i); let progress = $slideEl[0].progress; if (swiper.params.flipEffect.limitRotation) { progress = Math.max(Math.min($slideEl[0].progress, 1), -1); } const offset = $slideEl[0].swiperSlideOffset; const rotate = -180 * progress; let rotateY = rotate; let rotateX = 0; let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset; let ty = 0; if (!swiper.isHorizontal()) { ty = tx; tx = 0; rotateX = -rotateY; rotateY = 0; } else if (rtl) { rotateY = -rotateY; } $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; if (params.slideShadows) { // Set shadows let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); if (shadowBefore.length === 0) { shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top'); } if (shadowAfter.length === 0) { shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom'); } if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); } const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; const $targetEl = effectTarget(params, $slideEl); $targetEl.transform(transform); } }; const setTransition = duration => { const { transformEl } = swiper.params.flipEffect; const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); effectVirtualTransitionEnd({ swiper, duration, transformEl }); }; effectInit({ effect: 'flip', swiper, on, setTranslate, setTransition, perspective: () => true, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: true, spaceBetween: 0, virtualTranslate: !swiper.params.cssMode }) }); } function EffectCoverflow({ swiper, extendParams, on }) { extendParams({ coverflowEffect: { rotate: 50, stretch: 0, depth: 100, scale: 1, modifier: 1, slideShadows: true, transformEl: null } }); const setTranslate = () => { const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper; const params = swiper.params.coverflowEffect; const isHorizontal = swiper.isHorizontal(); const transform = swiper.translate; const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; const rotate = isHorizontal ? params.rotate : -params.rotate; const translate = params.depth; // Each slide offset from center for (let i = 0, length = slides.length; i < length; i += 1) { const $slideEl = slides.eq(i); const slideSize = slidesSizesGrid[i]; const slideOffset = $slideEl[0].swiperSlideOffset; const offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier; let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0 let translateZ = -translate * Math.abs(offsetMultiplier); let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { stretch = parseFloat(params.stretch) / 100 * slideSize; } let translateY = isHorizontal ? 0 : stretch * offsetMultiplier; let translateX = isHorizontal ? stretch * offsetMultiplier : 0; let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values if (Math.abs(translateX) < 0.001) translateX = 0; if (Math.abs(translateY) < 0.001) translateY = 0; if (Math.abs(translateZ) < 0.001) translateZ = 0; if (Math.abs(rotateY) < 0.001) rotateY = 0; if (Math.abs(rotateX) < 0.001) rotateX = 0; if (Math.abs(scale) < 0.001) scale = 0; const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; const $targetEl = effectTarget(params, $slideEl); $targetEl.transform(slideTransform); $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; if (params.slideShadows) { // Set shadows let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); if ($shadowBeforeEl.length === 0) { $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top'); } if ($shadowAfterEl.length === 0) { $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom'); } if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; } } }; const setTransition = duration => { const { transformEl } = swiper.params.coverflowEffect; const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); }; effectInit({ effect: 'coverflow', swiper, on, setTranslate, setTransition, perspective: () => true, overwriteParams: () => ({ watchSlidesProgress: true }) }); } function EffectCreative({ swiper, extendParams, on }) { extendParams({ creativeEffect: { transformEl: null, limitProgress: 1, shadowPerProgress: false, progressMultiplier: 1, perspective: true, prev: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1 }, next: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1 } } }); const getTranslateValue = value => { if (typeof value === 'string') return value; return `${value}px`; }; const setTranslate = () => { const { slides, $wrapperEl, slidesSizesGrid } = swiper; const params = swiper.params.creativeEffect; const { progressMultiplier: multiplier } = params; const isCenteredSlides = swiper.params.centeredSlides; if (isCenteredSlides) { const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0; $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`); } for (let i = 0; i < slides.length; i += 1) { const $slideEl = slides.eq(i); const slideProgress = $slideEl[0].progress; const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress); let originalProgress = progress; if (!isCenteredSlides) { originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress); } const offset = $slideEl[0].swiperSlideOffset; const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0]; const r = [0, 0, 0]; let custom = false; if (!swiper.isHorizontal()) { t[1] = t[0]; t[0] = 0; } let data = { translate: [0, 0, 0], rotate: [0, 0, 0], scale: 1, opacity: 1 }; if (progress < 0) { data = params.next; custom = true; } else if (progress > 0) { data = params.prev; custom = true; } // set translate t.forEach((value, index) => { t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`; }); // set rotates r.forEach((value, index) => { r[index] = data.rotate[index] * Math.abs(progress * multiplier); }); $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; const translateString = t.join(', '); const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`; const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`; const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier; const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows if (custom && data.shadow || !custom) { let $shadowEl = $slideEl.children('.swiper-slide-shadow'); if ($shadowEl.length === 0 && data.shadow) { $shadowEl = createShadow(params, $slideEl); } if ($shadowEl.length) { const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress; $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1); } } const $targetEl = effectTarget(params, $slideEl); $targetEl.transform(transform).css({ opacity: opacityString }); if (data.origin) { $targetEl.css('transform-origin', data.origin); } } }; const setTransition = duration => { const { transformEl } = swiper.params.creativeEffect; const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration); effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true }); }; effectInit({ effect: 'creative', swiper, on, setTranslate, setTransition, perspective: () => swiper.params.creativeEffect.perspective, overwriteParams: () => ({ watchSlidesProgress: true, virtualTranslate: !swiper.params.cssMode }) }); } function EffectCards({ swiper, extendParams, on }) { extendParams({ cardsEffect: { slideShadows: true, transformEl: null } }); const setTranslate = () => { const { slides, activeIndex } = swiper; const params = swiper.params.cardsEffect; const { startTranslate, isTouched } = swiper.touchEventsData; const currentTranslate = swiper.translate; for (let i = 0; i < slides.length; i += 1) { const $slideEl = slides.eq(i); const slideProgress = $slideEl[0].progress; const progress = Math.min(Math.max(slideProgress, -4), 4); let offset = $slideEl[0].swiperSlideOffset; if (swiper.params.centeredSlides && !swiper.params.cssMode) { swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`); } if (swiper.params.centeredSlides && swiper.params.cssMode) { offset -= slides[0].swiperSlideOffset; } let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset; let tY = 0; const tZ = -100 * Math.abs(progress); let scale = 1; let rotate = -2 * progress; let tXAdd = 8 - Math.abs(progress) * 0.75; const isSwipeToNext = (i === activeIndex || i === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate; const isSwipeToPrev = (i === activeIndex || i === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate; if (isSwipeToNext || isSwipeToPrev) { const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5; rotate += -28 * progress * subProgress; scale += -0.5 * subProgress; tXAdd += 96 * subProgress; tY = `${-25 * subProgress * Math.abs(progress)}%`; } if (progress < 0) { // next tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`; } else if (progress > 0) { // prev tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`; } else { tX = `${tX}px`; } if (!swiper.isHorizontal()) { const prevY = tY; tY = tX; tX = prevY; } const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`; const transform = ` translate3d(${tX}, ${tY}, ${tZ}px) rotateZ(${rotate}deg) scale(${scaleString}) `; if (params.slideShadows) { // Set shadows let $shadowEl = $slideEl.find('.swiper-slide-shadow'); if ($shadowEl.length === 0) { $shadowEl = createShadow(params, $slideEl); } if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1); } $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; const $targetEl = effectTarget(params, $slideEl); $targetEl.transform(transform); } }; const setTransition = duration => { const { transformEl } = swiper.params.cardsEffect; const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration); effectVirtualTransitionEnd({ swiper, duration, transformEl }); }; effectInit({ effect: 'cards', swiper, on, setTranslate, setTransition, perspective: () => true, overwriteParams: () => ({ watchSlidesProgress: true, virtualTranslate: !swiper.params.cssMode }) }); } // Swiper Class const modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards]; Swiper.use(modules); return Swiper; }))); //# sourceMappingURL=swiper-bundle.js.mapassets/js/glightbox.min.js000064400000153446147600374750011623 0ustar00!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).GLightbox=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return k(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(" "),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(" "),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if("function"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||""===t)return!1;if("none"==t)return T(i)&&i(),!1;var n=x(),s=t.split(" ");o(s,(function(t){h(e,"g"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,"g"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(""==t)return e.style.webkitTransform="",e.style.MozTransform="",e.style.msTransform="",e.style.OTransform="",e.style.transform="",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display="block"}function p(e){e.style.display="none"}function m(e){var t=document.createDocumentFragment(),i=document.createElement("div");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error("Inject assets error");else if(T(t)&&(i=t,t=!1),k(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(".css")){if((n=document.querySelectorAll('link[href="'+e+'"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName("head")[0],l=s.querySelectorAll('link[rel="stylesheet"]'),o=document.createElement("link");return o.rel="stylesheet",o.type="text/css",o.href=e,o.media="all",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src="'+e+'"]'))&&n.length>0){if(T(i)){if(k(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement("script");r.type="text/javascript",r.src=e,r.onload=function(){if(T(i)){if(k(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return"navigator"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return"function"==typeof e}function k(e){return"string"==typeof e}function C(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return"object"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function X(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(".gbtn[data-taborder]:not(.disabled)");if(!t.length)return!1;if(1==t.length)return t[0];"string"==typeof e&&(e=parseInt(e));var i=e<0?1:e+1;i>t.length&&(i="1");var n=[];o(t,(function(e){n.push(e.getAttribute("data-taborder"))}));var s=n.filter((function(e){return e>=parseInt(i)})),l=s.sort()[0];return document.querySelector('.gbtn[data-taborder="'.concat(l,'"]'))}function z(e){if(e.events.hasOwnProperty("keyboard"))return!1;e.events.keyboard=a("keydown",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(".gbtn.focused");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if("input"==l||"textarea"==l||"button"==l)return}t.preventDefault();var o=document.querySelectorAll(".gbtn[data-taborder]");if(!o||o.length<=0)return;if(!s){var r=X();return void(r&&(r.focus(),h(r,"focused")))}var a=X(s.getAttribute("data-taborder"));d(s,"focused"),a&&(a.focus(),h(a,"focused"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:"add",value:function(e){this.handlers.push(e)}},{key:"del",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:"dispatch",value:function(){for(var e=0,t=this.handlers.length;e0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}},{key:"move",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:"end",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:"cancelAll",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:"cancel",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:"_cancelLongTap",value:function(){clearTimeout(this.longTapTimeout)}},{key:"_cancelSingleTap",value:function(){clearTimeout(this.singleTapTimeout)}},{key:"_swipeDirection",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?"Left":"Right":i-n>0?"Up":"Down"}},{key:"on",value:function(e,t){this[e]&&this[e].add(t)}},{key:"off",value:function(e,t){this[e]&&this[e].del(t)}},{key:"destroy",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener("touchstart",this.start),this.element.removeEventListener("touchmove",this.move),this.element.removeEventListener("touchend",this.end),this.element.removeEventListener("touchcancel",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener("scroll",this._cancelAllHandler),null}}]),e}();function B(e){var t=function(){var e,t=document.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=c(e,"gslide-media")?e:e.querySelector(".gslide-media"),n=e.querySelector(".gslide-description");h(i,"greset"),v(i,"translate3d(0, 0, 0)"),a(t,{onElement:i,once:!0,withCallback:function(e,t){d(i,"greset")}}),i.style.opacity="",n&&(n.style.opacity="")}function W(e){if(e.events.hasOwnProperty("touch"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,k=null,C=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,X=0,z=document.getElementById("glightbox-slider"),Y=document.querySelector(".goverlay"),q=new _(z,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,"ginner-container")||u(t.targetTouches[0].target,".gslide-desc")||"a"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,".gslide-inline")&&!c(t.targetTouches[0].target.parentNode,"gslide-inline")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,X=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(".gslide-media"),n=a.querySelector(".gslide-inline"),f=null,c(g,"gslide-image")&&(f=g.querySelector("img")),d(Y,"greset"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=X-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,"translate3d(".concat(E,"%, 0, 0)"));v(g,"translate3d(".concat(E,"%, ").concat(A,"%, 0)"))}},touchEnd:function(){if(r){if(p=!1,S||b)return k=w,void(C=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,"greset"),Y.style.opacity=1,B(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,C=null,k=null,w=null,T=null,void f.setAttribute("style","");t>4.5&&(t=4.5),f.style.transform="scale3d(".concat(t,", ").concat(t,", 1)"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;k&&(t+=k),C&&(i+=C),w=t,T=i;var n="translate3d(".concat(t,"px, ").concat(i,"px, 0)");x&&(n+=" scale3d(".concat(x,", ").concat(x,", 1)")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if("Left"==t.direction){if(e.index==e.elements.length-1)return B(g);e.nextSlide()}if("Right"==t.direction){if(0==e.index)return B(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener("mousedown",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener("mouseup",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener("mousemove",(function(e){return s.drag(e)}),!1),this.img.addEventListener("click",(function(e){return s.slide.classList.contains("dragging-nav")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:"zoomIn",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute("data-style",t.getAttribute("style")),t.style.maxWidth=t.naturalWidth+"px",t.style.maxHeight=t.naturalHeight+"px",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add("zoomed"),this.zoomedIn=!0}}},{key:"zoomOut",value:function(){this.img.parentNode.setAttribute("style",""),this.img.setAttribute("style",this.img.getAttribute("data-style")),this.slide.classList.remove("zoomed"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&"function"==typeof this.onclose&&this.onclose()}},{key:"dragStart",value:function(e){e.preventDefault(),this.zoomedIn?("touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add("dragging"))):this.active=!1}},{key:"dragEnd",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove("dragging")}),100)}},{key:"drag",value:function(e){this.active&&(e.preventDefault(),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:"onMove",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:"setTranslate",value:function(e,t,i){e.style.transform="translate3d("+t+"px, "+i+"px, 0)"}},{key:"widowWidth",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener("mousedown",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener("mouseup",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener("mousemove",(function(e){return i.drag(e)}),!1)}return n(e,[{key:"dragStart",value:function(e){if(this.slide.classList.contains("zoomed"))this.active=!1;else{"touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains("nodrag")||u(e.target,".nodrag")||-1!==["input","select","textarea","button","a"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||"img"!==t&&u(e.target,".gslide-inline"))&&(this.active=!0,this.el.classList.add("dragging"),this.dragContainer=u(e.target,".ginner-container")))}}},{key:"dragEnd",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,"right"==this.doSlideChange&&this.instance.prevSlide(),"left"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove("dragging"),t.slide.classList.remove("dragging-nav"),t.dragContainer.style.transform="",t.dragContainer.style.transition=""}),100)}},{key:"drag",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add("dragging-nav"),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||"x"==this.lastDirection)){this.yOffset=0,this.lastDirection="x",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),"right"==n&&this.instance.prevSlide(),void("left"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||"y"==this.lastDirection)){this.xOffset=0,this.lastDirection="y",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:"shouldChange",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?"right":"left";("left"==t&&this.slide!==this.slide.parentNode.lastChild||"right"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:"shouldClose",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:"setTranslate",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?"all .2s ease":"",e.style.transform="translate3d(".concat(t,"px, ").concat(i,"px, 0)")}}]),e}();function j(e,t,i,n){var s=e.querySelector(".gslide-media"),l=new Image,o="gSlideTitle_"+i,r="gSlideDesc_"+i;l.addEventListener("load",(function(){T(n)&&n()}),!1),l.src=t.href,l.alt="",""!==t.title&&l.setAttribute("aria-labelledby",o),""!==t.description&&l.setAttribute("aria-describedby",r),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(".ginner-container"),o="gvideo"+i,r=e.querySelector(".gslide-media"),a=this.getAllPlayers();h(l,"gvideo-container"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(".gvideo-wrapper");S(this.settings.plyr.css,"Plyr");var c=t.href,u=location.protocol.replace(":",""),g="",v="",f=!1;"file"==u&&(u="http"),r.style.maxWidth=t.width,S(this.settings.plyr.js,"Plyr",(function(){if(c.match(/vimeo\.com\/([0-9]*)/)){var l=/vimeo.*\/(\d+)/i.exec(c);g="vimeo",v=l[1]}if(c.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||c.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||c.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/)){var r=function(e){var t="";t=void 0!==(e=e.replace(/(>|<)/gi,"").split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/))[2]?(t=e[2].split(/[^0-9a-z_\-]/i))[0]:e;return t}(c);g="youtube",v=r}if(null!==c.match(/\.(mp4|ogg|webm|mov)$/)){g="local";var u='")}var w=f||m('
'));h(d,"".concat(g,"-video gvideo")),d.appendChild(w),d.setAttribute("data-id",o),d.setAttribute("data-index",i);var k=O(s.settings.plyr,"config")?s.settings.plyr.config:{},C=new Plyr("#"+o,k);C.on("ready",(function(e){var t=e.detail.plyr;a[o]=t,T(n)&&n()})),b((function(){return e.querySelector("iframe")&&"true"==e.querySelector("iframe").dataset.ready}),(function(){s.resize(e)})),C.on("enterfullscreen",R),C.on("exitfullscreen",R)}))}function R(e){var t=u(e.target,".gslide-media");"enterfullscreen"==e.type&&h(t,"fullscreen"),"exitfullscreen"==e.type&&d(t,"fullscreen")}function G(e,t,i,n){var s,l=this,o=e.querySelector(".gslide-media"),r=!(!O(t,"href")||!t.href)&&t.href.split("#").pop().trim(),d=!(!O(t,"content")||!t.content)&&t.content;if(d&&(k(d)&&(s=m('
'.concat(d,"
"))),C(d))){"none"==d.style.display&&(d.style.display="block");var c=document.createElement("div");c.className="ginlined-content",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,"ginlined-content"),s=g}if(!s)return console.error("Unable to append inline slide content",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events["inlineclose"+r]=a("click",{onElement:o.querySelectorAll(".gtrigger-close"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(".gslide-media"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement("iframe");return l.className="vimeo-video gvideo",l.src=t,l.style.width="100%",l.style.height="100%",i&&l.setAttribute("allow",i),l.onload=function(){h(l,"node-ready"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var $=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:"",title:"",type:"",description:"",descPosition:"bottom",effect:"",width:"",height:"",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:"sourceType",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|svg)$/))return"image";if(e.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||e.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||e.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))return"video";if(e.match(/vimeo\.com\/([0-9]*)/))return"video";if(null!==e.match(/\.(mp4|ogg|webm|mov)$/))return"video";if(null!==e.match(/\.(mp3|wav|wma|aac|ogg)$/))return"audio";if(e.indexOf("#")>-1&&""!==t.split("#").pop().trim())return"inline";return e.indexOf("goajax=true")>-1?"ajax":"external"}},{key:"parseConfig",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!C(e)){O(e,"type")||(O(e,"content")&&e.content?e.type="inline":O(e,"href")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r="",a=e.getAttribute("data-glightbox"),h=e.nodeName.toLowerCase();if("a"===h&&(r=e.href),"img"===h&&(r=e.src),n.href=r,o(n,(function(s,l){O(t,l)&&"width"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type="inline"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&"a"==h){var d=e.title;I(d)||""===d||(n.title=d)}if(!n.title&&"img"==h){var c=e.alt;I(c)||""===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(";\\s?"+t)})),u=u.join("\\s?:|"),""!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp("s?"+t+"s?:s?(.*?)("+u+"s?:|$)"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\s*$/,"");n[t]=i.sanitizeValue(r)}}))}if(n.description&&"."==n.description.substring(0,1)&&document.querySelector(n.description))n.description=document.querySelector(n.description).innerHTML;else{var g=e.querySelector(".glightbox-desc");g&&(n.description=g.innerHTML)}return this.setSize(n,t),this.slideConfig=n,n}},{key:"setSize",value:function(e,t){var i="video"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),n=this.checkSize(t.height);return e.width=O(e,"width")&&""!==e.width?this.checkSize(e.width):i,e.height=O(e,"height")&&""!==e.height?this.checkSize(e.height):n,e}},{key:"checkSize",value:function(e){return M(e)?"".concat(e,"px"):e}},{key:"sanitizeValue",value:function(e){return"true"!==e&&"false"!==e?e:"true"===e}}]),e}(),U=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:"setContent",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,"loaded"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(".gslide-media"),d=t.querySelector(".gslide-title"),u=t.querySelector(".gslide-desc"),g=t.querySelector(".gdesc-inner"),v=i,f="gSlideTitle_"+this.index,p="gSlideDesc_"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),""==s.title&&""==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&""!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&""!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,"desc-".concat(r)),h(g.parentNode,"description-".concat(r))),h(a,"gslide-".concat(o)),h(t,"loaded"),"video"!==o){if("external"!==o)return"inline"===o?(G.apply(this.instance,[t,s,this.index,v]),void(n.draggable&&new V({dragEl:t.querySelector(".gslide-inline"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void("image"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector("img");n.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,"zoomable"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:"slideShortDesc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+""):o}},{key:"descriptionEvents",value:function(e,t){var i=this,n=e.querySelector(".desc-more");if(!n)return!1;a("click",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,".gslide-desc");if(!l)return!1;l.innerHTML=t.description,h(s,"gdesc-open");var o=a("click",{onElement:[s,u(l,".gslide-description")],withCallback:function(e,n){"a"!==e.target.nodeName.toLowerCase()&&(d(s,"gdesc-open"),h(s,"gdesc-closed"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,"gdesc-closed")}),400),o.destroy())}})}})}},{key:"create",value:function(){return m(this.instance.settings.slideHTML)}},{key:"getConfig",value:function(){var e=new $(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||"ontouchstart"in window||"onmsgesturechange"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName("html")[0],ee={selector:".glightbox",elements:null,skin:"clean",theme:"clean",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:"bottom",width:"900px",height:"506px",videosWidth:"960px",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:"https://cdn.plyr.io/3.6.3/plyr.css",js:"https://cdn.plyr.io/3.6.3/plyr.js",config:{ratio:"16:9",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",moreText:"See more",moreLength:60,cssEfects:{fade:{in:"fadeIn",out:"fadeOut"},zoom:{in:"zoomIn",out:"zoomOut"},slide:{in:"slideInRight",out:"slideOutLeft"},slideBack:{in:"slideInLeft",out:"slideOutRight"},none:{in:"none",out:"none"}},svg:{close:'',next:' ',prev:''},slideHTML:'
\n
\n
\n
\n
\n
\n
\n

\n
\n
\n
\n
\n
\n
',lightboxHTML:''},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:"init",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a("click",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:"open",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0==this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(C(e)){var n=e.getAttribute("data-gallery");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement("style");o.type="text/css",o.className="gcss-styles",o.innerText=".gscrollbar-fixer {margin-right: ".concat(l,"px}"),document.head.appendChild(o),h(s,"gscrollbar-fixer")}h(s,"glightbox-open"),h(Q,"glightbox-open"),J&&(h(document.body,"glightbox-mobile"),this.settings.slideEffect="slide"),this.showSlide(i,!0),1==this.elements.length?(h(this.prevButton,"glightbox-button-hidden"),h(this.nextButton,"glightbox-button-hidden")):(d(this.prevButton,"glightbox-button-hidden"),d(this.nextButton,"glightbox-button-hidden")),this.lightboxOpen=!0,this.trigger("open"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&W(this),this.settings.keyboardNavigation&&z(this)}},{key:"openAt",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:"showSlide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(".current");n&&d(n,"current"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(".gslide")[t];if(c(s,"loaded"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger("slide_before_load",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger("slide_after_load",o)}))}this.slideDescription=s.querySelector(".gslide-description"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,"gslide-media"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:"preloadSlide",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(".gslide")[e];if(c(i,"loaded"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger("slide_before_load",l),"video"==s||"external"==s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}),200):n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}},{key:"prevSlide",value:function(){this.goToSlide(this.index-1)}},{key:"nextSlide",value:function(){this.goToSlide(this.index+1)}},{key:"goToSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:"insertSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new U(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(".gslide")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0==this.index&&0==t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(".gslide")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger("slide_inserted",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:"removeSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(".gslide")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger("slide_removed",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:"slideAnimateIn",value:function(e,t){var i=this,n=e.querySelector(".gslide-media"),s=e.querySelector(".gslide-description"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=""),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a="none"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,"current")}},{key:"slideAnimateOut",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,"prev");var t=this.settings.slideEffect,i="none"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger("slide_before_change",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(".gslide-media"),i=e.querySelector(".gslide-description");t.style.transform="",d(t,"greset"),t.style.opacity="",i&&(i.style.opacity=""),d(e,"prev")}))}},{key:"getAllPlayers",value:function(){return this.videoPlayers}},{key:"getSlidePlayerInstance",value:function(e){var t="gvideo"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:"stopSlideVideo",value:function(e){if(C(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("stopSlideVideo is deprecated, use slidePlayerPause");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"slidePlayerPause",value:function(e){if(C(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"playSlideVideo",value:function(e){if(C(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("playSlideVideo is deprecated, use slidePlayerPlay");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:"slidePlayerPlay",value:function(e){if(C(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&!i.playing&&(i.play(),this.settings.autofocusVideos&&i.elements.container.focus())}},{key:"setElements",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new U(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML="",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:"getElementIndex",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,"node")&&i.node==e)return t=n,!0})),t}},{key:"getElements",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new U(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new U(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute("data-gallery"),t.push(r)})),t):t}},{key:"getGalleryElements",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:"getSelector",value:function(){return!this.settings.elements&&(this.settings.selector&&"data-"==this.settings.selector.substring(0,5)?"*[".concat(this.settings.selector,"]"):this.settings.selector)}},{key:"getActiveSlide",value:function(){return this.slidesContainer.querySelectorAll(".gslide")[this.index]}},{key:"getActiveSlideIndex",value:function(){return this.index}},{key:"getAnimationClasses",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push("g".concat(i.in)),e.push("g".concat(i.out))}return e.join(" ")}},{key:"build",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&"#"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute("aria-hidden")&&(i.push(e),e.setAttribute("aria-hidden","true"))}));var n=O(this.settings.svg,"next")?this.settings.svg.next:"",s=O(this.settings.svg,"prev")?this.settings.svg.prev:"",l=O(this.settings.svg,"close")?this.settings.svg.close:"",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById("glightbox-body");this.modal=d;var g=d.querySelector(".gclose");this.prevButton=d.querySelector(".gprev"),this.nextButton=d.querySelector(".gnext"),this.overlay=d.querySelector(".goverlay"),this.loader=d.querySelector(".gloader"),this.slidesContainer=document.getElementById("glightbox-slider"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,"glightbox-"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a("click",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a("click",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a("click",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a("click",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,"glightbox-mobile")||u(t.target,".ginner-container")||u(t.target,".gbtn")||c(t.target,"gnext")||c(t.target,"gprev")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(".gslide")[i]})),K&&h(document.body,"glightbox-touch"),this.events.resize=a("resize",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:"resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,"zoomed")){var t=y(),i=e.querySelector(".gvideo-wrapper"),n=e.querySelector(".gslide-image"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,"glightbox-mobile"):d(document.body,"glightbox-mobile"),i||n){var r=!1;if(s&&(c(s,"description-bottom")||c(s,"description-top"))&&!c(s,"gabsolute")&&(r=!0),n)if(l<=768){var a=n.querySelector("img");a.setAttribute("style","")}else if(r){var u=s.offsetHeight,g=n.querySelector("img");g.setAttribute("style","max-height: calc(100vh - ".concat(u,"px)")),s.setAttribute("style","max-width: ".concat(g.offsetWidth,"px;"))}if(i){var v=O(this.settings.plyr.config,"ratio")?this.settings.plyr.config.ratio:"";if(!v){var f=i.clientWidth,p=i.clientHeight,m=f/p;v="".concat(f/m,":").concat(p/m)}var x=v.split(":"),b=this.settings.videosWidth,S=this.settings.videosWidth,w=(S=M(b)||-1!==b.indexOf("px")?parseInt(b):-1!==b.indexOf("vw")?l*parseInt(b)/100:-1!==b.indexOf("vh")?o*parseInt(b)/100:-1!==b.indexOf("%")?l*parseInt(b)/100:parseInt(i.clientWidth))/(parseInt(x[0])/parseInt(x[1]));if(w=Math.floor(w),r&&(o-=s.offsetHeight),S>l||w>o||oS){var T=i.offsetWidth,k=i.offsetHeight,C=o/k,E={width:T*C,height:k*C};i.parentNode.setAttribute("style","max-width: ".concat(E.width,"px")),r&&s.setAttribute("style","max-width: ".concat(E.width,"px;"))}else i.parentNode.style.maxWidth="".concat(S),r&&s.setAttribute("style","max-width: ".concat(S,";"))}}}}},{key:"reload",value:function(){this.init()}},{key:"updateNavigationClasses",value:function(){var e=this.loop();d(this.nextButton,"disabled"),d(this.prevButton,"disabled"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,"disabled"),h(this.nextButton,"disabled")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,"disabled"):h(this.prevButton,"disabled")}},{key:"loop",value:function(){var e=O(this.settings,"loopAtEnd")?this.settings.loopAtEnd:null;return e=O(this.settings,"loop")?this.settings.loop:e,e}},{key:"close",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute("aria-hidden")})),h(this.modal,"glightbox-closing"),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,"glightbox-open"),d(i,"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer"),e.modal.parentNode.removeChild(e.modal),e.trigger("close"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(".gcss-styles");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:"destroy",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:"on",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError("Event name and callback must be defined");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:"once",value:function(e,t){this.on(e,t,!0)}},{key:"trigger",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:"clearAllEvents",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:"version",value:function(){return"3.0.8"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}}));assets/svg/zoom-out.svg000064400000001257147600374750011201 0ustar00zoom-outassets/svg/zoom-in.svg000064400000001476147600374750011003 0ustar00zoom-inassets/svg/zap.svg000064400000001151147600374750010173 0ustar00zapassets/svg/zap-off.svg000064400000001770147600374750010752 0ustar00zap-offassets/svg/youtube.svg000064400000001213147600374750011074 0ustar00youtubeassets/svg/x.svg000064400000000700147600374750007647 0ustar00xassets/svg/x-square.svg000064400000001374147600374750011155 0ustar00x-squareassets/svg/xing.svg000064400000001160147600374750010346 0ustar00xingassets/svg/x-circle.svg000064400000001243147600374750011111 0ustar00x-circleassets/svg/wind.svg000064400000002116147600374750010344 0ustar00windassets/svg/wifi.svg000064400000001610147600374750010337 0ustar00wifiassets/svg/wifi-off.svg000064400000002464147600374750011117 0ustar00wifi-offassets/svg/watch.svg000064400000002033147600374750010507 0ustar00watchassets/svg/volume-x.svg000064400000001457147600374750011166 0ustar00volume-xassets/svg/volume.svg000064400000000764147600374750010721 0ustar00volumeassets/svg/volume-2.svg000064400000001555147600374750011057 0ustar00volume-2assets/svg/volume-1.svg000064400000001263147600374750011052 0ustar00volume-1assets/svg/voicemail.svg000064400000001150147600374750011350 0ustar00voicemailassets/svg/vkontakte.svg000064400000004316147600374750011415 0ustar00vkontakteassets/svg/vimeo.svg000064400000001305147600374750010521 0ustar00vimeoassets/svg/video.svg000064400000001211147600374750010504 0ustar00videoassets/svg/video-off.svg000064400000001620147600374750011260 0ustar00video-offassets/svg/user-x.svg000064400000001712147600374750010627 0ustar00user-xassets/svg/user.svg000064400000001201147600374750010353 0ustar00userassets/svg/users.svg000064400000002124147600374750010543 0ustar00usersassets/svg/user-plus.svg000064400000001631147600374750011343 0ustar00user-plusassets/svg/user-minus.svg000064400000001412147600374750011510 0ustar00user-minusassets/svg/user-check.svg000064400000001510147600374750011431 0ustar00user-checkassets/svg/upload.svg000064400000001332147600374750010666 0ustar00uploadassets/svg/upload-cloud.svg000064400000002065147600374750011776 0ustar00upload-cloudassets/svg/unlock.svg000064400000001311147600374750010672 0ustar00unlockassets/svg/underline.svg000064400000001003147600374750011362 0ustar00underlineassets/svg/umbrella.svg000064400000001076147600374750011212 0ustar00umbrellaassets/svg/type.svg000064400000000735147600374750010371 0ustar00typeassets/svg/twitter.svg000064400000001326147600374750011107 0ustar00twitterassets/svg/twitch.svg000064400000000504147600374750010704 0ustar00twitchassets/svg/tv.svg000064400000001132147600374750010031 0ustar00tvassets/svg/tumblr.svg000064400000001072147600374750010710 0ustar00tumblrassets/svg/truck.svg000064400000001616147600374750010537 0ustar00truckassets/svg/triangle.svg000064400000001161147600374750011207 0ustar00triangleassets/svg/trending-up.svg000064400000001012147600374750011631 0ustar00trending-upassets/svg/trending-down.svg000064400000001003147600374750012154 0ustar00trending-downassets/svg/trash.svg000064400000001170147600374750010523 0ustar00trashassets/svg/trash-2.svg000064400000001614147600374750010665 0ustar00trash-2assets/svg/toggle-right.svg000064400000001215147600374750011776 0ustar00toggle-rightassets/svg/toggle-left.svg000064400000001221147600374750011610 0ustar00toggle-leftassets/svg/thumbs-up.svg000064400000001320147600374750011323 0ustar00thumbs-upassets/svg/thumbs-down.svg000064400000001311147600374750011646 0ustar00thumbs-downassets/svg/thermometer.svg000064400000001255147600374750011741 0ustar00thermometerassets/svg/terminal.svg000064400000000707147600374750011222 0ustar00terminalassets/svg/target.svg000064400000001471147600374750010674 0ustar00targetassets/svg/tag.svg000064400000001127147600374750010157 0ustar00tagassets/svg/tablet.svg000064400000001110147600374750010647 0ustar00tabletassets/svg/sun.svg000064400000002724147600374750010215 0ustar00sunassets/svg/sunset.svg000064400000002540147600374750010725 0ustar00sunsetassets/svg/sunrise.svg000064400000002541147600374750011075 0ustar00sunriseassets/svg/stop-circle.svg000064400000001066147600374750011632 0ustar00stop-circleassets/svg/star.svg000064400000001351147600374750010354 0ustar00starassets/svg/square.svg000064400000000702147600374750010702 0ustar00squareassets/svg/spotify.svg000064400000001354147600374750011103 0ustar00spotifyassets/svg/speaker.svg000064400000001474147600374750011043 0ustar00speakerassets/svg/soundcloud.svg000064400000001246147600374750011565 0ustar00soundcloudassets/svg/snapchat.svg000064400000002037147600374750011206 0ustar00snapchatassets/svg/smartphone.svg000064400000001113147600374750011557 0ustar00smartphoneassets/svg/sliders.svg000064400000002173147600374750011053 0ustar00slidersassets/svg/slash.svg000064400000001077147600374750010522 0ustar00slashassets/svg/skype.svg000064400000003311147600374750010534 0ustar00skypeassets/svg/skip-forward.svg000064400000001026147600374750012012 0ustar00skip-forwardassets/svg/skip-back.svg000064400000001025147600374750011245 0ustar00skip-backassets/svg/sidebar.svg000064400000000747147600374750011024 0ustar00sidebarassets/svg/shuffle.svg000064400000001545147600374750011044 0ustar00shuffleassets/svg/shopping-cart.svg000064400000001211147600374750012154 0ustar00shopping-cartassets/svg/shopping-bag.svg000064400000001435147600374750011764 0ustar00shopping-bagassets/svg/shield.svg000064400000000743147600374750010657 0ustar00shieldassets/svg/shield-off.svg000064400000001454147600374750011427 0ustar00shield-offassets/svg/share.svg000064400000001326147600374750010507 0ustar00shareassets/svg/share-2.svg000064400000002003147600374750010637 0ustar00share-2assets/svg/settings.svg000064400000004643147600374750011252 0ustar00settingsassets/svg/server.svg000064400000002014147600374750010706 0ustar00serverassets/svg/send.svg000064400000001070147600374750010332 0ustar00sendassets/svg/search.svg000064400000001047147600374750010652 0ustar00searchassets/svg/scissors.svg000064400000001712147600374750011254 0ustar00scissorsassets/svg/save.svg000064400000001277147600374750010350 0ustar00saveassets/svg/rss.svg000064400000001045147600374750010212 0ustar00rssassets/svg/rotate-cw.svg000064400000001410147600374750011304 0ustar00rotate-cwassets/svg/rotate-ccw.svg000064400000001450147600374750011453 0ustar00rotate-ccwassets/svg/rewind.svg000064400000001223147600374750010671 0ustar00rewindassets/svg/repeat.svg000064400000001614147600374750010665 0ustar00repeatassets/svg/refresh-cw.svg000064400000002265147600374750011455 0ustar00refresh-cwassets/svg/refresh-ccw.svg000064400000002200147600374750011605 0ustar00refresh-ccwassets/svg/reddit.svg000064400000002251147600374750010656 0ustar00redditassets/svg/radio.svg000064400000002174147600374750010505 0ustar00radioassets/svg/px.svg000064400000005174147600374750010041 0ustar00pxassets/svg/printer.svg000064400000001416147600374750011070 0ustar00printerassets/svg/power.svg000064400000001117147600374750010537 0ustar00powerassets/svg/plus.svg000064400000000614147600374750010367 0ustar00plusassets/svg/plus-square.svg000064400000001335147600374750011666 0ustar00plus-squareassets/svg/plus-circle.svg000064400000001205147600374750011623 0ustar00plus-circleassets/svg/play.svg000064400000000574147600374750010356 0ustar00playassets/svg/play-circle.svg000064400000001163147600374750011610 0ustar00play-circleassets/svg/pinterest.svg000064400000002474147600374750011427 0ustar00pinterestassets/svg/pie-chart.svg000064400000001252147600374750011257 0ustar00pie-chartassets/svg/phone.svg000064400000002124147600374750010513 0ustar00phoneassets/svg/phone-outgoing.svg000064400000002607147600374750012352 0ustar00phone-outgoingassets/svg/phone-off.svg000064400000002567147600374750011276 0ustar00phone-offassets/svg/phone-missed.svg000064400000002625147600374750012003 0ustar00phone-missedassets/svg/phone-incoming.svg000064400000002563147600374750012323 0ustar00phone-incomingassets/svg/phone-forwarded.svg000064400000002631147600374750012471 0ustar00phone-forwardedassets/svg/phone-call.svg000064400000002764147600374750011436 0ustar00phone-callassets/svg/percent.svg000064400000001321147600374750011040 0ustar00percentassets/svg/pause.svg000064400000001004147600374750010513 0ustar00pauseassets/svg/pause-circle.svg000064400000001201147600374750011751 0ustar00pause-circleassets/svg/paperclip.svg000064400000001443147600374750011364 0ustar00paperclipassets/svg/package.svg000064400000001334147600374750010777 0ustar00packageassets/svg/octagon.svg000064400000000757147600374750011046 0ustar00octagonassets/svg/navigation.svg000064400000000706147600374750011545 0ustar00navigationassets/svg/navigation-2.svg000064400000000717147600374750011706 0ustar00navigation-2assets/svg/music.svg000064400000001307147600374750010524 0ustar00musicassets/svg/move.svg000064400000002151147600374750010350 0ustar00moveassets/svg/more-vertical.svg000064400000000452147600374750012155 0ustar00more-verticalassets/svg/more-horizontal.svg000064400000000455147600374750012540 0ustar00more-horizontalassets/svg/moon.svg000064400000001235147600374750010354 0ustar00moonassets/svg/monitor.svg000064400000001123147600374750011067 0ustar00monitorassets/svg/minus.svg000064400000000400147600374750010530 0ustar00minusassets/svg/minus-square.svg000064400000001120147600374750012026 0ustar00minus-squareassets/svg/minus-circle.svg000064400000000770147600374750012001 0ustar00minus-circleassets/svg/minimize.svg000064400000001675147600374750011235 0ustar00minimizeassets/svg/minimize-2.svg000064400000001302147600374750011357 0ustar00minimize-2assets/svg/mic.svg000064400000001473147600374750010160 0ustar00micassets/svg/mic-off.svg000064400000002722147600374750010726 0ustar00mic-offassets/svg/message-square.svg000064400000000775147600374750012336 0ustar00message-squareassets/svg/message-circle.svg000064400000001453147600374750012271 0ustar00message-circleassets/svg/menu.svg000064400000001013147600374750010342 0ustar00menuassets/svg/medium.svg000064400000001060147600374750010660 0ustar00mediumassets/svg/maximize.svg000064400000001666147600374750011237 0ustar00maximizeassets/svg/maximize-2.svg000064400000001307147600374750011366 0ustar00maximize-2assets/svg/map.svg000064400000001157147600374750010164 0ustar00mapassets/svg/map-pin.svg000064400000001274147600374750010750 0ustar00map-pinassets/svg/mail.svg000064400000001050147600374750010321 0ustar00mailassets/svg/log-out.svg000064400000001333147600374750010771 0ustar00log-outassets/svg/log-in.svg000064400000001325147600374750010571 0ustar00log-inassets/svg/lock.svg000064400000001145147600374750010334 0ustar00lockassets/svg/loader.svg000064400000002353147600374750010654 0ustar00loaderassets/svg/list.svg000064400000001620147600374750010355 0ustar00listassets/svg/link.svg000064400000001743147600374750010345 0ustar00linkassets/svg/linkedin.svg000064400000002252147600374750011201 0ustar00linkedinassets/svg/link-2.svg000064400000001413147600374750010476 0ustar00link-2assets/svg/life-buoy.svg000064400000002146147600374750011301 0ustar00life-buoyassets/svg/layout.svg000064400000001022147600374750010713 0ustar00layoutassets/svg/layers.svg000064400000001510147600374750010677 0ustar00layersassets/svg/italic.svg000064400000000634147600374750010653 0ustar00italicassets/svg/instagram.svg000064400000003524147600374750011374 0ustar00instagramassets/svg/info.svg000064400000001167147600374750010343 0ustar00infoassets/svg/inbox.svg000064400000001360147600374750010522 0ustar00inboxassets/svg/image.svg000064400000001360147600374750010465 0ustar00imageassets/svg/home.svg000064400000001076147600374750010337 0ustar00homeassets/svg/help-circle.svg000064400000001523147600374750011573 0ustar00help-circleassets/svg/heart.svg000064400000001322147600374750010504 0ustar00heartassets/svg/headphones.svg000064400000001420147600374750011516 0ustar00headphonesassets/svg/hash.svg000064400000001465147600374750010334 0ustar00hashassets/svg/hard-drive.svg000064400000001516147600374750011433 0ustar00hard-driveassets/svg/grid.svg000064400000001610147600374750010326 0ustar00gridassets/svg/google.svg000064400000001675147600374750010670 0ustar00googleassets/svg/google-plus.svg000064400000001032147600374750011634 0ustar00google-plusassets/svg/globe.svg000064400000001412147600374750010471 0ustar00globeassets/svg/git-pull-request.svg000064400000001524147600374750012630 0ustar00git-pull-requestassets/svg/git-merge.svg000064400000001371147600374750011265 0ustar00git-mergeassets/svg/github.svg000064400000002566147600374750010676 0ustar00githubassets/svg/git-commit.svg000064400000000773147600374750011463 0ustar00git-commitassets/svg/git-branch.svg000064400000001406147600374750011422 0ustar00git-branchassets/svg/gift.svg000064400000001644147600374750010341 0ustar00giftassets/svg/foursquare.svg000064400000001452147600374750011601 0ustar00foursquareassets/svg/folder.svg000064400000001042147600374750010653 0ustar00folderassets/svg/folder-plus.svg000064400000001475147600374750011646 0ustar00folder-plusassets/svg/folder-minus.svg000064400000001256147600374750012013 0ustar00folder-minusassets/svg/flipboard.svg000064400000000264147600374750011347 0ustar00flipboardassets/svg/flickr.svg000064400000000542147600374750010656 0ustar00flickrassets/svg/flag.svg000064400000001464147600374750010321 0ustar00flagassets/svg/filter.svg000064400000001014147600374750010664 0ustar00filterassets/svg/film.svg000064400000001421147600374750010330 0ustar00filmassets/svg/file-text.svg000064400000001736147600374750011313 0ustar00file-textassets/svg/file.svg000064400000001113147600374750010316 0ustar00fileassets/svg/file-plus.svg000064400000001543147600374750011306 0ustar00file-plusassets/svg/file-minus.svg000064400000001324147600374750011453 0ustar00file-minusassets/svg/feather.svg000064400000001162147600374750011021 0ustar00featherassets/svg/fast-forward.svg000064400000001230147600374750011776 0ustar00fast-forwardassets/svg/facebook.svg000064400000000462147600374750011156 0ustar00facebookassets/svg/eye.svg000064400000001270147600374750010165 0ustar00eyeassets/svg/eye-off.svg000064400000002233147600374750010735 0ustar00eye-offassets/svg/external-link.svg000064400000001441147600374750012160 0ustar00external-linkassets/svg/etsy.svg000064400000002043147600374750010366 0ustar00etsyassets/svg/edit.svg000064400000001336147600374750010333 0ustar00editassets/svg/edit-3.svg000064400000000765147600374750010500 0ustar00edit-3assets/svg/edit-2.svg000064400000000565147600374750010475 0ustar00edit-2assets/svg/droplet.svg000064400000001046147600374750011055 0ustar00dropletassets/svg/dribbble.svg000064400000002164147600374750011153 0ustar00dribbbleassets/svg/download.svg000064400000001333147600374750011212 0ustar00downloadassets/svg/download-cloud.svg000064400000002060147600374750012314 0ustar00download-cloudassets/svg/dollar-sign.svg000064400000001324147600374750011616 0ustar00dollar-signassets/svg/disc.svg000064400000001126147600374750010325 0ustar00discassets/svg/digg.svg000064400000000656147600374750010324 0ustar00diggassets/svg/deviantart.svg000064400000001326147600374750011546 0ustar00deviantartassets/svg/delete.svg000064400000001353147600374750010647 0ustar00deleteassets/svg/database.svg000064400000001265147600374750011153 0ustar00databaseassets/svg/crosshair.svg000064400000001202147600374750011373 0ustar00crosshairassets/svg/crop.svg000064400000001145147600374750010347 0ustar00cropassets/svg/credit-card.svg000064400000000746147600374750011573 0ustar00credit-cardassets/svg/cpu.svg000064400000002276147600374750010201 0ustar00cpuassets/svg/corner-up-right.svg000064400000001022147600374750012423 0ustar00corner-up-rightassets/svg/corner-up-left.svg000064400000001005147600374750012241 0ustar00corner-up-leftassets/svg/corner-right-up.svg000064400000001015147600374750012425 0ustar00corner-right-upassets/svg/corner-right-down.svg000064400000001011147600374750012744 0ustar00corner-right-downassets/svg/corner-left-up.svg000064400000001013147600374750012240 0ustar00corner-left-upassets/svg/corner-left-down.svg000064400000001015147600374750012565 0ustar00corner-left-downassets/svg/corner-down-right.svg000064400000001025147600374750012751 0ustar00corner-down-rightassets/svg/corner-down-left.svg000064400000001016147600374750012566 0ustar00corner-down-leftassets/svg/copy.svg000064400000001446147600374750010362 0ustar00copyassets/svg/compass.svg000064400000001222147600374750011045 0ustar00compassassets/svg/command.svg000064400000001752147600374750011026 0ustar00commandassets/svg/code.svg000064400000000773147600374750010324 0ustar00codeassets/svg/cloud.svg000064400000001207147600374750010511 0ustar00cloudassets/svg/cloud-snow.svg000064400000002755147600374750011506 0ustar00cloud-snowassets/svg/cloud-rain.svg000064400000002154147600374750011442 0ustar00cloud-rainassets/svg/cloud-off.svg000064400000001651147600374750011264 0ustar00cloud-offassets/svg/cloud-lightning.svg000064400000001761147600374750012477 0ustar00cloud-lightningassets/svg/cloud-drizzle.svg000064400000003004147600374750012167 0ustar00cloud-drizzleassets/svg/clock.svg000064400000001061147600374750010474 0ustar00clockassets/svg/clipboard.svg000064400000001160147600374750011340 0ustar00clipboardassets/svg/circle.svg000064400000000553147600374750010647 0ustar00circleassets/svg/chrome.svg000064400000001746147600374750010670 0ustar00chromeassets/svg/chevron-up.svg000064400000000501147600374750011465 0ustar00chevron-upassets/svg/chevrons-up.svg000064400000000777147600374750011667 0ustar00chevrons-upassets/svg/chevrons-right.svg000064400000001004147600374750012340 0ustar00chevrons-rightassets/svg/chevrons-left.svg000064400000001000147600374750012151 0ustar00chevrons-leftassets/svg/chevrons-down.svg000064400000001017147600374750012176 0ustar00chevrons-downassets/svg/chevron-right.svg000064400000000505147600374750012162 0ustar00chevron-rightassets/svg/chevron-left.svg000064400000000502147600374750011774 0ustar00chevron-leftassets/svg/chevron-down.svg000064400000000505147600374750012014 0ustar00chevron-downassets/svg/check.svg000064400000000500147600374750010453 0ustar00checkassets/svg/check-square.svg000064400000001264147600374750011761 0ustar00check-squareassets/svg/checkmark.svg000064400000000304147600374750011330 0ustar00checkmarkassets/svg/check-circle.svg000064400000001302147600374750011713 0ustar00check-circleassets/svg/cast.svg000064400000001773147600374750010345 0ustar00castassets/svg/camera.svg000064400000001541147600374750010634 0ustar00cameraassets/svg/camera-off.svg000064400000002155147600374750011406 0ustar00camera-offassets/svg/calendar.svg000064400000001403147600374750011152 0ustar00calendarassets/svg/briefcase.svg000064400000001317147600374750011330 0ustar00briefcaseassets/svg/box.svg000064400000001233147600374750010172 0ustar00boxassets/svg/book.svg000064400000000714147600374750010337 0ustar00bookassets/svg/book-open.svg000064400000001240147600374750011271 0ustar00book-openassets/svg/bookmark.svg000064400000001017147600374750011207 0ustar00bookmarkassets/svg/bold.svg000064400000001002147600374750010314 0ustar00boldassets/svg/bluetooth.svg000064400000001130147600374750011403 0ustar00bluetoothassets/svg/bell.svg000064400000001407147600374750010323 0ustar00bellassets/svg/bell-off.svg000064400000002014147600374750011066 0ustar00bell-offassets/svg/behance.svg000064400000003122147600374750010766 0ustar00behanceassets/svg/battery.svg000064400000001111147600374750011047 0ustar00batteryassets/svg/battery-charging.svg000064400000002164147600374750012640 0ustar00battery-chargingassets/svg/bar-chart.svg000064400000001036147600374750011246 0ustar00bar-chartassets/svg/bar-chart-2.svg000064400000001041147600374750011401 0ustar00bar-chart-2assets/svg/award.svg000064400000001243147600374750010501 0ustar00awardassets/svg/at-sign.svg000064400000001605147600374750010747 0ustar00at-signassets/svg/arrow-up.svg000064400000000671147600374750011163 0ustar00arrow-upassets/svg/arrow-up-right.svg000064400000000663147600374750012277 0ustar00arrow-up-rightassets/svg/arrow-up-left.svg000064400000000662147600374750012113 0ustar00arrow-up-leftassets/svg/arrow-up-circle.svg000064400000001254147600374750012420 0ustar00arrow-up-circleassets/svg/arrow-right.svg000064400000000700147600374750011645 0ustar00arrow-rightassets/svg/arrow-right-circle.svg000064400000001262147600374750013110 0ustar00arrow-right-circleassets/svg/arrow-left.svg000064400000000667147600374750011476 0ustar00arrow-leftassets/svg/arrow-left-circle.svg000064400000001252147600374750012724 0ustar00arrow-left-circleassets/svg/arrow-down.svg000064400000000666147600374750011512 0ustar00arrow-downassets/svg/arrow-down-right.svg000064400000000651147600374750012617 0ustar00arrow-down-rightassets/svg/arrow-down-left.svg000064400000000642147600374750012434 0ustar00arrow-down-leftassets/svg/arrow-down-circle.svg000064400000001254147600374750012743 0ustar00arrow-down-circleassets/svg/archive.svg000064400000001077147600374750011031 0ustar00archiveassets/svg/aperture.svg000064400000002050147600374750011227 0ustar00apertureassets/svg/anchor.svg000064400000001325147600374750010656 0ustar00anchorassets/svg/amazon.svg000064400000001661147600374750010674 0ustar00amazonassets/svg/align-right.svg000064400000001222147600374750011605 0ustar00align-rightassets/svg/align-left.svg000064400000001221147600374750011421 0ustar00align-leftassets/svg/align-justify.svg000064400000001224147600374750012167 0ustar00align-justifyassets/svg/align-center.svg000064400000001227147600374750011755 0ustar00align-centerassets/svg/alert-triangle.svg000064400000001613147600374750012316 0ustar00alert-triangleassets/svg/alert-octagon.svg000064400000001410147600374750012136 0ustar00alert-octagonassets/svg/alert-circle.svg000064400000001200147600374750011742 0ustar00alert-circleassets/svg/airplay.svg000064400000001410147600374750011040 0ustar00airplayassets/svg/activity.svg000064400000000763147600374750011245 0ustar00activitycore/admin/demo-library/assets/css/demo-library.min.css000064400000053541147600374750017153 0ustar00.hester-demo-preview-on body{overflow:hidden}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header .hester-btn{margin:7px 12px 7px auto;float:none}@-webkit-keyframes bang{to{-webkit-box-shadow:-244px -354.6666666667px #0d6efd,-40px -207.6666666667px #f7b40d,-43px -29.6666666667px #e04b44,115px -211.6666666667px #8d66d8,55px -243.6666666667px #87f138,-59px -112.6666666667px #66717f,-32px -183.6666666667px #9f0,27px -289.6666666667px #bf0,-237px -191.6666666667px #ff0048,-205px -360.6666666667px #00d5ff,131px -53.6666666667px #00c8ff,-53px -74.6666666667px #7f0,137px 56.3333333333px #00b7ff,151px -102.6666666667px #006fff,91px 33.3333333333px #0f6,-152px -392.6666666667px #ff00f7,-121px -79.6666666667px #ff0059,-57px 60.3333333333px #f06,141px 41.3333333333px #ff006f,-116px -114.6666666667px #00c8ff,-41px -163.6666666667px #d000ff,115px 50.3333333333px #3700ff,-225px -391.6666666667px #ff006a,-188px -286.6666666667px #95ff00,84px -93.6666666667px #ef0,210px -262.6666666667px #51ff00,-214px 11.3333333333px #6f00ff,-184px -143.6666666667px #1e00ff,171px -16.6666666667px #f0d,-28px -284.6666666667px #ff001a,-14px -249.6666666667px #001eff,-146px -197.6666666667px #40ff00,-173px -137.6666666667px #0ff,170px 25.3333333333px #0037ff,-222px -293.6666666667px #30f,-78px 48.3333333333px #62ff00,-6px -319.6666666667px #00ff09,216px -207.6666666667px #00ff9d,-5px 83.3333333333px #1a00ff,-1px -57.6666666667px #c4ff00,-238px -346.6666666667px #2bff00,44px -43.6666666667px #9500ff,120px -320.6666666667px #a0f,-42px -258.6666666667px #e100ff,195px -331.6666666667px #d9ff00,-141px -268.6666666667px #ff0d00,-242px -353.6666666667px #48ff00,-201px -90.6666666667px #ffd000,245px -51.6666666667px #ff7b00,-205px 4.3333333333px #00ff80,76px -245.6666666667px #0cf;box-shadow:-244px -354.6666666667px #0d6efd,-40px -207.6666666667px #f7b40d,-43px -29.6666666667px #e04b44,115px -211.6666666667px #8d66d8,55px -243.6666666667px #87f138,-59px -112.6666666667px #66717f,-32px -183.6666666667px #9f0,27px -289.6666666667px #bf0,-237px -191.6666666667px #ff0048,-205px -360.6666666667px #00d5ff,131px -53.6666666667px #00c8ff,-53px -74.6666666667px #7f0,137px 56.3333333333px #00b7ff,151px -102.6666666667px #006fff,91px 33.3333333333px #0f6,-152px -392.6666666667px #ff00f7,-121px -79.6666666667px #ff0059,-57px 60.3333333333px #f06,141px 41.3333333333px #ff006f,-116px -114.6666666667px #00c8ff,-41px -163.6666666667px #d000ff,115px 50.3333333333px #3700ff,-225px -391.6666666667px #ff006a,-188px -286.6666666667px #95ff00,84px -93.6666666667px #ef0,210px -262.6666666667px #51ff00,-214px 11.3333333333px #6f00ff,-184px -143.6666666667px #1e00ff,171px -16.6666666667px #f0d,-28px -284.6666666667px #ff001a,-14px -249.6666666667px #001eff,-146px -197.6666666667px #40ff00,-173px -137.6666666667px #0ff,170px 25.3333333333px #0037ff,-222px -293.6666666667px #30f,-78px 48.3333333333px #62ff00,-6px -319.6666666667px #00ff09,216px -207.6666666667px #00ff9d,-5px 83.3333333333px #1a00ff,-1px -57.6666666667px #c4ff00,-238px -346.6666666667px #2bff00,44px -43.6666666667px #9500ff,120px -320.6666666667px #a0f,-42px -258.6666666667px #e100ff,195px -331.6666666667px #d9ff00,-141px -268.6666666667px #ff0d00,-242px -353.6666666667px #48ff00,-201px -90.6666666667px #ffd000,245px -51.6666666667px #ff7b00,-205px 4.3333333333px #00ff80,76px -245.6666666667px #0cf}}@keyframes bang{to{-webkit-box-shadow:-244px -354.6666666667px #0d6efd,-40px -207.6666666667px #f7b40d,-43px -29.6666666667px #e04b44,115px -211.6666666667px #8d66d8,55px -243.6666666667px #87f138,-59px -112.6666666667px #66717f,-32px -183.6666666667px #9f0,27px -289.6666666667px #bf0,-237px -191.6666666667px #ff0048,-205px -360.6666666667px #00d5ff,131px -53.6666666667px #00c8ff,-53px -74.6666666667px #7f0,137px 56.3333333333px #00b7ff,151px -102.6666666667px #006fff,91px 33.3333333333px #0f6,-152px -392.6666666667px #ff00f7,-121px -79.6666666667px #ff0059,-57px 60.3333333333px #f06,141px 41.3333333333px #ff006f,-116px -114.6666666667px #00c8ff,-41px -163.6666666667px #d000ff,115px 50.3333333333px #3700ff,-225px -391.6666666667px #ff006a,-188px -286.6666666667px #95ff00,84px -93.6666666667px #ef0,210px -262.6666666667px #51ff00,-214px 11.3333333333px #6f00ff,-184px -143.6666666667px #1e00ff,171px -16.6666666667px #f0d,-28px -284.6666666667px #ff001a,-14px -249.6666666667px #001eff,-146px -197.6666666667px #40ff00,-173px -137.6666666667px #0ff,170px 25.3333333333px #0037ff,-222px -293.6666666667px #30f,-78px 48.3333333333px #62ff00,-6px -319.6666666667px #00ff09,216px -207.6666666667px #00ff9d,-5px 83.3333333333px #1a00ff,-1px -57.6666666667px #c4ff00,-238px -346.6666666667px #2bff00,44px -43.6666666667px #9500ff,120px -320.6666666667px #a0f,-42px -258.6666666667px #e100ff,195px -331.6666666667px #d9ff00,-141px -268.6666666667px #ff0d00,-242px -353.6666666667px #48ff00,-201px -90.6666666667px #ffd000,245px -51.6666666667px #ff7b00,-205px 4.3333333333px #00ff80,76px -245.6666666667px #0cf;box-shadow:-244px -354.6666666667px #0d6efd,-40px -207.6666666667px #f7b40d,-43px -29.6666666667px #e04b44,115px -211.6666666667px #8d66d8,55px -243.6666666667px #87f138,-59px -112.6666666667px #66717f,-32px -183.6666666667px #9f0,27px -289.6666666667px #bf0,-237px -191.6666666667px #ff0048,-205px -360.6666666667px #00d5ff,131px -53.6666666667px #00c8ff,-53px -74.6666666667px #7f0,137px 56.3333333333px #00b7ff,151px -102.6666666667px #006fff,91px 33.3333333333px #0f6,-152px -392.6666666667px #ff00f7,-121px -79.6666666667px #ff0059,-57px 60.3333333333px #f06,141px 41.3333333333px #ff006f,-116px -114.6666666667px #00c8ff,-41px -163.6666666667px #d000ff,115px 50.3333333333px #3700ff,-225px -391.6666666667px #ff006a,-188px -286.6666666667px #95ff00,84px -93.6666666667px #ef0,210px -262.6666666667px #51ff00,-214px 11.3333333333px #6f00ff,-184px -143.6666666667px #1e00ff,171px -16.6666666667px #f0d,-28px -284.6666666667px #ff001a,-14px -249.6666666667px #001eff,-146px -197.6666666667px #40ff00,-173px -137.6666666667px #0ff,170px 25.3333333333px #0037ff,-222px -293.6666666667px #30f,-78px 48.3333333333px #62ff00,-6px -319.6666666667px #00ff09,216px -207.6666666667px #00ff9d,-5px 83.3333333333px #1a00ff,-1px -57.6666666667px #c4ff00,-238px -346.6666666667px #2bff00,44px -43.6666666667px #9500ff,120px -320.6666666667px #a0f,-42px -258.6666666667px #e100ff,195px -331.6666666667px #d9ff00,-141px -268.6666666667px #ff0d00,-242px -353.6666666667px #48ff00,-201px -90.6666666667px #ffd000,245px -51.6666666667px #ff7b00,-205px 4.3333333333px #00ff80,76px -245.6666666667px #0cf}}@-webkit-keyframes gravity{to{-webkit-transform:translateY(200px);transform:translateY(200px);opacity:0}}@keyframes gravity{to{-webkit-transform:translateY(200px);transform:translateY(200px);opacity:0}}.footer-import-button-wrap{position:relative;border-bottom:1px solid #ddd;padding:20px}.footer-import-button-wrap .hester-btn{z-index:2}.footer-import-button-wrap .hester-btn:after,.footer-import-button-wrap .hester-btn:before{content:'';display:block;position:absolute;width:7px;height:7px;border-radius:50%;margin-top:20%;pointer-events:none;-webkit-box-shadow:0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff;box-shadow:0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff,0 0 #fff}.footer-import-button-wrap .hester-btn:after{-webkit-animation-delay:1.5s,1.5s;animation-delay:1.5s,1.5s;margin-top:30%;left:0}.footer-import-button-wrap .hester-btn.animate:after,.footer-import-button-wrap .hester-btn.animate:before{-webkit-animation:1s bang ease-out 1 backwards,1s gravity ease-in 1 backwards;animation:1s bang ease-out 1 backwards,1s gravity ease-in 1 backwards}.footer-import-button-wrap .status{max-width:85%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.footer-import-button-wrap #hester-progress-bar{z-index:1;position:relative;overflow:hidden;position:absolute;top:0;left:0;right:0;bottom:0;display:none}.footer-import-button-wrap #hester-progress-bar>div{background-color:#d9dde2;position:absolute;top:0;left:0;bottom:0;background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:35px 35px;-webkit-animation:hester-progress 1.5s linear infinite;animation:hester-progress 1.5s linear infinite;-webkit-transition:width .2s ease-in-out;transition:width .2s ease-in-out}.theme-install-overlay{color:#444}.theme-install-overlay .wp-full-overlay-sidebar-content{background:0 0}.theme-install-overlay .spinner.hester-spinner{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid'%3E%3Cg transform='translate(50,50)'%3E%3Cg%3E%3Ccircle cx='0' cy='0' r='50' fill='rgba(255, 255, 255, 0.1)'%3E%3C/circle%3E%3Ccircle fill='%23FFF' cx='0' cy='-27' r='13' transform='rotate(86.3676)'%3E%3CanimateTransform attributeName='transform' type='rotate' calcMode='linear' values='0 0 0;360 0 0' keyTimes='0;1' dur='0.8s' begin='0s' repeatCount='indefinite'%3E%3C/animateTransform%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain}.hester-demo-name{background:#fff;color:#555d66;border-bottom:1px solid #ddd;margin:0 -20px 20px -20px;padding:12px 20px 15px 20px}.hester-demo-name span{font-size:13px;line-height:24px}.hester-demo-name h3{font-size:20px;font-weight:200;line-height:26px;margin:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.install-theme-info{padding-top:0;padding-bottom:0}.install-theme-info .site-type{position:absolute;right:12px;background:#f7b421;top:7px;padding:6px 7px;line-height:1;border-radius:2px;color:#fff;font-size:11px;font-weight:600}.install-theme-info .theme-screenshot{border:none;width:100%;display:block;margin:0}.devices-wrapper{position:absolute;bottom:0;right:0}.wp-full-overlay-sidebar .wp-full-overlay-sidebar-content{bottom:129px}body.importing .hester-demo-preview .hester-btn{pointer-events:none;background:#656a6f!important}body.importing .hester-demo-preview .hester-btn .spinner{display:inline-block;visibility:visible;margin-top:0;margin-bottom:0;margin-right:7px}body.importing .hester-demo-preview .wp-full-overlay-header .spinner{margin:0 0 0 auto}body.importing .hester-demo-preview .wp-full-overlay-header .hester-btn{margin-left:12px}body.importing .hester-demo-preview #hester-progress-bar{display:block}body.importing .hester-demo-preview .wp-full-overlay-header .spinner{display:block;visibility:visible;opacity:1}.theme-screenshot-wrap{overflow:hidden;max-height:320px;margin:20px 0 15px;border:1px solid #ddd;border-radius:3px}.expanded .wp-full-overlay-footer{border-top:none;height:129px;line-height:1}.expanded .wp-full-overlay-footer .hester-btn{position:relative;width:100%}.expanded .wp-full-overlay-footer .hester-btn .spinner.hester-spinner{position:absolute;left:12px;opacity:1;margin:0}.hester-demo-section{margin-bottom:30px}.hester-demo-section .hester-checkbox{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-weight:500;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:14px;cursor:default}.hester-demo-section .hester-checkbox input[type=checkbox]{position:relative;border:2px solid currentColor;border-radius:2px;background:0 0;clear:none;cursor:pointer;display:inline-block!important;line-height:0;margin:1px 0 0 0;outline:0;padding:0!important;text-align:center;vertical-align:text-top;height:20px;width:20px;min-width:20px;opacity:.5;-webkit-transition:all .26s cubic-bezier(.25, .8, .25, 1);transition:all .26s cubic-bezier(.25, .8, .25, 1);-webkit-box-shadow:none;box-shadow:none}.hester-demo-section .hester-checkbox input[type=checkbox]:before{position:absolute;margin:0;content:'';opacity:0;left:6px;top:2px;width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg) scale(0);-ms-transform:rotate(45deg) scale(0);transform:rotate(45deg) scale(0);z-index:2;-webkit-transition:all .26s cubic-bezier(.25, .8, .25, 1);transition:all .26s cubic-bezier(.25, .8, .25, 1);-webkit-box-sizing:border-box;box-sizing:border-box}.hester-demo-section .hester-checkbox input[type=checkbox]:disabled:not(:checked){border-color:currentColor!important;opacity:.65!important;pointer-events:none}.hester-demo-section .hester-checkbox input[type=checkbox]:disabled:not(:checked)+.hester-label{opacity:.65;pointer-events:none}.hester-demo-section .hester-checkbox input[type=checkbox]:checked{border-color:#0d6efd;background-color:#0d6efd;opacity:1}.hester-demo-section .hester-checkbox input[type=checkbox]:checked:before{opacity:1;-webkit-transform:rotate(45deg) scale(1);-ms-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1)}.hester-demo-section .hester-checkbox input[type=checkbox]:checked:disabled{opacity:.65;pointer-events:none;border-color:#0d6efd}.hester-demo-section .hester-checkbox input[type=checkbox]:checked:disabled+.hester-label{pointer-events:none}.hester-demo-section .hester-checkbox .hester-label{cursor:pointer;padding-left:11px}.hester-demo-section .hester-checkbox:hover input[type=checkbox]{border-color:#0d6efd;opacity:1}.hester-tooltip{position:relative;margin-left:3px;cursor:help}.hester-tooltip .dashicons{position:relative;top:1px}.hester-tooltip:after{display:none;position:absolute;background-color:#1d2329;top:-5px;left:50%;font-weight:400;-webkit-font-smoothing:antialiased;width:auto;line-height:1.5;text-align:center;-webkit-transform:translateX(-50%) translateY(-100%);-ms-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%);padding:8px 12px;width:200px;border-radius:2px;font-size:12px;color:rgba(255,255,255,.9);content:attr(data-tooltip);z-index:2;font-style:normal;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,Arial,"Helvetica Neue",sans-serif!important}.hester-tooltip:hover:after{display:block}.theme-install-overlay .close-full-overlay,.theme-install-overlay .next-theme,.theme-install-overlay .previous-theme{padding-left:0}.hester-demo-section-title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fff;color:#555d66;margin:20px -20px 15px -20px;padding:14px 20px;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.control-heading{margin-right:auto;font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:500}.hester-demo-section-title input[type=checkbox]:checked+label::before,.hester-demo-section-title:hover .control-toggle label::before{background-color:#f0f0f0;color:#000}.hester-demo-section-title input[type=checkbox]:checked+label::before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.hester-demo-section-title:hover{cursor:pointer}.theme-description{display:block;font-size:13px;line-height:1.5;margin-bottom:30px}.theme-description p{margin:1em 0}.theme-description p:last-child{margin-bottom:0}em.theme-description{margin-top:30px}em.active{color:#0daf0d}.control-toggle{margin-left:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%}.control-toggle input[type=checkbox]{display:none}.control-toggle label{margin-left:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:50%;color:#72777c}.control-toggle label:before{content:"\f140";display:block;padding:1px 2px 1px 0;speak:none;border-radius:50%;color:inherit;font:normal 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.control-toggle label:after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;z-index:1}@-webkit-keyframes hester-progress{0%{background-position:0 0}100%{background-position:35px 35px}}@keyframes hester-progress{0%{background-position:0 0}100%{background-position:35px 35px}}.hester-demo{cursor:pointer;background-color:#fff;border:1px solid #d6e1e8;border-radius:3px;overflow:hidden}.hester-demo .demo-screenshot{position:relative}.hester-demo .demo-screenshot img{max-width:100%;display:block;width:100%}.hester-demo .demo-screenshot:after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(35,40,45,.7);-webkit-transition:opacity .15s ease;transition:opacity .15s ease;opacity:0;z-index:1}.hester-demo .demo-screenshot .text-overlay{position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;justify-content:center;-webkit-transition:all .1s ease;transition:all .1s ease;-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6);opacity:0}.hester-demo .demo-screenshot .text-overlay svg{stroke:#FFF;width:50px;height:50px}.hester-demo .demo-screenshot .text-overlay span{font-size:11px;text-transform:uppercase;letter-spacing:.2em;color:rgba(255,255,255,.75);margin-top:1rem}.hester-demo:hover .demo-actions,.hester-demo:hover .demo-screenshot::after{opacity:1}.hester-demo:hover .text-overlay{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1}.hester-demo .demo-screenshot .site-type{position:absolute;right:12px;background:#f7b421;top:7px;padding:6px 7px;line-height:1;border-radius:2px;color:#fff;font-size:11px;font-weight:600;z-index:11}.hester-demo:hover .demo-cat-list{opacity:.2}.hester-demo .demo-meta{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;padding:5px 15px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;height:58px;background-color:#fff}.hester-demo .demo-name .name{display:block;font-size:15px;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.hester-demo .demo-cat-list{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;bottom:12px;left:12px;z-index:9;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.hester-demo .demo-cat-list span{display:inline-block;color:#fff;border-radius:2px;padding:6px 8px;background-color:rgba(0,0,0,.25);font-weight:400;line-height:1;font-size:10px;text-transform:uppercase;letter-spacing:.1em;margin-right:4px}.hester-demo .demo-actions{background-color:rgba(250,250,250,.9);border-left:1px solid #d6e1e8;position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;top:0;right:0;bottom:0;padding:0 15px;z-index:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease;opacity:0}.hester-demo .demo-actions .secondary{margin-left:7px}div.hester-section-title{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}div.hester-section-title .hester-btn{margin-left:12px}.hester-demo-section-content.plugin-list .plugin-active em{font-size:12px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:6px;font-weight:400;color:#79ba49;font-style:normal}.hester-demo-section-content.plugin-list .plugin-active em i{margin-right:3px}.hester-demo-section-content.plugin-list .plugin-active .hester-label{opacity:.5}.demo-search{margin-left:auto;position:relative}.demo-search svg{position:absolute;z-index:1;top:50%;right:12px;margin-top:-8px;width:16px;height:16px}#hester-search-demos{height:31px;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;padding:0 31px 0 12px;background:rgba(0,0,0,0);border-color:#c7d5df}#hester-search-demos:focus{border-color:#728191}#wpbody-content .demo-filters{padding:0 16px;margin:24px 0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;border:1px solid #d6e1e8;border-radius:2px}#wpbody-content .demo-filters ul{list-style:none;margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#wpbody-content .demo-filters ul li{margin:0 8px}#wpbody-content .demo-filters ul li.selected>a,#wpbody-content .demo-filters ul li.selected>a:hover{color:#0d6efd;border-bottom-color:#0d6efd}#wpbody-content .demo-filters ul li:first-child{margin-left:0}#wpbody-content .demo-filters ul li:last-child{margin-right:0}#wpbody-content .demo-filters ul li a{text-decoration:none;display:block;color:#66717f;padding:12px 0;border-bottom:2px solid transparent;margin-bottom:-1px}#wpbody-content .demo-filters ul li a:focus{-webkit-box-shadow:none;box-shadow:none;outline:thin dotted #7f8a99}#wpbody-content .demo-filters ul li a:hover{color:#23282d}#wpbody-content .demo-filters ul li:last-child{margin-right:0}#wpbody-content .demo-filters ul:last-child{margin-left:auto}.demo-notice{text-align:center;font-size:11px;color:#8d98a7;text-transform:uppercase;letter-spacing:.1em;margin:30px 0}core/admin/demo-library/assets/css/demo-library.css000064400000062522147600374750016370 0ustar00.hester-demo-preview-on body { overflow: hidden; } .theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .theme-install-overlay .wp-full-overlay-sidebar .wp-full-overlay-header .hester-btn { margin: 7px 12px 7px auto; float: none; } @-webkit-keyframes bang { to { -webkit-box-shadow: -244px -354.6666666667px #0d6efd, -40px -207.6666666667px #f7b40d, -43px -29.6666666667px #e04b44, 115px -211.6666666667px #8d66d8, 55px -243.6666666667px #87f138, -59px -112.6666666667px #66717f, -32px -183.6666666667px #99ff00, 27px -289.6666666667px #bbff00, -237px -191.6666666667px #ff0048, -205px -360.6666666667px #00d5ff, 131px -53.6666666667px #00c8ff, -53px -74.6666666667px #77ff00, 137px 56.3333333333px #00b7ff, 151px -102.6666666667px #006fff, 91px 33.3333333333px #00ff66, -152px -392.6666666667px #ff00f7, -121px -79.6666666667px #ff0059, -57px 60.3333333333px #ff0066, 141px 41.3333333333px #ff006f, -116px -114.6666666667px #00c8ff, -41px -163.6666666667px #d000ff, 115px 50.3333333333px #3700ff, -225px -391.6666666667px #ff006a, -188px -286.6666666667px #95ff00, 84px -93.6666666667px #eeff00, 210px -262.6666666667px #51ff00, -214px 11.3333333333px #6f00ff, -184px -143.6666666667px #1e00ff, 171px -16.6666666667px #ff00dd, -28px -284.6666666667px #ff001a, -14px -249.6666666667px #001eff, -146px -197.6666666667px #40ff00, -173px -137.6666666667px cyan, 170px 25.3333333333px #0037ff, -222px -293.6666666667px #3300ff, -78px 48.3333333333px #62ff00, -6px -319.6666666667px #00ff09, 216px -207.6666666667px #00ff9d, -5px 83.3333333333px #1a00ff, -1px -57.6666666667px #c4ff00, -238px -346.6666666667px #2bff00, 44px -43.6666666667px #9500ff, 120px -320.6666666667px #aa00ff, -42px -258.6666666667px #e100ff, 195px -331.6666666667px #d9ff00, -141px -268.6666666667px #ff0d00, -242px -353.6666666667px #48ff00, -201px -90.6666666667px #ffd000, 245px -51.6666666667px #ff7b00, -205px 4.3333333333px #00ff80, 76px -245.6666666667px #00ccff; box-shadow: -244px -354.6666666667px #0d6efd, -40px -207.6666666667px #f7b40d, -43px -29.6666666667px #e04b44, 115px -211.6666666667px #8d66d8, 55px -243.6666666667px #87f138, -59px -112.6666666667px #66717f, -32px -183.6666666667px #99ff00, 27px -289.6666666667px #bbff00, -237px -191.6666666667px #ff0048, -205px -360.6666666667px #00d5ff, 131px -53.6666666667px #00c8ff, -53px -74.6666666667px #77ff00, 137px 56.3333333333px #00b7ff, 151px -102.6666666667px #006fff, 91px 33.3333333333px #00ff66, -152px -392.6666666667px #ff00f7, -121px -79.6666666667px #ff0059, -57px 60.3333333333px #ff0066, 141px 41.3333333333px #ff006f, -116px -114.6666666667px #00c8ff, -41px -163.6666666667px #d000ff, 115px 50.3333333333px #3700ff, -225px -391.6666666667px #ff006a, -188px -286.6666666667px #95ff00, 84px -93.6666666667px #eeff00, 210px -262.6666666667px #51ff00, -214px 11.3333333333px #6f00ff, -184px -143.6666666667px #1e00ff, 171px -16.6666666667px #ff00dd, -28px -284.6666666667px #ff001a, -14px -249.6666666667px #001eff, -146px -197.6666666667px #40ff00, -173px -137.6666666667px cyan, 170px 25.3333333333px #0037ff, -222px -293.6666666667px #3300ff, -78px 48.3333333333px #62ff00, -6px -319.6666666667px #00ff09, 216px -207.6666666667px #00ff9d, -5px 83.3333333333px #1a00ff, -1px -57.6666666667px #c4ff00, -238px -346.6666666667px #2bff00, 44px -43.6666666667px #9500ff, 120px -320.6666666667px #aa00ff, -42px -258.6666666667px #e100ff, 195px -331.6666666667px #d9ff00, -141px -268.6666666667px #ff0d00, -242px -353.6666666667px #48ff00, -201px -90.6666666667px #ffd000, 245px -51.6666666667px #ff7b00, -205px 4.3333333333px #00ff80, 76px -245.6666666667px #00ccff; } } @keyframes bang { to { -webkit-box-shadow: -244px -354.6666666667px #0d6efd, -40px -207.6666666667px #f7b40d, -43px -29.6666666667px #e04b44, 115px -211.6666666667px #8d66d8, 55px -243.6666666667px #87f138, -59px -112.6666666667px #66717f, -32px -183.6666666667px #99ff00, 27px -289.6666666667px #bbff00, -237px -191.6666666667px #ff0048, -205px -360.6666666667px #00d5ff, 131px -53.6666666667px #00c8ff, -53px -74.6666666667px #77ff00, 137px 56.3333333333px #00b7ff, 151px -102.6666666667px #006fff, 91px 33.3333333333px #00ff66, -152px -392.6666666667px #ff00f7, -121px -79.6666666667px #ff0059, -57px 60.3333333333px #ff0066, 141px 41.3333333333px #ff006f, -116px -114.6666666667px #00c8ff, -41px -163.6666666667px #d000ff, 115px 50.3333333333px #3700ff, -225px -391.6666666667px #ff006a, -188px -286.6666666667px #95ff00, 84px -93.6666666667px #eeff00, 210px -262.6666666667px #51ff00, -214px 11.3333333333px #6f00ff, -184px -143.6666666667px #1e00ff, 171px -16.6666666667px #ff00dd, -28px -284.6666666667px #ff001a, -14px -249.6666666667px #001eff, -146px -197.6666666667px #40ff00, -173px -137.6666666667px cyan, 170px 25.3333333333px #0037ff, -222px -293.6666666667px #3300ff, -78px 48.3333333333px #62ff00, -6px -319.6666666667px #00ff09, 216px -207.6666666667px #00ff9d, -5px 83.3333333333px #1a00ff, -1px -57.6666666667px #c4ff00, -238px -346.6666666667px #2bff00, 44px -43.6666666667px #9500ff, 120px -320.6666666667px #aa00ff, -42px -258.6666666667px #e100ff, 195px -331.6666666667px #d9ff00, -141px -268.6666666667px #ff0d00, -242px -353.6666666667px #48ff00, -201px -90.6666666667px #ffd000, 245px -51.6666666667px #ff7b00, -205px 4.3333333333px #00ff80, 76px -245.6666666667px #00ccff; box-shadow: -244px -354.6666666667px #0d6efd, -40px -207.6666666667px #f7b40d, -43px -29.6666666667px #e04b44, 115px -211.6666666667px #8d66d8, 55px -243.6666666667px #87f138, -59px -112.6666666667px #66717f, -32px -183.6666666667px #99ff00, 27px -289.6666666667px #bbff00, -237px -191.6666666667px #ff0048, -205px -360.6666666667px #00d5ff, 131px -53.6666666667px #00c8ff, -53px -74.6666666667px #77ff00, 137px 56.3333333333px #00b7ff, 151px -102.6666666667px #006fff, 91px 33.3333333333px #00ff66, -152px -392.6666666667px #ff00f7, -121px -79.6666666667px #ff0059, -57px 60.3333333333px #ff0066, 141px 41.3333333333px #ff006f, -116px -114.6666666667px #00c8ff, -41px -163.6666666667px #d000ff, 115px 50.3333333333px #3700ff, -225px -391.6666666667px #ff006a, -188px -286.6666666667px #95ff00, 84px -93.6666666667px #eeff00, 210px -262.6666666667px #51ff00, -214px 11.3333333333px #6f00ff, -184px -143.6666666667px #1e00ff, 171px -16.6666666667px #ff00dd, -28px -284.6666666667px #ff001a, -14px -249.6666666667px #001eff, -146px -197.6666666667px #40ff00, -173px -137.6666666667px cyan, 170px 25.3333333333px #0037ff, -222px -293.6666666667px #3300ff, -78px 48.3333333333px #62ff00, -6px -319.6666666667px #00ff09, 216px -207.6666666667px #00ff9d, -5px 83.3333333333px #1a00ff, -1px -57.6666666667px #c4ff00, -238px -346.6666666667px #2bff00, 44px -43.6666666667px #9500ff, 120px -320.6666666667px #aa00ff, -42px -258.6666666667px #e100ff, 195px -331.6666666667px #d9ff00, -141px -268.6666666667px #ff0d00, -242px -353.6666666667px #48ff00, -201px -90.6666666667px #ffd000, 245px -51.6666666667px #ff7b00, -205px 4.3333333333px #00ff80, 76px -245.6666666667px #00ccff; } } @-webkit-keyframes gravity { to { -webkit-transform: translateY(200px); transform: translateY(200px); opacity: 0; } } @keyframes gravity { to { -webkit-transform: translateY(200px); transform: translateY(200px); opacity: 0; } } .footer-import-button-wrap { position: relative; border-bottom: 1px solid #ddd; padding: 20px; } .footer-import-button-wrap .hester-btn { z-index: 2; } .footer-import-button-wrap .hester-btn:before, .footer-import-button-wrap .hester-btn:after { content: ''; display: block; position: absolute; width: 7px; height: 7px; border-radius: 50%; margin-top: 20%; pointer-events: none; -webkit-box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff; box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff; } .footer-import-button-wrap .hester-btn:after { -webkit-animation-delay: 1.5s, 1.5s; animation-delay: 1.5s, 1.5s; margin-top: 30%; left: 0; } .footer-import-button-wrap .hester-btn.animate:before, .footer-import-button-wrap .hester-btn.animate:after { -webkit-animation: 1s bang ease-out 1 backwards, 1s gravity ease-in 1 backwards; animation: 1s bang ease-out 1 backwards, 1s gravity ease-in 1 backwards; } .footer-import-button-wrap .status { max-width: 85%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .footer-import-button-wrap #hester-progress-bar { z-index: 1; position: relative; overflow: hidden; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: none; } .footer-import-button-wrap #hester-progress-bar > div { background-color: #d9dde2; position: absolute; top: 0; left: 0; bottom: 0; background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 35px 35px; -webkit-animation: hester-progress 1.5s linear infinite; animation: hester-progress 1.5s linear infinite; -webkit-transition: width .2s ease-in-out; transition: width .2s ease-in-out; } .theme-install-overlay { color: #444; } .theme-install-overlay .wp-full-overlay-sidebar-content { background: none; } .theme-install-overlay .spinner.hester-spinner { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid'%3E%3Cg transform='translate(50,50)'%3E%3Cg%3E%3Ccircle cx='0' cy='0' r='50' fill='rgba(255, 255, 255, 0.1)'%3E%3C/circle%3E%3Ccircle fill='%23FFF' cx='0' cy='-27' r='13' transform='rotate(86.3676)'%3E%3CanimateTransform attributeName='transform' type='rotate' calcMode='linear' values='0 0 0;360 0 0' keyTimes='0;1' dur='0.8s' begin='0s' repeatCount='indefinite'%3E%3C/animateTransform%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); background-repeat: no-repeat; background-size: contain; } .hester-demo-name { background: #fff; color: #555d66; border-bottom: 1px solid #ddd; margin: 0 -20px 20px -20px; padding: 12px 20px 15px 20px; } .hester-demo-name span { font-size: 13px; line-height: 24px; } .hester-demo-name h3 { font-size: 20px; font-weight: 200; line-height: 26px; margin: 0; display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .install-theme-info { padding-top: 0; padding-bottom: 0; } .install-theme-info .site-type { position: absolute; right: 12px; background: #f7b421; top: 7px; padding: 6px 7px; line-height: 1; border-radius: 2px; color: #FFF; font-size: 11px; font-weight: 600; } .install-theme-info .theme-screenshot { border: none; width: 100%; display: block; margin: 0; } .devices-wrapper { position: absolute; bottom: 0; right: 0; } .wp-full-overlay-sidebar .wp-full-overlay-sidebar-content { bottom: 129px; } body.importing .hester-demo-preview .hester-btn { pointer-events: none; background: #656a6f !important; } body.importing .hester-demo-preview .hester-btn .spinner { display: inline-block; visibility: visible; margin-top: 0; margin-bottom: 0; margin-right: 7px; } body.importing .hester-demo-preview .wp-full-overlay-header .spinner { margin: 0 0 0 auto; } body.importing .hester-demo-preview .wp-full-overlay-header .hester-btn { margin-left: 12px; } body.importing .hester-demo-preview #hester-progress-bar { display: block; } body.importing .hester-demo-preview .wp-full-overlay-header .spinner { display: block; visibility: visible; opacity: 1; } .theme-screenshot-wrap { overflow: hidden; max-height: 320px; margin: 20px 0 15px; border: 1px solid #ddd; border-radius: 3px; } .expanded .wp-full-overlay-footer { border-top: none; height: 129px; line-height: 1; } .expanded .wp-full-overlay-footer .hester-btn { position: relative; width: 100%; } .expanded .wp-full-overlay-footer .hester-btn .spinner.hester-spinner { position: absolute; left: 12px; opacity: 1; margin: 0; } .hester-demo-section { margin-bottom: 30px; } .hester-demo-section .hester-checkbox { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; font-weight: 500; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; font-size: 14px; cursor: default; } .hester-demo-section .hester-checkbox input[type=checkbox] { position: relative; border: 2px solid currentColor; border-radius: 2px; background: none; clear: none; cursor: pointer; display: inline-block !important; line-height: 0; margin: 1px 0 0 0; outline: 0; padding: 0 !important; text-align: center; vertical-align: text-top; height: 20px; width: 20px; min-width: 20px; opacity: .5; -webkit-transition: all 0.26s cubic-bezier(0.25, 0.8, 0.25, 1); transition: all 0.26s cubic-bezier(0.25, 0.8, 0.25, 1); -webkit-box-shadow: none; box-shadow: none; } .hester-demo-section .hester-checkbox input[type=checkbox]:before { position: absolute; margin: 0; content: ''; opacity: 0; left: 6px; top: 2px; width: 5px; height: 10px; border: solid #FFF; border-width: 0 2px 2px 0; -webkit-transform: rotate(45deg) scale(0); -ms-transform: rotate(45deg) scale(0); transform: rotate(45deg) scale(0); z-index: 2; -webkit-transition: all 0.26s cubic-bezier(0.25, 0.8, 0.25, 1); transition: all 0.26s cubic-bezier(0.25, 0.8, 0.25, 1); -webkit-box-sizing: border-box; box-sizing: border-box; } .hester-demo-section .hester-checkbox input[type=checkbox]:disabled:not(:checked) { border-color: currentColor !important; opacity: .65 !important; pointer-events: none; } .hester-demo-section .hester-checkbox input[type=checkbox]:disabled:not(:checked) + .hester-label { opacity: .65; pointer-events: none; } .hester-demo-section .hester-checkbox input[type=checkbox]:checked { border-color: #0d6efd; background-color: #0d6efd; opacity: 1; } .hester-demo-section .hester-checkbox input[type=checkbox]:checked:before { opacity: 1; -webkit-transform: rotate(45deg) scale(1); -ms-transform: rotate(45deg) scale(1); transform: rotate(45deg) scale(1); } .hester-demo-section .hester-checkbox input[type=checkbox]:checked:disabled { opacity: .65; pointer-events: none; border-color: #0d6efd; } .hester-demo-section .hester-checkbox input[type=checkbox]:checked:disabled + .hester-label { pointer-events: none; } .hester-demo-section .hester-checkbox .hester-label { cursor: pointer; padding-left: 11px; } .hester-demo-section .hester-checkbox:hover input[type=checkbox] { border-color: #0d6efd; opacity: 1; } .hester-tooltip { position: relative; margin-left: 3px; cursor: help; } .hester-tooltip .dashicons { position: relative; top: 1px; } .hester-tooltip:after { display: none; position: absolute; background-color: #1d2329; top: -5px; left: 50%; font-weight: 400; -webkit-font-smoothing: antialiased; width: auto; line-height: 1.5; text-align: center; -webkit-transform: translateX(-50%) translateY(-100%); -ms-transform: translateX(-50%) translateY(-100%); transform: translateX(-50%) translateY(-100%); padding: 8px 12px; width: 200px; border-radius: 2px; font-size: 12px; color: rgba(255, 255, 255, 0.9); content: attr(data-tooltip); z-index: 2; font-style: normal; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, Arial, "Helvetica Neue", sans-serif !important; } .hester-tooltip:hover:after { display: block; } .theme-install-overlay .close-full-overlay, .theme-install-overlay .previous-theme, .theme-install-overlay .next-theme { padding-left: 0; } .hester-demo-section-title { position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; background-color: #ffffff; color: #555d66; margin: 20px -20px 15px -20px; padding: 14px 20px; border-bottom: 1px solid #ddd; border-top: 1px solid #ddd; } .control-heading { margin-right: auto; font-size: 11px; text-transform: uppercase; letter-spacing: 1px; font-weight: 500; } .hester-demo-section-title:hover .control-toggle label::before, .hester-demo-section-title input[type=checkbox]:checked + label::before { background-color: #f0f0f0; color: #000; } .hester-demo-section-title input[type=checkbox]:checked + label::before { -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .hester-demo-section-title:hover { cursor: pointer; } .theme-description { display: block; font-size: 13px; line-height: 1.5; margin-bottom: 30px; } .theme-description p { margin: 1em 0; } .theme-description p:last-child { margin-bottom: 0; } em.theme-description { margin-top: 30px; } em.active { color: #0daf0d; } .control-toggle { margin-left: 6px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; border-radius: 50%; } .control-toggle input[type=checkbox] { display: none; } .control-toggle label { margin-left: 6px; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; border-radius: 50%; color: #72777c; } .control-toggle label:before { content: "\f140"; display: block; padding: 1px 2px 1px 0px; speak: none; border-radius: 50%; color: inherit; font: normal 20px/1 dashicons; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-decoration: none !important; } .control-toggle label:after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1; } @-webkit-keyframes hester-progress { 0% { background-position: 0 0; } 100% { background-position: 35px 35px; } } @keyframes hester-progress { 0% { background-position: 0 0; } 100% { background-position: 35px 35px; } } .hester-demo { cursor: pointer; background-color: #FFF; border: 1px solid #d6e1e8; border-radius: 3px; overflow: hidden; } .hester-demo .demo-screenshot { position: relative; } .hester-demo .demo-screenshot img { max-width: 100%; display: block; width: 100%; } .hester-demo .demo-screenshot:after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(35, 40, 45, 0.7); -webkit-transition: opacity .15s ease; transition: opacity .15s ease; opacity: 0; z-index: 1; } .hester-demo .demo-screenshot .text-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 2; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; justify-content: center; -webkit-transition: all .1s ease; transition: all .1s ease; -webkit-transform: scale(0.6); -ms-transform: scale(0.6); transform: scale(0.6); opacity: 0; } .hester-demo .demo-screenshot .text-overlay svg { stroke: #FFF; width: 50px; height: 50px; } .hester-demo .demo-screenshot .text-overlay span { font-size: 11px; text-transform: uppercase; letter-spacing: .2em; color: rgba(255, 255, 255, 0.75); margin-top: 1rem; } .hester-demo:hover .demo-actions, .hester-demo:hover .demo-screenshot::after { opacity: 1; } .hester-demo:hover .text-overlay { -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); opacity: 1; } .hester-demo .demo-screenshot .site-type { position: absolute; right: 12px; background: #f7b421; top: 7px; padding: 6px 7px; line-height: 1; border-radius: 2px; color: #fff; font-size: 11px; font-weight: 600; z-index: 11; } .hester-demo:hover .demo-cat-list { opacity: .2; } .hester-demo .demo-meta { display: -webkit-box; display: -ms-flexbox; display: flex; position: relative; padding: 5px 15px; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -ms-flex-wrap: wrap; flex-wrap: wrap; height: 58px; background-color: #FFF; } .hester-demo .demo-name .name { display: block; font-size: 15px; font-weight: 500; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .hester-demo .demo-cat-list { display: -webkit-box; display: -ms-flexbox; display: flex; position: absolute; bottom: 12px; left: 12px; z-index: 9; -webkit-transition: opacity .1s ease; transition: opacity .1s ease; } .hester-demo .demo-cat-list span { display: inline-block; color: #FFF; border-radius: 2px; padding: 6px 8px; background-color: rgba(0, 0, 0, 0.25); font-weight: 400; line-height: 1; font-size: 10px; text-transform: uppercase; letter-spacing: .1em; margin-right: 4px; } .hester-demo .demo-actions { background-color: rgba(250, 250, 250, 0.9); border-left: 1px solid #d6e1e8; position: absolute; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; top: 0; right: 0; bottom: 0; padding: 0 15px; z-index: 1; -webkit-transition: opacity .15s ease; transition: opacity .15s ease; opacity: 0; } .hester-demo .demo-actions .secondary { margin-left: 7px; } div.hester-section-title { display: -webkit-box; display: -ms-flexbox; display: flex; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } div.hester-section-title .hester-btn { margin-left: 12px; } .hester-demo-section-content.plugin-list .plugin-active em { font-size: 12px; display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; margin-left: 6px; font-weight: 400; color: #79ba49; font-style: normal; } .hester-demo-section-content.plugin-list .plugin-active em i { margin-right: 3px; } .hester-demo-section-content.plugin-list .plugin-active .hester-label { opacity: .5; } .demo-search { margin-left: auto; position: relative; } .demo-search svg { position: absolute; z-index: 1; top: 50%; right: 12px; margin-top: -8px; width: 16px; height: 16px; } #hester-search-demos { height: 31px; border-radius: 2px; -webkit-box-shadow: none; box-shadow: none; padding: 0 31px 0 12px; background: rgba(0, 0, 0, 0); border-color: #c7d5df; } #hester-search-demos:focus { border-color: #728191; } #wpbody-content .demo-filters { padding: 0 16px; margin: 24px 0; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -ms-flex-wrap: wrap; flex-wrap: wrap; border: 1px solid #d6e1e8; border-radius: 2px; } #wpbody-content .demo-filters ul { list-style: none; margin: 0; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } #wpbody-content .demo-filters ul li { margin: 0 8px; } #wpbody-content .demo-filters ul li.selected > a, #wpbody-content .demo-filters ul li.selected > a:hover { color: #0d6efd; border-bottom-color: #0d6efd; } #wpbody-content .demo-filters ul li:first-child { margin-left: 0; } #wpbody-content .demo-filters ul li:last-child { margin-right: 0; } #wpbody-content .demo-filters ul li a { text-decoration: none; display: block; color: #66717f; padding: 12px 0; border-bottom: 2px solid rgba(0, 0, 0, 0); margin-bottom: -1px; } #wpbody-content .demo-filters ul li a:focus { -webkit-box-shadow: none; box-shadow: none; outline: thin dotted #7f8a99; } #wpbody-content .demo-filters ul li a:hover { color: #23282d; } #wpbody-content .demo-filters ul li:last-child { margin-right: 0; } #wpbody-content .demo-filters ul:last-child { margin-left: auto; } .demo-notice { text-align: center; font-size: 11px; color: #8d98a7; text-transform: uppercase; letter-spacing: .1em; margin: 30px 0; } core/admin/demo-library/assets/js/dev/demo-library.js000064400000052671147600374750016622 0ustar00//--------------------------------------------------------------------// // Hester Core Demo Library script. //--------------------------------------------------------------------// ;(function( $ ) { "use strict"; /** * Common element caching. */ var $body = $( 'body' ); var $document = $( document ); var $wrapper = $( '#page' ); var $html = $( 'html' ); var $this; /** * Holds most important methods that bootstrap the whole theme. * * @type {Object} */ var HesterCoreDemoLibrary = { import_start_time : '', install_plugins : [], installed_plugins : [], progress : 0, import_steps : [], completed_steps : [], /** * Start the engine. * * @since 1.0.0 */ init: function() { // Document ready $(document).ready( HesterCoreDemoLibrary.ready ); // Window load $(window).on( 'load', HesterCoreDemoLibrary.load ); // Bind UI actions HesterCoreDemoLibrary.bindUIActions(); // Trigger event when Hester fully loaded $(document).trigger( 'hesterCoreReady' ); }, //--------------------------------------------------------------------// // Events //--------------------------------------------------------------------// /** * Document ready. * * @since 1.0.0 */ ready: function() { }, /** * Window load. * * @since 1.0.0 */ load: function() { HesterCoreDemoLibrary.populateTemplates( hesterCoreDemoLibrary.templates ); }, /** * Bind UI actions. * * @since 1.0.0 */ bindUIActions: function() { // Demo preview screen. $document.on( 'click' , '.hester-demo .demo-screenshot, .hester-demo .preview', HesterCoreDemoLibrary.preview ); // Direct import button. $document.on( 'click' , '.hester-demo .import', function(e) { $(this).siblings( '.preview' ).click(); $( '.wp-full-overlay-main iframe' ).on( 'load', function() { $( '.wp-full-overlay-header .hester-demo-import' ).trigger( 'click' ); }); } ); // Close preview screen. $document.on( 'click', '.close-full-overlay', HesterCoreDemoLibrary.closePreview ); $document.keyup( function(e) { if ( 27 === e.keyCode ) { $( '.close-full-overlay' ).trigger( 'click' ); } }); // Next/Preview demo. $document.on( 'click', '.next-theme', HesterCoreDemoLibrary.previewNext ); $document.on( 'click', '.previous-theme', HesterCoreDemoLibrary.previewPrevious ); // Preview demo on a device screen. $document.on( 'click', '.devices button', HesterCoreDemoLibrary.previewDevice ); // Collapse sidebar. $document.on( 'click', '.collapse-sidebar', HesterCoreDemoLibrary.collapseSidebar ); // Collapse section. $document.on( 'click', '.hester-demo-section-title .control-toggle label', HesterCoreDemoLibrary.collapsePreviewSection ); // Import demo. $document.on( 'click', '.hester-demo-import', HesterCoreDemoLibrary.importDemo ); $document.on( 'click', '#import_content, #import_media', HesterCoreDemoLibrary.importOptionsContent ); // Import steps triggers. $document.on( 'hester-core-import_started', HesterCoreDemoLibrary.importStarted ); $document.on( 'hester-core-install_plugins', HesterCoreDemoLibrary.pluginsInstallActivate ); $document.on( 'hester-core-import_customizer', HesterCoreDemoLibrary.importCustomizer ); $document.on( 'hester-core-import_content', HesterCoreDemoLibrary.importContent ); $document.on( 'hester-core-import_widgets', HesterCoreDemoLibrary.importWidgets ); $document.on( 'hester-core-import_options', HesterCoreDemoLibrary.importOptions ); $document.on( 'hester-core-import_wpforms', HesterCoreDemoLibrary.importWPForms ); $document.on( 'hester-core-import_completed', HesterCoreDemoLibrary.importCompleted ); // Filter template list. $document.on( 'click', '.demo-filters a', HesterCoreDemoLibrary.filters ); $document.on( 'input', '.demo-search input', HesterCoreDemoLibrary.search ); }, //--------------------------------------------------------------------// // Functions //--------------------------------------------------------------------// /** * Demo preview page. * * On click on image, more link & preview button. */ preview: function( event ) { event.preventDefault(); var site_id = $(this).parents('.hester-demo').data('demo-id') || ''; var self = $(this).parents( '.hester-demo' ); self.addClass( 'hester-demo-previewed' ); $html.addClass( 'hester-demo-preview-on' ); HesterCoreDemoLibrary.previewDemo( self ); }, /** * Preview Demo website. */ previewDemo: function( anchor ) { var template = wp.template( 'hester-core-demo-preview' ); var data = { id : anchor.data( 'demo-id' ), pro : anchor.data( 'demo-pro' ), url : anchor.data( 'demo-url' ), screenshot : anchor.data( 'demo-screenshot' ), name : anchor.data( 'demo-name' ), description : anchor.data( 'demo-description' ), slug : anchor.data( 'demo-slug' ), required_plugins : anchor.data( 'required-plugins' ), //categories : anchor.data( 'categories' ), is_pro : !!hesterCoreDemoLibrary.is_pro, upgrade_to_pro : hesterCoreDemoLibrary.upgrade_to_pro_url }; $( '.theme-install-overlay' ).remove(); $( '.hester-section.demos' ).append( template( data ) ); $( '.theme-install-overlay' ).css('display', 'block'); HesterCoreDemoLibrary.updateNextPrev(); $( '.wp-full-overlay-main iframe' ).on( 'load', function() { $( '.hester-demo-preview .hester-demo-import' ).removeAttr( 'disabled' ); }); }, /** * Check Next Previous Buttons. */ updateNextPrev: function() { if ( $body.hasClass( 'importing' ) ) { $( '.next-theme, .previous-theme' ).addClass( 'disabled' ); return; } var current = $( '.hester-demo-previewed' ).parent(); var next = current.nextAll( '.hester-column' ).length; var prev = current.prevAll( '.hester-column' ).length; if ( 0 == next ) { $( '.next-theme' ).addClass( 'disabled' ); } else if ( 0 != next ) { $( '.next-theme' ).removeClass( 'disabled' ); } if ( 0 == prev ) { $( '.previous-theme' ).addClass( 'disabled' ); } else if ( 0 != prev ) { $( '.previous-theme' ).removeClass( 'disabled' ); } return; }, /** * Close demo preview screen. */ closePreview: function( event ) { event.preventDefault(); // Import process is started? // And Closing the window? Then showing the warning confirm message. if ( $('body').hasClass( 'importing' ) && ! confirm( hesterCoreDemoLibrary.strings.closeWindowWarning ) ) { return; } $( 'body' ).removeClass( 'importing' ); $( '.previous-theme, .next-theme' ).removeClass( 'disabled' ); $( '.theme-install-overlay' ).css( 'display', 'none' ); $( '.theme-install-overlay' ).remove(); $( '.hester-demo-previewed' ).removeClass( 'hester-demo-previewed' ); $html.removeClass( 'hester-demo-preview-on' ); }, /** * Preview previous demo. */ previewPrevious: function( event ) { event.preventDefault(); var current = $( '.hester-demo-previewed' ).removeClass( 'hester-demo-previewed' ).parent(); var prev = current.prev( '.hester-column' ).find( '.hester-demo' ).addClass( 'hester-demo-previewed' ); var site_id = $(this).parents( '.wp-full-overlay-header' ).data('demo-id') || ''; HesterCoreDemoLibrary.previewDemo( prev ); }, /** * Preview next demo. */ previewNext: function( event ) { event.preventDefault(); var current = $( '.hester-demo-previewed' ).removeClass( 'hester-demo-previewed' ).parent(); var next = current.next( '.hester-column' ).find( '.hester-demo' ).addClass( 'hester-demo-previewed' ); var site_id = $(this).parents( '.wp-full-overlay-header' ).data( 'demo-id' ) || ''; HesterCoreDemoLibrary.previewDemo( next ); }, /** * Preview on a device sized screen. */ previewDevice: function( event ) { var device = $( event.currentTarget ).data( 'device' ); $( '.theme-install-overlay' ) .removeClass( 'preview-desktop preview-tablet preview-mobile' ) .addClass( 'preview-' + device ) .data( 'current-preview-device', device ); HesterCoreDemoLibrary.previewDeviceButtons( device ); }, /** * Toggle preview device buttons. */ previewDeviceButtons: function( device ) { var $devices = $( '.wp-full-overlay-footer .devices' ); $devices.find( 'button' ) .removeClass( 'active' ) .attr( 'aria-pressed', false ); $devices.find( 'button.preview-' + device ) .addClass( 'active' ) .attr( 'aria-pressed', true ); }, /** * Collapse Sidebar. */ collapseSidebar: function() { event.preventDefault(); var overlay = $( '.wp-full-overlay' ); if ( overlay.hasClass( 'expanded' ) ) { overlay.removeClass( 'expanded' ); overlay.addClass( 'collapsed' ); return; } if ( overlay.hasClass( 'collapsed' ) ) { overlay.removeClass( 'collapsed' ); overlay.addClass( 'expanded' ); return; } }, /** * Collapse Section. */ collapsePreviewSection: function() { var section_content = $(this).closest( '.hester-demo-section-title' ).next( '.hester-demo-section-content' ); if ( $(this).prev('input[type="checkbox"]').is(':checked') ) { section_content.removeClass( 'hidden' ); } else { section_content.addClass( 'hidden' ); } }, /** * Start Demo import. */ importDemo: function( event ) { event.preventDefault(); if ( ! confirm( hesterCoreDemoLibrary.strings.importDemoWarning ) ) { return; } var date = new Date(); HesterCoreDemoLibrary.import_start_time = new Date(); var disabled = $(this).attr( 'disabled' ); if ( typeof disabled === 'undefined' || ! $(this).hasClass('disabled') ) { // Get list of plugins to install. HesterCoreDemoLibrary.install_plugins = $( '.plugin-list input:checked' ).not( ':disabled' ).map( function(){ return { slug: $(this).data( 'slug' ), name: $(this).next( '.hester-label' ).html(), status: $(this).data( 'status' ), }; }).get(); // Get import options. HesterCoreDemoLibrary.import_steps = $( '.hester-demo-section-content.import-options input:checked' ).map( function(){ var step = $(this).attr('id'); if ( 'import_media' !== step ) { return $(this).attr('id'); } }).get(); if ( HesterCoreDemoLibrary.install_plugins.length ) { HesterCoreDemoLibrary.import_steps.unshift( 'install_plugins' ); } if ( HesterCoreDemoLibrary.import_steps.includes( 'import_content') ) { if ( $( '#install_plugin_wpforms-lite' ).is(':checked') ) { HesterCoreDemoLibrary.import_steps.splice( HesterCoreDemoLibrary.import_steps.indexOf( 'import_content'), 0, 'import_wpforms' ); } HesterCoreDemoLibrary.import_steps.push( 'import_options' ); } HesterCoreDemoLibrary.import_steps.unshift( 'import_started' ); HesterCoreDemoLibrary.import_steps.push( 'import_completed' ); // Start import. $body.addClass( 'importing' ); HesterCoreDemoLibrary.updateNextPrev(); $( '.hester-checkbox input' ).attr( 'disabled', 'disabled' ); $( '.wp-full-overlay-header .hester-demo-import' ).text( hesterCoreDemoLibrary.strings.importing ); $document.trigger( 'hester-core-' + HesterCoreDemoLibrary.import_steps[0] ); } }, /** * Install and activate selected plugins. */ pluginsInstallActivate: function() { // Set up progress delta. HesterCoreDemoLibrary.progress_delta = ( 50 / HesterCoreDemoLibrary.import_steps.length ) / HesterCoreDemoLibrary.install_plugins.length; // Start plugin installation. HesterCoreDemoLibrary.pluginInstall( HesterCoreDemoLibrary.install_plugins[0] ); }, /** * Install specific plugin. */ pluginInstall: function( plugin ) { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.installingPlugin + plugin.name ); if ( wp.updates.shouldRequestFilesystemCredentials && ! wp.updates.ajaxLocked ) { wp.updates.requestFilesystemCredentials( event ); $( document ).on( 'credential-modal-cancel', function() { wp.a11y.speak( wp.updates.l10n.updateCancel, 'polite' ); } ); } if ( 'not_installed' === plugin.status ) { wp.updates.installPlugin( { slug: plugin.slug, success: function() { HesterCoreDemoLibrary.updateProgressBar(); $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.installed ); HesterCoreDemoLibrary.pluginActivate( plugin ); }, error: function( response ) { console.log( response ); } }); } else if ( 'installed' === plugin.status ) { HesterCoreDemoLibrary.updateProgressBar(); $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.installed ); HesterCoreDemoLibrary.pluginActivate( plugin ); } else { HesterCoreDemoLibrary.updateProgressBar(); $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.activated ); HesterCoreDemoLibrary.installed_plugins.push( HesterCoreDemoLibrary.install_plugins.shift() ); if ( HesterCoreDemoLibrary.install_plugins.length ) { return HesterCoreDemoLibrary.pluginInstall( HesterCoreDemoLibrary.install_plugins[0] ); } else { HesterCoreDemoLibrary.importNextStep(); } } }, /** * Activate specific plugin. */ pluginActivate: function( plugin ) { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.activatingPlugin + plugin.name ); return $.ajax({ url : hester_strings.ajaxurl, type : 'POST', dataType: 'json', data : { _ajax_nonce: hester_strings.wpnonce, action: 'hester_core_import_step', import_step: 'activate_plugin', plugin: plugin, demo_id: $( '.wp-full-overlay-header' ).data( 'demo-slug' ), }, }).then( function(data) { HesterCoreDemoLibrary.updateProgressBar(); $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.activated ); HesterCoreDemoLibrary.installed_plugins.push( HesterCoreDemoLibrary.install_plugins.shift() ); if ( HesterCoreDemoLibrary.install_plugins.length ) { return HesterCoreDemoLibrary.pluginInstall( HesterCoreDemoLibrary.install_plugins[0] ); } else { HesterCoreDemoLibrary.importNextStep(); } }); }, /** * Import step AJAX. */ importStepAJAX: function( data ) { data._ajax_nonce = hester_strings.wpnonce; data.action = 'hester_core_import_step'; data.demo_id = $( '.wp-full-overlay-header' ).data( 'demo-slug' ); return $.ajax({ url : hester_strings.ajaxurl, type : 'POST', dataType: 'json', data : data, }).done( function(response) { if ( response.success ) { HesterCoreDemoLibrary.updateProgressBar(); HesterCoreDemoLibrary.importNextStep(); } else { console.log( response ); } }).fail(function(jqXHR, textStatus, errorThrown) { console.log(jqXHR); console.log(textStatus); console.log(errorThrown); }); }, /** * Import Started. */ importStarted: function() { var data = { import_step: 'import_started', }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import Customizer. */ importCustomizer: function() { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importingCustomizer ); var data = { 'import_step' : 'import_customizer' }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import Content. */ importContent: function() { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importingContent ); var data = { import_step: 'import_content', attachments: $( '#import_media' ).is(':checked') ? 1 : 0, }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import Customizer. */ importOptions: function() { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importingOptions ); var data = { import_step: 'import_options', }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import WPForms. */ importWPForms: function() { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importingWPForms ); var data = { import_step: 'import_wpforms', }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import Customizer. */ importWidgets: function() { $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importingWidgets ); var data = { import_step: 'import_widgets', }; return HesterCoreDemoLibrary.importStepAJAX( data ); }, /** * Import Completed. */ importCompleted: function() { var data = { import_step: 'import_completed', }; HesterCoreDemoLibrary.importStepAJAX( data ); $( '.wp-full-overlay-header .hester-demo-import' ).html( hesterCoreDemoLibrary.strings.preview ); $( '.hester-demo-preview .hester-demo-import' ).removeClass( 'hester-demo-import' ).attr( 'href', hesterCoreDemoLibrary.homeurl ); $( '.wp-full-overlay-footer .status' ).text( hesterCoreDemoLibrary.strings.importCompleted ); $body.removeClass( 'importing' ); // Particle animation setTimeout(function() { $( '.wp-full-overlay-footer .hester-btn' ).addClass('animate'); }, 100); setTimeout(function() { $( '.wp-full-overlay-footer .hester-btn' ).removeClass('animate'); }, 3000); HesterCoreDemoLibrary.updateNextPrev(); }, /** * Trigger next import step. */ importNextStep: function() { // No further steps defined. if ( ! HesterCoreDemoLibrary.import_steps.length ) { $document.trigger( 'hester-core-import_completed' ); return; } // Track completed steps. HesterCoreDemoLibrary.completed_steps.push( HesterCoreDemoLibrary.import_steps.shift() ); // Update progress bar. HesterCoreDemoLibrary.updateProgressBar(); // Trigger next step. $document.trigger( 'hester-core-' + HesterCoreDemoLibrary.import_steps[0] ); }, /** * Update progress bar. */ updateProgressBar: function() { var remaining = 100 - HesterCoreDemoLibrary.progress; var delta = ( remaining / HesterCoreDemoLibrary.import_steps.length ); if ( HesterCoreDemoLibrary.install_plugins.length > 0 ) { delta = delta / 2; delta = delta / HesterCoreDemoLibrary.install_plugins.length; } HesterCoreDemoLibrary.progress += delta; $( '#hester-progress-bar .hester-progress-percentage' ).css( 'width', HesterCoreDemoLibrary.progress + '%' ); }, /** * Import options: content and media dependency. */ importOptionsContent: function() { var $checkbox = $(this); if ( 'import_content' === $checkbox.attr('id') ) { if ( ! $checkbox.is(':checked') ) { $( '#import_media' ).attr( 'disabled', 'disabled' ).removeAttr( 'checked' ); } else { $( '#import_media' ).removeAttr( 'disabled', 'disabled' ); } } if ( 'import_media' === $checkbox.attr('id') && $checkbox.is(':checked') ) { $( '#import_content' ).attr( 'checked', 'checked' ); } }, /** * Populate templates. */ populateTemplates: function( templates ) { $( '.hester-section.demos' ).html(''); if ( _.isEmpty( templates ) ) { $( '.hester-section.demos' ).html( '
' + hesterCoreDemoLibrary.strings.noResultsFound + '
' ); return; } var data; var demo_template = wp.template( 'hester-core-demo-item' ); for ( var key in templates ) { data = { id : key, pro : templates[key].pro, url : templates[key].url, screenshot : templates[key].screenshot, name : templates[key].name, description : templates[key].description, slug : templates[key].slug, required_plugins : templates[key].plugins, //categories : templates[key].categories, is_pro : !!hesterCoreDemoLibrary.is_pro, upgrade_to_pro : hesterCoreDemoLibrary.upgrade_to_pro_url }; $( '.hester-section.demos' ).append( demo_template( data ) ); } }, /** * Handle clicks on filter items. */ filters: function() { var $this = $(this); $this.closest('ul').find('li').removeClass('selected'); $this.closest('li').addClass('selected'); HesterCoreDemoLibrary.filterDemoList(); }, /** * Handle clicks on filter items. */ search: function() { var $this = $(this); var timer = 0; if ( timer ) { clearTimeout( timer ); } var search_input = $this.val(); if ( ! search_input || search_input && search_input.length >= 4 ) { timer = setTimeout( function() { HesterCoreDemoLibrary.filterDemoList() }, 300 ); } }, /** * Reload filtered demo list. */ filterDemoList: function() { var filters = { 'category' : $( '.demo-filters .demo-categories li.selected a' ).data( 'category' ), 'builder' : $( '.demo-filters .demo-builders li.selected a' ).data( 'builder' ), 's' : $( '.demo-search input' ).val(), }; return $.ajax({ url : hester_strings.ajaxurl, type : 'POST', dataType: 'json', data : { _ajax_nonce: hester_strings.wpnonce, action: 'hester-core-filter-demos', filters: filters }, }).then( function(response) { if ( response.success ) { HesterCoreDemoLibrary.populateTemplates( response.data ); } }); } }; // END var HesterCoreDemoLibrary. HesterCoreDemoLibrary.init(); window.HesterCoreDemoLibrary = HesterCoreDemoLibrary; })( jQuery ); core/admin/demo-library/assets/js/demo-library.min.js000064400000027411147600374750016620 0ustar00!function(e){"use strict";var t=e("body"),r=e(document),s=(e("#page"),e("html")),o={import_start_time:"",install_plugins:[],installed_plugins:[],progress:0,import_steps:[],completed_steps:[],init:function(){e(document).ready(o.ready),e(window).on("load",o.load),o.bindUIActions(),e(document).trigger("hesterCoreReady")},ready:function(){},load:function(){o.populateTemplates(hesterCoreDemoLibrary.templates)},bindUIActions:function(){r.on("click",".hester-demo .demo-screenshot, .hester-demo .preview",o.preview),r.on("click",".hester-demo .import",function(t){e(this).siblings(".preview").click(),e(".wp-full-overlay-main iframe").on("load",function(){e(".wp-full-overlay-header .hester-demo-import").trigger("click")})}),r.on("click",".close-full-overlay",o.closePreview),r.keyup(function(t){27===t.keyCode&&e(".close-full-overlay").trigger("click")}),r.on("click",".next-theme",o.previewNext),r.on("click",".previous-theme",o.previewPrevious),r.on("click",".devices button",o.previewDevice),r.on("click",".collapse-sidebar",o.collapseSidebar),r.on("click",".hester-demo-section-title .control-toggle label",o.collapsePreviewSection),r.on("click",".hester-demo-import",o.importDemo),r.on("click","#import_content, #import_media",o.importOptionsContent),r.on("hester-core-import_started",o.importStarted),r.on("hester-core-install_plugins",o.pluginsInstallActivate),r.on("hester-core-import_customizer",o.importCustomizer),r.on("hester-core-import_content",o.importContent),r.on("hester-core-import_widgets",o.importWidgets),r.on("hester-core-import_options",o.importOptions),r.on("hester-core-import_wpforms",o.importWPForms),r.on("hester-core-import_completed",o.importCompleted),r.on("click",".demo-filters a",o.filters),r.on("input",".demo-search input",o.search)},preview:function(t){t.preventDefault();e(this).parents(".hester-demo").data("demo-id");var r=e(this).parents(".hester-demo");r.addClass("hester-demo-previewed"),s.addClass("hester-demo-preview-on"),o.previewDemo(r)},previewDemo:function(t){var r=wp.template("hester-core-demo-preview"),s={id:t.data("demo-id"),pro:t.data("demo-pro"),url:t.data("demo-url"),screenshot:t.data("demo-screenshot"),name:t.data("demo-name"),description:t.data("demo-description"),slug:t.data("demo-slug"),required_plugins:t.data("required-plugins"),is_pro:!!hesterCoreDemoLibrary.is_pro,upgrade_to_pro:hesterCoreDemoLibrary.upgrade_to_pro_url};e(".theme-install-overlay").remove(),e(".hester-section.demos").append(r(s)),e(".theme-install-overlay").css("display","block"),o.updateNextPrev(),e(".wp-full-overlay-main iframe").on("load",function(){e(".hester-demo-preview .hester-demo-import").removeAttr("disabled")})},updateNextPrev:function(){if(t.hasClass("importing"))e(".next-theme, .previous-theme").addClass("disabled");else{var r=e(".hester-demo-previewed").parent(),s=r.nextAll(".hester-column").length,o=r.prevAll(".hester-column").length;0==s?e(".next-theme").addClass("disabled"):0!=s&&e(".next-theme").removeClass("disabled"),0==o?e(".previous-theme").addClass("disabled"):0!=o&&e(".previous-theme").removeClass("disabled")}},closePreview:function(t){t.preventDefault(),e("body").hasClass("importing")&&!confirm(hesterCoreDemoLibrary.strings.closeWindowWarning)||(e("body").removeClass("importing"),e(".previous-theme, .next-theme").removeClass("disabled"),e(".theme-install-overlay").css("display","none"),e(".theme-install-overlay").remove(),e(".hester-demo-previewed").removeClass("hester-demo-previewed"),s.removeClass("hester-demo-preview-on"))},previewPrevious:function(t){t.preventDefault();var r=e(".hester-demo-previewed").removeClass("hester-demo-previewed").parent().prev(".hester-column").find(".hester-demo").addClass("hester-demo-previewed");e(this).parents(".wp-full-overlay-header").data("demo-id");o.previewDemo(r)},previewNext:function(t){t.preventDefault();var r=e(".hester-demo-previewed").removeClass("hester-demo-previewed").parent().next(".hester-column").find(".hester-demo").addClass("hester-demo-previewed");e(this).parents(".wp-full-overlay-header").data("demo-id");o.previewDemo(r)},previewDevice:function(t){var r=e(t.currentTarget).data("device");e(".theme-install-overlay").removeClass("preview-desktop preview-tablet preview-mobile").addClass("preview-"+r).data("current-preview-device",r),o.previewDeviceButtons(r)},previewDeviceButtons:function(t){var r=e(".wp-full-overlay-footer .devices");r.find("button").removeClass("active").attr("aria-pressed",!1),r.find("button.preview-"+t).addClass("active").attr("aria-pressed",!0)},collapseSidebar:function(){event.preventDefault();var t=e(".wp-full-overlay");return t.hasClass("expanded")?(t.removeClass("expanded"),void t.addClass("collapsed")):t.hasClass("collapsed")?(t.removeClass("collapsed"),void t.addClass("expanded")):void 0},collapsePreviewSection:function(){var t=e(this).closest(".hester-demo-section-title").next(".hester-demo-section-content");e(this).prev('input[type="checkbox"]').is(":checked")?t.removeClass("hidden"):t.addClass("hidden")},importDemo:function(s){if(s.preventDefault(),confirm(hesterCoreDemoLibrary.strings.importDemoWarning)){new Date;o.import_start_time=new Date,void 0!==e(this).attr("disabled")&&e(this).hasClass("disabled")||(o.install_plugins=e(".plugin-list input:checked").not(":disabled").map(function(){return{slug:e(this).data("slug"),name:e(this).next(".hester-label").html(),status:e(this).data("status")}}).get(),o.import_steps=e(".hester-demo-section-content.import-options input:checked").map(function(){if("import_media"!==e(this).attr("id"))return e(this).attr("id")}).get(),o.install_plugins.length&&o.import_steps.unshift("install_plugins"),o.import_steps.includes("import_content")&&(e("#install_plugin_wpforms-lite").is(":checked")&&o.import_steps.splice(o.import_steps.indexOf("import_content"),0,"import_wpforms"),o.import_steps.push("import_options")),o.import_steps.unshift("import_started"),o.import_steps.push("import_completed"),t.addClass("importing"),o.updateNextPrev(),e(".hester-checkbox input").attr("disabled","disabled"),e(".wp-full-overlay-header .hester-demo-import").text(hesterCoreDemoLibrary.strings.importing),r.trigger("hester-core-"+o.import_steps[0]))}},pluginsInstallActivate:function(){o.progress_delta=50/o.import_steps.length/o.install_plugins.length,o.pluginInstall(o.install_plugins[0])},pluginInstall:function(t){if(e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.installingPlugin+t.name),wp.updates.shouldRequestFilesystemCredentials&&!wp.updates.ajaxLocked&&(wp.updates.requestFilesystemCredentials(event),e(document).on("credential-modal-cancel",function(){wp.a11y.speak(wp.updates.l10n.updateCancel,"polite")})),"not_installed"===t.status)wp.updates.installPlugin({slug:t.slug,success:function(){o.updateProgressBar(),e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.installed),o.pluginActivate(t)},error:function(e){console.log(e)}});else if("installed"===t.status)o.updateProgressBar(),e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.installed),o.pluginActivate(t);else{if(o.updateProgressBar(),e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.activated),o.installed_plugins.push(o.install_plugins.shift()),o.install_plugins.length)return o.pluginInstall(o.install_plugins[0]);o.importNextStep()}},pluginActivate:function(t){return e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.activatingPlugin+t.name),e.ajax({url:hester_strings.ajaxurl,type:"POST",dataType:"json",data:{_ajax_nonce:hester_strings.wpnonce,action:"hester_core_import_step",import_step:"activate_plugin",plugin:t,demo_id:e(".wp-full-overlay-header").data("demo-slug")}}).then(function(t){if(o.updateProgressBar(),e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.activated),o.installed_plugins.push(o.install_plugins.shift()),o.install_plugins.length)return o.pluginInstall(o.install_plugins[0]);o.importNextStep()})},importStepAJAX:function(t){return t._ajax_nonce=hester_strings.wpnonce,t.action="hester_core_import_step",t.demo_id=e(".wp-full-overlay-header").data("demo-slug"),e.ajax({url:hester_strings.ajaxurl,type:"POST",dataType:"json",data:t}).done(function(e){e.success?(o.updateProgressBar(),o.importNextStep()):console.log(e)}).fail(function(e,t,r){console.log(e),console.log(t),console.log(r)})},importStarted:function(){return o.importStepAJAX({import_step:"import_started"})},importCustomizer:function(){e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importingCustomizer);return o.importStepAJAX({import_step:"import_customizer"})},importContent:function(){e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importingContent);var t={import_step:"import_content",attachments:e("#import_media").is(":checked")?1:0};return o.importStepAJAX(t)},importOptions:function(){e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importingOptions);return o.importStepAJAX({import_step:"import_options"})},importWPForms:function(){e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importingWPForms);return o.importStepAJAX({import_step:"import_wpforms"})},importWidgets:function(){e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importingWidgets);return o.importStepAJAX({import_step:"import_widgets"})},importCompleted:function(){o.importStepAJAX({import_step:"import_completed"}),e(".wp-full-overlay-header .hester-demo-import").html(hesterCoreDemoLibrary.strings.preview),e(".hester-demo-preview .hester-demo-import").removeClass("hester-demo-import").attr("href",hesterCoreDemoLibrary.homeurl),e(".wp-full-overlay-footer .status").text(hesterCoreDemoLibrary.strings.importCompleted),t.removeClass("importing"),setTimeout(function(){e(".wp-full-overlay-footer .hester-btn").addClass("animate")},100),setTimeout(function(){e(".wp-full-overlay-footer .hester-btn").removeClass("animate")},3e3),o.updateNextPrev()},importNextStep:function(){o.import_steps.length?(o.completed_steps.push(o.import_steps.shift()),o.updateProgressBar(),r.trigger("hester-core-"+o.import_steps[0])):r.trigger("hester-core-import_completed")},updateProgressBar:function(){var t=(100-o.progress)/o.import_steps.length;o.install_plugins.length>0&&(t/=2,t/=o.install_plugins.length),o.progress+=t,e("#hester-progress-bar .hester-progress-percentage").css("width",o.progress+"%")},importOptionsContent:function(){var t=e(this);"import_content"===t.attr("id")&&(t.is(":checked")?e("#import_media").removeAttr("disabled","disabled"):e("#import_media").attr("disabled","disabled").removeAttr("checked")),"import_media"===t.attr("id")&&t.is(":checked")&&e("#import_content").attr("checked","checked")},populateTemplates:function(t){if(e(".hester-section.demos").html(""),_.isEmpty(t))e(".hester-section.demos").html('
'+hesterCoreDemoLibrary.strings.noResultsFound+"
");else{var r,s=wp.template("hester-core-demo-item");for(var o in t)r={id:o,pro:t[o].pro,url:t[o].url,screenshot:t[o].screenshot,name:t[o].name,description:t[o].description,slug:t[o].slug,required_plugins:t[o].plugins,is_pro:!!hesterCoreDemoLibrary.is_pro,upgrade_to_pro:hesterCoreDemoLibrary.upgrade_to_pro_url},e(".hester-section.demos").append(s(r))}},filters:function(){var t=e(this);t.closest("ul").find("li").removeClass("selected"),t.closest("li").addClass("selected"),o.filterDemoList()},search:function(){var t=e(this),r=0;r&&clearTimeout(r);var s=t.val();(!s||s&&s.length>=4)&&(r=setTimeout(function(){o.filterDemoList()},300))},filterDemoList:function(){var t={category:e(".demo-filters .demo-categories li.selected a").data("category"),builder:e(".demo-filters .demo-builders li.selected a").data("builder"),s:e(".demo-search input").val()};return e.ajax({url:hester_strings.ajaxurl,type:"POST",dataType:"json",data:{_ajax_nonce:hester_strings.wpnonce,action:"hester-core-filter-demos",filters:t}}).then(function(e){e.success&&o.populateTemplates(e.data)})}};o.init(),window.HesterCoreDemoLibrary=o}(jQuery);core/admin/demo-library/importers/class-wordpress-importer.php000064400000127221147600374750020723 0ustar00header(); $step = empty( $_GET['step'] ) ? 0 : (int) $_GET['step']; switch ( $step ) { case 0: $this->greet(); break; case 1: check_admin_referer( 'import-upload' ); if ( $this->handle_upload() ) $this->import_options(); break; case 2: check_admin_referer( 'import-wordpress' ); $this->fetch_attachments = ( ! empty( $_POST['fetch_attachments'] ) && $this->allow_fetch_attachments() ); $this->id = (int) $_POST['import_id']; $file = get_attached_file( $this->id ); set_time_limit(0); $this->import( $file ); break; } $this->footer(); } /** * The main controller for the actual import stage. * * @param string $file Path to the WXR file for importing */ function import( $file ) { add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) ); add_filter( 'http_request_timeout', array( &$this, 'bump_request_timeout' ) ); $this->import_start( $file ); $this->get_author_mapping(); wp_suspend_cache_invalidation( true ); $this->process_categories(); $this->process_tags(); $this->process_terms(); $this->process_posts(); wp_suspend_cache_invalidation( false ); // update incorrect/missing information in the DB $this->backfill_parents(); $this->backfill_attachment_urls(); $this->remap_featured_images(); $this->import_end(); } /** * Parses the WXR file and prepares us for the task of processing parsed data * * @param string $file Path to the WXR file for importing */ function import_start( $file ) { if ( ! is_file($file) ) { echo '

' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
'; echo __( 'The file does not exist, please try again.', 'wordpress-importer' ) . '

'; $this->footer(); die(); } $import_data = $this->parse( $file ); if ( is_wp_error( $import_data ) ) { echo '

' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
'; echo esc_html( $import_data->get_error_message() ) . '

'; $this->footer(); die(); } $this->version = $import_data['version']; $this->get_authors_from_import( $import_data ); $this->posts = $import_data['posts']; $this->terms = $import_data['terms']; $this->categories = $import_data['categories']; $this->tags = $import_data['tags']; $this->base_url = esc_url( $import_data['base_url'] ); $this->blog_url = esc_url( $import_data['blog_url'] ); wp_defer_term_counting( true ); wp_defer_comment_counting( true ); do_action( 'import_start' ); } /** * Performs post-import cleanup of files and the cache */ function import_end() { wp_import_cleanup( $this->id ); wp_cache_flush(); foreach ( get_taxonomies() as $tax ) { delete_option( "{$tax}_children" ); _get_term_hierarchy( $tax ); } wp_defer_term_counting( false ); wp_defer_comment_counting( false ); echo '

' . __( 'All done.', 'wordpress-importer' ) . ' ' . __( 'Have fun!', 'wordpress-importer' ) . '' . '

'; echo '

' . __( 'Remember to update the passwords and roles of imported users.', 'wordpress-importer' ) . '

'; do_action( 'import_end' ); } /** * Handles the WXR upload and initial parsing of the file to prepare for * displaying author import options * * @return bool False if error uploading or invalid file, true otherwise */ function handle_upload() { $file = wp_import_handle_upload(); if ( isset( $file['error'] ) ) { echo '

' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
'; echo esc_html( $file['error'] ) . '

'; return false; } else if ( ! file_exists( $file['file'] ) ) { echo '

' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
'; printf( __( 'The export file could not be found at %s. It is likely that this was caused by a permissions problem.', 'wordpress-importer' ), esc_html( $file['file'] ) ); echo '

'; return false; } $this->id = (int) $file['id']; $import_data = $this->parse( $file['file'] ); if ( is_wp_error( $import_data ) ) { echo '

' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
'; echo esc_html( $import_data->get_error_message() ) . '

'; return false; } $this->version = $import_data['version']; if ( $this->version > $this->max_wxr_version ) { echo '

'; printf( __( 'This WXR file (version %s) may not be supported by this version of the importer. Please consider updating.', 'wordpress-importer' ), esc_html($import_data['version']) ); echo '

'; } $this->get_authors_from_import( $import_data ); return true; } /** * Retrieve authors from parsed WXR data * * Uses the provided author information from WXR 1.1 files * or extracts info from each post for WXR 1.0 files * * @param array $import_data Data returned by a WXR parser */ function get_authors_from_import( $import_data ) { if ( ! empty( $import_data['authors'] ) ) { $this->authors = $import_data['authors']; // no author information, grab it from the posts } else { foreach ( $import_data['posts'] as $post ) { $login = sanitize_user( $post['post_author'], true ); if ( empty( $login ) ) { printf( __( 'Failed to import author %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html( $post['post_author'] ) ); echo '
'; continue; } if ( ! isset($this->authors[$login]) ) $this->authors[$login] = array( 'author_login' => $login, 'author_display_name' => $post['post_author'] ); } } } /** * Display pre-import options, author importing/mapping and option to * fetch attachments */ function import_options() { $j = 0; ?>
authors ) ) : ?>

admins entries.', 'wordpress-importer' ); ?>

allow_create_users() ) : ?>

    authors as $author ) : ?>
  1. author_select( $j++, $author ); ?>
allow_fetch_attachments() ) : ?>

' . esc_html( $author['author_display_name'] ); if ( $this->version != '1.0' ) echo ' (' . esc_html( $author['author_login'] ) . ')'; echo '
'; if ( $this->version != '1.0' ) echo '
'; $create_users = $this->allow_create_users(); if ( $create_users ) { if ( $this->version != '1.0' ) { _e( 'or create new user with login name:', 'wordpress-importer' ); $value = ''; } else { _e( 'as a new user:', 'wordpress-importer' ); $value = esc_attr( sanitize_user( $author['author_login'], true ) ); } echo '
'; } if ( ! $create_users && $this->version == '1.0' ) _e( 'assign posts to an existing user:', 'wordpress-importer' ); else _e( 'or assign posts to an existing user:', 'wordpress-importer' ); wp_dropdown_users( array( 'name' => "user_map[$n]", 'multi' => true, 'show_option_all' => __( '- Select -', 'wordpress-importer' ) ) ); echo ''; if ( $this->version != '1.0' ) echo '
'; } /** * Map old author logins to local user IDs based on decisions made * in import options form. Can map to an existing user, create a new user * or falls back to the current user in case of error with either of the previous */ function get_author_mapping() { if ( ! isset( $_POST['imported_authors'] ) ) return; $create_users = $this->allow_create_users(); foreach ( (array) $_POST['imported_authors'] as $i => $old_login ) { // Multisite adds strtolower to sanitize_user. Need to sanitize here to stop breakage in process_posts. $santized_old_login = sanitize_user( $old_login, true ); $old_id = isset( $this->authors[$old_login]['author_id'] ) ? intval($this->authors[$old_login]['author_id']) : false; if ( ! empty( $_POST['user_map'][$i] ) ) { $user = get_userdata( intval($_POST['user_map'][$i]) ); if ( isset( $user->ID ) ) { if ( $old_id ) $this->processed_authors[$old_id] = $user->ID; $this->author_mapping[$santized_old_login] = $user->ID; } } else if ( $create_users ) { if ( ! empty($_POST['user_new'][$i]) ) { $user_id = wp_create_user( $_POST['user_new'][$i], wp_generate_password() ); } else if ( $this->version != '1.0' ) { $user_data = array( 'user_login' => $old_login, 'user_pass' => wp_generate_password(), 'user_email' => isset( $this->authors[$old_login]['author_email'] ) ? $this->authors[$old_login]['author_email'] : '', 'display_name' => $this->authors[$old_login]['author_display_name'], 'first_name' => isset( $this->authors[$old_login]['author_first_name'] ) ? $this->authors[$old_login]['author_first_name'] : '', 'last_name' => isset( $this->authors[$old_login]['author_last_name'] ) ? $this->authors[$old_login]['author_last_name'] : '', ); $user_id = wp_insert_user( $user_data ); } if ( ! is_wp_error( $user_id ) ) { if ( $old_id ) $this->processed_authors[$old_id] = $user_id; $this->author_mapping[$santized_old_login] = $user_id; } else { printf( __( 'Failed to create new user for %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html($this->authors[$old_login]['author_display_name']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ' ' . $user_id->get_error_message(); echo '
'; } } // failsafe: if the user_id was invalid, default to the current user if ( ! isset( $this->author_mapping[$santized_old_login] ) ) { if ( $old_id ) $this->processed_authors[$old_id] = (int) get_current_user_id(); $this->author_mapping[$santized_old_login] = (int) get_current_user_id(); } } } /** * Create new categories based on import information * * Doesn't create a new category if its slug already exists */ function process_categories() { $this->categories = apply_filters( 'wp_import_categories', $this->categories ); if ( empty( $this->categories ) ) return; foreach ( $this->categories as $cat ) { // if the category already exists leave it alone $term_id = term_exists( $cat['category_nicename'], 'category' ); if ( $term_id ) { if ( is_array($term_id) ) $term_id = $term_id['term_id']; if ( isset($cat['term_id']) ) $this->processed_terms[intval($cat['term_id'])] = (int) $term_id; continue; } $category_parent = empty( $cat['category_parent'] ) ? 0 : category_exists( $cat['category_parent'] ); $category_description = isset( $cat['category_description'] ) ? $cat['category_description'] : ''; $catarr = array( 'category_nicename' => $cat['category_nicename'], 'category_parent' => $category_parent, 'cat_name' => $cat['cat_name'], 'category_description' => $category_description ); $catarr = wp_slash( $catarr ); $id = wp_insert_category( $catarr ); if ( ! is_wp_error( $id ) ) { if ( isset($cat['term_id']) ) $this->processed_terms[intval($cat['term_id'])] = $id; } else { printf( __( 'Failed to import category %s', 'wordpress-importer' ), esc_html($cat['category_nicename']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ': ' . $id->get_error_message(); echo '
'; continue; } $this->process_termmeta( $cat, $id['term_id'] ); } unset( $this->categories ); } /** * Create new post tags based on import information * * Doesn't create a tag if its slug already exists */ function process_tags() { $this->tags = apply_filters( 'wp_import_tags', $this->tags ); if ( empty( $this->tags ) ) return; foreach ( $this->tags as $tag ) { // if the tag already exists leave it alone $term_id = term_exists( $tag['tag_slug'], 'post_tag' ); if ( $term_id ) { if ( is_array($term_id) ) $term_id = $term_id['term_id']; if ( isset($tag['term_id']) ) $this->processed_terms[intval($tag['term_id'])] = (int) $term_id; continue; } $tag = wp_slash( $tag ); $tag_desc = isset( $tag['tag_description'] ) ? $tag['tag_description'] : ''; $tagarr = array( 'slug' => $tag['tag_slug'], 'description' => $tag_desc ); $id = wp_insert_term( $tag['tag_name'], 'post_tag', $tagarr ); if ( ! is_wp_error( $id ) ) { if ( isset($tag['term_id']) ) $this->processed_terms[intval($tag['term_id'])] = $id['term_id']; } else { printf( __( 'Failed to import post tag %s', 'wordpress-importer' ), esc_html($tag['tag_name']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ': ' . $id->get_error_message(); echo '
'; continue; } $this->process_termmeta( $tag, $id['term_id'] ); } unset( $this->tags ); } /** * Create new terms based on import information * * Doesn't create a term its slug already exists */ function process_terms() { $this->terms = apply_filters( 'wp_import_terms', $this->terms ); if ( empty( $this->terms ) ) return; foreach ( $this->terms as $term ) { // if the term already exists in the correct taxonomy leave it alone $term_id = term_exists( $term['slug'], $term['term_taxonomy'] ); if ( $term_id ) { if ( is_array($term_id) ) $term_id = $term_id['term_id']; if ( isset($term['term_id']) ) $this->processed_terms[intval($term['term_id'])] = (int) $term_id; continue; } if ( empty( $term['term_parent'] ) ) { $parent = 0; } else { $parent = term_exists( $term['term_parent'], $term['term_taxonomy'] ); if ( is_array( $parent ) ) $parent = $parent['term_id']; } $term = wp_slash( $term ); $description = isset( $term['term_description'] ) ? $term['term_description'] : ''; $termarr = array( 'slug' => $term['slug'], 'description' => $description, 'parent' => intval($parent) ); $id = wp_insert_term( $term['term_name'], $term['term_taxonomy'], $termarr ); if ( ! is_wp_error( $id ) ) { if ( isset($term['term_id']) ) $this->processed_terms[intval($term['term_id'])] = $id['term_id']; } else { printf( __( 'Failed to import %s %s', 'wordpress-importer' ), esc_html($term['term_taxonomy']), esc_html($term['term_name']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ': ' . $id->get_error_message(); echo '
'; continue; } $this->process_termmeta( $term, $id['term_id'] ); } unset( $this->terms ); } /** * Add metadata to imported term. * * @since 0.6.2 * * @param array $term Term data from WXR import. * @param int $term_id ID of the newly created term. */ protected function process_termmeta( $term, $term_id ) { if ( ! isset( $term['termmeta'] ) ) { $term['termmeta'] = array(); } /** * Filters the metadata attached to an imported term. * * @since 0.6.2 * * @param array $termmeta Array of term meta. * @param int $term_id ID of the newly created term. * @param array $term Term data from the WXR import. */ $term['termmeta'] = apply_filters( 'wp_import_term_meta', $term['termmeta'], $term_id, $term ); if ( empty( $term['termmeta'] ) ) { return; } foreach ( $term['termmeta'] as $meta ) { /** * Filters the meta key for an imported piece of term meta. * * @since 0.6.2 * * @param string $meta_key Meta key. * @param int $term_id ID of the newly created term. * @param array $term Term data from the WXR import. */ $key = apply_filters( 'import_term_meta_key', $meta['key'], $term_id, $term ); if ( ! $key ) { continue; } // Export gets meta straight from the DB so could have a serialized string $value = maybe_unserialize( $meta['value'] ); add_term_meta( $term_id, $key, $value ); /** * Fires after term meta is imported. * * @since 0.6.2 * * @param int $term_id ID of the newly created term. * @param string $key Meta key. * @param mixed $value Meta value. */ do_action( 'import_term_meta', $term_id, $key, $value ); } } /** * Create new posts based on import information * * Posts marked as having a parent which doesn't exist will become top level items. * Doesn't create a new post if: the post type doesn't exist, the given post ID * is already noted as imported or a post with the same title and date already exists. * Note that new/updated terms, comments and meta are imported for the last of the above. */ function process_posts() { $this->posts = apply_filters( 'wp_import_posts', $this->posts ); foreach ( $this->posts as $post ) { $post = apply_filters( 'wp_import_post_data_raw', $post ); if ( ! post_type_exists( $post['post_type'] ) ) { printf( __( 'Failed to import “%s”: Invalid post type %s', 'wordpress-importer' ), esc_html($post['post_title']), esc_html($post['post_type']) ); echo '
'; do_action( 'wp_import_post_exists', $post ); continue; } if ( isset( $this->processed_posts[$post['post_id']] ) && ! empty( $post['post_id'] ) ) continue; if ( $post['status'] == 'auto-draft' ) continue; if ( 'nav_menu_item' == $post['post_type'] ) { $this->process_menu_item( $post ); continue; } $post_type_object = get_post_type_object( $post['post_type'] ); $post_exists = post_exists( $post['post_title'], '', $post['post_date'] ); /** * Filter ID of the existing post corresponding to post currently importing. * * Return 0 to force the post to be imported. Filter the ID to be something else * to override which existing post is mapped to the imported post. * * @see post_exists() * @since 0.6.2 * * @param int $post_exists Post ID, or 0 if post did not exist. * @param array $post The post array to be inserted. */ $post_exists = apply_filters( 'wp_import_existing_post', $post_exists, $post ); if ( $post_exists && get_post_type( $post_exists ) == $post['post_type'] ) { printf( __('%s “%s” already exists.', 'wordpress-importer'), $post_type_object->labels->singular_name, esc_html($post['post_title']) ); echo '
'; $comment_post_ID = $post_id = $post_exists; $this->processed_posts[ intval( $post['post_id'] ) ] = intval( $post_exists ); } else { $post_parent = (int) $post['post_parent']; if ( $post_parent ) { // if we already know the parent, map it to the new local ID if ( isset( $this->processed_posts[$post_parent] ) ) { $post_parent = $this->processed_posts[$post_parent]; // otherwise record the parent for later } else { $this->post_orphans[intval($post['post_id'])] = $post_parent; $post_parent = 0; } } // map the post author $author = sanitize_user( $post['post_author'], true ); if ( isset( $this->author_mapping[$author] ) ) $author = $this->author_mapping[$author]; else $author = (int) get_current_user_id(); $postdata = array( 'import_id' => $post['post_id'], 'post_author' => $author, 'post_date' => $post['post_date'], 'post_date_gmt' => $post['post_date_gmt'], 'post_content' => $post['post_content'], 'post_excerpt' => $post['post_excerpt'], 'post_title' => $post['post_title'], 'post_status' => $post['status'], 'post_name' => $post['post_name'], 'comment_status' => $post['comment_status'], 'ping_status' => $post['ping_status'], 'guid' => $post['guid'], 'post_parent' => $post_parent, 'menu_order' => $post['menu_order'], 'post_type' => $post['post_type'], 'post_password' => $post['post_password'] ); $original_post_ID = $post['post_id']; $postdata = apply_filters( 'wp_import_post_data_processed', $postdata, $post ); $postdata = wp_slash( $postdata ); if ( 'attachment' == $postdata['post_type'] ) { $remote_url = ! empty($post['attachment_url']) ? $post['attachment_url'] : $post['guid']; // try to use _wp_attached file for upload folder placement to ensure the same location as the export site // e.g. location is 2003/05/image.jpg but the attachment post_date is 2010/09, see media_handle_upload() $postdata['upload_date'] = $post['post_date']; if ( isset( $post['postmeta'] ) ) { foreach( $post['postmeta'] as $meta ) { if ( $meta['key'] == '_wp_attached_file' ) { if ( preg_match( '%^[0-9]{4}/[0-9]{2}%', $meta['value'], $matches ) ) $postdata['upload_date'] = $matches[0]; break; } } } $comment_post_ID = $post_id = $this->process_attachment( $postdata, $remote_url ); } else { $comment_post_ID = $post_id = wp_insert_post( $postdata, true ); do_action( 'wp_import_insert_post', $post_id, $original_post_ID, $postdata, $post ); } if ( is_wp_error( $post_id ) ) { printf( __( 'Failed to import %s “%s”', 'wordpress-importer' ), $post_type_object->labels->singular_name, esc_html($post['post_title']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ': ' . $post_id->get_error_message(); echo '
'; continue; } if ( $post['is_sticky'] == 1 ) stick_post( $post_id ); } // map pre-import ID to local ID $this->processed_posts[intval($post['post_id'])] = (int) $post_id; if ( ! isset( $post['terms'] ) ) $post['terms'] = array(); $post['terms'] = apply_filters( 'wp_import_post_terms', $post['terms'], $post_id, $post ); // add categories, tags and other terms if ( ! empty( $post['terms'] ) ) { $terms_to_set = array(); foreach ( $post['terms'] as $term ) { // back compat with WXR 1.0 map 'tag' to 'post_tag' $taxonomy = ( 'tag' == $term['domain'] ) ? 'post_tag' : $term['domain']; $term_exists = term_exists( $term['slug'], $taxonomy ); $term_id = is_array( $term_exists ) ? $term_exists['term_id'] : $term_exists; if ( ! $term_id ) { $t = wp_insert_term( $term['name'], $taxonomy, array( 'slug' => $term['slug'] ) ); if ( ! is_wp_error( $t ) ) { $term_id = $t['term_id']; do_action( 'wp_import_insert_term', $t, $term, $post_id, $post ); } else { printf( __( 'Failed to import %s %s', 'wordpress-importer' ), esc_html($taxonomy), esc_html($term['name']) ); if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) echo ': ' . $t->get_error_message(); echo '
'; do_action( 'wp_import_insert_term_failed', $t, $term, $post_id, $post ); continue; } } $terms_to_set[$taxonomy][] = intval( $term_id ); } foreach ( $terms_to_set as $tax => $ids ) { $tt_ids = wp_set_post_terms( $post_id, $ids, $tax ); do_action( 'wp_import_set_post_terms', $tt_ids, $ids, $tax, $post_id, $post ); } unset( $post['terms'], $terms_to_set ); } if ( ! isset( $post['comments'] ) ) $post['comments'] = array(); $post['comments'] = apply_filters( 'wp_import_post_comments', $post['comments'], $post_id, $post ); // add/update comments if ( ! empty( $post['comments'] ) ) { $num_comments = 0; $inserted_comments = array(); foreach ( $post['comments'] as $comment ) { $comment_id = $comment['comment_id']; $newcomments[$comment_id]['comment_post_ID'] = $comment_post_ID; $newcomments[$comment_id]['comment_author'] = $comment['comment_author']; $newcomments[$comment_id]['comment_author_email'] = $comment['comment_author_email']; $newcomments[$comment_id]['comment_author_IP'] = $comment['comment_author_IP']; $newcomments[$comment_id]['comment_author_url'] = $comment['comment_author_url']; $newcomments[$comment_id]['comment_date'] = $comment['comment_date']; $newcomments[$comment_id]['comment_date_gmt'] = $comment['comment_date_gmt']; $newcomments[$comment_id]['comment_content'] = $comment['comment_content']; $newcomments[$comment_id]['comment_approved'] = $comment['comment_approved']; $newcomments[$comment_id]['comment_type'] = $comment['comment_type']; $newcomments[$comment_id]['comment_parent'] = $comment['comment_parent']; $newcomments[$comment_id]['commentmeta'] = isset( $comment['commentmeta'] ) ? $comment['commentmeta'] : array(); if ( isset( $this->processed_authors[$comment['comment_user_id']] ) ) $newcomments[$comment_id]['user_id'] = $this->processed_authors[$comment['comment_user_id']]; } ksort( $newcomments ); foreach ( $newcomments as $key => $comment ) { // if this is a new post we can skip the comment_exists() check if ( ! $post_exists || ! comment_exists( $comment['comment_author'], $comment['comment_date'] ) ) { if ( isset( $inserted_comments[$comment['comment_parent']] ) ) $comment['comment_parent'] = $inserted_comments[$comment['comment_parent']]; $comment = wp_slash( $comment ); $comment = wp_filter_comment( $comment ); $inserted_comments[$key] = wp_insert_comment( $comment ); do_action( 'wp_import_insert_comment', $inserted_comments[$key], $comment, $comment_post_ID, $post ); foreach( $comment['commentmeta'] as $meta ) { $value = maybe_unserialize( $meta['value'] ); add_comment_meta( $inserted_comments[$key], $meta['key'], $value ); } $num_comments++; } } unset( $newcomments, $inserted_comments, $post['comments'] ); } if ( ! isset( $post['postmeta'] ) ) $post['postmeta'] = array(); $post['postmeta'] = apply_filters( 'wp_import_post_meta', $post['postmeta'], $post_id, $post ); // add/update post meta if ( ! empty( $post['postmeta'] ) ) { foreach ( $post['postmeta'] as $meta ) { $key = apply_filters( 'import_post_meta_key', $meta['key'], $post_id, $post ); $value = false; if ( '_edit_last' == $key ) { if ( isset( $this->processed_authors[intval($meta['value'])] ) ) $value = $this->processed_authors[intval($meta['value'])]; else $key = false; } if ( $key ) { // export gets meta straight from the DB so could have a serialized string if ( ! $value ) $value = maybe_unserialize( $meta['value'] ); add_post_meta( $post_id, $key, $value ); do_action( 'import_post_meta', $post_id, $key, $value ); // if the post has a featured image, take note of this in case of remap if ( '_thumbnail_id' == $key ) $this->featured_images[$post_id] = (int) $value; } } } } unset( $this->posts ); } /** * Attempt to create a new menu item from import data * * Fails for draft, orphaned menu items and those without an associated nav_menu * or an invalid nav_menu term. If the post type or term object which the menu item * represents doesn't exist then the menu item will not be imported (waits until the * end of the import to retry again before discarding). * * @param array $item Menu item details from WXR file */ function process_menu_item( $item ) { // skip draft, orphaned menu items if ( 'draft' == $item['status'] ) return; $menu_slug = false; if ( isset($item['terms']) ) { // loop through terms, assume first nav_menu term is correct menu foreach ( $item['terms'] as $term ) { if ( 'nav_menu' == $term['domain'] ) { $menu_slug = $term['slug']; break; } } } // no nav_menu term associated with this menu item if ( ! $menu_slug ) { _e( 'Menu item skipped due to missing menu slug', 'wordpress-importer' ); echo '
'; return; } $menu_id = term_exists( $menu_slug, 'nav_menu' ); if ( ! $menu_id ) { printf( __( 'Menu item skipped due to invalid menu slug: %s', 'wordpress-importer' ), esc_html( $menu_slug ) ); echo '
'; return; } else { $menu_id = is_array( $menu_id ) ? $menu_id['term_id'] : $menu_id; } foreach ( $item['postmeta'] as $meta ) ${$meta['key']} = $meta['value']; if ( 'taxonomy' == $_menu_item_type && isset( $this->processed_terms[intval($_menu_item_object_id)] ) ) { $_menu_item_object_id = $this->processed_terms[intval($_menu_item_object_id)]; } else if ( 'post_type' == $_menu_item_type && isset( $this->processed_posts[intval($_menu_item_object_id)] ) ) { $_menu_item_object_id = $this->processed_posts[intval($_menu_item_object_id)]; } else if ( 'custom' != $_menu_item_type ) { // associated object is missing or not imported yet, we'll retry later $this->missing_menu_items[] = $item; return; } if ( isset( $this->processed_menu_items[intval($_menu_item_menu_item_parent)] ) ) { $_menu_item_menu_item_parent = $this->processed_menu_items[intval($_menu_item_menu_item_parent)]; } else if ( $_menu_item_menu_item_parent ) { $this->menu_item_orphans[intval($item['post_id'])] = (int) $_menu_item_menu_item_parent; $_menu_item_menu_item_parent = 0; } // wp_update_nav_menu_item expects CSS classes as a space separated string $_menu_item_classes = maybe_unserialize( $_menu_item_classes ); if ( is_array( $_menu_item_classes ) ) $_menu_item_classes = implode( ' ', $_menu_item_classes ); $args = array( 'menu-item-object-id' => $_menu_item_object_id, 'menu-item-object' => $_menu_item_object, 'menu-item-parent-id' => $_menu_item_menu_item_parent, 'menu-item-position' => intval( $item['menu_order'] ), 'menu-item-type' => $_menu_item_type, 'menu-item-title' => $item['post_title'], 'menu-item-url' => $_menu_item_url, 'menu-item-description' => $item['post_content'], 'menu-item-attr-title' => $item['post_excerpt'], 'menu-item-target' => $_menu_item_target, 'menu-item-classes' => $_menu_item_classes, 'menu-item-xfn' => $_menu_item_xfn, 'menu-item-status' => $item['status'] ); if ( 'custom' === $args['menu-item-type'] && rtrim( $this->blog_url, '/' ) === rtrim( $args['menu-item-url'], '/' ) ) { $args['menu-item-url'] = get_option( 'home' ); } $id = wp_update_nav_menu_item( $menu_id, 0, $args ); if ( $id && ! is_wp_error( $id ) ) $this->processed_menu_items[intval($item['post_id'])] = (int) $id; } /** * If fetching attachments is enabled then attempt to create a new attachment * * @param array $post Attachment post details from WXR * @param string $url URL to fetch attachment from * @return int|WP_Error Post ID on success, WP_Error otherwise */ function process_attachment( $post, $url ) { if ( ! $this->fetch_attachments ) return new WP_Error( 'attachment_processing_error', __( 'Fetching attachments is not enabled', 'wordpress-importer' ) ); // if the URL is absolute, but does not contain address, then upload it assuming base_site_url if ( preg_match( '|^/[\w\W]+$|', $url ) ) $url = rtrim( $this->base_url, '/' ) . $url; $upload = $this->fetch_remote_file( $url, $post ); if ( is_wp_error( $upload ) ) return $upload; if ( $info = wp_check_filetype( $upload['file'] ) ) $post['post_mime_type'] = $info['type']; else return new WP_Error( 'attachment_processing_error', __('Invalid file type', 'wordpress-importer') ); $post['guid'] = $upload['url']; // as per wp-admin/includes/upload.php $post_id = wp_insert_attachment( $post, $upload['file'] ); wp_update_attachment_metadata( $post_id, wp_generate_attachment_metadata( $post_id, $upload['file'] ) ); // remap resized image URLs, works by stripping the extension and remapping the URL stub. if ( preg_match( '!^image/!', $info['type'] ) ) { $parts = pathinfo( $url ); $name = basename( $parts['basename'], ".{$parts['extension']}" ); // PATHINFO_FILENAME in PHP 5.2 $parts_new = pathinfo( $upload['url'] ); $name_new = basename( $parts_new['basename'], ".{$parts_new['extension']}" ); $this->url_remap[$parts['dirname'] . '/' . $name] = $parts_new['dirname'] . '/' . $name_new; } return $post_id; } /** * Attempt to download a remote file attachment * * @param string $url URL of item to fetch * @param array $post Attachment details * @return array|WP_Error Local file location details on success, WP_Error otherwise */ function fetch_remote_file( $url, $post ) { // extract the file name and extension from the url $file_name = basename( $url ); // get placeholder file in the upload dir with a unique, sanitized filename $upload = wp_upload_bits( $file_name, 0, '', $post['upload_date'] ); if ( $upload['error'] ) return new WP_Error( 'upload_dir_error', $upload['error'] ); // fetch the remote url and write it to the placeholder file $remote_response = wp_safe_remote_get( $url, array( 'timeout' => 300, 'stream' => true, 'filename' => $upload['file'], ) ); $headers = wp_remote_retrieve_headers( $remote_response ); // request failed if ( ! $headers ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __('Remote server did not respond', 'wordpress-importer') ); } $remote_response_code = wp_remote_retrieve_response_code( $remote_response ); // make sure the fetch was successful if ( $remote_response_code != '200' ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', sprintf( __('Remote server returned error response %1$d %2$s', 'wordpress-importer'), esc_html($remote_response_code), get_status_header_desc($remote_response_code) ) ); } $filesize = filesize( $upload['file'] ); if ( isset( $headers['content-length'] ) && $filesize != $headers['content-length'] ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __('Remote file is incorrect size', 'wordpress-importer') ); } if ( 0 == $filesize ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', __('Zero size file downloaded', 'wordpress-importer') ); } $max_size = (int) $this->max_attachment_size(); if ( ! empty( $max_size ) && $filesize > $max_size ) { @unlink( $upload['file'] ); return new WP_Error( 'import_file_error', sprintf(__('Remote file is too large, limit is %s', 'wordpress-importer'), size_format($max_size) ) ); } // keep track of the old and new urls so we can substitute them later $this->url_remap[$url] = $upload['url']; $this->url_remap[$post['guid']] = $upload['url']; // r13735, really needed? // keep track of the destination if the remote url is redirected somewhere else if ( isset($headers['x-final-location']) && $headers['x-final-location'] != $url ) $this->url_remap[$headers['x-final-location']] = $upload['url']; return $upload; } /** * Attempt to associate posts and menu items with previously missing parents * * An imported post's parent may not have been imported when it was first created * so try again. Similarly for child menu items and menu items which were missing * the object (e.g. post) they represent in the menu */ function backfill_parents() { global $wpdb; // find parents for post orphans foreach ( $this->post_orphans as $child_id => $parent_id ) { $local_child_id = $local_parent_id = false; if ( isset( $this->processed_posts[$child_id] ) ) $local_child_id = $this->processed_posts[$child_id]; if ( isset( $this->processed_posts[$parent_id] ) ) $local_parent_id = $this->processed_posts[$parent_id]; if ( $local_child_id && $local_parent_id ) { $wpdb->update( $wpdb->posts, array( 'post_parent' => $local_parent_id ), array( 'ID' => $local_child_id ), '%d', '%d' ); clean_post_cache( $local_child_id ); } } // all other posts/terms are imported, retry menu items with missing associated object $missing_menu_items = $this->missing_menu_items; foreach ( $missing_menu_items as $item ) $this->process_menu_item( $item ); // find parents for menu item orphans foreach ( $this->menu_item_orphans as $child_id => $parent_id ) { $local_child_id = $local_parent_id = 0; if ( isset( $this->processed_menu_items[$child_id] ) ) $local_child_id = $this->processed_menu_items[$child_id]; if ( isset( $this->processed_menu_items[$parent_id] ) ) $local_parent_id = $this->processed_menu_items[$parent_id]; if ( $local_child_id && $local_parent_id ) update_post_meta( $local_child_id, '_menu_item_menu_item_parent', (int) $local_parent_id ); } } /** * Use stored mapping information to update old attachment URLs */ function backfill_attachment_urls() { global $wpdb; // make sure we do the longest urls first, in case one is a substring of another uksort( $this->url_remap, array(&$this, 'cmpr_strlen') ); foreach ( $this->url_remap as $from_url => $to_url ) { // remap urls in post_content $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s)", $from_url, $to_url) ); // remap enclosure urls $result = $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key='enclosure'", $from_url, $to_url) ); } } /** * Update _thumbnail_id meta to new, imported attachment IDs */ function remap_featured_images() { // cycle through posts that have a featured image foreach ( $this->featured_images as $post_id => $value ) { if ( isset( $this->processed_posts[$value] ) ) { $new_id = $this->processed_posts[$value]; // only update if there's a difference if ( $new_id != $value ) update_post_meta( $post_id, '_thumbnail_id', $new_id ); } } } /** * Parse a WXR file * * @param string $file Path to WXR file for parsing * @return array Information gathered from the WXR file */ function parse( $file ) { $parser = new Hester_Core_WXR_Parser(); return $parser->parse( $file ); } // Display import page title function header() { echo '
'; echo '

' . __( 'Import WordPress', 'wordpress-importer' ) . '

'; $updates = get_plugin_updates(); $basename = plugin_basename(__FILE__); if ( isset( $updates[$basename] ) ) { $update = $updates[$basename]; echo '

'; printf( __( 'A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files.', 'wordpress-importer' ), $update->update->new_version ); echo '

'; } } // Close div.wrap function footer() { echo '
'; } /** * Display introductory text and file upload form */ function greet() { echo '
'; echo '

'.__( 'Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site.', 'wordpress-importer' ).'

'; echo '

'.__( 'Choose a WXR (.xml) file to upload, then click Upload file and import.', 'wordpress-importer' ).'

'; wp_import_upload_form( 'admin.php?import=wordpress&step=1' ); echo '
'; } /** * Decide if the given meta key maps to information we will want to import * * @param string $key The meta key to check * @return string|bool The key if we do want to import, false if not */ function is_valid_meta_key( $key ) { // skip attachment metadata since we'll regenerate it from scratch // skip _edit_lock as not relevant for import if ( in_array( $key, array( '_wp_attached_file', '_wp_attachment_metadata', '_edit_lock' ) ) ) return false; return $key; } /** * Decide whether or not the importer is allowed to create users. * Default is true, can be filtered via import_allow_create_users * * @return bool True if creating users is allowed */ function allow_create_users() { return apply_filters( 'import_allow_create_users', true ); } /** * Decide whether or not the importer should attempt to download attachment files. * Default is true, can be filtered via import_allow_fetch_attachments. The choice * made at the import options screen must also be true, false here hides that checkbox. * * @return bool True if downloading attachments is allowed */ function allow_fetch_attachments() { return apply_filters( 'import_allow_fetch_attachments', true ); } /** * Decide what the maximum file size for downloaded attachments is. * Default is 0 (unlimited), can be filtered via import_attachment_size_limit * * @return int Maximum attachment file size to import */ function max_attachment_size() { return apply_filters( 'import_attachment_size_limit', 0 ); } /** * Added to http_request_timeout filter to force timeout at 60 seconds during import * @return int 60 */ function bump_request_timeout( $val ) { return 60; } // return the difference in length between two strings function cmpr_strlen( $a, $b ) { return strlen($b) - strlen($a); } } } // class_exists( 'WP_Importer' ) core/admin/demo-library/importers/class-widgets-import-export.php000064400000035041147600374750021327 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Core Widgets Import/Export. * * @since 1.0.0 * @package Hester Core */ final class Hester_Widgets_Import_Export { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Main Hester_Widgets_Import_Export Instance. * * @since 1.0.0 * @return Hester_Widgets_Import_Export */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Widgets_Import_Export ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { } /** * Import widgets. * * @since 1.0.0 * @param (Array) $data widgets data from the demo. */ public static function import( $data ) { global $wp_registered_sidebars; // Have valid data? // If no data or could not decode. if ( empty( $data ) || ! is_array( $data ) ) { return new WP_Error( esc_html__( 'Import data could not be read. Please try a different file.', 'hester-core' ) ); } // Hook before import. do_action( 'hester_core_before_widgets_import' ); $data = apply_filters( 'hester_core_widgets_import_data', $data ); // Get all available widgets site supports. $available_widgets = self::get_available_widgets(); // Get all existing widget instances. $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { $widget_instances[ $widget_data['id_base'] ] = get_option( 'widget_' . $widget_data['id_base'] ); } // Begin results. $results = array(); // Loop import data's sidebars. foreach ( $data as $sidebar_id => $widgets ) { // Skip inactive widgets (should not be in export file). if ( 'wp_inactive_widgets' === $sidebar_id ) { continue; } // Check if sidebar is available on this site. // Otherwise add widgets to inactive, and say so. if ( isset( $wp_registered_sidebars[ $sidebar_id ] ) ) { $sidebar_available = true; $use_sidebar_id = $sidebar_id; $sidebar_message_type = 'success'; $sidebar_message = ''; } else { $sidebar_available = false; $use_sidebar_id = 'wp_inactive_widgets'; // Add to inactive if sidebar does not exist in theme. $sidebar_message_type = 'error'; $sidebar_message = esc_html__( 'Widget area does not exist in theme (using Inactive)', 'hester-core' ); } // Result for sidebar // Sidebar name if theme supports it; otherwise ID. $results[ $sidebar_id ]['name'] = ! empty( $wp_registered_sidebars[ $sidebar_id ]['name'] ) ? $wp_registered_sidebars[ $sidebar_id ]['name'] : $sidebar_id; $results[ $sidebar_id ]['message_type'] = $sidebar_message_type; $results[ $sidebar_id ]['message'] = $sidebar_message; $results[ $sidebar_id ]['widgets'] = array(); // Loop widgets. foreach ( $widgets as $widget_instance_id => $widget ) { $fail = false; // Get id_base (remove -# from end) and instance ID number. $id_base = preg_replace( '/-[0-9]+$/', '', $widget_instance_id ); $instance_id_number = str_replace( $id_base . '-', '', $widget_instance_id ); // Does site support this widget? if ( ! $fail && ! isset( $available_widgets[ $id_base ] ) ) { $fail = true; $widget_message_type = 'error'; $widget_message = esc_html__( 'Site does not support widget', 'hester-core' ); // Explain why widget not imported. } // Filter to modify settings object before conversion to array and import // Leave this filter here for backwards compatibility with manipulating objects (before conversion to array below) // Ideally the newer hester_core_widget_settings_array below will be used instead of this. $widget = apply_filters( 'hester_core_widget_settings', $widget ); // Convert multidimensional objects to multidimensional arrays // Some plugins like Jetpack Widget Visibility store settings as multidimensional arrays // Without this, they are imported as objects and cause fatal error on Widgets page // If this creates problems for plugins that do actually intend settings in objects then may need to consider other approach: https://wordpress.org/support/topic/problem-with-array-of-arrays // It is probably much more likely that arrays are used than objects, however. $widget = json_decode( wp_json_encode( $widget ), true ); // Convert navigation menu slug to menu ID. if ( 'nav_menu' === $id_base && isset( $widget['nav_menu'] ) ) { $nav_menu_object = wp_get_nav_menu_object( $widget['nav_menu'] ); if ( $nav_menu_object ) { $widget['nav_menu'] = $nav_menu_object->term_id; } } // Sideload Image widget. if ( 'media_image' === $id_base && isset( $widget['url'] ) ) { $image = (object) hester_demo_importer()->sideload_image( $widget['url'] ); if ( ! is_wp_error( $image ) ) { if ( isset( $image->attachment_id ) && ! empty( $image->attachment_id ) ) { $widget['attachment_id'] = $image->attachment_id; $widget['url'] = $image->url; } } } // Sideload images in text widget. if ( 'text' === $id_base && isset( $widget['text'] ) ) { preg_match( '@src="([^"]+)"@', $widget['text'], $image_src ); if ( isset( $image_src[1] ) ) { $image_src = $image_src[1]; } elseif ( isset( $image_src[0] ) ) { $image_src = $image_src[0]; } else { $image_src = false; } if ( $image_src ) { $image = (object) hester_demo_importer()->sideload_image( $image_src ); if ( ! is_wp_error( $image ) ) { if ( isset( $image->url ) && ! empty( $image->url ) ) { $widget['text'] = str_replace( $image_src, $image->url, $widget['text'] ); } } } } // Filter to modify settings array // This is preferred over the older hester_core_widget_settings filter above // Do before identical check because changes may make it identical to end result (such as URL replacements). $widget = apply_filters( 'hester_core_widget_settings_array', $widget ); // Does widget with identical settings already exist in same sidebar? if ( ! $fail && isset( $widget_instances[ $id_base ] ) ) { // Get existing widgets in this sidebar. $sidebars_widgets = get_option( 'sidebars_widgets' ); $sidebar_widgets = isset( $sidebars_widgets[ $use_sidebar_id ] ) ? $sidebars_widgets[ $use_sidebar_id ] : array(); // Check Inactive if that's where will go. // Loop widgets with ID base. $single_widget_instances = ! empty( $widget_instances[ $id_base ] ) ? $widget_instances[ $id_base ] : array(); foreach ( $single_widget_instances as $check_id => $check_widget ) { // Is widget in same sidebar and has identical settings? if ( in_array( "$id_base-$check_id", $sidebar_widgets, true ) && (array) $widget === $check_widget ) { $fail = true; $widget_message_type = 'warning'; // Explain why widget not imported. $widget_message = esc_html__( 'Widget already exists', 'hester-core' ); break; } } } // No failure. if ( ! $fail ) { // Add widget instance. $single_widget_instances = get_option( 'widget_' . $id_base ); // All instances for that widget ID base, get fresh every time. $single_widget_instances = ! empty( $single_widget_instances ) ? $single_widget_instances : array( '_multiwidget' => 1, // Start fresh if have to. ); $single_widget_instances[] = $widget; // Add it. // Get the key it was given. end( $single_widget_instances ); $new_instance_id_number = key( $single_widget_instances ); // If key is 0, make it 1 // When 0, an issue can occur where adding a widget causes data from other widget to load, // and the widget doesn't stick (reload wipes it). if ( '0' === strval( $new_instance_id_number ) ) { $new_instance_id_number = 1; $single_widget_instances[ $new_instance_id_number ] = $single_widget_instances[0]; unset( $single_widget_instances[0] ); } // Move _multiwidget to end of array for uniformity. if ( isset( $single_widget_instances['_multiwidget'] ) ) { $multiwidget = $single_widget_instances['_multiwidget']; unset( $single_widget_instances['_multiwidget'] ); $single_widget_instances['_multiwidget'] = $multiwidget; } // Update option with new widget. update_option( 'widget_' . $id_base, $single_widget_instances ); // Assign widget instance to sidebar. // Which sidebars have which widgets, get fresh every time. $sidebars_widgets = get_option( 'sidebars_widgets' ); // Avoid rarely fatal error when the option is an empty string // https://github.com/churchthemes/widget-importer-exporter/pull/11. if ( ! $sidebars_widgets ) { $sidebars_widgets = array(); } // Use ID number from new widget instance. $new_instance_id = $id_base . '-' . $new_instance_id_number; // Add new instance to sidebar. $sidebars_widgets[ $use_sidebar_id ][] = $new_instance_id; // Save the amended data. update_option( 'sidebars_widgets', $sidebars_widgets ); // After widget import action. $after_widget_import = array( 'sidebar' => $use_sidebar_id, 'sidebar_old' => $sidebar_id, 'widget' => $widget, 'widget_type' => $id_base, 'widget_id' => $new_instance_id, 'widget_id_old' => $widget_instance_id, 'widget_id_num' => $new_instance_id_number, 'widget_id_num_old' => $instance_id_number, ); do_action( 'hester_core_after_widget_import', $after_widget_import ); // Success message. if ( $sidebar_available ) { $widget_message_type = 'success'; $widget_message = esc_html__( 'Imported', 'hester-core' ); } else { $widget_message_type = 'warning'; $widget_message = esc_html__( 'Imported to Inactive', 'hester-core' ); } } // Result for widget instance. $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['name'] = isset( $available_widgets[ $id_base ]['name'] ) ? $available_widgets[ $id_base ]['name'] : $id_base; // Widget name or ID if name not available (not supported by site). $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['title'] = ! empty( $widget['title'] ) ? $widget['title'] : esc_html__( 'No Title', 'hester-core' ); // Show "No Title" if widget instance is untitled. $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message_type'] = $widget_message_type; $results[ $sidebar_id ]['widgets'][ $widget_instance_id ]['message'] = $widget_message; } } // Hook after import. do_action( 'hester_core_after_widgets_import' ); // Return results. return apply_filters( 'hester_core_widgets_import_results', $results ); } /** * Export widgets. * * @since 1.0.0 */ public static function export() { // Export data. $data = self::generate_export_data(); $data = apply_filters( 'hester_widgets_export_data', $data ); $data = wp_json_encode( $data ); $filesize = strlen( $data ); // Set the download headers. nocache_headers(); header( 'Content-disposition: attachment; filename=widgets.json' ); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Expires: 0' ); header( 'Content-Length: ' . $filesize ); // Output file contents. echo $data; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // Start the download. die(); } /** * Generate export data. * * @since 1.0.0 * @return string Export file contents */ public static function generate_export_data() { // Get all available widgets site supports. $available_widgets = self::get_available_widgets(); // Get all widget instances for each widget. $widget_instances = array(); // Loop widgets. foreach ( $available_widgets as $widget_data ) { // Get all instances for this ID base. $instances = get_option( 'widget_' . $widget_data['id_base'] ); // Have instances. if ( ! empty( $instances ) ) { // Loop instances. foreach ( $instances as $instance_id => $instance_data ) { // Key is ID (not _multiwidget). if ( is_numeric( $instance_id ) ) { // Change menu ID to menu slug for Navigation Menu widget. if ( 'nav_menu' === $widget_data['id_base'] ) { if ( isset( $instance_data['nav_menu'] ) ) { $nav_menu_object = wp_get_nav_menu_object( $instance_data['nav_menu'] ); if ( $nav_menu_object ) { $instance_data['nav_menu'] = $nav_menu_object->slug; } } } $unique_instance_id = $widget_data['id_base'] . '-' . $instance_id; $widget_instances[ $unique_instance_id ] = $instance_data; } } } } // Gather sidebars with their widget instances. $sidebars_widgets = get_option( 'sidebars_widgets' ); $sidebars_widget_instances = array(); foreach ( $sidebars_widgets as $sidebar_id => $widget_ids ) { // Skip inactive widgets. if ( 'wp_inactive_widgets' === $sidebar_id ) { continue; } // Skip if no data or not an array (array_version). if ( ! is_array( $widget_ids ) || empty( $widget_ids ) ) { continue; } // Loop widget IDs for this sidebar. foreach ( $widget_ids as $widget_id ) { // Is there an instance for this widget ID? if ( isset( $widget_instances[ $widget_id ] ) ) { // Add to array. $sidebars_widget_instances[ $sidebar_id ][ $widget_id ] = $widget_instances[ $widget_id ]; } } } return $sidebars_widget_instances; } /** * Available widgets. * * Gather site's widgets into array with ID base, name, etc. * Used by export and import functions. * * @since 1.0.0 * @global array $wp_registered_widget_updates * @return array Widget information */ public static function get_available_widgets() { global $wp_registered_widget_controls; $widget_controls = $wp_registered_widget_controls; $available_widgets = array(); foreach ( $widget_controls as $widget ) { // No duplicates. if ( ! empty( $widget['id_base'] ) && ! isset( $available_widgets[ $widget['id_base'] ] ) ) { $available_widgets[ $widget['id_base'] ]['id_base'] = $widget['id_base']; $available_widgets[ $widget['id_base'] ]['name'] = $widget['name']; } } return apply_filters( 'hester_core_available_widgets', $available_widgets ); } } core/admin/demo-library/importers/class-parsers.php000064400000063274147600374750016522 0ustar00parse( $file ); // If SimpleXML succeeds or this is an invalid WXR file then return the results if ( ! is_wp_error( $result ) || 'SimpleXML_parse_error' != $result->get_error_code() ) { return $result; } } elseif ( extension_loaded( 'xml' ) ) { $parser = new Hester_Core_WXR_Parser_XML(); $result = $parser->parse( $file ); // If XMLParser succeeds or this is an invalid WXR file then return the results if ( ! is_wp_error( $result ) || 'XML_parse_error' != $result->get_error_code() ) { return $result; } } // We have a malformed XML file, so display the error and fallthrough to regex if ( isset( $result ) && defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) { echo '
';
			if ( 'SimpleXML_parse_error' == $result->get_error_code() ) {
				foreach ( $result->get_error_data() as $error ) {
					echo esc_html( $error->line ) . ':' . esc_html( $error->column ) . ' ' . esc_html( $error->message ) . "\n";
				}
			} elseif ( 'XML_parse_error' == $result->get_error_code() ) {
				$error = $result->get_error_data();
				echo esc_html( $error[0] ) . ':' . esc_html( $error[1] ) . ' ' . esc_html( $error[2] );
			}
			echo '
'; echo '

' . __( 'There was an error when reading this WXR file', 'wordpress-importer' ) . '
'; echo __( 'Details are shown above. The importer will now try again with a different parser...', 'wordpress-importer' ) . '

'; } // use regular expressions if nothing else available or this is bad XML $parser = new Hester_Core_WXR_Parser_Regex(); return $parser->parse( $file ); } } /** * WXR Parser that makes use of the SimpleXML PHP extension. */ class Hester_Core_WXR_Parser_SimpleXML { function parse( $file ) { $authors = $posts = $categories = $tags = $terms = array(); $internal_errors = libxml_use_internal_errors( true ); $dom = new DOMDocument(); $old_value = null; if ( function_exists( 'libxml_disable_entity_loader' ) ) { $old_value = libxml_disable_entity_loader( true ); } $success = $dom->loadXML( file_get_contents( $file ) ); if ( ! is_null( $old_value ) ) { libxml_disable_entity_loader( $old_value ); } if ( ! $success || isset( $dom->doctype ) ) { return new WP_Error( 'SimpleXML_parse_error', __( 'There was an error when reading this WXR file', 'wordpress-importer' ), libxml_get_errors() ); } $xml = simplexml_import_dom( $dom ); unset( $dom ); // halt if loading produces an error if ( ! $xml ) { return new WP_Error( 'SimpleXML_parse_error', __( 'There was an error when reading this WXR file', 'wordpress-importer' ), libxml_get_errors() ); } $wxr_version = $xml->xpath( '/rss/channel/wp:wxr_version' ); if ( ! $wxr_version ) { return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); } $wxr_version = (string) trim( $wxr_version[0] ); // confirm that we are dealing with the correct file format if ( ! preg_match( '/^\d+\.\d+$/', $wxr_version ) ) { return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); } $base_url = $xml->xpath( '/rss/channel/wp:base_site_url' ); $base_url = (string) trim( $base_url[0] ); $blog_url = $xml->xpath( '/rss/channel/wp:base_blog_url' ); $blog_url = (string) trim( $blog_url[0] ); $namespaces = $xml->getDocNamespaces(); if ( ! isset( $namespaces['wp'] ) ) { $namespaces['wp'] = 'http://wordpress.org/export/1.1/'; } if ( ! isset( $namespaces['excerpt'] ) ) { $namespaces['excerpt'] = 'http://wordpress.org/export/1.1/excerpt/'; } // grab authors foreach ( $xml->xpath( '/rss/channel/wp:author' ) as $author_arr ) { $a = $author_arr->children( $namespaces['wp'] ); $login = (string) $a->author_login; $authors[ $login ] = array( 'author_id' => (int) $a->author_id, 'author_login' => $login, 'author_email' => (string) $a->author_email, 'author_display_name' => (string) $a->author_display_name, 'author_first_name' => (string) $a->author_first_name, 'author_last_name' => (string) $a->author_last_name, ); } // grab cats, tags and terms foreach ( $xml->xpath( '/rss/channel/wp:category' ) as $term_arr ) { $t = $term_arr->children( $namespaces['wp'] ); $category = array( 'term_id' => (int) $t->term_id, 'category_nicename' => (string) $t->category_nicename, 'category_parent' => (string) $t->category_parent, 'cat_name' => (string) $t->cat_name, 'category_description' => (string) $t->category_description, ); foreach ( $t->termmeta as $meta ) { $category['termmeta'][] = array( 'key' => (string) $meta->meta_key, 'value' => (string) $meta->meta_value, ); } $categories[] = $category; } foreach ( $xml->xpath( '/rss/channel/wp:tag' ) as $term_arr ) { $t = $term_arr->children( $namespaces['wp'] ); $tag = array( 'term_id' => (int) $t->term_id, 'tag_slug' => (string) $t->tag_slug, 'tag_name' => (string) $t->tag_name, 'tag_description' => (string) $t->tag_description, ); foreach ( $t->termmeta as $meta ) { $tag['termmeta'][] = array( 'key' => (string) $meta->meta_key, 'value' => (string) $meta->meta_value, ); } $tags[] = $tag; } foreach ( $xml->xpath( '/rss/channel/wp:term' ) as $term_arr ) { $t = $term_arr->children( $namespaces['wp'] ); $term = array( 'term_id' => (int) $t->term_id, 'term_taxonomy' => (string) $t->term_taxonomy, 'slug' => (string) $t->term_slug, 'term_parent' => (string) $t->term_parent, 'term_name' => (string) $t->term_name, 'term_description' => (string) $t->term_description, ); foreach ( $t->termmeta as $meta ) { $term['termmeta'][] = array( 'key' => (string) $meta->meta_key, 'value' => (string) $meta->meta_value, ); } $terms[] = $term; } // grab posts foreach ( $xml->channel->item as $item ) { $post = array( 'post_title' => (string) $item->title, 'guid' => (string) $item->guid, ); $dc = $item->children( 'http://purl.org/dc/elements/1.1/' ); $post['post_author'] = (string) $dc->creator; $content = $item->children( 'http://purl.org/rss/1.0/modules/content/' ); $excerpt = $item->children( $namespaces['excerpt'] ); $post['post_content'] = (string) $content->encoded; $post['post_excerpt'] = (string) $excerpt->encoded; $wp = $item->children( $namespaces['wp'] ); $post['post_id'] = (int) $wp->post_id; $post['post_date'] = (string) $wp->post_date; $post['post_date_gmt'] = (string) $wp->post_date_gmt; $post['comment_status'] = (string) $wp->comment_status; $post['ping_status'] = (string) $wp->ping_status; $post['post_name'] = (string) $wp->post_name; $post['status'] = (string) $wp->status; $post['post_parent'] = (int) $wp->post_parent; $post['menu_order'] = (int) $wp->menu_order; $post['post_type'] = (string) $wp->post_type; $post['post_password'] = (string) $wp->post_password; $post['is_sticky'] = (int) $wp->is_sticky; if ( isset( $wp->attachment_url ) ) { $post['attachment_url'] = (string) $wp->attachment_url; } foreach ( $item->category as $c ) { $att = $c->attributes(); if ( isset( $att['nicename'] ) ) { $post['terms'][] = array( 'name' => (string) $c, 'slug' => (string) $att['nicename'], 'domain' => (string) $att['domain'], ); } } foreach ( $wp->postmeta as $meta ) { $post['postmeta'][] = array( 'key' => (string) $meta->meta_key, 'value' => (string) $meta->meta_value, ); } foreach ( $wp->comment as $comment ) { $meta = array(); if ( isset( $comment->commentmeta ) ) { foreach ( $comment->commentmeta as $m ) { $meta[] = array( 'key' => (string) $m->meta_key, 'value' => (string) $m->meta_value, ); } } $post['comments'][] = array( 'comment_id' => (int) $comment->comment_id, 'comment_author' => (string) $comment->comment_author, 'comment_author_email' => (string) $comment->comment_author_email, 'comment_author_IP' => (string) $comment->comment_author_IP, 'comment_author_url' => (string) $comment->comment_author_url, 'comment_date' => (string) $comment->comment_date, 'comment_date_gmt' => (string) $comment->comment_date_gmt, 'comment_content' => (string) $comment->comment_content, 'comment_approved' => (string) $comment->comment_approved, 'comment_type' => (string) $comment->comment_type, 'comment_parent' => (string) $comment->comment_parent, 'comment_user_id' => (int) $comment->comment_user_id, 'commentmeta' => $meta, ); } $posts[] = $post; } return array( 'authors' => $authors, 'posts' => $posts, 'categories' => $categories, 'tags' => $tags, 'terms' => $terms, 'base_url' => $base_url, 'blog_url' => $blog_url, 'version' => $wxr_version, ); } } /** * WXR Parser that makes use of the XML Parser PHP extension. */ class Hester_Core_WXR_Parser_XML { var $wp_tags = array( 'wp:post_id', 'wp:post_date', 'wp:post_date_gmt', 'wp:comment_status', 'wp:ping_status', 'wp:attachment_url', 'wp:status', 'wp:post_name', 'wp:post_parent', 'wp:menu_order', 'wp:post_type', 'wp:post_password', 'wp:is_sticky', 'wp:term_id', 'wp:category_nicename', 'wp:category_parent', 'wp:cat_name', 'wp:category_description', 'wp:tag_slug', 'wp:tag_name', 'wp:tag_description', 'wp:term_taxonomy', 'wp:term_parent', 'wp:term_name', 'wp:term_description', 'wp:author_id', 'wp:author_login', 'wp:author_email', 'wp:author_display_name', 'wp:author_first_name', 'wp:author_last_name', ); var $wp_sub_tags = array( 'wp:comment_id', 'wp:comment_author', 'wp:comment_author_email', 'wp:comment_author_url', 'wp:comment_author_IP', 'wp:comment_date', 'wp:comment_date_gmt', 'wp:comment_content', 'wp:comment_approved', 'wp:comment_type', 'wp:comment_parent', 'wp:comment_user_id', ); function parse( $file ) { $this->wxr_version = $this->in_post = $this->cdata = $this->data = $this->sub_data = $this->in_tag = $this->in_sub_tag = false; $this->authors = $this->posts = $this->term = $this->category = $this->tag = array(); $xml = xml_parser_create( 'UTF-8' ); xml_parser_set_option( $xml, XML_OPTION_SKIP_WHITE, 1 ); xml_parser_set_option( $xml, XML_OPTION_CASE_FOLDING, 0 ); xml_set_object( $xml, $this ); xml_set_character_data_handler( $xml, 'cdata' ); xml_set_element_handler( $xml, 'tag_open', 'tag_close' ); if ( ! xml_parse( $xml, file_get_contents( $file ), true ) ) { $current_line = xml_get_current_line_number( $xml ); $current_column = xml_get_current_column_number( $xml ); $error_code = xml_get_error_code( $xml ); $error_string = xml_error_string( $error_code ); return new WP_Error( 'XML_parse_error', 'There was an error when reading this WXR file', array( $current_line, $current_column, $error_string ) ); } xml_parser_free( $xml ); if ( ! preg_match( '/^\d+\.\d+$/', $this->wxr_version ) ) { return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); } return array( 'authors' => $this->authors, 'posts' => $this->posts, 'categories' => $this->category, 'tags' => $this->tag, 'terms' => $this->term, 'base_url' => $this->base_url, 'version' => $this->wxr_version, ); } function tag_open( $parse, $tag, $attr ) { if ( in_array( $tag, $this->wp_tags ) ) { $this->in_tag = substr( $tag, 3 ); return; } if ( in_array( $tag, $this->wp_sub_tags ) ) { $this->in_sub_tag = substr( $tag, 3 ); return; } switch ( $tag ) { case 'category': if ( isset( $attr['domain'], $attr['nicename'] ) ) { $this->sub_data['domain'] = $attr['domain']; $this->sub_data['slug'] = $attr['nicename']; } break; case 'item': $this->in_post = true; case 'title': if ( $this->in_post ) { $this->in_tag = 'post_title'; } break; case 'guid': $this->in_tag = 'guid'; break; case 'dc:creator': $this->in_tag = 'post_author'; break; case 'content:encoded': $this->in_tag = 'post_content'; break; case 'excerpt:encoded': $this->in_tag = 'post_excerpt'; break; case 'wp:term_slug': $this->in_tag = 'slug'; break; case 'wp:meta_key': $this->in_sub_tag = 'key'; break; case 'wp:meta_value': $this->in_sub_tag = 'value'; break; } } function cdata( $parser, $cdata ) { if ( ! trim( $cdata ) ) { return; } if ( false !== $this->in_tag || false !== $this->in_sub_tag ) { $this->cdata .= $cdata; } else { $this->cdata .= trim( $cdata ); } } function tag_close( $parser, $tag ) { switch ( $tag ) { case 'wp:comment': unset( $this->sub_data['key'], $this->sub_data['value'] ); // remove meta sub_data if ( ! empty( $this->sub_data ) ) { $this->data['comments'][] = $this->sub_data; } $this->sub_data = false; break; case 'wp:commentmeta': $this->sub_data['commentmeta'][] = array( 'key' => $this->sub_data['key'], 'value' => $this->sub_data['value'], ); break; case 'category': if ( ! empty( $this->sub_data ) ) { $this->sub_data['name'] = $this->cdata; $this->data['terms'][] = $this->sub_data; } $this->sub_data = false; break; case 'wp:postmeta': if ( ! empty( $this->sub_data ) ) { $this->data['postmeta'][] = $this->sub_data; } $this->sub_data = false; break; case 'item': $this->posts[] = $this->data; $this->data = false; break; case 'wp:category': case 'wp:tag': case 'wp:term': $n = substr( $tag, 3 ); array_push( $this->$n, $this->data ); $this->data = false; break; case 'wp:author': if ( ! empty( $this->data['author_login'] ) ) { $this->authors[ $this->data['author_login'] ] = $this->data; } $this->data = false; break; case 'wp:base_site_url': $this->base_url = $this->cdata; break; case 'wp:base_blog_url': $this->blog_url = $this->cdata; break; case 'wp:wxr_version': $this->wxr_version = $this->cdata; break; default: if ( $this->in_sub_tag ) { $this->sub_data[ $this->in_sub_tag ] = ! empty( $this->cdata ) ? $this->cdata : ''; $this->in_sub_tag = false; } elseif ( $this->in_tag ) { $this->data[ $this->in_tag ] = ! empty( $this->cdata ) ? $this->cdata : ''; $this->in_tag = false; } } $this->cdata = false; } } /** * WXR Parser that uses regular expressions. Fallback for installs without an XML parser. */ class Hester_Core_WXR_Parser_Regex { var $authors = array(); var $posts = array(); var $categories = array(); var $tags = array(); var $terms = array(); var $base_url = ''; var $blog_url = ''; function __construct() { $this->has_gzip = is_callable( 'gzopen' ); } function parse( $file ) { $wxr_version = $in_multiline = false; $multiline_content = ''; $multiline_tags = array( 'item' => array( 'posts', array( $this, 'process_post' ) ), 'wp:category' => array( 'categories', array( $this, 'process_category' ) ), 'wp:tag' => array( 'tags', array( $this, 'process_tag' ) ), 'wp:term' => array( 'terms', array( $this, 'process_term' ) ), ); $fp = $this->fopen( $file, 'r' ); if ( $fp ) { while ( ! $this->feof( $fp ) ) { $importline = rtrim( $this->fgets( $fp ) ); if ( ! $wxr_version && preg_match( '|(\d+\.\d+)|', $importline, $version ) ) { $wxr_version = $version[1]; } if ( false !== strpos( $importline, '' ) ) { preg_match( '|(.*?)|is', $importline, $url ); $this->base_url = $url[1]; continue; } if ( false !== strpos( $importline, '' ) ) { preg_match( '|(.*?)|is', $importline, $url ); $this->blog_url = $url[1]; continue; } if ( false !== strpos( $importline, '' ) ) { preg_match( '|(.*?)|is', $importline, $author ); $a = $this->process_author( $author[1] ); $this->authors[ $a['author_login'] ] = $a; continue; } foreach ( $multiline_tags as $tag => $handler ) { // Handle multi-line tags on a singular line if ( preg_match( '|<' . $tag . '>(.*?)|is', $importline, $matches ) ) { $this->{$handler[0]}[] = call_user_func( $handler[1], $matches[1] ); } elseif ( false !== ( $pos = strpos( $importline, "<$tag>" ) ) ) { // Take note of any content after the opening tag $multiline_content = trim( substr( $importline, $pos + strlen( $tag ) + 2 ) ); // We don't want to have this line added to `$is_multiline` below. $importline = ''; $in_multiline = $tag; } elseif ( false !== ( $pos = strpos( $importline, "" ) ) ) { $in_multiline = false; $multiline_content .= trim( substr( $importline, 0, $pos ) ); $this->{$handler[0]}[] = call_user_func( $handler[1], $multiline_content ); } } if ( $in_multiline && $importline ) { $multiline_content .= $importline . "\n"; } } $this->fclose( $fp ); } if ( ! $wxr_version ) { return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); } return array( 'authors' => $this->authors, 'posts' => $this->posts, 'categories' => $this->categories, 'tags' => $this->tags, 'terms' => $this->terms, 'base_url' => $this->base_url, 'version' => $wxr_version, ); } function get_tag( $string, $tag ) { preg_match( "|<$tag.*?>(.*?)|is", $string, $return ); if ( isset( $return[1] ) ) { if ( substr( $return[1], 0, 9 ) == '' ) !== false ) { preg_match_all( '||s', $return[1], $matches ); $return = ''; foreach ( $matches[1] as $match ) { $return .= $match; } } else { $return = preg_replace( '|^$|s', '$1', $return[1] ); } } else { $return = $return[1]; } } else { $return = ''; } return $return; } function process_category( $c ) { return array( 'term_id' => $this->get_tag( $c, 'wp:term_id' ), 'cat_name' => $this->get_tag( $c, 'wp:cat_name' ), 'category_nicename' => $this->get_tag( $c, 'wp:category_nicename' ), 'category_parent' => $this->get_tag( $c, 'wp:category_parent' ), 'category_description' => $this->get_tag( $c, 'wp:category_description' ), ); } function process_tag( $t ) { return array( 'term_id' => $this->get_tag( $t, 'wp:term_id' ), 'tag_name' => $this->get_tag( $t, 'wp:tag_name' ), 'tag_slug' => $this->get_tag( $t, 'wp:tag_slug' ), 'tag_description' => $this->get_tag( $t, 'wp:tag_description' ), ); } function process_term( $t ) { return array( 'term_id' => $this->get_tag( $t, 'wp:term_id' ), 'term_taxonomy' => $this->get_tag( $t, 'wp:term_taxonomy' ), 'slug' => $this->get_tag( $t, 'wp:term_slug' ), 'term_parent' => $this->get_tag( $t, 'wp:term_parent' ), 'term_name' => $this->get_tag( $t, 'wp:term_name' ), 'term_description' => $this->get_tag( $t, 'wp:term_description' ), ); } function process_author( $a ) { return array( 'author_id' => $this->get_tag( $a, 'wp:author_id' ), 'author_login' => $this->get_tag( $a, 'wp:author_login' ), 'author_email' => $this->get_tag( $a, 'wp:author_email' ), 'author_display_name' => $this->get_tag( $a, 'wp:author_display_name' ), 'author_first_name' => $this->get_tag( $a, 'wp:author_first_name' ), 'author_last_name' => $this->get_tag( $a, 'wp:author_last_name' ), ); } function process_post( $post ) { $post_id = $this->get_tag( $post, 'wp:post_id' ); $post_title = $this->get_tag( $post, 'title' ); $post_date = $this->get_tag( $post, 'wp:post_date' ); $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); $comment_status = $this->get_tag( $post, 'wp:comment_status' ); $ping_status = $this->get_tag( $post, 'wp:ping_status' ); $status = $this->get_tag( $post, 'wp:status' ); $post_name = $this->get_tag( $post, 'wp:post_name' ); $post_parent = $this->get_tag( $post, 'wp:post_parent' ); $menu_order = $this->get_tag( $post, 'wp:menu_order' ); $post_type = $this->get_tag( $post, 'wp:post_type' ); $post_password = $this->get_tag( $post, 'wp:post_password' ); $is_sticky = $this->get_tag( $post, 'wp:is_sticky' ); $guid = $this->get_tag( $post, 'guid' ); $post_author = $this->get_tag( $post, 'dc:creator' ); $post_excerpt = $this->get_tag( $post, 'excerpt:encoded' ); $post_excerpt = preg_replace_callback( '|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_excerpt ); $post_excerpt = str_replace( '
', '
', $post_excerpt ); $post_excerpt = str_replace( '
', '
', $post_excerpt ); $post_content = $this->get_tag( $post, 'content:encoded' ); $post_content = preg_replace_callback( '|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_content ); $post_content = str_replace( '
', '
', $post_content ); $post_content = str_replace( '
', '
', $post_content ); $postdata = compact( 'post_id', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_excerpt', 'post_title', 'status', 'post_name', 'comment_status', 'ping_status', 'guid', 'post_parent', 'menu_order', 'post_type', 'post_password', 'is_sticky' ); $attachment_url = $this->get_tag( $post, 'wp:attachment_url' ); if ( $attachment_url ) { $postdata['attachment_url'] = $attachment_url; } preg_match_all( '|(.+?)|is', $post, $terms, PREG_SET_ORDER ); foreach ( $terms as $t ) { $post_terms[] = array( 'slug' => $t[2], 'domain' => $t[1], 'name' => str_replace( array( '' ), '', $t[3] ), ); } if ( ! empty( $post_terms ) ) { $postdata['terms'] = $post_terms; } preg_match_all( '|(.+?)|is', $post, $comments ); $comments = $comments[1]; if ( $comments ) { foreach ( $comments as $comment ) { preg_match_all( '|(.+?)|is', $comment, $commentmeta ); $commentmeta = $commentmeta[1]; $c_meta = array(); foreach ( $commentmeta as $m ) { $c_meta[] = array( 'key' => $this->get_tag( $m, 'wp:meta_key' ), 'value' => $this->get_tag( $m, 'wp:meta_value' ), ); } $post_comments[] = array( 'comment_id' => $this->get_tag( $comment, 'wp:comment_id' ), 'comment_author' => $this->get_tag( $comment, 'wp:comment_author' ), 'comment_author_email' => $this->get_tag( $comment, 'wp:comment_author_email' ), 'comment_author_IP' => $this->get_tag( $comment, 'wp:comment_author_IP' ), 'comment_author_url' => $this->get_tag( $comment, 'wp:comment_author_url' ), 'comment_date' => $this->get_tag( $comment, 'wp:comment_date' ), 'comment_date_gmt' => $this->get_tag( $comment, 'wp:comment_date_gmt' ), 'comment_content' => $this->get_tag( $comment, 'wp:comment_content' ), 'comment_approved' => $this->get_tag( $comment, 'wp:comment_approved' ), 'comment_type' => $this->get_tag( $comment, 'wp:comment_type' ), 'comment_parent' => $this->get_tag( $comment, 'wp:comment_parent' ), 'comment_user_id' => $this->get_tag( $comment, 'wp:comment_user_id' ), 'commentmeta' => $c_meta, ); } } if ( ! empty( $post_comments ) ) { $postdata['comments'] = $post_comments; } preg_match_all( '|(.+?)|is', $post, $postmeta ); $postmeta = $postmeta[1]; if ( $postmeta ) { foreach ( $postmeta as $p ) { $post_postmeta[] = array( 'key' => $this->get_tag( $p, 'wp:meta_key' ), 'value' => $this->get_tag( $p, 'wp:meta_value' ), ); } } if ( ! empty( $post_postmeta ) ) { $postdata['postmeta'] = $post_postmeta; } return $postdata; } function _normalize_tag( $matches ) { return '<' . strtolower( $matches[1] ); } function fopen( $filename, $mode = 'r' ) { if ( $this->has_gzip ) { return gzopen( $filename, $mode ); } return fopen( $filename, $mode ); } function feof( $fp ) { if ( $this->has_gzip ) { return gzeof( $fp ); } return feof( $fp ); } function fgets( $fp, $len = 8192 ) { if ( $this->has_gzip ) { return gzgets( $fp, $len ); } return fgets( $fp, $len ); } function fclose( $fp ) { if ( $this->has_gzip ) { return gzclose( $fp ); } return fclose( $fp ); } } core/admin/demo-library/importers/class-options-import-export.php000064400000024156147600374750021361 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Core Options Import/Export. * * @since 1.0.0 * @package Hester Core */ final class Hester_Options_Import_Export { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Main Hester_Options_Import_Export Instance. * * @since 1.0.0 * @return Hester_Options_Import_Export */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Options_Import_Export ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { } /** * Import options. * * @since 1.0.0 * @param object $data Options from the demo. */ public function import( $data ) { // Have valid data? // If no data or could not decode. if ( empty( $data ) || ! is_array( $data ) ) { return new WP_Error( esc_html__( 'Import data could not be read. Please try a different file.', 'hester-core' ) ); } // Hook before import. do_action( 'hester_core_before_options_import' ); $data = apply_filters( 'hester_core_options_import_data', $data ); foreach ( $data as $option_name => $option_value ) { if ( null !== $option_value ) { // Is option exist in defined array site_options()? if ( in_array( $option_name, self::options(), true ) ) { switch ( $option_name ) { // Set WooCommerce page ID by page Title. case 'woocommerce_shop_page_id': case 'woocommerce_cart_page_id': case 'woocommerce_checkout_page_id': case 'woocommerce_pay_page_id': case 'woocommerce_myaccount_page_id': case 'woocommerce_thanks_page_id': case 'woocommerce_edit_address_page_id': case 'woocommerce_view_order_page_id': case 'woocommerce_change_password_page_id': case 'woocommerce_logout_page_id': case 'woocommerce_lost_password_page_id': case 'page_for_posts': case 'page_on_front': $this->update_page_id_by_option_value( $option_name, $option_value ); break; // Nav menu locations. case 'nav_menu_locations': $this->set_nav_menu_locations( $option_value ); break; // Import WooCommerce category images. case 'woocommerce_product_cat': $this->set_woocommerce_product_cat( $option_value ); break; // insert logo. case 'custom_logo': $this->insert_logo( $option_value ); break; default: update_option( $option_name, $option_value ); break; } } } } // Hook after import. do_action( 'hester_core_after_options_import' ); } /** * Export options. * * @since 1.0.0 */ public static function export() { // Export data. $data = array(); // Logo. if ( has_custom_logo() ) { $data['custom_logo'] = wp_get_attachment_url( get_theme_mod( 'custom_logo' ) ); } // Homepage settings. $data['show_on_front'] = get_option( 'show_on_front' ); // Static homepage. if ( 'page' === $data['show_on_front'] ) { // Front Page. $page_on_front = get_option( 'page_on_front' ); if ( $page_on_front ) { $data['page_on_front'] = get_the_title( $page_on_front ); } // Posts page. $page_for_posts = get_option( 'page_for_posts' ); if ( $page_for_posts ) { $data['page_for_posts'] = get_the_title( $page_for_posts ); } } // Posts per page. $data['posts_per_page'] = get_option( 'posts_per_page' ); // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page // WooCommerce. if ( class_exists( 'WooCommerce' ) ) { // WooCommerce pages. $woocommerce_pages = array( 'woocommerce_shop_page_id', 'woocommerce_cart_page_id', 'woocommerce_checkout_page_id', 'woocommerce_pay_page_id', 'woocommerce_thanks_page_id', 'woocommerce_myaccount_page_id', 'woocommerce_edit_address_page_id', 'woocommerce_view_order_page_id', 'woocommerce_change_password_page_id', 'woocommerce_logout_page_id', 'woocommerce_lost_password_page_id', ); foreach ( $woocommerce_pages as $page_id ) { $data[ $page_id ] = get_the_title( get_option( $page_id ) ); } // WooCommerce options. $woocommerce_options = array( 'woocommerce_enable_guest_checkout', 'woocommerce_enable_checkout_login_reminder', 'woocommerce_enable_signup_and_login_from_checkout', 'woocommerce_enable_myaccount_registration', 'woocommerce_registration_generate_username', 'woocommerce_single_image_width', 'woocommerce_thumbnail_image_width', 'woocommerce_thumbnail_cropping', 'woocommerce_thumbnail_cropping_custom_width', 'woocommerce_thumbnail_cropping_custom_height', 'woocommerce_shop_page_display', 'woocommerce_category_archive_display', 'woocommerce_default_catalog_orderby', 'woocommerce_catalog_columns', 'woocommerce_catalog_rows', ); foreach ( $woocommerce_options as $id ) { $data[ $id ] = get_option( $id ); } } // WPForms. if ( class_exists( 'WPForms' ) ) { $data['wpforms_settings'] = get_option( 'wpforms_settings' ); } // Navigation. $nav_menu_locations = get_theme_mod( 'nav_menu_locations' ); if ( ! empty( $nav_menu_locations ) && is_array( $nav_menu_locations ) ) { foreach ( $nav_menu_locations as $location => $menu_id ) { $term = get_term_by( 'id', $menu_id, 'nav_menu' ); if ( is_object( $term ) ) { $data['nav_menu_locations'][ $location ] = $term->slug; } } } // Menus. $menus = get_terms( 'nav_menu' ); if ( ! empty( $menus ) && is_array( $menus ) ) { foreach ( $menus as $menu ) { $data['menus'][ $menu->slug ] = $menu->name; } } // @todo wpforms settings. $data = apply_filters( 'hester_customizer_export_data', $data ); $data = wp_json_encode( $data ); $filesize = strlen( $data ); // Set the download headers. nocache_headers(); header( 'Content-disposition: attachment; filename=options.json' ); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Expires: 0' ); header( 'Content-Length: ' . $filesize ); // Serialize the export data. echo $data; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // Start the download. die(); } /** * Valid Options. * * @since 1.0.0 * * @return array $options List of valid options. */ private static function options() { // Valid options. $options = array( // General. 'custom_logo', 'nav_menu_locations', 'show_on_front', 'page_on_front', 'page_for_posts', 'posts_per_page', // WooCommerce pages. 'woocommerce_shop_page_id', 'woocommerce_cart_page_id', 'woocommerce_checkout_page_id', 'woocommerce_pay_page_id', 'woocommerce_thanks_page_id', 'woocommerce_myaccount_page_id', 'woocommerce_edit_address_page_id', 'woocommerce_view_order_page_id', 'woocommerce_change_password_page_id', 'woocommerce_logout_page_id', 'woocommerce_lost_password_page_id', // WooCommerce Account & Privacy. 'woocommerce_enable_guest_checkout', 'woocommerce_enable_checkout_login_reminder', 'woocommerce_enable_signup_and_login_from_checkout', 'woocommerce_enable_myaccount_registration', 'woocommerce_registration_generate_username', // WooCommerce thumbs. 'woocommerce_single_image_width', 'woocommerce_thumbnail_image_width', 'woocommerce_thumbnail_cropping', 'woocommerce_thumbnail_cropping_custom_width', 'woocommerce_thumbnail_cropping_custom_height', // WooCommerce categories. 'woocommerce_product_cat', // WPForms. 'wpforms_settings', ); return apply_filters( 'hester_core_site_options', $options ); } /** * Update post option. * * @since 1.0.0 * * @param string $option_name Option name. * @param mixed $option_value Option value. * @return void */ private function update_page_id_by_option_value( $option_name, $option_value ) { $page = get_page_by_title( $option_value ); if ( is_object( $page ) ) { update_option( $option_name, $page->ID ); } } /** * In WP nav menu is stored as ( 'menu_location' => 'menu_id' ); * In export we send 'menu_slug' like ( 'menu_location' => 'menu_slug' ); * In import we set 'menu_id' from menu slug like ( 'menu_location' => 'menu_id' ); * * @since 1.0.0 * @param array $nav_menu_locations Array of nav menu locations. */ private function set_nav_menu_locations( $nav_menu_locations = array() ) { $menu_locations = array(); // Update menu locations. if ( isset( $nav_menu_locations ) ) { foreach ( $nav_menu_locations as $menu => $value ) { $term = get_term_by( 'slug', $value, 'nav_menu' ); if ( is_object( $term ) ) { $menu_locations[ $menu ] = $term->term_id; } } set_theme_mod( 'nav_menu_locations', $menu_locations ); } } /** * Set WooCommerce category images. * * @since 1.0.0 * @param array $cats Array of categories. */ private function set_woocommerce_product_cat( $cats = array() ) { $menu_locations = array(); if ( isset( $cats ) ) { foreach ( $cats as $key => $cat ) { if ( ! empty( $cat['slug'] ) && ! empty( $cat['thumbnail_src'] ) ) { $image = (object) hester_demo_importer()->sideload_image( $cat['thumbnail_src'] ); if ( ! is_wp_error( $image ) ) { if ( isset( $image->attachment_id ) && ! empty( $image->attachment_id ) ) { $term = get_term_by( 'slug', $cat['slug'], 'product_cat' ); if ( is_object( $term ) ) { update_term_meta( $term->term_id, 'thumbnail_id', $image->attachment_id ); } } } } } } } /** * Insert Logo By URL. * * @since 1.0.0 * @param string $image_url Logo URL. * @return void */ private function insert_logo( $image_url = '' ) { $data = (object) hester_demo_importer()->sideload_image( $image_url ); if ( ! is_wp_error( $data ) ) { if ( isset( $data->attachment_id ) && ! empty( $data->attachment_id ) ) { set_theme_mod( 'custom_logo', $data->attachment_id ); } } } } core/admin/demo-library/importers/class-customizer-import-export.php000064400000007764147600374750022100 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Core Customizer Import/Export. * * @since 1.0.0 * @package Hester Core */ final class Hester_Customizer_Import_Export { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Main Hester_Customizer_Import_Export Instance. * * @since 1.0.0 * @return Hester_Customizer_Import_Export */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Customizer_Import_Export ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { } /** * Import customizer options. * * @since 1.0.0 * @param object $data customizer data from the demo. */ public static function import( $data ) { // Have valid data? // If no data or could not decode. if ( empty( $data ) || ! is_array( $data ) ) { return new WP_Error( esc_html__( 'Import data could not be read. Please try a different file.', 'hester-core' ) ); } // Hook before import. do_action( 'hester_core_before_customizer_import' ); $data = self::remap_urls( $data ); $data = apply_filters( 'hester_core_customizer_import_data', $data ); // Theme Mods. if ( isset( $data['theme_mod'] ) ) { foreach ( $data['theme_mod'] as $id => $value ) { set_theme_mod( $id, $value ); } } // Options. if ( isset( $data['option'] ) ) { foreach ( $data['option'] as $id => $value ) { update_option( $id, $value ); } } // Custom CSS. if ( isset( $data['custom_css'] ) ) { wp_update_custom_css_post( $data['custom_css'] ); } // Hook after import. do_action( 'hester_core_after_customizer_import' ); } /** * Export customizer options. * * @since 1.0.0 */ public static function export() { // Export data. $data = array(); $theme_name = hester_core()->theme_name; $hester_options = $theme_name . '_option'; // Hester settings. $customizer = array_keys( $theme_name()->options->get_defaults() ); if ( ! empty( $customizer ) ) { foreach ( $customizer as $id ) { $id = str_replace( $theme_name.'_', '', $id ); $data['theme_mod'][ $theme_name.'_' . $id ] = $hester_options( $id ); } } // Custom CSS. $custom_css = wp_get_custom_css(); if ( ! empty( $custom_css ) ) { $data['custom_css'] = $custom_css; } $data = apply_filters( 'hester_customizer_export_data', $data ); $data = wp_json_encode( $data ); $filesize = strlen( $data ); // Set the download headers. nocache_headers(); header( 'Content-disposition: attachment; filename=customizer.json' ); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Expires: 0' ); header( 'Content-Length: ' . $filesize ); // Serialize the export data. echo $data; // phpcs:ignore WordPress.Security.EscapeOutput // Start the download. die(); } /** * Remap URLs from Customizer options to use local URLs. * * @since 1.0.1 * * @param array $data Customizer data to modify. * @return array Modified customizer data. */ public static function remap_urls( $data ) { // Method refers to theme_mods or options. foreach ( $data as $method => $options ) { if ( is_array( $options ) ) { foreach ( $options as $id => $value ) { if ( isset( $value['background-image'] ) ) { $image = (object) hester_demo_importer()->sideload_image( $value['background-image'] ); if ( ! is_wp_error( $image ) ) { if ( isset( $image->attachment_id ) && ! empty( $image->attachment_id ) ) { $data[ $method ][ $id ]['background-image-id'] = $image->attachment_id; $data[ $method ][ $id ]['background-image'] = $image->url; } } } } } } return $data; } } core/admin/demo-library/class-hester-demo-library.php000064400000024703147600374750016667 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Demo Library Class. * * @since 1.0.0 * @package Hester Core */ final class Hester_Demo_Library { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Version. * * @since 1.0.0 * @var string */ public $version = '1.0.0'; /** * Demo templates. * * @since 1.0.0 * @var string */ public $templates = false; /** * Is pro * @since 1.0.6 * @var boolean */ public $is_pro = false; /** * Main Hester Demo Library Instance. * * @since 1.0.0 * @return Hester_Demo_Library */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Demo_Library ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { $this->version = defined( HESTER_CORE_VERSION ) ? HESTER_CORE_VERSION : $this->version; $this->includes(); $this->hooks(); do_action( 'hester_demo_library_loaded' ); } /** * Include files. * * @since 1.0.0 */ private function includes() { require_once plugin_dir_path( __FILE__ ) . 'class-hester-demo-library-page.php'; require_once plugin_dir_path( __FILE__ ) . 'class-hester-demo-importer.php'; require_once plugin_dir_path( __FILE__ ) . 'class-hester-demo-exporter.php'; } /** * Hook into actions and filters. * * @since 1.0.0 */ private function hooks() { add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ) ); add_action( 'admin_init', array( $this, 'refresh_templates' ) ); add_action( 'wp_ajax_hester-core-filter-demos', array( $this, 'filter_templates' ) ); } /** * Enqueue admin scripts. * * @since 1.0.0 * * @param string $hook Current hook name. * @return void */ public function admin_enqueue( $hook = '' ) { $theme_name = hester_core()->theme_name; if ( 'hester_page_'.$theme_name.'-demo-library' !== $hook ) { return; } wp_enqueue_script( 'hester-demo-library', plugin_dir_url( __FILE__ ) . 'assets/js/demo-library.min.js', array( 'jquery', 'wp-util', 'updates' ), $this->version, true ); $theme = wp_get_theme(); // gets the current theme if ( stripos( strtolower( $theme->name ), 'pro' ) ) { $this->is_pro = true; } $localized = array( 'strings' => array( 'closeWindowWarning' => __( 'Warning! Demo import process is not complete. Don\'t close the window until import process is complete. Do you still want to leave the window?', 'hester-core' ), 'importDemoWarning' => __( 'Demo import process will start now. Please do not close the window until import process is complete.', 'hester-core' ), 'importing' => __( 'Importing...', 'hester-core' ), 'installingPlugin' => __( 'Installing plugin', 'hester-core' ) . ' ', 'installed' => __( 'Plugin installed!', 'hester-core' ), 'activatingPlugin' => __( 'Activating plugin', 'hester-core' ) . ' ', 'activated' => __( 'Plugin activated! ', 'hester-core' ), 'importCompleted' => __( 'All Done! Visit Site', 'hester-core' ), 'importingCustomizer' => __( 'Importing Customizer...', 'hester-core' ), 'importingContent' => __( 'Importing Content...', 'hester-core' ), 'importingWPForms' => __( 'Importing WPForms...', 'hester-core' ), 'importingOptions' => __( 'Importing Options...', 'hester-core' ), 'importingWidgets' => __( 'Importing Widgets...', 'hester-core' ), 'preview' => __( 'Preview', 'hester-core' ), 'preparing' => __( 'Preparing Data...', 'hester-core' ), 'noResultsFound' => __( 'No results found', 'hester-core' ), ), 'homeurl' => home_url( '/' ), 'templates' => $this->get_templates(), 'is_pro' => $this->is_pro, 'upgrade_to_pro_url' => sprintf('https://peregrine-themes.com/%s/?utm_medium=dashboard&utm_source=demos&utm_campaign=upgradeToPro', $theme_name), ); $localized = apply_filters( 'hester_core_demo_library_localized', $localized ); wp_localize_script( 'hester-demo-library', 'hesterCoreDemoLibrary', $localized ); wp_enqueue_style( 'hester-core-admin', plugin_dir_url( __FILE__ ) . 'assets/css/demo-library.min.css', $this->version, true ); } /** * Get templates. * * @since 1.0.0 * * @return array Array of demo templates. */ public function get_templates() { // Check if we have stored templates. if ( false === $this->templates ) { $this->templates = get_transient( 'hester_core_demo_templates' ); } // No stored templates, get from remote. if ( ! $this->templates ) { $response = wp_remote_get( 'https://peregrine-themes.com/wp-json/api/v1/demos', array( // 'user-agent' => 'Hester/' . HESTER_THEME_VERSION . ';', 'timeout' => 60, ) ); if ( 200 === wp_remote_retrieve_response_code( $response ) ) { $this->templates = (array) json_decode( stripcslashes( wp_remote_retrieve_body( $response ) ), true ); } $theme = wp_get_theme(); if ( is_array( $this->templates ) && ! empty( $this->templates ) ) { foreach ( $this->templates as $id => $template ) { // Skip demos that require a newer version of Hester Core. if ( defined( 'HESTER_CORE_VERSION' ) && isset( $template['hester-core-version'] ) && version_compare( HESTER_CORE_VERSION, $template['hester-core-version'] ) < 0 ) { unset( $this->templates[ $id ] ); continue; } // Skip demos that require a newer version of Hester Theme. if ( defined( 'HESTER_THEME_VERSION' ) && isset( $template['hester-theme-version'] ) && version_compare( HESTER_THEME_VERSION, $template['hester-theme-version'] ) < 0 ) { unset( $this->templates[ $id ] ); continue; } // Skip demos that require a newer version of Bloglo Theme. if ( defined( 'BLOGLO_THEME_VERSION' ) && isset( $template['bloglo-theme-version'] ) && version_compare( BLOGLO_THEME_VERSION, $template['bloglo-theme-version'] ) < 0 ) { unset( $this->templates[ $id ] ); continue; } // Skip demos that require a newer version of Bloglo Theme. if ( defined( 'BLOGHASH_THEME_VERSION' ) && isset( $template['bloghash-theme-version'] ) && version_compare( BLOGHASH_THEME_VERSION, $template['bloghash-theme-version'] ) < 0 ) { unset( $this->templates[ $id ] ); continue; } if( isset( $template['for_themes'] ) && !in_array( strtolower( $theme->name ), $template['for_themes'] ) ){ unset( $this->templates[ $id ] ); continue; } } } set_transient( 'hester_core_demo_templates', $this->templates, 60 * 60 * 24 ); } if ( is_array( $this->templates ) && ! empty( $this->templates ) ) { foreach ( $this->templates as $id => $template ) { $this->templates[ $id ]['plugins'] = $this->required_plugins( $template ); } } return $this->templates; } /** * Refresh demo templates. * * @since 1.0.0 */ public function refresh_templates() { // Security check. if ( ! isset( $_GET['hester_core_nonce'] ) || ! wp_verify_nonce( $_GET['hester_core_nonce'], 'refresh_templates' ) ) { return; } delete_transient( 'hester_core_demo_templates' ); $theme_name = hester_core()->theme_name; wp_safe_redirect( admin_url( 'admin.php?page='.$theme_name.'-demo-library' ) ); die; } /** * Filter demo templates. * * @since 1.0.0 */ public function filter_templates() { $hester_nonce = hester_core()->theme_name . '_nonce'; // Nonce check. check_ajax_referer( $hester_nonce ); // Permission check. if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( esc_html__( 'You do not have permission to import a demo.', 'hester-core' ), 'import_error' ); } $templates = $this->get_templates(); if ( ! isset( $_POST['filters'] ) ) { wp_send_json_success( $templates ); } $filters = array( 'category' => isset( $_POST['filters']['category'] ) ? sanitize_text_field( wp_unslash( $_POST['filters']['category'] ) ) : '', 'builder' => isset( $_POST['filters']['builder'] ) ? sanitize_text_field( wp_unslash( $_POST['filters']['builder'] ) ) : '', 's' => isset( $_POST['filters']['s'] ) ? sanitize_text_field( wp_unslash( $_POST['filters']['s'] ) ) : '', ); if ( ! empty( $templates ) && is_array( $templates ) ) { foreach ( $templates as $id => $template ) { // Check template category. if ( ! empty( $filters['category'] ) && ! array_key_exists( $filters['category'], $template['categories'] ) ) { unset( $templates[ $id ] ); continue; } // Check template builder. if ( ! empty( $filters['builder'] ) && $filters['builder'] !== $template['page-builder'] ) { unset( $templates[ $id ] ); continue; } // Check search filter. if ( ! empty( $filters['s'] ) && false === strpos( strtolower( $template['name'] ), strtolower( $filters['s'] ) ) ) { unset( $templates[ $id ] ); continue; } } } wp_send_json_success( $templates ); } /** * Get required plugins. * * @since 1.0.0 * @param array $template Template details. * @return array Array of demo templates. */ public function required_plugins( $template ) { if ( ! isset( $template['plugins'] ) ) { return; } $theme_name = hester_core()->theme_name; $hester_plugin_utilities = $theme_name . '_plugin_utilities'; if ( ! function_exists( $hester_plugin_utilities ) ) { return $template['plugins']; } $plugins = array(); foreach ( $template['plugins'] as $plugin ) { if ( $hester_plugin_utilities()->is_activated( $plugin['slug'] ) ) { $plugin['status'] = 'active'; } elseif ( $hester_plugin_utilities()->is_installed( $plugin['slug'] ) ) { $plugin['status'] = 'installed'; } else { $plugin['status'] = 'not_installed'; } $plugins[] = $plugin; } return $plugins; } } /** * The function which returns the one Hester_Demo_Library instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function hester_demo_library() { return Hester_Demo_Library::instance(); } hester_demo_library(); core/admin/demo-library/class-hester-demo-library-page.php000064400000037625147600374750017610 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if (!defined('ABSPATH')) { exit; } /** * Hester Demo Library Class. * * @since 1.0.0 * @package Hester Core */ final class Hester_Demo_Library_Page { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Main Hester Demo Library Page Instance. * * @since 1.0.0 * @return Hester_Demo_Library_Page */ public static function instance() { if (!isset(self::$instance) && !(self::$instance instanceof Hester_Demo_Library_Page)) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { $theme_name = hester_core()->theme_name; add_action('admin_menu', array($this, 'add_admin_menu'), 100); add_action('admin_print_footer_scripts-hester_page_'.$theme_name.'-demo-library', array($this, 'print_templates')); add_filter( $theme_name . '_admin_page_tabs', array($this, 'add_admin_page_tabs')); add_filter( $theme_name . '_dashboard_navigation_items', array($this, 'update_navigation_items')); do_action('hester_demo_library_page_loaded'); } /** * Add to menu. * * @since 1.0.0 */ public function add_admin_menu() { $theme_name = hester_core()->theme_name; // Demo Library page. add_submenu_page( $theme_name . '-dashboard', esc_html__('Demo Library', 'hester-core'), 'Demo Library', apply_filters('hester_manage_cap', 'edit_theme_options'), $theme_name . '-demo-library', array($this, 'render_demo_library') ); } /** * Render Demo Library content. * * @since 1.0.0 */ public function render_demo_library() { $theme_name = hester_core()->theme_name; $hester_dashboard = $theme_name . '_dashboard'; $hester_dashboard()->render_navigation(); ?>
  • $cat) { $arr[] = array_keys($cat); } $templateCatArray = array(); for($i = 0; $i < count($arr); $i++) { for ( $j=0; $j < count($arr[$i]); $j++ ) { $templateCatArray[] = $arr[$i][$j]; } } $cats = array_values(array_unique($templateCatArray)); for($i = 0; $i < count($cats); $i++) { ?>

theme_name; $demo = array( 'demo-library' => array( 'id' => 'demo-library', 'name' => esc_html__('Demo Library', 'hester-core'), 'icon' => '', 'url' => admin_url('admin.php?page='.$theme_name.'-demo-library'), ), ); $items = hester_array_insert($items, $demo, 'changelog', 'before'); return $items; } } /** * The function which returns the one Hester_Demo_Library_Page instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function hester_demo_library_page() { return Hester_Demo_Library_Page::instance(); } hester_demo_library_page(); core/admin/demo-library/class-hester-demo-importer.php000064400000057627147600374750017077 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Demo Importer Class. * * @since 1.0.0 * @package Hester Core */ final class Hester_Demo_Importer { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Demo ID. * * @since 1.0.0 * @var string */ public $demo_id; /** * Upload folder URI. * * @since 1.0.0 * @var string */ public $demo_upload_uri; /** * Upload folder path. * * @since 1.0.0 * @var string */ public $demo_upload_path; /** * Remote path. * * @since 1.0.0 * @var string */ public $remote = 'https://assets.peregrine-themes.com/demos/'; /** * Main Hester Demo Importer Instance. * * @since 1.0.0 * @return Hester_Demo_Importer */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Demo_Importer ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { // Main importer function. add_action( 'wp_ajax_hester_core_import_step', array( $this, 'import_demo_step' ) ); // Remap WPForms IDs. add_filter( 'wp_import_post_data_raw', array( $this, 'map_wpforms_ids' ) ); } /** * The main importer function. * * @access public * @since 1.0.0 */ public function import_demo_step() { $hester_nonce = hester_core()->theme_name . '_nonce'; // Nonce check. check_ajax_referer( $hester_nonce ); // Permission check. if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( esc_html__( 'You do not have permission to import a demo.', 'hester-core' ), 'import_error' ); } // Current import step. $import_step = isset( $_POST['import_step'] ) ? sanitize_text_field( wp_unslash( $_POST['import_step'] ) ) : ''; if ( empty( $import_step ) ) { wp_send_json_error( esc_html__( 'Import step not specified.', 'hester-core' ), 'import_error' ); } if ( ! method_exists( $this, $import_step ) ) { /* translators: %s is import step. */ wp_send_json_error( sprintf( esc_html__( 'Missing import step function: %s', 'hester-core' ), $import_step ), 'import_error' ); } // Setup demo import data. $this->before_import_step(); $args = array(); if ( 'import_content' === $import_step ) { $args = array( // should we import attachments? isset( $_POST['attachments'] ) ? (bool) $_POST['attachments'] : false, ); } // Call import step function. $response = call_user_func_array( array( $this, $import_step ), $args ); // Check for errors. if ( is_wp_error( $response ) ) { wp_send_json_error( $response->get_error_message(), $response->get_error_code() ); } // Finished step. wp_send_json_success(); } /** * Set up demo data. * * @access public * @since 1.0.0 */ private function before_import_step() { $hester_nonce = hester_core()->theme_name . '_nonce'; // Nonce check. check_ajax_referer( $hester_nonce ); // Demo ID required. if ( ! isset( $_POST['demo_id'] ) ) { wp_send_json_error( __( 'Missing Demo ID', 'hester-core' ), 'import_error' ); } // Set up variables. $demo_id = sanitize_text_field( wp_unslash( $_POST['demo_id'] ) ); $config = $this->configure_paths( $demo_id ); if ( is_wp_error( $config ) ) { wp_send_json_error( $config->get_error_message(), 'import_error' ); } // Increase PHP limits. if ( function_exists( 'ini_get' ) ) { if ( 300 > ini_get( 'max_execution_time' ) ) { @ini_set( 'max_execution_time', 300 ); // phpcs:ignore WordPress.PHP.IniSet.max_execution_time_Blacklisted } if ( 512 > intval( ini_get( 'memory_limit' ) ) ) { @ini_set( 'memory_limit', '512M' ); // phpcs:ignore WordPress.PHP.IniSet.memory_limit_Blacklisted } } } /** * Demo import started. * * @since 1.0.0 */ public function import_started() { do_action( 'hester_core_demo_import_start' ); } /** * Demo import completed. * * @since 1.0.0 */ public function import_completed() { do_action( 'hester_core_demo_import_end' ); } /** * Main customizer importer method. * * @since 1.0.0 */ public function import_customizer() { // Check if helper class exists. if ( ! class_exists( 'Hester_Customizer_Import_Export' ) ) { $class_customizer_import = plugin_dir_path( __FILE__ ) . 'importers/class-customizer-import-export.php'; if ( file_exists( $class_customizer_import ) ) { require_once $class_customizer_import; } else { return new WP_Error( 'error', esc_html__( 'Can not retrieve class-customizer-import-export.php', 'hester-core' ) ); } } // Get contents to import. $content = $this->get_import_file_contents( 'customizer.json' ); // Check for errors. if ( is_wp_error( $content ) ) { return $content; } // Decode data. $content = json_decode( $content, true ); // Import Customizer data. Hester_Customizer_Import_Export::import( $content ); } public function get_import_file_contents( $filename, $zip = false ) { $filepath = $this->demo_upload_path . $filename; // Check if file is older than 1 hour and delete to redownload. if ( file_exists( $filepath ) && ( time() - filemtime( $filepath ) > 60 * 60 ) ) { wp_delete_file( $filepath ); } if ( true === $zip && file_exists( $filepath . '.zip' ) && ( time() - filemtime( $filepath . '.zip' ) > 60 * 60 ) ) { wp_delete_file( $filepath . '.zip' ); } // Check if we need to download the import file. if ( ! file_exists( $filepath ) ) { if ( true === $zip ) { // Check if we need to download the zipped import file. if ( ! file_exists( $filepath . '.zip' ) ) { // Download file. $zip = $this->download_file( $filename . '.zip' ); // Check for errors. if ( is_wp_error( $zip ) ) { return $zip; } elseif ( ! file_exists( $zip ) ) { /* translators: %s is import file name. */ return new WP_Error( 'error', sprintf( esc_html__( 'Import file “%s” not found.', 'hester-core' ), $filename . '.zip' ) ); } } // Unzip the archive. $unzip = $this->unzip_file( $filepath . '.zip', dirname( $filepath ) ); // Check for errors. if ( is_wp_error( $unzip ) ) { return $unzip; } } else { // Download file. $filepath = $this->download_file( $filename ); } if ( is_wp_error( $filepath ) ) { return $filepath; } elseif ( ! file_exists( $filepath ) ) { /* translators: %s is import file name. */ return new WP_Error( 'error', sprintf( esc_html__( 'Import file “%s” not found.', 'hester-core' ), $filename ) ); } } global $wp_filesystem; // Check if the the global filesystem isn't setup yet. if ( is_null( $wp_filesystem ) ) { WP_Filesystem(); } // Get file contents. $content = $wp_filesystem->get_contents( $filepath ); if ( ! $content ) { /* translators: %s is import file name. */ return new WP_Error( 'error', sprintf( esc_html__( 'Import file “%s” is empty.', 'hester-core' ), $filename ) ); } return $content; } /** * Main content importer method. * * @access public * @since 1.0.0 */ public function import_content( $attachments = false ) { $filename = 'content.xml'; $filepath = $this->demo_upload_path . $filename; // Get contents to import. $content = $this->get_import_file_contents( $filename, true ); // Check for errors. if ( is_wp_error( $content ) ) { return $content; } // Before content import. $this->before_content_import(); // Start import. $import = $this->process_import_content( $filepath, $attachments ); if ( is_wp_error( $import ) ) { return $import; } // After content import. $this->after_content_import(); } /** * Main widgets importer method. * * @since 1.0.0 */ public function import_widgets() { // Check if helper class exists. if ( ! class_exists( 'Hester_Widgets_Import_Export' ) ) { $class_widgets_import = plugin_dir_path( __FILE__ ) . 'importers/class-widgets-import-export.php'; if ( file_exists( $class_widgets_import ) ) { require_once $class_widgets_import; } else { return new WP_Error( 'error', esc_html__( 'Can not retrieve class-widgets-import-export.php', 'hester-core' ) ); } } // Get contents to import. $content = $this->get_import_file_contents( 'widgets.json' ); // Check for errors. if ( is_wp_error( $content ) ) { return $content; } // Decode data. $content = json_decode( $content, true ); // Import widgets data. $results = Hester_Widgets_Import_Export::import( $content ); } /** * Import XML. * * @since 1.0.0 * @param string $xml_file Path to XML file. * @param bool $fetch_attachments Download attachments. */ public function process_import_content( $xml_file, $fetch_attachments = false ) { // Make sure importers constant is defined. if ( ! defined( 'WP_LOAD_IMPORTERS' ) ) { define( 'WP_LOAD_IMPORTERS', true ); } // Import file location. $import_file = ABSPATH . 'wp-admin/includes/import.php'; // Include import file. if ( ! file_exists( $import_file ) ) { return; } // Include import file. require_once $import_file; // Define error var. $importer_error = false; if ( ! class_exists( 'WP_Importer' ) ) { $class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php'; if ( file_exists( $class_wp_importer ) ) { require_once $class_wp_importer; } else { $importer_error = __( 'Can not retrieve class-wp-importer.php', 'hester-core' ); } } if ( ! class_exists( 'Hester_Core_WP_Import' ) ) { $class_wp_import = plugin_dir_path( __FILE__ ) . 'importers/class-wordpress-importer.php'; if ( file_exists( $class_wp_import ) ) { require_once $class_wp_import; } else { $importer_error = __( 'Can not retrieve wordpress-importer.php', 'hester-core' ); } } $result = false; // Display error. if ( $importer_error ) { return new WP_Error( 'xml_import_error', $importer_error ); } else { // No error, lets import things... if ( ! is_file( $xml_file ) ) { $importer_error = __( 'Sample data file appears corrupt or can not be accessed.', 'hester-core' ); return new WP_Error( 'xml_import_error', $importer_error ); } else { $importer = new Hester_Core_WP_Import(); $importer->fetch_attachments = $fetch_attachments; ob_start(); $importer->import( $xml_file ); $result = ob_get_clean(); } } return $result; } /** * Before Import XML. * * @since 1.0.0 */ private function before_content_import() { // Delete the default post and page. $sample_page = get_page_by_path( 'sample-page', OBJECT, 'page' ); $hello_world_post = get_page_by_path( 'hello-world', OBJECT, 'post' ); if ( ! is_null( $sample_page ) ) { wp_delete_post( $sample_page->ID, true ); } if ( ! is_null( $hello_world_post ) ) { wp_delete_post( $hello_world_post->ID, true ); } // File to import. $filename = 'options.json'; $filepath = $this->demo_upload_path . $filename; // Check if we need to download the import file. if ( ! file_exists( $filepath ) ) { $filepath = $this->download_file( $filename ); if ( is_wp_error( $filepath ) ) { wp_send_json_error( esc_html__( 'Options import failed.', 'hester-core' ) . ' ' . $filepath->get_error_message(), 'options_import_error' ); } elseif ( ! file_exists( $filepath ) ) { /* translators: %s is import file name. */ wp_send_json_error( sprintf( esc_html__( 'Options import failed. Import file “%s” not found.', 'hester-core' ), $filename ), 'options_import_error' ); } } global $wp_filesystem; // Check if the the global filesystem isn't setup yet. if ( is_null( $wp_filesystem ) ) { WP_Filesystem(); } // Get file contents. $content = $wp_filesystem->get_contents( $filepath ); if ( ! $content ) { wp_send_json_error( esc_html__( 'Options empty.', 'hester-core' ), 'options_import_error' ); } // Check if helper class exists. if ( ! class_exists( 'Hester_Options_Import_Export' ) ) { $class_options_import = plugin_dir_path( __FILE__ ) . 'importers/class-options-import-export.php'; if ( file_exists( $class_options_import ) ) { require_once $class_options_import; } else { wp_send_json_error( esc_html__( 'Can not retrieve class-options-import-export.php', 'hester-core' ), 'options_import_error' ); } } // Decode data. $content = json_decode( $content, true ); if ( isset( $content['menus'] ) && ! empty( $content['menus'] ) ) { foreach ( $content['menus'] as $slug => $name ) { wp_delete_nav_menu( $slug ); } } } /** * After Import XML. * * @since 1.0.0 */ private function after_content_import() { } /** * Import site options. * * @since 1.0.0 */ public function import_options() { // Check if helper class exists. if ( ! class_exists( 'Hester_Options_Import_Export' ) ) { $class_options_import = plugin_dir_path( __FILE__ ) . 'importers/class-options-import-export.php'; if ( file_exists( $class_options_import ) ) { require_once $class_options_import; } else { return new WP_Error( 'error', esc_html__( 'Can not retrieve class-options-import-export.php', 'hester-core' ) ); } } // Get contents to import. $content = $this->get_import_file_contents( 'options.json' ); // Check for errors. if ( is_wp_error( $content ) ) { return $content; } // Decode data. $content = json_decode( $content, true ); // Import options data. $results = Hester_Options_Import_Export::instance()->import( $content ); // Generate Dynamic styles. $hester_dynamic_styles = hester_core()->theme_name . '_dynamic_styles'; if ( function_exists( $hester_dynamic_styles ) ) { $hester_dynamic_styles()->update_dynamic_file(); } } /** * Import WPForms. * * @access public * @since 1.0.0 */ public function import_wpforms() { // Get contents to import. $content = $this->get_import_file_contents( 'wpforms.json' ); // Check for errors. if ( is_wp_error( $content ) ) { return $content; } // Decode data. $forms = json_decode( $content, true ); if ( ! empty( $forms ) ) { $ids = array(); foreach ( $forms as $form ) { $title = ! empty( $form['settings']['form_title'] ) ? $form['settings']['form_title'] : ''; $desc = ! empty( $form['settings']['form_desc'] ) ? $form['settings']['form_desc'] : ''; $new_id = post_exists( $title ); if ( ! $new_id ) { $new_id = wp_insert_post( array( 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'wpforms', 'post_excerpt' => $desc, ) ); } if ( $new_id ) { $ids[ $form['id'] ] = $new_id; $form['id'] = $new_id; wp_update_post( array( 'ID' => $new_id, 'post_content' => empty( $form ) ? false : wp_slash( wp_json_encode( $form ) ), ) ); } } update_option( 'hester_wpforms_imported_ids', $ids ); } } /** * Download file from remote. * * @since 1.0.0 * * @param string $filename File name to download. * @param array $args { * Optional. * * @type string $demo_id Demo ID. Used to create folder name. * @type string $path Path to the folder where the file will be downloaded. * @type string $remote Remote URL to the folder where the file is located. * } */ private function download_file( $filename, $args = array() ) { // Default args. $defaults = array( 'demo_id' => $this->demo_id, 'path' => $this->demo_upload_path, 'remote' => $this->remote, ); $args = wp_parse_args( $args, $defaults ); // Build filepath. $filepath = $args['path'] . $filename; if ( ! file_exists( $filepath ) || 0 === filesize( $filepath ) ) { // Download file. $download_url = trailingslashit( $args['remote'] ) . $args['demo_id'] . '/' . $filename; return $this->download( $download_url, $filepath ); } // Return filepath. return $filepath; } public function download( $from, $to ) { $content = $this->get_remote_file_content( $from ); if ( ! empty( $content ) ) { // Gives us access to the download_url() and wp_handle_sideload() functions. require_once ABSPATH . 'wp-admin/includes/file.php'; global $wp_filesystem; // Check if the the global filesystem isn't setup yet. if ( is_null( $wp_filesystem ) ) { WP_Filesystem(); } // Make sure path exists. if ( ! file_exists( dirname( $to ) ) ) { wp_mkdir_p( dirname( $to ) ); } if ( $wp_filesystem->put_contents( $to, $content ) ) { return $to; } } return new WP_Error( 'error', sprintf( /* translators: %1$s is remote file name */ __( 'Could not download remote file: %1$s', 'hester-core' ), $from ) ); } /** * Return contents of a remote file. * * @since 1.0.0 * * @param string $remote Full path and filename of a remote file. */ private function get_remote_file_content( $remote ) { // Request remote file content. $response = wp_remote_get( $remote, array( 'timeout' => 300, ) ); // Response code. $code = wp_remote_retrieve_response_code( $response ); if ( 200 !== $code ) { return new WP_Error( 'error', sprintf( /* translators: 1: is remote file name, 2: is error code. */ __( 'Could not download remote file: %1$s. Error code: %2$s', 'hester-core' ), basename( $remote ), $code ) ); } return wp_remote_retrieve_body( $response ); } /** * Unzips a specified ZIP file to a location. * * @since 1.0.0 * * @param string $file Full path and filename of ZIP archive. * @param string $to Full path on the filesystem to extract archive to. */ private function unzip_file( $file, $to ) { // Gives us access to the download_url() and wp_handle_sideload() functions. require_once ABSPATH . 'wp-admin/includes/file.php'; global $wp_filesystem; // Check if the the global filesystem isn't setup yet. if ( is_null( $wp_filesystem ) ) { WP_Filesystem(); } $return = unzip_file( $file, $to ); wp_delete_file( $file ); return $return; } /** * Activate plugin. * * @since 1.0.0 */ public function activate_plugin() { $plugin = array(); if ( isset( $_POST['plugin'], $_POST['plugin']['name'], $_POST['plugin']['slug'] ) ) { $plugin = array( 'name' => sanitize_text_field( wp_unslash( $_POST['plugin']['name'] ) ), 'slug' => sanitize_text_field( wp_unslash( $_POST['plugin']['slug'] ) ), ); } // Validate plugin data. if ( empty( $plugin ) || ! is_array( $plugin ) || ! isset( $plugin['slug'] ) || ! isset( $plugin['name'] ) ) { wp_send_json_error( esc_html__( 'Plugin activation error', 'hester-core' ), 'activate_plugin_error' ); } $hester_plugin_utilities = hester_core()->theme_name . '_plugin_utilities'; // Check if helper class exists. if ( ! function_exists( $hester_plugin_utilities ) ) { wp_send_json_error( esc_html__( 'Hester theme not active', 'hester-core' ), 'activate_plugin_error' ); } // Activate plugin. $response = $hester_plugin_utilities()->activate_plugin( $plugin['slug'] ); return $response; } /** * Downloads an image from the specified URL. * * Taken from the core media_sideload_image() function and * modified to return an array of data instead of html. * * @since 1.0.0 * * @param string $file The image file path. * @return array An array of image data. */ public function sideload_image( $file ) { $data = new stdClass(); if ( ! function_exists( 'media_handle_sideload' ) ) { require_once ABSPATH . 'wp-admin/includes/media.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/image.php'; } if ( ! empty( $file ) ) { // Set variables for storage, fix file filename for query strings. preg_match( '/[^\?]+\.(jpe?g|jpe|svg|gif|png)\b/i', $file, $matches ); $file_array = array(); $file_array['name'] = basename( $matches[0] ); // Download file to temp location. $file_array['tmp_name'] = download_url( $file ); // If error storing temporarily, return the error. if ( is_wp_error( $file_array['tmp_name'] ) ) { return $file_array['tmp_name']; } // Check if image exists in media library to prevent duplicates. $id = $this->media_image_exists( $file_array['name'] ); if ( false === $id ) { // Do the validation and storage stuff. $id = media_handle_sideload( $file_array, 0 ); } // If error storing permanently, unlink. if ( is_wp_error( $id ) ) { unlink( $file_array['tmp_name'] ); return $id; } // Build the object to return. $meta = wp_get_attachment_metadata( $id ); $data->attachment_id = $id; $data->url = wp_get_attachment_url( $id ); $data->thumbnail_url = wp_get_attachment_thumb_url( $id ); $data->height = $meta['height']; $data->width = $meta['width']; } return $data; } /** * Checks to see whether a string is an image url or not. * * @since 1.0.0 * * @param string $string The string to check. * @return bool Whether the string is an image url or not. */ public function is_image_url( $string = '' ) { if ( is_string( $string ) ) { if ( preg_match( '/\.(jpg|jpeg|svg|png|gif)/i', $string ) ) { return true; } } return false; } /** * Checks to see whether a file exists in the uploads folder. * * @since 1.0.0 * * @param string $filename Filename to check. * @return bool Whether the file exists or not. */ public function media_image_exists( $filename ) { $filename = preg_replace( '/[_-]\d+x\d+(?=\.[a-z]{3,4}$)/i', '', $filename ); $filename = pathinfo( $filename, PATHINFO_FILENAME ); $args = array( 'posts_per_page' => 1, 'post_type' => 'attachment', 'name' => trim( $filename ), ); $get_attachment = new WP_Query( $args ); if ( ! $get_attachment || ! isset( $get_attachment->posts, $get_attachment->posts[0] ) ) { return false; } $post = $get_attachment->posts[0]; return $post->ID; } /** * Remap WPForms ids used in shortcodes. * * @since 1.0.0 * * @param WP_Post $post Post object. * @return WP_Post */ public function map_wpforms_ids( $post ) { $imported_ids = get_option( 'hester_wpforms_imported_ids', array() ); if ( ! empty( $imported_ids ) ) { // Replace ID's. foreach ( $imported_ids as $old_id => $new_id ) { $post['post_content'] = str_replace( '[wpforms id="' . $old_id, '[wpforms id="' . $new_id, $post['post_content'] ); $post['post_content'] = str_replace( '

' . esc_html__( 'One of Peregrine Themes needs to be installed and activated in order to use Hester Core plugin.', 'hester-core' ) . ' ' . esc_html__( 'Install & Activate', 'hester-core' ) . '.

'; } /** * Fetch plugins config array from remote server. * * @since 1.0.0 * @param array $plugins Array of recommended plugins. */ public function recommended_plugins( $plugins ) { $remote = get_site_transient( 'hester_check_plugin_update' ); if ( false === $remote ) { $response = wp_remote_get( 'https://peregrine-themes.com/wp-json/api/v1/plugins', array( // 'user-agent' => 'Hester/' . HESTER_THEME_VERSION . ';', 'timeout' => 60, ) ); if ( 200 !== wp_remote_retrieve_response_code( $response ) ) { set_site_transient( 'hester_check_plugin_update', 'error', 60 * 60 * 6 ); return; } $body = wp_remote_retrieve_body( $response ); $plugins = json_decode( $body, true ); set_site_transient( 'hester_check_plugin_update', $plugins, 60 * 60 * 24 * 3 ); } elseif ( 'error' === $remote ) { return $plugins; } else { $plugins = $remote; } return $plugins; } } /** * The function which returns the one Hester_Core_Admin instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function hester_core_admin() { return Hester_Core_Admin::instance(); } hester_core_admin(); core/cli/commands/class-cli-import.php000064400000012116147600374750013755 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Allows import via CLI. * * @version 1.0.0 * @package Hester Core */ class Hester_Core_CLI_Import { /** * Registers the import command. * * @since 1.0.0 */ public static function register_commands() { // Import demo command. WP_CLI::add_command( 'hester import demo', array( 'Hester_Core_CLI_Import', 'import' ), array( 'shortdesc' => __( 'Imports demo content', 'hester-core' ), 'synopsis' => array( array( 'type' => 'positional', 'name' => 'demo-slug', 'description' => 'Sanitized title of the demo to import.', 'optional' => false, 'repeating' => false, ), ), ) ); // Import demo command. WP_CLI::add_command( 'hester import page', array( 'Hester_Core_CLI_Import', 'import_page' ), array( 'shortdesc' => __( 'Imports a demo page', 'hester-core' ), 'synopsis' => array( array( 'type' => 'associative', 'name' => 'xml-file', 'description' => 'Sanitized title of the page to import.', 'optional' => false, 'repeating' => false, ), ), ) ); } /** * Runs Import command. * * @since 1.0.0 */ public static function import( $args, $assoc_args ) { $demo_slug = sanitize_title( $args[0] ); // Load Demo Library class. if ( ! function_exists( 'hester_demo_library' ) ) { $class = HESTER_CORE_PLUGIN_DIR . 'core/admin/demo-library/class-hester-demo-library.php'; if ( file_exists( $class ) ) { require_once $class; } else { WP_CLI::error( 'missing file' ); return; } } $demos = hester_demo_library()->get_templates(); // Check if demo exists. if ( ! array_key_exists( $demo_slug, $demos ) ) { WP_CLI::error_multi_line( array( /* translators: %s Demo Slug */ sprintf( __( '%s demo slug is not valid.', 'hester-core' ), $demo_slug ), ) ); WP_CLI\Utils\format_items( 'table', $demos, array( 'name', 'slug', 'url' ) ); return; } $demo = $demos[ $demo_slug ]; // Install & Activate required plugins. if ( isset( $demo['plugins'] ) && ! empty( $demo['plugins'] ) ) { foreach ( $demo['plugins'] as $plugin ) { WP_CLI::runcommand( 'plugin install ' . $plugin['slug'] ); WP_CLI::runcommand( 'plugin activate ' . $plugin['slug'] ); } } // Configure import paths. $response = hester_demo_importer()->configure_paths( $demo_slug ); if ( is_wp_error( $response ) ) { WP_CLI::error( $response->get_error_message() ); return; } foreach ( self::get_import_steps( $demo ) as $step ) { /* translators: %s import step */ WP_CLI::log( sprintf( __( 'Importing %s...', 'hester-core' ), $step ) ); $args = array(); if ( 'content' === $step ) { $args = array( // should we import attachments? true, ); } // Call import step function. $response = call_user_func_array( array( hester_demo_importer(), 'import_' . $step ), $args ); if ( is_wp_error( $response ) ) { WP_CLI::warning( $response->get_error_message() ); } } WP_CLI::log( sprintf( __( 'Demo import complete.', 'hester-core' ), $step ) ); } /** * Import steps array. * * @since 1.0.0 * * @param array $demo Array of demo details. */ public static function get_import_steps( $demo = '' ) { $steps = array( 'customizer', 'wpforms', 'content', 'widgets', 'options', ); return $steps; } /** * Import a demo page. * * @since 1.0.2 */ public static function import_page( $args, $assoc_args ) { $xml_file = isset( $assoc_args['xml-file'] ) ? $assoc_args['xml-file'] : false; if ( ! $xml_file ) { WP_CLI::error( '--xml-file="" required' ); return; } $attachments = isset( $assoc_args['attachments'] ) ? boolval( $assoc_args['attachments'] ) : true; // Load Demo Library class. if ( ! function_exists( 'hester_demo_importer' ) ) { $class = HESTER_CORE_PLUGIN_DIR . 'core/admin/demo-library/class-hester-demo-importer.php'; if ( file_exists( $class ) ) { require_once $class; } else { WP_CLI::error( 'missing file' ); return; } } if ( ! is_file( $xml_file ) ) { // Get upload dir. $upload_dir = wp_upload_dir(); // Check upload folder permission. if ( ! wp_is_writable( trailingslashit( $upload_dir['basedir'] ) ) ) { WP_CLI::error( __( 'Upload folder not writable.', 'hester-core' ) ); return; } $to = trailingslashit( $upload_dir['basedir'] ) . 'hester/pages/' . basename( $xml_file ); $xml_file = hester_demo_importer()->download( $xml_file, $to ); if ( is_wp_error( $xml_file ) ) { WP_CLI::error( $xml_file->get_error_message() ); return; } } $import = hester_demo_importer()->process_import_content( $xml_file, true ); if ( is_wp_error( $import ) ) { WP_CLI::error( $import->get_error_message() ); return; } WP_CLI::success( __( 'Page imported.', 'hester-core' ) ); } } core/cli/class-hester-core-cli.php000064400000001507147600374750013064 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Core CLI class. */ class Hester_Core_CLI { /** * Load required files and hooks to make the CLI work. * * @since 1.0.0 */ public function __construct() { $this->includes(); $this->hooks(); } /** * Load command files. * * @since 1.0.0 */ private function includes() { require_once dirname( __FILE__ ) . '/commands/class-cli-import.php'; } /** * Sets up and hooks WP CLI to our CLI code. * * @since 1.0.0 */ private function hooks() { WP_CLI::add_hook( 'after_wp_load', 'Hester_Core_CLI_Import::register_commands' ); } } new Hester_Core_CLI(); core/widgets/widgets.php000064400000010626147600374750011343 0ustar00 * @since 1.0.0 */ /** * Do not allow direct script access. */ if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Return list of available widgets. * * @since 1.0.0 */ function hester_core_get_widgets() { $widgets = array( 'hester-core-custom-list-widget' => 'Hester_Core_Custom_List_Widget', 'hester-core-social-links-widget' => 'Hester_Core_Social_Links_Widget', 'hester-core-posts-list-widget' => 'Hester_Core_Posts_List_Widget', ); return apply_filters( 'hester_core_widgets', $widgets ); } /** * Register widgets. * * @since 1.0.0 */ function hester_core_register_widgets() { // Get available widgets. $widgets = hester_core_get_widgets(); if ( empty( $widgets ) ) { return; } // Path to widgets folder. $path = HESTER_CORE_PLUGIN_DIR . 'core/widgets'; // Register widgets. foreach ( $widgets as $key => $value ) { // Include class and register widget. $widget_path = $path . '/class-' . $key . '.php'; if ( file_exists( $widget_path ) ) { require_once $widget_path; register_widget( $value ); } } } add_action( 'widgets_init', 'hester_core_register_widgets' ); /** * Enqueue admin styles. * * @since 1.0.0 */ function hester_core_widgets_enqueue( $page ) { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_enqueue_style( 'hester-admin-widgets-css', HESTER_CORE_PLUGIN_URL . 'assets/css/admin-widgets' . $suffix . '.css', HESTER_CORE_VERSION, true ); wp_enqueue_script( 'hester-admin-widgets-js', HESTER_CORE_PLUGIN_URL . 'assets/js/admin-widgets' . $suffix . '.js', array( 'jquery' ), HESTER_CORE_VERSION, true ); } add_action( 'admin_print_footer_scripts-widgets.php', 'hester_core_widgets_enqueue' ); /** * Enqueue front styles. * * @since 1.0.0 */ function hester_core_enqueue_widget_assets() { $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; $widgets = hester_core_get_widgets(); if ( is_array( $widgets ) ) { foreach ( $widgets as $id_slug => $class ) { if ( is_active_widget( false, false, $id_slug, true ) ) { wp_enqueue_style( 'hester-core-widget-styles', HESTER_CORE_PLUGIN_URL . 'assets/css/widgets' . $suffix . '.css', false, HESTER_CORE_VERSION, 'all' ); } } } } add_action( 'wp_enqueue_scripts', 'hester_core_enqueue_widget_assets' ); /** * Print repeatable template. * * @since 1.0.0 * @return void */ function hester_core_print_widget_templates() { ?> * @since 1.0.0 */ class Hester_Core_Social_Links_Widget extends WP_Widget { /** * Holds widget settings defaults, populated in constructor. * * @since 1.0.0 * @var array */ protected $defaults; /** * Constructor. * * @since 1.0.0 */ public function __construct() { // Widget defaults. $this->defaults = array( 'title' => '', 'nav_menu' => '', 'style' => '', 'align' => '', 'size' => 'hester-standard', ); // Widget Slug. $widget_slug = 'hester-core-social-links-widget'; // Widget basics. $widget_ops = array( 'classname' => $widget_slug, 'description' => _x( 'Displays a list of social icon links.', 'Widget', 'hester-core' ), ); // Widget controls. $control_ops = array( 'id_base' => $widget_slug, ); // Load widget. parent::__construct( $widget_slug, _x( '[Hester] Social Links', 'Widget', 'hester-core' ), $widget_ops, $control_ops ); } /** * Outputs the HTML for this widget. * * @since 1.0.0 * @param array $args An array of standard parameters for widgets in this theme. * @param array $instance An array of settings for this widget instance. */ public function widget( $args, $instance ) { // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); echo wp_kses_post( $args['before_widget'] ); do_action( 'hester_before_social_links_widget', $instance ); // Title. if ( ! empty( $instance['title'] ) ) { echo wp_kses_post( $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'] ); } // Widget content goes here. $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; if ( $nav_menu && is_nav_menu( $nav_menu ) ) { $nav_menu_args = array( 'menu' => $nav_menu, 'style' => $instance['style'], 'align' => $instance['align'], 'size' => $instance['size'], ); $nav_menu_args = apply_filters( 'hester_social_links_widget_nav_menu_args', $nav_menu_args, $nav_menu, $args, $instance ); $hester_social_links = hester_core()->theme_name . '_social_links'; $hester_social_links( $nav_menu_args ); } do_action( 'hester_after_social_links_widget', $instance ); echo wp_kses_post( $args['after_widget'] ); } /** * Deals with the settings when they are saved by the admin. Here is * where any validation should be dealt with. * * @since 1.0.0 * @param array $new_instance An array of new settings as submitted by the admin. * @param array $old_instance An array of the previous settings. * @return array The validated and (if necessary) amended settings */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ! empty( $new_instance['title'] ) ? wp_strip_all_tags( $new_instance['title'] ) : ''; $instance['nav_menu'] = ! empty( $new_instance['nav_menu'] ) ? sanitize_text_field( $new_instance['nav_menu'] ) : ''; $instance['style'] = ! empty( $new_instance['style'] ) ? sanitize_text_field( $new_instance['style'] ) : ''; $instance['align'] = ! empty( $new_instance['align'] ) ? sanitize_text_field( $new_instance['align'] ) : ''; $instance['size'] = ! empty( $new_instance['size'] ) ? sanitize_text_field( $new_instance['size'] ) : ''; return $instance; } /** * Displays the form for this widget on the Widgets page of the WP Admin area. * * @since 1.0.0 * @param array $instance An array of the current settings for this widget. * @return void */ public function form( $instance ) { global $wp_customize; // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); $menus = wp_get_nav_menus(); ?> * @since 1.0.0 */ class Hester_Core_Posts_List_Widget extends WP_Widget { /** * Holds widget settings defaults, populated in constructor. * * @since 1.0.0 * @var array */ protected $defaults; /** * Constructor. * * @since 1.0.0 */ public function __construct() { // Widget defaults. $this->defaults = array( 'title' => '', 'number' => 5, 'show_category' => false, 'show_thumb' => true, 'show_date' => true, 'orderby' => 'date', ); // Widget Slug. $widget_slug = 'hester-core-posts-list-widget'; // Widget basics. $widget_ops = array( 'classname' => $widget_slug, 'description' => _x( 'Displays a configurable list of your site’s posts.', 'Widget', 'hester-core' ), ); // Widget controls. $control_ops = array( 'id_base' => $widget_slug, ); // Load widget. parent::__construct( $widget_slug, _x( '[Hester] Posts List', 'Widget', 'hester-core' ), $widget_ops, $control_ops ); // Hook into dynamic styles. add_filter( 'hester_dynamic_styles', array( $this, 'dynamic_styles' ) ); } /** * Outputs the HTML for this widget. * * @since 1.0.0 * @param array $args An array of standard parameters for widgets in this theme. * @param array $instance An array of settings for this widget instance. */ public function widget( $args, $instance ) { // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); echo wp_kses_post( $args['before_widget'] ); do_action( 'hester_before_posts_list_widget', $instance ); // Title. if ( ! empty( $instance['title'] ) ) { echo wp_kses_post( $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'] ); } $query_args = array( 'posts_per_page' => $instance['number'], 'post_type' => 'post', 'status' => 'publish', 'orderby' => $instance['orderby'], 'order' => 'DESC', 'ignore_sticky_posts' => true, ); $query_args = apply_filters( 'hester_core_widget_posts_list_query_args', $query_args, $args, $instance ); $posts = new WP_Query( $query_args ); $theme_name = hester_core()->theme_name; if ( $posts->have_posts() ) : echo '
'; while ( $posts->have_posts() ) : $posts->the_post(); $posts_count = wp_count_posts( 'post' )->publish; echo '
'; if ( $instance['show_thumb'] ) { $hester_get_post_thumbnail = $theme_name . '_get_post_thumbnail'; $post_thumbnail = $hester_get_post_thumbnail( get_the_ID(), array( 75, 75 ), true ); $post_thumbnail = apply_filters( 'hester_core_opsts_list_widget_thumbnail', $post_thumbnail, get_the_ID() ); if ( ! empty( $post_thumbnail ) ) { $hester_get_allowed_html_tags = $theme_name . '_get_allowed_html_tags'; //echo ''; echo ''; } } echo '
'; if ( $instance['show_category'] ) { /*$category_icon = hester()->icons->get_svg( 'bookmark' ); wp_kses( $category_icon, hester_get_allowed_html_tags( 'svg' ) )*/ $hester_entry_meta_category = $theme_name . '_entry_meta_category'; echo '
' . $hester_entry_meta_category( ', ', true, true ) . '
'; } echo ''; $post_meta = ''; $hester_get_allowed_html_tags = hester_core()->theme_name . '_get_allowed_html_tags'; if ( $instance['show_date'] ) { $hester_function = hester_core()->theme_name; $date_icon = $hester_function()->icons->get_svg( 'clock' ); $post_meta .= '' . wp_kses( $date_icon, $hester_get_allowed_html_tags( 'svg' ) ) . get_the_time( get_option( 'date_format' ) ) . ''; } $post_meta = apply_filters( 'hester_core_posts_list_widget_meta', $post_meta, get_the_ID() ); if ( ! empty( $post_meta ) ) { echo '
' . wp_kses( $post_meta, $hester_get_allowed_html_tags() ) . '
'; } echo '
'; echo '
'; endwhile; echo '
'; wp_reset_postdata(); endif; do_action( 'hester_after_posts_list_widget', $instance ); echo wp_kses_post( $args['after_widget'] ); } /** * Deals with the settings when they are saved by the admin. Here is * where any validation should be dealt with. * * @since 1.0.0 * @param array $new_instance An array of new settings as submitted by the admin. * @param array $old_instance An array of the previous settings. * @return array The validated and (if necessary) amended settings */ public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ! empty( $new_instance['title'] ) ? wp_strip_all_tags( $new_instance['title'] ) : ''; $instance['number'] = ! empty( $new_instance['number'] ) ? intval( $new_instance['number'] ) : 3; $instance['show_category'] = ! empty( $new_instance['show_category'] ) ? true : false; $instance['show_thumb'] = ! empty( $new_instance['show_thumb'] ) ? true : false; $instance['show_date'] = ! empty( $new_instance['show_date'] ) ? true : false; $instance['orderby'] = ! empty( $new_instance['orderby'] ) ? sanitize_text_field( $new_instance['orderby'] ) : 'date'; return $instance; } /** * Displays the form for this widget on the Widgets page of the WP Admin area. * * @since 1.0.0 * @param array $instance An array of the current settings for this widget. * @return void */ public function form( $instance ) { // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); ?>

>
>
>

'http://docs.peregrine-themes.com/' ) ); } ?>
* @since 1.0.0 */ class Hester_Core_Custom_List_Widget extends WP_Widget { /** * Holds widget settings defaults, populated in constructor. * * @since 1.0.0 * @var array */ protected $defaults; /** * Constructor. * * @since 1.0.0 */ function __construct() { // Widget defaults. $this->defaults = array( 'title' => '', 'content' => '', 'items' => array(), ); // Widget Slug. $widget_slug = 'hester-core-custom-list-widget'; // Widget basics. $widget_ops = array( 'classname' => $widget_slug, 'description' => _x( 'A list of items with optional icon and separator.', 'Widget', 'hester-core' ), ); // Widget controls. $control_ops = array( 'id_base' => $widget_slug, ); // load widget. parent::__construct( $widget_slug, _x( '[Hester] Custom List', 'Widget', 'hester-core' ), $widget_ops, $control_ops ); // Hook into dynamic styles. add_filter( 'hester_dynamic_styles', array( $this, 'dynamic_styles' ) ); } /** * Outputs the HTML for this widget. * * @since 1.0.0 * @param array $args An array of standard parameters for widgets in this theme. * @param array $instance An array of settings for this widget instance. */ function widget( $args, $instance ) { // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); echo wp_kses_post( $args['before_widget'] ); do_action( 'hester_before_custom_list_widget', $instance ); // Title. if ( ! empty( $instance['title'] ) ) { echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title']; } if ( ! empty( $instance['content'] ) ) { $instance['content'] = apply_filters( 'hester_dynamic_strings', $instance['content'] ); echo '
' . wp_kses_post( wpautop( $instance['content'], true ) ) . '
'; } if ( ! empty( $instance['items'] ) ) { echo '
'; foreach ( $instance['items'] as $entry ) { $separator_class = $entry['separator'] ? 'hester-clw-sep ' : ''; echo '
'; if ( $entry['icon'] ) { $entry['icon'] = $this->process_icon( $entry['icon'] ); if ( false !== strpos( $entry['icon'], 'theme_name . '_get_allowed_html_tags'; echo wp_kses( $entry['icon'], $hester_get_allowed_html_tags( 'svg' ) ); } else { echo ''; } } if ( $entry['description'] ) { //echo '' . wp_kses_post( nl2br( $entry['description'] ) ) . ''; echo '' . wp_kses_post( $entry['description'] ) . ''; } echo '
'; } echo '
'; } do_action( 'hester_after_custom_list_widget', $instance ); echo wp_kses_post( $args['after_widget'] ); } /** * Deals with the settings when they are saved by the admin. Here is * where any validation should be dealt with. * * @since 1.0.0 * @param array $new_instance An array of new settings as submitted by the admin. * @param array $old_instance An array of the previous settings. * @return array The validated and (if necessary) amended settings */ function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = wp_strip_all_tags( $new_instance['title'] ); $instance['content'] = isset( $new_instance['content'] ) ? wp_kses_post( $new_instance['content'] ) : ''; $instance['items'] = array(); if ( isset( $new_instance['items'] ) ) { foreach ( $new_instance['items'] as $entry ) { // Sanitize entry values. $new_entry = array( 'icon' => '', 'description' => isset( $entry['description'] ) ? wp_kses_post( trim( $entry['description'] ) ) : '', 'separator' => isset( $entry['separator'] ) && $entry['separator'] ? true : false, ); if ( isset( $entry['icon'] ) ) { $hester_get_allowed_html_tags = hester_core()->theme_name . '_get_allowed_html_tags'; $new_entry['icon'] = wp_kses( $this->process_icon( $entry['icon'] ), $hester_get_allowed_html_tags( 'svg' ) ); } if ( ! empty( $new_entry['icon'] ) || ! empty( $new_entry['description'] ) || true === $new_entry['separator'] ) { $instance['items'][] = $new_entry; } } } return $instance; } /** * Displays the form for this widget on the Widgets page of the WP Admin area. * * @since 1.0.0 * @param array $instance An array of the current settings for this widget. * @return void */ function form( $instance ) { // Merge with defaults. $instance = wp_parse_args( (array) $instance, $this->defaults ); $empty = empty( $instance['items'] ) ? ' empty' : ''; ?>

', '' ) ); ?>

$entry ) { ?>
' . esc_html( wp_trim_words( $entry['description'], 2, '...' ) ) . ''; } ?>

/>

'http://docs.peregrine-themes.com/', ) ); } ?>
theme_name; $svg_icon = $function_name()->icons->get_svg( $_icon ); if ( $svg_icon ) { $icon = $svg_icon; } elseif ( file_exists( HESTER_CORE_PLUGIN_DIR . '/assets/svg/' . $_icon . '.svg' ) ) { $icon = file_get_contents( HESTER_CORE_PLUGIN_DIR . '/assets/svg/' . $_icon . '.svg' ); } } return $icon; } } languages/hester-core.pot000064400000116501147600374750011477 0ustar00# Copyright (C) 2021 Hester Core # This file is distributed under the same license as the Hester Core package. #, fuzzy msgid "" msgstr "" "Project-Id-Version: Hester Core\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Basepath: ..\n" "X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Generator: Poedit 3.0.1\n" "X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPathExcluded-0: *.js\n" #: hester-core.php:189 msgid "Please activate Hester Theme before activating Hester Core." msgstr "" #: core/admin/class-hester-core-admin.php:118 msgid "Hester" msgstr "" #: core/admin/class-hester-core-admin.php:130 msgid "About" msgstr "" #: core/admin/class-hester-core-admin.php:140 msgid "Plugins" msgstr "" #: core/admin/class-hester-core-admin.php:160 msgid "Changelog" msgstr "" #: core/admin/class-hester-core-admin.php:210 msgid "Changelog file not found." msgstr "" #: core/admin/class-hester-core-admin.php:212 msgid "Changelog file not readable." msgstr "" #: core/admin/class-hester-core-admin.php:227 msgid "Hester Core Plugin Changelog" msgstr "" #: core/admin/class-hester-core-admin.php:251 msgid "Hester Theme needs to be installed and activated in order to use Hester Core plugin." msgstr "" #: core/admin/class-hester-core-admin.php:251 msgid "Install & Activate" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:104 #: core/admin/demo-library/class-hester-demo-library.php:255 msgid "You do not have permission to import a demo." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:111 msgid "Import step not specified." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:116 #, php-format msgid "Missing import step function: %s" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:156 msgid "Missing Demo ID" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:212 msgid "Can not retrieve class-customizer-import-export.php" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:260 #: core/admin/demo-library/class-hester-demo-importer.php:281 #, php-format msgid "Import file “%s” not found." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:297 #, php-format msgid "Import file “%s” is empty." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:351 msgid "Can not retrieve class-widgets-import-export.php" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:404 msgid "Can not retrieve class-wp-importer.php" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:415 msgid "Can not retrieve wordpress-importer.php" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:428 msgid "Sample data file appears corrupt or can not be accessed." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:474 msgid "Options import failed." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:477 #, php-format msgid "Options import failed. Import file “%s” not found." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:492 msgid "Options empty." msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:503 #: core/admin/demo-library/class-hester-demo-importer.php:540 msgid "Can not retrieve class-options-import-export.php" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:691 #, php-format msgid "Could not download remote file: %1$s" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:722 #, php-format msgid "Could not download remote file: %1$s. Error code: %2$s" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:777 msgid "Plugin activation error" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:782 msgid "Hester theme not active" msgstr "" #: core/admin/demo-library/class-hester-demo-importer.php:939 #: core/cli/commands/class-cli-import.php:204 msgid "Upload folder not writable." msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:70 #: core/admin/demo-library/class-hester-demo-library-page.php:91 #: core/admin/demo-library/class-hester-demo-library-page.php:383 msgid "Demo Library" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:94 msgid "Filter…" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:98 msgid "Refresh" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:104 msgid "All" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:105 #: themes/hester/hester.php:28 msgid "Blog" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:106 msgid "Shop" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:107 msgid "Agency" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:108 msgid "Business" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:109 msgid "Food" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:113 msgid "Gutenberg" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:114 msgid "Elementor" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:122 msgid "New demos coming soon" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:180 #: core/admin/demo-library/class-hester-demo-library-page.php:215 #: core/admin/demo-library/class-hester-demo-library-page.php:329 #: themes/hester/customizer/settings/settings-extra.php:55 msgid "Upgrade to pro" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:182 msgid "Import" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:182 #: core/admin/demo-library/class-hester-demo-library-page.php:218 #: core/admin/demo-library/class-hester-demo-library-page.php:334 msgid "Import Demo" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:184 #: core/admin/demo-library/class-hester-demo-library-page.php:365 #: core/admin/demo-library/class-hester-demo-library.php:141 msgid "Preview" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:209 msgid "Close" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:210 msgid "Previous" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:211 msgid "Next" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:231 msgid "You are previewing" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:248 msgid "Import Options" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:259 msgid "Import Customizer Settings" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:266 msgid "Import Content" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:267 msgid "Import pages, posts and menus from this demo." msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:274 msgid "Import Media" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:281 msgid "Import Widgets" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:292 msgid "Plugins Used in This Demo" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:309 msgid "Already installed" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:316 msgid "These plugins will be auto-installed for you." msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:343 msgid "Collapse Sidebar" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:345 msgid "Collapse" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:351 msgid "Enter desktop preview mode" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:354 msgid "Enter tablet preview mode" msgstr "" #: core/admin/demo-library/class-hester-demo-library-page.php:357 msgid "Enter mobile preview mode" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:128 msgid "Warning! Demo import process is not complete. Don't close the window until import process is complete. Do you still want to leave the window?" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:129 msgid "Demo import process will start now. Please do not close the window until import process is complete." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:130 msgid "Importing..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:131 msgid "Installing plugin" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:132 msgid "Plugin installed!" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:133 msgid "Activating plugin" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:134 msgid "Plugin activated! " msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:135 msgid "All Done! Visit Site" msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:136 msgid "Importing Customizer..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:137 msgid "Importing Content..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:138 msgid "Importing WPForms..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:139 msgid "Importing Options..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:140 msgid "Importing Widgets..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:142 msgid "Preparing Data..." msgstr "" #: core/admin/demo-library/class-hester-demo-library.php:143 msgid "No results found" msgstr "" #: core/admin/demo-library/importers/class-customizer-import-export.php:64 #: core/admin/demo-library/importers/class-options-import-export.php:64 #: core/admin/demo-library/importers/class-widgets-import-export.php:66 msgid "Import data could not be read. Please try a different file." msgstr "" #: core/admin/demo-library/importers/class-parsers.php:48 #: core/admin/demo-library/importers/class-parsers.php:78 #: core/admin/demo-library/importers/class-parsers.php:86 msgid "There was an error when reading this WXR file" msgstr "" #: core/admin/demo-library/importers/class-parsers.php:49 msgid "Details are shown above. The importer will now try again with a different parser..." msgstr "" #: core/admin/demo-library/importers/class-parsers.php:91 #: core/admin/demo-library/importers/class-parsers.php:97 #: core/admin/demo-library/importers/class-parsers.php:357 #: core/admin/demo-library/importers/class-parsers.php:587 msgid "This does not appear to be a WXR file, missing/invalid WXR version number" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:105 msgid "Widget area does not exist in theme (using Inactive)" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:128 msgid "Site does not support widget" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:212 msgid "Widget already exists" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:289 msgid "Imported" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:292 msgid "Imported to Inactive" msgstr "" #: core/admin/demo-library/importers/class-widgets-import-export.php:298 msgid "No Title" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:134 #: core/admin/demo-library/importers/class-wordpress-importer.php:143 #: core/admin/demo-library/importers/class-wordpress-importer.php:195 #: core/admin/demo-library/importers/class-wordpress-importer.php:199 #: core/admin/demo-library/importers/class-wordpress-importer.php:208 msgid "Sorry, there has been an error." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:135 msgid "The file does not exist, please try again." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:179 msgid "All done." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:179 msgid "Have fun!" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:180 msgid "Remember to update the passwords and roles of imported users." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:200 #, php-format msgid "The export file could not be found at %s. It is likely that this was caused by a permissions problem." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:216 #, php-format msgid "This WXR file (version %s) may not be supported by this version of the importer. Please consider updating." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:241 #, php-format msgid "Failed to import author %s. Their posts will be attributed to the current user." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:267 msgid "Assign Authors" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:268 msgid "To make it easier for you to edit and save the imported content, you may want to reassign the author of the imported item to an existing user of this site. For example, you may want to import all the entries as admins entries." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:270 #, php-format msgid "If a new user is created by WordPress, a new password will be randomly generated and the new user’s role will be set as %s. Manually changing the new user’s details will be necessary." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:280 msgid "Import Attachments" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:283 msgid "Download and import file attachments" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:287 msgid "Submit" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:300 msgid "Import author:" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:311 msgid "or create new user with login name:" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:314 msgid "as a new user:" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:322 msgid "assign posts to an existing user:" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:324 msgid "or assign posts to an existing user:" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:325 msgid "- Select -" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:375 #, php-format msgid "Failed to create new user for %s. Their posts will be attributed to the current user." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:427 #, php-format msgid "Failed to import category %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:470 #, php-format msgid "Failed to import post tag %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:519 #: core/admin/demo-library/importers/class-wordpress-importer.php:741 #, php-format msgid "Failed to import %s %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:608 #, php-format msgid "Failed to import “%s”: Invalid post type %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:645 #, php-format msgid "%s “%s” already exists." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:707 #, php-format msgid "Failed to import %s “%s”" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:873 msgid "Menu item skipped due to missing menu slug" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:880 #, php-format msgid "Menu item skipped due to invalid menu slug: %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:947 msgid "Fetching attachments is not enabled" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:960 msgid "Invalid file type" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1010 msgid "Remote server did not respond" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1018 #, php-format msgid "Remote server returned error response %1$d %2$s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1025 msgid "Remote file is incorrect size" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1030 msgid "Zero size file downloaded" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1036 #, php-format msgid "Remote file is too large, limit is %s" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1136 msgid "Import WordPress" msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1143 #, php-format msgid "A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1158 msgid "Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site." msgstr "" #: core/admin/demo-library/importers/class-wordpress-importer.php:1159 msgid "Choose a WXR (.xml) file to upload, then click Upload file and import." msgstr "" #: core/cli/commands/class-cli-import.php:35 msgid "Imports demo content" msgstr "" #: core/cli/commands/class-cli-import.php:53 msgid "Imports a demo page" msgstr "" #: core/cli/commands/class-cli-import.php:97 #, php-format msgid "%s demo slug is not valid." msgstr "" #: core/cli/commands/class-cli-import.php:126 #, php-format msgid "Importing %s..." msgstr "" #: core/cli/commands/class-cli-import.php:145 msgid "Demo import complete." msgstr "" #: core/cli/commands/class-cli-import.php:225 msgid "Page imported." msgstr "" #: themes/hester/customizer/default.php:56 msgid "Make a Website" msgstr "" #: themes/hester/customizer/default.php:57 #: themes/hester/customizer/default.php:60 msgid "#" msgstr "" #: themes/hester/customizer/default.php:59 msgid "Download" msgstr "" #: themes/hester/customizer/default.php:83 msgid "Multipurpose Theme" msgstr "" #: themes/hester/customizer/default.php:91 msgid "eCommerce Ready" msgstr "" #: themes/hester/customizer/default.php:99 msgid "Elementor Ready" msgstr "" #: themes/hester/customizer/default.php:107 msgid "Much More" msgstr "" #: themes/hester/customizer/default.php:135 msgid "SERVICES" msgstr "" #: themes/hester/customizer/default.php:136 msgid "What We Offer" msgstr "" #: themes/hester/customizer/default.php:137 #: themes/hester/customizer/default.php:245 #: themes/hester/customizer/default.php:253 msgid "Lorem ipsum dolor sit amet, consectetuer adipiscing elit ui enean et commodo ligula eget dolorenean massa quam felis ultricies nec elit ligula." msgstr "" #: themes/hester/customizer/default.php:144 msgid "Website Designing" msgstr "" #: themes/hester/customizer/default.php:145 #: themes/hester/customizer/default.php:154 #: themes/hester/customizer/default.php:163 msgid "Dolores sit ipsum velit purus aliquet, massa fringilla leo orci sit ipsum euelit amet magnis." msgstr "" #: themes/hester/customizer/default.php:153 msgid "SEO Optimization" msgstr "" #: themes/hester/customizer/default.php:162 msgid "Lifetime Updates" msgstr "" #: themes/hester/customizer/default.php:181 msgid "WHY CHOOSE US" msgstr "" #: themes/hester/customizer/default.php:182 msgid "Our Features" msgstr "" #: themes/hester/customizer/default.php:183 msgid "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim." msgstr "" #: themes/hester/customizer/default.php:190 msgid "Market Research" msgstr "" #: themes/hester/customizer/default.php:197 msgid "Content Writing" msgstr "" #: themes/hester/customizer/default.php:204 msgid "Keyword Analysis" msgstr "" #: themes/hester/customizer/default.php:211 msgid "24/7 Support" msgstr "" #: themes/hester/customizer/default.php:243 msgid "OUR BLOGS" msgstr "" #: themes/hester/customizer/default.php:244 msgid "Latest News" msgstr "" #: themes/hester/customizer/default.php:251 msgid "OUR PRODUCTS" msgstr "" #: themes/hester/customizer/default.php:252 msgid "Latest Products" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:7 msgid "Blog Section" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:20 msgid "Enable Blog section" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:37 #: themes/hester/customizer/settings/settings-features.php:37 #: themes/hester/customizer/settings/settings-info.php:50 #: themes/hester/customizer/settings/settings-products.php:70 #: themes/hester/customizer/settings/settings-services.php:30 msgid "Section Sub Heading" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:54 #: themes/hester/customizer/settings/settings-features.php:54 #: themes/hester/customizer/settings/settings-info.php:72 #: themes/hester/customizer/settings/settings-products.php:87 #: themes/hester/customizer/settings/settings-services.php:47 msgid "Section Heading" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:79 #: themes/hester/customizer/settings/settings-features.php:78 #: themes/hester/customizer/settings/settings-info.php:102 #: themes/hester/customizer/settings/settings-products.php:112 #: themes/hester/customizer/settings/settings-services.php:72 msgid "Section Description" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:98 msgid "Post Settings" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:116 msgid "Post Number" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:117 msgid "Set the number of visible posts." msgstr "" #: themes/hester/customizer/settings/settings-blog.php:144 msgid "Category" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:145 msgid "Display posts from selected category only. Leave empty to include all." msgstr "" #: themes/hester/customizer/settings/settings-blog.php:169 #: themes/hester/customizer/settings/settings-info.php:124 #: themes/hester/customizer/settings/settings-services.php:89 msgid "Columns" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:172 #: themes/hester/customizer/settings/settings-info.php:127 #: themes/hester/customizer/settings/settings-services.php:92 msgid "Auto columns" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:173 #: themes/hester/customizer/settings/settings-info.php:128 #: themes/hester/customizer/settings/settings-services.php:93 msgid "2 columns" msgstr "" #: themes/hester/customizer/settings/settings-blog.php:174 #: themes/hester/customizer/settings/settings-info.php:129 #: themes/hester/customizer/settings/settings-services.php:94 msgid "3 columns" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:7 msgid "Extra section" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:20 msgid "Enable Extra section" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:33 msgid "Select a page" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:34 msgid "Page" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:35 msgid "Select a page to display content from in Extra section." msgstr "" #: themes/hester/customizer/settings/settings-extra.php:48 msgid "Background color and font color options" msgstr "" #: themes/hester/customizer/settings/settings-extra.php:49 msgid "Manage Top/Bottom Spacing" msgstr "" #: themes/hester/customizer/settings/settings-features.php:7 msgid "Feature section" msgstr "" #: themes/hester/customizer/settings/settings-features.php:20 msgid "Enable Feature section" msgstr "" #: themes/hester/customizer/settings/settings-features.php:95 msgid "Features" msgstr "" #: themes/hester/customizer/settings/settings-features.php:97 msgid "Feature" msgstr "" #: themes/hester/customizer/settings/settings-features.php:100 #: themes/hester/customizer/settings/settings-info.php:152 #: themes/hester/customizer/settings/settings-services.php:116 #: themes/hester/customizer/settings/settings-slider.php:57 msgid "[live_title]" msgstr "" #: themes/hester/customizer/settings/settings-features.php:101 msgid "Add new Feature" msgstr "" #: themes/hester/customizer/settings/settings-features.php:103 msgid "Upgrade to Hester Pro to be able to add more items and unlock other premium features!" msgstr "" #: themes/hester/customizer/settings/settings-features.php:107 #: themes/hester/customizer/settings/settings-info.php:159 #: themes/hester/customizer/settings/settings-services.php:123 msgid "Icon" msgstr "" #: themes/hester/customizer/settings/settings-features.php:111 #: themes/hester/customizer/settings/settings-info.php:163 #: themes/hester/customizer/settings/settings-services.php:127 msgid "Title" msgstr "" #: themes/hester/customizer/settings/settings-features.php:115 #: themes/hester/customizer/settings/settings-info.php:168 #: themes/hester/customizer/settings/settings-services.php:132 #: themes/hester/customizer/settings/settings-slider.php:94 msgid "Description" msgstr "" #: themes/hester/customizer/settings/settings-features.php:119 #: themes/hester/customizer/settings/settings-info.php:173 #: themes/hester/customizer/settings/settings-services.php:137 msgid "Add Link?" msgstr "" #: themes/hester/customizer/settings/settings-features.php:123 #: themes/hester/customizer/settings/settings-info.php:178 #: themes/hester/customizer/settings/settings-services.php:142 msgid "Link" msgstr "" #: themes/hester/customizer/settings/settings-info.php:8 msgid "Info section" msgstr "" #: themes/hester/customizer/settings/settings-info.php:21 msgid "Enable info" msgstr "" #: themes/hester/customizer/settings/settings-info.php:22 msgid "Add info section , generally display below the slider." msgstr "" #: themes/hester/customizer/settings/settings-info.php:32 msgid "Overlap slider?" msgstr "" #: themes/hester/customizer/settings/settings-info.php:33 msgid "On/Off section overlapping over slider." msgstr "" #: themes/hester/customizer/settings/settings-info.php:130 msgid "4 columns" msgstr "" #: themes/hester/customizer/settings/settings-info.php:147 msgid "Info content" msgstr "" #: themes/hester/customizer/settings/settings-info.php:149 msgid "Info" msgstr "" #: themes/hester/customizer/settings/settings-info.php:153 msgid "Add new info" msgstr "" #: themes/hester/customizer/settings/settings-info.php:155 msgid "Upgrade to Hester Pro to be able to add more items and unlock other premium features!" msgstr "" #: themes/hester/customizer/settings/settings-info.php:190 #: themes/hester/customizer/settings/settings-services.php:154 msgid "Link Text" msgstr "" #: themes/hester/customizer/settings/settings-info.php:202 msgid "Set Active" msgstr "" #: themes/hester/customizer/settings/settings-products.php:14 #, php-format msgid "To have access to a shop section please install and configure %1$s." msgstr "" #: themes/hester/customizer/settings/settings-products.php:15 msgid "WooCommerce plugin" msgstr "" #: themes/hester/customizer/settings/settings-products.php:39 msgid "Products Section" msgstr "" #: themes/hester/customizer/settings/settings-products.php:52 msgid "Enable Products" msgstr "" #: themes/hester/customizer/settings/settings-products.php:53 msgid "Show woocommerce product to homepage." msgstr "" #: themes/hester/customizer/settings/settings-products.php:125 msgid "Show products group by categories" msgstr "" #: themes/hester/customizer/settings/settings-products.php:126 msgid "Number of products to show" msgstr "" #: themes/hester/customizer/settings/settings-products.php:127 msgid "Number of columns to show" msgstr "" #: themes/hester/customizer/settings/settings-products.php:135 msgid "Need more features?" msgstr "" #: themes/hester/customizer/settings/settings-services.php:6 msgid "Service section" msgstr "" #: themes/hester/customizer/settings/settings-services.php:19 msgid "Enable Services" msgstr "" #: themes/hester/customizer/settings/settings-services.php:20 msgid "Enable/Disable service section" msgstr "" #: themes/hester/customizer/settings/settings-services.php:111 msgid "Services" msgstr "" #: themes/hester/customizer/settings/settings-services.php:113 msgid "Service" msgstr "" #: themes/hester/customizer/settings/settings-services.php:117 msgid "Add new Service" msgstr "" #: themes/hester/customizer/settings/settings-services.php:119 msgid "Upgrade to Hester Pro to be able to add more items and unlock other premium features!" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:11 msgid "Enable front page sections" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:12 msgid "Enable disable front page sections." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:28 #: themes/hester/customizer/settings/settings-slider.php:52 msgid "Slider" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:41 msgid "EnableSlider" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:42 msgid "Add a slider to your homepage." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:54 msgid "Slide" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:58 msgid "Add new slide" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:60 msgid "Upgrade to Hester Pro to be able to add more items and unlock other premium features!" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:63 msgid "Slide image" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:68 msgid "Slide background" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:72 msgid "Solid Color" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:73 msgid "Gradient" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:78 msgid "Slide Accent color" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:82 msgid "Slide Text color" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:86 msgid "Slide Title" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:90 msgid "Slide Subtitle" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:98 msgid "Button 1 text" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:102 msgid "Button 1 URL" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:106 msgid "Button 1 Style" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:107 #: themes/hester/customizer/settings/settings-slider.php:120 msgid "Add predefined classes btn-primary, btn-secondary, btn-white. Add `btn-outline` class to outline the button" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:111 msgid "Button 2 text" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:115 msgid "Button 2 URL" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:119 msgid "Button 2 Style" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:124 msgid "Align" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:133 msgid "Slide side content source" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:135 msgid "Choose what you want to display on left or right side of the slider. You can display either Image or put a shortcode." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:137 #: themes/hester/customizer/settings/settings-slider.php:151 msgid "Image" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:138 #: themes/hester/customizer/settings/settings-slider.php:182 msgid "Video URL" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:139 #: themes/hester/customizer/settings/settings-slider.php:169 msgid "Shortcode" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:170 msgid "Put plugin shortcode here." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:183 msgid "Youtube or vimeo video URL" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:195 msgid "Open content in popup" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:196 msgid "Enable this to open Slider side content in a popup box." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:213 msgid "Choose a popup Icon" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:214 msgid "Select an icon , clicking upon will open that popup." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:248 msgid "Slider shape" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:249 msgid "Choose a slider shape. Upgrade to PRO for more options." msgstr "" #: themes/hester/customizer/settings/settings-slider.php:252 msgid "None" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:253 msgid "Bottom Curved" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:263 msgid "Style" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:266 msgid "1 style" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:267 msgid "2 style" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:284 msgid "Slider Height" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:329 msgid "Slider Title Typography" msgstr "" #: themes/hester/customizer/settings/settings-slider.php:330 msgid "Adds a separate font for styling of slide title, so you can create stylish typographic elements." msgstr "" #: themes/hester/hester.php:26 msgid "Front Page" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:39 msgctxt "Widget" msgid "A list of items with optional icon and separator." msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:48 msgctxt "Widget" msgid "[Hester] Custom List" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:172 #: core/widgets/class-hester-core-posts-list-widget.php:192 #: core/widgets/class-hester-core-social-links-widget.php:139 msgctxt "Widget" msgid "Title:" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:179 msgctxt "Widget" msgid "Text Before:" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:189 #: core/widgets/class-hester-core-custom-list-widget.php:243 #: core/widgets/widgets.php:159 msgctxt "Widget" msgid "HTML tags allowed." msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:209 msgctxt "Widget" msgid "List Item" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:226 #: core/widgets/widgets.php:144 msgctxt "Widget" msgid "Icon" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:231 msgctxt "Widget" msgid "Enter icon SVG code." msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:237 #: core/widgets/widgets.php:152 msgctxt "Widget" msgid "Item Description" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:251 #: core/widgets/widgets.php:170 msgctxt "Widget" msgid "Add bottom separator" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:255 #: core/widgets/widgets.php:173 msgctxt "Widget" msgid "Remove" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:269 msgctxt "Widget" msgid "No Items Found" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:273 msgctxt "Widget" msgid "Please add new items to see more options" msgstr "" #: core/widgets/class-hester-core-custom-list-widget.php:277 msgid "Add New" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:42 msgctxt "Widget" msgid "Displays a configurable list of your site’s posts." msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:51 msgctxt "Widget" msgid "[Hester] Posts List" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:199 msgctxt "Widget" msgid "Number of posts to show:" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:206 msgctxt "hester-core" msgid "Display thumbnail" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:209 msgctxt "hester-core" msgid "Display post date" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:212 msgctxt "hester-core" msgid "Display post categories" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:216 msgctxt "hester-core" msgid "Sort by:" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:218 msgctxt "Widget" msgid "Date (Latest posts)" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:219 msgctxt "Widget" msgid "Modified (Recently updated)" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:220 msgctxt "Widget" msgid "Comment count (Most popular)" msgstr "" #: core/widgets/class-hester-core-posts-list-widget.php:221 msgctxt "Widget" msgid "Menu Order (Custom order)" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:41 msgctxt "Widget" msgid "Displays a list of social icon links." msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:50 msgctxt "Widget" msgid "[Hester] Social Links" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:149 msgctxt "Widget" msgid "Menu:" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:153 msgctxt "Widget" msgid "— Select —" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:167 msgctxt "Widget" msgid "Style:" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:171 msgctxt "Widget" msgid "Minimal" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:172 msgctxt "Widget" msgid "Rounded" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:178 msgctxt "Widget" msgid "Align:" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:182 msgctxt "Widget" msgid "Left" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:183 msgctxt "Widget" msgid "Center" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:184 msgctxt "Widget" msgid "Right" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:190 msgctxt "Widget" msgid "Size:" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:194 msgctxt "Widget" msgid "Small" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:195 msgctxt "Widget" msgid "Standard" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:196 msgctxt "Widget" msgid "Large" msgstr "" #: core/widgets/class-hester-core-social-links-widget.php:197 msgctxt "Widget" msgid "Extra Large" msgstr "" #: core/widgets/widgets.php:132 msgctxt "Widget" msgid "New Item" msgstr "" themes/hester/customizer/settings/settings-slider.php000064400000025234147600374750017243 0ustar00 'refresh', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable front page sections', 'hester-core' ), 'description' => esc_html__( 'Enable disable front page sections.', 'hester-core' ), 'section' => 'static_front_page', ), ); $options['setting']['hester_sections_order'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_order', 'control' => array( 'type' => 'hidden', 'section' => 'static_front_page', ), ); // Slider section. $options['section']['hester_section_slider'] = array( 'title' => esc_html__( 'Slider', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_slider', 'priority' => (int) apply_filters( 'hester_section_priority', 0, 'hester_section_slider' ), ); // Slider enable. $options['setting']['hester_enable_slider'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'EnableSlider', 'hester-core' ), 'description' => esc_html__( 'Add a slider to your homepage.', 'hester-core' ), 'section' => 'hester_section_slider', ), ); $options['setting']['hester_slider_slides'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_repeater_sanitize', 'control' => array( 'type' => 'hester-repeater', 'label' => esc_html__( 'Slider', 'hester-core' ), 'section' => 'hester_section_slider', 'item_name' => esc_html__( 'Slide', 'hester-core' ), 'live_title_id' => 'title', // apply for unput text and textarea only 'title_format' => esc_html__( '[live_title]', 'hester-core' ), // [live_title] 'add_text' => esc_html__( 'Add new slide', 'hester-core' ), 'max_item' => 3, // Maximum item can add, 'limited_msg' => wp_kses_post( __( 'Upgrade to Hester Pro to be able to add more items and unlock other premium features!', 'hester-core' ) ), 'fields' => array( 'image' => array( 'title' => esc_html__( 'Slide image', 'hester-core' ), 'type' => 'media', ), 'background' => array( 'title' => esc_html__( 'Slide background', 'hester-core' ), 'type' => 'design-options', 'display' => array( 'background' => array( 'color' => esc_html__( 'Solid Color', 'hester-core' ), 'gradient' => esc_html__( 'Gradient', 'hester-core' ), ), ), ), 'accent_color' => array( 'title' => esc_html__( 'Slide Accent color', 'hester-core' ), 'type' => 'color', ), 'text_color' => array( 'title' => esc_html__( 'Slide Text color', 'hester-core' ), 'type' => 'color', ), 'title' => array( 'title' => esc_html__( 'Slide Title', 'hester-core' ), 'type' => 'text', ), 'subtitle' => array( 'title' => esc_html__( 'Slide Subtitle', 'hester-core' ), 'type' => 'text', ), 'text' => array( 'title' => esc_html__( 'Description', 'hester-core' ), 'type' => 'editor', ), 'btn_1_text' => array( 'title' => esc_html__( 'Button 1 text', 'hester-core' ), 'type' => 'text', ), 'btn_1_url' => array( 'title' => esc_html__( 'Button 1 URL', 'hester-core' ), 'type' => 'url', ), 'btn_1_class' => array( 'title' => esc_html__( 'Button 1 Style', 'hester-core' ), 'desc' => esc_html__( 'Add predefined classes btn-primary, btn-secondary, btn-white. Add `btn-outline` class to outline the button', 'hester-core' ), 'type' => 'text', ), 'btn_2_text' => array( 'title' => esc_html__( 'Button 2 text', 'hester-core' ), 'type' => 'text', ), 'btn_2_url' => array( 'title' => esc_html__( 'Button 2 URL', 'hester-core' ), 'type' => 'url', ), 'btn_2_class' => array( 'title' => esc_html__( 'Button 2 Style', 'hester-core' ), 'desc' => esc_html__( 'Add predefined classes btn-primary, btn-secondary, btn-white. Add `btn-outline` class to outline the button', 'hester-core' ), 'type' => 'text', ), 'alignment' => array( 'title' => esc_html__( 'Align', 'hester-core' ), 'type' => 'button_set', 'options' => array( 'start' => 'dashicons dashicons-editor-alignleft', 'center' => 'dashicons dashicons-editor-aligncenter', 'end' => 'dashicons dashicons-editor-alignright', ), ), 'side_content_source' => array( 'title' => esc_html__( 'Slide side content source', 'hester-core' ), 'type' => 'select', 'desc' => esc_html__( 'Choose what you want to display on left or right side of the slider. You can display either Image or put a shortcode.' ), 'options' => array( 'image' => esc_html__( 'Image' ), 'url' => esc_html__( 'Video URL' ), 'shortcode' => esc_html__( 'Shortcode' ), ), 'required' => array( array( 'alignment', '!=', 'center', ), ), ), 'side_image' => array( 'title' => esc_html__( 'Image', 'hester-core' ), 'type' => 'media', 'required' => array( array( 'side_content_source', '=', 'image', ), array( 'alignment', '!=', 'center', ), ), ), 'side_shortcode' => array( 'title' => esc_html__( 'Shortcode', 'hester-core' ), 'desc' => esc_html__( 'Put plugin shortcode here.' ), 'type' => 'text', 'required' => array( array( 'side_content_source', '=', 'shortcode', ), ), ), 'url' => array( 'title' => esc_html__( 'Video URL', 'hester-core' ), 'desc' => esc_html__( 'Youtube or vimeo video URL' ), 'type' => 'url', 'required' => array( array( 'side_content_source', '=', 'url', ), ), ), 'open_in_popup' => array( 'title' => esc_html__( 'Open content in popup', 'hester-core' ), 'desc' => esc_html__( 'Enable this to open Slider side content in a popup box.' ), 'type' => 'checkbox', 'required' => array( array( 'side_content_source', '!=', 'shortcode', ), array( 'alignment', '!=', 'center', ), ), ), 'popup_icon' => array( 'title' => esc_html__( 'Choose a popup Icon', 'hester-core' ), 'desc' => esc_html__( 'Select an icon , clicking upon will open that popup.' ), 'type' => 'icon', 'required' => array( array( 'side_content_source', '!=', 'shortcode', ), array( 'open_in_popup', '=', true, ), ), ), ), 'required' => array( array( 'control' => 'hester_section_slider', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_slider_shape'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Slider shape', 'hester-core' ), 'description' => esc_html__( 'Choose a slider shape. Upgrade to PRO for more options.', 'hester-core' ), 'section' => 'hester_section_slider', 'choices' => array( '' => esc_html__( 'None', 'hester-core' ), 'wave' => esc_html__( 'Wave', 'hester-core' ), ), ), ); $options['setting']['hester_slider_style'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Style', 'hester-core' ), 'section' => 'hester_section_slider', 'choices' => array( '' => esc_html__( '1 style', 'hester-core' ), '2' => esc_html__( '2 style', 'hester-core' ), ), 'required' => array( array( 'control' => 'hester_enable_slider', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_slider_height'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_responsive', 'control' => array( 'type' => 'hester-range', 'label' => esc_html__( 'Slider Height', 'hester-core' ), 'section' => 'hester_section_slider', 'priority' => 100, 'min' => 8, 'max' => 30, 'step' => 1, 'responsive' => true, 'unit' => array( array( 'id' => 'px', 'name' => 'px', 'min' => 8, 'max' => 1080, 'step' => 1, ), array( 'id' => 'em', 'name' => 'em', 'min' => 0.5, 'max' => 108, 'step' => 0.01, ), array( 'id' => 'rem', 'name' => 'rem', 'min' => 0.5, 'max' => 108, 'step' => 0.01, ), ), 'required' => array( array( 'control' => 'hester_enable_slider', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_slider_title_font'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_typography', 'control' => array( 'type' => 'hester-typography', 'label' => esc_html__( 'Slider Title Typography', 'hester-core' ), 'description' => esc_html__( 'Adds a separate font for styling of slide title, so you can create stylish typographic elements.', 'hester-core' ), 'section' => 'hester_section_slider', 'display' => array( 'font-family' => array(), 'font-subsets' => array(), 'font-weight' => array(), 'font-style' => array(), 'text-transform' => array(), 'text-decoration' => array(), 'letter-spacing' => array(), 'font-size' => array(), 'line-height' => array(), ), 'required' => array( array( 'control' => 'hester_enable_slider', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/settings-services.php000064400000012506147600374750017602 0ustar00 esc_html__( 'Service section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_services', 'priority' => (int) apply_filters( 'hester_section_priority', 2, 'hester_section_services' ), ); // Schema toggle. $options['setting']['hester_enable_services'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable Services', 'hester-core' ), 'description' => esc_html__( 'Enable/Disable service section', 'hester-core' ), 'section' => 'hester_section_services', ), ); $options['setting']['hester_services_sub_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Sub Heading', 'hester-core' ), 'section' => 'hester_section_services', 'required' => array( array( 'control' => 'hester_enable_services', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_services_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Heading', 'hester-core' ), 'section' => 'hester_section_services', 'required' => array( array( 'control' => 'hester_enable_services', 'value' => true, 'operator' => '==', ), ), ), 'partial' => array( 'selector' => '#hester-service-heading', 'render_callback' => function () { return get_theme_mod( 'hester_services_heading' ); }, 'container_inclusive' => false, 'fallback_refresh' => true, ), ); $options['setting']['hester_services_description'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_textarea', 'control' => array( 'type' => 'hester-editor', 'label' => esc_html__( 'Section Description', 'hester-core' ), 'section' => 'hester_section_services', 'required' => array( array( 'control' => 'hester_enable_services', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_services_column'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Columns', 'hester-core' ), 'section' => 'hester_section_services', 'choices' => array( '' => esc_html__( 'Auto columns', 'hester-core' ), '-6' => esc_html__( '2 columns', 'hester-core' ), '-4' => esc_html__( '3 columns', 'hester-core' ), ), 'required' => array( array( 'control' => 'hester_enable_services', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_services_slides'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_repeater_sanitize', 'control' => array( 'type' => 'hester-repeater', 'label' => esc_html__( 'Services', 'hester-core' ), 'section' => 'hester_section_services', 'item_name' => esc_html__( 'Service', 'hester-core' ), 'live_title_id' => 'title', // apply for unput text and textarea only 'title_format' => esc_html__( '[live_title]', 'hester-core' ), // [live_title] 'add_text' => esc_html__( 'Add new Service', 'hester-core' ), 'max_item' => 3, // Maximum item can add, 'limited_msg' => wp_kses_post( __( 'Upgrade to Hester Pro to be able to add more items and unlock other premium features!', 'hester-core' ) ), 'fields' => array( 'icon' => array( 'title' => esc_html__( 'Icon', 'hester-core' ), 'type' => 'icon', ), 'title' => array( 'title' => esc_html__( 'Title', 'hester-core' ), 'type' => 'text', ), 'description' => array( 'title' => esc_html__( 'Description', 'hester-core' ), 'type' => 'editor', ), 'add_link' => array( 'title' => esc_html__( 'Add Link?', 'hester-core' ), 'type' => 'checkbox', ), 'link' => array( 'title' => esc_html__( 'Link', 'hester-core' ), 'type' => 'url', 'required' => array( array( 'add_link', '=', true, ), ), ), 'linktext' => array( 'title' => esc_html__( 'Link Text', 'hester-core' ), 'type' => 'text', 'required' => array( array( 'add_link', '=', true, ), ), ), ), 'required' => array( array( 'control' => 'hester_enable_services', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/settings-products.php000064400000011736147600374750017626 0ustar00 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Generic_Notice', 'section_text' => sprintf( /* translators: %1$s is Plugin Name */ esc_html__( 'To have access to a shop section please install and configure %1$s.', 'hester-core' ), esc_html__( 'WooCommerce plugin', 'hester-core' ) ), 'slug' => 'woocommerce', 'panel' => 'hester_panel_homepage', 'priority' => 451, 'capability' => 'install_plugins', 'hide_notice' => (bool) get_option( 'dismissed-hester_info_woocommerce', false ), 'options' => array( 'redirect' => admin_url( 'customize.php' ) . '?autofocus[section]=hester_section_products', ), ); $options['setting']['hester_section_wocommerce_recommendation'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hidden', 'section' => 'hester_section_products', ), ); } else { // Slider section. $options['section']['hester_section_products'] = array( 'title' => esc_html__( 'Products Section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_products', 'priority' => (int) apply_filters( 'hester_section_priority', 5, 'hester_section_products' ), ); // Schema toggle. $options['setting']['hester_enable_products'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable Products', 'hester-core' ), 'description' => esc_html__( 'Show woocommerce product to homepage.', 'hester-core' ), 'section' => 'hester_section_products', ), 'required' => array( array( 'control' => 'hester_section_products', 'value' => true, 'operator' => '==', ), ), ); $options['setting']['hester_products_sub_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Sub Heading', 'hester-core' ), 'section' => 'hester_section_products', 'required' => array( array( 'control' => 'hester_enable_products', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_products_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Heading', 'hester-core' ), 'section' => 'hester_section_products', 'required' => array( array( 'control' => 'hester_enable_products', 'value' => true, 'operator' => '==', ), ), ), 'partial' => array( 'selector' => '#hester-products-heading', 'render_callback' => function () { return get_theme_mod( 'hester_products_heading' ); }, 'container_inclusive' => false, 'fallback_refresh' => true, ), ); $options['setting']['hester_products_description'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_textarea', 'control' => array( 'type' => 'hester-editor', 'label' => esc_html__( 'Section Description', 'hester-core' ), 'section' => 'hester_section_products', 'required' => array( array( 'control' => 'hester_enable_products', 'value' => true, 'operator' => '==', ), ), ), ); $desc = '
  • ' . __( 'Show products group by categories', 'hester-core' ) . '
  • ' . __( 'Number of products to show', 'hester-core' ) . '
  • ' . __( 'Number of columns to show', 'hester-core' ) . '
'; $options['setting']['hester_products_more'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_range', 'control' => array( 'type' => 'hester-info', 'label' => esc_html__( 'Need more features?', 'hester-core' ), 'description' => wp_kses_post( $desc ), 'url' => esc_url_raw( 'https://peregrine-themes.com/hester/?utm_medium=customizer&utm_source=products&utm_campaign=upgradeToPro' ), 'section' => 'hester_section_products', 'required' => array( array( 'control' => 'hester_enable_products', 'value' => true, 'operator' => '==', ), ), ), ); } return $options; } themes/hester/customizer/settings/settings-info.php000064400000015572147600374750016720 0ustar00 esc_html__( 'Info section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_info', 'priority' => (int) apply_filters( 'hester_section_priority', 1, 'hester_section_info' ), ); // Schema toggle. $options['setting']['hester_enable_info'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable info', 'hester-core' ), 'description' => esc_html__( 'Add info section , generally display below the slider.', 'hester-core' ), 'section' => 'hester_section_info', ), ); $options['setting']['hester_info_overlap'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Overlap slider?', 'hester-core' ), 'description' => esc_html__( 'On/Off section overlapping over slider.', 'hester-core' ), 'section' => 'hester_section_info', 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_info_sub_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Sub Heading', 'hester-core' ), 'section' => 'hester_section_info', 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_info_overlap', 'value' => false, 'operator' => '==', ), ), ), ); $options['setting']['hester_info_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Heading', 'hester-core' ), 'section' => 'hester_section_info', 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_info_overlap', 'value' => false, 'operator' => '==', ), ), ), 'partial' => array( 'selector' => '#hester-info-heading', 'render_callback' => function () { return get_theme_mod( 'hester_info_heading' ); }, 'container_inclusive' => false, 'fallback_refresh' => true, ), ); $options['setting']['hester_info_description'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_textarea', 'control' => array( 'type' => 'hester-editor', 'label' => esc_html__( 'Section Description', 'hester-core' ), 'section' => 'hester_section_info', 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_info_overlap', 'value' => false, 'operator' => '==', ), ), ), ); $options['setting']['hester_info_column'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Columns', 'hester-core' ), 'section' => 'hester_section_info', 'choices' => array( '' => esc_html__( 'Auto columns', 'hester-core' ), '-6' => esc_html__( '2 columns', 'hester-core' ), '-4' => esc_html__( '3 columns', 'hester-core' ), '-3' => esc_html__( '4 columns', 'hester-core' ), ), 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_info_style'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Style', 'hester-core' ), 'section' => 'hester_section_info', 'choices' => array( '' => esc_html__( 'Default style', 'hester-core' ), '0' => esc_html__( '1 style', 'hester-core' ), ), 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_info_slides'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_repeater_sanitize', 'control' => array( 'type' => 'hester-repeater', 'label' => esc_html__( 'Info content', 'hester-core' ), 'section' => 'hester_section_info', 'item_name' => esc_html__( 'Info', 'hester-core' ), 'live_title_id' => 'title', // apply for unput text and textarea only 'title_format' => esc_html__( '[live_title]', 'hester-core' ), // [live_title] 'add_text' => esc_html__( 'Add new info', 'hester-core' ), 'max_item' => 4, // Maximum item can add, 'limited_msg' => wp_kses_post( __( 'Upgrade to Hester Pro to be able to add more items and unlock other premium features!', 'hester-core' ) ), 'fields' => array( 'icon' => array( 'title' => esc_html__( 'Icon', 'hester-core' ), 'type' => 'icon', ), 'title' => array( 'title' => esc_html__( 'Title', 'hester-core' ), 'type' => 'text', ), 'description' => array( 'title' => esc_html__( 'Description', 'hester-core' ), 'type' => 'editor', ), 'add_link' => array( 'title' => esc_html__( 'Add Link?', 'hester-core' ), 'type' => 'checkbox', ), 'link' => array( 'title' => esc_html__( 'Link', 'hester-core' ), 'type' => 'url', 'required' => array( array( 'add_link', '=', true, ), ), ), 'linktext' => array( 'title' => esc_html__( 'Link Text', 'hester-core' ), 'type' => 'text', 'required' => array( array( 'add_link', '=', true, ), ), ), 'is_active' => array( 'title' => esc_html__( 'Set Active', 'hester-core' ), 'type' => 'checkbox', ), ), 'required' => array( array( 'control' => 'hester_enable_info', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/settings-features.php000064400000011001147600374750017562 0ustar00 esc_html__( 'Feature section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_features', 'priority' => (int) apply_filters( 'hester_section_priority', 4, 'hester_section_features' ), ); // toggle. $options['setting']['hester_enable_features'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable Feature section', 'hester-core' ), 'section' => 'hester_section_features', ), 'required' => array( array( 'control' => 'hester_section_features', 'value' => true, 'operator' => '==', ), ), ); $options['setting']['hester_features_sub_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Sub Heading', 'hester-core' ), 'section' => 'hester_section_features', 'required' => array( array( 'control' => 'hester_enable_features', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_features_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Heading', 'hester-core' ), 'section' => 'hester_section_features', 'required' => array( array( 'control' => 'hester_enable_features', 'value' => true, 'operator' => '==', ), ), ), 'partial' => array( 'selector' => '#hester-features-heading', 'render_callback' => function() { return get_theme_mod( 'hester_features_heading' );}, 'container_inclusive' => false, 'fallback_refresh' => true, ), ); $options['setting']['hester_features_description'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_textarea', 'control' => array( 'type' => 'hester-editor', 'label' => esc_html__( 'Section Description', 'hester-core' ), 'section' => 'hester_section_features', 'required' => array( array( 'control' => 'hester_enable_features', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_features_slides'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_repeater_sanitize', 'control' => array( 'type' => 'hester-repeater', 'label' => esc_html__( 'Features', 'hester-core' ), 'section' => 'hester_section_features', 'item_name' => esc_html__( 'Feature', 'hester-core' ), 'live_title_id' => 'title', // apply for unput text and textarea only 'title_format' => esc_html__( '[live_title]', 'hester-core' ), // [live_title] 'add_text' => esc_html__( 'Add new Feature', 'hester-core' ), 'max_item' => 4, // Maximum item can add, 'limited_msg' => wp_kses_post( __( 'Upgrade to Hester Pro to be able to add more items and unlock other premium features!', 'hester-core' ) ), 'fields' => array( 'icon' => array( 'title' => esc_html__( 'Icon', 'hester-core' ), 'type' => 'icon', ), 'title' => array( 'title' => esc_html__( 'Title', 'hester-core' ), 'type' => 'text', ), 'description' => array( 'title' => esc_html__( 'Description', 'hester-core' ), 'type' => 'editor', ), 'add_link' => array( 'title' => esc_html__( 'Add Link?', 'hester-core' ), 'type' => 'checkbox', ), 'link' => array( 'title' => esc_html__( 'Link', 'hester-core' ), 'type' => 'url', 'required' => array( array( 'add_link', '=', true, ), ), ), ), 'required' => array( array( 'control' => 'hester_enable_features', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/settings-extra.php000064400000004607147600374750017105 0ustar00 esc_html__( 'Extra section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_extra', 'priority' => (int) apply_filters( 'hester_section_priority', 14, 'hester_section_extra' ), ); // Schema toggle. $options['setting']['hester_enable_extra'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable Extra section', 'hester-core' ), 'section' => 'hester_section_extra', ), ); $options['setting']['hester_section_extra_page'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'section' => 'hester_section_extra', 'is_select2' => true, 'data_source' => 'page', 'placeholder' => esc_html__( 'Select a page', 'hester-core' ), 'label' => esc_html__( 'Page', 'hester-core' ), 'description' => esc_html__( 'Select a page to display content from in Extra section.', 'hester-core' ), 'required' => array( array( 'control' => 'hester_enable_extra', 'value' => true, 'operator' => '==', ), ), ), ); $desc = '
  • ' . __( 'Background color and font color options', 'hester-core' ) . '
  • ' . __( 'Manage Top/Bottom Spacing', 'hester-core' ) . '
'; $options['setting']['hester_extra_more'] = array( 'control' => array( 'type' => 'hester-info', 'label' => esc_html__( 'Upgrade to pro', 'hester-core' ), 'description' => wp_kses_post( $desc ), 'url' => esc_url_raw( 'https://peregrine-themes.com/hester/?utm_medium=customizer&utm_source=extra_section&utm_campaign=upgradeToPro' ), 'section' => 'hester_section_extra', 'required' => array( array( 'control' => 'hester_enable_extra', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/settings-blog.php000064400000012662147600374750016705 0ustar00 esc_html__( 'Blog Section', 'hester-core' ), 'panel' => 'hester_panel_homepage', 'class' => 'Hester_Customizer_Control_Section_Hiding', 'hiding_control' => 'hester_enable_blog', 'priority' => (int) apply_filters( 'hester_section_priority', 6, 'hester_section_blog' ), ); // toggle. $options['setting']['hester_enable_blog'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-toggle', 'label' => esc_html__( 'Enable Blog section', 'hester-core' ), 'section' => 'hester_section_blog', ), 'required' => array( array( 'control' => 'hester_section_blog', 'value' => true, 'operator' => '==', ), ), ); $options['setting']['hester_blog_sub_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Sub Heading', 'hester-core' ), 'section' => 'hester_section_blog', 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_blog_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'sanitize_text_field', 'control' => array( 'type' => 'hester-text', 'label' => esc_html__( 'Section Heading', 'hester-core' ), 'section' => 'hester_section_blog', 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), ), ), 'partial' => array( 'selector' => '#hester-blog-heading', 'render_callback' => function () { return get_theme_mod( 'hester_blog_heading' ); }, 'container_inclusive' => false, 'fallback_refresh' => true, ), ); $options['setting']['hester_blog_description'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_textarea', 'control' => array( 'type' => 'hester-editor', 'label' => esc_html__( 'Section Description', 'hester-core' ), 'section' => 'hester_section_blog', 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), ), ), ); // Post Settings heading. $options['setting']['hester_blog_posts_heading'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_toggle', 'control' => array( 'type' => 'hester-heading', 'section' => 'hester_section_blog', 'label' => esc_html__( 'Post Settings', 'hester-core' ), 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), ), ), ); // Post count. $options['setting']['hester_blog_posts_number'] = array( 'transport' => 'postMessage', 'sanitize_callback' => 'hester_sanitize_range', 'control' => array( 'type' => 'hester-range', 'section' => 'hester_section_blog', 'label' => esc_html__( 'Post Number', 'hester-core' ), 'description' => esc_html__( 'Set the number of visible posts.', 'hester-core' ), 'min' => 1, 'max' => 3, 'step' => 1, 'unit' => '', 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_blog_posts_heading', 'value' => true, 'operator' => '==', ), ), ), ); // Post category. $options['setting']['hester_blog_posts_category'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'section' => 'hester_section_blog', 'label' => esc_html__( 'Category', 'hester-core' ), 'description' => esc_html__( 'Display posts from selected category only. Leave empty to include all.', 'hester-core' ), 'is_select2' => true, 'data_source' => 'category', 'multiple' => true, 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_blog_posts_heading', 'value' => true, 'operator' => '==', ), ), ), ); $options['setting']['hester_blog_column'] = array( 'transport' => 'refresh', 'sanitize_callback' => 'hester_sanitize_select', 'control' => array( 'type' => 'hester-select', 'label' => esc_html__( 'Columns', 'hester-core' ), 'section' => 'hester_section_blog', 'choices' => array( '' => esc_html__( 'Auto columns', 'hester-core' ), '-6' => esc_html__( '2 columns', 'hester-core' ), '-4' => esc_html__( '3 columns', 'hester-core' ), ), 'required' => array( array( 'control' => 'hester_enable_blog', 'value' => true, 'operator' => '==', ), array( 'control' => 'hester_blog_posts_heading', 'value' => true, 'operator' => '==', ), ), ), ); return $options; } themes/hester/customizer/settings/index.php000064400000001241147600374750015222 0ustar00';print_r($defaults);''; // disable front page sections $defaults['hester_enable_front_page'] = false; $defaults['hester_sections_order'] = '{"hester_section_info":10,"hester_section_services":15,"hester_section_extra":75,"hester_section_features":80,"hester_section_blog":85,"hester_section_products":90}'; // Slider default $defaults['hester_enable_slider'] = true; $defaults['hester_slider_shape'] = 'wave'; $defaults['hester_slider_style'] = '2'; $defaults['hester_slider_height'] = array( 'desktop' => 75, 'tablet' => 46, 'mobile' => 50, 'unit' => 'rem', ); $defaults['hester_slider_title_font'] = hester_typography_defaults( array( 'font-family' => 'Plus Jakarta Sans', 'font-weight' => 800, 'font-size-desktop' => '6.15', 'font-size-tablet' => '4', 'font-size-mobile' => '3', 'font-size-unit' => 'rem', 'line-height-desktop' => '1.24', 'line-height-tablet' => '1.2', ) ); $defaults['hester_slider_slides'] = apply_filters( 'hester_core_slider_slides_default', array( array( 'image' => array( 'url' => HESTER_CORE_PLUGIN_URL . '/assets/images/hero.jpg', ), 'background' => array( 'background-type' => 'gradient', 'background-color' => '#1E293B', 'gradient-color-1' => 'rgba(64,30,161,0.81)', 'gradient-color-1-location' => '0', 'gradient-color-2' => 'rgba(23,0,154,0.81)', 'gradient-color-2-location' => '100', 'gradient-type' => 'linear', 'gradient-linear-angle' => '75', 'gradient-position' => 'center center', ), 'accent_color' => '#17009A', 'text_color' => '#ffffff', 'subtitle' => wp_kses_post( 'INTRODUCING HESTER' ), 'title' => wp_kses_post( 'Build Your Amazing Website Fast.', 'hester-core' ), 'text' => wp_kses_post( 'Start building your own website today !', 'hester-core' ), 'btn_1_text' => esc_html__( 'Make a Website', 'hester-core' ), 'btn_1_url' => esc_html__( '#', 'hester-core' ), 'btn_1_class' => 'btn-primary', 'btn_2_text' => esc_html__( 'Download', 'hester-core' ), 'btn_2_url' => esc_html__( '#', 'hester-core' ), 'btn_2_class' => 'btn-white btn-outline', 'alignment' => 'start', 'side_content_source' => '', 'side_image' => '', 'side_shortcode' => '', 'open_in_popup' => false, 'popup_icon' => 'fas fa-play', ), array( 'image' => array( 'url' => HESTER_CORE_PLUGIN_URL . '/assets/images/hero.jpg', ), 'background' => array( 'background-type' => 'gradient', 'background-color' => '#1E293B', 'gradient-color-1' => 'rgba(64,30,161,0.81)', 'gradient-color-1-location' => '0', 'gradient-color-2' => 'rgba(23,0,154,0.81)', 'gradient-color-2-location' => '100', 'gradient-type' => 'linear', 'gradient-linear-angle' => '75', 'gradient-position' => 'center center', ), 'accent_color' => '#17009A', 'text_color' => '#ffffff', 'subtitle' => wp_kses_post( 'INTRODUCING HESTER' ), 'title' => wp_kses_post( 'Build Your Amazing Website Fast.', 'hester-core' ), 'text' => wp_kses_post( 'Start building your own website today !', 'hester-core' ), 'btn_1_text' => esc_html__( 'Make a Website', 'hester-core' ), 'btn_1_url' => esc_html__( '#', 'hester-core' ), 'btn_1_class' => 'btn-primary', 'btn_2_text' => esc_html__( 'Download', 'hester-core' ), 'btn_2_url' => esc_html__( '#', 'hester-core' ), 'btn_2_class' => 'btn-white btn-outline', 'alignment' => 'center', 'side_content_source' => '', 'side_image' => '', 'side_shortcode' => '', 'open_in_popup' => false, 'popup_icon' => 'fas fa-play', ), array( 'image' => array( 'url' => HESTER_CORE_PLUGIN_URL . '/assets/images/hero.jpg', ), 'background' => array( 'background-type' => 'gradient', 'background-color' => '#1E293B', 'gradient-color-1' => 'rgba(64,30,161,0.81)', 'gradient-color-1-location' => '0', 'gradient-color-2' => 'rgba(23,0,154,0.81)', 'gradient-color-2-location' => '100', 'gradient-type' => 'linear', 'gradient-linear-angle' => '75', 'gradient-position' => 'center center', ), 'accent_color' => '#17009A', 'text_color' => '#ffffff', 'subtitle' => wp_kses_post( 'INTRODUCING HESTER' ), 'title' => wp_kses_post( 'Build Your Amazing Website Fast.', 'hester-core' ), 'text' => wp_kses_post( 'Start building your own website today !', 'hester-core' ), 'btn_1_text' => esc_html__( 'Make a Website', 'hester-core' ), 'btn_1_url' => esc_html__( '#', 'hester-core' ), 'btn_1_class' => 'btn-primary', 'btn_2_text' => esc_html__( 'Download', 'hester-core' ), 'btn_2_url' => esc_html__( '#', 'hester-core' ), 'btn_2_class' => 'btn-white btn-outline', 'alignment' => 'end', 'side_content_source' => '', 'side_image' => '', 'side_shortcode' => '', 'open_in_popup' => false, 'popup_icon' => 'fas fa-play', ), ) ); // Info default $defaults['hester_enable_info'] = true; $defaults['hester_info_overlap'] = false; $defaults['hester_info_sub_heading'] = ''; $defaults['hester_info_heading'] = ''; $defaults['hester_info_description'] = ''; $defaults['hester_info_slides'] = apply_filters( 'hester_core_info_slides_default', array( array( 'icon' => 'far fa-building', 'title' => esc_html__( 'Startup Business', 'hester-core' ), 'description' => esc_html__( 'Ante ipsum primis in as enda saepe, aspe.', 'hester-core' ), 'add_link' => false, 'link' => '', 'linktext' => '', 'is_active' => false, ), array( 'icon' => 'far fa-shopping-bag', 'title' => esc_html__( 'Online Shop', 'hester-core' ), 'description' => esc_html__( 'Ante ipsum primis in as enda saepe, aspe.', 'hester-core' ), 'add_link' => false, 'link' => '', 'linktext' => '', 'is_active' => false, ), array( 'icon' => 'far fa-edit', 'title' => esc_html__( 'Easy Blogging', 'hester-core' ), 'description' => esc_html__( 'Ante ipsum primis in as enda saepe, aspe.', 'hester-core' ), 'add_link' => false, 'link' => '', 'linktext' => '', 'is_active' => false, ), array( 'icon' => 'far fa-thumbs-up', 'title' => esc_html__( '100% Satisfaction', 'hester-core' ), 'description' => esc_html__( 'Ante ipsum primis in as enda saepe, aspe.', 'hester-core' ), 'add_link' => false, 'link' => '', 'linktext' => '', 'is_active' => false, ), ) ); $defaults['hester_info_container_width'] = 'content-width'; $defaults['hester_info_section_spacing'] = array( 'desktop' => array( 'top' => 0, 'bottom' => 0, ), 'tablet' => array( 'top' => 0, 'bottom' => 0, ), 'mobile' => array( 'top' => 6, 'bottom' => 6, ), 'unit' => 'rem', ); $defaults['hester_info_column'] = '-3'; $defaults['hester_info_style'] = ''; // Services section $defaults['hester_enable_services'] = true; $defaults['hester_services_sub_heading'] = esc_html__( 'SERVICES', 'hester-core' ); $defaults['hester_services_heading'] = esc_html__( 'What We Offer', 'hester-core' ); $defaults['hester_services_description'] = wp_kses_post( 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit ui enean et commodo ligula eget dolorenean massa quam felis ultricies nec elit ligula.', 'hester-core' ); $defaults['hester_services_slides'] = apply_filters( 'hester_core_services_slides_default', array( array( 'icon' => 'fas fa-pencil-ruler', 'title' => esc_html__( 'Website Designing', 'hester-core' ), 'description' => esc_html__( 'Dolores sit ipsum velit purus aliquet, massa fringilla leo orci sit ipsum euelit amet magnis.', 'hester-core' ), 'add_link' => true, 'link' => '#', 'linktext' => '', 'add_image' => false, 'image' => '', ), array( 'icon' => 'far fa-lightbulb', 'title' => esc_html__( 'SEO Optimization', 'hester-core' ), 'description' => esc_html__( 'Dolores sit ipsum velit purus aliquet, massa fringilla leo orci sit ipsum euelit amet magnis.', 'hester-core' ), 'add_link' => true, 'link' => '#', 'linktext' => '', 'add_image' => false, 'image' => '', ), array( 'icon' => 'far fa-life-ring', 'title' => esc_html__( 'Lifetime Updates', 'hester-core' ), 'description' => esc_html__( 'Dolores sit ipsum velit purus aliquet, massa fringilla leo orci sit ipsum euelit amet magnis.', 'hester-core' ), 'add_link' => true, 'link' => '#', 'linktext' => '', 'add_image' => false, 'image' => '', ), ) ); $defaults['hester_services_container_width'] = 'content-width'; $defaults['hester_services_column'] = '-4'; // Extra section $defaults['hester_enable_extra'] = false; $defaults['hester_enable_extra_page'] = null; $defaults['hester_extra_container_width'] = 'content-width'; // Feature section $defaults['hester_enable_features'] = true; $defaults['hester_features_sub_heading'] = esc_html__( 'WHY CHOOSE US', 'hester-core' ); $defaults['hester_features_heading'] = esc_html__( 'Our Features', 'hester-core' ); $defaults['hester_features_description'] = wp_kses_post( 'Et in risus egestas nec vitae odio ac nibh vestibulum volutpat aliquet aenean erat lobortis non.

Nibh egestas dictumst cursus est turpis quis tincidunt pulvinar maecenas eget massa vel, ante nam blandit egestas enim id quis sit maecenas.', 'hester-core' ); $defaults['hester_features_slides'] = apply_filters( 'hester_core_features_slides_default', array( array( 'icon' => 'fas fa-chart-pie', 'title' => esc_html__( 'Market Research', 'hester-core' ), 'description' => '', 'add_link' => true, 'link' => '#', ), array( 'icon' => 'fas fa-file-alt', 'title' => esc_html__( 'Content Writing', 'hester-core' ), 'description' => '', 'add_link' => true, 'link' => '#', ), array( 'icon' => 'fas fa-search-plus', 'title' => esc_html__( 'Keyword Analysis', 'hester-core' ), 'description' => '', 'add_link' => true, 'link' => '#', ), array( 'icon' => 'fas fa-headset', 'title' => esc_html__( '24/7 Support', 'hester-core' ), 'description' => '', 'add_link' => true, 'link' => '#', ), ) ); $defaults['hester_features_background'] = hester_design_options_defaults( array( 'background' => array( 'background-type' => 'image', 'color' => array(), 'gradient' => array(), 'image' => array( 'background-image' => HESTER_CORE_PLUGIN_URL . 'assets/images/img01.png', 'background-attachment' => 'fixed', 'background-color-overlay' => 'rgba(23,0,154,0.85)', ), ), ) ); $defaults['hester_features_text_color'] = hester_design_options_defaults( array( 'color' => array( 'text-color' => '#FFFFFF', ), ) ); $defaults['hester_features_container_width'] = 'content-width'; // Home blog $defaults['hester_enable_blog'] = true; $defaults['hester_blog_sub_heading'] = esc_html__( 'OUR BLOGS', 'hester-core' ); $defaults['hester_blog_heading'] = esc_html__( 'Latest News', 'hester-core' ); $defaults['hester_blog_description'] = wp_kses_post( 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit ui enean et commodo ligula eget dolorenean massa quam felis ultricies nec elit ligula.', 'hester-core' ); $defaults['hester_blog_posts_number'] = '3'; $defaults['hester_blog_column'] = '-4'; // Home products $defaults['hester_enable_products'] = false; $defaults['hester_products_sub_heading'] = esc_html__( 'OUR PRODUCTS', 'hester-core' ); $defaults['hester_products_heading'] = esc_html__( 'Latest Products', 'hester-core' ); $defaults['hester_products_description'] = wp_kses_post( 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit ui enean et commodo ligula eget dolorenean massa quam felis ultricies nec elit ligula.', 'hester-core' ); return $defaults; } themes/hester/customizer/customizer.php000064400000004117147600374750014464 0ustar00 * @since 1.0.0 */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Hester Core Admin Class. * * @since 1.0.0 * @package Hester Core */ final class Hester_Core_Customizer { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Main Hester Core Admin Instance. * * @since 1.0.0 * @return Hester_Core_Customizer */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Core_Customizer ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor. * * @since 1.0.0 */ public function __construct() { // Init Hester Core admin. add_action( 'init', array( $this, 'includes' ) ); // add_filter('hester_custom_customizer_controls', array($this, 'hester_core_customzier_control'), 10, 1); // Hester Core Admin loaded. do_action( 'Hester_Core_Customizer_loaded' ); } /** * Include files. * * @since 1.0.0 */ public function includes() { // Repeater control. // require_once HESTER_CORE_PLUGIN_DIR . 'includes/customizer/controls/repeater/class-hester-customizer-control-repeater.php'; require_once HESTER_CORE_PLUGIN_DIR . 'themes/hester/customizer/settings/index.php'; require_once HESTER_CORE_PLUGIN_DIR . 'themes/hester/customizer/default.php'; } // public function hester_core_customzier_control($controls) // { // $controls['repeater'] = 'Hester_Customizer_Control_Repeater'; // return $controls; // } } /** * The function which returns the one Hester_Core_Customizer instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function Hester_Core_Customizer() { return Hester_Core_Customizer::instance(); } Hester_Core_Customizer(); themes/hester/sections/section-slider.php000064400000023571147600374750014634 0ustar00options->get( 'hester_enable_slider' ); $section_style = ''; if ( (bool) $show_section === false ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $classes = ''; $classes = 'is-starter-slider-s' . hester()->options->get( 'hester_slider_style' ) . ' is-slider-' . hester()->options->get( 'hester_slider_shape' ); $classes .= hester()->options->get( 'hester_info_overlap' ) ? ' starter__slider-nextcomeup' : ''; $slides = hester()->options->get( 'hester_slider_slides' ); $section_style = 'style="' . $section_style . '"'; $slides_count = count( $slides ) > 1 ? true : false; // this.length > 1 ? true : false > { "delay": 8000 } $slider_options = ' "slidesPerView": 1, "direction": "vertical", "loop": "' . $slides_count . '", "effect": "fade", "watchOverflow": true, "fadeEffect": { "crossFade": true }, "autoHeight": true, "centeredSlides": true, "speed": 2000, "autoplay": false, "keyboard": { "enabled": true }, "pagination": { "el": ".swiper-pagination", "clickable": true }, "navigation": { "nextEl": ".swiper-button-next", "prevEl": ".swiper-button-prev" } '; do_action( 'hester_before_slider_start' ); ?>
>
$slide ) : $slide = (object) $slide; $style_wrapper = hester_get_slide_classes( $slide ); $button_1 = $slide->btn_1_text != '' ? sprintf( '%2$s', $slide->btn_1_url, $slide->btn_1_text, $slide->btn_1_class ) : ''; $button_2 = $slide->btn_2_text != '' ? sprintf( '%2$s', $slide->btn_2_url, $slide->btn_2_text, $slide->btn_2_class ) : ''; $side_content = ''; if ( $slide->alignment != 'center' ) { if ( $slide->side_content_source == 'image' && ( isset( $slide->side_image ) && $slide->side_image['url'] != '' ) ) { $side_content = $slide->open_in_popup ? esc_url( $slide->side_image['url'] ) : ''; // var_dump($side_content); echo "ererer";die; } elseif ( $slide->side_content_source == 'shortcode' && $slide->side_shortcode != '' ) { $side_content = do_shortcode( $slide->side_shortcode ); } elseif ( $slide->side_content_source == 'url' && $slide->url != '' ) { $side_content = $slide->open_in_popup ? esc_url_raw( $slide->url ) : '[embed width="400" height="260"]' . esc_url_raw( $slide->url ) . '[/embed]'; } } if ( $side_content != '' && $slide->open_in_popup && $slide->side_content_source != 'shortcode' ) { $side_content = sprintf( '', $side_content, $slide->popup_icon ); } ?>
> image['url'] != '' ) : ?>
<?php esc_attr_e( $slide->title ); ?>
>
>
subtitle != '' ) : ?>
subtitle ); ?>
title != '' ) : ?>
title ); ?>
text != '' ) : ?>
text ); ?>
background['background-type'] == 'color' ) { $bg_background = $slide->background['background-color'] != ' ' ? 'background-color:' . $slide->background['background-color'] : ''; } elseif ( $slide->background['background-type'] == 'gradient' ) { $linear_value = $slide->background['gradient-linear-angle'] . 'deg,' . $slide->background['gradient-color-1'] . ' ' . $slide->background['gradient-color-1-location'] . '%,' . $slide->background['gradient-color-2'] . ' ' . $slide->background['gradient-color-2-location'] . '%'; if ( $slide->background['gradient-type'] == 'linear' ) { $bg_background = ' background: ' . $slide->background['gradient-color-1'] . '; background: -webkit-linear-gradient(' . $linear_value . '); background: -o-linear-gradient(' . $linear_value . '); background: linear-gradient(' . $linear_value . '); '; } else { $bg_background = ' background: ' . $slide->background['gradient-color-1'] . '; background: -webkit-radial-gradient(' . $slide->background['gradient-position'] . ', circle, ' . $slide->background['gradient-color-1'] . ' ' . $slide->background['gradient-color-1-location'] . '%, ' . $slide->background['gradient-color-2'] . ' ' . $slide->background['gradient-color-2-location'] . '%); background: -o-radial-gradient(' . $slide->background['gradient-position'] . ', circle, ' . $slide->background['gradient-color-1'] . ' ' . $slide->background['gradient-color-1-location'] . '%, ' . $slide->background['gradient-color-2'] . ' ' . $slide->background['gradient-color-2-location'] . '%); background: radial-gradient(circle at ' . $slide->background['gradient-position'] . ', ' . $slide->background['gradient-color-1'] . ' ' . $slide->background['gradient-color-1-location'] . '%, ' . $slide->background['gradient-color-2'] . ' ' . $slide->background['gradient-color-2-location'] . '%); '; } } $styles['bg'] = 'style="' . $bg_background . '"'; $styles['fluid'] = ''; $styles['content'] = ''; // Accent color styles. if ( $slide->accent_color != '' ) { $styles['fluid'] = 'style="--hester-primary:' . $slide->accent_color . ';--hester-primary_15:' . hester_luminance( $slide->accent_color, .15 ) . '"'; } if ( $slide->text_color != '' ) { $styles['content'] = 'style="--hester-white:' . $slide->text_color . ';"'; } return $styles; } if ( function_exists( 'hester_section_slider' ) ) { $section_priority = apply_filters( 'hester_section_priority', 0, 'hester_section_slider' ); add_action( 'hester_before_home_order_sections', 'hester_section_slider', absint( $section_priority ) ); } themes/hester/sections/section-services.php000064400000007114147600374750015170 0ustar00options->get( 'hester_enable_services' ); $slides = hester()->options->get( 'hester_services_slides' ); $column = hester()->options->get( 'hester_services_column' ); $section_style = ''; if ( (bool) $show_section === false || empty( $slides ) ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $section_style = 'style="' . $section_style . '"'; do_action( 'hester_before_services_start' ); $sub_heading = hester()->options->get( 'hester_services_sub_heading' ); $heading = hester()->options->get( 'hester_services_heading' ); $description = hester()->options->get( 'hester_services_description' ); ?>
>
$slide ) { if ( $key == 3 ) { break; } $slide = (object) $slide; $title = $slide->add_link ? sprintf( '%2$s', esc_url_raw( $slide->link ), esc_html( $slide->title ) ) : esc_html( $slide->title ); $link = $slide->add_link ? sprintf( '', esc_url_raw( $slide->link ), esc_html( $slide->linktext ), wp_kses_post( '' ) ) : ''; ?>
icon != '' ) : ?>

description ); ?>
themes/hester/sections/section-products.php000064400000004241147600374750015206 0ustar00options->get( 'hester_enable_products' ); $section_style = ''; if ( (bool) $show_section === false ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $section_style = 'style="' . $section_style . '"'; $sub_heading = hester()->options->get( 'hester_products_sub_heading' ); $heading = hester()->options->get( 'hester_products_heading' ); $description = hester()->options->get( 'hester_products_description' ); do_action( 'hester_before_products_start' ); ?>
>
options->get( 'hester_enable_info' ); $slides = hester()->options->get( 'hester_info_slides' ); $style = hester()->options->get( 'hester_info_style' ); $column = hester()->options->get( 'hester_info_column' ); $section_style = ''; if ( (bool) $show_section === false || empty( $slides ) ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $sections = (array) json_decode( hester()->options->get( 'hester_sections_order' ) ); $classes = ''; $classes = 'is-info-init-s' . $style; if ( ! hester()->options->get( 'hester_info_overlap' ) || $sections['hester_section_info'] !== 10 ) { $classes = 'is-info-init-s' . $style . ' hester_home_section'; } $section_style = 'style="' . $section_style . '"'; $sub_heading = hester()->options->get( 'hester_info_sub_heading' ); $heading = hester()->options->get( 'hester_info_heading' ); $description = hester()->options->get( 'hester_info_description' ); do_action( 'hester_before_info_start' ); ?> themes/hester/sections/section-features.php000064400000007456147600374750015174 0ustar00options->get( 'hester_enable_features' ); $slides = hester()->options->get( 'hester_features_slides' ); $section_style = ''; if ( (bool) $show_section === false || empty( $slides ) ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $section_style = 'style="' . $section_style . '"'; do_action( 'hester_before_features_start' ); $sub_heading = hester()->options->get( 'hester_features_sub_heading' ); $heading = hester()->options->get( 'hester_features_heading' ); $description = hester()->options->get( 'hester_features_description' ); ?>
>
$slide ) { if ( $key == 4 ) { break; } $slide = (object) $slide; $title = $slide->add_link ? sprintf( '%2$s', esc_url_raw( $slide->link ), esc_html( $slide->title ) ) : esc_html( $slide->title ); $description = $slide->description ? sprintf( '
%1$s
', esc_html( $slide->description ) ) : ''; ?>
icon != '' ) : ?>

themes/hester/sections/section-extra.php000064400000002311147600374750014462 0ustar00options->get( 'hester_enable_extra' ); $page_slug = hester()->options->get( 'hester_section_extra_page' ); $page = ''; if ( '' != $page_slug ) { $page = get_page_by_path( $page_slug ); } $section_style = ''; if ( (bool) $show_section === false || $page == '' ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $section_style = 'style="' . $section_style . '"'; do_action( 'hester_before_extra_start' ); ?>
>
post_content ); } ?>
options->get( 'hester_enable_blog' ); $numberOfPosts = (int) hester()->options->get( 'hester_blog_posts_number' ); $fromCategories = hester()->options->get( 'hester_blog_posts_category' ); $args = array( 'post_type' => 'post', 'posts_per_page' => $numberOfPosts, 'suppress_filters' => 0, 'ignore_sticky_posts' => true, ); if ( ! empty( $fromCategories ) ) { $args['category_name'] = implode( ',', $fromCategories ); } $posts = new WP_Query( $args ); $section_style = ''; if ( (bool) $show_section === false || ! $posts->have_posts() ) { if ( is_customize_preview() ) { $section_style .= 'display: none;'; } else { return; } } $section_style = 'style="' . $section_style . '"'; $sub_heading = hester()->options->get( 'hester_blog_sub_heading' ); $heading = hester()->options->get( 'hester_blog_heading' ); $description = hester()->options->get( 'hester_blog_description' ); $column = hester()->options->get( 'hester_blog_column' ); do_action( 'hester_before_blog_start' ); ?>
>
have_posts() ) : while ( $posts->have_posts() ) : $posts->the_post(); ?>
$slug, 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => 1, ); $post = get_posts( $args ); if ( ! empty( $post ) ) { $page_id = $post[0]->ID; } else { // Page doesn't exist. Create one. $postargs = array( 'post_type' => 'page', 'post_name' => $slug, 'post_title' => $page_title, 'post_status' => 'publish', 'post_author' => 1, ); // Insert the post into the database $page_id = wp_insert_post( $postargs ); } return $page_id; } if ( ! function_exists( 'hester_display_customizer_shortcut' ) ) { /** * This function display a shortcut to a customizer control. * * @param string $class_name The name of control we want to link this shortcut with. * @param bool $is_section_toggle Tells function to display eye icon if it's true. */ function hester_display_customizer_shortcut( $class_name, $is_section_toggle = false, $should_return = false ) { if ( ! is_customize_preview() ) { return; } $icon = ' '; if ( $is_section_toggle ) { $icon = ''; } $data = ' '; if ( $should_return === true ) { return $data; } echo wp_kses_post( $data ); } } readme.txt000064400000004316147600374750006563 0ustar00=== Hester Core === Contributors: peregrinethemes Tags: blocks, custom blocks, widgets, demos, demo template, demo website, gutenberg, hester Requires at least: 5.0 Tested up to: 6.5 Stable tag: 1.0.8 Requires PHP: 5.6 License: GNU General Public License v2.0 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html == Description == Hester Core is an optional companion plugin for [Peregrine Themes](https://peregrine-themes.com) theme. It adds additional features such as homepage sections, widgets, blocks and a collection of pre-built websites (demos) for popular page builders and the WordPress block editor (Gutenberg). == Installation == = Automatic Installation = Automatic installation is the easiest way to install Hester Core as WordPress handles the file transfers itself. To do an automatic install of Hester Core, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New. In the search field type "Hester Core" and click Search Plugins. Once you’ve found our plugin simply click "Install Now". After the installation has finished, click the "Activate Plugin" button. = Manual Installation = 1. Upload the "hester-core.zip" folder to your "/wp-content/plugins" directory or alternatively upload the "hester-core.zip" file via the "Add New" button in WordPress plugins page. 2. Activate Hester Core. == Frequently Asked Questions == = I installed the plugin but nothing happened = Hester Core is a companion plugin for the [Peregrine Themes](https://peregrine-themes.com) theme and will only work with the theme installed and activated. == Changelog == = 1.0.8 = * BlogHash theme support added. * Widget issue fixed. = 1.0.7 = * Bloglo theme support added. = 1.0.6 = * Theme template name added. * Unnecessary code remove. * Style issues fixed. = 1.0.5 = * Fixed issues. * Hester lite layouts default value changed. * Hester lite demo update. * Hester lite hero image changed. = 1.0.4 = * Language file update. = 1.0.3 = * Added home section order default value. = 1.0.2 = * Header layout default value change. * Slider default value change. * Slider style setting added. * Tablet mode info section top spacing set. = 1.0.1 = * New demo category added = 1.0.0 = * Initial release 🚀 hester-core.php000064400000012047147600374750007516 0ustar00. * * @package Hester Core * @author Peregrine Themes * @since 1.0.0 * @license GPL-3.0+ * @copyright Copyright (c) 2022, Hester */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } // Don't allow multiple versions to be active. if ( ! class_exists( 'Hester_Core' ) ) { /** * Main Hester Core class. * * @since 1.0.0 * @package Hester Core */ final class Hester_Core { /** * Singleton instance of the class. * * @since 1.0.0 * @var object */ private static $instance; /** * Plugin version for enqueueing, etc. * * @since 1.0.0 * @var sting */ public $version = '1.0.8'; public $theme_name = 'hester'; /** * Main Hester Core Instance. * * Insures that only one instance of Hester Core exists in memory at any one * time. Also prevents needing to define globals all over the place. * * @since 1.0.0 * @return Hester_Core */ public static function instance() { if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Hester_Core ) ) { self::$instance = new Hester_Core(); self::$instance->constants(); self::$instance->load_textdomain(); self::$instance->includes(); self::$instance->objects(); $theme = wp_get_theme(); preg_match("/^([\w]+)/", $theme->template, $match); self::$instance->theme_name = strtolower( $match[0] ); add_action( 'plugins_loaded', array( self::$instance, 'objects' ), 10 ); } return self::$instance; } /** * Setup plugin constants. * * @since 1.0.0 */ private function constants() { // Plugin version. if ( ! defined( 'HESTER_CORE_VERSION' ) ) { define( 'HESTER_CORE_VERSION', $this->version ); } // Plugin Folder Path. if ( ! defined( 'HESTER_CORE_PLUGIN_DIR' ) ) { define( 'HESTER_CORE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); } // Plugin Folder URL. if ( ! defined( 'HESTER_CORE_PLUGIN_URL' ) ) { define( 'HESTER_CORE_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); } // Plugin Root File. if ( ! defined( 'HESTER_CORE_PLUGIN_FILE' ) ) { define( 'HESTER_CORE_PLUGIN_FILE', __FILE__ ); } } /** * Loads the plugin language files. * * @since 1.0.0 */ public function load_textdomain() { load_plugin_textdomain( 'hester-core', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } /** * Include files. * * @since 1.0.0 */ private function includes() { // Global includes. require_once HESTER_CORE_PLUGIN_DIR . 'core/widgets/widgets.php'; require_once HESTER_CORE_PLUGIN_DIR . 'core/admin/class-hester-core-admin.php'; if ( defined( 'WP_CLI' ) && WP_CLI ) { require_once HESTER_CORE_PLUGIN_DIR . 'core/cli/class-hester-core-cli.php'; } // theme specific inlcude $theme = wp_get_theme(); // gets the current theme if ( 'Hester' == $theme->name || 'hester' === $theme->template ) { require_once 'themes/hester/hester.php'; } } /** * Setup objects to be used throughout the plugin. * * @since 1.0.0 */ public function objects() { // Hook now that all of the Hester Core stuff is loaded. do_action( 'hester_core_loaded' ); } } /** * The function which returns the one Hester_Core instance. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object */ function hester_core() { return Hester_Core::instance(); } $theme = wp_get_theme(); if ( 'hester' === $theme->template || 'hester-pro' === $theme->template || 'blogun' === $theme->template || 'blogun-pro' === $theme->template || 'bloglo' === $theme->template || 'bloglo-pro' === $theme->template || 'bloghash' === $theme->template || 'bloghash-pro' === $theme->template ) { hester_core(); } else { add_action( 'admin_notices', 'hester_core_theme_notice' ); } /** * Display notice. * * @since 1.0.0 */ function hester_core_theme_notice() { echo '

' . __( 'Please activate one of Peregrine themes before activating Hester Core.', 'hester-core' ) . '

'; } } changelog.txt000064400000001177147600374750007257 0ustar00= 1.0.8 = * BlogHash theme support added. * Widget issue fixed. = 1.0.7 = * Bloglo theme support added. = 1.0.6 = * Theme template name added. * Unnecessary code remove. * Style issues fixed. = 1.0.5 = * Fixed issues. * Hester lite layouts default value changed. * Hester lite demo update. * Hester lite hero image changed. = 1.0.4 = * Language file update. = 1.0.3 = * Added home section order default value. = 1.0.2 = * Header layout default value change. * Slider default value change. * Slider style setting added. * Tablet mode info section top spacing set. = 1.0.1 = * New demo category added = 1.0.0 = * Initial release 🚀