{"css":"*#dm *.dmBody a.span.textonly\n{\n\tcolor:rgb(255,255,255) !important;\n}\n*#dm *.dmBody div.u_1694205906\n{\n\tbackground-color:rgba(0,0,0,0) !important;\n}\n*#dm *.dmBody div.dmPopupInner\n{\n\tbackground-color:rgb(255,255,255) !important;\n\tborder-style:solid !important;\n\tborder-width:0 !important;\n\t-webkit-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\tbox-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\t-moz-box-shadow:0 0 10px rgba(0,0,0,0.30) !important;\n\tborder-radius:10px !important;\n\t-moz-border-radius:10px !important;\n\t-webkit-border-radius:10px !important;\n\tbackground-image:none !important;\n\tbackground-repeat:no-repeat !important;\n\tbackground-size:cover !important;\n\tbackground-position:top right !important;\n}\n*#dm *.dmBody div.u_dm_content\n{\n\tbackground-image:none !important;\n}\n*#dm *.dmBody div.u_1364864902\n{\n\tline-height:normal !important;\n\tfont-family:roboto !important;\n}\n*#dm *.dmBody *.allWrapper *.dmPopupInner\n{\n\tborder-style:solid !important;\n\tborder-width:0 !important;\n\tbackground-color:rgba(229,67,54,1) !important;\n}\n*#dm *.dmBody div.u_1550745521\n{\n\tbackground-color:rgba(255,255,255,1) !important;\n}\n*#dm *.dmBody a.u_1603597726:hover\n{\n\tborder-color:rgba(79,136,59,1) !important;\n}\n*#dm *.dmBody a.u_1603597726.hover\n{\n\tborder-color:rgba(79,136,59,1) !important;\n}\n*#dm *.dmBody a.u_1603597726 span.text\n{\n\tcolor:rgba(255,255,255,1) !important;\n}\n*#dm *.dmBody a.u_1603597726\n{\n\tborder-color:rgba(255,255,255,1) !important;\n}\n","additionalWidgetCss":"/**//**//**/.pswp{display:none;position:absolute;width:100%;height:100%;left:0;top:0;overflow:hidden;-ms-touch-action:none;touch-action:none;z-index:1500;-webkit-text-size-adjust:100%;/**/-webkit-backface-visibility:hidden;outline:0}\n.pswp *{-webkit-box-sizing:border-box;box-sizing:border-box}.pswp img{max-width:none;max-height:none}/**/.pswp--animate_opacity{/**/opacity:.001;will-change:opacity;/**/-webkit-transition:opacity 333ms cubic-bezier(0.4,0,0.22,1);transition:opacity 333ms cubic-bezier(0.4,0,0.22,1)}\n.pswp--open{display:block}.pswp--zoom-allowed .pswp__img{/**/cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.pswp--zoomed-in .pswp__img{/**/cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}\n.pswp--dragging .pswp__img{/**/cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}/**/.pswp__bg{position:absolute;left:0;top:0;width:100%;height:100%;background:#000;opacity:0;-webkit-backface-visibility:hidden;will-change:opacity}\n.pswp__scroll-wrap{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}.pswp__container,.pswp__zoom-wrap{-ms-touch-action:none;touch-action:none;position:absolute;left:0;right:0;top:0;bottom:0}\n/**/.pswp__container,.pswp__img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-touch-callout:none}.pswp__zoom-wrap{position:absolute;width:100%;-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top;/**/-webkit-transition:-webkit-transform 333ms cubic-bezier(0.4,0,0.22,1);transition:transform 333ms cubic-bezier(0.4,0,0.22,1)}\n.pswp__bg{will-change:opacity;/**/-webkit-transition:opacity 333ms cubic-bezier(0.4,0,0.22,1);transition:opacity 333ms cubic-bezier(0.4,0,0.22,1)}.pswp--animated-in .pswp__bg,.pswp--animated-in .pswp__zoom-wrap{-webkit-transition:none;transition:none}\n.pswp__container,.pswp__zoom-wrap{-webkit-backface-visibility:hidden;will-change:transform}.pswp__item{position:absolute;left:0;right:0;top:0;bottom:0;overflow:hidden}.pswp__img{position:absolute;width:auto;height:auto;top:0;left:0;-webkit-transition:opacity .15s;transition:opacity .15s}\n/**/.pswp__img--placeholder{-webkit-backface-visibility:hidden}/**/.pswp__img--placeholder--blank{background:#222}.pswp--ie .pswp__img{width:100%!important;height:auto!important;left:0;top:0}/**/.pswp__error-msg{position:absolute;left:0;top:50%;width:100%;text-align:center;font-size:14px;line-height:16px;margin-top:-8px;color:#CCC}\n.pswp__error-msg a{color:#CCC;text-decoration:underline}/**//**//**//**/.pswp__button{width:44px;height:44px;position:relative;background:none;cursor:pointer;overflow:visible;-webkit-appearance:none;display:block;border:0;padding:0;margin:0;float:right;opacity:.75;-webkit-transition:opacity .2s;transition:opacity .2s;-webkit-box-shadow:none;box-shadow:none}\n.pswp__button:focus,.pswp__button:hover{opacity:1}.pswp__button:active{outline:0;opacity:.9}.pswp__button::-moz-focus-inner{padding:0;border:0}/**/.pswp__ui--over-close .pswp__button--close{opacity:1}\n.pswp__button,.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{background:url(/_dm/s/rt/scripts/vendor/photoswipe4/icons/default-skin.png) 0 0 no-repeat;background-size:264px 88px;width:44px;height:44px}\n@media(-webkit-min-device-pixel-ratio:1.1),(min-resolution:105dpi),(min-resolution:1.1dppx){/**/.pswp--svg .pswp__button,.pswp--svg .pswp__button--arrow--left:before,.pswp--svg .pswp__button--arrow--right:before{background-image:url(/_dm/s/rt/scripts/vendor/photoswipe4/icons/default-skin.svg)}\n.pswp--svg .pswp__button--arrow--left,.pswp--svg .pswp__button--arrow--right{background:none}}.pswp__button--close{background-position:0 -44px}.pswp__button--share{background-position:-44px -44px}.pswp__button--fs{display:none}\n.pswp--supports-fs .pswp__button--fs{display:block}.pswp--fs .pswp__button--fs{background-position:-44px 0}.pswp__button--zoom{display:none;background-position:-88px 0}.pswp--zoom-allowed .pswp__button--zoom{display:block}\n.pswp--zoomed-in .pswp__button--zoom{background-position:-132px 0}/**/.pswp--touch .pswp__button--arrow--left,.pswp--touch .pswp__button--arrow--right{visibility:hidden}/**/.pswp__button--arrow--left,.pswp__button--arrow--right{background:none;top:50%;margin-top:-50px;width:70px;height:100px;position:absolute}\n.pswp__button--arrow--left{left:0}.pswp__button--arrow--right{right:0}.pswp__button--arrow--left:before,.pswp__button--arrow--right:before{content:'';top:35px;background-color:rgba(0,0,0,0.3);height:30px;width:32px;position:absolute}\n.pswp__button--arrow--left:before{left:6px;background-position:-138px -44px}.pswp__button--arrow--right:before{right:6px;background-position:-94px -44px}/**/.pswp__counter,.pswp__share-modal{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}\n.pswp__share-modal{display:block;background:rgba(0,0,0,0.5);width:100%;height:100%;top:0;left:0;padding:10px;position:absolute;z-index:1600;opacity:0;-webkit-transition:opacity .25s ease-out;transition:opacity .25s ease-out;-webkit-backface-visibility:hidden;will-change:opacity}\n.pswp__share-modal--hidden{display:none}.pswp__share-tooltip{z-index:1620;position:absolute;background:#FFF;top:56px;border-radius:2px;display:block;width:auto;right:44px;-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.25);box-shadow:0 2px 5px rgba(0,0,0,0.25);-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px);-webkit-transition:-webkit-transform .25s;transition:transform .25s;-webkit-backface-visibility:hidden;will-change:transform}\n.pswp__share-tooltip a{display:block;padding:8px 12px;color:#000;text-decoration:none;font-size:14px;line-height:18px}.pswp__share-tooltip a:hover{text-decoration:none;color:#000}.pswp__share-tooltip a:first-child{/**/border-radius:2px 2px 0 0}\n.pswp__share-tooltip a:last-child{border-radius:0 0 2px 2px}.pswp__share-modal--fade-in{opacity:1}.pswp__share-modal--fade-in .pswp__share-tooltip{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}\n/**/.pswp--touch .pswp__share-tooltip a{padding:16px 12px}a.pswp__share--facebook:before{content:'';display:block;width:0;height:0;position:absolute;top:-12px;right:15px;border:6px solid rgba(0,0,0,0);border-bottom-color:#FFF;-webkit-pointer-events:none;-moz-pointer-events:none;pointer-events:none}\na.pswp__share--facebook:hover{background:#3e5c9a;color:#FFF}a.pswp__share--facebook:hover:before{border-bottom-color:#3e5c9a}a.pswp__share--twitter:hover{background:#55acee;color:#FFF}a.pswp__share--pinterest:hover{background:#CCC;color:#ce272d}\na.pswp__share--download:hover{background:#DDD}/**/.pswp__counter{position:absolute;left:0;top:0;height:44px;font-size:13px;line-height:44px;color:#FFF;opacity:.75;padding:0 10px}/**/.pswp__caption{position:absolute;left:0;bottom:0;width:100%;min-height:44px}\n.pswp__caption small{font-size:11px;color:#BBB}.pswp__caption__center{text-align:center;max-width:95%;margin:0 auto;font-size:16px;padding:10px;line-height:20px;color:#CCC;width:960px;font-weight:bold;text-align:center}\n.pswp__caption--empty{display:none}/**/.pswp__caption--fake{visibility:hidden}/**/.pswp__preloader{width:44px;height:44px;position:absolute;top:0;left:50%;margin-left:-22px;opacity:0;-webkit-transition:opacity .25s ease-out;transition:opacity .25s ease-out;will-change:opacity}\n.pswp__preloader__icn{width:20px;height:20px;margin:12px}.pswp__preloader--active{opacity:1}.pswp__preloader--active .pswp__preloader__icn{/**/background:url(/_dm/s/rt/scripts/vendor/photoswipe4/icons/preloader.gif) 0 0 no-repeat}\n.pswp--css_animation .pswp__preloader--active{opacity:1}.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn{-webkit-animation:clockwise 500ms linear infinite;animation:clockwise 500ms linear infinite}\n.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut{-webkit-animation:donut-rotate 1000ms cubic-bezier(0.4,0,0.22,1) infinite;animation:donut-rotate 1000ms cubic-bezier(0.4,0,0.22,1) infinite}\n.pswp--css_animation .pswp__preloader__icn{background:none;opacity:.75;width:14px;height:14px;position:absolute;left:15px;top:15px;margin:0}.pswp--css_animation .pswp__preloader__cut{/**/position:relative;width:7px;height:14px;overflow:hidden}\n.pswp--css_animation .pswp__preloader__donut{-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;border:2px solid #FFF;border-radius:50%;border-left-color:transparent;border-bottom-color:transparent;position:absolute;top:0;left:0;background:none;margin:0}\n@media screen and (max-width:1024px){.pswp__preloader{position:relative;left:auto;top:auto;margin:0;float:right}}@-webkit-keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}\n}@keyframes clockwise{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}\n50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}100%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes donut-rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}50%{-webkit-transform:rotate(-140deg);transform:rotate(-140deg)}\n100%{-webkit-transform:rotate(0);transform:rotate(0)}}/**//**/.pswp__ui{-webkit-font-smoothing:auto;visibility:visible;opacity:1;z-index:1550}/**/.pswp__top-bar{position:absolute;left:0;top:0;height:44px;width:100%}\n.pswp__caption,.pswp__top-bar,.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{-webkit-backface-visibility:hidden;will-change:opacity;-webkit-transition:opacity 333ms cubic-bezier(0.4,0,0.22,1);transition:opacity 333ms cubic-bezier(0.4,0,0.22,1)}\n/**/.pswp--has_mouse .pswp__button--arrow--left,.pswp--has_mouse .pswp__button--arrow--right{visibility:visible}.pswp__top-bar,.pswp__caption{background-color:rgba(0,0,0,0.5)}/**/.pswp__ui--fit .pswp__top-bar,.pswp__ui--fit .pswp__caption{background-color:rgba(0,0,0,0.3)}\n/**/.pswp__ui--idle .pswp__top-bar{opacity:0}.pswp__ui--idle .pswp__button--arrow--left,.pswp__ui--idle .pswp__button--arrow--right{opacity:0}/**/.pswp__ui--hidden .pswp__top-bar,.pswp__ui--hidden .pswp__caption,.pswp__ui--hidden .pswp__button--arrow--left,.pswp__ui--hidden .pswp__button--arrow--right{/**/opacity:.001}\n/**/.pswp__ui--one-slide .pswp__button--arrow--left,.pswp__ui--one-slide .pswp__button--arrow--right,.pswp__ui--one-slide .pswp__counter{display:none}.pswp__element--disabled{display:none!important}.pswp--minimal--dark .pswp__top-bar{background:none}/**/@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (-webkit-min-device-pixel-ratio:2.5),only screen and (min-resolution:240dpi){div.ps-toolbar div div.ps-toolbar-content{background-size:176px 88px;background-image:url(/_dm/s/rt/scripts/vendor/photoSwipe/icons@2x.png)}\n}.dmPhotoGallery{margin:10px 0;width:100%;overflow:hidden;min-height:1px;cursor:pointer}.dmPhotoGallery .dmPhotoGalleryHolder .photoGalleryThumbs .image-container{height:100%}.dmPhotoGallery .dmPhotoGalleryHolder .photoGalleryThumbs{width:58px;height:58px;margin:2px;display:inline-block;vertical-align:middle;text-align:center;overflow:hidden}\n.dmPhotoGalleryResp.dmPhotoGallery .dmPhotoGalleryHolder .photoGalleryThumbs img{box-shadow:0 0 3px #888}.dmPhotoGalleryResp.dmPhotoGallery .dmPhotoGalleryHolder .photoGalleryThumbs{margin:0;padding:10px}\n.dmPhotoGalleryHolder{font-size:0!important;text-align:center}.dmPhotoGallery .dmPhotoGalleryHolder .photoGalleryThumbs img{display:inline!important;margin:0!important;vertical-align:middle;text-align:center;position:relative}\n.dmPhotoGallery:not(.newPhotoGallery) .photoGalleryThumbs a:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-left:-1px}.dmPhotoGallery:not(.newPhotoGallery) .photoGalleryThumbs a{display:block;background-size:cover;background-position:50%;height:100%;background-repeat:no-repeat}\n.dmPhotoGallery .dmHideFromNav{display:none!important}.gallery.gallery2inArow li{width:128px!important;height:128px!important}.gallery.gallery3inArow li{width:80px!important;height:80px!important;min-width:26%}\n.dmPhotoGallery .gallery.photogalleryPaddingThumbnails li{border-style:none!important}.dmPhotoGallery .gallery.photogalleryPaddingThumbnails.gallery5inArow li{width:100%}@media(min-width:768px){.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll{background:0;border:0;padding:3px 0;font-size:16px;font-weight:700;width:auto;height:auto;color:#4d4d4d;line-height:normal;box-shadow:0 -2px 0 0;display:block;margin:40px 0;text-align:left}\n.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll span{font-size:20px;vertical-align:sub}}@media(max-width:767px){.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll{display:none;font-size:14px;font-weight:700;cursor:pointer;width:160px;text-align:center;padding:6px 0;margin:5px auto;border:1px solid #c9c9c9;color:#4d4d4d;background:#eee;background:linear-gradient(to bottom,#eee 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#dddddd',GradientType=0)}\n}.photogalleryheader:after{display:none}.dmPhotoGallery .photogalleryheaderPadding{margin-left:8px;margin-right:8px}.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs{position:relative}.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .image-container,.dmPhotoGallery:not(.newPhotoGallery)[data-image-hover-effect=true] .photoGalleryThumbs{overflow:hidden}\n.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .caption-container .caption-inner{display:block;position:relative;overflow:hidden;z-index:1;background-color:rgba(255,255,255,.9);color:#333;padding:15px;height:100%;box-sizing:content-box;display:flex;flex-direction:column;justify-content:center}\n.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .caption-container .caption-inner .caption-text,.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .caption-container .caption-inner h3{margin:0;line-height:normal;text-align:center}\n.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .caption-container .caption-inner h3{font-size:21px}.dmPhotoGallery:not(.newPhotoGallery) li.photoGalleryThumbs .caption-container .caption-inner p{font-size:14px}\n.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] .photogalleryPaddingThumbnails li.photoGalleryThumbs{margin-bottom:10px}.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] .photogalleryPaddingThumbnails li.photoGalleryThumbs .caption-container{display:block;position:absolute;top:0;left:0;width:100%;overflow:hidden;padding:inherit}\n.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] li.photoGalleryThumbs .caption-container{height:100%;width:100%;position:absolute;top:0;left:0;pointer-events:none;padding:inherit}.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] li.photoGalleryThumbs .caption-inner{box-sizing:border-box;min-height:0!important;padding:10px!important;transform:scale(1.05);opacity:0;filter:alpha(opacity=0);transition:all .3s ease-out;display:flex;flex-direction:column;justify-content:center}\n.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] li.photoGalleryThumbs.hover .caption-inner,.dmPhotoGallery:not(.newPhotoGallery)[data-text-layout=over] li.photoGalleryThumbs:hover .caption-inner{transform:scale(1);opacity:1;filter:alpha(opacity=100)}\n.dmPhotoGallery:not(.newPhotoGallery)[data-image-hover-effect=true] .photoGalleryThumbs.hover a,.dmPhotoGallery:not(.newPhotoGallery)[data-image-hover-effect=true] .photoGalleryThumbs:hover a{transform:scale(1.06)}\n.dmPhotoGallery:not(.newPhotoGallery)[data-image-hover-effect=true] .photoGalleryThumbs a{transition:all .25s ease-out}.dmPhotoGallery:not(.newPhotoGallery)[data-link-gallery=true] a{cursor:default}.dmPhotoGallery:not(.newPhotoGallery)[data-link-gallery=true] a.has-link{cursor:pointer;z-index:1px}\n#dm .dmPhotoGallery .dmPhotoGalleryHolder.photogalleryPaddingThumbnails .galleryColumn{padding:0 5px}#dm .dmPhotoGallery .dmPhotoGalleryHolder.photogalleryPaddingThumbnails .galleryColumn .photoGalleryThumbs{padding:0;background-clip:content-box;margin-bottom:10px}\n.dmPhotoGallery .caption-sub-title{font-size:12px;font-style:italic;padding:6px 0 11px}.dmPhotoGallery .caption-secondary-text{padding-top:12px}.dmPhotoGallery .banner{position:absolute;top:0;right:0;background-color:#000;padding:10px;z-index:10;margin:15px;min-width:94px;min-height:24px;font-size:12px;font-weight:700;justify-content:center;align-items:center;display:flex}\n.dmPhotoGallery[data-element-type=dSnipcartProductGalleryId] .caption-third-text{font-size:14px}.dmPhotoGallery[data-element-type=dProductGalleryId] .caption-secondary-text{padding-top:2px}.dmPhotoGallery[data-element-type=dProductGalleryId] .caption-sub-title{padding-bottom:2px}\n.dmPhotoGallery [data-type~=sold-out] .banner{background-color:#fff;color:#e61515;border:solid 1px #e61515}.dmPhotoGallery [data-type~=sold-out] .caption-button{display:none!important}.dmPhotoGallery [data-type~=on-sale] .banner{background-color:#313131;color:#fff;border:solid 1px #3b3b3b}\n.dmPhotoGallery .image-container{position:relative}.dmPhotoGallery [data-image-type=main]{background:#fff}.dmPhotoGallery [data-image-type=main]:hover{opacity:0}.dmPhotoGallery [data-image-type=additional]{position:absolute!important;z-index:-1;top:0;width:100%}\n.dmPhotoGallery [data-image-type=additional],.dmPhotoGallery [data-image-type=main]{transition:opacity 1s}.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container a.caption-link{text-decoration:none}/**/@media(min-width:768px){.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll{background:0;border:0;padding:3px 0;font-size:16px;font-weight:700;width:auto;height:auto;color:#4d4d4d;line-height:normal;box-shadow:0 -2px 0 0;display:block;margin:40px 0;text-align:left}\n.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll span{font-size:20px;vertical-align:sub}}@media(max-width:767px){.dmRoot .dmPhotoGallery:not(.newPhotoGallery) .photoGalleryViewAll{display:none;font-size:14px;font-weight:700;cursor:pointer;width:160px;text-align:center;padding:6px 0;margin:5px auto;border:1px solid #c9c9c9;color:#4d4d4d;background:#eee;background:linear-gradient(to bottom,#eee 0%,#ddd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#dddddd',GradientType=0)}\n}.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner h3,.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner p{margin:0;line-height:normal;text-align:center}\n.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner h3{font-size:21px}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner div,#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner h3,#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner p,.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner div{text-align:center}\n.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner p{font-size:14px}.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner .caption-text,.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner .caption-title{max-width:100%}\n.dmPhotoGallery.newPhotoGallery .photoGalleryThumbs .caption-container .caption-inner svg{width:20%;height:20%;fill:#000}#dm .dmPhotoGallery.newPhotoGallery.hasShadow .thumbnailInnerWrapper{box-shadow:rgba(0,0,0,.25) 0 3px 11px 0!important}\n#dm .dmPhotoGallery.newPhotoGallery.animateVisibility{opacity:1;transition:all .2s ease-out!important}#dm .dmPhotoGallery.newPhotoGallery li.transparent,#dm .dmPhotoGallery.newPhotoGallery.visibilityHidden{opacity:0}\n#dm .dmPhotoGallery.newPhotoGallery li{list-style:none}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-start;align-items:flex-start}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:left}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_left li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-start;align-items:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_center li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px auto}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-start;align-items:flex-end}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:right}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-top_right li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:center;align-items:flex-start}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:left}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_left li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:center;align-items:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_center li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px auto}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:center;align-items:flex-end}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:right}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-center_right li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-end;align-items:flex-start}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:left}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_left li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-end;align-items:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:center}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_center li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px auto}#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)),#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link{justify-content:flex-end;align-items:flex-end}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner:not(:has(>.caption-link)) p,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link div,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link h3,#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner>a.caption-link p{text-align:right}\n#dm .dmPhotoGallery.newPhotoGallery.captionAlignment-bottom_right li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px 0}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner{align-items:center;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden;z-index:1;background-color:rgba(255,255,255,.9);color:#333;padding:15px;height:100%;box-sizing:border-box}\n#dm .dmPhotoGallery.newPhotoGallery .photoGalleryViewAll{box-shadow:0 0 0 0!important;font-size:inherit!important;margin:0!important;cursor:pointer}#dm .dmPhotoGallery.newPhotoGallery .dmPhotoGalleryHolder{width:100%;padding:0;display:none}\n#dm .dmPhotoGallery.newPhotoGallery .photogallery-row{display:flex}#dm .dmPhotoGallery.newPhotoGallery .photogallery-row.photogallery-hidden-row{display:none}#dm .dmPhotoGallery.newPhotoGallery .flex-reverse{flex-direction:row-reverse}\n#dm .dmPhotoGallery.newPhotoGallery .flex{display:flex}#dm .dmPhotoGallery.newPhotoGallery .column{padding:0;flex-direction:column}#dm .dmPhotoGallery.newPhotoGallery .width-50{width:50%}#dm .dmPhotoGallery.newPhotoGallery .layout-container.classic-drops,#dm .dmPhotoGallery.newPhotoGallery .layout-container.classic-rounded,#dm .dmPhotoGallery.newPhotoGallery .layout-container.square{display:flex;width:100%;flex-direction:column}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container.classic-rounded .photoGalleryThumbs .image-container{border-radius:100%}#dm .dmPhotoGallery.newPhotoGallery .layout-container.classic-drops .photoGalleryThumbs .image-container{border-bottom-left-radius:100%;border-bottom-right-radius:100%;border-top-right-radius:100%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container.pinterest-rounded .photoGalleryThumbs .image-container{border-radius:20%}#dm .dmPhotoGallery.newPhotoGallery .layout-container.vertical-rounded .photoGalleryThumbs .image-container{border-bottom-right-radius:10%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column{display:flex;flex-direction:column;padding:0;width:100%;margin:0}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.row-direction{flex-direction:row;flex-wrap:wrap}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-1{width:100%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-2{width:50%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-3{width:33.333%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-4{width:25%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-5{width:20%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column.column-6{width:16.66667%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs{position:relative;overflow:hidden}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs .image-container{width:100%;overflow:hidden;background:url(https://dd-cdn.multiscreensite.com/runtime-img/galleryLoader.gif) no-repeat center}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs .image-container.revealed{background:0}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs .image-container a{display:flex;flex-direction:column;background-size:cover;padding-top:100%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs .image-container a img{display:none!important}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs .image-container a:focus{outline-offset:-2px}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.asymetric3-long-image .image-container{width:100%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.asymetric3-long-image .image-container a{padding-top:50%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.pinterest-high .image-container a{padding-top:125%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.pinterest-low .image-container a{padding-top:75%}\n#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.panoramic-height .image-container a{padding-top:25%}#dm .dmPhotoGallery.newPhotoGallery .layout-container .photogallery-column .photoGalleryThumbs.vertical-height .image-container a{padding-top:200%}\n#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs{position:relative}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .thumbnailInnerWrapper{overflow:hidden;transform:translateZ(0)}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .image-container{overflow:hidden}\n#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .image-container a{background-repeat:no-repeat;background-position:center}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner .rteBlock{font-size:14px}\n#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner .caption-button{margin:10px auto;pointer-events:all;max-width:100%}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner .caption-button .text{padding:10px 20px!important}\n#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner .caption-button.displayNone{display:none}#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner:has(>.caption-link){padding-block:0}\n#dm .dmPhotoGallery.newPhotoGallery li.photoGalleryThumbs .caption-container .caption-inner:has(>.caption-link) .caption-link{width:100%;height:100%;padding-block:15px;display:flex;flex-direction:column}\n#dm .dmPhotoGallery.newPhotoGallery.text-layout-fixed li.photoGalleryThumbs .caption-container{position:absolute;left:0;pointer-events:none;right:0;top:0;bottom:0;margin:auto}#dm .dmPhotoGallery.newPhotoGallery.text-layout-fixed li.photoGalleryThumbs .caption-container .caption-inner{background-color:rgba(255,255,255,.5)}\n#dm .dmPhotoGallery.newPhotoGallery.text-layout-over .photogalleryPaddingThumbnails li.photoGalleryThumbs{margin-bottom:10px}#dm .dmPhotoGallery.newPhotoGallery.text-layout-over .photogalleryPaddingThumbnails li.photoGalleryThumbs .caption-container{display:block;position:absolute;top:0;left:0;width:100%;overflow:hidden;padding:inherit}\n#dm .dmPhotoGallery.newPhotoGallery.text-layout-over li.photoGalleryThumbs .caption-container{height:100%;width:100%;position:absolute;top:0;left:0;pointer-events:none;padding:inherit}#dm .dmPhotoGallery.newPhotoGallery.text-layout-over li.photoGalleryThumbs .caption-inner{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;min-height:0!important;padding:10px;transform:scale(1.05);opacity:0;filter:alpha(opacity=0);transition:all .3s ease-out}\n#dm .dmPhotoGallery.newPhotoGallery.text-layout-over li.photoGalleryThumbs.hover .caption-inner,#dm .dmPhotoGallery.newPhotoGallery.text-layout-over li.photoGalleryThumbs:hover .caption-inner{transform:scale(1);opacity:1;filter:alpha(opacity=100)}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=zoomout] .photoGalleryThumbs .image-container{-webkit-mask-image:-webkit-radial-gradient(#fff,#000)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=zoomout] .photoGalleryThumbs .image-container a{transition:all .2s ease-out}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=zoomout] .photoGalleryThumbs:hover .image-container a{transform:scale(1.06)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=grayscale] .photoGalleryThumbs .image-container a{filter:grayscale(0%);transition:.2s ease-in-out}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=grayscale] .photoGalleryThumbs:hover .image-container a{filter:grayscale(100%)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=reverse-grayscale] .photoGalleryThumbs .image-container a{filter:grayscale(100%);filter:gray;transition:.2s ease-in-out}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=reverse-grayscale] .photoGalleryThumbs:hover .image-container a{filter:grayscale(0%)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=blur] .photoGalleryThumbs .image-container a{filter:blur(0);transition:.2s ease-in-out}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=blur] .photoGalleryThumbs:hover .image-container a{filter:blur(3px)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=grayscale-blur] .photoGalleryThumbs .image-container a{filter:grayscale(0%) blur(0);transition:.2s ease-in-out}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=grayscale-blur] .photoGalleryThumbs:hover .image-container a{filter:grayscale(100%) blur(3px)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=opacity] .photoGalleryThumbs .image-container a{transition:.2s ease-in-out;opacity:1}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=opacity] .photoGalleryThumbs:hover .image-container a{opacity:.7}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=shine] .photoGalleryThumbs .image-container a{position:relative}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=shine] .photoGalleryThumbs:hover .image-container a::after{opacity:1;transform:translate(0)}#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=shine] .photoGalleryThumbs .image-container a::after{content:'';position:absolute;top:0;left:0;width:200%;height:200%;opacity:0;transition-property:transform;transition-duration:.4s;transition-timing-function:ease;transform:translate(-50%,-50%);background:rgba(255,255,255,.13);background:linear-gradient(135deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.13) 48%,rgba(255,255,255,.5) 57%,rgba(255,255,255,0) 64%,rgba(255,255,255,0) 100%)}\n#dm .dmPhotoGallery.newPhotoGallery[data-link-gallery=true] .image-container a{cursor:default}#dm .dmPhotoGallery.newPhotoGallery[data-link-gallery=true] .image-container a.has-link{cursor:pointer;z-index:1px}\n#dm .dmPhotoGallery.newPhotoGallery .galleryColumn{padding:0 5px}#dm .dmPhotoGallery.newPhotoGallery .galleryColumn .photoGalleryThumbs{padding:0;background-clip:content-box;margin-bottom:10px}#dm .dmPhotoGallery.newPhotoGallery .rteBlock li{list-style-type:inherit}\n#dm .dmPhotoGallery.newPhotoGallery[data-image-hover-effect=shine] .photoGalleryThumbs:active .image-container a::after,#dm .dmPhotoGallery.newPhotoGallery[data-instagram] .data-binding-indicator{opacity:0}\n#dm .dmPhotoGallery.newPhotoGallery[data-instagram] .caption-container,#dm .dmPhotoGallery.newPhotoGallery[data-instagram] .caption-inner{pointer-events:none}#dm .dmPhotoGallery.newPhotoGallery[data-instagram][data-show-image-captions=true] .caption-container .caption-inner .caption-text{font-size:14px;word-break:break-word}\n#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) li.photoGalleryThumbs .caption-container{display:block;position:absolute;top:0;left:0;width:100%;height:100%!important;overflow:hidden;padding:inherit}\n#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) li.photoGalleryThumbs.hover .caption-inner,#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) li.photoGalleryThumbs:hover .caption-inner{background-color:rgba(255,255,255,.25)}\n#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) .caption-container .caption-inner{background-color:transparent}#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) .caption-container .caption-inner .caption-text,#dm .dmPhotoGallery.newPhotoGallery[data-instagram]:not([data-show-image-captions=true]) .caption-container .caption-inner .caption-title{display:none}/**/.dmNewParagraph[data-version]{line-height:initial}.dmNewParagraph[data-version] .text-align-left{text-align:left!important}.dmNewParagraph[data-version] .text-align-center{text-align:center!important}\n.dmNewParagraph[data-version] .text-align-right{text-align:right!important}.dmNewParagraph[data-version] .text-align-justify{text-align:justify!important}.dmNewParagraph[data-version] .ql-indent-1{padding:0 1em;padding-inline-end:0;padding-inline-start:3em}\n.dmNewParagraph[data-version] .ql-indent-2{padding:0 2em;padding-inline-end:0;padding-inline-start:6em}.dmNewParagraph[data-version] .ql-indent-3{padding:0 3em;padding-inline-end:0;padding-inline-start:9em}\n.dmNewParagraph[data-version] .ql-indent-4{padding:0 4em;padding-inline-end:0;padding-inline-start:12em}.dmNewParagraph[data-version] .ql-indent-5{padding:0 5em;padding-inline-end:0;padding-inline-start:15em}\n.dmNewParagraph[data-version] .ql-indent-6{padding:0 6em;padding-inline-end:0;padding-inline-start:18em}.dmNewParagraph[data-version] .ql-indent-7{padding:0 7em;padding-inline-end:0;padding-inline-start:21em}\n.dmNewParagraph[data-version] .ql-indent-8{padding:0 8em;padding-inline-end:0;padding-inline-start:24em}.dmNewParagraph[data-version] .ql-indent-9{padding:0 9em;padding-inline-end:0;padding-inline-start:27em}\n.dmNewParagraph[data-version] h1,.dmNewParagraph[data-version] h2,.dmNewParagraph[data-version] h3,.dmNewParagraph[data-version] h4,.dmNewParagraph[data-version] h5,.dmNewParagraph[data-version] h6,.dmNewParagraph[data-version] ol,.dmNewParagraph[data-version] p,.dmNewParagraph[data-version] ul{margin-top:0;margin-bottom:0}\n.dmNewParagraph[data-version] ol,.dmNewParagraph[data-version] ul{padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.dmNewParagraph[data-version] ol>li,.dmNewParagraph[data-version] ul>li{list-style-type:none;text-indent:-1.5em;margin:0 1em;margin-inline-end:0;margin-inline-start:2em}\n.dmNewParagraph[data-version] ol>li:before,.dmNewParagraph[data-version] ul>li:before{min-width:1em;display:inline-block;margin-right:.5em;margin-inline-start:0;margin-inline-end:.5em;text-align:right;text-align:end}\n.dmNewParagraph[data-version] ul .ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-1}.dmNewParagraph[data-version] ul .ql-indent-1:before{font-weight:700;content:'\\25CB'}\n.dmNewParagraph[data-version] ul .ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-2}.dmNewParagraph[data-version] ul .ql-indent-2:before,.dmNewParagraph[data-version] ul .ql-indent-3:before,.dmNewParagraph[data-version] ul .ql-indent-4:before,.dmNewParagraph[data-version] ul .ql-indent-5:before,.dmNewParagraph[data-version] ul .ql-indent-6:before,.dmNewParagraph[data-version] ul .ql-indent-7:before,.dmNewParagraph[data-version] ul .ql-indent-8:before,.dmNewParagraph[data-version] ul .ql-indent-9:before{font-weight:700;content:'\\25A0'}\n.dmNewParagraph[data-version] ul .ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-3}.dmNewParagraph[data-version] ul .ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9;counter-increment:list-4}\n.dmNewParagraph[data-version] ul .ql-indent-5{counter-reset:list-6 list-7 list-8 list-9;counter-increment:list-5}.dmNewParagraph[data-version] ul .ql-indent-6{counter-reset:list-7 list-8 list-9;counter-increment:list-6}\n.dmNewParagraph[data-version] ul .ql-indent-7{counter-reset:list-8 list-9;counter-increment:list-7}.dmNewParagraph[data-version] ul .ql-indent-8{counter-reset:list-9;counter-increment:list-8}.dmNewParagraph[data-version] ul .ql-indent-9{counter-reset:list-10 list-9;counter-increment:list-9}\n.dmNewParagraph[data-version] ul>li:before{font-weight:700;content:'\\2022';font-family:Arial}.dmNewParagraph[data-version] ul.custom-list-1>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"○\";transform:scale(1);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-2>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"★\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-3>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"➞\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-4>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"+\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-5>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"-\";transform:scale(.7);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-6>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"✓\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ul.custom-list-7>li:not([class^=ql-indent-]):not([class*=' ql-indent-']):before{content:\"✗\";transform:scale(.8);transform-origin:center right}\n.dmNewParagraph[data-version] ol .ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-1}.dmNewParagraph[data-version] ol .ql-indent-1:before{content:counter(list-1,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-2}.dmNewParagraph[data-version] ol .ql-indent-2:before{content:counter(list-2,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-3}.dmNewParagraph[data-version] ol .ql-indent-3:before{content:counter(list-3,decimal) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9;counter-increment:list-4}.dmNewParagraph[data-version] ol .ql-indent-4:before{content:counter(list-4,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-5{counter-reset:list-6 list-7 list-8 list-9;counter-increment:list-5}.dmNewParagraph[data-version] ol .ql-indent-5:before{content:counter(list-5,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-6{counter-reset:list-7 list-8 list-9;counter-increment:list-6}.dmNewParagraph[data-version] ol .ql-indent-6:before{content:counter(list-6,decimal) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-7{counter-reset:list-8 list-9;counter-increment:list-7}.dmNewParagraph[data-version] ol .ql-indent-7:before{content:counter(list-7,lower-alpha) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-8{counter-reset:list-9;counter-increment:list-8}.dmNewParagraph[data-version] ol .ql-indent-8:before{content:counter(list-8,lower-roman) \". \"}\n.dmNewParagraph[data-version] ol .ql-indent-9{counter-reset:list-10 list-9;counter-increment:list-9}.dmNewParagraph[data-version] ol .ql-indent-9:before{content:counter(list-9,decimal) \". \"}\n.dmNewParagraph[data-version] ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-0}.dmNewParagraph[data-version] ol li:before{content:counter(list-0,decimal) \". \"}\n.dmNewParagraph[data-version] a{vertical-align:initial}@media(min-width:768px) and (max-width:1024px){.dmNewParagraph[data-version] .t-text-align-left{text-align:left!important}.dmNewParagraph[data-version] .t-text-align-center{text-align:center!important}\n.dmNewParagraph[data-version] .t-text-align-right{text-align:right!important}.dmNewParagraph[data-version] .t-text-align-justify{text-align:justify!important}}@media(max-width:767px){.dmRoot .dmNewParagraph[data-version] .m-text-align-left{text-align:left!important}\n.dmRoot .dmNewParagraph[data-version] .m-text-align-center{text-align:center!important}.dmRoot .dmNewParagraph[data-version] .m-text-align-right{text-align:right!important}.dmRoot .dmNewParagraph[data-version] .m-text-align-justify{text-align:justify!important}\n}.inlineBindingLink{color:inherit!important;text-decoration:inherit!important}/**/@media(max-width:767px){body.dmRoot div[dmtemplateid]:not([dmtemplateid=SlideRightTopFloatM]) .dmHeader .multilingualWidget{position:absolute;top:14px;left:13px;margin-top:0}body.dmRoot div[dmtemplateid][dmtemplateid=SlideRightTopFloatM] .dmHeader .multilingualWidget{position:absolute;top:5px;right:17px}\n}@media(min-width:768px) and (max-width:1024px){body:not(.responsiveTablet) #dm div[dmtemplateid=StandardLayoutMultiT] .dmHeader .multilingualWidget{position:absolute!important;top:5px!important;right:17px!important;left:initial!important}\n}@media(max-width:767px){body.dmRoot .dmHeader .displayHidden-inner .multilingualWidget{top:0!important}}#dm_content div.dmRespCol div.multilingualWidget,#hcontainer div.dmRespCol div.multilingualWidget{width:auto!important;display:table!important}\n.multilingualWidget{clear:both;margin:0;vertical-align:top;display:table!important;font-size:0;font-family:sans-serif}.multilingualWidget.displayNone{display:none!important}.multilingualWidget>div{position:relative}\n.multilingualWidget .language{color:#888;display:inline-block}.multilingualWidget .language a{text-align:center;display:inline-block;color:inherit;border:#dadada 1px solid;background-color:#fff}.multilingualWidget .language a img{width:24px;height:26px;min-width:24px;min-height:26px}\n.multilingualWidget .language a span{display:none;line-height:initial}.multilingualWidget .language a span.name{margin-top:5px;margin-left:7px;font-size:13px;font-weight:400;text-transform:capitalize}\n.multilingualWidget .language a span.short-label{font-size:13px}.multilingualWidget .language a:after{line-height:initial}.multilingualWidget.open .current-language a:after{transform:rotate(-180deg)}.multilingualWidget .current-language a:after{transition:transform .2s}\n.multilingualWidget.dropdown .language{width:100%}.multilingualWidget.dropdown .language a{display:block;padding:1px 5px}.multilingualWidget.dropdown .other-languages{position:absolute;z-index:800}.multilingualWidget.dropdown .other-languages a{border-top:0!important}\n.multilingualWidget.dropdown .current-language{position:relative}.multilingualWidget.dropdown .current-language span.name{padding-right:25px}.multilingualWidget.dropdown .dm-icon{font-size:9px;display:inline-block;position:absolute;top:46%;transform:translateY(-50%);transition:transform .2s;right:8px}\n.multilingualWidget.dropdown.open .dm-icon{transform:rotate(-180deg) translateY(50%)}.multilingualWidget.dropdown .other-languages,.multilingualWidget.dropdown.flag-only .dm-icon,.multilingualWidget.inline span,.multilingualWidget.no-flag a img{display:none}\n.multilingualWidget.dropdown.flag-only a{border:transparent 1px solid;background-color:transparent}.multilingualWidget.dropdown.flag-only.open .language a{background-color:rgba(0,0,0,.3);border:#dadada 1px solid}\n.multilingualWidget.dropdown.long-label a{text-align:left;padding:2px 0 2px 5px;position:relative;box-sizing:border-box}.multilingualWidget.dropdown.long-label a span.name,.multilingualWidget.inline.flag-only .language,.multilingualWidget.inline.short-label.no-flag span.short-label{display:inline-block}\n.multilingualWidget.dropdown.long-label.no-flag a{padding:7px 10px 9px}.multilingualWidget.dropdown.long-label.no-flag a span.name,.multilingualWidget.dropdown.short-label.no-flag a span.short-label{margin:0;display:inline-block}\n.multilingualWidget.dropdown.short-label.no-flag a{padding:8px 22px 9px 10px;font-size:13px;height:32px;box-sizing:border-box}.multilingualWidget.dropdown.short-label.no-flag .current-language a:after{top:12px}\n.multilingualWidget.short-label span.short-label{text-transform:uppercase}.multilingualWidget.inline.flag-only a{padding:2px 5px;height:32px;box-sizing:border-box}.multilingualWidget.inline.flag-only .current-language a{box-shadow:inset 0 0 8px 0 rgba(0,0,0,.6);border-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}\n.multilingualWidget.inline.flag-only .other-languages a:not(:last-child){border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.flag-only .dm-icon,.multilingualWidget.inline.short-label.no-flag .dm-icon{display:none}\n.multilingualWidget.inline.short-label.no-flag .current-language a{padding-right:0;border-right-width:0!important;border-right-color:transparent!important;border-right-style:none!important}.multilingualWidget.inline.short-label.no-flag .current-language a span.short-label{font-weight:700}\n.multilingualWidget.inline.short-label.no-flag .other-languages a{border-left-color:transparent!important;border-left-width:0!important;border-left-style:none!important}.multilingualWidget.inline.short-label.no-flag .other-languages a:not(:last-child){padding-right:0;border-right-color:transparent!important;border-right-width:0!important;border-right-style:none!important}\n.multilingualWidget.inline.short-label.no-flag a{position:relative;padding:8px 10px;font-size:13px;height:32px;text-decoration:none}.multilingualWidget.inline.short-label.no-flag a:after{content:'/';position:absolute;top:8px;right:-7px;z-index:1;pointer-events:none}\n.multilingualWidget.inline.short-label.no-flag a:hover .short-label{text-decoration:underline}.multilingualWidget.inline.short-label.no-flag .other-languages a:last-child:after{content:''}/**/.imageWidget{position:relative}.imageWidget a,.imageWidget span.image-caption{font-style:italic;text-align:center}.imageWidget a[data-caption]::after,.imageWidget span[data-caption]::after{content:attr(data-caption);display:block;line-height:100%}\n.imageWidget.with-caption a::after,.imageWidget.with-caption span.image-caption::after{margin-top:12px}.imageWidget img[width][height]{height:auto}[data-flex-site] #fcontainer .imageWidget:after,[data-flex-site] #flex-footer .imageWidget:after,[data-flex-site] #flex-header .imageWidget:after{content:none}\n[data-flex-site] #fcontainer .imageWidget:before,[data-flex-site] #flex-footer .imageWidget:before,[data-flex-site] #flex-header .imageWidget:before{font-size:80px;transform:none}.imageWidget.hover img.hover-image,.imageWidget:hover img.hover-image{display:initial}\n.imageWidget.hover.hasHover img:not(.hover-image),.imageWidget:hover.hasHover img:not(.hover-image){display:none!important}.imageWidget img.hover-image{display:none}/**/.graphicWidget{width:200px;height:200px;margin:10px auto;text-align:center}.graphicWidget svg.svg{width:100%;height:100%;color:#000;fill:#000}.graphicWidgetV2{width:60px;height:60px}.graphicWidgetV3{font-size:0}","isHomePage":false,"customwidgetsdata":[{"widgetId":"7b6cfbac88324cffbaaf57354cd7a334","version":219,"js":"dmFyIGVtcHR5TGlzdFBsYWNlSG9sZGVyPSI8c3BhbiBzdHlsZT0nbWluLWhlaWdodDoyMHB4JyBjbGFzcz0nZWRpdG9yT25seUluZm8gaW5FZGl0b3InIGRhdGEtbm9zbmlwcGV0PlRoaXMgbGlzdCBoYXMgbm8gZGF0YSBpbiBZZXh0LiBUaGlzIG1lc3NhZ2Ugb25seSBhcHBlYXJzIGluIHRoZSBlZGl0b3IuPC9zcGFuPiIKCi8qIGZpbmQgeWV4dCBzcmMgKi8KdmFyIGZpbmRZZXh0U3JjID0gZnVuY3Rpb24oKXsKICAgIHZhciAga2V5RXhwID0gbmV3IFJlZ0V4cCgvc3JjPSIoLio/KSIvKTsKICAgIGlmIChkYXRhLmNvbmZpZy5zY3JpcHQuaW5jbHVkZXMoJ2xvY2F0aW9uX2lkJykpIHsKICAgICAgICBkYXRhLmNvbmZpZy5zY3JpcHQgPSBkYXRhLmNvbmZpZy5zY3JpcHQucmVwbGFjZSgnbG9jYXRpb25faWQnLCAnZW50aXR5X2lkJyk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0ga2V5RXhwLmV4ZWMoZGF0YS5jb25maWcuc2NyaXB0KTsKICAgIGlmKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID09IDIpewogICAgICAgIHdpbmRvdy55ZXh0U2NyaXB0U3JjPXJlc3VsdFsxXTsKICAgICAgICByZXR1cm4gcmVzdWx0WzFdOwogICAgfWVsc2V7CiAgICAgICAgcmV0dXJuIHdpbmRvdy55ZXh0U2NyaXB0U3JjOwogICAgfQp9Cgp3aW5kb3cueWV4dExvYWRlZENhbGxiYWNrID0gZnVuY3Rpb24oeWV4dERhdGEpIHsKICAgICQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gdHJ1ZTsKICAgIAogICAgaWYoeWV4dERhdGEpIHsKICAgICAgICB3aW5kb3cuX3lleHREYXRhID0geWV4dERhdGE7ICAgIAogICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAiWWV4dCBsb2FkZWQgYnV0IG5vIGRhdGEgd2FzIHBhc3NlZCI7CiAgICB9Cn0KCmZ1bmN0aW9uIGxvYWRZZXh0U2NyaXB0KHNyYyl7CiAgICAkKGVsZW1lbnQpLmZpbmQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB2YXIgeWV4dFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkLXlleHQtc2NyaXB0Jyk7CiAgICBpZiAoeWV4dFNjcmlwdCkgewogICAgICAgIHlleHRTY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh5ZXh0U2NyaXB0KTsKICAgIH0KICAgIHlleHRTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgIHlleHRTY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICB5ZXh0U2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIAogICAgc3JjICs9ICImY2FsbGJhY2s9eWV4dExvYWRlZENhbGxiYWNrIgogICAgCiAgICB5ZXh0U2NyaXB0LnNyYyA9IHNyYzsKICAgIHlleHRTY3JpcHQuaWQgPSAnZC15ZXh0LXNjcmlwdCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHlleHRTY3JpcHQpOwp9CgovKiBsb2FkIHlleHQgc2NyaXB0ICovCnZhciBsb2FkWWV4dCA9IGZ1bmN0aW9uKGZvcmNlUmVmcmVzaCkgewogICAgLy8gTWFrZSBzdXJlIHdlIGNhbGwgWWV4dCBvbmx5IG9uY2UKICAgIGlmKHdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQgJiYgIWZvcmNlUmVmcmVzaCl7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBzdGFydEludGVydmFsVG9XYWl0QW5kTG9hZFdpZGdldHMoZGF0YS5jb25maWcudHlwZSk7CiAgICAKICAgIC8vIFdlIGV4dHJhY3QgdGhlICJzcmMiIGF0dHJpYnV0ZSBmcm9tIHRoZSBzdHJpbmcgcHJvdmlkZWQgaW5hICBzYWZlIHdheQogICAgLy8gVGhlIGZvcm1hdCB3ZSBleHBlY3QgaXMgdGhlIGZvbGxvd2luZzoKICAgCiAgICB0cnl7CiAgICAgICAgdmFyIHNyYyA9IGZpbmRZZXh0U3JjKCk7CiAgICAgICAgaWYoc3JjKXsKCiAgICAgICAgICAgIGxvYWRZZXh0U2NyaXB0KHNyYyk7CiAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSBpZihkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgICAgIC8vICQoZG9jdW1lbnQpLmxvYWQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gICAgIGlmKCF3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIC8vICAgICAgICAgJChlbGVtZW50KS5maW5kKCcud3JvbmdTY3JpcHRFcnJvcicpLmFkZENsYXNzKCdoYXNFcnJvcicpOyAgICAKICAgICAgICAgICAgLy8gICAgIH0KICAgICAgICAgICAgLy8gfSkKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5hZGRDbGFzcygnaGFzRXJyb3InKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICB9IGNhdGNoKGV4cCkgewogICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0JykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgY29uc29sZS5sb2coZXhwKQogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICBpZigkKCcubXVsdGlwbGVZZXh0RXJyb3InKS5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLm11bHRpcGxlWWV4dEVycm9yJykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfWVsc2UgaWYoZGF0YS5jb25maWcudHlwZSA9PT0gJ25vbmUnKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcuZWRpdG9yT25seUluZm8nKS5hZGRDbGFzcygnaW5FZGl0b3InKTsgCiAgICAgICAgfQogICAgfQp9CgovKiByZWZyZXNoIHlleHQgc2NyaXB0ICovCndpbmRvdy5yZWZyZXNoWWV4dCA9IGZ1bmN0aW9uKCl7CiAgICBsb2FkWWV4dCh0cnVlKTsKfQoKLy9mdW5jdGlvbiBmb3IgT21uaXR1cmUgdHJhY2tpbmcKd2luZG93Ll90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICBpZih0eXBlb2YoSEFGKT09PSJvYmplY3QiKXsKICAgICAgICBIQUYuT21UcmFja2luZy5vbkNNQ2xpY2soZXZlbnROYW1lKSAKICAgIH0KICAgIHJldHVybjsKfQoKLyogZHJhdyB5ZXh0IG1hcCAqLwp2YXIgZHJhd01hcCA9IGZ1bmN0aW9uKHlleHREYXRhKXsKICAgIHZhciB6b29tID0gZGF0YS5jb25maWcubWFwWm9vbTsKICAgIHZhciB5RGF0YSA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXM7CiAgICB2YXIgYWRkcmVzc1F1ZXJ5ID0geURhdGFbJ2FkZHJlc3MxJ10gKyAiICIgKyB5RGF0YVsnYWRkcmVzczInXSArICIgIiArIHlEYXRhWydjaXR5J10gKyAiICIgKyB5RGF0YVsnc3RhdGUnXSArICIgIiArIHlEYXRhWyd6aXAnXTsKICAgIGRtQVBJLmRyYXdNYXAoe2FkZHJlc3NRdWVyeTogYWRkcmVzc1F1ZXJ5LCB6b29tOiB6b29tLCBjb250YWluZXI6ICQoZWxlbWVudCkuZmluZCgnLnlleHRNYXAnKX0pOwp9CgoKCnZhciBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uKG51bSxjYikgewogICAgaWYgKCFjYikKICAgICAgICBjYiA9IGZ1bmN0aW9uKCl7cmV0dXJufQogICAgaWYoZGF0YS5jb25maWcuZm9ybWF0UGhvbmUpeyAKICAgICAgICB2YXIgczIgPSAoIiIrbnVtKS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgdmFyIG0gPSBzMi5tYXRjaCgvXihcZHszfSkoXGR7M30pKFxkezR9KSQvKTsKICAgICAgICB2YXIgZm9ybWF0dGVkID0gICghbSkgPyBudWxsIDogIigiICsgbVsxXSArICIpICIgKyBtWzJdICsgIi0iICsgbVszXTsKICAgICAgICBjYihmb3JtYXR0ZWQpOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9IGVsc2UgewogICAgICAgIGNiKG51bSk7CiAgICAgICAgcmV0dXJuIG51bTsKICAgIH0KfQoKdmFyIGRpc3BsYXlUZXh0ZExpc3QgPSBmdW5jdGlvbih0eXBlLHlleHREYXRhLGZpcnN0T25seSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICBpZih5ZXh0QXR0ICYmIEFycmF5LmlzQXJyYXkoeWV4dEF0dCkpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHlleHRBdHRbaV0gPT09ICdBbmRyb2lkIFBheScpIHsKICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT5Hb29nbGUgUGF5PC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dEF0dC5zcGxpdCgiLCAiKTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KICAgIAogICAgCn0KCnZhciAgZGlzcGxheVNwZWNpYWx0aWVzID0gZnVuY3Rpb24oeWV4dERhdGEpewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0KICAgIH0gZWxzZSBpZiAoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sic3BlY2lhbGl0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWxpdGllcyJdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKHlleHRBdHQpIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlIb3VycyA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICB2YXIgaW5kZXhFbmREYXkgPSB5ZXh0QXR0W2ldLmxhc3RJbmRleE9mKCdkYXkgJykgKyAzOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIAogICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImxlZnQiPicgKyBsZWZ0U2lkZSArICc8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodCI+JyArIHJpZ2h0U2lkZSArICc8L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICAKICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgCiAgICB9IGVsc2UgaWYoeWV4dEF0dCkgeyAKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICBpZigoL1xzLy50ZXN0KHlleHRBdHRbaV0pKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgeWV4dEF0dFtpXSA9IHlleHRBdHRbaV0gKyAnIC0gJyArIHlleHRBdHRbaSsxXQogICAgICAgICAgICAgICAgeWV4dEF0dC5zcGxpY2UoaSsxLCAxKQogICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoeWV4dEF0dFtpXS5pbmNsdWRlcygnZGF5JykgPT09IGZhbHNlICl7CiAgICAgICAgICAgICAgICB2YXIgbGVmdFNpZGUgPSAnICc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldCiAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbmRleEVuZERheSA9IHlleHRBdHRbaV0ubGFzdEluZGV4T2YoJ2RheSAnKSArIDM7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0ibGVmdCI+JyArIGxlZnRTaWRlICsgJzwvZGl2PjxkaXYgY2xhc3M9InJpZ2h0Ij4nICsgcmlnaHRTaWRlICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheU9wZW5Ib3VycyA9IGZ1bmN0aW9uKHR5cGUsIHlleHREYXRhKXsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbJ3RpbWV6b25lJ10pewogICAgICAgIHZhciB6b25lID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sndGltZXpvbmUnXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgem9uZSA9IGZhbHNlCiAgICB9CiAgICAKICAgIGlmKHpvbmUpewogICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygiZW4tVVMiLCB7dGltZVpvbmU6IHpvbmV9KTsKICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSh0aW1lICk7CiAgICAgICAgCiAgICAgICAgdmFyIHRoaXJ0eU1pbnMgPSAzMCAqIDYwICogMTAwMAoKICAgICAgICB2YXIgZGF5cyA9IFsnc3VuZGF5JywnbW9uZGF5JywndHVlc2RheScsJ3dlZG5lc2RheScsJ3RodXJzZGF5JywnZnJpZGF5Jywnc2F0dXJkYXknXTsKICAgICAgICB2YXIgZGF5c1Nob3J0ID0gWydTdW4nLCdNb24nLCdUdWVzJywnV2VkJywnVGh1cnMnLCdGcmknLCdTYXQnXTsKCiAgICAgICAgdmFyIGRheSA9IGRheXNbdG9kYXkuZ2V0RGF5KCldOwogICAgICAgIHZhciBob3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgICB2YXIgbWluID0gdG9kYXkuZ2V0TWludXRlcygpOwogICAgICAgIHZhciBkZCA9ICgiMCIgKyB0b2RheS5nZXREYXRlKCkpLnNsaWNlKC0yKTsKICAgICAgICB2YXIgbW0gPSAoIjAiICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpCiAgICAgICAgdmFyIHl5eXkgPSB0b2RheS5nZXRGdWxsWWVhcigpOwogICAgICAgIHZhciB0b2RheURhdGUgPSB5eXl5ICsgJy0nICsgbW0gKyAnLScgKyBkZAogICAgICAgIHZhciBtbSA9IG1tIC0gMSAKICAgICAgICAKICAgICAgICBjb25zdCB0b21vcnJvdyA9IG5ldyBEYXRlKHRvZGF5KQogICAgICAgIHRvbW9ycm93LnNldERhdGUodG9tb3Jyb3cuZ2V0RGF0ZSgpICsgMSkKICAgICAgICB2YXIgbW1UbXcgID0gKCIwIiArICh0b21vcnJvdy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKQogICAgICAgIHZhciBkZFRtdyA9ICgiMCIgKyB0b21vcnJvdy5nZXREYXRlKCkpLnNsaWNlKC0yKQogICAgICAgIHZhciB5eXl5VG13ID0gdG9tb3Jyb3cuZ2V0RnVsbFllYXIoKTsKICAgICAgICB2YXIgbmV4dERheSA9IGRheXNbdG9tb3Jyb3cuZ2V0RGF5KCldCiAgICAgICAgdmFyIHRvbW1vcnJvdyA9IHl5eXlUbXcgKyAnLScgKyBtbVRtdyArICctJyArIGRkVG13CiAgICAgICAgdmFyIG1tVG13ID0gbW1UbXcgLSAxCiAgICB9CgogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XQogICAgICAgIGlmICh5ZXh0QXR0ID09PSAiQ2xvc2VkIil7CiAgICAgICAgICAgIHlleHRBdHQgPSBmYWxzZQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICAvL2NoZWNrIGlmIGRheSBpcyBjbG9zZWQKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZSArICcuJyArIGRheSArICcuaXNDbG9zZWQnXSA9PT0gdHJ1ZSkgeyAKICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgfQogICAgCiAgICAvL2NvbGxlY3RzIGJ1c2luZXNzIGhvbGlkYXkgaG91cnMgCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLmhvbGlkYXlIb3VycyddKXsKICAgICAgICB2YXIgaG9saWRheUhvdXJzID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy5ob2xpZGF5SG91cnMnXQogICAgfSBlbHNlewogICAgICAgICB2YXIgaG9saWRheUhvdXJzID0gZmFsc2UKICAgIH0KICAgIAogICAgLy9nZXRzIG5leHQgZGF5cyBzdGFydCB0aW1lCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBuZXh0RGF5ICsgJy5pc0Nsb3NlZCddID09PSB0cnVlKXsKICAgICAgICB2YXIgdG9tb3Jyb3dPcGVuID0gZmFsc2UKICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvbW9ycm93T3BlbiA9IHRydWUKICAgICAgICB2YXIgdG1yd1N0YXJ0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgbmV4dERheV0uc3BsaXQoIiAtICIpWzBdCiAgICB9CiAgICAKICAgICAvL2NoZWNrcyBpZiBob2xpZGF5IGhvdXJzIGNoYW5nZSAKICAgIGlmKGhvbGlkYXlIb3VycykgewogICAgICAgIGZvcih2YXIgaT0wO2kgPCBob2xpZGF5SG91cnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIGlmKGhvbGlkYXlIb3Vyc1tpXS5kYXRlID09PSB0b2RheURhdGUgJiYgaG9saWRheUhvdXJzW2ldLm9wZW5JbnRlcnZhbHMpewogICAgICAgICAgICAgICAgeWV4dEF0dCA9IGhvbGlkYXlIb3Vyc1tpXS5ob3Vyc0Zvcm1hdHRlZAogICAgICAgICAgICB9IAogICAgICAgIH0KICAgIH0KICAgIAogICAgLy9zcGxpdCBob3VycwogICAgaWYoeWV4dEF0dCAmJiB5ZXh0QXR0LmluY2x1ZGVzKCIsIikpewogICAgICAgIHlleHRBdHQgPSB5ZXh0QXR0LnNwbGl0KCIsICIpCiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIHZhciBlbmQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVsxXQogICAgICAgICAgICB2YXIgc3RhcnQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVswXQogICAgICAgICAgICBpZiAoaSsxICE9IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnQgPSB5ZXh0QXR0W2kgKyAxXS5zcGxpdCgnIC0gJylbMF0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzBdKSArIDEyLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYobmV4dFN0YXJ0LmluY2x1ZGVzKCJwbSIpICYmIG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChuZXh0U3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQobmV4dFN0YXJ0KSwgcGFyc2VJbnQobmV4dFN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBpZihlbmQuaW5jbHVkZXMoInBtIikgJiYgZW5kLnNwbGl0KC9ccyt8Oi8pWzBdICE9ICIxMiIpewogICAgICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlbmREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIGlmIChlbmQuaW5jbHVkZXMoImFtIikgJiYgKGVuZERhdGUgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5VG13LCBtbVRtdywgZGRUbXcsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYodG9kYXkgPCBzdGFydERhdGUpewogICAgICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUgCiAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBzdGFydAogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgfWVsc2UgaWYodG9kYXkgPiBzdGFydERhdGUgJiYgdG9kYXkgPCBlbmREYXRlKXsKICAgICAgICAgICAgICAgIHlleHRBdHQgPSBzdGFydCArICcgLSAnICsgZW5kCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9ZWxzZSBpZih0b2RheSA+IGVuZERhdGUgJiYgIChpKzEgIT0geWV4dEF0dC5sZW5ndGgpICYmIHRvZGF5IDwgbmV4dFN0YXJ0RGF0ZSl7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gbmV4dFN0YXJ0CiAgICAgICAgICAgICAgICB0b21vcnJvd09wZW4gPSB0cnVlCiAgICAgICAgICAgIH1lbHNlIGlmKHRvZGF5ID4gZW5kRGF0ZSAmJiBpKzEgPT09IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0IHx8IGNsb3NlZCkgewogICAgICAgIGlmKHR5cGVvZiB5ZXh0QXR0ID09PSAic3RyaW5nIil7CiAgICAgICAgdmFyIHN0YXJ0ID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMF0KICAgICAgICB2YXIgZW5kID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMV0KICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoc3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZW5kLmluY2x1ZGVzKCJwbSIpICYmIGVuZC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiBlbmQuc3BsaXQoL1xzK3w6LylbMF0gPT09ICIxMiIpIHsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgLSAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZW5kRGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzBdKSwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiAoZW5kRGF0ZSA8IHN0YXJ0RGF0ZSkpewogICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoeXl5eVRtdywgbW1UbXcsIGRkVG13LCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL2NoZWNrIGlmIGNsb3NlZAogICAgICAgIGlmKHRvZGF5ID4gZW5kRGF0ZSl7CiAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgLy9vcGVuZWQgMjQgaG91cnMgCiAgICAgICAgfSBlbHNlIGlmKHN0YXJ0ID09PSAnMTI6MDAgYW0nICYmIGVuZCA9PT0gJzExOjU5IHBtJyl7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJhbGxEYXlTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcgMjQgaG91cnMgJwogICAgICAgIC8vb3BlbmVkCiAgICAgICAgfSBlbHNlIGlmKHRvZGF5IDwgc3RhcnREYXRlKXsKICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUKICAgICAgICAvL2NoZWNrIGlmIGNsb3Npbmcgc29vbgogICAgICAgIH0gZWxzZSBpZiAoZW5kRGF0ZSAtIHRvZGF5IDwgdGhpcnR5TWlucyAmJiBlbmREYXRlIC0gdG9kYXkgPCAwID09PSBmYWxzZSApewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zaW5nIFNvb24gIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gInNvb25TdGF0dXMiCiAgICAgICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiAnICsgZW5kIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJvcGVuZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICfigKIgQ2xvc2VzICcgKyBlbmQgCiAgICAgICAgfQogCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGNsb3NlZCl7CiAgICAgICAgCiAgICAgICAgLy8gY2xvc2VkICYgb3BlbmluZyB0b2RheSAKICAgICAgICBpZigodG9kYXkgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIE9wZW5zICcgKyBzdGFydCAKICAgICAgICAvL2Nsb3NlZCAmIG9wZW4gdG9tb3Jyb3cgCiAgICAgICAgfSBlbHNlIGlmKGNsb3NlZCAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJjbG9zZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgLy9jbG9zZWQgYW5kIG5vdCBvcGVuIHRvbW9ycm93IAogICAgICAgIH0gZWxzZSBpZihjbG9zZWQgJiYgdG9tb3Jyb3dPcGVuICE9IHRydWUpewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGF5cy5pbmRleE9mKGRheSkgKyAxCiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkYXlJbmRleCA9IChpICsgb2Zmc2V0KSAlIGRheXMubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy4nICsgZGF5c1tkYXlJbmRleF0gKyAnLm9wZW5JbnRlcnZhbHMnXSl7CiAgICAgICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gIGRheXNTaG9ydFtkYXlJbmRleF0gKyAiICIgKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLScgKyBkYXlzW2RheUluZGV4XV0uc3BsaXQoIiAtICIpWzBdIAogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiBPcGVucyAnICsgdG1yd1N0YXJ0CgogICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIC8vIGNoZWNrcyBpZiBob2xpZGF5CiAgICBpZihob2xpZGF5SG91cnMpIHsKICAgICAgICBmb3IodmFyIGk9MDtpIDwgaG9saWRheUhvdXJzLmxlbmd0aDtpKyspewogICAgICAgICAgICBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkYXlzLmluZGV4T2YoZGF5KSArIDEKICAgICAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF5SW5kZXggPSAoaSArIG9mZnNldCkgJSBkYXlzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBkYXlzW2RheUluZGV4XSArICcub3BlbkludGVydmFscyddKXsKICAgICAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBkYXlzU2hvcnRbZGF5SW5kZXhdICsgIiAiICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5c1tkYXlJbmRleF1dLnNwbGl0KCIgLSAiKVswXQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICAgICAgdmFyIGJ1c0hvdXJzID0gJyDigKIgT3BlbnMgJyArIHRtcndTdGFydCAgCiAgICAgICAgICAgIH0gZWxzZSBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gImNsb3NlZFN0YXR1cyIKICAgICAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gCiAgICBpZihjc3NDbGFzcyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXR1cycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTsKICAgICAgICB9CiAgICB9CiAgICBpZihzdGF0dXMpewogICAgICAgIHZhciBob3Vyc1dpZGdldHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGF0dXMnKQogICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uaW5uZXJUZXh0ID0gc3RhdHVzOwogICAgICAgIH0KICAgIH0KICAgIGlmKGNzc0NsYXNzID09PSAnYWxsRGF5U3RhdHVzJyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9ICQoZWxlbWVudCkuZmluZCgnLm9wZW5Ib3VycycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICIiCiAgICAgICAgfQogICAgfQogICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJylbMF0uY2hpbGRFbGVtZW50Q291bnQgPiAxKXsKICAgICAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgICAgICBmb3IoIHZhciBpPTA7IGkgPCBob3Vyc1dpZGdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wZW5Ib3Vyc0xlbmd0aCA9IGhvdXJzV2lkZ2V0c1tpXS5jaGlsZE5vZGVzLmxlbmd0aAogICAgICAgICAgICB2YXIgb2xkSG91cnMgPSBob3Vyc1dpZGdldHNbaV0KICAgICAgICAgICAgb2xkSG91cnMucmVtb3ZlQ2hpbGQob2xkSG91cnMuY2hpbGROb2Rlc1tvcGVuSG91cnNMZW5ndGggLSAxXSkKICAgICAgICB9CiAgICB9CiAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uYXBwZW5kKGJ1c0hvdXJzKQogICAgICAgIH0KfQoKCnZhciBkaXNwbGF5SG9saWRheUhvdXJzTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvdXJzLmhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob3Vycy5ob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CiAgICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0KSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGF0ZUhvbCA9IG5ldyBEYXRlKERhdGUucGFyc2UoeWV4dEF0dFtpXS5kYXRlKSk7IAoKICAgICAgICAgICAgdmFyIGRhdGVOb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgbnVtRGF5c0JldHdlZW4gPSBnZXROdW1EYXlzQmV0d2VlbihkYXRlSG9sLGRhdGVOb3cpOwogICAgICAgIAogICAgICAgICAgICBpZiAobnVtRGF5c0JldHdlZW4gPiAtMSkgewogICAgICAgICAgICAgICAgLy8gd3JpdGUgdG8gZG9tCiAgICAgICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArIHlleHRBdHRbaV0uZGF0ZUZvcm1hdHRlZCArICcgLSAgPHNwYW4gY2xhc3M9ImhvbGlkYXlIb3Vyc1N0YXR1cyI+JyArIHlleHRBdHRbaV0uaG91cnNGb3JtYXR0ZWQgKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAvLyBpZiBpbiBlZGl0b3IgZGlzcGxheSBwbGFjZSBob2xkZXIKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBpZiBlbXB0eSwgaGlkZSBlbGVtZW50IG9uIHJ1bnRpbWUKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlTZXJ2aWNlQXJlYSA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEsZmlyc3RPbmx5KSB7CiAgICB2YXIgbGlzdCA9ICIiOwogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CgogICAgaWYgKGZpcnN0T25seSkgewogICAgICAgIGxpc3QgPSAnPGxpPicgKyB5ZXh0QXR0WzBdICsgJzwvbGk+JzsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmICh5ZXh0QXR0KSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAiLnBsYWNlcyJdCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheVBob25lTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIHZhciBsb2NEYXRhID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlczsKICAgIAogICAgaWYobG9jRGF0YS5waG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TWFpbjo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEucGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLmxvY2FsUGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkxvY2FsOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5sb2NhbFBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+QWx0ZXJuYXRlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEudG9sbEZyZWVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+VG9sbCBGcmVlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS50b2xsRnJlZVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5tb2JpbGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TW9iaWxlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5tb2JpbGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEuZmF4UGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkZheDo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEuZmF4UGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLnR0eVBob25lKSB7CiAgICAgICAgbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJwaG9uZUxhYmVsIj5UVFk6PC9zcGFuPjxzcGFuIGNsYXNzPSJwaG9uZU51bSI+ICcgKyBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcihsb2NEYXRhLnR0eVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQoZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5waG9uZSkpOwogICAgCn0KCnZhciBnZXROdW1EYXlzQmV0d2VlbiA9IGZ1bmN0aW9uKGQxLCBkMikgewogIHZhciBkaWZmID0gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpOwogIHJldHVybiBkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpOwp9OwoKdmFyIG9yZGVyUGF5bWVudHNMaXN0ID0gZnVuY3Rpb24obGlzdERhdGEpIHsKICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignRGlzY292ZXInKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkRpc2NvdmVyIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ0Rpc2NvdmVyJyk7CiAgICB9CiAgICAKICAgIGlmKGxpc3REYXRhLmluZGV4T2YoJ0FtZXJpY2FuIEV4cHJlc3MnKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkFtZXJpY2FuIEV4cHJlc3MiKSwgMSk7CiAgICAgICAgbGlzdERhdGEudW5zaGlmdCgnQW1lcmljYW4gRXhwcmVzcycpOwogICAgfQogICAgCiAgICBpZihsaXN0RGF0YS5pbmRleE9mKCdNYXN0ZXJDYXJkJykgPj0gMCkgewogICAgICAgIGxpc3REYXRhLnNwbGljZShsaXN0RGF0YS5pbmRleE9mKCJNYXN0ZXJDYXJkIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ01hc3RlckNhcmQnKTsKICAgIH0KICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignVmlzYScpID49IDApIHsKICAgICAgICBsaXN0RGF0YS5zcGxpY2UobGlzdERhdGEuaW5kZXhPZigiVmlzYSIpLCAxKTsKICAgICAgICBsaXN0RGF0YS51bnNoaWZ0KCdWaXNhJyk7CiAgICB9CiAgICAKICAgIHJldHVybiBsaXN0RGF0YQp9Cgp2YXIgZGlzcGxheUltYWdlTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICB2YXIgbGlzdERhdGEgPSBvcmRlclBheW1lbnRzTGlzdChfeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSk7CiAgICAKICAgIAogICAgZm9yICh2YXIgaT0wOyBpPCBsaXN0RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIAogICAgICAgIGxpc3QgKz0gJzxpbWcgc3JjPSInICsgZ2V0SW1hZ2VVcmwobGlzdERhdGFbaV0sZGF0YS5jb25maWcuY2FyZFN0eWxlRGFya09yTGlnaHQpICsgJyIgYWx0PSInICsgbGlzdERhdGFbaV0gKyAnIi8+JwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyNwYXltZW50T3B0aW9uc0ltYWdlcycpLmh0bWwobGlzdCkKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICAKICAgIAp9Cgp2YXIgZGlzcGxheVNvY2lhbEljb25zID0gZnVuY3Rpb24odHlwZSx5ZXh0RGF0YSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIAogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwpIHsKICAgICAgICBsaXN0ICs9ICc8YSBocmVmPSInICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2ZhY2Vib29rLnN2ZyIgLz48L2E+JwogICAgfQogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS8nICsgIHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMudHdpdHRlckhhbmRsZSArICciIHRhcmdldD0iX2JsYW5rIj4gPGltZyBzcmM9Imh0dHBzOi8vY2RuLndlYnNpdGVzLmhpYnUuY29tLy1yZXNlbGxlcnMtcHJldmlldy9fc29jaWFsX2ljb25zL2hpYnVfdHdpdHRlci5zdmciIC8+PC9hPicKICAgIH0KICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMuaW5zdGFncmFtSGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8nKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzLmluc3RhZ3JhbUhhbmRsZSsnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2luc3RhZ3JhbS5zdmciIC8+PC9hPicKICAgIH0KICAgIAogICAgaWYobGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjc29jaWFsSWNvbnMnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9CiAgICAKICAgIAp9Cgp2YXIgZ2V0SW1hZ2VVcmwgPSBmdW5jdGlvbihuYW1lLHN0eWxlKSB7CiAgICB2YXIgY2RuUGF0aCA9ICdodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX2NjX2ljb25zLyc7CiAgICBpZighc3R5bGUpIHsKICAgICAgICBzdHlsZSA9ICdfZC5zdmcnCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIlpFTExFIil7CiAgICAgICAgbmFtZSA9ICJaZWxsZSIKICAgIH0KICAgIHZhciBpbWFnZVVybD0nJzsKICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgIGNhc2UgJ1Zpc2EnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdNYXN0ZXJDYXJkJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRGlzY292ZXInOgogICAgICAgICAgICBpbWFnZVVybCA9IGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0FtZXJpY2FuIEV4cHJlc3MnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdBbmRyb2lkIFBheSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0FwcGxlIFBheSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0JpdGNvaW4nOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdDYXNoJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQ2hlY2snOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdEaW5lcnMgQ2x1Yic6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0Rpc2NvdmVyJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRmluYW5jaW5nJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnSW52b2ljZSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ1BheVBhbCc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ1NhbXN1bmcgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVHJhdmVsZXIncyBDaGVjayI6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlplbGxlIjoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWsKICAgIH0KICAgIHJldHVybiBpbWFnZVVybAp9CgpmdW5jdGlvbiBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQocGhvbmUpIHsKICAgIHZhciB5ZXh0UGhvbmVSZW5kZXJFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnWWV4dFBob25lQ2hhbmdlRXZlbnQnLCAKICAgICAgICB7IAogICAgICAgICAgICBkZXRhaWw6IHBob25lLCAKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwgCiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUgCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh5ZXh0UGhvbmVSZW5kZXJFdmVudCk7Cn0KCnZhciBpbml0WWV4dEVsZW1lbnRzID0gZnVuY3Rpb24oeWV4dERhdGEsd2lkZ2V0VHlwZSl7CiAgICBpZiAod2lkZ2V0VHlwZSA9PT0gJ2FkZHJlc3MnICYmIGRhdGEuY29uZmlnLmRyYXdNYXApIHsKICAgICAgICBkcmF3TWFwKHlleHREYXRhKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3BheW1lbnRPcHRpb25zJyAmJiBkYXRhLmNvbmZpZy5zaG93UGF5bWVudHNBcyA9PT0gJ3BheW1lbnRJY29ucycpIHsKICAgICAgICBkaXNwbGF5SW1hZ2VMaXN0KHdpZGdldFR5cGUseWV4dERhdGEpOwogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAncGhvbmUnICYmIGRhdGEuY29uZmlnLnBob25lU2hvd0FzID09PSAnbGlzdCcpIHsKICAgICAgICBkaXNwbGF5UGhvbmVMaXN0KHdpZGdldFR5cGUseWV4dERhdGEpOwogICAgLy8gY2hlY2sgZm9yIGFueSBsaXN0IHR5cGUKICAgIH0gZWxzZSBpZih3aWRnZXRUeXBlID09PSAncGhvbmUnICYmIGRhdGEuY29uZmlnLnBob25lU2hvd0FzID09PSAnYnV0dG9uJykgewogICAgICAgIHZhciBwaEZvcm1hdHRlZCA9IGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbZGF0YS5jb25maWcucGhvbmVUeXBlXSxmdW5jdGlvbihwaG9uZSkgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoIi5kbUJ1dHRvbkxpbmsiKS5odG1sKCc8c3BhbiBjbGFzcz0idGV4dCI+JyArIHBob25lICsgJzwvc3Bhbj4nKTsgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGVtaXRZZXh0UGhvbmVSZW5kZXJFdmVudChwaG9uZSk7CiAgICAgICAgICAgIAogICAgICAgIH0pOwogICAgfSBlbHNlIGlmKHdpZGdldFR5cGUgPT09ICdwaG9uZScgJiYgZGF0YS5jb25maWcucGhvbmVTaG93QXMgPT09ICd0ZXh0JykgewogICAgICAgIHZhciBwaEZvcm1hdHRlZCA9IGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbZGF0YS5jb25maWcucGhvbmVUeXBlXSxmdW5jdGlvbihwaG9uZSkgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy55ZXh0UGhvbmVUZXh0JykuaHRtbCgnPHNwYW4gY2xhc3M9InRleHQiPicgKyBwaG9uZSArICc8L3NwYW4+Jyk7ICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQocGhvbmUpOwogICAgICAgICAgICAKICAgICAgICB9KTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3NlcnZpY2VzJyB8fCB3aWRnZXRUeXBlID09PSAnZ29vZ2xlQXR0cmlidXRlc0Zvcm1hdHRlZCcgfHwgd2lkZ2V0VHlwZSA9PT0gJ2xhbmd1YWdlcycgfHwgd2lkZ2V0VHlwZSA9PT0gJ3BheW1lbnRPcHRpb25zJyB8fCB3aWRnZXRUeXBlID09PSAna2V5d29yZHMnIHx8IHdpZGdldFR5cGUgPT09ICdwcm9kdWN0cycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2Fzc29jaWF0aW9ucycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2JyYW5kcycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICAgZGlzcGxheVRleHRkTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgICAgIH0sMSk7CiAgICB9IGVsc2UgaWYod2lkZ2V0VHlwZSA9PT0gJ3NwZWNpYWx0aWVzJykgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRpc3BsYXlTcGVjaWFsdGllcyh5ZXh0RGF0YSkKICAgICAgICB9LDEpCiAgICB9ZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0nc2VydmljZUFyZWEnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheVNlcnZpY2VBcmVhKHdpZGdldFR5cGUseWV4dERhdGEsZGF0YS5jb25maWcuc2hvd1NlcnZpY2VBcmVhRmlyc3QpCiAgICAgICAgfSwxKQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSdob3VycycgJiYgZGF0YS5jb25maWcuaG91cnNTaG93QXMgPT09ICdsaXN0JyAmJiBkYXRhLmNvbmZpZy5pc0xpc3QgPT0gZmFsc2UpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwbGF5SG91cnMod2lkZ2V0VHlwZSx5ZXh0RGF0YSkKICAgICAgICB9LDEpCiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09J2hvdXJzJyAmJiBkYXRhLmNvbmZpZy5ob3Vyc1Nob3dBcyA9PT0gJ29wZW5Ib3VycycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwbGF5T3BlbkhvdXJzKHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAnc29jaWFsJykgewogICAgICAgIGRpc3BsYXlTb2NpYWxJY29ucyh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ2hvbGlkYXlIb3VycycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICAgZGlzcGxheUhvbGlkYXlIb3Vyc0xpc3Qod2lkZ2V0VHlwZSx5ZXh0RGF0YSkKICAgICAgICB9LDEpOwogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAnaG91cnMnKSB7CiAgICAgICAgLy9oaWRlIGhvdXJzIGxpc3QgaWYgdG9nZ2xlIGVuYWJsZWQKICAgICAgICBpZihkYXRhLmNvbmZpZy5oaWRlSG91cnNMaXN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLnlleHRIb3VycycpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdkZXNjcmlwdGlvbicgfHwgd2lkZ2V0VHlwZSA9PT0gJ3llYXJFc3RhYmxpc2hlZCcgfHwgd2lkZ2V0VHlwZSA9PT0gJ2VtYWlsJyB8fCB3aWRnZXRUeXBlID09PSAnbmFtZScpIHsKICAgICAgICAvLyBjaGVjawogICAgICAgIGhpZGVJZkVtcHR5KHdpZGdldFR5cGUseWV4dERhdGEpCiAgICB9CiAgICAvL3JlbW92ZSBlcnJvciBpZiBzY3JpcHQgbm90IGVudGVyZWQgY29ycmVjdGx5LgogICAgJChlbGVtZW50KS5maW5kKCcud3JvbmdTY3JpcHRFcnJvcicpLnJlbW92ZUNsYXNzKCdoYXNFcnJvcicpOwogICAgCn0KCmZ1bmN0aW9uIGhpZGVJZkVtcHR5KHR5cGUseWV4dERhdGEpIHsKICAgIGlmKCF5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdKSB7CiAgICAgICAgaWYoZGF0YS5pbkVkaXRvcikgewogICAgICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOyAgICAKICAgICAgICB9CiAgICAgICAgCiAgICB9Cn0KCi8vIFRPRE8gQ0hBTkdFIFRPIEVWRU5UIENBTEwgQkFDSwp2YXIgc3RhcnRJbnRlcnZhbFRvV2FpdEFuZExvYWRXaWRnZXRzID0gZnVuY3Rpb24od2lkZ2V0VHlwZSkgewogICAgLy9zdGFydCBpbnRlcnZhbCBmb3IgdGhpcyBzcGVjaWZpYyB3aWRnZXQKICAgIHZhciBpbnRlcnZhbENoZWNrWWV4dExvYWRlZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgaWYgKHdpbmRvdy5feWV4dERhdGEpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbENoZWNrWWV4dExvYWRlZCk7CiAgICAgICAgICAgIGluaXRZZXh0RWxlbWVudHMod2luZG93Ll95ZXh0RGF0YSx3aWRnZXRUeXBlKTsKICAgICAgICB9IAogICAgfSw1MCkKfQoKCi8qIGluaXRpYWxpemF0aW9uICovCmlmKGRhdGEuaW5FZGl0b3IpewogICAgd2luZG93LnJlZnJlc2hZZXh0ICYmIHdpbmRvdy5yZWZyZXNoWWV4dCgpOwogICAgCiAgICAKICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAgICAgaWYoIXdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQpewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5taXNzaW5nWWV4dFdpZGdldCcpLmFkZENsYXNzKCdzaG93Jyk7IAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLm1pc3NpbmdZZXh0V2lkZ2V0JykucmVtb3ZlQ2xhc3MoJ3Nob3cnKTsgCiAgICAgICAgfQogICAgfSk7CiAgICAKfSBlbHNlIHsKICAgIGRtQVBJLnJ1bk9uUmVhZHkoJ3lleHQnICwgZnVuY3Rpb24oKXsKICAgICAgICBsb2FkWWV4dCgpOwogICB9KTsKICAgIC8vIEJlZm9yZSBuYXZpZ2F0aW5nIHdpdGggQWpheCwgd2Ugc2V0IHRoZSB5ZXh0IGluaXRpYWxpemVkIHRvIGJlIGZhbHNlIHNvIGl0IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYWdhaW4gYWZ0ZXIgdGhlIGFqYXggbmF2aWdhdGlvbgogICAgZG1BUEkucnVuQmVmb3JlQWpheE5hdmlnYXRpb24oJ3lleHQnLCBmdW5jdGlvbigpewogICAgICAgIHdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgIH0pOwp9","css":".editorOnlyInfo, .multipleYextError, .wrongScriptError{\n display: none;\n max-width:350px;\n background: #fff;\n text-align: left;\n padding: 10px;\n line-height: normal;\n font-size: 14px;\n}\n\n.editorOnlyInfo.inEditor{\n display: block;\n color: #3ac280;\n}\n\n.multipleYextError.hasError, .wrongScriptError.hasError{\n display: block;\n color: red;\n}\n\n.widget-7b6cfb .dmWidget.yextButton {\n width: 100%;\n}\n\n#dm .widget-7b6cfb {\n line-height: normal!important;\n}\n\na.getDirections {\n display: block;\n}\n\n.yextButton.show {\n display:inline-block;\n}\n\n.yextButton .text {\n display:table-cell;\n vertical-align:middle;\n}\n\n.yextMap{\n height:100%;\n width:100%;\n overflow: hidden;\n z-index: 0;\n text-align: left;\n margin: 0 auto;\n}\n\n.yextHours{\n text-align: left;\n width:300px;\n}\n\n.yextHours .row {\n display:flex;\n}\n.yextHours .row .left, .yextHours .row .right {\n flex:1;\n align-self: center;\n}\n.yextAdditionalHoursText {\n display:inline-block;\n}\n\n.yextAddress{\n text-align: left;\n}\n\n#paymentOptionsImages img {\n display: inline-block;\n width: 60px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n#socialIcons a {\n display: inline-block;\n width: 50px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n.bullet {\n list-style-type:disc; \n}\n.no-list {\n list-style-type:none;\n}\n.circle {\n list-style-type:circle; \n}\n.square {\n list-style-type:square; \n}\n.decimal {\n list-style-type:decimal; \n}\n.bold {\n font-weight: bold;\n}\n#socialIcons {\n display: flex;\n}\n#socialIcons.left {\n justify-content: flex-start;\n}\n#socialIcons.right {\n justify-content: flex-end;\n}\n#socialIcons.center {\n justify-content: center;\n}\nul[id*=\"List\"] {\n margin:0;\n}\nh3[class*=\"Header\"] {\n margin: 10px 0;\n}\n.yextEmail {\n display:block;\n}\n.picons-left {\n text-align:left;\n}\n.picons-right {\n text-align:right;\n}\n.picons-center {\n text-align:center;\n}\n\n.openedStatus {\n color: #3ac280;\n}\n\n.allDayStatus {\n color: #3ac280;\n}\n\n.closedStatus {\n color: #FF0000;\n}\n\n.soonStatus {\n color: #FF7322;\n}\n\n\n","strings":{}},{"widgetId":"d1ee5d5bf037471ea1770683731e577a","version":22,"js":"JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAgICQuZ2V0U2NyaXB0KCdodHRwczovL3dpZGdldC5oaWJ1LnVzL3N0YXRpYy9qcy9pbmRleC5qcycpCiAgICAuZG9uZShmdW5jdGlvbigpewogICAgICAgIGRtQVBJLnJ1bk9uUmVhZHkoJ2hpYnVfaGVhZGVyX3Jldmlld3MnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHdpbmRvdy5yZW5kZXJBcHAoKTsKICAgICAgICB9KTsKICAgICAgICAKICAgIH0pCiAgICAuZmFpbChmdW5jdGlvbigpewogICAgICAgIGNvbnNvbGUubG9nKCJmYWlsZWQgdG8gbG9hZGVkIGhlYWRlciByZXZpZXdzIGpzIGZpbGUiKQogICAgfSk7Cn0pCgo=","css":".headerWidget {\n min-height:22px;\n}\n","strings":{}},{"widgetId":"7b6cfbac88324cffbaaf57354cd7a334","version":224,"js":"dmFyIGVtcHR5TGlzdFBsYWNlSG9sZGVyPSI8c3BhbiBzdHlsZT0nbWluLWhlaWdodDoyMHB4JyBjbGFzcz0nZWRpdG9yT25seUluZm8gaW5FZGl0b3InIGRhdGEtbm9zbmlwcGV0PlRoaXMgbGlzdCBoYXMgbm8gZGF0YSBpbiBZZXh0LiBUaGlzIG1lc3NhZ2Ugb25seSBhcHBlYXJzIGluIHRoZSBlZGl0b3IuPC9zcGFuPiIKCi8qIGZpbmQgeWV4dCBzcmMgKi8KdmFyIGZpbmRZZXh0U3JjID0gZnVuY3Rpb24oKXsKICAgIHZhciAga2V5RXhwID0gbmV3IFJlZ0V4cCgvc3JjPSIoLio/KSIvKTsKICAgIGlmIChkYXRhLmNvbmZpZy5zY3JpcHQuaW5jbHVkZXMoJ2xvY2F0aW9uX2lkJykpIHsKICAgICAgICBkYXRhLmNvbmZpZy5zY3JpcHQgPSBkYXRhLmNvbmZpZy5zY3JpcHQucmVwbGFjZSgnbG9jYXRpb25faWQnLCAnZW50aXR5X2lkJyk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0ga2V5RXhwLmV4ZWMoZGF0YS5jb25maWcuc2NyaXB0KTsKICAgIGlmKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID09IDIpewogICAgICAgIHdpbmRvdy55ZXh0U2NyaXB0U3JjPXJlc3VsdFsxXTsKICAgICAgICByZXR1cm4gcmVzdWx0WzFdOwogICAgfWVsc2V7CiAgICAgICAgcmV0dXJuIHdpbmRvdy55ZXh0U2NyaXB0U3JjOwogICAgfQp9Cgp3aW5kb3cueWV4dExvYWRlZENhbGxiYWNrID0gZnVuY3Rpb24oeWV4dERhdGEpIHsKICAgICQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gdHJ1ZTsKICAgIAogICAgaWYoeWV4dERhdGEpIHsKICAgICAgICB3aW5kb3cuX3lleHREYXRhID0geWV4dERhdGE7ICAgIAogICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAiWWV4dCBsb2FkZWQgYnV0IG5vIGRhdGEgd2FzIHBhc3NlZCI7CiAgICB9Cn0KCmZ1bmN0aW9uIGxvYWRZZXh0U2NyaXB0KHNyYyl7CiAgICAkKGVsZW1lbnQpLmZpbmQoJy53cm9uZ1NjcmlwdEVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICB2YXIgeWV4dFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkLXlleHQtc2NyaXB0Jyk7CiAgICBpZiAoeWV4dFNjcmlwdCkgewogICAgICAgIHlleHRTY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh5ZXh0U2NyaXB0KTsKICAgIH0KICAgIHlleHRTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgIHlleHRTY3JpcHQuY2hhcnNldCA9ICd1dGYtOCc7CiAgICB5ZXh0U2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIAogICAgc3JjICs9ICImY2FsbGJhY2s9eWV4dExvYWRlZENhbGxiYWNrIgogICAgCiAgICB5ZXh0U2NyaXB0LnNyYyA9IHNyYzsKICAgIHlleHRTY3JpcHQuaWQgPSAnZC15ZXh0LXNjcmlwdCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHlleHRTY3JpcHQpOwp9CgovKiBsb2FkIHlleHQgc2NyaXB0ICovCnZhciBsb2FkWWV4dCA9IGZ1bmN0aW9uKGZvcmNlUmVmcmVzaCkgewogICAgLy8gTWFrZSBzdXJlIHdlIGNhbGwgWWV4dCBvbmx5IG9uY2UKICAgIGlmKHdpbmRvdy55ZXh0SW5pdGlhbGl6ZWQgJiYgIWZvcmNlUmVmcmVzaCl7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICBzdGFydEludGVydmFsVG9XYWl0QW5kTG9hZFdpZGdldHMoZGF0YS5jb25maWcudHlwZSk7CiAgICAKICAgIC8vIFdlIGV4dHJhY3QgdGhlICJzcmMiIGF0dHJpYnV0ZSBmcm9tIHRoZSBzdHJpbmcgcHJvdmlkZWQgaW5hICBzYWZlIHdheQogICAgLy8gVGhlIGZvcm1hdCB3ZSBleHBlY3QgaXMgdGhlIGZvbGxvd2luZzoKICAgCiAgICB0cnl7CiAgICAgICAgdmFyIHNyYyA9IGZpbmRZZXh0U3JjKCk7CiAgICAgICAgaWYoc3JjKXsKCiAgICAgICAgICAgIGxvYWRZZXh0U2NyaXB0KHNyYyk7CiAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSBpZihkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgICAgIC8vICQoZG9jdW1lbnQpLmxvYWQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gICAgIGlmKCF3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIC8vICAgICAgICAgJChlbGVtZW50KS5maW5kKCcud3JvbmdTY3JpcHRFcnJvcicpLmFkZENsYXNzKCdoYXNFcnJvcicpOyAgICAKICAgICAgICAgICAgLy8gICAgIH0KICAgICAgICAgICAgLy8gfSkKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5hZGRDbGFzcygnaGFzRXJyb3InKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICB9IGNhdGNoKGV4cCkgewogICAgICAgIC8vICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0JykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgY29uc29sZS5sb2coZXhwKQogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICBpZigkKCcubXVsdGlwbGVZZXh0RXJyb3InKS5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICQoZWxlbWVudCkuZmluZCgnLm11bHRpcGxlWWV4dEVycm9yJykuYWRkQ2xhc3MoJ2hhc0Vycm9yJyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfWVsc2UgaWYoZGF0YS5jb25maWcudHlwZSA9PT0gJ25vbmUnKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcuZWRpdG9yT25seUluZm8nKS5hZGRDbGFzcygnaW5FZGl0b3InKTsgCiAgICAgICAgfQogICAgfQp9CgovKiByZWZyZXNoIHlleHQgc2NyaXB0ICovCndpbmRvdy5yZWZyZXNoWWV4dCA9IGZ1bmN0aW9uKCl7CiAgICBsb2FkWWV4dCh0cnVlKTsKfQoKLy9mdW5jdGlvbiBmb3IgT21uaXR1cmUgdHJhY2tpbmcKd2luZG93Ll90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7CiAgICBpZih0eXBlb2YoSEFGKT09PSJvYmplY3QiKXsKICAgICAgICBIQUYuT21UcmFja2luZy5vbkNNQ2xpY2soZXZlbnROYW1lKSAKICAgIH0KICAgIHJldHVybjsKfQoKLyogZHJhdyB5ZXh0IG1hcCAqLwp2YXIgZHJhd01hcCA9IGZ1bmN0aW9uKHlleHREYXRhKXsKICAgIHZhciB6b29tID0gZGF0YS5jb25maWcubWFwWm9vbTsKICAgIHZhciB5RGF0YSA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXM7CiAgICB2YXIgYWRkcmVzc1F1ZXJ5ID0geURhdGFbJ2FkZHJlc3MxJ10gKyAiICIgKyB5RGF0YVsnYWRkcmVzczInXSArICIgIiArIHlEYXRhWydjaXR5J10gKyAiICIgKyB5RGF0YVsnc3RhdGUnXSArICIgIiArIHlEYXRhWyd6aXAnXTsKICAgIGRtQVBJLmRyYXdNYXAoe2FkZHJlc3NRdWVyeTogYWRkcmVzc1F1ZXJ5LCB6b29tOiB6b29tLCBjb250YWluZXI6ICQoZWxlbWVudCkuZmluZCgnLnlleHRNYXAnKX0pOwp9CgoKCnZhciBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlciA9IGZ1bmN0aW9uKG51bSxjYikgewogICAgaWYgKCFjYikKICAgICAgICBjYiA9IGZ1bmN0aW9uKCl7cmV0dXJufQogICAgaWYoZGF0YS5jb25maWcuZm9ybWF0UGhvbmUpeyAKICAgICAgICB2YXIgczIgPSAoIiIrbnVtKS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgICAgICAgdmFyIG0gPSBzMi5tYXRjaCgvXihcZHszfSkoXGR7M30pKFxkezR9KSQvKTsKICAgICAgICB2YXIgZm9ybWF0dGVkID0gICghbSkgPyBudWxsIDogIigiICsgbVsxXSArICIpICIgKyBtWzJdICsgIi0iICsgbVszXTsKICAgICAgICBjYihmb3JtYXR0ZWQpOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9IGVsc2UgewogICAgICAgIGNiKG51bSk7CiAgICAgICAgcmV0dXJuIG51bTsKICAgIH0KfQoKdmFyIGRpc3BsYXlUZXh0ZExpc3QgPSBmdW5jdGlvbih0eXBlLHlleHREYXRhLGZpcnN0T25seSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZV0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICBpZih5ZXh0QXR0ICYmIEFycmF5LmlzQXJyYXkoeWV4dEF0dCkpIHsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHlleHRBdHRbaV0gPT09ICdBbmRyb2lkIFBheScpIHsKICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaT5Hb29nbGUgUGF5PC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dEF0dC5zcGxpdCgiLCAiKTsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8IHlleHRBdHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGlzdCArPSAnPGxpPicgKyB5ZXh0QXR0W2ldICsgJzwvbGk+JzsKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KICAgIAogICAgCn0KCnZhciAgZGlzcGxheVNwZWNpYWx0aWVzID0gZnVuY3Rpb24oeWV4dERhdGEpewogICAgdmFyIGxpc3QgPSAiIjsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWx0aWVzIl0KICAgIH0gZWxzZSBpZiAoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sic3BlY2lhbGl0aWVzIl0pIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbInNwZWNpYWxpdGllcyJdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKHlleHRBdHQpIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI3NwZWNpYWx0aWVzTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlIb3VycyA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGVdCiAgICB9IGVsc2UgewogICAgICAgIHZhciB5ZXh0QXR0ID0gZmFsc2UKICAgIH0KICAgIAogICAgaWYoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICB2YXIgaW5kZXhFbmREYXkgPSB5ZXh0QXR0W2ldLmxhc3RJbmRleE9mKCdkYXkgJykgKyAzOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIAogICAgICAgICAgICBsaXN0ICs9ICc8ZGl2IGNsYXNzPSJyb3ciPjxkaXYgY2xhc3M9ImxlZnQiPicgKyBsZWZ0U2lkZSArICc8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodCI+JyArIHJpZ2h0U2lkZSArICc8L2Rpdj48L2Rpdj4nOwogICAgICAgIH0KICAgICAgICAKICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgCiAgICB9IGVsc2UgaWYoeWV4dEF0dCkgeyAKICAgICAgICB2YXIgeWV4dEF0dCA9IHlleHRBdHQuc3BsaXQoIiwgIik7CiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKykgewogICAgICAgICAgICBpZigoL1xzLy50ZXN0KHlleHRBdHRbaV0pKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgeWV4dEF0dFtpXSA9IHlleHRBdHRbaV0gKyAnIC0gJyArIHlleHRBdHRbaSsxXQogICAgICAgICAgICAgICAgeWV4dEF0dC5zcGxpY2UoaSsxLCAxKQogICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoeWV4dEF0dFtpXS5pbmNsdWRlcygnZGF5JykgPT09IGZhbHNlICl7CiAgICAgICAgICAgICAgICB2YXIgbGVmdFNpZGUgPSAnICc7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldCiAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbmRleEVuZERheSA9IHlleHRBdHRbaV0ubGFzdEluZGV4T2YoJ2RheSAnKSArIDM7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGxlZnRTaWRlID0geWV4dEF0dFtpXS5zdWJzdHIoMCxpbmRleEVuZERheSkucmVwbGFjZSgiTW9uZGF5IiwiTW9uIikucmVwbGFjZSgiVHVlc2RheSIsIlR1ZSIpLnJlcGxhY2UoIldlZG5lc2RheSIsIldlZCIpLnJlcGxhY2UoIlRodXJzZGF5IiwiVGh1IikucmVwbGFjZSgiRnJpZGF5IiwiRnJpIikucmVwbGFjZSgiU2F0dXJkYXkiLCJTYXQiKS5yZXBsYWNlKCJTdW5kYXkiLCJTdW4iKTsKICAgICAgICAKICAgICAgICAgICAgICAgIHZhciByaWdodFNpZGUgPSB5ZXh0QXR0W2ldLnN1YnN0cihpbmRleEVuZERheSArIDEpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGxpc3QgKz0gJzxkaXYgY2xhc3M9InJvdyI+PGRpdiBjbGFzcz0ibGVmdCI+JyArIGxlZnRTaWRlICsgJzwvZGl2PjxkaXYgY2xhc3M9InJpZ2h0Ij4nICsgcmlnaHRTaWRlICsgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnI2hvdXJzU21hbGwnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheU9wZW5Ib3VycyA9IGZ1bmN0aW9uKHR5cGUsIHlleHREYXRhKXsKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbJ3RpbWV6b25lJ10pewogICAgICAgIHZhciB6b25lID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1sndGltZXpvbmUnXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgem9uZSA9IGZhbHNlCiAgICB9CiAgICAKICAgIGlmKHpvbmUpewogICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygiZW4tVVMiLCB7dGltZVpvbmU6IHpvbmV9KTsKICAgICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSh0aW1lICk7CiAgICAgICAgCiAgICAgICAgdmFyIHRoaXJ0eU1pbnMgPSAzMCAqIDYwICogMTAwMAoKICAgICAgICB2YXIgZGF5cyA9IFsnc3VuZGF5JywnbW9uZGF5JywndHVlc2RheScsJ3dlZG5lc2RheScsJ3RodXJzZGF5JywnZnJpZGF5Jywnc2F0dXJkYXknXTsKICAgICAgICB2YXIgZGF5c1Nob3J0ID0gWydTdW4nLCdNb24nLCdUdWVzJywnV2VkJywnVGh1cnMnLCdGcmknLCdTYXQnXTsKCiAgICAgICAgdmFyIGRheSA9IGRheXNbdG9kYXkuZ2V0RGF5KCldOwogICAgICAgIHZhciBob3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgICB2YXIgbWluID0gdG9kYXkuZ2V0TWludXRlcygpOwogICAgICAgIHZhciBkZCA9ICgiMCIgKyB0b2RheS5nZXREYXRlKCkpLnNsaWNlKC0yKTsKICAgICAgICB2YXIgbW0gPSAoIjAiICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpCiAgICAgICAgdmFyIHl5eXkgPSB0b2RheS5nZXRGdWxsWWVhcigpOwogICAgICAgIHZhciB0b2RheURhdGUgPSB5eXl5ICsgJy0nICsgbW0gKyAnLScgKyBkZAogICAgICAgIHZhciBtbSA9IG1tIC0gMSAKICAgICAgICAKICAgICAgICBjb25zdCB0b21vcnJvdyA9IG5ldyBEYXRlKHRvZGF5KQogICAgICAgIHRvbW9ycm93LnNldERhdGUodG9tb3Jyb3cuZ2V0RGF0ZSgpICsgMSkKICAgICAgICB2YXIgbW1UbXcgID0gKCIwIiArICh0b21vcnJvdy5nZXRNb250aCgpICsgMSkpLnNsaWNlKC0yKQogICAgICAgIHZhciBkZFRtdyA9ICgiMCIgKyB0b21vcnJvdy5nZXREYXRlKCkpLnNsaWNlKC0yKQogICAgICAgIHZhciB5eXl5VG13ID0gdG9tb3Jyb3cuZ2V0RnVsbFllYXIoKTsKICAgICAgICB2YXIgbmV4dERheSA9IGRheXNbdG9tb3Jyb3cuZ2V0RGF5KCldCiAgICAgICAgdmFyIHRvbW1vcnJvdyA9IHl5eXlUbXcgKyAnLScgKyBtbVRtdyArICctJyArIGRkVG13CiAgICAgICAgdmFyIG1tVG13ID0gbW1UbXcgLSAxCiAgICB9CgogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5XQogICAgICAgIGlmICh5ZXh0QXR0ID09PSAiQ2xvc2VkIil7CiAgICAgICAgICAgIHlleHRBdHQgPSBmYWxzZQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSBmYWxzZQogICAgfQogICAgCiAgICAvL2NoZWNrIGlmIGRheSBpcyBjbG9zZWQKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbdHlwZSArICcuJyArIGRheSArICcuaXNDbG9zZWQnXSA9PT0gdHJ1ZSkgeyAKICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgfQogICAgCiAgICAvL2NvbGxlY3RzIGJ1c2luZXNzIGhvbGlkYXkgaG91cnMgCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLmhvbGlkYXlIb3VycyddKXsKICAgICAgICB2YXIgaG9saWRheUhvdXJzID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy5ob2xpZGF5SG91cnMnXQogICAgfSBlbHNlewogICAgICAgICB2YXIgaG9saWRheUhvdXJzID0gZmFsc2UKICAgIH0KICAgIAogICAgLy9nZXRzIG5leHQgZGF5cyBzdGFydCB0aW1lCiAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBuZXh0RGF5ICsgJy5pc0Nsb3NlZCddID09PSB0cnVlKXsKICAgICAgICB2YXIgdG9tb3Jyb3dPcGVuID0gZmFsc2UKICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRvbW9ycm93T3BlbiA9IHRydWUKICAgICAgICB2YXIgdG1yd1N0YXJ0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgbmV4dERheV0uc3BsaXQoIiAtICIpWzBdCiAgICB9CiAgICAKICAgICAvL2NoZWNrcyBpZiBob2xpZGF5IGhvdXJzIGNoYW5nZSAKICAgIGlmKGhvbGlkYXlIb3VycykgewogICAgICAgIGZvcih2YXIgaT0wO2kgPCBob2xpZGF5SG91cnMubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIGlmKGhvbGlkYXlIb3Vyc1tpXS5kYXRlID09PSB0b2RheURhdGUgJiYgaG9saWRheUhvdXJzW2ldLm9wZW5JbnRlcnZhbHMpewogICAgICAgICAgICAgICAgeWV4dEF0dCA9IGhvbGlkYXlIb3Vyc1tpXS5ob3Vyc0Zvcm1hdHRlZAogICAgICAgICAgICB9IAogICAgICAgIH0KICAgIH0KICAgIAogICAgLy9zcGxpdCBob3VycwogICAgaWYoeWV4dEF0dCAmJiB5ZXh0QXR0LmluY2x1ZGVzKCIsIikpewogICAgICAgIHlleHRBdHQgPSB5ZXh0QXR0LnNwbGl0KCIsICIpCiAgICAgICAgZm9yKHZhciBpPTA7aSA8IHlleHRBdHQubGVuZ3RoO2krKyl7CiAgICAgICAgICAgIHZhciBlbmQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVsxXQogICAgICAgICAgICB2YXIgc3RhcnQgPSB5ZXh0QXR0W2ldLnNwbGl0KCcgLSAnKVswXQogICAgICAgICAgICBpZiAoaSsxICE9IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnQgPSB5ZXh0QXR0W2kgKyAxXS5zcGxpdCgnIC0gJylbMF0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBzdGFydERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzBdKSArIDEyLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYobmV4dFN0YXJ0LmluY2x1ZGVzKCJwbSIpICYmIG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgICAgIHZhciBuZXh0U3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChuZXh0U3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KG5leHRTdGFydC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQobmV4dFN0YXJ0KSwgcGFyc2VJbnQobmV4dFN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICBpZihlbmQuaW5jbHVkZXMoInBtIikgJiYgZW5kLnNwbGl0KC9ccyt8Oi8pWzBdICE9ICIxMiIpewogICAgICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlbmREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgIGlmIChlbmQuaW5jbHVkZXMoImFtIikgJiYgKGVuZERhdGUgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgICAgIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5VG13LCBtbVRtdywgZGRUbXcsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVsxXSkpCiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYodG9kYXkgPCBzdGFydERhdGUpewogICAgICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUgCiAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBzdGFydAogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgfWVsc2UgaWYodG9kYXkgPiBzdGFydERhdGUgJiYgdG9kYXkgPCBlbmREYXRlKXsKICAgICAgICAgICAgICAgIHlleHRBdHQgPSBzdGFydCArICcgLSAnICsgZW5kCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICB9ZWxzZSBpZih0b2RheSA+IGVuZERhdGUgJiYgIChpKzEgIT0geWV4dEF0dC5sZW5ndGgpICYmIHRvZGF5IDwgbmV4dFN0YXJ0RGF0ZSl7CiAgICAgICAgICAgICAgICB2YXIgY2xvc2VkID0gdHJ1ZQogICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gbmV4dFN0YXJ0CiAgICAgICAgICAgICAgICB0b21vcnJvd09wZW4gPSB0cnVlCiAgICAgICAgICAgIH1lbHNlIGlmKHRvZGF5ID4gZW5kRGF0ZSAmJiBpKzEgPT09IHlleHRBdHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9ICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0IHx8IGNsb3NlZCkgewogICAgICAgIGlmKHR5cGVvZiB5ZXh0QXR0ID09PSAic3RyaW5nIil7CiAgICAgICAgdmFyIHN0YXJ0ID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMF0KICAgICAgICB2YXIgZW5kID0geWV4dEF0dC5zcGxpdCgiIC0gIilbMV0KICAgICAgICBpZihzdGFydC5pbmNsdWRlcygicG0iKSAmJiBzdGFydC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoc3RhcnQuc3BsaXQoL1xzK3w6LylbMF0pICsgMTIsIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoeXl5eSwgbW0sIGRkLCBwYXJzZUludChzdGFydC5zcGxpdCgvXHMrfDovKVswXSksIHBhcnNlSW50KHN0YXJ0LnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoZW5kLmluY2x1ZGVzKCJwbSIpICYmIGVuZC5zcGxpdCgvXHMrfDovKVswXSAhPSAiMTIiKXsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgKyAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiBlbmQuc3BsaXQoL1xzK3w6LylbMF0gPT09ICIxMiIpIHsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBuZXcgRGF0ZSh5eXl5LCBtbSwgZGQsIHBhcnNlSW50KGVuZC5zcGxpdCgvXHMrfDovKVswXSkgLSAxMiwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZW5kRGF0ZSA9IG5ldyBEYXRlKHl5eXksIG1tLCBkZCwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzBdKSwgcGFyc2VJbnQoZW5kLnNwbGl0KC9ccyt8Oi8pWzFdKSkKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGVuZC5pbmNsdWRlcygiYW0iKSAmJiAoZW5kRGF0ZSA8IHN0YXJ0RGF0ZSkpewogICAgICAgICAgICBlbmREYXRlID0gbmV3IERhdGUoeXl5eVRtdywgbW1UbXcsIGRkVG13LCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMF0pLCBwYXJzZUludChlbmQuc3BsaXQoL1xzK3w6LylbMV0pKQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL2NoZWNrIGlmIGNsb3NlZAogICAgICAgIGlmKHRvZGF5ID4gZW5kRGF0ZSl7CiAgICAgICAgICAgIHZhciBjbG9zZWQgPSB0cnVlCiAgICAgICAgLy9vcGVuZWQgMjQgaG91cnMgCiAgICAgICAgfSBlbHNlIGlmKHN0YXJ0ID09PSAnMTI6MDAgYW0nICYmIGVuZCA9PT0gJzExOjU5IHBtJyl7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJhbGxEYXlTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcgMjQgaG91cnMgJwogICAgICAgIC8vb3BlbmVkCiAgICAgICAgfSBlbHNlIGlmKHRvZGF5IDwgc3RhcnREYXRlKXsKICAgICAgICAgICAgdmFyIGNsb3NlZCA9IHRydWUKICAgICAgICAvL2NoZWNrIGlmIGNsb3Npbmcgc29vbgogICAgICAgIH0gZWxzZSBpZiAoZW5kRGF0ZSAtIHRvZGF5IDwgdGhpcnR5TWlucyAmJiBlbmREYXRlIC0gdG9kYXkgPCAwID09PSBmYWxzZSApewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zaW5nIFNvb24gIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gInNvb25TdGF0dXMiCiAgICAgICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiAnICsgZW5kIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzdGF0dXMgPSAiT3BlbiAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJvcGVuZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICfigKIgQ2xvc2VzICcgKyBlbmQgCiAgICAgICAgfQogCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKGNsb3NlZCl7CiAgICAgICAgCiAgICAgICAgLy8gY2xvc2VkICYgb3BlbmluZyB0b2RheSAKICAgICAgICBpZigodG9kYXkgPCBzdGFydERhdGUpKXsKICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIE9wZW5zICcgKyBzdGFydCAKICAgICAgICAvL2Nsb3NlZCAmIG9wZW4gdG9tb3Jyb3cgCiAgICAgICAgfSBlbHNlIGlmKGNsb3NlZCAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgIHZhciBjc3NDbGFzcyA9ICJjbG9zZWRTdGF0dXMiCiAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgLy9jbG9zZWQgYW5kIG5vdCBvcGVuIHRvbW9ycm93IAogICAgICAgIH0gZWxzZSBpZihjbG9zZWQgJiYgdG9tb3Jyb3dPcGVuICE9IHRydWUpewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZGF5cy5pbmRleE9mKGRheSkgKyAxCiAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkYXlJbmRleCA9IChpICsgb2Zmc2V0KSAlIGRheXMubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy4nICsgZGF5c1tkYXlJbmRleF0gKyAnLm9wZW5JbnRlcnZhbHMnXSl7CiAgICAgICAgICAgICAgICAgICAgdG1yd1N0YXJ0ID0gIGRheXNTaG9ydFtkYXlJbmRleF0gKyAiICIgKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLScgKyBkYXlzW2RheUluZGV4XV0uc3BsaXQoIiAtICIpWzBdIAogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICB2YXIgYnVzSG91cnMgPSAnIOKAoiBPcGVucyAnICsgdG1yd1N0YXJ0CgogICAgICAgIH0KICAgICAgICB9CiAgICB9CiAKICAgIC8vIGNoZWNrcyBpZiBob2xpZGF5CiAgICBpZihob2xpZGF5SG91cnMpIHsKICAgICAgICBmb3IodmFyIGk9MDtpIDwgaG9saWRheUhvdXJzLmxlbmd0aDtpKyspewogICAgICAgICAgICBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBkYXlzLmluZGV4T2YoZGF5KSArIDEKICAgICAgICAgICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGRheXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF5SW5kZXggPSAoaSArIG9mZnNldCkgJSBkYXlzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAnLicgKyBkYXlzW2RheUluZGV4XSArICcub3BlbkludGVydmFscyddKXsKICAgICAgICAgICAgICAgICAgICB0bXJ3U3RhcnQgPSBkYXlzU2hvcnRbZGF5SW5kZXhdICsgIiAiICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlICsgJy0nICsgZGF5c1tkYXlJbmRleF1dLnNwbGl0KCIgLSAiKVswXQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gIkNsb3NlZCAiCiAgICAgICAgICAgICAgICB2YXIgY3NzQ2xhc3MgPSAiY2xvc2VkU3RhdHVzIgogICAgICAgICAgICAgICAgdmFyIGJ1c0hvdXJzID0gJyDigKIgT3BlbnMgJyArIHRtcndTdGFydCAgCiAgICAgICAgICAgIH0gZWxzZSBpZihob2xpZGF5SG91cnNbaV0uZGF0ZSA9PT0gdG9kYXlEYXRlICYmIGhvbGlkYXlIb3Vyc1tpXS5pc0Nsb3NlZCA9PT0gdHJ1ZSAmJiB0b21vcnJvd09wZW4gPT09IHRydWUpewogICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9ICJDbG9zZWQgIgogICAgICAgICAgICAgICAgdmFyIGNzc0NsYXNzID0gImNsb3NlZFN0YXR1cyIKICAgICAgICAgICAgICAgIHZhciBidXNIb3VycyA9ICcg4oCiIE9wZW5zICcgKyB0bXJ3U3RhcnQgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gCiAgICBpZihjc3NDbGFzcyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0YXR1cycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jbGFzc0xpc3QuYWRkKGNzc0NsYXNzKTsKICAgICAgICB9CiAgICB9CiAgICBpZihzdGF0dXMpewogICAgICAgIHZhciBob3Vyc1dpZGdldHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdGF0dXMnKQogICAgICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uaW5uZXJUZXh0ID0gc3RhdHVzOwogICAgICAgIH0KICAgIH0KICAgIGlmKGNzc0NsYXNzID09PSAnYWxsRGF5U3RhdHVzJyl7CiAgICAgICAgdmFyIGhvdXJzV2lkZ2V0cyA9ICQoZWxlbWVudCkuZmluZCgnLm9wZW5Ib3VycycpCiAgICAgICAgZm9yKCB2YXIgaT0wOyBpIDwgaG91cnNXaWRnZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGhvdXJzV2lkZ2V0c1tpXS5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICIiCiAgICAgICAgfQogICAgfQogICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJylbMF0uY2hpbGRFbGVtZW50Q291bnQgPiAxKXsKICAgICAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgICAgICBmb3IoIHZhciBpPTA7IGkgPCBob3Vyc1dpZGdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wZW5Ib3Vyc0xlbmd0aCA9IGhvdXJzV2lkZ2V0c1tpXS5jaGlsZE5vZGVzLmxlbmd0aAogICAgICAgICAgICB2YXIgb2xkSG91cnMgPSBob3Vyc1dpZGdldHNbaV0KICAgICAgICAgICAgb2xkSG91cnMucmVtb3ZlQ2hpbGQob2xkSG91cnMuY2hpbGROb2Rlc1tvcGVuSG91cnNMZW5ndGggLSAxXSkKICAgICAgICB9CiAgICB9CiAgICB2YXIgaG91cnNXaWRnZXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb3BlbkhvdXJzJykKICAgIGZvciggdmFyIGk9MDsgaSA8IGhvdXJzV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBob3Vyc1dpZGdldHNbaV0uYXBwZW5kKGJ1c0hvdXJzKQogICAgICAgIH0KfQoKCnZhciBkaXNwbGF5SG9saWRheUhvdXJzTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvdXJzLmhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob3Vycy5ob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXNbImhvbGlkYXlIb3VycyJdKSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzWyJob2xpZGF5SG91cnMiXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CiAgICAKICAgIAogICAgCiAgICBpZih5ZXh0QXR0KSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGF0ZUhvbCA9IG5ldyBEYXRlKERhdGUucGFyc2UoeWV4dEF0dFtpXS5kYXRlKSk7IAoKICAgICAgICAgICAgdmFyIGRhdGVOb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICB2YXIgbnVtRGF5c0JldHdlZW4gPSBnZXROdW1EYXlzQmV0d2VlbihkYXRlSG9sLGRhdGVOb3cpOwogICAgICAgIAogICAgICAgICAgICBpZiAobnVtRGF5c0JldHdlZW4gPiAtMSkgewogICAgICAgICAgICAgICAgLy8gd3JpdGUgdG8gZG9tCiAgICAgICAgICAgICAgICBsaXN0ICs9ICc8bGk+JyArIHlleHRBdHRbaV0uZGF0ZUZvcm1hdHRlZCArICcgLSAgPHNwYW4gY2xhc3M9ImhvbGlkYXlIb3Vyc1N0YXR1cyI+JyArIHlleHRBdHRbaV0uaG91cnNGb3JtYXR0ZWQgKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjJyArIHR5cGUgKyAnTGlzdCcpLmh0bWwobGlzdCk7CiAgICB9IGVsc2UgaWYgKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAvLyBpZiBpbiBlZGl0b3IgZGlzcGxheSBwbGFjZSBob2xkZXIKICAgICAgICAkKGVsZW1lbnQpLmh0bWwoZW1wdHlMaXN0UGxhY2VIb2xkZXIpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBpZiBlbXB0eSwgaGlkZSBlbGVtZW50IG9uIHJ1bnRpbWUKICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICAgIH0KfQoKdmFyIGRpc3BsYXlTZXJ2aWNlQXJlYSA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEsZmlyc3RPbmx5KSB7CiAgICB2YXIgbGlzdCA9ICIiOwogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIHZhciB5ZXh0QXR0ID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgeWV4dEF0dCA9IGZhbHNlCiAgICB9CgogICAgaWYgKGZpcnN0T25seSkgewogICAgICAgIGxpc3QgPSAnPGxpPicgKyB5ZXh0QXR0WzBdICsgJzwvbGk+JzsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoeWV4dEF0dCAmJiBBcnJheS5pc0FycmF5KHlleHRBdHQpKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmICh5ZXh0QXR0KSB7CiAgICAgICAgdmFyIHlleHRBdHQgPSB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW3R5cGUgKyAiLnBsYWNlcyJdCiAgICAgICAgZm9yICh2YXIgaT0wOyBpPCB5ZXh0QXR0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QgKz0gJzxsaT4nICsgeWV4dEF0dFtpXSArICc8L2xpPic7CiAgICAgICAgfQogICAgICAgICQoZWxlbWVudCkuZmluZCgnIycgKyB0eXBlICsgJ0xpc3QnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9Cgp9Cgp2YXIgZGlzcGxheVBob25lTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICAKICAgIHZhciBsb2NEYXRhID0geWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlczsKICAgIAogICAgaWYobG9jRGF0YS5waG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TWFpbjo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEucGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLmxvY2FsUGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkxvY2FsOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5sb2NhbFBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+QWx0ZXJuYXRlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5hbHRlcm5hdGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEudG9sbEZyZWVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+VG9sbCBGcmVlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS50b2xsRnJlZVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgaWYobG9jRGF0YS5tb2JpbGVQaG9uZSkgewogICAgICAgIGxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0icGhvbmVMYWJlbCI+TW9iaWxlOjwvc3Bhbj48c3BhbiBjbGFzcz0icGhvbmVOdW0iPiAnICsgZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5tb2JpbGVQaG9uZSkgKyAnPC9zcGFuPjwvbGk+JzsKICAgIH0KICAgIGlmKGxvY0RhdGEuZmF4UGhvbmUpIHsKICAgICAgICBsaXN0ICs9ICc8bGk+PHNwYW4gY2xhc3M9InBob25lTGFiZWwiPkZheDo8L3NwYW4+PHNwYW4gY2xhc3M9InBob25lTnVtIj4gJyArIGZvcm1hdFBob25lQmVmb3JlUmVuZGVyKGxvY0RhdGEuZmF4UGhvbmUpICsgJzwvc3Bhbj48L2xpPic7CiAgICB9CiAgICBpZihsb2NEYXRhLnR0eVBob25lKSB7CiAgICAgICAgbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJwaG9uZUxhYmVsIj5UVFk6PC9zcGFuPjxzcGFuIGNsYXNzPSJwaG9uZU51bSI+ICcgKyBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcihsb2NEYXRhLnR0eVBob25lKSArICc8L3NwYW4+PC9saT4nOwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyMnICsgdHlwZSArICdMaXN0JykuaHRtbChsaXN0KTsKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQoZm9ybWF0UGhvbmVCZWZvcmVSZW5kZXIobG9jRGF0YS5waG9uZSkpOwogICAgCn0KCnZhciBnZXROdW1EYXlzQmV0d2VlbiA9IGZ1bmN0aW9uKGQxLCBkMikgewogIHZhciBkaWZmID0gZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpOwogIHJldHVybiBkaWZmIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpOwp9OwoKdmFyIG9yZGVyUGF5bWVudHNMaXN0ID0gZnVuY3Rpb24obGlzdERhdGEpIHsKICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignRGlzY292ZXInKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkRpc2NvdmVyIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ0Rpc2NvdmVyJyk7CiAgICB9CiAgICAKICAgIGlmKGxpc3REYXRhLmluZGV4T2YoJ0FtZXJpY2FuIEV4cHJlc3MnKSA+PSAwKSB7CiAgICAgICAgbGlzdERhdGEuc3BsaWNlKGxpc3REYXRhLmluZGV4T2YoIkFtZXJpY2FuIEV4cHJlc3MiKSwgMSk7CiAgICAgICAgbGlzdERhdGEudW5zaGlmdCgnQW1lcmljYW4gRXhwcmVzcycpOwogICAgfQogICAgCiAgICBpZihsaXN0RGF0YS5pbmRleE9mKCdNYXN0ZXJDYXJkJykgPj0gMCkgewogICAgICAgIGxpc3REYXRhLnNwbGljZShsaXN0RGF0YS5pbmRleE9mKCJNYXN0ZXJDYXJkIiksIDEpOwogICAgICAgIGxpc3REYXRhLnVuc2hpZnQoJ01hc3RlckNhcmQnKTsKICAgIH0KICAgIAogICAgaWYobGlzdERhdGEuaW5kZXhPZignVmlzYScpID49IDApIHsKICAgICAgICBsaXN0RGF0YS5zcGxpY2UobGlzdERhdGEuaW5kZXhPZigiVmlzYSIpLCAxKTsKICAgICAgICBsaXN0RGF0YS51bnNoaWZ0KCdWaXNhJyk7CiAgICB9CiAgICAKICAgIHJldHVybiBsaXN0RGF0YQp9Cgp2YXIgZGlzcGxheUltYWdlTGlzdCA9IGZ1bmN0aW9uKHR5cGUseWV4dERhdGEpIHsKICAgIHZhciBsaXN0ID0gIiI7CiAgICB2YXIgbGlzdERhdGEgPSBvcmRlclBheW1lbnRzTGlzdChfeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSk7CiAgICAKICAgIAogICAgZm9yICh2YXIgaT0wOyBpPCBsaXN0RGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIAogICAgICAgIGxpc3QgKz0gJzxpbWcgc3JjPSInICsgZ2V0SW1hZ2VVcmwobGlzdERhdGFbaV0sZGF0YS5jb25maWcuY2FyZFN0eWxlRGFya09yTGlnaHQpICsgJyIgYWx0PSInICsgbGlzdERhdGFbaV0gKyAnIi8+JwogICAgfQogICAgCiAgICBpZihsaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJyNwYXltZW50T3B0aW9uc0ltYWdlcycpLmh0bWwobGlzdCkKICAgIH0gZWxzZSBpZiAoZGF0YS5pbkVkaXRvcikgewogICAgICAgICQoZWxlbWVudCkuaHRtbChlbXB0eUxpc3RQbGFjZUhvbGRlcik7CiAgICB9IGVsc2UgewogICAgICAgICQoZWxlbWVudCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgfQogICAgCiAgICAKICAgIAp9Cgp2YXIgZGlzcGxheVNvY2lhbEljb25zID0gZnVuY3Rpb24odHlwZSx5ZXh0RGF0YSkgewogICAgdmFyIGxpc3QgPSAiIjsKICAgIAogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwpIHsKICAgICAgICBsaXN0ICs9ICc8YSBocmVmPSInICsgeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy5mYWNlYm9va1BhZ2VVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2ZhY2Vib29rLnN2ZyIgLz48L2E+JwogICAgfQogICAgaWYoeWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlcy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS8nICsgIHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMudHdpdHRlckhhbmRsZSArICciIHRhcmdldD0iX2JsYW5rIj4gPGltZyBzcmM9Imh0dHBzOi8vY2RuLndlYnNpdGVzLmhpYnUuY29tLy1yZXNlbGxlcnMtcHJldmlldy9fc29jaWFsX2ljb25zL2hpYnVfdHdpdHRlci5zdmciIC8+PC9hPicKICAgIH0KICAgIGlmKHlleHREYXRhLmVudGl0aWVzWzBdLmF0dHJpYnV0ZXMuaW5zdGFncmFtSGFuZGxlKSB7CiAgICAgICAgbGlzdCArPSAnPGEgaHJlZj0iaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8nKyB5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzLmluc3RhZ3JhbUhhbmRsZSsnIiB0YXJnZXQ9Il9ibGFuayI+IDxpbWcgc3JjPSJodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX3NvY2lhbF9pY29ucy9oaWJ1X2luc3RhZ3JhbS5zdmciIC8+PC9hPicKICAgIH0KICAgIAogICAgaWYobGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgJChlbGVtZW50KS5maW5kKCcjc29jaWFsSWNvbnMnKS5odG1sKGxpc3QpOwogICAgfSBlbHNlIGlmIChkYXRhLmluRWRpdG9yKSB7CiAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJChlbGVtZW50KS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICB9CiAgICAKICAgIAp9Cgp2YXIgZ2V0SW1hZ2VVcmwgPSBmdW5jdGlvbihuYW1lLHN0eWxlKSB7CiAgICB2YXIgY2RuUGF0aCA9ICdodHRwczovL2Nkbi53ZWJzaXRlcy5oaWJ1LmNvbS8tcmVzZWxsZXJzLXByZXZpZXcvX2NjX2ljb25zLyc7CiAgICBpZighc3R5bGUpIHsKICAgICAgICBzdHlsZSA9ICdfZC5zdmcnCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIlpFTExFIil7CiAgICAgICAgbmFtZSA9ICJaZWxsZSIKICAgIH0KICAgIGlmIChuYW1lID09PSAiR29vZ2xlIFBheSIpewogICAgICAgIG5hbWUgPSAiQW5kcm9pZCBQYXkiCiAgICB9CiAgICBpZiAobmFtZSA9PT0gIktMQVJOQSIpewogICAgICAgIG5hbWUgPSAiS2xhcm5hIgogICAgfQogICAgdmFyIGltYWdlVXJsPScnOwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgY2FzZSAnVmlzYSc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ01hc3RlckNhcmQnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdEaXNjb3Zlcic6CiAgICAgICAgICAgIGltYWdlVXJsID0gY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQW1lcmljYW4gRXhwcmVzcyc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0FuZHJvaWQgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQXBwbGUgUGF5JzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQml0Y29pbic6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0Nhc2gnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdDaGVjayc6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0RpbmVycyBDbHViJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRGlzY292ZXInOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdGaW5hbmNpbmcnOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdJbnZvaWNlJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnUGF5UGFsJzoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnU2Ftc3VuZyBQYXknOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJUcmF2ZWxlcidzIENoZWNrIjoKICAgICAgICAgICAgaW1hZ2VVcmwgPSAgY2RuUGF0aCArIG5hbWUucmVwbGFjZSgvW1xXX10rL2csJycpLnRvTG93ZXJDYXNlKCkgKyBzdHlsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiWmVsbGUiOgogICAgICAgICAgICBpbWFnZVVybCA9ICBjZG5QYXRoICsgbmFtZS5yZXBsYWNlKC9bXFdfXSsvZywnJykudG9Mb3dlckNhc2UoKSArIHN0eWxlOwogICAgICAgICAgICBicmVhawogICAgICAgIGNhc2UgIktsYXJuYSI6CiAgICAgICAgICAgIGltYWdlVXJsID0gIGNkblBhdGggKyBuYW1lLnJlcGxhY2UoL1tcV19dKy9nLCcnKS50b0xvd2VyQ2FzZSgpICsgc3R5bGU7CiAgICAgICAgICAgIGJyZWFrCiAgICB9CiAgICByZXR1cm4gaW1hZ2VVcmwKfQoKZnVuY3Rpb24gZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKSB7CiAgICB2YXIgeWV4dFBob25lUmVuZGVyRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ1lleHRQaG9uZUNoYW5nZUV2ZW50JywgCiAgICAgICAgeyAKICAgICAgICAgICAgZGV0YWlsOiBwaG9uZSwgCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsIAogICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlIAogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoeWV4dFBob25lUmVuZGVyRXZlbnQpOwp9Cgp2YXIgaW5pdFlleHRFbGVtZW50cyA9IGZ1bmN0aW9uKHlleHREYXRhLHdpZGdldFR5cGUpewogICAgaWYgKHdpZGdldFR5cGUgPT09ICdhZGRyZXNzJyAmJiBkYXRhLmNvbmZpZy5kcmF3TWFwKSB7CiAgICAgICAgZHJhd01hcCh5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgJiYgZGF0YS5jb25maWcuc2hvd1BheW1lbnRzQXMgPT09ICdwYXltZW50SWNvbnMnKSB7CiAgICAgICAgZGlzcGxheUltYWdlTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2xpc3QnKSB7CiAgICAgICAgZGlzcGxheVBob25lTGlzdCh3aWRnZXRUeXBlLHlleHREYXRhKTsKICAgIC8vIGNoZWNrIGZvciBhbnkgbGlzdCB0eXBlCiAgICB9IGVsc2UgaWYod2lkZ2V0VHlwZSA9PT0gJ3Bob25lJyAmJiBkYXRhLmNvbmZpZy5waG9uZVNob3dBcyA9PT0gJ2J1dHRvbicpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCIuZG1CdXR0b25MaW5rIikuaHRtbCgnPHNwYW4gY2xhc3M9InRleHQiPicgKyBwaG9uZSArICc8L3NwYW4+Jyk7ICAgCiAgICAgICAgICAgIAogICAgICAgICAgICBlbWl0WWV4dFBob25lUmVuZGVyRXZlbnQocGhvbmUpOwogICAgICAgICAgICAKICAgICAgICB9KTsKICAgIH0gZWxzZSBpZih3aWRnZXRUeXBlID09PSAncGhvbmUnICYmIGRhdGEuY29uZmlnLnBob25lU2hvd0FzID09PSAndGV4dCcpIHsKICAgICAgICB2YXIgcGhGb3JtYXR0ZWQgPSBmb3JtYXRQaG9uZUJlZm9yZVJlbmRlcih5ZXh0RGF0YS5lbnRpdGllc1swXS5hdHRyaWJ1dGVzW2RhdGEuY29uZmlnLnBob25lVHlwZV0sZnVuY3Rpb24ocGhvbmUpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcueWV4dFBob25lVGV4dCcpLmh0bWwoJzxzcGFuIGNsYXNzPSJ0ZXh0Ij4nICsgcGhvbmUgKyAnPC9zcGFuPicpOyAgIAogICAgICAgICAgICAKICAgICAgICAgICAgZW1pdFlleHRQaG9uZVJlbmRlckV2ZW50KHBob25lKTsKICAgICAgICAgICAgCiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdzZXJ2aWNlcycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2dvb2dsZUF0dHJpYnV0ZXNGb3JtYXR0ZWQnIHx8IHdpZGdldFR5cGUgPT09ICdsYW5ndWFnZXMnIHx8IHdpZGdldFR5cGUgPT09ICdwYXltZW50T3B0aW9ucycgfHwgd2lkZ2V0VHlwZSA9PT0gJ2tleXdvcmRzJyB8fCB3aWRnZXRUeXBlID09PSAncHJvZHVjdHMnIHx8IHdpZGdldFR5cGUgPT09ICdhc3NvY2lhdGlvbnMnIHx8IHdpZGdldFR5cGUgPT09ICdicmFuZHMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlUZXh0ZExpc3Qod2lkZ2V0VHlwZSx5ZXh0RGF0YSkKICAgICAgICB9LDEpOwogICAgfSBlbHNlIGlmKHdpZGdldFR5cGUgPT09ICdzcGVjaWFsdGllcycpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwbGF5U3BlY2lhbHRpZXMoeWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfWVsc2UgaWYgKHdpZGdldFR5cGUgPT09J3NlcnZpY2VBcmVhJykgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGRpc3BsYXlTZXJ2aWNlQXJlYSh3aWRnZXRUeXBlLHlleHREYXRhLGRhdGEuY29uZmlnLnNob3dTZXJ2aWNlQXJlYUZpcnN0KQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0naG91cnMnICYmIGRhdGEuY29uZmlnLmhvdXJzU2hvd0FzID09PSAnbGlzdCcgJiYgZGF0YS5jb25maWcuaXNMaXN0ID09IGZhbHNlKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheUhvdXJzKHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSdob3VycycgJiYgZGF0YS5jb25maWcuaG91cnNTaG93QXMgPT09ICdvcGVuSG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcGxheU9wZW5Ib3Vycyh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgICAgIH0sMSkKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ3NvY2lhbCcpIHsKICAgICAgICBkaXNwbGF5U29jaWFsSWNvbnMod2lkZ2V0VHlwZSx5ZXh0RGF0YSk7CiAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT09ICdob2xpZGF5SG91cnMnKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgCiAgICAgICAgICAgIGRpc3BsYXlIb2xpZGF5SG91cnNMaXN0KHdpZGdldFR5cGUseWV4dERhdGEpCiAgICAgICAgfSwxKTsKICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PT0gJ2hvdXJzJykgewogICAgICAgIC8vaGlkZSBob3VycyBsaXN0IGlmIHRvZ2dsZSBlbmFibGVkCiAgICAgICAgaWYoZGF0YS5jb25maWcuaGlkZUhvdXJzTGlzdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy55ZXh0SG91cnMnKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgICAgICAgfQogICAgfSBlbHNlIGlmICh3aWRnZXRUeXBlID09PSAnZGVzY3JpcHRpb24nIHx8IHdpZGdldFR5cGUgPT09ICd5ZWFyRXN0YWJsaXNoZWQnIHx8IHdpZGdldFR5cGUgPT09ICdlbWFpbCcgfHwgd2lkZ2V0VHlwZSA9PT0gJ25hbWUnKSB7CiAgICAgICAgLy8gY2hlY2sKICAgICAgICBoaWRlSWZFbXB0eSh3aWRnZXRUeXBlLHlleHREYXRhKQogICAgfQogICAgLy9yZW1vdmUgZXJyb3IgaWYgc2NyaXB0IG5vdCBlbnRlcmVkIGNvcnJlY3RseS4KICAgICQoZWxlbWVudCkuZmluZCgnLndyb25nU2NyaXB0RXJyb3InKS5yZW1vdmVDbGFzcygnaGFzRXJyb3InKTsKICAgIAp9CgpmdW5jdGlvbiBoaWRlSWZFbXB0eSh0eXBlLHlleHREYXRhKSB7CiAgICBpZigheWV4dERhdGEuZW50aXRpZXNbMF0uYXR0cmlidXRlc1t0eXBlXSkgewogICAgICAgIGlmKGRhdGEuaW5FZGl0b3IpIHsKICAgICAgICAgICAgJChlbGVtZW50KS5odG1sKGVtcHR5TGlzdFBsYWNlSG9sZGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmNzcygnZGlzcGxheScsJ25vbmUnKTsgICAgCiAgICAgICAgfQogICAgICAgIAogICAgfQp9CgovLyBUT0RPIENIQU5HRSBUTyBFVkVOVCBDQUxMIEJBQ0sKdmFyIHN0YXJ0SW50ZXJ2YWxUb1dhaXRBbmRMb2FkV2lkZ2V0cyA9IGZ1bmN0aW9uKHdpZGdldFR5cGUpIHsKICAgIC8vc3RhcnQgaW50ZXJ2YWwgZm9yIHRoaXMgc3BlY2lmaWMgd2lkZ2V0CiAgICB2YXIgaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgIGlmICh3aW5kb3cuX3lleHREYXRhKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxDaGVja1lleHRMb2FkZWQpOwogICAgICAgICAgICBpbml0WWV4dEVsZW1lbnRzKHdpbmRvdy5feWV4dERhdGEsd2lkZ2V0VHlwZSk7CiAgICAgICAgfSAKICAgIH0sNTApCn0KCgovKiBpbml0aWFsaXphdGlvbiAqLwppZihkYXRhLmluRWRpdG9yKXsKICAgIHdpbmRvdy5yZWZyZXNoWWV4dCAmJiB3aW5kb3cucmVmcmVzaFlleHQoKTsKICAgIAogICAgCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgICAgIGlmKCF3aW5kb3cueWV4dEluaXRpYWxpemVkKXsKICAgICAgICAgICAgJChlbGVtZW50KS5maW5kKCcubWlzc2luZ1lleHRXaWRnZXQnKS5hZGRDbGFzcygnc2hvdycpOyAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKGVsZW1lbnQpLmZpbmQoJy5taXNzaW5nWWV4dFdpZGdldCcpLnJlbW92ZUNsYXNzKCdzaG93Jyk7IAogICAgICAgIH0KICAgIH0pOwogICAgCn0gZWxzZSB7CiAgICBkbUFQSS5ydW5PblJlYWR5KCd5ZXh0JyAsIGZ1bmN0aW9uKCl7CiAgICAgICAgbG9hZFlleHQoKTsKICAgfSk7CiAgICAvLyBCZWZvcmUgbmF2aWdhdGluZyB3aXRoIEFqYXgsIHdlIHNldCB0aGUgeWV4dCBpbml0aWFsaXplZCB0byBiZSBmYWxzZSBzbyBpdCB3aWxsIGJlIGluaXRpYWxpemVkIGFnYWluIGFmdGVyIHRoZSBhamF4IG5hdmlnYXRpb24KICAgIGRtQVBJLnJ1bkJlZm9yZUFqYXhOYXZpZ2F0aW9uKCd5ZXh0JywgZnVuY3Rpb24oKXsKICAgICAgICB3aW5kb3cueWV4dEluaXRpYWxpemVkID0gZmFsc2U7CiAgICB9KTsKfQ==","css":".editorOnlyInfo, .multipleYextError, .wrongScriptError{\n display: none;\n max-width:350px;\n background: #fff;\n text-align: left;\n padding: 10px;\n line-height: normal;\n font-size: 14px;\n}\n\n.editorOnlyInfo.inEditor{\n display: block;\n color: #3ac280;\n}\n\n.multipleYextError.hasError, .wrongScriptError.hasError{\n display: block;\n color: red;\n}\n\n.widget-7b6cfb .dmWidget.yextButton {\n width: 100%;\n}\n\n#dm .widget-7b6cfb {\n line-height: normal!important;\n}\n\na.getDirections {\n display: block;\n}\n\n.yextButton.show {\n display:inline-block;\n}\n\n.yextButton .text {\n display:table-cell;\n vertical-align:middle;\n}\n\n.yextMap{\n height:100%;\n width:100%;\n overflow: hidden;\n z-index: 0;\n text-align: left;\n margin: 0 auto;\n}\n\n.yextHours{\n text-align: left;\n width:300px;\n}\n\n.yextHours .row {\n display:flex;\n}\n.yextHours .row .left, .yextHours .row .right {\n flex:1;\n align-self: center;\n}\n.yextAdditionalHoursText {\n display:inline-block;\n}\n\n.yextAddress{\n text-align: left;\n}\n\n#paymentOptionsImages img {\n display: inline-block;\n width: 60px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n#socialIcons a {\n display: inline-block;\n width: 50px;\n margin-right: 5px;\n margin-bottom: 5px;\n}\n.bullet {\n list-style-type:disc; \n}\n.no-list {\n list-style-type:none;\n}\n.circle {\n list-style-type:circle; \n}\n.square {\n list-style-type:square; \n}\n.decimal {\n list-style-type:decimal; \n}\n.bold {\n font-weight: bold;\n}\n#socialIcons {\n display: flex;\n}\n#socialIcons.left {\n justify-content: flex-start;\n}\n#socialIcons.right {\n justify-content: flex-end;\n}\n#socialIcons.center {\n justify-content: center;\n}\nul[id*=\"List\"] {\n margin:0;\n}\nh3[class*=\"Header\"] {\n margin: 10px 0;\n}\n.yextEmail {\n display:block;\n}\n.picons-left {\n text-align:left;\n}\n.picons-right {\n text-align:right;\n}\n.picons-center {\n text-align:center;\n}\n\n.openedStatus {\n color: #3ac280;\n}\n\n.allDayStatus {\n color: #3ac280;\n}\n\n.closedStatus {\n color: #FF0000;\n}\n\n.soonStatus {\n color: #FF7322;\n}\n\n\n","strings":{}},{"widgetId":"afd4bc7f907140298e111130d715031d","version":99,"js":"bGV0IEhhc09wZW5lZE1lbnUgPSBmYWxzZTsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBkaXNwbGF5VHlwZSgpOw0KfSk7DQoNCmZ1bmN0aW9uIGRpc3BsYXlUeXBlKCkgew0KICAgIGlmKGlzTW9iaWxlKCkpIHsNCiAgICAgICAgZGlzcGxheU1vYmlsZSgpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGRpc3BsYXlEZXNrdG9wKCk7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBkaXNwbGF5TW9iaWxlKCkgew0KICAgIHZhciBtYXN0ZXJGYWJFbGUgPSAkKGVsZW1lbnQpLmZpbmQoJyNtYXN0ZXJmYWInKTsNCiAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuTW9iaWxlTWFpbikpOw0KICAgIA0KICAgICQobWFzdGVyRmFiRWxlKS5hdHRyKCdjbGFzcycsICdmYWIgbWFzdGVyLW1vYmlsZScpOy8vIGFkZCBtb2JpbGUgY2xhc3MgZm9yIGN1c3RvbSBzdHlsZQ0KICAgIA0KICAgICQobWFzdGVyRmFiRWxlKS5jc3MoJ2Rpc3BsYXknLCAnZmxleCcpOyAvL3NpbmNlIGVsZW1lbnQgaXMgaGlkZGVuIGJ5IGRlZmF1bHQsIHNob3cgaW5zdGVhZA0KICAgIA0KICAgIC8vIHNldCB0aGUgdGV4dCBhbGlnbm1lbnQgdmFyIGhlcmUgZm9yIHVzZSBiZWxvdyAodXBkYXRlIEJTUjoyMDIwMDQyMSkNCiAgICB2YXIgbW9UZXh0ID0gKGRhdGEuY29uZmlnLk1vYmlsZU9yaWVudGF0aW9uID09PSAnbGVmdCcpID8gJ2JzclJpZ2h0VGV4dCcgOiAnbGVmdFRleHQnOw0KICAgIA0KICAgIC8vIGFkZCBpdGVtcyB3aXRoIG9yIHdpdGhvdXQgb3ZlcmxheSBhbmQgbGFiZWwgdGV4dA0KICAgIGlmKGRhdGEuY29uZmlnLk1vYmlsZUxheW91dCA9PT0gJ0Z1bGwnKSB7DQogICAgICAgICQoJy5tb2JpbGUtYmcnKS5hZnRlcihnZXRJdGVtcyhtb1RleHQpKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgICQoJy5tb2JpbGUtYmcnKS5hZnRlcihnZXRJdGVtcygpKTsNCiAgICB9DQogICAgDQogICAgbW9iaWxlVGhlbWUoKTsgIC8vIGFkZCBsaWdodCBvciBkYXJrIHRoZW1lDQogICAgYnNySWNvblJlc2l6ZSgpOyAvLyBtYWtlcyBhIGN1c3RvbSBpY29uIHJlc2l6YWJsZSAodXBkYXRlIEJTUjoyMDIwMDUyOSkNCiAgICBic3JNb2JpbGVPcmllbnRhdGlvbigpOyAvLyBwb3NpdGlvbnMgbWVudSBsZWZ0IG9yIHJpZ2h0ICh1cGRhdGUgQlNSOjIwMjAwNDIxKQ0KICAgIGFkZExpc3RlbmVyKCk7DQogICAgDQogICAgaWYgKHR5cGVvZiBmYnEgPT09ICJmdW5jdGlvbiIpIHsgLy8gdGhpcyBtYWtlcyBzdXJlIHRoYXQgZmJxIGlzIG9uIHRoZSBwYWdlDQogICAgICAgIGFkZFBpeGVsTGlzdGVuZXIoKTsgLy8gRmFjZWJvb2sgUGl4ZWwgY29udmVyc2lvbiB0cmFja2luZyAodXBkYXRlIEJTUjoyMDIwMDQyMikNCiAgICB9DQogICAgYWRkQ2hhdExpc3RlbmVyKCk7IC8vIEFkZCBjaGF0IHNjcmlwdCBpbmplY3Rpb24gKHVwZGF0ZSBCU1I6MjAyMDA1MjYpDQogICAgDQogICAgLy8gYWRkIGZvY3VzIGFuaW1hdGlvbg0KICAgIGlmKGRhdGEuY29uZmlnLkZvY3VzQW5pKSBhbmltYXRlRm9jdXMoKTsNCn0NCmZ1bmN0aW9uIGRpc3BsYXlEZXNrdG9wKCkgew0KICAgIHZhciBtYXN0ZXJGYWJFbGUgPSAkKGVsZW1lbnQpLmZpbmQoJyNtYXN0ZXJmYWInKTsNCiAgICAkKG1hc3RlckZhYkVsZSkuY3NzKCdkaXNwbGF5JywgJ2ZsZXgnKTsgLy9zaW5jZSBlbGVtZW50IGlzIGhpZGRlbiBieSBkZWZhdWx0LCBzaG93IGluc3RlYWQNCiAgICBpZihkYXRhLmNvbmZpZy5EZXNrdG9wTGF5b3V0ID09PSAnQmFyJykgew0KICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuRGVza01haW4pKTsNCiAgICAgICAgJChtYXN0ZXJGYWJFbGUpLmFwcGVuZChnZXRJdGVtcygncmlnaHRUZXh0JykpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJCgnI2Zsb2F0LWNvbnRhaW5lcicpLmVtcHR5KCkuYXBwZW5kKGdldEl0ZW1zKCdyaWdodFRleHQnLCB0cnVlKSk7DQogICAgfQ0KICAgIGRlc2t0b3BUeXBlKCk7DQogICAgYnNySWNvblJlc2l6ZSgpOyAvLyBtYWtlcyBhIGN1c3RvbSBpY29uIHJlc2l6YWJsZSAodXBkYXRlIEJTUjoyMDIwMDUyOSkNCiAgICBhZGRMaXN0ZW5lcigpOw0KICAgIA0KICAgIGlmICh0eXBlb2YgZmJxID09PSAiZnVuY3Rpb24iKSB7IC8vIHRoaXMgbWFrZXMgc3VyZSB0aGF0IGZicSBpcyBvbiB0aGUgcGFnZQ0KICAgICAgICBhZGRQaXhlbExpc3RlbmVyKCk7IC8vIEZhY2Vib29rIFBpeGVsIGNvbnZlcnNpb24gdHJhY2tpbmcgKHVwZGF0ZSBCU1I6MjAyMDA0MjIpDQogICAgfQ0KICAgIGFkZENoYXRMaXN0ZW5lcigpOyAvLyBBZGQgY2hhdCBzY3JpcHQgaW5qZWN0aW9uICh1cGRhdGUgQlNSOjIwMjAwNTI2KQ0KICAgIA0KICAgIC8vIGFkZCBmb2N1cyBhbmltYXRpb24NCiAgICBpZihkYXRhLmNvbmZpZy5Gb2N1c0FuaSkgYW5pbWF0ZUZvY3VzKCk7DQp9DQovLyBoYW5kbGVzIHN0eWxlIGNoYW5nZXMgZm9yIGRlc2t0b3AgdHlwZXMNCmZ1bmN0aW9uIGRlc2t0b3BUeXBlKCkgew0KICAgICQoJyNtYXN0ZXJmYWInKS5hdHRyKCdjbGFzcycsICdmYWIgbWFzdGVyLWRlc2t0b3AnKTsgLy8gYWRkIGRlc2t0b3AgY2xhc3MgZm9yIHN0eWxpbmcNCiAgICAkKCcuaWNvbi1jb250YWluZXInKS5hZGRDbGFzcygnZGVza3RvcCcpOw0KICAgIGlmKGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdCYXInKSB7DQogICAgICAgICQoJy5tZW51LWxpbmsnKS5hZGRDbGFzcygnZGVzay1iYXInKTsgICAgICAgLy8gYWRkIGNsYXNzIGZvciBmaXhlZCBiYXIgdGV4dA0KICAgICAgICAkKCcuY2hpbGQnKS5hdHRyKCdjbGFzcycsICdmYWIgY2hpbGQgY2hpbGQtZGVza3RvcC1iYXInKTsNCiAgICAgICAgDQogICAgICAgIGNvbnN0IG1hc3RlckxhYmVsID0gJzxzcGFuIGlkPSJtYXN0ZXItbGFiZWwiPicrZGF0YS5jb25maWcuTWFpbkxhYmVsKyc8L3NwYW4+JzsNCiAgICAgICAgJCgnI21hc3Rlci1sYWJlbCcpLnJlbW92ZSgpOw0KICAgICAgICAkKCcjbWFzdGVyZmFiJykuYXBwZW5kKG1hc3RlckxhYmVsKTsNCiAgICAgICAgDQogICAgICAgICQoJyNtYXN0ZXJmYWInKS5hZGRDbGFzcygnbWFzdGVyLWJhcicpOw0KICAgIH0gZWxzZSBpZihkYXRhLmNvbmZpZy5EZXNrdG9wTGF5b3V0ID09PSAnRmxvYXQnKSB7DQogICAgICAgICQoJyNtYXN0ZXJmYWInKS5oaWRlKCk7DQogICAgfQ0KfQ0KLy8gc3R5bGVzIGxpZ2h0IGFuZCBkYXJrIG1vYmlsZSB0aGVtZXMNCmZ1bmN0aW9uIG1vYmlsZVRoZW1lKCkgew0KICAgICQoJy5jaGlsZCcpLmF0dHIoJ2NsYXNzJywgJ2ZhYiBjaGlsZCBjaGlsZC1tb2JpbGUnKTsNCiAgICBpZihkYXRhLmNvbmZpZy5Nb2JpbGVUaGVtZSA9PT0gJ0xpZ2h0Jykgew0KICAgICAgICAkKCcub3ZlcmxheSwgLmNoaWxkLCAuc29jaWFsLWljb24sIC5pY29uLWNvbnRhaW5lciwgLm1vYmlsZS1iZywgc29jaWFsLWJnLCAubWVudS1saW5rJykuYWRkQ2xhc3MoJ21vYmlsZSBsaWdodCcpOw0KICAgIH0NCiAgICBlbHNlIGlmKGRhdGEuY29uZmlnLk1vYmlsZVRoZW1lID09PSAnRGFyaycpIHsNCiAgICAgICAgJCgnLm92ZXJsYXksIC5jaGlsZCwgLnNvY2lhbC1pY29uLCAuaWNvbi1jb250YWluZXIsIC5tb2JpbGUtYmcsIHNvY2lhbC1iZywgLm1lbnUtbGluaycpLmFkZENsYXNzKCdtb2JpbGUgZGFyaycpOw0KICAgIH0NCn0NCi8vIGFkZHMgdGhlIG1lbnUgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIG1vYmlsZSBzY3JlZW4gKHVwZGF0ZSBCU1I6MjAyMDA0MjEpDQpmdW5jdGlvbiBic3JNb2JpbGVPcmllbnRhdGlvbigpIHsNCiAgICBpZihkYXRhLmNvbmZpZy5Nb2JpbGVPcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7DQogICAgICAgICQoJy5mYWIubWFzdGVyLW1vYmlsZSwgLmNoaWxkLm1vYmlsZScpLmFkZENsYXNzKCdic3ItbGVmdCcpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJCgnLmZhYi5tYXN0ZXItbW9iaWxlLCAuY2hpbGQubW9iaWxlJykucmVtb3ZlQ2xhc3MoJ2Jzci1sZWZ0Jyk7DQogICAgfQ0KfQ0KDQovKiAgDQogICAgUHJldmlvdXMgaW1wbGVtZW50YXRpb24gcGxhY2VzIGN1c3RvbSBpY29ucyBpbiBhIG5ldyA8ZGl2Pg0KICAgIEkgZm91bmQgdGhpcyB0byBiZSBpbmNvbnNpc3RlbnQgaW4gcmVzaXppbmcgc28gdGhlIGZ1bmN0aW9uDQogICAgYWRkcyB0aGUgYXBwcm9wcmlhdGUgY2xhc3MgZGlyZWN0bHkgdG8gdGhlIHN2ZyBlbGVtZW50DQogICAgKHVwZGF0ZSBCU1I6MjAyMDA1MjkpDQoqLw0KZnVuY3Rpb24gYnNySWNvblJlc2l6ZSgpIHsNCiAgICBjdXN0b21JY29ucyA9ICQoZWxlbWVudCkuZmluZCgnLmN1c3RvbS11c2VyLWljb24nKTsNCiAgICBpZihjdXN0b21JY29ucy5sZW5ndGggPiAwKSB7DQogICAgICAgICQuZWFjaChjdXN0b21JY29ucywgZnVuY3Rpb24oaSwgY2ljb24pIHsNCiAgICAgICAgICAgIHZhciBjbGFzc0xpc3QgPSAkKGNpY29uKS5hdHRyKCdjbGFzcycpLnNwbGl0KC9ccysvKTsNCiAgICAgICAgICAgICQuZWFjaChjbGFzc0xpc3QsIGZ1bmN0aW9uKGluZGV4LCBpdGVtKSB7DQogICAgICAgICAgICAgICAgaWYoaXRlbSAhPSAnY3VzdG9tLXVzZXItaWNvbicpIHsNCiAgICAgICAgICAgICAgICAgICAkKCAiLiIgKyBpdGVtICsgIiA+IHN2ZyIgKS5hZGRDbGFzcyhpdGVtKTsgLy8gYWRkIHRoZSBjYWxsaW5nIGNsYXNzIHRvIHRoZSBjaGlsZCBzdmcgZWxlbWVudCBkaXJlY3RseQ0KICAgICAgICAgICAgICAgICAgICQoICIuIiArIGl0ZW0gKyAiID4gc3ZnIiApLnVud3JhcCgpOyAvLyByZW1vdmUgdGhlIHBhcmVudCBkaXYNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQoNCi8vIGFkZHMgY2xpY2sgb3IgaG92ZXIgbGlzdGVuZXJzDQpmdW5jdGlvbiBhZGRMaXN0ZW5lcigpIHsNCiAgICAvLyBhZGQgbGlzdGVuZXIgYW5kIGFuaW1hdGlvbiBmb3IgZmxvYXRpbmcgaWNvbnMgaG92ZXIgYW5pbWF0aW9uDQogICAgaWYoIWlzTW9iaWxlKCkgJiYgZGF0YS5jb25maWcuRGVza3RvcExheW91dCA9PT0gJ0Zsb2F0JykgYW5pbWF0ZUZsb2F0KCcuZmxvYXQtY29udGFpbmVyJywgMzAwKTsNCiAgICAvLyBjbGljayBoYW5kbGVycyBmb3IgZGVza3RvcCBiYXIgYW5kIG1vYmlsZSBvcHRpb25zDQogICAgZWxzZSB7DQogICAgICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub2ZmKCdjbGljaycsICcuZmFiLC5vdmVybGF5Jyk7DQogICAgICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub24oJ2NsaWNrJywgJy5mYWIsLm92ZXJsYXknLCBmdW5jdGlvbigpew0KICAgICAgICAgICAgSGFzT3BlbmVkTWVudSA9IHRydWU7DQogICAgICAgICAgICAkKCcuYW5pbWF0aW9uJykucmVtb3ZlKCk7ICAgLy8gcmVtb3ZlIGFueSBhbmltYXRpb25zIHdlIGhhdmUNCiAgICAgICAgICAgIGlmKGlzTW9iaWxlKCkpIHsNCiAgICAgICAgICAgICAgICBhbmltYXRlSWNvbnMoJ292ZXJsYXknKTsNCiAgICAgICAgICAgICAgICBkYXRhLmNvbmZpZy5Nb2JpbGVMYXlvdXQgPT09ICdGdWxsJz8gYW5pbWF0ZUJnKCcubW9iaWxlLWJnJykgOiAnJzsNCiAgICAgICAgICAgIH0gZWxzZSB7ICAgIC8vIGJhciBkZXNrdG9wDQogICAgICAgICAgICAgICAgYW5pbWF0ZUljb25zKCdoZWxwVGV4dCcpOw0KICAgICAgICAgICAgICAgIGFuaW1hdGVCZygnLmRlc2t0b3AtYmcnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQovLyBsaXN0ZW5zIGZvciBzaGFyZSBidXR0b24gY2xpY2sgYW5kIHRyaWdnZXJzIHJlc3BvbnNlDQpmdW5jdGlvbiBhZGRTaGFyZUxpc3RlbmVyKCkgew0KICAgICQoIiNjb252ZXJzaW9uLW1lbnUtY29udGFpbmVyIikub2ZmKCdjbGljaycsICcuc2hhcmUnKTsNCiAgICAkKCIuc2hhcmUiKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NoYXJlIGNsaWNrZWQgbW9kYWwgc2hvdWxkIG9wZW4nKTsNCiAgICAgICAgTWljcm9Nb2RhbC5zaG93KCdzb2NpYWwtbW9kYWwtbWVudScpOyANCiAgICB9KTsNCn0NCmZ1bmN0aW9uIGFkZFBpeGVsTGlzdGVuZXIoKSB7DQogICAgJCgnLmJzci1tZW51bGluaycpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgZXZlbnROYW1lID0gJCh0aGlzKS5kYXRhKCdldmVudG5hbWUnKTsNCiAgICAgICAgaWYoIWV2ZW50TmFtZSkgew0KICAgICAgICAgICAgZmJxKCd0cmFjaycsICdDb250YWN0Jyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmYnEoJ3RyYWNrQ3VzdG9tJywgZXZlbnROYW1lKTsNCiAgICAgICAgfQ0KICAgIH0pOw0KfQ0KZnVuY3Rpb24gYWRkQ2hhdExpc3RlbmVyKCkgew0KICAgICQoIi5ic3ItY2hhdCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCIjY2hhdC1zY3JpcHQiKS5yZW1vdmUoKTsgLy8gR2V0IHJpZCBvZiBhbnkgY2hhdC1zY3JpcHQgb24gdGhlIHBhZ2UNCiAgICAgICAgJC5lYWNoKGRhdGEuY29uZmlnLkljb25MaXN0LCBmdW5jdGlvbihpbmRleCx2YWx1ZSl7DQogICAgICAgICAgICBpZih2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnQ2hhdFNjcmlwdCcpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBjc2NyaXB0ID0gdmFsdWUuQ2hhdFNjcmlwdDsNCiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2NyaXB0IGlzIGEgc3JjIG9yIHJhdyBzY3JpcHQNCiAgICAgICAgICAgICAgICAvLyBDaGFuZ2VkIG1pbmQgYW5kIHdhbnRlZCB0byBpbnB1dCA8c2NyaXB0PiB0YWdzIHNvIHRoaXMgaXMgc2F2ZWQgZm9yIHBvc3Rlcml0eQ0KICAgICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXig/OlthLXpdKzopPy8vJywgJ2knKTsgLy8gbm9uIGNhc2Utc2Vuc2l0aXZlLCBwcm90b2NvbC1hZ25vc3RpYyANCiAgICAgICAgICAgICAgICBpZiAocmUudGVzdChjc2NyaXB0KSkgew0KICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8c2NyaXB0IGFzeW5jPSJhc3luYyIgc3JjPSInICsgY3NjcmlwdCArICciIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImNoYXQtc2NyaXB0Ij48XC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWsgb3V0IG9mIHRoZSAkLmVhY2goKSBvbiBmaXJzdCBvY2N1cmVuY2UNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImNoYXQtc2NyaXB0Ij4nICsgY3NjcmlwdCArICc8XC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWsgb3V0IG9mIHRoZSAkLmVhY2goKSBvbiBmaXJzdCBvY2N1cmVuY2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKGNzY3JpcHQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCn0NCi8vDQovLyBBTklNQVRJT05TDQovLw0KZnVuY3Rpb24gYW5pbWF0ZUZvY3VzKCkgew0KICAgICQoJy5hbmltYXRpb24nKS5yZW1vdmUoKTsgICAvL2luIGNhc2UgYWxyZWFkeSBpbiBET00NCiAgICBpZighSGFzT3BlbmVkTWVudSkgew0KICAgICAgICBpZihpc01vYmlsZSgpKSB7DQogICAgICAgICAgICBjb25zdCBwdWxzZSA9ICc8ZGl2IGNsYXNzPSJwdWxzZTIgYW5pbWF0aW9uIi8+PGRpdiBjbGFzcz0icHVsc2UgYW5pbWF0aW9uIi8+JzsNCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgJCgnI21hc3RlcmZhYicpLmFwcGVuZChwdWxzZSk7DQogICAgICAgICAgICB9LCArZGF0YS5jb25maWcuRm9jdXNEZWxheSk7DQogICAgICAgIH0NCiAgICAgICAgLy8gZGVza3RvcA0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdGbG9hdCc/DQogICAgICAgICAgICAgICAgYW5pbWF0ZUZsb2F0Rm9jdXMoKSA6IGFuaW1hdGVCYXJGb2N1cygpOw0KICAgICAgICB9DQogICAgfQ0KfQ0KZnVuY3Rpb24gYW5pbWF0ZUZsb2F0Rm9jdXMoKSB7DQogICAgaWYoJCgnLmZvY3VzJylbMF0pIHsNCiAgICAgICAgY29uc3QgaWQgPSAkKCcuZm9jdXMnKVswXS5pZDsNCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICQoJyMnK2lkKS5jc3MoJ21heC13aWR0aCcsICcnKTsNCiAgICAgICAgICAgICQoJyMnK2lkKS5hZGRDbGFzcygnc2xpZGUtcHVsc2UnKTsNCiAgICAgICAgfSwgK2RhdGEuY29uZmlnLkZvY3VzRGVsYXkpOw0KICAgIH0NCn0NCi8vIG9wZW5zIGZpeGVkIGJhciBvbiBkZXNrdG9wIGFmdGVyIHNldCBpbnRlcnZhbA0KZnVuY3Rpb24gYW5pbWF0ZUJhckZvY3VzKCkgew0KICAgIGlmKCEkKCIuZGVza3RvcC1iZyIpLmlzKCI6dmlzaWJsZSIpKSB7DQogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBhbmltYXRlSWNvbnMoJ2hlbHBUZXh0Jyk7DQogICAgICAgICAgICBhbmltYXRlQmcoJy5kZXNrdG9wLWJnJyk7DQogICAgICAgIH0sICtkYXRhLmNvbmZpZy5Gb2N1c0RlbGF5KTsNCiAgICB9DQp9DQovLyBhZGRzIGhvdmVyIGxpc3RlbmVycyBhbmQgYW5pbWF0ZXMgZmxvYXRpbmcgaWNvbnMgb24gZGVza3RvcA0KZnVuY3Rpb24gYW5pbWF0ZUZsb2F0KHNlbGVjdG9yLCBkdXIpIHsNCiAgICAkKCIjZmxvYXQtY29udGFpbmVyIikub2ZmKCJtb3VzZWVudGVyIiwgc2VsZWN0b3IpOw0KICAgICQoIiNmbG9hdC1jb250YWluZXIiKS5vbigibW91c2VlbnRlciIsIHNlbGVjdG9yLCBmdW5jdGlvbihldmVudCkgew0KICAgICAgICAvLyBjb25zb2xlLmxvZygnZmxvYXQgbW91c2UgZW50ZXInKTsNCiAgICAgICAgSGFzT3BlbmVkTWVudSA9IHRydWU7DQogICAgICAgIHZhciBpZCA9ICQodGhpcylbMF0uaWQ7DQogICAgICAgIC8vIGNhbmNlbCBhbmltYXRpb24gb24gaG92ZXINCiAgICAgICAgZGF0YS5jb25maWcuRm9jdXNBbmk/ICQoJyMnK2lkKS5yZW1vdmVDbGFzcygnc2xpZGUtcHVsc2UnKSA6IDA7DQogICAgICAgIA0KICAgICAgICAkKCcjdGV4dC0nK2lkKS5mYWRlSW4oKTsNCiAgICAgICAgJCgnI2Zsb2F0LXRleHQtJytpZCkuZmFkZUluKGR1cikuY3NzKCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKTsNCiAgICAgICAgJCgnIycraWQpLnN0b3AoKS5hbmltYXRlKHsNCiAgICAgICAgICAgICJtYXgtd2lkdGgiOiAiMjAwcHgiLA0KICAgICAgICB9LCBkdXIpOw0KICAgIH0pOw0KICAgIA0KICAgICQoIiNmbG9hdC1jb250YWluZXIiKS5vZmYoIm1vdXNlbGVhdmUiLCBzZWxlY3Rvcik7DQogICAgJCgiI2Zsb2F0LWNvbnRhaW5lciIpLm9uKCJtb3VzZWxlYXZlIiwgc2VsZWN0b3IsIGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKCdmbG9hdCBtb3VzZSBsZWF2ZScpOw0KICAgICAgICB2YXIgaWQgPSAkKHRoaXMpWzBdLmlkOw0KICAgICAgICAkKCcjdGV4dC0nK2lkKS5mYWRlT3V0KGR1cik7DQogICAgICAgICQoJyMnK2lkKS5zdG9wKCkuYW5pbWF0ZSh7DQogICAgICAgICAgICAibWF4LXdpZHRoIjogIjQyLjY2NnB4IiwNCiAgICAgICAgfSwgZHVyKTsNCiAgICB9KTsNCn0NCi8vIGFuaW1hdGVzIGljb25zIHNsaWRlIHVwIGFuZCB0cmFuc3BhcmVudCBvdmVybGF5KGRlcGVuZGluZyBvbiBzaG93VHlwZSkNCmZ1bmN0aW9uIGFuaW1hdGVJY29ucyhzaG93VHlwZSkgew0KICAgIGlmKCQoIi5vdmVybGF5IikuaXMoIjp2aXNpYmxlIikgfHwgJCgiLmRlc2t0b3AtYmciKS5pcygiOnZpc2libGUiKSkgew0KICAgICAgICBpZihzaG93VHlwZSA9PT0gJ292ZXJsYXknKSAgICAgICAgICAkKCcub3ZlcmxheScpLmZhZGVPdXQoMTI1KTsNCiAgICAgICAgZWxzZSBpZihzaG93VHlwZSA9PT0gJ2hlbHBUZXh0JykgICAgJCgnI2hlbHAtdGV4dCcpLmZhZGVPdXQoMTI1KTsNCiAgICAgICAgDQogICAgICAgIC8vIGFkZCBwbHVzIGljb24gYmFjaw0KICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoZGF0YS5jb25maWcuTW9iaWxlTWFpbikpOw0KDQogICAgICAgICQoJy5mYWIuY2hpbGQnKS5zdG9wKCkuYW5pbWF0ZSh7DQogICAgICAgICAgICBib3R0b20gIDogJCgnI21hc3RlcmZhYicpLmNzcygnYm90dG9tJyksDQogICAgICAgICAgICBvcGFjaXR5IDogMA0KICAgICAgICB9LCAxMjUsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICAgIH0pOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGlmKHNob3dUeXBlID09PSAnb3ZlcmxheScpICAgICAgICAgICQoJy5vdmVybGF5JykuZmFkZUluKDEyNSk7DQogICAgICAgIGVsc2UgaWYoc2hvd1R5cGUgPT09ICdoZWxwVGV4dCcpICAgICQoJyNoZWxwLXRleHQnKS5mYWRlSW4oMTI1KTsNCiAgICAgICAgDQogICAgICAgIC8vIGFkZCBjbG9zZSBpY29uIG9uIG1vYmlsZSBvbmx5DQogICAgICAgIGlmKGlzTW9iaWxlKCkpICQoJyNtYWluLWNvbnRhaW5lcicpLmVtcHR5KCkuYXBwZW5kKGdldFN2ZygnY2xvc2UnKSk7DQogICAgICAgICQoIi5mYWIuY2hpbGQiKS5lYWNoKGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKHRoaXMpLnN0b3AoKS5zaG93KCkuYW5pbWF0ZSh7DQogICAgICAgICAgICAgICAgYm90dG9tICA6IChwYXJzZUludCgkKCIjbWFzdGVyZmFiIikuY3NzKCJib3R0b20iKSkgKyBwYXJzZUludCgkKCIjbWFzdGVyZmFiIikub3V0ZXJIZWlnaHQoKSArIDIwKSArIDU2ICogJCh0aGlzKS5kYXRhKCJzdWJpdGVtIikgLSAkKCIuZmFiLmNoaWxkIikub3V0ZXJIZWlnaHQoKSkgKyAicHgiLA0KICAgICAgICAgICAgICAgIG9wYWNpdHkgOiAxDQogICAgICAgICAgICB9LCAxMjUpOw0KICAgICAgICB9KTsNCiAgICB9DQp9DQovLyBhZGRzIG92ZXJsYXkgdGhhdCBzbGlkZXMgdXANCmZ1bmN0aW9uIGFuaW1hdGVCZyhzZWxlY3Rvcikgew0KICAgIGlmKCQoc2VsZWN0b3IpLmlzKCI6dmlzaWJsZSIpKSB7DQogICAgICAgICQoJyNtYWluLWNvbnRhaW5lcicpLnJlbW92ZUNsYXNzKCdvcGVuJyk7DQogICAgICAgICQoIiNtYXN0ZXJmYWIuZmFiLm1hc3Rlci1tb2JpbGUiKS5yZW1vdmVDbGFzcygnbW9iaWxlLW9wZW4nKQ0KICAgICAgICB2YXIgbWFpbkljb24gPSBkYXRhLmNvbmZpZy5EZXNrTWFpbg0KICAgICAgICAvLyByZXZlcnQgdG8gZGVmYXVsdCBtYWluIGljb24gc3R5bGUNCiAgICAgICAgaWYoaXNNb2JpbGUoKSkgew0KICAgICAgICAgICAgbWFpbkljb24gPSBkYXRhLmNvbmZpZy5Nb2JpbGVNYWluOw0KICAgICAgICAgICAgJCgnI21hc3RlcmZhYicpLmNzcyh7J2JhY2tncm91bmQnOiAnJywgJ2JveC1zaGFkb3cnOiAnJ30pOyAgLy8gcmVzdG9yZSBkZWZhdWx0DQogICAgICAgIH0NCiAgICAgICAgJCgnI21haW4tY29udGFpbmVyJykuZW1wdHkoKS5hcHBlbmQoZ2V0U3ZnKG1haW5JY29uKSk7DQogICAgICAgIA0KICAgICAgICAkKCcubWVudS1saW5rLCAuY2hpbGQnKS5oaWRlKCk7DQogICAgICAgIC8vIHNsaWRlIGRvd24gdG8gY2xvZXMNCiAgICAgICAgJChzZWxlY3Rvcikuc3RvcCgpLmFuaW1hdGUoew0KICAgICAgICAgICAgaGVpZ2h0ICA6IDAsDQogICAgICAgICAgICBvcGFjaXR5IDogMA0KICAgICAgICB9LCAxMjUsIGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsNCiAgICAgICAgfSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJCgnI21haW4tY29udGFpbmVyJykuYWRkQ2xhc3MoJ29wZW4nKTsNCiAgICAgICAgJCgiI21hc3RlcmZhYi5mYWIubWFzdGVyLW1vYmlsZSIpLmFkZENsYXNzKCdtb2JpbGUtb3BlbicpDQogICAgICAgIHZhciB0b3BBcmVhID0gMTAwOw0KICAgICAgICBpZihpc01vYmlsZSgpKSB7DQogICAgICAgICAgICAkKCcjbWFzdGVyZmFiJykuY3NzKHsnYmFja2dyb3VuZCc6ICdub25lJywgJ2JveC1zaGFkb3cnOiAnbm9uZSd9KTsgIC8vIG1ha2UgaWNvbiBmbGF0DQogICAgICAgICAgICAkKCcjbWFpbi1jb250YWluZXInKS5lbXB0eSgpLmFwcGVuZChnZXRTdmcoJ2Nsb3NlJykpOyAgIC8vIGFkZCB4IGljb24NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKGRhdGEuY29uZmlnLkRlc2t0b3BMYXlvdXQgPT09ICdCYXInKSB7DQogICAgICAgICAgICAvLyBoYWNrIHRvIGdldCBoZWlnaHQgb2YgYmFyIGhlbHAgdGV4dCBiZWZvcmUgaXQncyB2aXNpYmxlDQogICAgICAgICAgICAkKHNlbGVjdG9yKS5jc3Moeydwb3NpdGlvbic6J2Fic29sdXRlJywndmlzaWJpbGl0eSc6J2hpZGRlbicsICdkaXNwbGF5JzonYmxvY2snfSk7DQogICAgICAgICAgICB0b3BBcmVhID0gJCgiI2hlbHAtdGV4dCIpLmhlaWdodCgpPyAkKCIjaGVscC10ZXh0IikuaGVpZ2h0KCkgKyA2MCA6IDQwOw0KICAgICAgICAgICAgJChzZWxlY3RvcikucmVtb3ZlQXR0cignc3R5bGUnKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gc2xpZGUgdXAgdG8gb3Blbg0KICAgICAgICAkKHNlbGVjdG9yKS5zdG9wKCkuc2hvdygpLmFuaW1hdGUoew0KICAgICAgICAgICAgaGVpZ2h0ICA6ICgoKGRhdGEuY29uZmlnLkljb25MaXN0Lmxlbmd0aCsxKSAqIDU2KSArIHRvcEFyZWEpICsgInB4IiwNCiAgICAgICAgICAgIG9wYWNpdHkgOiAxDQogICAgICAgIH0sMTI1LCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICQoJy5tZW51LWxpbmsnKS5mYWRlSW4oMTI1KTsNCiAgICAgICAgICAgICQoc2VsZWN0b3IpLmNzcygiZGlzcGxheSIsImZsZXgiKQ0KICAgICAgICB9KTsNCiAgICB9DQp9DQpmdW5jdGlvbiBnZXRJdGVtcyh0eXBlLCBmbG9hdCkgew0KICAgICQoJy5jaGlsZCcpLnJlbW92ZSgpOyAgIC8vIHJlbW92ZSBhbnkgaXRlbXMgYWxyZWFkeSBpbiBET00NCiAgICB2YXIgaHRtbCA9ICcnLCBsYWJlbCA9ICcnLCBpY29uID0gJycsIHRleHQgPSAnJzsNCiAgICB2YXIgaXRlbXMgPSBmbG9hdD8gZGF0YS5jb25maWcuSWNvbkxpc3QgOiBkYXRhLmNvbmZpZy5JY29uTGlzdC5yZXZlcnNlKCk7DQogICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgew0KICAgICAgICANCiAgICAgICAgaWYoaXRlbS5zaG93b25tb2JpbGU9PXRydWUgJiYgZGF0YS5kZXZpY2UgPT09ICdtb2JpbGUnKXsNCiAgICAgICAgICAgIGluZGV4ID0gaW5kZXgrMTsNCiAgICAgICAgICAgaWYodHlwZSA9PT0gJ3JpZ2h0VGV4dCcpeyANCiAgICAgICAgICAgICAgIGxhYmVsID0gJzxzcGFuIGNsYXNzPSJyaWdodC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdsZWZ0VGV4dCcpIHsNCiAgICAgICAgICAgICAgICBsYWJlbCA9ICc8c3BhbiBjbGFzcz0ibGVmdC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdic3JSaWdodFRleHQnKSB7DQogICAgICAgICAgICAgICAgbGFiZWwgPSAnPHNwYW4gY2xhc3M9ImJzci1yaWdodC10ZXh0Ij4nICsgaXRlbS5MYWJlbCArICc8L3NwYW4+JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGljb24gPSAnPHNwYW4gY2xhc3M9Imljb24tY29udGFpbmVyIj4nK2dldEl0ZW1JY29uKGl0ZW0pKyc8L3NwYW4+JzsNCiAgICAgICAgICAgICAgICBodG1sICs9IA0KICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iZmFiIGNoaWxkIiBpZD0iY2hpbGQtJytpbmRleCsnIiBkYXRhLXN1Yml0ZW09IicraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0SXRlbUFjdGlvbihpdGVtLCBpY29uK2xhYmVsKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoaXRlbS5BY3Rpb24gPT09ICdTaGFyZScpIHsNCiAgICAgICAgICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9taWNyb21vZGFsL2Rpc3QvbWljcm9tb2RhbC5taW4uanMnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgTWljcm9Nb2RhbC5pbml0KCk7DQogICAgICAgICAgICAgICAgICAgICQoJy5zaGFyZS1jb250YWluZXInKS5odG1sKGdldFNvY2lhbEl0ZW1zKGl0ZW0pKTsgICAvLyBhZGQgc29jaWFsIGljb25zIHRvIG1vZGFsDQogICAgICAgICAgICAgICAgICAgIGFkZFNoYXJlTGlzdGVuZXIoKTsgICAvLyBpZiBzb2NpYWwgc2hhcmluZyBlbmFibGVkIGFkZCBjbGljayBoYW5kbGVyDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGVsc2UgaWYoaXRlbS5zaG93b25kZXNrdG9wPT10cnVlICYmIChkYXRhLmRldmljZSA9PT0gJ2Rlc2t0b3AnIHx8IGRhdGEuZGV2aWNlID09PSAndGFibGV0JykgKXsNCiAgICAgICAgICAgIA0KICAgICAgICAgICBpZih0eXBlID09PSAncmlnaHRUZXh0Jyl7IA0KICAgICAgICAgICBsYWJlbCA9ICc8c3BhbiBjbGFzcz0icmlnaHQtdGV4dCI+JyArIGl0ZW0uTGFiZWwgKyAnPC9zcGFuPic7DQogICAgICAgIH0NCiAgICAgICAgaWYodHlwZSA9PT0gJ2xlZnRUZXh0Jykgew0KICAgICAgICAgICAgbGFiZWwgPSAnPHNwYW4gY2xhc3M9ImxlZnQtdGV4dCI+JyArIGl0ZW0uTGFiZWwgKyAnPC9zcGFuPic7DQogICAgICAgIH0NCiAgICAgICAgaWYoIWZsb2F0KSB7DQogICAgICAgICAgICBpY29uID0gJzxzcGFuIGNsYXNzPSJpY29uLWNvbnRhaW5lciI+JytnZXRJdGVtSWNvbihpdGVtKSsnPC9zcGFuPic7DQogICAgICAgICAgICBodG1sICs9IA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmYWIgY2hpbGQiIGlkPSJjaGlsZC0nK2luZGV4KyciIGRhdGEtc3ViaXRlbT0iJytpbmRleCsnIj4gXA0KICAgICAgICAgICAgICAgICAgICAnK2dldEl0ZW1BY3Rpb24oaXRlbSwgaWNvbitsYWJlbCkrJyBcDQogICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICAvLyBmbG9hdGluZyBpY29ucyBvbiBkZXNrdG9wIG9ubHkNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIGFkZCBmb2N1cyBjbGFzcyBmb3IgZm9jdXMgYW5pbWF0aW9uDQogICAgICAgICAgICBsYWJlbCA9IGl0ZW0uTGFiZWw7DQogICAgICAgICAgICB2YXIgZm9jdXNDbGFzcyA9IGl0ZW0uQW5pbWF0ZT8gJ2ZvY3VzJyA6ICcnOw0KICAgICAgICAgICAgaWNvbiA9ICc8c3BhbiBjbGFzcz0iaWNvbi1jb250YWluZXIiPicrZ2V0SXRlbUljb24oaXRlbSkrJzwvc3Bhbj4nOw0KICAgICAgICAgICAgdGV4dCA9ICc8c3BhbiBjbGFzcz0iZmxvYXQtdGV4dCIgaWQ9InRleHQtJytpbmRleCsnIj4nK2xhYmVsKyc8L3NwYW4+JzsNCiAgICAgICAgICAgIGh0bWwgKz0gDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImZsb2F0LWNvbnRhaW5lciAnK2ZvY3VzQ2xhc3MrJyIgaWQ9IicraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZhYiBjaGlsZCBmbG9hdCIgaWQ9ImNoaWxkLScraW5kZXgrJyIgZGF0YS1zdWJpdGVtPSInK2luZGV4KyciIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtZmxleDsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldEl0ZW1BY3Rpb24oaXRlbSwgaWNvbikrJyBcDQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXA0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmxvYXQtdGV4dC1jb250YWluZXIiIGlkPSJmbG9hdC10ZXh0LScraW5kZXgrJyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0SXRlbUFjdGlvbihpdGVtLCB0ZXh0KSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+JzsNCiAgICAgICAgfQ0KICAgICAgICAvLyBpZiBhY3Rpb24gaXMgc2hhcmUgYWRkIHNoYXJlIGl0ZW1zIHRvIG1vZGFsDQogICAgICAgIGlmKGl0ZW0uQWN0aW9uID09PSAnU2hhcmUnKSB7DQogICAgICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9taWNyb21vZGFsL2Rpc3QvbWljcm9tb2RhbC5taW4uanMnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBNaWNyb01vZGFsLmluaXQoKTsNCiAgICAgICAgICAgICAgICAkKCcuc2hhcmUtY29udGFpbmVyJykuaHRtbChnZXRTb2NpYWxJdGVtcyhpdGVtKSk7ICAgLy8gYWRkIHNvY2lhbCBpY29ucyB0byBtb2RhbA0KICAgICAgICAgICAgICAgIGFkZFNoYXJlTGlzdGVuZXIoKTsgICAvLyBpZiBzb2NpYWwgc2hhcmluZyBlbmFibGVkIGFkZCBjbGljayBoYW5kbGVyDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSk7DQogICAgcmV0dXJuIGh0bWw7DQp9DQpmdW5jdGlvbiBnZXRTb2NpYWxJdGVtcyhpdGVtKSB7DQogICAgbGV0IGh0bWwgPSAnJzsNCiAgICBjb25zdCBjb250ZW50ID0gZ2V0U2hhcmVDb250ZW50KGl0ZW0pOw0KICAgIGlmKGl0ZW0uRW1haWwpICAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0VtYWlsJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uRmFjZWJvb2spICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0ZhY2Vib29rJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uVHVtYmxyKSAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ1R1bWJscicsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICBpZihpdGVtLkxpbmtlZEluKSAgIGh0bWwgKz0gZ2V0U2hhcmVIdG1sKCdMaW5rZWRJbicsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICBpZihpdGVtLlR3aXR0ZXIpICAgIGh0bWwgKz0gZ2V0U2hhcmVIdG1sKCdUd2l0dGVyJywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIGlmKGl0ZW0uUmVkZGl0KSAgICAgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ1JlZGRpdCcsIGNvbnRlbnQubGluaywgY29udGVudC50aXRsZSwgJ1RhYicsICdzb2NpYWwnKTsNCiAgICAvL2lmKGl0ZW0uR29vZ2xlUGx1cykgaHRtbCArPSBnZXRTaGFyZUh0bWwoJ0dvb2dsZVBsdXMnLCBjb250ZW50LmxpbmssIGNvbnRlbnQudGl0bGUsICdUYWInLCAnc29jaWFsJyk7DQogICAgaWYoaXRlbS5QaW50ZXJlc3QpICBodG1sICs9IGdldFNoYXJlSHRtbCgnUGludGVyZXN0JywgY29udGVudC5saW5rLCBjb250ZW50LnRpdGxlLCAnVGFiJywgJ3NvY2lhbCcpOw0KICAgIHJldHVybiBodG1sOw0KfQ0KDQovLw0KLy8gU29jaWFsIFNoYXJlIEZ1bmN0aW9ucw0KLy8NCmZ1bmN0aW9uIGdldFNoYXJlQ29udGVudChpdGVtKSB7DQogICAgLy8gc2V0IGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZSB1cmwNCiAgICBsZXQgbGluayA9IGl0ZW0uU2hhcmVMaW5rPyBpdGVtLkxpbmsuaHJlZiA6IHdpbmRvdy50b3AubG9jYXRpb24uaHJlZjsNCiAgICBsaW5rID0gZW5jb2RlVVJJKGxpbmspOw0KICAgIA0KICAgIC8vIGdldCBkZWZhdWx0IHBhZ2UgdGl0bGUgZnJvbSB0aGUgYWN0dWFsIHBhZ2UgdGl0bGUNCiAgICBjb25zdCBwYWdlVGl0bGUgPSBpdGVtLlNoYXJlVGl0bGU/IGl0ZW0uU2hhcmVUaXRsZSA6IGRvY3VtZW50LnRpdGxlOw0KICAgIGNvbnN0IGVuY29kZWRUaXRsZSA9IGVuY29kZVVSSShwYWdlVGl0bGUpOw0KICAgIA0KICAgIHJldHVybiB7bGluazogbGluaywgdGl0bGU6IGVuY29kZWRUaXRsZX07DQp9DQpmdW5jdGlvbiBnZXRTaGFyZUh0bWwoc2l0ZSwgbGluaywgZW5jb2RlZFRpdGxlLCBhY3Rpb24sIGxpbmtDbGFzcykgew0KICAgIGxldCBocmVmID0gJyc7DQogICAgc3dpdGNoKHNpdGUpIHsNCiAgICAgICAgY2FzZSAnRW1haWwnOg0KICAgICAgICAgICAgaHJlZiA9ICJtYWlsdG86P1N1YmplY3Q9IitlbmNvZGVkVGl0bGUrIiZib2R5PUNoZWNrIG91dCB0aGlzIHNpdGU6ICIrd2luZG93LmxvY2F0aW9uLmhyZWY7DQogICAgICAgICAgICANCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0VNQUlMJzsNCiAgICAgICAgICAgIHJldHVybiAoDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNvY2lhbC1pY29uIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogZ3JleTsiPiBcDQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IicraHJlZisnIiBjbGFzcz0iJytsaW5rQ2xhc3MrJyIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7OyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdzaGFyZWVudmVsb3BlJykrJyBcDQogICAgICAgICAgICAgICAgICAgIDwvYT4gXA0KICAgICAgICAgICAgICAgIDwvZGl2PicpOw0KICAgICAgICBjYXNlICdGYWNlYm9vayc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIvc2hhcmVyLnBocD91PScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0ZCJzsNCiAgICAgICAgICAgIHJldHVybiAoDQogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9InNvY2lhbC1pY29uIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzNiNTk5ODsiPiBcDQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IicraHJlZisnIiBjbGFzcz0iJytsaW5rQ2xhc3MrJyIgdGFyZ2V0PSJfYmxhbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdmYWNlYm9vaycpKycgXA0KICAgICAgICAgICAgICAgICAgICA8L2E+IFwNCiAgICAgICAgICAgICAgICA8L2Rpdj4nKTsNCiAgICAgICAgY2FzZSAnVHVtYmxyJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cDovL3R1bWJsci5jb20vc2hhcmUvbGluaz91cmw9JytsaW5rKycmbmFtZT0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMzNTQ2NWM7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiA+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCd0dW1ibHInKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ0xpbmtlZEluJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cDovL3d3dy5saW5rZWRpbi5jb20vc2hhcmVBcnRpY2xlP21pbmk9dHJ1ZSZhbXA7dXJsPScrbGluaysnJmFtcDt0aXRsZT0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0xJTktFRElOJzsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICM0ODc1QjQ7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldFN2ZygnbGlua2VkSW4nKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ1R3aXR0ZXInOg0KICAgICAgICAgICAgaHJlZiA9ICdodHRwczovL3R3aXR0ZXIuY29tL2ludGVudC90d2VldD90ZXh0PScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX1RXSVRURVInOw0KICAgICAgICAgICAgcmV0dXJuICgNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic29jaWFsLWljb24iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJytocmVmKyciIGNsYXNzPSInK2xpbmtDbGFzcysnIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7Ij4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgJytnZXRTdmcoJ3R3aXR0ZXInKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGNhc2UgJ1JlZGRpdCc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly93d3cucmVkZGl0LmNvbS9zdWJtaXQ/dXJsPScrbGluaysnJnRpdGxlPScrZW5jb2RlZFRpdGxlKycmdGV4dD0nK2VuY29kZWRUaXRsZTsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZjQ1MDA7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIj4gXA0KICAgICAgICAgICAgICAgICAgICAgICAgJytnZXRTdmcoJ3JlZGRpdCcpKycgXA0KICAgICAgICAgICAgICAgICAgICA8L2E+IFwNCiAgICAgICAgICAgICAgICA8L2Rpdj4nKTsNCiAgICAgICAvKiBjYXNlICdHb29nbGVQbHVzJzoNCiAgICAgICAgICAgIGhyZWYgPSAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vc2hhcmU/dXJsPScrbGluazsNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX1NIQVJFX0dPT0dMRV9QTFVTJzsNCiAgICAgICAgICAgIHJldHVybiAoIA0KICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJzb2NpYWwtaWNvbiIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNkMzQ4MzY7Ij4gXA0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSInK2hyZWYrJyIgY2xhc3M9IicrbGlua0NsYXNzKyciIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPiBcDQogICAgICAgICAgICAgICAgICAgICAgICAnK2dldFN2ZygnZ1BsdXMnKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7ICovDQogICAgICAgIGNhc2UgJ1BpbnRlcmVzdCc6DQogICAgICAgICAgICBocmVmID0gJ2h0dHA6Ly9waW50ZXJlc3QuY29tL3Bpbi9jcmVhdGUvYnV0dG9uLz91cmw9JytsaW5rKycmYW1wO2Rlc2NyaXB0aW9uPScrZW5jb2RlZFRpdGxlOw0KICAgICAgICAgICAgcmV0dXJuICgNCiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0ic29jaWFsLWljb24iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjY2IyMDI3OyI+IFwNCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJytocmVmKyciIGNsYXNzPSInK2xpbmtDbGFzcysnIiB0YXJnZXQ9Il9ibGFuayI+IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICcrZ2V0U3ZnKCdwaW50ZXJlc3QnKSsnIFwNCiAgICAgICAgICAgICAgICAgICAgPC9hPiBcDQogICAgICAgICAgICAgICAgPC9kaXY+Jyk7DQogICAgICAgIGRlZmF1bHQ6IA0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgIH0NCn0NCg0KLy8NCi8vIEhlbHBlcnMNCi8vDQovLyBjaGVjayBkaXNwbGF5IHR5cGUNCmZ1bmN0aW9uIGlzTW9iaWxlKCkgew0KICAgIHJldHVybiBkYXRhLmRldmljZSA9PT0gJ21vYmlsZSc7DQp9DQpmdW5jdGlvbiBnZXRJdGVtQWN0aW9uKGl0ZW0sIGVsZW0pIHsNCiAgICB2YXIgc3RhdHNFdmVudE5hbWU9Jyc7DQogICAgc3dpdGNoKGl0ZW0uQWN0aW9uKSB7DQogICAgICAgIGNhc2UgJ0xpbmsnOg0KICAgICAgICAgICAgaWYoIWl0ZW0uTGluaykgaXRlbS5MaW5rID0geyB0YXJnZXQ6ICd0YXJnZXQ9Il9ibGFuaycsIGhyZWY6ICdodHRwOi8vd3d3Lmdvb2dsZS5jb20nIH0gIC8vIGRlZmF1bHQgbGluaw0KICAgICAgICAgICAgdmFyIHRhcmdldCA9IGl0ZW0uTGluay50YXJnZXQ/IGl0ZW0uTGluay50YXJnZXQgOiAnJzsNCiAgICAgICAgICAgIHZhciBzdGF0c0V2ZW50TmFtZSA9ICdDTV9MSU5LX0NMSUNLJzsNCiAgICAgICAgICAgIHJldHVybiAnPGEgJyt0YXJnZXQrJyBocmVmPSInK2l0ZW0uTGluay5ocmVmKyciIGNsYXNzPSJtZW51LWxpbmsgYnNyLW1lbnVsaW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPicrZWxlbSsnPC9hPic7DQogICAgICAgIGNhc2UgJ0NhbGwnOg0KICAgICAgICAgICAgc3RhdHNFdmVudE5hbWUgPSAnQ01fQ0xJQ0tfVE9fQ0FMTCc7DQogICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9InRlbDonK2l0ZW0uQ2FsbE51bSsnIiBjbGFzcz0ibWVudS1saW5rIGJzci1tZW51bGluayIgb25jbGljaz0iX3RyYWNrQ29udldpZGdldENsaWNrRXZlbnQoXCcnK3N0YXRzRXZlbnROYW1lKydcJyk7Ij4nK2VsZW0rJzwvYT4nOw0KICAgICAgICBjYXNlICdTbXMnOg0KICAgICAgICAgICAgc3RhdHNFdmVudE5hbWUgPSAnQ01fQ0xJQ0tfVE9fU01TJzsNCiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0ic21zOicraXRlbS5TbXNOdW0rJyIgY2xhc3M9Im1lbnUtbGluayBic3ItbWVudWxpbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnRW1haWwnOg0KICAgICAgICAgICAgc3RhdHNFdmVudE5hbWUgPSAnQ01fQ0xJQ0tfVE9fRU1BSUwnOw0KICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPSJtYWlsdG86JytpdGVtLkVtYWlsQWRkcisnP3N1YmplY3Q9JytpdGVtLmVtYWlsRGVmU3ViamVjdCArICcmYm9keT0nICsgaXRlbS5kZWZFbWFpbEJvZHkgKyAnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9Im1lbnUtbGluayBic3ItbWVudWxpbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgY2FzZSAnTWFwJzoNCiAgICAgICAgICAgIHN0YXRzRXZlbnROYW1lID0gJ0NNX0RJUkVDVElPTic7DQogICAgICAgICAgICByZXR1cm4gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHM/cT0nK2l0ZW0uUXVlcnkrJyIgY2xhc3M9Im1lbnUtbGluayBic3ItbWVudWxpbmsiIG9uY2xpY2s9Il90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50KFwnJytzdGF0c0V2ZW50TmFtZSsnXCcpOyIgZGF0YS1ldmVudG5hbWU9IkZpbmQgTG9jYXRpb24iPicrZWxlbSsnPC9hPic7DQogICAgICAgIGNhc2UgJ01lc3MnOg0KICAgICAgICAgICAgc3RhdHNFdmVudE5hbWUgPSAnQ01fRkJfTUVTU0FHRSc7DQogICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9Imh0dHA6Ly9tLm1lLycraXRlbS5GYlVzZXIrJyIgY2xhc3M9Im1lbnUtbGluayBic3ItbWVudWxpbmsiIHRhcmdldD0iX2JsYW5rIiBvbmNsaWNrPSJfdHJhY2tDb252V2lkZ2V0Q2xpY2tFdmVudChcJycrc3RhdHNFdmVudE5hbWUrJ1wnKTsiPicrZWxlbSsnPC9hPic7DQogICAgICAgIGNhc2UgJ1NoYXJlJzoNCiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iIyIgY2xhc3M9Im1lbnUtbGluayBzaGFyZSBic3ItbWVudWxpbmsiPicrZWxlbSsnPC9hPic7DQogICAgICAgIGNhc2UgJ0NoYXQnOg0KICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPSIjIiBjbGFzcz0ibWVudS1saW5rIGJzci1jaGF0IGJzci1tZW51bGluayI+JytlbGVtKyc8L2E+JzsNCiAgICAgICAgZGVmYXVsdDogDQogICAgICAgICAgICByZXR1cm4gJyc7DQogICAgfQ0KfQ0KLy8gcmV0dXJucyBuZXcgZGVmYXVsdCBpY29uIG9ubHkgaWYgaWNvbiBpcyBkZWZhdWx0IChpZGVudGlmaWVkIGJ5IHBhdGggZGF0YSBpbiBkZWZhdWx0IHN2ZyBNVVNUIENIQU5HRSBGT1IgRElGRkVSRU5UIERFRkFVVEwpDQpmdW5jdGlvbiB4Z2V0SXRlbUljb24oaXRlbSkgew0KICAgIC8vIGljb24gaXMgZGVmYXVsdA0KICAgIGlmKGl0ZW0uQ3VzdG9tSWNvbikgew0KICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJuZXctY29udGFpbmVyIj4nK2l0ZW0uSWNvbisnPC9kaXY+JzsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzd2l0Y2goaXRlbS5BY3Rpb24pIHsNCiAgICAgICAgICAgIGNhc2UgJ0xpbmsnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ2xpbmsnKTsNCiAgICAgICAgICAgIGNhc2UgJ0NhbGwnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ3Bob25lJyk7DQogICAgICAgICAgICBjYXNlICdTbXMnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ3NtcycpOw0KICAgICAgICAgICAgY2FzZSAnRW1haWwnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ2VudmVsb3BlJyk7DQogICAgICAgICAgICBjYXNlICdNZXNzJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdtZXNzZW5nZXInKTsNCiAgICAgICAgICAgIGNhc2UgJ01hcCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygnbWFwJyk7DQogICAgICAgICAgICBjYXNlICdTaGFyZSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2Zygnc2hhcmUnKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQpmdW5jdGlvbiBnZXRJdGVtSWNvbihpdGVtKSB7DQogICAgdmFyIGxjYXNlID0gaXRlbS5BY3Rpb24udG9Mb3dlckNhc2UoKTsNCg0KICAgIGlmKGl0ZW0uQ3VzdG9tSWNvbikgew0KICAgICAgICBzd2l0Y2goaXRlbS5DdXN0b21JY29uX1NlbGVjdCkgew0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tX2ljb24xJzoNCiAgICAgICAgICAgICAgICAvLyByZXR1cm4gJzxkaXYgY2xhc3M9IicrbGNhc2UrJy1pY29uLXByZXYgY3VzdG9tLXVzZXItaWNvbiAnICsgaXRlbS5DdXN0b21JY29uX1NlbGVjdCArICciPicgKyBkYXRhLmNvbmZpZy5jdXN0b21faWNvbjEgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImN1c3RvbS11c2VyLWljb24gJyArIGl0ZW0uQ3VzdG9tSWNvbl9TZWxlY3QgKyAnIj4nICsgZGF0YS5jb25maWcuY3VzdG9tX2ljb24xICsgJzwvZGl2Pic7DQogICAgICAgICAgICBjYXNlICdjdXN0b21faWNvbjInOg0KICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iY3VzdG9tLXVzZXItaWNvbiAnICsgaXRlbS5DdXN0b21JY29uX1NlbGVjdCArICciPicgKyBkYXRhLmNvbmZpZy5jdXN0b21faWNvbjIgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbV9pY29uMyc6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjdXN0b20tdXNlci1pY29uICcgKyBpdGVtLkN1c3RvbUljb25fU2VsZWN0ICsgJyI+JyArIGRhdGEuY29uZmlnLmN1c3RvbV9pY29uMyArICc8L2Rpdj4nOw0KICAgICAgICAgICAgY2FzZSAnY3VzdG9tX2ljb240JzoNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImN1c3RvbS11c2VyLWljb24gJyArIGl0ZW0uQ3VzdG9tSWNvbl9TZWxlY3QgKyAnIj4nICsgZGF0YS5jb25maWcuY3VzdG9tX2ljb240ICsgJzwvZGl2Pic7DQogICAgICAgICAgICBjYXNlICdjdXN0b21faWNvbjUnOg0KICAgICAgICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iY3VzdG9tLXVzZXItaWNvbiAnICsgaXRlbS5DdXN0b21JY29uX1NlbGVjdCArICciPicgKyBkYXRhLmNvbmZpZy5jdXN0b21faWNvbjUgKyAnPC9kaXY+JzsNCiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbV9pY29uNic6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJjdXN0b20tdXNlci1pY29uICcgKyBpdGVtLkN1c3RvbUljb25fU2VsZWN0ICsgJyI+JyArIGRhdGEuY29uZmlnLmN1c3RvbV9pY29uNiArICc8L2Rpdj4nOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgc3dpdGNoKGl0ZW0uQWN0aW9uKSB7DQogICAgICAgICAgICBjYXNlICdMaW5rJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdsaW5rJyk7DQogICAgICAgICAgICBjYXNlICdDYWxsJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdwaG9uZScpOw0KICAgICAgICAgICAgY2FzZSAnU21zJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdzbXMnKTsNCiAgICAgICAgICAgIGNhc2UgJ0VtYWlsJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdlbnZlbG9wZScpOw0KICAgICAgICAgICAgY2FzZSAnTWVzcyc6DQogICAgICAgICAgICAgICAgcmV0dXJuIGdldFN2ZygnbWVzc2VuZ2VyJyk7DQogICAgICAgICAgICBjYXNlICdNYXAnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ21hcCcpOw0KICAgICAgICAgICAgY2FzZSAnU2hhcmUnOg0KICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdmcoJ3NoYXJlJyk7DQogICAgICAgICAgICBjYXNlICdDaGF0JzoNCiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3ZnKCdjaGF0Jyk7DQogICAgICAgIH0NCiAgICB9DQp9DQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0Kd2luZG93Ll90cmFja0NvbnZXaWRnZXRDbGlja0V2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKSB7DQogICAgaWYodHlwZW9mKEhBRik9PT0ib2JqZWN0Iil7DQogICAgICAgIEhBRi5PbVRyYWNraW5nLm9uQ01DbGljayhldmVudE5hbWUpIA0KICAgIH0NCiAgICByZXR1cm47DQp9DQoNCmZ1bmN0aW9uIGR1ZGFpY29uKGljb24pew0KICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im5ldy1jb250YWluZXIiPicraWNvbisnPC9zcGFuPicNCiAgICANCiAgICANCn0NCmZ1bmN0aW9uIHhnZXRTdmcobmFtZSkgew0KICAgIGNvbnN0IHR5cGUgPSBuYW1lPyBuYW1lIDogZGF0YS5jb25maWcuRGVza01haW47DQogICAgc3dpdGNoKHR5cGUpIHsNCiAgICAgICAgY2FzZSAndkVsbGlwc2lzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTIgNTEyIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBhdGggZD0iTTk2IDE4NGMzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyIDMyLjItNzIgNzItNzJ6TTI0IDgwYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJTMTM1LjggOCA5NiA4IDI0IDQwLjIgMjQgODB6bTAgMzUyYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03Mi03MiAzMi4yLTcyIDcyeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ21hcCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdtYXAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDM4NCA1MTIiIGRhdGEtZGVmYXVsdD0idHJ1ZSI+PHBhdGggZD0iTTE3Mi4yNjggNTAxLjY3QzI2Ljk3IDI5MS4wMzEgMCAyNjkuNDEzIDAgMTkyIDAgODUuOTYxIDg1Ljk2MSAwIDE5MiAwczE5MiA4NS45NjEgMTkyIDE5MmMwIDc3LjQxMy0yNi45NyA5OS4wMzEtMTcyLjI2OCAzMDkuNjctOS41MzUgMTMuNzc0LTI5LjkzIDEzLjc3My0zOS40NjQgMHpNMTkyIDI3MmM0NC4xODMgMCA4MC0zNS44MTcgODAtODBzLTM1LjgxNy04MC04MC04MC04MCAzNS44MTctODAgODAgMzUuODE3IDgwIDgwIDgweiIvPjwvc3ZnPicNCiAgICAgICAgY2FzZSAnaEVsbGlwc2lzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBhdGggZD0iTTMyOCAyNTZjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzIgMzIuMi03MiA3Mi03MiA3MiAzMi4yIDcyIDcyem0xMDQtNzJjLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyem0tMzUyIDBjLTM5LjggMC03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzIgNzItMzIuMiA3Mi03Mi0zMi4yLTcyLTcyLTcyeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3BsdXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA0MiA0MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDIgNDI7IHhtbDpzcGFjZT0icHJlc2VydmUiPjx0aXRsZT5Nb3JlPC90aXRsZT48cG9seWdvbiBwb2ludHM9IjQyLDIwIDIyLDIwIDIyLDAgMjAsMCAyMCwyMCAwLDIwIDAsMjIgMjAsMjIgMjAsNDIgMjIsNDIgMjIsMjIgNDIsMjIgIi8+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnYmFycyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiI+PHRpdGxlPk1vcmU8L3RpdGxlPjxwYXRoIGQ9Ik0xNiAxMzJoNDE2YzguODM3IDAgMTYtNy4xNjMgMTYtMTZWNzZjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNkM3LjE2MyA2MCAwIDY3LjE2MyAwIDc2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6bTAgMTYwaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2di00MGMwLTguODM3LTcuMTYzLTE2LTE2LTE2SDE2Yy04LjgzNyAwLTE2IDcuMTYzLTE2IDE2djQwYzAgOC44MzcgNy4xNjMgMTYgMTYgMTZ6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnZW52ZWxvcGUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZnZW1haWwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5FbWFpbDwvdGl0bGU+PHBhdGggZD0iTTQ2NCA2NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjI4OGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjExMmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0wIDQ4djQwLjgwNWMtMjIuNDIyIDE4LjI1OS01OC4xNjggNDYuNjUxLTEzNC41ODcgMTA2LjQ5LTE2Ljg0MSAxMy4yNDctNTAuMjAxIDQ1LjA3Mi03My40MTMgNDQuNzAxLTIzLjIwOC4zNzUtNTYuNTc5LTMxLjQ1OS03My40MTMtNDQuNzAxQzEwNi4xOCAxOTkuNDY1IDcwLjQyNSAxNzEuMDY3IDQ4IDE1Mi44MDVWMTEyaDQxNnpNNDggNDAwVjIxNC4zOThjMjIuOTE0IDE4LjI1MSA1NS40MDkgNDMuODYyIDEwNC45MzggODIuNjQ2IDIxLjg1NyAxNy4yMDUgNjAuMTM0IDU1LjE4NiAxMDMuMDYyIDU0Ljk1NSA0Mi43MTcuMjMxIDgwLjUwOS0zNy4xOTkgMTAzLjA1My01NC45NDcgNDkuNTI4LTM4Ljc4MyA4Mi4wMzItNjQuNDAxIDEwNC45NDctODIuNjUzVjQwMEg0OHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdzaGFyZWVudmVsb3BlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3NoYXJlZW1haWwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5FbWFpbDwvdGl0bGU+PHBhdGggZD0iTTQ2NCA2NEg0OEMyMS40OSA2NCAwIDg1LjQ5IDAgMTEydjI4OGMwIDI2LjUxIDIxLjQ5IDQ4IDQ4IDQ4aDQxNmMyNi41MSAwIDQ4LTIxLjQ5IDQ4LTQ4VjExMmMwLTI2LjUxLTIxLjQ5LTQ4LTQ4LTQ4em0wIDQ4djQwLjgwNWMtMjIuNDIyIDE4LjI1OS01OC4xNjggNDYuNjUxLTEzNC41ODcgMTA2LjQ5LTE2Ljg0MSAxMy4yNDctNTAuMjAxIDQ1LjA3Mi03My40MTMgNDQuNzAxLTIzLjIwOC4zNzUtNTYuNTc5LTMxLjQ1OS03My40MTMtNDQuNzAxQzEwNi4xOCAxOTkuNDY1IDcwLjQyNSAxNzEuMDY3IDQ4IDE1Mi44MDVWMTEyaDQxNnpNNDggNDAwVjIxNC4zOThjMjIuOTE0IDE4LjI1MSA1NS40MDkgNDMuODYyIDEwNC45MzggODIuNjQ2IDIxLjg1NyAxNy4yMDUgNjAuMTM0IDU1LjE4NiAxMDMuMDYyIDU0Ljk1NSA0Mi43MTcuMjMxIDgwLjUwOS0zNy4xOTkgMTAzLjA1My01NC45NDcgNDkuNTI4LTM4Ljc4MyA4Mi4wMzItNjQuNDAxIDEwNC45NDctODIuNjUzVjQwMEg0OHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdwaG9uZSc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdwaG9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgZGF0YS1kZWZhdWx0Pjx0aXRsZT5QaG9uZTwvdGl0bGU+PHBhdGggZD0iTTQ5My40IDI0LjZsLTEwNC0yNGMtMTEuMy0yLjYtMjIuOSAzLjMtMjcuNSAxMy45bC00OCAxMTJjLTQuMiA5LjgtMS40IDIxLjMgNi45IDI4bDYwLjYgNDkuNmMtMzYgNzYuNy05OC45IDE0MC41LTE3Ny4yIDE3Ny4ybC00OS42LTYwLjZjLTYuOC04LjMtMTguMi0xMS4xLTI4LTYuOWwtMTEyIDQ4QzMuOSAzNjYuNS0yIDM3OC4xLjYgMzg5LjRsMjQgMTA0QzI3LjEgNTA0LjIgMzYuNyA1MTIgNDggNTEyYzI1Ni4xIDAgNDY0LTIwNy41IDQ2NC00NjQgMC0xMS4yLTcuNy0yMC45LTE4LjYtMjMuNHoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdjbG9zZSc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdjbG9zZSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCJ2aWV3Qm94PSIwIDAgMjI0LjUxMiAyMjQuNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMjQuNTEyIDIyNC41MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48dGl0bGU+Q2xvc2U8L3RpdGxlPjxnPjxwb2x5Z29uIHBvaW50cz0iMjI0LjUwNyw2Ljk5NyAyMTcuNTIxLDAgMTEyLjI1NiwxMDUuMjU4IDYuOTk4LDAgMC4wMDUsNi45OTcgMTA1LjI2MywxMTIuMjU0IDAuMDA1LDIxNy41MTIgNi45OTgsMjI0LjUxMiAxMTIuMjU2LDExOS4yNCAyMTcuNTIxLDIyNC41MTIgMjI0LjUwNywyMTcuNTEyIDExOS4yNDksMTEyLjI1NCIvPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdmYWNlYm9vayc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdmYiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjY0IDUxMiI+PHRpdGxlPkZhY2Vib29rPC90aXRsZT48cGF0aCBkPSJNNzYuNyA1MTJWMjgzSDB2LTkxaDc2Ljd2LTcxLjdDNzYuNyA0Mi40IDEyNC4zIDAgMTkzLjggMGMzMy4zIDAgNjEuOSAyLjUgNzAuMiAzLjZWODVoLTQ4LjJjLTM3LjggMC00NS4xIDE4LTQ1LjEgNDQuM1YxOTJIMjU2bC0xMS43IDkxaC03My42djIyOSIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ21lc3Nlbmdlcic6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdtZXNnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48dGl0bGU+RmFjZWJvb2sgTWVzc2VuZ2VyPC90aXRsZT48cGF0aCBkPSJNMjI0IDMyQzE1LjkgMzItNzcuNSAyNzggODQuNiA0MDAuNlY0ODBsNzUuNy00MmMxNDIuMiAzOS44IDI4NS40LTU5LjkgMjg1LjQtMTk4LjdDNDQ1LjggMTI0LjggMzQ2LjUgMzIgMjI0IDMyem0yMy40IDI3OC4xTDE5MCAyNTAuNSA3OS42IDMxMS42bDEyMS4xLTEyOC41IDU3LjQgNTkuNiAxMTAuNC02MS4xLTEyMS4xIDEyOC41eiIvPjwvc3ZnPicNCiAgICAgICAgY2FzZSAndHVtYmxyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3RtYiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIwIDUxMiI+PHRpdGxlPlR1bWJscjwvdGl0bGU+PHBhdGggZD0iTTMwOS44IDQ4MC4zYy0xMy42IDE0LjUtNTAgMzEuNy05Ny40IDMxLjctMTIwLjggMC0xNDctODguOC0xNDctMTQwLjZ2LTE0NEgxNy45Yy01LjUgMC0xMC00LjUtMTAtMTB2LTY4YzAtNy4yIDQuNS0xMy42IDExLjMtMTYgNjItMjEuOCA4MS41LTc2IDg0LjMtMTE3LjEuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNoNzAuOWM1LjUgMCAxMCA0LjUgMTAgMTB2MTE1LjJoODNjNS41IDAgMTAgNC40IDEwIDkuOXY4MS43YzAgNS41LTQuNSAxMC0xMCAxMGgtODMuNFYzNjBjMCAzNC4yIDIzLjcgNTMuNiA2OCAzNS44IDQuOC0xLjkgOS0zLjIgMTIuNy0yLjIgMy41LjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdsaW5rZWRJbic6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdsaSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiI+PHRpdGxlPkxpbmtlZEluPC90aXRsZT48cGF0aCBkPSJNMTAwLjMgNDgwSDcuNFYxODAuOWg5Mi45VjQ4MHpNNTMuOCAxNDAuMUMyNC4xIDE0MC4xIDAgMTE1LjUgMCA4NS44IDAgNTYuMSAyNC4xIDMyIDUzLjggMzJjMjkuNyAwIDUzLjggMjQuMSA1My44IDUzLjggMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0OCA0ODBoLTkyLjdWMzM0LjRjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43VjQ4MGgtOTIuOFYxODAuOWg4OS4xdjQwLjhoMS4zYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM1Y0ODB6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAndHdpdHRlcic6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmd0dyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjx0aXRsZT5Ud2l0dGVyPC90aXRsZT48cGF0aCBkPSJNMTIuNi43NWgyLjQ1NGwtNS4zNiA2LjE0MkwxNiAxNS4yNWgtNC45MzdsLTMuODY3LTUuMDctNC40MjUgNS4wN0guMzE2bDUuNzMzLTYuNTdMMCAuNzVoNS4wNjNsMy40OTUgNC42MzNMMTIuNjAxLjc1Wm0tLjg2IDEzLjAyOGgxLjM2TDQuMzIzIDIuMTQ1SDIuODY1eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3JlZGRpdCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdyZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5SZWRkaXQ8L3RpdGxlPjxwYXRoIGQ9Ik00NDAuMyAyMDMuNWMtMTUgMC0yOC4yIDYuMi0zNy45IDE1LjktMzUuNy0yNC43LTgzLjgtNDAuNi0xMzcuMS00Mi4zTDI5MyA1Mi4zbDg4LjIgMTkuOGMwIDIxLjYgMTcuNiAzOS4yIDM5LjIgMzkuMiAyMiAwIDM5LjctMTguMSAzOS43LTM5LjdzLTE3LjYtMzkuNy0zOS43LTM5LjdjLTE1LjQgMC0yOC43IDkuMy0zNS4zIDIybC05Ny40LTIxLjZjLTQuOS0xLjMtOS43IDIuMi0xMSA3LjFMMjQ2LjMgMTc3Yy01Mi45IDIuMi0xMDAuNSAxOC4xLTEzNi4zIDQyLjgtOS43LTEwLjEtMjMuNC0xNi4zLTM4LjQtMTYuMy01NS42IDAtNzMuOCA3NC42LTIyLjkgMTAwLjEtMS44IDcuOS0yLjYgMTYuMy0yLjYgMjQuNyAwIDgzLjggOTQuNCAxNTEuNyAyMTAuMyAxNTEuNyAxMTYuNCAwIDIxMC44LTY3LjkgMjEwLjgtMTUxLjcgMC04LjQtLjktMTcuMi0zLjEtMjUuMSA0OS45LTI1LjYgMzEuNS05OS43LTIzLjgtOTkuN3pNMTI5LjQgMzA4LjljMC0yMiAxNy42LTM5LjcgMzkuNy0zOS43IDIxLjYgMCAzOS4yIDE3LjYgMzkuMiAzOS43IDAgMjEuNi0xNy42IDM5LjItMzkuMiAzOS4yLTIyIC4xLTM5LjctMTcuNi0zOS43LTM5LjJ6bTIxNC4zIDkzLjVjLTM2LjQgMzYuNC0xMzkuMSAzNi40LTE3NS41IDAtNC0zLjUtNC05LjcgMC0xMy43IDMuNS0zLjUgOS43LTMuNSAxMy4yIDAgMjcuOCAyOC41IDEyMCAyOSAxNDkgMCAzLjUtMy41IDkuNy0zLjUgMTMuMiAwIDQuMSA0IDQuMSAxMC4yLjEgMTMuN3ptLS44LTU0LjJjLTIxLjYgMC0zOS4yLTE3LjYtMzkuMi0zOS4yIDAtMjIgMTcuNi0zOS43IDM5LjItMzkuNyAyMiAwIDM5LjcgMTcuNiAzOS43IDM5LjctLjEgMjEuNS0xNy43IDM5LjItMzkuNyAzOS4yeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3BpbnRlcmVzdCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdwaW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDM4NCA1MTIiPjx0aXRsZT5QaW50ZXJlc3Q8L3RpdGxlPjxwYXRoIGQ9Ik0yMDQgNi41QzEwMS40IDYuNSAwIDc0LjkgMCAxODUuNiAwIDI1NiAzOS42IDI5NiA2My42IDI5NmM5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44QzM4NCA3MS4zIDI5OC4yIDYuNSAyMDQgNi41eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3NoYXJlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3NoYXJlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNTM2IDE3OTIiPjx0aXRsZT5TaGFyZTwvdGl0bGU+PHBhdGggZD0iTTEyMTYgMTAyNHExMzMgMCAyMjYuNSA5My41dDkzLjUgMjI2LjUtOTMuNSAyMjYuNS0yMjYuNSA5My41LTIyNi41LTkzLjUtOTMuNS0yMjYuNXEwLTEyIDItMzRsLTM2MC0xODBxLTkyIDg2LTIxOCA4Ni0xMzMgMC0yMjYuNS05My41dC05My41LTIyNi41IDkzLjUtMjI2LjUgMjI2LjUtOTMuNXExMjYgMCAyMTggODZsMzYwLTE4MHEtMi0yMi0yLTM0IDAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjUtOTMuNSAyMjYuNS0yMjYuNSA5My41cS0xMjYgMC0yMTgtODZsLTM2MCAxODBxMiAyMiAyIDM0dC0yIDM0bDM2MCAxODBxOTItODYgMjE4LTg2eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3Ntcyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdzbXMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5TTVMgVGV4dDwvdGl0bGU+PHBhdGggZD0iTTQ0OCAwSDY0QzI4LjcgMCAwIDI4LjcgMCA2NHYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoOTZ2ODRjMCA5LjggMTEuMiAxNS41IDE5LjEgOS43TDMwNCA0MTZoMTQ0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2xpbmsnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3ZnbGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZD0iTTMyNi42MTIgMTg1LjM5MWM1OS43NDcgNTkuODA5IDU4LjkyNyAxNTUuNjk4LjM2IDIxNC41OS0uMTEuMTItLjI0LjI1LS4zNi4zN2wtNjcuMiA2Ny4yYy01OS4yNyA1OS4yNy0xNTUuNjk5IDU5LjI2Mi0yMTQuOTYgMC01OS4yNy01OS4yNi01OS4yNy0xNTUuNyAwLTIxNC45NmwzNy4xMDYtMzcuMTA2YzkuODQtOS44NCAyNi43ODYtMy4zIDI3LjI5NCAxMC42MDYuNjQ4IDE3LjcyMiAzLjgyNiAzNS41MjcgOS42OSA1Mi43MjEgMS45ODYgNS44MjIuNTY3IDEyLjI2Mi0zLjc4MyAxNi42MTJsLTEzLjA4NyAxMy4wODdjLTI4LjAyNiAyOC4wMjYtMjguOTA1IDczLjY2LTEuMTU1IDEwMS45NiAyOC4wMjQgMjguNTc5IDc0LjA4NiAyOC43NDkgMTAyLjMyNS41MWw2Ny4yLTY3LjE5YzI4LjE5MS0yOC4xOTEgMjguMDczLTczLjc1NyAwLTEwMS44My0zLjcwMS0zLjY5NC03LjQyOS02LjU2NC0xMC4zNDEtOC41NjlhMTYuMDM3IDE2LjAzNyAwIDAgMS02Ljk0Ny0xMi42MDZjLS4zOTYtMTAuNTY3IDMuMzQ4LTIxLjQ1NiAxMS42OTgtMjkuODA2bDIxLjA1NC0yMS4wNTVjNS41MjEtNS41MjEgMTQuMTgyLTYuMTk5IDIwLjU4NC0xLjczMWExNTIuNDgyIDE1Mi40ODIgMCAwIDEgMjAuNTIyIDE3LjE5N3pNNDY3LjU0NyA0NC40NDljLTU5LjI2MS01OS4yNjItMTU1LjY5LTU5LjI3LTIxNC45NiAwbC02Ny4yIDY3LjJjLS4xMi4xMi0uMjUuMjUtLjM2LjM3LTU4LjU2NiA1OC44OTItNTkuMzg3IDE1NC43ODEuMzYgMjE0LjU5YTE1Mi40NTQgMTUyLjQ1NCAwIDAgMCAyMC41MjEgMTcuMTk2YzYuNDAyIDQuNDY4IDE1LjA2NCAzLjc4OSAyMC41ODQtMS43MzFsMjEuMDU0LTIxLjA1NWM4LjM1LTguMzUgMTIuMDk0LTE5LjIzOSAxMS42OTgtMjkuODA2YTE2LjAzNyAxNi4wMzcgMCAwIDAtNi45NDctMTIuNjA2Yy0yLjkxMi0yLjAwNS02LjY0LTQuODc1LTEwLjM0MS04LjU2OS0yOC4wNzMtMjguMDczLTI4LjE5MS03My42MzkgMC0xMDEuODNsNjcuMi02Ny4xOWMyOC4yMzktMjguMjM5IDc0LjMtMjguMDY5IDEwMi4zMjUuNTEgMjcuNzUgMjguMyAyNi44NzIgNzMuOTM0LTEuMTU1IDEwMS45NmwtMTMuMDg3IDEzLjA4N2MtNC4zNSA0LjM1LTUuNzY5IDEwLjc5LTMuNzgzIDE2LjYxMiA1Ljg2NCAxNy4xOTQgOS4wNDIgMzQuOTk5IDkuNjkgNTIuNzIxLjUwOSAxMy45MDYgMTcuNDU0IDIwLjQ0NiAyNy4yOTQgMTAuNjA2bDM3LjEwNi0zNy4xMDZjNTkuMjcxLTU5LjI1OSA1OS4yNzEtMTU1LjY5OS4wMDEtMjE0Ljk1OXoiLz48L3N2Zz4nOw0KICAgICAgICBkZWZhdWx0OiANCiAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICB9DQp9DQpmdW5jdGlvbiBnZXRTdmcobmFtZSkgew0KICAgIGNvbnN0IHR5cGUgPSBuYW1lPyBuYW1lIDogZGF0YS5jb25maWcuRGVza01haW47DQogICAgc3dpdGNoKHR5cGUpIHsNCiAgICAgICAgY2FzZSAndkVsbGlwc2lzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxOTIgNTEyIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBhdGggZD0iTTk2IDE4NGMzOS44IDAgNzIgMzIuMiA3MiA3MnMtMzIuMiA3Mi03MiA3Mi03Mi0zMi4yLTcyLTcyIDMyLjItNzIgNzItNzJ6TTI0IDgwYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJTMTM1LjggOCA5NiA4IDI0IDQwLjIgMjQgODB6bTAgMzUyYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03Mi03MiAzMi4yLTcyIDcyeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ21hcCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Im1hcC1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzODQgNTEyIiBkYXRhLWRlZmF1bHQ9InRydWUiPjxwYXRoIGQ9Ik0xNzIuMjY4IDUwMS42N0MyNi45NyAyOTEuMDMxIDAgMjY5LjQxMyAwIDE5MiAwIDg1Ljk2MSA4NS45NjEgMCAxOTIgMHMxOTIgODUuOTYxIDE5MiAxOTJjMCA3Ny40MTMtMjYuOTcgOTkuMDMxLTE3Mi4yNjggMzA5LjY3LTkuNTM1IDEzLjc3NC0yOS45MyAxMy43NzMtMzkuNDY0IDB6TTE5MiAyNzJjNDQuMTgzIDAgODAtMzUuODE3IDgwLTgwcy0zNS44MTctODAtODAtODAtODAgMzUuODE3LTgwIDgwIDM1LjgxNyA4MCA4MCA4MHoiLz48L3N2Zz4nDQogICAgICAgIGNhc2UgJ2hFbGxpcHNpcyc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPk1vcmU8L3RpdGxlPjxwYXRoIGQ9Ik0zMjggMjU2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyIDMyLjItNzIgNzItNzIgNzIgMzIuMiA3MiA3MnptMTA0LTcyYy0zOS44IDAtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyIDcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03MnptLTM1MiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyIDcyLTMyLjIgNzItNzItMzIuMi03Mi03Mi03MnoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdwbHVzJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNDIgNDIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQyIDQyOyB4bWw6c3BhY2U9InByZXNlcnZlIj48dGl0bGU+TW9yZTwvdGl0bGU+PHBvbHlnb24gcG9pbnRzPSI0MiwyMCAyMiwyMCAyMiwwIDIwLDAgMjAsMjAgMCwyMCAwLDIyIDIwLDIyIDIwLDQyIDIyLDQyIDIyLDIyIDQyLDIyICIvPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2JhcnMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQ0OCA1MTIiPjx0aXRsZT5Nb3JlPC90aXRsZT48cGF0aCBkPSJNMTYgMTMyaDQxNmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2Vjc2YzAtOC44MzctNy4xNjMtMTYtMTYtMTZIMTZDNy4xNjMgNjAgMCA2Ny4xNjMgMCA3NnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2em0wIDE2MGg0MTZjOC44MzcgMCAxNi03LjE2MyAxNi0xNnYtNDBjMC04LjgzNy03LjE2My0xNi0xNi0xNkgxNmMtOC44MzcgMC0xNiA3LjE2My0xNiAxNnY0MGMwIDguODM3IDcuMTYzIDE2IDE2IDE2eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2VudmVsb3BlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iZW1haWwtaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPkVtYWlsPC90aXRsZT48cGF0aCBkPSJNNDY0IDY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTEyYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDh2NDAuODA1Yy0yMi40MjIgMTguMjU5LTU4LjE2OCA0Ni42NTEtMTM0LjU4NyAxMDYuNDktMTYuODQxIDEzLjI0Ny01MC4yMDEgNDUuMDcyLTczLjQxMyA0NC43MDEtMjMuMjA4LjM3NS01Ni41NzktMzEuNDU5LTczLjQxMy00NC43MDFDMTA2LjE4IDE5OS40NjUgNzAuNDI1IDE3MS4wNjcgNDggMTUyLjgwNVYxMTJoNDE2ek00OCA0MDBWMjE0LjM5OGMyMi45MTQgMTguMjUxIDU1LjQwOSA0My44NjIgMTA0LjkzOCA4Mi42NDYgMjEuODU3IDE3LjIwNSA2MC4xMzQgNTUuMTg2IDEwMy4wNjIgNTQuOTU1IDQyLjcxNy4yMzEgODAuNTA5LTM3LjE5OSAxMDMuMDUzLTU0Ljk0NyA0OS41MjgtMzguNzgzIDgyLjAzMi02NC40MDEgMTA0Ljk0Ny04Mi42NTNWNDAwSDQ4eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3NoYXJlZW52ZWxvcGUnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJpY29uc3Znc2hhcmVlbWFpbCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPkVtYWlsPC90aXRsZT48cGF0aCBkPSJNNDY0IDY0SDQ4QzIxLjQ5IDY0IDAgODUuNDkgMCAxMTJ2Mjg4YzAgMjYuNTEgMjEuNDkgNDggNDggNDhoNDE2YzI2LjUxIDAgNDgtMjEuNDkgNDgtNDhWMTEyYzAtMjYuNTEtMjEuNDktNDgtNDgtNDh6bTAgNDh2NDAuODA1Yy0yMi40MjIgMTguMjU5LTU4LjE2OCA0Ni42NTEtMTM0LjU4NyAxMDYuNDktMTYuODQxIDEzLjI0Ny01MC4yMDEgNDUuMDcyLTczLjQxMyA0NC43MDEtMjMuMjA4LjM3NS01Ni41NzktMzEuNDU5LTczLjQxMy00NC43MDFDMTA2LjE4IDE5OS40NjUgNzAuNDI1IDE3MS4wNjcgNDggMTUyLjgwNVYxMTJoNDE2ek00OCA0MDBWMjE0LjM5OGMyMi45MTQgMTguMjUxIDU1LjQwOSA0My44NjIgMTA0LjkzOCA4Mi42NDYgMjEuODU3IDE3LjIwNSA2MC4xMzQgNTUuMTg2IDEwMy4wNjIgNTQuOTU1IDQyLjcxNy4yMzEgODAuNTA5LTM3LjE5OSAxMDMuMDUzLTU0Ljk0NyA0OS41MjgtMzguNzgzIDgyLjAzMi02NC40MDEgMTA0Ljk0Ny04Mi42NTNWNDAwSDQ4eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3Bob25lJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iY2FsbC1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBkYXRhLWRlZmF1bHQ+PHRpdGxlPlBob25lPC90aXRsZT48cGF0aCBkPSJNNDkzLjQgMjQuNmwtMTA0LTI0Yy0xMS4zLTIuNi0yMi45IDMuMy0yNy41IDEzLjlsLTQ4IDExMmMtNC4yIDkuOC0xLjQgMjEuMyA2LjkgMjhsNjAuNiA0OS42Yy0zNiA3Ni43LTk4LjkgMTQwLjUtMTc3LjIgMTc3LjJsLTQ5LjYtNjAuNmMtNi44LTguMy0xOC4yLTExLjEtMjgtNi45bC0xMTIgNDhDMy45IDM2Ni41LTIgMzc4LjEuNiAzODkuNGwyNCAxMDRDMjcuMSA1MDQuMiAzNi43IDUxMiA0OCA1MTJjMjU2LjEgMCA0NjQtMjA3LjUgNDY0LTQ2NCAwLTExLjItNy43LTIwLjktMTguNi0yMy40eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2Nsb3NlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2Nsb3NlIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4InZpZXdCb3g9IjAgMCAyMjQuNTEyIDIyNC41MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDIyNC41MTIgMjI0LjUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0aXRsZT5DbG9zZTwvdGl0bGU+PGc+PHBvbHlnb24gcG9pbnRzPSIyMjQuNTA3LDYuOTk3IDIxNy41MjEsMCAxMTIuMjU2LDEwNS4yNTggNi45OTgsMCAwLjAwNSw2Ljk5NyAxMDUuMjYzLDExMi4yNTQgMC4wMDUsMjE3LjUxMiA2Ljk5OCwyMjQuNTEyIDExMi4yNTYsMTE5LjI0IDIxNy41MjEsMjI0LjUxMiAyMjQuNTA3LDIxNy41MTIgMTE5LjI0OSwxMTIuMjU0Ii8+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjxnPjwvZz48Zz48L2c+PGc+PC9nPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ2ZhY2Vib29rJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z2ZiIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNjQgNTEyIj48dGl0bGU+RmFjZWJvb2s8L3RpdGxlPjxwYXRoIGQ9Ik03Ni43IDUxMlYyODNIMHYtOTFoNzYuN3YtNzEuN0M3Ni43IDQyLjQgMTI0LjMgMCAxOTMuOCAwYzMzLjMgMCA2MS45IDIuNSA3MC4yIDMuNlY4NWgtNDguMmMtMzcuOCAwLTQ1LjEgMTgtNDUuMSA0NC4zVjE5MkgyNTZsLTExLjcgOTFoLTczLjZ2MjI5Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbWVzc2VuZ2VyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0ibWVzcy1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48dGl0bGU+RmFjZWJvb2sgTWVzc2VuZ2VyPC90aXRsZT48cGF0aCBkPSJNMjI0IDMyQzE1LjkgMzItNzcuNSAyNzggODQuNiA0MDAuNlY0ODBsNzUuNy00MmMxNDIuMiAzOS44IDI4NS40LTU5LjkgMjg1LjQtMTk4LjdDNDQ1LjggMTI0LjggMzQ2LjUgMzIgMjI0IDMyem0yMy40IDI3OC4xTDE5MCAyNTAuNSA3OS42IDMxMS42bDEyMS4xLTEyOC41IDU3LjQgNTkuNiAxMTAuNC02MS4xLTEyMS4xIDEyOC41eiIvPjwvc3ZnPicNCiAgICAgICAgY2FzZSAndHVtYmxyJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iaWNvbnN2Z3RtYiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMzIwIDUxMiI+PHRpdGxlPlR1bWJscjwvdGl0bGU+PHBhdGggZD0iTTMwOS44IDQ4MC4zYy0xMy42IDE0LjUtNTAgMzEuNy05Ny40IDMxLjctMTIwLjggMC0xNDctODguOC0xNDctMTQwLjZ2LTE0NEgxNy45Yy01LjUgMC0xMC00LjUtMTAtMTB2LTY4YzAtNy4yIDQuNS0xMy42IDExLjMtMTYgNjItMjEuOCA4MS41LTc2IDg0LjMtMTE3LjEuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNoNzAuOWM1LjUgMCAxMCA0LjUgMTAgMTB2MTE1LjJoODNjNS41IDAgMTAgNC40IDEwIDkuOXY4MS43YzAgNS41LTQuNSAxMC0xMCAxMGgtODMuNFYzNjBjMCAzNC4yIDIzLjcgNTMuNiA2OCAzNS44IDQuOC0xLjkgOS0zLjIgMTIuNy0yLjIgMy41LjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdsaW5rZWRJbic6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdsaSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDQ4IDUxMiI+PHRpdGxlPkxpbmtlZEluPC90aXRsZT48cGF0aCBkPSJNMTAwLjMgNDgwSDcuNFYxODAuOWg5Mi45VjQ4MHpNNTMuOCAxNDAuMUMyNC4xIDE0MC4xIDAgMTE1LjUgMCA4NS44IDAgNTYuMSAyNC4xIDMyIDUzLjggMzJjMjkuNyAwIDUzLjggMjQuMSA1My44IDUzLjggMCAyOS43LTI0LjEgNTQuMy01My44IDU0LjN6TTQ0OCA0ODBoLTkyLjdWMzM0LjRjMC0zNC43LS43LTc5LjItNDguMy03OS4yLTQ4LjMgMC01NS43IDM3LjctNTUuNyA3Ni43VjQ4MGgtOTIuOFYxODAuOWg4OS4xdjQwLjhoMS4zYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM1Y0ODB6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAndHdpdHRlcic6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmd0dyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTYgMTYiPjx0aXRsZT5Ud2l0dGVyPC90aXRsZT48cGF0aCBkPSJNMTIuNi43NWgyLjQ1NGwtNS4zNiA2LjE0MkwxNiAxNS4yNWgtNC45MzdsLTMuODY3LTUuMDctNC40MjUgNS4wN0guMzE2bDUuNzMzLTYuNTdMMCAuNzVoNS4wNjNsMy40OTUgNC42MzNMMTIuNjAxLjc1Wm0tLjg2IDEzLjAyOGgxLjM2TDQuMzIzIDIuMTQ1SDIuODY1eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3JlZGRpdCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdyZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjx0aXRsZT5SZWRkaXQ8L3RpdGxlPjxwYXRoIGQ9Ik00NDAuMyAyMDMuNWMtMTUgMC0yOC4yIDYuMi0zNy45IDE1LjktMzUuNy0yNC43LTgzLjgtNDAuNi0xMzcuMS00Mi4zTDI5MyA1Mi4zbDg4LjIgMTkuOGMwIDIxLjYgMTcuNiAzOS4yIDM5LjIgMzkuMiAyMiAwIDM5LjctMTguMSAzOS43LTM5LjdzLTE3LjYtMzkuNy0zOS43LTM5LjdjLTE1LjQgMC0yOC43IDkuMy0zNS4zIDIybC05Ny40LTIxLjZjLTQuOS0xLjMtOS43IDIuMi0xMSA3LjFMMjQ2LjMgMTc3Yy01Mi45IDIuMi0xMDAuNSAxOC4xLTEzNi4zIDQyLjgtOS43LTEwLjEtMjMuNC0xNi4zLTM4LjQtMTYuMy01NS42IDAtNzMuOCA3NC42LTIyLjkgMTAwLjEtMS44IDcuOS0yLjYgMTYuMy0yLjYgMjQuNyAwIDgzLjggOTQuNCAxNTEuNyAyMTAuMyAxNTEuNyAxMTYuNCAwIDIxMC44LTY3LjkgMjEwLjgtMTUxLjcgMC04LjQtLjktMTcuMi0zLjEtMjUuMSA0OS45LTI1LjYgMzEuNS05OS43LTIzLjgtOTkuN3pNMTI5LjQgMzA4LjljMC0yMiAxNy42LTM5LjcgMzkuNy0zOS43IDIxLjYgMCAzOS4yIDE3LjYgMzkuMiAzOS43IDAgMjEuNi0xNy42IDM5LjItMzkuMiAzOS4yLTIyIC4xLTM5LjctMTcuNi0zOS43LTM5LjJ6bTIxNC4zIDkzLjVjLTM2LjQgMzYuNC0xMzkuMSAzNi40LTE3NS41IDAtNC0zLjUtNC05LjcgMC0xMy43IDMuNS0zLjUgOS43LTMuNSAxMy4yIDAgMjcuOCAyOC41IDEyMCAyOSAxNDkgMCAzLjUtMy41IDkuNy0zLjUgMTMuMiAwIDQuMSA0IDQuMSAxMC4yLjEgMTMuN3ptLS44LTU0LjJjLTIxLjYgMC0zOS4yLTE3LjYtMzkuMi0zOS4yIDAtMjIgMTcuNi0zOS43IDM5LjItMzkuNyAyMiAwIDM5LjcgMTcuNiAzOS43IDM5LjctLjEgMjEuNS0xNy43IDM5LjItMzkuNyAzOS4yeiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3BpbnRlcmVzdCc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9Imljb25zdmdwaW4iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDM4NCA1MTIiPjx0aXRsZT5QaW50ZXJlc3Q8L3RpdGxlPjxwYXRoIGQ9Ik0yMDQgNi41QzEwMS40IDYuNSAwIDc0LjkgMCAxODUuNiAwIDI1NiAzOS42IDI5NiA2My42IDI5NmM5LjkgMCAxNS42LTI3LjYgMTUuNi0zNS40IDAtOS4zLTIzLjctMjkuMS0yMy43LTY3LjggMC04MC40IDYxLjItMTM3LjQgMTQwLjQtMTM3LjQgNjguMSAwIDExOC41IDM4LjcgMTE4LjUgMTA5LjggMCA1My4xLTIxLjMgMTUyLjctOTAuMyAxNTIuNy0yNC45IDAtNDYuMi0xOC00Ni4yLTQzLjggMC0zNy44IDI2LjQtNzQuNCAyNi40LTExMy40IDAtNjYuMi05My45LTU0LjItOTMuOSAyNS44IDAgMTYuOCAyLjEgMzUuNCA5LjYgNTAuNy0xMy44IDU5LjQtNDIgMTQ3LjktNDIgMjA5LjEgMCAxOC45IDIuNyAzNy41IDQuNSA1Ni40IDMuNCAzLjggMS43IDMuNCA2LjkgMS41IDUwLjQtNjkgNDguNi04Mi41IDcxLjQtMTcyLjggMTIuMyAyMy40IDQ0LjEgMzYgNjkuMyAzNiAxMDYuMiAwIDE1My45LTEwMy41IDE1My45LTE5Ni44QzM4NCA3MS4zIDI5OC4yIDYuNSAyMDQgNi41eiIvPjwvc3ZnPic7DQogICAgICAgIGNhc2UgJ3NoYXJlJzoNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0ic2hhcmUtaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUzNiAxNzkyIj48dGl0bGU+U2hhcmU8L3RpdGxlPjxwYXRoIGQ9Ik0xMjE2IDEwMjRxMTMzIDAgMjI2LjUgOTMuNXQ5My41IDIyNi41LTkzLjUgMjI2LjUtMjI2LjUgOTMuNS0yMjYuNS05My41LTkzLjUtMjI2LjVxMC0xMiAyLTM0bC0zNjAtMTgwcS05MiA4Ni0yMTggODYtMTMzIDAtMjI2LjUtOTMuNXQtOTMuNS0yMjYuNSA5My41LTIyNi41IDIyNi41LTkzLjVxMTI2IDAgMjE4IDg2bDM2MC0xODBxLTItMjItMi0zNCAwLTEzMyA5My41LTIyNi41dDIyNi41LTkzLjUgMjI2LjUgOTMuNSA5My41IDIyNi41LTkzLjUgMjI2LjUtMjI2LjUgOTMuNXEtMTI2IDAtMjE4LTg2bC0zNjAgMTgwcTIgMjIgMiAzNHQtMiAzNGwzNjAgMTgwcTkyLTg2IDIxOC04NnoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdzbXMnOg0KICAgICAgICAgICAgcmV0dXJuICc8c3ZnIGNsYXNzPSJzbXMtaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPlNNUyBUZXh0PC90aXRsZT48cGF0aCBkPSJNNDQ4IDBINjRDMjguNyAwIDAgMjguNyAwIDY0djI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NnY4NGMwIDkuOCAxMS4yIDE1LjUgMTkuMSA5LjdMMzA0IDQxNmgxNDRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjR6Ii8+PC9zdmc+JzsNCiAgICAgICAgY2FzZSAnbGluayc6DQogICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9ImxpbmstaWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHBhdGggZD0iTTMyNi42MTIgMTg1LjM5MWM1OS43NDcgNTkuODA5IDU4LjkyNyAxNTUuNjk4LjM2IDIxNC41OS0uMTEuMTItLjI0LjI1LS4zNi4zN2wtNjcuMiA2Ny4yYy01OS4yNyA1OS4yNy0xNTUuNjk5IDU5LjI2Mi0yMTQuOTYgMC01OS4yNy01OS4yNi01OS4yNy0xNTUuNyAwLTIxNC45NmwzNy4xMDYtMzcuMTA2YzkuODQtOS44NCAyNi43ODYtMy4zIDI3LjI5NCAxMC42MDYuNjQ4IDE3LjcyMiAzLjgyNiAzNS41MjcgOS42OSA1Mi43MjEgMS45ODYgNS44MjIuNTY3IDEyLjI2Mi0zLjc4MyAxNi42MTJsLTEzLjA4NyAxMy4wODdjLTI4LjAyNiAyOC4wMjYtMjguOTA1IDczLjY2LTEuMTU1IDEwMS45NiAyOC4wMjQgMjguNTc5IDc0LjA4NiAyOC43NDkgMTAyLjMyNS41MWw2Ny4yLTY3LjE5YzI4LjE5MS0yOC4xOTEgMjguMDczLTczLjc1NyAwLTEwMS44My0zLjcwMS0zLjY5NC03LjQyOS02LjU2NC0xMC4zNDEtOC41NjlhMTYuMDM3IDE2LjAzNyAwIDAgMS02Ljk0Ny0xMi42MDZjLS4zOTYtMTAuNTY3IDMuMzQ4LTIxLjQ1NiAxMS42OTgtMjkuODA2bDIxLjA1NC0yMS4wNTVjNS41MjEtNS41MjEgMTQuMTgyLTYuMTk5IDIwLjU4NC0xLjczMWExNTIuNDgyIDE1Mi40ODIgMCAwIDEgMjAuNTIyIDE3LjE5N3pNNDY3LjU0NyA0NC40NDljLTU5LjI2MS01OS4yNjItMTU1LjY5LTU5LjI3LTIxNC45NiAwbC02Ny4yIDY3LjJjLS4xMi4xMi0uMjUuMjUtLjM2LjM3LTU4LjU2NiA1OC44OTItNTkuMzg3IDE1NC43ODEuMzYgMjE0LjU5YTE1Mi40NTQgMTUyLjQ1NCAwIDAgMCAyMC41MjEgMTcuMTk2YzYuNDAyIDQuNDY4IDE1LjA2NCAzLjc4OSAyMC41ODQtMS43MzFsMjEuMDU0LTIxLjA1NWM4LjM1LTguMzUgMTIuMDk0LTE5LjIzOSAxMS42OTgtMjkuODA2YTE2LjAzNyAxNi4wMzcgMCAwIDAtNi45NDctMTIuNjA2Yy0yLjkxMi0yLjAwNS02LjY0LTQuODc1LTEwLjM0MS04LjU2OS0yOC4wNzMtMjguMDczLTI4LjE5MS03My42MzkgMC0xMDEuODNsNjcuMi02Ny4xOWMyOC4yMzktMjguMjM5IDc0LjMtMjguMDY5IDEwMi4zMjUuNTEgMjcuNzUgMjguMyAyNi44NzIgNzMuOTM0LTEuMTU1IDEwMS45NmwtMTMuMDg3IDEzLjA4N2MtNC4zNSA0LjM1LTUuNzY5IDEwLjc5LTMuNzgzIDE2LjYxMiA1Ljg2NCAxNy4xOTQgOS4wNDIgMzQuOTk5IDkuNjkgNTIuNzIxLjUwOSAxMy45MDYgMTcuNDU0IDIwLjQ0NiAyNy4yOTQgMTAuNjA2bDM3LjEwNi0zNy4xMDZjNTkuMjcxLTU5LjI1OSA1OS4yNzEtMTU1LjY5OS4wMDEtMjE0Ljk1OXoiLz48L3N2Zz4nOw0KICAgICAgICBjYXNlICdjaGF0JzoNCiAgICAgICAgICAgIC8vIHJldHVybiAnPHN2ZyBjbGFzcz0iY2hhdC1pY29uIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48dGl0bGU+RW1haWw8L3RpdGxlPjxwYXRoIGQ9Ik00NjQgNjRINDhDMjEuNDkgNjQgMCA4NS40OSAwIDExMnYyODhjMCAyNi41MSAyMS40OSA0OCA0OCA0OGg0MTZjMjYuNTEgMCA0OC0yMS40OSA0OC00OFYxMTJjMC0yNi41MS0yMS40OS00OC00OC00OHptMCA0OHY0MC44MDVjLTIyLjQyMiAxOC4yNTktNTguMTY4IDQ2LjY1MS0xMzQuNTg3IDEwNi40OS0xNi44NDEgMTMuMjQ3LTUwLjIwMSA0NS4wNzItNzMuNDEzIDQ0LjcwMS0yMy4yMDguMzc1LTU2LjU3OS0zMS40NTktNzMuNDEzLTQ0LjcwMUMxMDYuMTggMTk5LjQ2NSA3MC40MjUgMTcxLjA2NyA0OCAxNTIuODA1VjExMmg0MTZ6TTQ4IDQwMFYyMTQuMzk4YzIyLjkxNCAxOC4yNTEgNTUuNDA5IDQzLjg2MiAxMDQuOTM4IDgyLjY0NiAyMS44NTcgMTcuMjA1IDYwLjEzNCA1NS4xODYgMTAzLjA2MiA1NC45NTUgNDIuNzE3LjIzMSA4MC41MDktMzcuMTk5IDEwMy4wNTMtNTQuOTQ3IDQ5LjUyOC0zOC43ODMgODIuMDMyLTY0LjQwMSAxMDQuOTQ3LTgyLjY1M1Y0MDBINDh6Ii8+PC9zdmc+JzsNCiAgICAgICAgICAgIHJldHVybiAnPHN2ZyBjbGFzcz0iY2hhdC1pY29uIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Zz48cGF0aCBkPSJtNDYwLjc0NyA0MzkuMTYzYzg5LjExOS0xMDIuNzkxIDU4LjExMS0yNjIuNTkyLTYzLjA5NC0zMjQuOTMtMzUuMDA0LTY3Ljc4NC0xMDUuNzU0LTExNC4yMzMtMTg3LjE1My0xMTQuMjMzLTExNi4wNjQgMC0yMTAuNDg4IDk0LjQzLTIxMC40ODggMjEwLjUgMCA1MS4wOTkgMTguMDg4IDk5LjQyNyA1MS4yMzcgMTM3LjY2M2wtNDYuNzc0IDQ2LjE2Yy05LjQ4IDkuMzU3LTIuOTEzIDI1LjYxMiAxMC40NjUgMjUuNjc3bDExMi45NTYuNTM4YzM4LjkyNSA1Ni42NDEgMTAzLjIyOCA5MS40NjIgMTczLjYgOTEuNDYyLjE0NCAwIDE5NS40NDYtLjk5OSAxOTUuNTYxLTEgMTMuMzMzLS4wNjQgMTkuOTc1LTE2LjI5IDEwLjQ2NC0yNS42Nzd6bS0zNzcuOTg1LTEwMS4xNDZjLTM0LjAxNy0zNC4wOC01Mi43NTItNzkuMzY3LTUyLjc1Mi0xMjcuNTE3IDAtOTkuNTI4IDgwLjk2OC0xODAuNSAxODAuNDktMTgwLjVzMTgwLjQ5IDgwLjk3MiAxODAuNDkgMTgwLjVjMCA5NS4zNzMtNzUuNDczIDE4MS4yNjktMTg2LjM0MyAxODAuNDAzbC0xNTMuMjU4LS43MyAzMS4yOTMtMzAuODgyYzUuOTE4LTUuODQyIDUuOTUzLTE1LjM4OS4wOC0yMS4yNzR6bTIxOC43MzQgMTQzLjk4M2MtNTIuNjM0IDAtMTAxLjU1Ny0yMi40ODktMTM1LjU2NS02MS4yODEgNTcuMTA0LjM3NiA0MS45NDUuMjgxIDQ0LjU2OS4yODEgMTM1LjQwMiAwIDIzNi41MDYtMTI3LjAwOSAyMDQuNjg5LTI1OS42MTcgODIuOTY2IDY3Ljc3NCA4OS43NjEgMTkxLjc3OSAxNC4wNDUgMjY3LjYzNC01Ljg3NCA1Ljg4NS01LjgzOCAxNS40MzMuMDggMjEuMjc0bDMxLjI5MyAzMC44ODJjLS4xMTkgMC0xNTguOTk1LjgyNy0xNTkuMTExLjgyN3oiLz48cGF0aCBkPSJtMTIxLjAwNSAxNjZoMTc5Ljk5YzguMjg0IDAgMTQuOTk5LTYuNzE2IDE0Ljk5OS0xNXMtNi43MTUtMTUtMTQuOTk5LTE1aC0xNzkuOTljLTguMjg0IDAtMTQuOTk5IDYuNzE2LTE0Ljk5OSAxNXM2LjcxNiAxNSAxNC45OTkgMTV6Ii8+PHBhdGggZD0ibTEyMS4wMDUgMjI2aDE3OS45OWM4LjI4NCAwIDE0Ljk5OS02LjcxNiAxNC45OTktMTVzLTYuNzE1LTE1LTE0Ljk5OS0xNWgtMTc5Ljk5Yy04LjI4NCAwLTE0Ljk5OSA2LjcxNi0xNC45OTkgMTVzNi43MTYgMTUgMTQuOTk5IDE1eiIvPjxwYXRoIGQ9Im0xMjEuMDA1IDI4NmgxNzkuOTljOC4yODQgMCAxNC45OTktNi43MTYgMTQuOTk5LTE1cy02LjcxNS0xNS0xNC45OTktMTVoLTE3OS45OWMtOC4yODQgMC0xNC45OTkgNi43MTYtMTQuOTk5IDE1czYuNzE2IDE1IDE0Ljk5OSAxNXoiLz48L2c+PC9zdmc+JzsNCiAgICAgICAgZGVmYXVsdDogDQogICAgICAgICAgICByZXR1cm4gJyc7DQogICAgfQ0KfQ0K","css":"#main-container.open > svg {\r\n fill: #333333 !important;\r\n}\r\n#main-container {\r\n display: inline-block;\r\n margin: 0 auto;\r\n}\r\n.master-bar > #main-container {\r\n margin: 0;\r\n width: 40px;\r\n max-height: 60px;\r\n}\r\n#close-bar {\r\n width: 42.666px;\r\n z-index: 10000006;\r\n position: absolute;\r\n bottom: 0.5em;\r\n right: 0.5em;\r\n}\r\n#close-bar svg {\r\n fill: #fff !important;\r\n}\r\n.share-container .iconsvgshareemail {\r\n padding: 0 !important;\r\n margin: 0 auto!important;\r\n display: block;\r\n width:60%;\r\n}\r\n.fab {\r\n background: #fff;\r\n width: 64px;\r\n height: 64px;\r\n border-radius: 50%;\r\n text-align: center;\r\n color: #333333;\r\n box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5), 3px 3px 3px rgba(0, 0, 0, 0.25);\r\n position: fixed;\r\n bottom: 0px;\r\n right: 0px;\r\n font-size: 2.6667em;\r\n display: inline-block;\r\n cursor: default;\r\n}\r\n.fab.master-mobile, .child.mobile {\r\n bottom: 15px;\r\n right: 15px;\r\n}\r\n.fab.bsr-left {\r\n bottom: 15px; !important;\r\n left: 15px; !important;\r\n}\r\n.fab, .social-icon span {\r\n vertical-align: middle;\r\n}\r\n.fab.child {\r\n width: 42.66666667px;\r\n height: 42.66666667px;\r\n display: none;\r\n opacity: 0;\r\n font-size: 2em;\r\n background-color: #ffffff;\r\n z-index: 10000007;\r\n margin: 0 10px;\r\n /* Aligns icon in center */\r\n display: flex;\r\n align-items: center;\r\n}\r\n.fab.child.child-desktop-bar {\r\n position: absolute;\r\n left: 10px;\r\n background-color: black;\r\n background-color: rgba(0,0,0,0);\r\n border: 2px solid #cccccc;\r\n box-shadow: none;\r\n display:none;\r\n}\r\n.fab.child.dark {\r\n background-color: #fff;\r\n}\r\n.fab.child.float {\r\n border-radius: 0px;\r\n background-color: #fff;\r\n box-shadow: none;\r\n margin: auto;\r\n position: relative;\r\n opacity: 1;\r\n min-width: 42.666px;\r\n top:0;\r\n}\r\n.social-icon {\r\n width: 42.66666667px;\r\n height: 42.66666667px;\r\n font-size: 2em;\r\n z-index: 10000007;\r\n margin: 10px auto;\r\n display: flex;\r\n align-items: center;\r\n border-radius: 50%;\r\n}\r\n.social {\r\n width: inherit;\r\n height: inherit;\r\n}\r\n.social-icon svg {\r\n width: inherit;\r\n height: inherit;\r\n padding: 8px;\r\n fill: white;\r\n}\r\n.social-icon.light svg {\r\n fill: white;\r\n}\r\n.social-icon.dark svg {\r\n fill: black;\r\n}\r\n.overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: #ECECEC;\r\n opacity: 0.9;\r\n display: none;\r\n z-index: 10000001;\r\n}\r\n.overlay.dark {\r\n background: #000;\r\n opacity: 0.6;\r\n}\r\n.icon-container svg {\r\n fill: #CCCCCC;\r\n margin: 0 auto;\r\n display: block;\r\n width: 50%;\r\n height:100%;\r\n}\r\n.icon-container.mobile.dark svg {\r\n fill: #000;\r\n}\r\n.mobile-bg, .social-bg {\r\n position: fixed;\r\n width: 100%;\r\n bottom: 0px;\r\n left: 0px;\r\n z-index: 10000002;\r\n display: none;\r\n}\r\n.social-bg {\r\n z-index: 10000005;\r\n}\r\n.mobile-bg.dark, .social-bg.dark {\r\n background: #000;\r\n}\r\n.mobile-bg.light, .social-bg.light {\r\n background: #fff;\r\n}\r\n.desktop-bg {\r\n position: absolute;\r\n min-width: 200px;\r\n bottom: 0px;\r\n left: 0px;\r\n z-index: 10000004;\r\n display: none;\r\n background: #ffffff;\r\n border-bottom: 6px solid #333333;\r\n box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5), 3px 3px 3px rgba(0, 0, 0, 0.25);\r\n}\r\n.left-text {\r\n text-align: right;\r\n position: absolute;\r\n right: 4rem;\r\n width: 300px;\r\n top: 49%;\r\n transform: translateY(-49%);\r\n}\r\n.bsr-right-text {\r\n text-align: left;\r\n position: absolute;\r\n left: 4rem;\r\n width: 300px;\r\n top: 49%;\r\n transform: translateY(-49%);\r\n}\r\n.menu-link {\r\n text-decoration: none;\r\n align-self: center;\r\n}\r\n.menu-link.dark {\r\n color: white;\r\n}\r\n.menu-link.light {\r\n color: black;\r\n}\r\n.menu-link.desk-bar {\r\n color: #333333;\r\n font-size: 24px;\r\n}\r\n.right-text {\r\n position: absolute;\r\n text-align: left;\r\n font-size: 20px;\r\n width: 200px;\r\n left: 50px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n}\r\n#float-container {\r\n position: fixed;\r\n right: 0px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n white-space: nowrap;\r\n z-index: 10000005;\r\n}\r\n.float-container {\r\n display: flex;\r\n height: 42.666px;\r\n max-width: 42.666px;\r\n background-color: white;\r\n margin-left: auto;\r\n margin-right: 0;\r\n float: right;\r\n clear: right;\r\n}\r\n.float-text-container {\r\n display: none;\r\n opacity: 1 !important;\r\n max-width: 100%;\r\n}\r\n.float-text {\r\n font-size: 20px;\r\n color: #333333;\r\n padding-left: 0.5em;\r\n padding-right: 44px;\r\n display: none;\r\n}\r\n.master-bar {\r\n border-radius: 0px;\r\n height: 50px;\r\n bottom: 0px;\r\n right:50px;\r\n width: 200px;\r\n padding: 0 0.5em;\r\n}\r\n#help-text {\r\n display: none;\r\n position: absolute;\r\n margin: 20px;\r\n color: #333333;\r\n font-size: 24px;\r\n text-align: left;\r\n}\r\n#master-label {\r\n font-size: 16px;\r\n}\r\n#masterfab {\r\n z-index: 10000006;\r\n display: none;\r\n align-items: center;\r\n}\r\n#masterfab svg {\r\n fill: #cccccc;\r\n margin: 0 auto;\r\n display: block;\r\n width: 60%;\r\n max-width: 70px;\r\n max-height: 50px;\r\n}\r\n\r\n/* Pulse animation */\r\n.pulse {\r\n border: 3px solid #cccccc;\r\n -webkit-border-radius: 50px;\r\n height: 100px;\r\n width: 100px;\r\n position: absolute;\r\n /* trick to center, left margin half of width */\r\n margin: 0 0 0 -50px;\r\n left: 50%;\r\n -webkit-animation: pulsate 1s ease-out;\r\n -moz-animation: pulsate 1s ease-out;\r\n -o-animation: pulsate 1s ease-out;\r\n animation: pulsate 1s ease-out;\r\n opacity: 0.0;\r\n}\r\n@-webkit-keyframes pulsate {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@-moz-keyframes pulsate {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@-o-keyframes pulsate {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@keyframes pulsate {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n\r\n.pulse2 {\r\n border: 3px solid #cccccc;\r\n -webkit-border-radius: 40px;\r\n height: 80px;\r\n width: 80px;\r\n position: absolute;\r\n /* trick to center, left margin half of width */\r\n margin: 0 0 0 -40px;\r\n left: 50%;\r\n -webkit-animation: pulsate2 1s ease-out;\r\n -moz-animation: pulsate2 1s ease-out;\r\n -o-animation: pulsate2 1s ease-out;\r\n animation: pulsate2 1s ease-out;\r\n opacity: 0.0;\r\n}\r\n@-webkit-keyframes pulsate2 {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@-moz-keyframes pulsate2 {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@-o-keyframes pulsate2 {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n@keyframes pulsate2 {\r\n 0% {-webkit-transform: scale(0.8, 0.8); opacity: 0.0;}\r\n 50% {opacity: 1.0;}\r\n 100% {-webkit-transform: scale(1.4, 1.4); opacity: 0.0;}\r\n}\r\n\r\n.slide-pulse {\r\n -webkit-animation: slide 1s ease;\r\n -moz-animation: slide 1s ease;\r\n -o-animation: slide 1s ease;\r\n animation: slide 1s ease;\r\n}\r\n@-webkit-keyframes slide {\r\n 0% {max-width: 42.6667px; width: 42.667px;}\r\n 50% {max-width: 50px; width: 50px;}\r\n 100% {max-width: 50px; width: 42.667px;}\r\n}\r\n@-moz-keyframes slide {\r\n 0% {max-width: 42.6667px; width: 42.667px;}\r\n 50% {max-width: 50px; width: 50px;}\r\n 100% {max-width: 50px; width: 42.667px;}\r\n}\r\n@-o-keyframes slide {\r\n 0% {max-width: 42.6667px; width: 42.667px;}\r\n 50% {max-width: 50px; width: 50px;}\r\n 100% {max-width: 50px; width: 42.667px;}\r\n}\r\n@keyframes slide {\r\n 0% {max-width: 42.6667px; width: 42.667px;}\r\n 50% {max-width: 50px; width: 50px;}\r\n 100% {max-width: 50px; width: 42.667px;}\r\n}\r\n/* Modal Styles */\r\n\r\n.modal__overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(0,0,0,0.6);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n position:relative;\r\n height:100%;\r\n width:100%;\r\n}\r\n\r\n.modal__container {\r\n background-color: #fff;\r\n padding: 30px;\r\n max-width: 500px;\r\n min-width: 200px;\r\n max-height: 100vh;\r\n border-radius: 4px;\r\n overflow-y: auto;\r\n box-sizing: border-box;\r\n}\r\n\r\n.modal__header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n}\r\n\r\n.modal__title {\r\n margin: 0 auto;\r\n color: black;\r\n font-weight: 600;\r\n font-size: 1.25rem;\r\n line-height: 1.25;\r\n box-sizing: border-box;\r\n}\r\n\r\n.modal__close {\r\n background: transparent;\r\n border: 0;\r\n position: absolute;\r\n top: 14px;\r\n right: 14px;\r\n}\r\n.modal__close, .modal__close svg {\r\n width: 20px;\r\n height: 20px;\r\n outline:none !important;\r\n}\r\n.modal__close svg {\r\n position: absolute;\r\n left: 0px;\r\n top: 0px;\r\n}\r\n\r\n.modal__content {\r\n margin-top: 2rem;\r\n margin-bottom: 2rem;\r\n line-height: 1.5;\r\n color: rgba(0,0,0,.8);\r\n}\r\n\r\n.modal__btn {\r\n font-size: .875rem;\r\n padding-left: 1rem;\r\n padding-right: 1rem;\r\n padding-top: .5rem;\r\n padding-bottom: .5rem;\r\n background-color: #e6e6e6;\r\n color: rgba(0,0,0,.8);\r\n border-radius: .25rem;\r\n border-style: none;\r\n border-width: 0;\r\n cursor: pointer;\r\n -webkit-appearance: button;\r\n text-transform: none;\r\n overflow: visible;\r\n line-height: 1.15;\r\n margin: 0;\r\n will-change: transform;\r\n -moz-osx-font-smoothing: grayscale;\r\n -webkit-backface-visibility: hidden;\r\n backface-visibility: hidden;\r\n -webkit-transform: translateZ(0);\r\n transform: translateZ(0);\r\n transition: -webkit-transform .25s ease-out;\r\n transition: transform .25s ease-out;\r\n transition: transform .25s ease-out,-webkit-transform .25s ease-out;\r\n}\r\n\r\n.modal__btn:focus, .modal__btn:hover {\r\n -webkit-transform: scale(1.05);\r\n transform: scale(1.05);\r\n}\r\n\r\n.modal__btn-primary {\r\n background-color: #00449e;\r\n color: #fff;\r\n}\r\n\r\n\r\n\r\n/* Modal animation */\r\n\r\n@keyframes mmfadeIn {\r\n from { opacity: 0; }\r\n to { opacity: 1; }\r\n}\r\n\r\n@keyframes mmfadeOut {\r\n from { opacity: 1; }\r\n to { opacity: 0; }\r\n}\r\n\r\n@keyframes mmslideIn {\r\n from { transform: translateY(15%); }\r\n to { transform: translateY(0); }\r\n}\r\n\r\n@keyframes mmslideOut {\r\n from { transform: translateY(0); }\r\n to { transform: translateY(-10%); }\r\n}\r\n\r\n.micromodal-slide {\r\n display: none;\r\n}\r\n\r\n.micromodal-slide.is-open {\r\n display: block;\r\n}\r\n\r\n.micromodal-slide[aria-hidden=\"false\"] .modal__overlay {\r\n\tanimation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);\r\n}\r\n\r\n.micromodal-slide[aria-hidden=\"false\"] .modal__container {\r\n animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);\r\n}\r\n\r\n.micromodal-slide[aria-hidden=\"true\"] .modal__overlay {\r\n animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);\r\n}\r\n\r\n.micromodal-slide[aria-hidden=\"true\"] .modal__container {\r\n animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);\r\n}\r\n\r\n.micromodal-slide .modal__container,\r\n.micromodal-slide .modal__overlay {\r\n will-change: transform;\r\n}\r\n.micromodal-slide.is-open {\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index:999;\r\n}\r\n\n","strings":{}}],"page_title":"Info","flexstyles":[],"popups":[],"title":"Info","uuid":"a819a3c6f4074979bcec4d3138611a4c","devicecss":"*#dm *.dmBody div.u_dm_content\n{\n\tpadding-top:20px !important;\n\tpadding-bottom:20px !important;\n\tpadding-left:20px !important;\n\tpadding-right:20px !important;\n}\n*#dm *.dmBody div.allWrapper .dmPopupInner\n{\n\tmargin-left:0 !important;\n\tpadding-top:0 !important;\n\tpadding-left:0 !important;\n\tpadding-bottom:0 !important;\n\tmargin-top:0 !important;\n\tmargin-bottom:0 !important;\n\tmargin-right:0 !important;\n\tpadding-right:0 !important;\n}\n*#dm *.dmBody div.u_1550745521\n{\n\tpadding-top:15px !important;\n\tpadding-left:40px !important;\n\tpadding-bottom:15px !important;\n\tfloat:none !important;\n\tmargin-right:0px !important;\n\tmargin-left:0px !important;\n\ttop:0 !important;\n\tmax-width:none !important;\n\tleft:0 !important;\n\twidth:auto !important;\n\tmargin-top:0px !important;\n\tposition:relative !important;\n\tmargin-bottom:0px !important;\n\tpadding-right:40px !important;\n\tmin-width:0 !important;\n\ttext-align:center !important;\n\theight:auto !important;\n}\n*#dm *.dmBody div.u_1177589443\n{\n\tmargin-left:0px !important;\n\tpadding-top:5px !important;\n\tpadding-left:0px !important;\n\tpadding-bottom:5px !important;\n\tmargin-top:0px !important;\n\tmargin-bottom:10px !important;\n\tmargin-right:0px !important;\n\tpadding-right:0px !important;\n}\n*#dm *.dmBody div.u_1364864902\n{\n\tpadding-top:5px !important;\n\tpadding-left:0px !important;\n\tpadding-bottom:5px !important;\n\tfloat:none !important;\n\tmargin-right:0px !important;\n\tmargin-left:0px !important;\n\ttop:0 !important;\n\tmax-width:calc(100% - 0px) !important;\n\tleft:0 !important;\n\twidth:100% !important;\n\tmargin-top:10px !important;\n\tposition:relative !important;\n\tmargin-bottom:0px !important;\n\tpadding-right:0px !important;\n\tmin-width:25px !important;\n\ttext-align:center !important;\n\theight:auto !important;\n\tdisplay:block !important;\n}\n*#dm *.dmBody div.u_1694205906\n{\n\tpadding-top:20px !important;\n\tpadding-left:40px !important;\n\tpadding-bottom:10px !important;\n\tfloat:none !important;\n\tmargin-right:0px !important;\n\tmargin-left:0px !important;\n\ttop:auto !important;\n\tmax-width:none !important;\n\tleft:0 !important;\n\twidth:auto !important;\n\tmargin-top:0px !important;\n\tposition:relative !important;\n\tmargin-bottom:0px !important;\n\tpadding-right:40px !important;\n\tmin-width:0 !important;\n\ttext-align:center !important;\n\theight:auto !important;\n}\n*#dm *.dmBody div.u_1805320705\n{\n\tfloat:none !important;\n\ttop:0px !important;\n\tleft:0 !important;\n\twidth:calc(100% - 0px) !important;\n\tposition:relative !important;\n\theight:auto !important;\n\tpadding-top:0px !important;\n\tpadding-left:0px !important;\n\tpadding-bottom:0px !important;\n\tmargin-right:auto !important;\n\tmargin-left:auto !important;\n\tmax-width:231px !important;\n\tmargin-top:0px !important;\n\tmargin-bottom:0px !important;\n\tpadding-right:0px !important;\n\tmin-width:25px !important;\n\ttext-align:center !important;\n}\n","seometatags":"","content":"
\n
\n
\n
\n
\n
\n
\"Apple \n
\n
\n
\n
\n
\n \n
For Emergency Service

 Call (513) 897-2753

\n
\n \n \n Call (513) 897-2753 \n \n
\n
\n
\n
\n
\n
\n
\n
\n","ssr_script":"","headsection":"\n\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n","current_url":"","collections":"e30=","sidebarPosition":"NA","pageFontSizeStyle":".font-size-16, .size-16, .size-16 > font { font-size: 16px !important; }","alias":"build-your-own-insite3","relAlternateLanguageLinksMarkup":"","extensionsToRender":{"1888830622":"
\n","1715149005":"
\n","1339596640":" \n","1030165537":" \n","1832600643":" \n"},"parameters":{"InitialPageAlias":"build-your-own-insite3","InitialDynamicItem":null,"IsCurrentHomePage":false,"pageType":"POPUP","CurrentPageUrl":""},"insite_scripts":""}