@import 'animate.css';
@import 'reset.css';
@font-face{font-family:'halflings';src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format('embedded-opentype'),url("../fonts/glyphicons-halflings-regular.2.woff") format('woff2'),url("../fonts/glyphicons-halflings-regular.woff") format('woff'),url("../fonts/glyphicons-halflings-regular.ttf") format('truetype'),url("../fonts/glyphicons-halflings-regular.svg#halflings") format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Montserrat';src:url("../fonts/Montserrat-Bold.eot");src:url("../fonts/Montserrat-Bold.eot?#iefix") format('embedded-opentype'),url("../fonts/Montserrat-Bold.woff") format('woff'),url("../fonts/Montserrat-Bold.ttf") format('truetype'),url("../fonts/Montserrat-Bold.svg#2eb9a020d90588d099da01ff1a93c338") format('svg');font-style:normal;font-weight:700}@font-face{font-family:'Montserrat Light';src:url("../fonts/Montserrat-Light.eot");src:url("../fonts/Montserrat-Light.eot?#iefix") format('embedded-opentype'),url("../fonts/Montserrat-Light.woff") format('woff'),url("../fonts/Montserrat-Light.ttf") format('truetype'),url("../fonts/Montserrat-Light.svg#c152625b71562a7bb7b752375273b2d5") format('svg');font-style:normal;font-weight:200}@font-face{font-family:'Montserrat Semi Bold';src:url("../fonts/Montserrat-SemiBold.eot");src:url("../fonts/Montserrat-SemiBold.eot?#iefix") format('embedded-opentype'),url("../fonts/Montserrat-SemiBold.woff") format('woff'),url("../fonts/Montserrat-SemiBold.ttf") format('truetype'),url("../fonts/Montserrat-SemiBold.svg#1ff0c6908268c6b66905273d3627c4c9") format('svg');font-style:normal;font-weight:700}@font-face{font-family:'Montserrat Ultra Light';src:url("../fonts/Montserrat-UltraLight.eot");src:url("../fonts/Montserrat-UltraLight.eot?#iefix") format('embedded-opentype'),url("../fonts/Montserrat-UltraLight.woff") format('woff'),url("../fonts/Montserrat-UltraLight.ttf") format('truetype'),url("../fonts/Montserrat-UltraLight.svg#565d3dca80d751a268e2c36476c681bd") format('svg');font-style:normal;font-weight:200}body{background:#000;font-family:'Montserrat',sans-serif;font-size:16px}a{color:#d11a1a;text-decoration:none;cursor:pointer;}a:hover{text-decoration:none}.main{padding:0 0 0 300px;clear:both}.main.fullscreen{padding:0}.is-exiting .work,.is-exiting .project{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;-ms-animation-name:fadeOutLeft;animation-name:fadeOutLeft}.content-container{background-color:#d7d7d7;padding:25px;}@media (max-width:810px){.content-container{padding:5px}}@media (min-width:810px){.desktop{display:block}.mobile{display:none !important}}@media (max-width:810px){.desktop{display:none !important}.mobile{display:block}}@media (min-width:810px){.nav{color:#fff;background:#000;position:absolute;z-index:999;top:0;left:0;width:300px;height:100vh}.nav--logo{background:#d11a1a;text-align:center;padding:40px 0;-webkit-backface-visibility:hidden;-webkit-transform:scale(1)}.nav--links{padding:0;width:100%;font-size:1.13em;}.nav--links--link{background:#3d3d3d;text-align:right;list-style:none;width:300px;-webkit-transition:all 0.66s;-moz-transition:all 0.66s;-o-transition:all 0.66s;-ms-transition:all 0.66s;transition:all 0.66s;padding:1.25em 0;}.nav--links--link span{margin-right:1em}.nav--links--link.active{background:#d7d7d7}.nav--links--link:last-child:hover{border-bottom:1px solid #515151}.nav--links--link:hover{background:#d7d7d7}.nav--links--link-anchor{font-family:'Montserrat';font-size:18px;text-transform:uppercase;-webkit-transition:all 0.66s;-moz-transition:all 0.66s;-o-transition:all 0.66s;-ms-transition:all 0.66s;transition:all 0.66s}.nav--contact{position:absolute;bottom:0;border-top:1px solid #515151;font-size:1em;width:100%;padding:1em 0 .5em 0;}.nav--contact-item{color:#d11a1a;list-style:none;margin-bottom:1.25em;margin-right:1.4375em;font-family:'Montserrat Light';text-align:right;}.nav--contact-item i{margin-left:12px}.nav--contact-item a{color:#d11a1a}.nav--contact-item .fa-phone{padding-left:.375em}.nav--contact-item .fa-envelope{padding-left:.1875em}.nav--contact-item .fa-home{display:block;float:right;font-size:1.25em}}@media (max-width:810px){.nav{display:none !important;visibility:none !important}}@media (min-width:810px){.nav-mobile{display:none !important;visibility:none !important}}@media (max-width:810px){.main{padding:0 !important}}.nav-mobile{background-color:#d7d7d7;height:60px;padding-bottom:10px;-webkit-backface-visibility:hidden;z-index:999;}.nav-mobile--logo{height:100%;background:#d11a1a;float:left;padding:5px;}.nav-mobile--logo-img{height:100%}.nav-mobile--links{display:none;position:absolute;background-color:#3d3d3d;z-index:99;width:100%;left:0;margin-top:12px;text-align:right;margin-left:70px;font-size:25px;}.nav-mobile--links--link{padding-right:165px;padding-top:15px;padding-bottom:15px;}.nav-mobile--links--link:last-child{border-top:1px solid #515151}.nav-mobile--menu{float:right;padding:13px 18px 12px 18px;background-color:#3d3d3d;}.nav-mobile--menu-icon{font-size:45px;color:#d11a1a}.nav-mobile--page-title{font-size:25px;color:#d11a1a;text-transform:uppercase;float:right;line-height:70px;margin-right:20px}html[data-useragent*='Trident'] .work--projects--tile:hover .work--projects--tile-img{opacity:.3;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=30)}.work--projects{padding:0;}@media (max-width:810px){.work--projects{padding-bottom:70px}}.work--projects--tile{width:100%;float:left;position:relative;text-align:center;list-style:none;cursor:pointer;background-color:#d11a1a;}.work--projects--tile .work--projects--tile-img{-webkit-filter:grayscale(75%);filter:grayscale(75%)}@media (min-width:810px){.work--projects--tile{width:50%}}@media (min-width:1215px){.work--projects--tile{width:33.333333333333336%}}@media (min-width:1620px){.work--projects--tile{width:25%}}@media (min-width:2025px){.work--projects--tile{width:20%}}.work--projects--tile:hover .work--projects--tile-title,.work--projects--tile:hover .work--projects--tile-subtitle,.work--projects--tile:hover .arrow-right{display:block}.work--projects--tile:hover .work--projects--tile-subtitle-container{display:inline-block}.work--projects--tile:hover .work--projects--tile-img{mix-blend-mode:darken}.work--projects--tile-img{width:100%;height:100%;position:absolute;top:0;left:0}.work--projects--tile-title{margin-top:17%;font-size:24px;font-family:'Montserrat Light';line-height:1.5em}.work--projects--tile-subtitle{font-family:'Montserrat Light';font-size:12px;}.work--projects--tile-subtitle-container{border-bottom:1px solid #fff;padding-bottom:.9375em;mix-blend-mode:hard-light}.work--projects--tile-title,.work--projects--tile-subtitle,.work--projects--tile-subtitle-container,.work--projects--tile .arrow-right{color:#fff;position:relative;display:none}.work--projects--tile .arrow-right{padding-top:15px;margin:0 auto}@media (max-width:810px){.fp-section .project--brief,.fp-section .detail--brief{padding-bottom:9.375em}}.project,.detail{background:rgba(0,0,0,0.15);color:#fff;height:100%;-webkit-box-shadow:1.5px 2.6px 6px rgba(0,0,0,0.35);box-shadow:1.5px 2.6px 6px rgba(0,0,0,0.35);}.project--brief,.detail--brief{background:#fff;color:#000;padding:1.75em;min-height:100vh;position:relative;}.project--brief h2,.detail--brief h2{font-size:1.5em;padding-bottom:1.25em;font-family:'Montserrat Light'}.project--brief p,.detail--brief p{color:#000;font-family:'Montserrat Ultra Light';font-size:18px;font-weight:200;line-height:30px}.project--brief-img,.detail--brief-img{width:100%;margin-bottom:1.875em}.project--brief-back,.detail--brief-back{position:absolute;top:0;left:0;z-index:1;}@media (max-width:810px){.project--brief-back img,.detail--brief-back img{width:5.625em}}.project--brief--txt,.detail--brief--txt,.project--brief--info,.detail--brief--info{float:left;width:50%;}@media (max-width:810px){.project--brief--txt,.detail--brief--txt,.project--brief--info,.detail--brief--info{float:none;width:100%}}.project--brief--txt--img,.detail--brief--txt--img,.project--brief--info--img,.detail--brief--info--img{width:100%;padding-bottom:1.25em}@media (min-width:810px){.project--brief--txt p,.detail--brief--txt p{padding-right:10px}}.project--brief--info,.detail--brief--info{margin:0;}.project--brief--info-container,.detail--brief--info-container{padding-left:1.875em;padding-bottom:2.1875em;border-left:1px solid #d7d7d7;}@media (max-width:810px){.project--brief--info-container,.detail--brief--info-container{padding-top:20px;padding-left:0;padding-bottom:0;border:none}}.project--brief--info--stat,.detail--brief--info--stat{font-family:'Montserrat Ultra Light';list-style:none;padding-bottom:.9375em;padding-top:.9375em;border-bottom:1px solid #d7d7d7;}.project--brief--info--stat:first-child,.detail--brief--info--stat:first-child{padding-top:0}.project--brief--info--stat:last-child,.detail--brief--info--stat:last-child{padding-bottom:0;border-bottom:none}.project--brief--info--stat-icon,.detail--brief--info--stat-icon{vertical-align:middle;padding-right:.9375em}.project--brief--info--stat a,.detail--brief--info--stat a{color:#d11a1a;text-decoration:underline;cursor:pointer;}.project--brief--info--stat a:hover,.detail--brief--info--stat a:hover{text-decoration:underline}.project--brief--info--list,.detail--brief--info--list{list-style-type:disc;padding-left:1.25em;}.project--brief--info--list li,.detail--brief--info--list li{padding-bottom:.625em;color:#000;font-family:'Montserrat Ultra Light'}.player{position:relative;}.player--play-btn{position:absolute;width:12%;margin:0 auto;left:0;right:0;margin:12% auto 0 auto;cursor:pointer}.player--video{display:none}.slide .content-container{display:none}.searchbar{background:#d11a1a;position:absolute;top:0;right:0;width:600px;height:90px;z-index:1000;padding:1em;}.searchbar--input{border-radius:1.5em;width:500px;height:3em;margin-right:1em;padding:0 1em}.searchbar i{color:#fff;font-size:2em}.intro .video-logo{position:absolute;top:0;left:0;height:100%;z-index:1000;-webkit-backface-visibility:hidden;-webkit-transform:scale(1);}@media (max-width:810px){.intro .video-logo{left:-90px}}.intro .arrow-container{position:absolute;bottom:1.25em;width:100%;-webkit-backface-visibility:hidden;-webkit-transform:scale(1);}.intro .arrow-container .scroll-arrow{opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);display:block;margin:0 auto}.intro .video-animation{position:absolute;top:50%;left:50%;min-width:100%;min-height:100%;width:auto;height:auto;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-o-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.intro--mobile-contact{position:absolute;top:0;right:0;padding:10px;text-align:left;font-family:"Montserrat Light";}.intro--mobile-contact--item{color:#d11a1a;padding-bottom:10px}.contact--map{position:fixed;top:0;left:0;min-width:100%;min-height:100%}/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hc3NldHMvc3R5bC9tYWluLnN0eWwiLCIuLi8uLi8uLi9zcmMvYXNzZXRzL3N0eWwvZm9udHMuc3R5bCIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi92ZW5kb3Iuc3R5bCIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9mbGV4LnN0eWwiLCIuLi8uLi8uLi9zcmMvYXNzZXRzL3N0eWwvbmF2LnN0eWwiLCIuLi8uLi8uLi9zcmMvYXNzZXRzL3N0eWwvd29yay5zdHlsIiwiLi4vLi4vLi4vc3JjL2Fzc2V0cy9zdHlsL21peGlucy5zdHlsIiwiLi4vLi4vLi4vc3JjL2Fzc2V0cy9zdHlsL3Byb2plY3Quc3R5bCIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXIuc3R5bCIsIi4uLy4uLy4uL3NyYy9hc3NldHMvc3R5bC9zZWFyY2hiYXIuc3R5bCIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXItcmFkaXVzLnN0eWwiLCIuLi8uLi8uLi9zcmMvYXNzZXRzL3N0eWwvaW50cm8uc3R5bCIsIi4uLy4uLy4uL3NyYy9hc3NldHMvc3R5bC9jb250YWN0LnN0eWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVVE7QUFFQTtBQ1pSLFdBQ0UsWUFBYSxZQUNiLElBQW9ELGlEQUNwRCxJQUF3RixzV0FLeEYsWUFBYSxPQUNiLFdBQVksT0FHZCxXQUNFLFlBQWEsYUFDYixJQUF1QyxvQ0FBRyxBQUMxQyxJQUEyRSxxUUFHb00sQUFDL1EsV0FBYyxPQUNkLFlBQWMsSUFHaEIsV0FDRSxZQUFhLG1CQUNiLElBQXdDLHFDQUFHLEFBQzNDLElBQTRFLHlRQUd1TSxBQUNuUixXQUFjLE9BQ2QsWUFBYyxJQUdoQixXQUNFLFlBQWEsdUJBQ2IsSUFBMkMsd0NBQUcsQUFDOUMsSUFBK0UscVJBR2dOLEFBQy9SLFdBQWMsT0FDZCxZQUFjLElBR2hCLFdBQ0UsWUFBYSx5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LE9BQ1Qsd0JBQ0MsU0FBUyxTQUNULElBQUksSUFDSixLQUFLLElBQ0wsVUFBVSxLQUNWLFdBQVcsS0FDWCxNQUFNLEtBQ04sT0FBTyxLVGNTLGtCQUFHLGtDQUFILGVBQUcsa0NBQUgsYUFBRyxrQ0FBSCxjQUFHLGtDQVJOLFVBQUcsa0NTSGhCLHVCQUNDLFNBQVMsU0FDVCxJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsS0FDUixXQUFXLEtBQ1gsWUFBWSxvQkFDWiw2QkFDQyxNQUFNLFFBQ04sZUFBZSxLQ3hDbEIsY0FDQyxTQUFVLE1BQ1YsSUFBSyxFQUNMLEtBQU0sRUFFTixBQUNBLFVBQVcsS0FDWCxXQUFZIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogRmx1aWRpdHkgQ1NTMyBMaWIgKGNhbiBpbXBvcnQgYWxsIG9yIGp1c3QgYSBwb3J0aW9uKSAqL1xuLypAaW1wb3J0ICdmbHVpZGl0eScqL1xuLypAaW1wb3J0IFwiZmx1aWRpdHkvbm9ybWFsaXplXCIqL1xuLypAaW1wb3J0IFwiZmx1aWRpdHkvc2VtYW50aWMtZ3JpZFwiKi9cblxuLyogTmliIENTUzMgTGliIChjYW4gaW1wb3J0IGFsbCBvciBqdXN0IGEgcG9ydGlvbikgKi9cbkBpbXBvcnQgJ25pYidcbi8qQGltcG9ydCAnbmliL2dyYWRpZW50cycqL1xuLypAaW1wb3J0ICduaWIvYnV0dG9ucycqL1xuXG5AaW1wb3J0ICdhbmltYXRlLmNzcydcblxuQGltcG9ydCAncmVzZXQuY3NzJ1xuXG4vKiBNYWluIFN0eWxpbmcgQ29tcG9uZW50cyAqL1xuQHJlcXVpcmUgJ21peGlucydcbkByZXF1aXJlICdwYWxldHRlJ1xuQHJlcXVpcmUgJ2ZvbnRzJ1xuXG5ib2R5XG5cdGJhY2tncm91bmQgYmxhY2tcblx0Zm9udC1mYW1pbHkgJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmXG5cdGZvbnQtc2l6ZSAxNnB4XG5cdFxuYVxuXHRjb2xvciByZWRcblx0dGV4dC1kZWNvcmF0aW9uIG5vbmVcblx0Y3Vyc29yIHBvaW50ZXJcblx0Jjpob3ZlclxuXHRcdHRleHQtZGVjb3JhdGlvbiBub25lXG5cdFx0XG4ubWFpblxuXHRwYWRkaW5nIDAgMCAwIDMwMHB4XG5cdGNsZWFyIGJvdGhcblx0XG4ubWFpbi5mdWxsc2NyZWVuXG5cdHBhZGRpbmcgMFxuXHRcbi5pcy1leGl0aW5nIFxuXHQud29yaywgLnByb2plY3Rcblx0XHRhbmltYXRpb24tbmFtZSBmYWRlT3V0TGVmdFxuXHRcbi5jb250ZW50LWNvbnRhaW5lclxuXHRiYWNrZ3JvdW5kLWNvbG9yIGdyZXlfbGlnaHRcblx0cGFkZGluZyAyNXB4XG5cdEBtZWRpYSAobWF4LXdpZHRoOiA4MTBweClcblx0XHRwYWRkaW5nIDVweFxuXG5AbWVkaWEgKG1pbi13aWR0aDogODEwcHgpXG5cdC5kZXNrdG9wXG5cdFx0ZGlzcGxheSBibG9ja1xuXHQubW9iaWxlXG5cdFx0ZGlzcGxheSBub25lICFpbXBvcnRhbnRcbkBtZWRpYSAobWF4LXdpZHRoOiA4MTBweClcblx0LmRlc2t0b3BcdFxuXHRcdGRpc3BsYXkgbm9uZSAhaW1wb3J0YW50XG5cdC5tb2JpbGVcblx0XHRkaXNwbGF5IGJsb2NrXG5cbkByZXF1aXJlICduYXYnXG5AcmVxdWlyZSAnd29yaydcbkByZXF1aXJlICdwcm9qZWN0J1xuQHJlcXVpcmUgJ3NlYXJjaGJhcidcbkByZXF1aXJlICdpbnRybydcbkByZXF1aXJlICdjb250YWN0JyIsIkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ2hhbGZsaW5ncyc7XG4gIHNyYzogdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdCcpO1xuICBzcmM6IHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci4yLndvZmYnKSBmb3JtYXQoJ3dvZmYyJyksXG4gICAgdXJsKCcuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSxcbiAgICB1cmwoJy4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIudHRmJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgIHVybCgnLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcjaGFsZmxpbmdzJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNb250c2VycmF0JztcbiAgc3JjOiB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtQm9sZC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICBzcmM6IHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1Cb2xkLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIC8qIElFNi1JRTggKi9cbiAgICAgICB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtQm9sZC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksIC8qIE1vZGVybiBCcm93c2VycyAqL1xuICAgICAgIHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1Cb2xkLnR0ZicpICBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG4gICAgICAgdXJsKCcuLi9mb250cy9Nb250c2VycmF0LUJvbGQuc3ZnIzJlYjlhMDIwZDkwNTg4ZDA5OWRhMDFmZjFhOTNjMzM4JykgZm9ybWF0KCdzdmcnKTsgLyogTGVnYWN5IGlPUyAqL1xuICBmb250LXN0eWxlOiAgIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6ICA3MDA7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ01vbnRzZXJyYXQgTGlnaHQnO1xuICBzcmM6IHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1MaWdodC5lb3QnKTsgLyogSUU5IENvbXBhdCBNb2RlcyAqL1xuICBzcmM6IHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1MaWdodC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLCAvKiBJRTYtSUU4ICovXG4gICAgICAgdXJsKCcuLi9mb250cy9Nb250c2VycmF0LUxpZ2h0LndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgICAgdXJsKCcuLi9mb250cy9Nb250c2VycmF0LUxpZ2h0LnR0ZicpICBmb3JtYXQoJ3RydWV0eXBlJyksIC8qIFNhZmFyaSwgQW5kcm9pZCwgaU9TICovXG4gICAgICAgdXJsKCcuLi9mb250cy9Nb250c2VycmF0LUxpZ2h0LnN2ZyNjMTUyNjI1YjcxNTYyYTdiYjdiNzUyMzc1MjczYjJkNScpIGZvcm1hdCgnc3ZnJyk7IC8qIExlZ2FjeSBpT1MgKi9cbiAgZm9udC1zdHlsZTogICBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiAgMjAwO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdNb250c2VycmF0IFNlbWkgQm9sZCc7XG4gIHNyYzogdXJsKCcuLi9mb250cy9Nb250c2VycmF0LVNlbWlCb2xkLmVvdCcpOyAvKiBJRTkgQ29tcGF0IE1vZGVzICovXG4gIHNyYzogdXJsKCcuLi9mb250cy9Nb250c2VycmF0LVNlbWlCb2xkLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksIC8qIElFNi1JRTggKi9cbiAgICAgICB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtU2VtaUJvbGQud29mZicpIGZvcm1hdCgnd29mZicpLCAvKiBNb2Rlcm4gQnJvd3NlcnMgKi9cbiAgICAgICB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtU2VtaUJvbGQudHRmJykgIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICAgICB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtU2VtaUJvbGQuc3ZnIzFmZjBjNjkwODI2OGM2YjY2OTA1MjczZDM2MjdjNGM5JykgZm9ybWF0KCdzdmcnKTsgLyogTGVnYWN5IGlPUyAqL1xuICBmb250LXN0eWxlOiAgIG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6ICA3MDA7XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ01vbnRzZXJyYXQgVWx0cmEgTGlnaHQnO1xuICBzcmM6IHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1VbHRyYUxpZ2h0LmVvdCcpOyAvKiBJRTkgQ29tcGF0IE1vZGVzICovXG4gIHNyYzogdXJsKCcuLi9mb250cy9Nb250c2VycmF0LVVsdHJhTGlnaHQuZW90PyNpZWZpeCcpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSwgLyogSUU2LUlFOCAqL1xuICAgICAgIHVybCgnLi4vZm9udHMvTW9udHNlcnJhdC1VbHRyYUxpZ2h0LndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgLyogTW9kZXJuIEJyb3dzZXJzICovXG4gICAgICAgdXJsKCcuLi9mb250cy9Nb250c2VycmF0LVVsdHJhTGlnaHQudHRmJykgIGZvcm1hdCgndHJ1ZXR5cGUnKSwgLyogU2FmYXJpLCBBbmRyb2lkLCBpT1MgKi9cbiAgICAgICB1cmwoJy4uL2ZvbnRzL01vbnRzZXJyYXQtVWx0cmFMaWdodC5zdmcjNTY1ZDNkY2E4MGQ3NTFhMjY4ZTJjMzY0NzZjNjgxYmQnKSBmb3JtYXQoJ3N2ZycpOyAvKiBMZWdhY3kgaU9TICovXG4gIGZvbnQtc3R5bGU6ICAgbm9ybWFsO1xuICBmb250LXdlaWdodDogIDIwMDtcbn1cblxuIiwidXNlKCcuLi9ub2Rlcy92ZW5kb3ItaGVscGVycy5qcycpXG5AaW1wb3J0ICdjb25maWcnXG5cbi8qXG4gKiBBbGlhcyBcIm5vd3JhcFwiIGFzIFwibm8td3JhcFwiLlxuICovXG5cbm5vLXdyYXAgPSB1bnF1b3RlKCdub3dyYXAnKVxuXG4vKlxuICogSGVscGVyIHRvIGZpbmQgb3V0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB3aWR0aFxuICovXG5cbmlzLXdpZHRoKHZhbClcbiAgaWYgYXV0byA9PSB2YWxcbiAgICByZXR1cm4gdHJ1ZVxuICBlbHNlIGlmIHZhbCAmJiAndW5pdCcgPT0gdHlwZSh2YWwpXG4gICAgLy8gU3R5bHVzIGRvZXMgbm90IHNob3J0IGNpcmN1aXQgc28gd2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMgYSBkaXN0aW5jdFxuICAgIC8vIG9wZXJhdGlvbiB0byBwcmV2ZW50IGVycm9yc1xuICAgIHJldHVybiAnJyAhPSB1bml0KHZhbClcbiAgcmV0dXJuIGZhbHNlXG5cbi8qXG4gKiBWZW5kb3Igc3VwcG9ydCBmb3IgdGhlIGdpdmVuIHByb3AgLyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyB0aGVcbiAqIG9ubHkgcHJlZml4ZXMgdG8gdXRpbGl6ZSwgb3IgdGhvc2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblxudmVuZG9yKHByb3AsIGFyZ3MsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsLCB2ZW5kb3ItcHJvcGVydHkgPSB0cnVlKVxuICBuZWVkX25vcm1hbGl6ZSA9ICF2ZW5kb3ItcHJvcGVydHkgb3IgcHJvcCBpbiAoJ3RyYW5zaXRpb24nICd0cmFuc2l0aW9uLXByb3BlcnR5JyAnYm9yZGVyLWltYWdlJyAnYm9yZGVyLWltYWdlLXNsaWNlJylcbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKVxuICAgICAgaWYgb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpKVxuICAgICAgICBlbHNlXG4gICAgICAgICAge3Byb3B9OiBhcmdzXG4gICAgICBlbHNlXG4gICAgICAgIG5ld3Byb3AgPSBwcm9wXG4gICAgICAgIG5ld3Byb3AgPSAnLScgKyBwcmVmaXggKyAnLScgKyBwcm9wIGlmIHZlbmRvci1wcm9wZXJ0eVxuXG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge25ld3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpLHByZWZpeClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtuZXdwcm9wfTogYXJnc1xuLypcbiAqIFZlbmRvcml6ZSB0aGUgZ2l2ZW4gdmFsdWUuXG4gKi9cblxudmVuZG9yLXZhbHVlKGFyZywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwpXG4gIHByb3AgPSBjdXJyZW50LXByb3BlcnR5WzBdXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSkgb3Igb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICBhZGQtcHJvcGVydHkocHJvcCwgJy0lcy0lcycgJSAocHJlZml4IGFyZykpXG4gIGFyZ1xuXG4vKlxuICogVmVuZG9yIFwiYm94LXNoYWRvd1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXNoYWRvdygpXG4gIHZlbmRvcignYm94LXNoYWRvdycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidXNlci1zZWxlY3RcIiBzdXBwb3J0LlxuICovXG5cbnVzZXItc2VsZWN0KClcbiAgdmVuZG9yKCd1c2VyLXNlbGVjdCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWNvdW50KClcbiAgdmVuZG9yKCdjb2x1bW4tY291bnQnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZ2FwXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZ2FwKClcbiAgdmVuZG9yKCdjb2x1bW4tZ2FwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLWNvbG9yXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1jb2xvcigpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtY29sb3InLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtd2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXN0eWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1zdHlsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4td2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tc3BhblwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXNwYW4oKVxuICB2ZW5kb3IoJ2NvbHVtbi1zcGFuJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZmlsbFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWZpbGwoKVxuICB2ZW5kb3IoJ2NvbHVtbi1maWxsJywgYXJndW1lbnRzLCBvbmx5OiBtb3opXG5cbi8qXG4gKiBMZWdhY3kgc3ludGF4IHN1cHBvcnQgZm9yIGJhY2tncm91bmQtY2xpcCBhbmQgYmFja2dyb3VuZC1vcmlnaW5cbiAqL1xuXG5sZWdhY3ktYmctdmFsdWVzKHByb3BlcnR5LCBhcmdzKVxuICBsZWdhY3lfYXJncyA9ICgpXG4gIGltcG9ydGFuY2UgPSB1bnF1b3RlKCcnKVxuICBmb3Igc3ViYXJncyBpbiBhcmdzXG4gICAgZm9yIGFyZyBpbiBzdWJhcmdzXG4gICAgICBpZiBhcmcgaW4gKGJvcmRlci1ib3ggcGFkZGluZy1ib3ggY29udGVudC1ib3gpXG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2JvcmRlcicpICBpZiBhcmcgPT0gYm9yZGVyLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdwYWRkaW5nJykgaWYgYXJnID09IHBhZGRpbmctYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2NvbnRlbnQnKSBpZiBhcmcgPT0gY29udGVudC1ib3hcbiAgICAgIGlmIGFyZyAhPSAnIWltcG9ydGFudCdcbiAgICAgICAgcHVzaChsZWdhY3lfYXJncyxhcmcpXG4gICAgICBlbHNlXG4gICAgICAgIGltcG9ydGFuY2UgPSAhaW1wb3J0YW50XG4gIHZlbmRvcihwcm9wZXJ0eSwgdW5xdW90ZShqb2luKCcsICcsbGVnYWN5X2FyZ3MpKSBpbXBvcnRhbmNlLCBvbmx5OiBtb3ogd2Via2l0KVxuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1jbGlwXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLWNsaXAoKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gdGV4dFxuICAgIHZlbmRvcignYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG4gIGVsc2VcbiAgICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMpXG4gICAgYmFja2dyb3VuZC1jbGlwOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLW9yaWdpbigpXG4gIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtb3JpZ2luJywgYXJndW1lbnRzKVxuICBiYWNrZ3JvdW5kLW9yaWdpbjogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtc2l6ZSgpXG4gIHZlbmRvcignYmFja2dyb3VuZC1zaXplJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8qXG4gKiBWZW5kb3IgXCJkaXNwbGF5OiBmbGV4XCIgc3VwcG9ydCB3aXRoIGZhbGxiYWNrIHRvIG9ic29sZXRlIHZlcnNpb25zLlxuICovXG5cbmZsZXgtdmVyc2lvbiA/PSBib3ggZmxleFxuXG4vL1xuLy8gMS4gRGlzcGxheSB2YWx1ZXNcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG5kaXNwbGF5KHR5cGUsIGFyZ3MuLi4pXG4gIGlmIGZsZXggPT0gdHlwZSB8fCBpbmxpbmUtZmxleCA9PSB0eXBlXG4gICAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgICAgaWYgZmxleCA9PSB0eXBlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94IGFyZ3NcbiAgICAgICAgZGlzcGxheTogdmVuZG9yLXZhbHVlKGJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgICAgZWxzZVxuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoaW5saW5lLWJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpIC8vIG92ZXJ3cml0ZXMgb2xkIHdlYmtpdFxuICBlbHNlXG4gICAgZGlzcGxheTogYXJndW1lbnRzXG5cbi8qXG4gKiBOZXcgc3ludGF4IGZvciBicm93c2VycyBsaWtlIEdvb2dsZSBDaHJvbWUuXG4gKiBQbHVzIGEgdHJhbnNsYXRpb24gdG8gdGhlIG9sZCBzeW50YXgsIGlmIHBvc3NpYmxlLlxuICovXG5cblxuLy9cbi8vIDUuIE9yZGVyaW5nIGFuZCBPcmllbnRhdGlvblxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI29yZGVyaW5nLWFuZC1vcmllbnRhdGlvblxuLy9cbi1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBpZiByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCByZXZlcnNlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gICAgaWYgcm93ID09IGRpcmVjdGlvbiB8fCByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LW9yaWVudCcsIGhvcml6b250YWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBjb2x1bW4gPT0gZGlyZWN0aW9uIHx8IGNvbHVtbi1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgdmVydGljYWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbi1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICAvLyBXQVJOOiB3cmFwLXJldmVyc2UgZG9lcyBub3QgaGF2ZSBhIGJveCBlcXVpdmFsZW50LiBUaGlzIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBtYW5uZXJzXG4gICAgLy8gICAgb24gYm94IHZzLiBmbGV4IHZhbHVlcy5cbiAgICBpZiAnd3JhcCcgPT0gdmFsdWUgfHwgd3JhcC1yZXZlcnNlID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIG11bHRpcGxlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuICAgIGVsc2UgaWYgbm93cmFwID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIHNpbmdsZSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuZmxleC1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC13cmFwKHZhbHVlKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKHZhbHVlKVxuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXdyYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC1mbG93KClcbiAgLy8gb2Jzb2xldGVcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1sxXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMF0pXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAoYXJndW1lbnRzWzFdKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1mbG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxub3JkZXIoKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtb3JkaW5hbC1ncm91cCcsIGFyZ3VtZW50cywgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IG1zKVxuICAgIHZlbmRvcignb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuXG4vL1xuLy8gNy4gRmxleGliaWxpdHlcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4aWJpbGl0eVxuLy9cbmZsZXgtZ3Jvdyhncm93dGgpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgZ3Jvd3RoKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1ncm93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtYmFzaXMoKVxuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1iYXNpcycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4LXNocmluaygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXNocmluaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4KGdyb3d0aClcblxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgc2hyaW5rID0gMVxuXG4gICAgaWYgbm9uZSA9PSBncm93dGggfHwgaW5pdGlhbCA9PSBncm93dGhcbiAgICAgIC8vIFdlbGwga25vd24gdmFsdWVzXG4gICAgICBzaHJpbmsgPSAwIGlmIG5vbmUgPT0gZ3Jvd3RoXG4gICAgICBncm93dGggPSAwXG4gICAgZWxzZSBpZiBpcy13aWR0aChncm93dGgpID09IHRydWVcbiAgICAgIC8vIEJhc2lzIGlzIGRlZmluZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlclxuICAgICAgZ3Jvd3RoID0gYXJndW1lbnRzWzFdIHx8IDBcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1syXSBpZiAzIDw9IGxlbmd0aChhcmd1bWVudHMpXG4gICAgZWxzZSBpZiBhcmd1bWVudHNbMV0gJiYgaXMtd2lkdGgoYXJndW1lbnRzWzFdKSA9PSBmYWxzZVxuICAgICAgLy8gR3Jvd3RoIGlzIGZpcnN0IGFuZCBzaHJpbmsgaXMgc2Vjb25kXG4gICAgICBzaHJpbmsgPSBhcmd1bWVudHNbMV1cblxuICAgIC8vIFNpbmNlIHdlIGNhbid0IG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ3Jvd2luZyBhbmQgc2hyaW5raW5nIGluIHRoZSBib3ggbW9kZWwsIHRha2VcbiAgICAvLyB0aGUgb25lIHRoYXQgcHJvdmlkZXMgdGhlIG1vc3QgZmxleGliaWxpdHkuXG4gICAgdmVuZG9yKCdib3gtZmxleCcsIG1heChncm93dGgsIHNocmluayksIGlnbm9yZTogbXMpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxuLy8gY29udmVydHMgdGhlIGp1c3RpZmljYXRpb24gYWxpZ25tZW50XG4tY29udmVydC1qdXN0aWZ5KGFsaWduKVxuICBpZiBmbGV4LXN0YXJ0ID09IGFsaWduXG4gICAgcmV0dXJuIHN0YXJ0XG4gIGVsc2UgaWYgZmxleC1lbmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZW5kXG4gIGVsc2UgaWYgc3BhY2UtYXJvdW5kID09IGFsaWduXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGVcbiAgZWxzZSBpZiBzcGFjZS1iZXR3ZWVuID09IGFsaWduXG4gICAgcmV0dXJuIGp1c3RpZnlcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG4vL1xuLy8gOC4gQWxpZ25tZW50XG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jYWxpZ25tZW50XG4vL1xuanVzdGlmeS1jb250ZW50KGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignanVzdGlmeS1jb250ZW50JywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tY29udGVudChhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3IgYWRqdXN0bWVudCBoZXJlXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWxpbmUtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vLyBjb252ZXJ0cyBhbGlnbm1lbnQgZnJvbSAnZmxleCcgdG8gbm9ybWFsIHZhbHVlXG4tY29udmVydC1hbGlnbm1lbnQoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG5hbGlnbi1pdGVtcyhhbGlnbilcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWl0ZW1zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmFsaWduLXNlbGYoYWxpZ24pXG4gIC8vIFdBUk46IE9ic29sZXRlIHNwZWMgZG9lcyBub3QgYWxsb3cgZm9yIG92ZXJyaWRpbmcgYWxpZ25tZW50IG9uIGluZGl2aWR1YWwgaXRlbXMuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdhbGlnbi1zZWxmJywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB2ZW5kb3IoJ2ZsZXgtaXRlbS1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuIiwiLm5hdlxuXHRAbWVkaWEgKG1pbi13aWR0aDogODEwcHgpXG5cdFx0Y29sb3Igd2hpdGVcblx0XHRiYWNrZ3JvdW5kIGJsYWNrXG5cdFx0cG9zaXRpb24gYWJzb2x1dGVcblx0XHR6LWluZGV4IDk5OVxuXHRcdHRvcCAwXG5cdFx0bGVmdCAwXG5cdFx0d2lkdGggMzAwcHhcblx0XHRoZWlnaHQgMTAwdmhcblx0XHQmLS1sb2dvXG5cdFx0XHRiYWNrZ3JvdW5kIHJlZFxuXHRcdFx0dGV4dC1hbGlnbiBjZW50ZXJcblx0XHRcdHBhZGRpbmcgNDBweCAwXG5cdFx0XHQtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHkgaGlkZGVuIC8vIEZJWCBGT1IgQ0hST01FIENDUzMgYW5pbWF0aW9uIGZsYXNoaW5nIGVsZW1lbnRzXG5cdFx0XHQtd2Via2l0LXRyYW5zZm9ybSBzY2FsZSgxKSAvLyBGSVggRk9SIENIUk9NRSBDQ1MzIGFuaW1hdGlvbiBmbGFzaGluZyBlbGVtZW50c1xuXHRcdCYtLWxpbmtzXG5cdFx0XHRwYWRkaW5nIDBcblx0XHRcdHdpZHRoIDEwMCVcblx0XHRcdGZvbnQtc2l6ZSAxLjEzZW1cblx0XHRcdCYtLWxpbmtcblx0XHRcdFx0YmFja2dyb3VuZCBncmV5XG5cdFx0XHRcdHRleHQtYWxpZ24gcmlnaHRcblx0XHRcdFx0bGlzdC1zdHlsZSBub25lXG5cdFx0XHRcdHdpZHRoIDMwMHB4XG5cdFx0XHRcdHRyYW5zaXRpb24gYWxsIDAuNjZzXG5cdFx0XHRcdHBhZGRpbmcgZW0oMjApIDBcblx0XHRcdFx0c3BhblxuXHRcdFx0XHRcdG1hcmdpbi1yaWdodCAxZW1cblx0XHRcdFx0Ji5hY3RpdmVcblx0XHRcdFx0XHRiYWNrZ3JvdW5kIGdyZXlfbGlnaHRcblx0XHRcdFx0JjpsYXN0LWNoaWxkXG5cdFx0XHRcdFx0Jjpob3ZlclxuXHRcdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbSAxcHggc29saWQgZ3JleV9hbHRcblx0XHRcdFx0Jjpob3ZlclxuXHRcdFx0XHRcdGJhY2tncm91bmQgZ3JleV9saWdodFxuXHRcdFx0XHQmLWFuY2hvclxuXHRcdFx0XHRcdGZvbnQtZmFtaWx5ICdNb250c2VycmF0J1xuXHRcdFx0XHRcdGZvbnQtc2l6ZSAxOHB4XG5cdFx0XHRcdFx0dGV4dC10cmFuc2Zvcm0gdXBwZXJjYXNlXG5cdFx0XHRcdFx0dHJhbnNpdGlvbiBhbGwgMC42NnNcblx0XHQmLS1jb250YWN0XG5cdFx0XHRwb3NpdGlvbiBhYnNvbHV0ZVxuXHRcdFx0Ym90dG9tIDBcblx0XHRcdGJvcmRlci10b3AgMXB4IHNvbGlkIGdyZXlfYWx0XG5cdFx0XHRmb250LXNpemUgMWVtXG5cdFx0XHR3aWR0aCAxMDAlXG5cdFx0XHRwYWRkaW5nIDFlbSAwIDAuNWVtIDBcblx0XHRcdCYtaXRlbVxuXHRcdFx0XHRjb2xvciByZWRcblx0XHRcdFx0bGlzdC1zdHlsZSBub25lXG5cdFx0XHRcdG1hcmdpbi1ib3R0b20gZW0oMjApXG5cdFx0XHRcdG1hcmdpbi1yaWdodCBlbSgyMylcblx0XHRcdFx0Zm9udC1mYW1pbHkgJ01vbnRzZXJyYXQgTGlnaHQnXG5cdFx0XHRcdHRleHQtYWxpZ24gcmlnaHRcblx0XHRcdFx0aVxuXHRcdFx0XHRcdG1hcmdpbi1sZWZ0IDEycHhcblx0XHRcdFx0YVxuXHRcdFx0XHRcdGNvbG9yIHJlZFxuXHRcdFx0XHQuZmEtcGhvbmVcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQgZW0oNilcblx0XHRcdFx0LmZhLWVudmVsb3BlXG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0IGVtKDMpXG5cdFx0XHRcdC5mYS1ob21lXG5cdFx0XHRcdFx0ZGlzcGxheSBibG9ja1xuXHRcdFx0XHRcdGZsb2F0IHJpZ2h0XG5cdFx0XHRcdFx0Zm9udC1zaXplIGVtKDIwKVxuXHRAbWVkaWEgKG1heC13aWR0aDogODEwcHgpXG5cdFx0ZGlzcGxheSBub25lICFpbXBvcnRhbnRcblx0XHR2aXNpYmlsaXR5IG5vbmUgIWltcG9ydGFudFxuXHRcdFxuXHRcdFx0XHRcblx0Ji1tb2JpbGVcblx0XHRAbWVkaWEgKG1pbi13aWR0aDogODEwcHgpXG5cdFx0XHRkaXNwbGF5IG5vbmUgIWltcG9ydGFudFxuXHRcdFx0dmlzaWJpbGl0eSBub25lICFpbXBvcnRhbnRcblx0XHRcdFxuXG5AbWVkaWEgKG1heC13aWR0aDogODEwcHgpXG5cdC5tYWluXG5cdFx0cGFkZGluZyAwICFpbXBvcnRhbnQ7XG5cdFx0XG5cblxuLm5hdi1tb2JpbGVcblx0YmFja2dyb3VuZC1jb2xvciBncmV5X2xpZ2h0XG5cdGhlaWdodCA2MHB4XG5cdHBhZGRpbmctYm90dG9tIDEwcHhcblx0LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5IGhpZGRlbiAvLyBGSVggRk9SIENIUk9NRSBDQ1MzIGFuaW1hdGlvbiBmbGFzaGluZyBlbGVtZW50c1xuXHR6LWluZGV4IDk5OVxuXHQmLS1sb2dvXG5cdFx0aGVpZ2h0IDEwMCVcblx0XHRiYWNrZ3JvdW5kIHJlZFxuXHRcdGZsb2F0IGxlZnRcblx0XHRwYWRkaW5nIDVweFxuXHRcdCYtaW1nXG5cdFx0XHRoZWlnaHQgMTAwJVxuXHQmLS1saW5rc1xuXHRcdGRpc3BsYXkgbm9uZVxuXHRcdHBvc2l0aW9uIGFic29sdXRlXG5cdFx0YmFja2dyb3VuZC1jb2xvciBncmV5XG5cdFx0ei1pbmRleCA5OVxuXHRcdHdpZHRoIDEwMCVcblx0XHRsZWZ0IDBcblx0XHRtYXJnaW4tdG9wIDEycHhcblx0XHR0ZXh0LWFsaWduIHJpZ2h0XG5cdFx0bWFyZ2luLWxlZnQgNzBweFxuXHRcdGZvbnQtc2l6ZSAyNXB4XG5cdFx0Ji0tbGlua1xuXHRcdFx0cGFkZGluZy1yaWdodCAxNjVweFxuXHRcdFx0cGFkZGluZy10b3AgMTVweFxuXHRcdFx0cGFkZGluZy1ib3R0b20gMTVweFxuXHRcdFx0JjpsYXN0LWNoaWxkXG5cdFx0XHRcdGJvcmRlci10b3AgMXB4IHNvbGlkIGdyZXlfYWx0XG5cdFx0XG5cdCYtLW1lbnVcblx0XHRmbG9hdCByaWdodFxuXHRcdHBhZGRpbmcgMTNweCAxOHB4IDEycHggMThweFxuXHRcdGJhY2tncm91bmQtY29sb3IgZ3JleVxuXHRcdCYtaWNvblxuXHRcdFx0Zm9udC1zaXplIDQ1cHhcblx0XHRcdGNvbG9yIHJlZFxuXHQmLS1wYWdlLXRpdGxlXG5cdFx0Zm9udC1zaXplIDI1cHhcblx0XHRjb2xvciByZWRcblx0XHR0ZXh0LXRyYW5zZm9ybSB1cHBlcmNhc2Vcblx0XHRmbG9hdCByaWdodFxuXHRcdGxpbmUtaGVpZ2h0IDcwcHhcblx0XHRtYXJnaW4tcmlnaHQgMjBweFxuXHRcdCIsIi8qTGF5b3V0IGNvbnN0YW50cyovXG5zaW5nbGVUaWxlID0gNDA1cHhcbm5hdlNpemUgPSAzMDBweFxuXG5odG1sW2RhdGEtdXNlcmFnZW50Kj0nVHJpZGVudCddXG4gIC53b3JrXG4gICAgJi0tcHJvamVjdHNcbiAgICAgICYtLXRpbGVcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIC53b3JrLS1wcm9qZWN0cy0tdGlsZS1pbWdcbiAgICAgICAgICAgIG9wYWNpdHkgLjNcbi53b3JrXG4gICYtLXByb2plY3RzXG4gICAgcGFkZGluZyAwXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDgxMHB4KVxuICAgICAgcGFkZGluZy1ib3R0b20gNzBweFxuICAgICYtLXRpbGVcbiAgICAgIHdpZHRoIDEwMCVcbiAgICAgIGZsb2F0IGxlZnRcbiAgICAgIHBvc2l0aW9uIHJlbGF0aXZlXG4gICAgICB0ZXh0LWFsaWduIGNlbnRlclxuICAgICAgbGlzdC1zdHlsZSBub25lXG4gICAgICBjdXJzb3IgcG9pbnRlclxuICAgICAgYmFja2dyb3VuZC1jb2xvciAjZDExYTFhXG4gICAgICAud29yay0tcHJvamVjdHMtLXRpbGUtaW1nXG4gICAgICAgIC13ZWJraXQtZmlsdGVyOiBncmF5c2NhbGUoNzUlKTtcbiAgICAgICAgZmlsdGVyOiBncmF5c2NhbGUoNzUlKTtcbiAgICAgIC8vIGJvcmRlciAxcHggZGFzaGVkIGJsYWNrXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogc2luZ2xlVGlsZSAqIDIpXG4gICAgICAgIHdpZHRoICgxMDAvMiklXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogc2luZ2xlVGlsZSAqIDMpXG4gICAgICAgIHdpZHRoICgxMDAvMyklXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogc2luZ2xlVGlsZSAqIDQpXG4gICAgICAgIHdpZHRoICgxMDAvNCklXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogc2luZ2xlVGlsZSAqIDUpXG4gICAgICAgIHdpZHRoICgxMDAvNSklXG4gICAgICAmOmhvdmVyXG4gICAgICAgIC53b3JrLS1wcm9qZWN0cy0tdGlsZS10aXRsZSwgLndvcmstLXByb2plY3RzLS10aWxlLXN1YnRpdGxlLCAuYXJyb3ctcmlnaHRcbiAgICAgICAgICBkaXNwbGF5IGJsb2NrXG4gICAgICAgIC53b3JrLS1wcm9qZWN0cy0tdGlsZS1zdWJ0aXRsZS1jb250YWluZXJcbiAgICAgICAgICBkaXNwbGF5IGlubGluZS1ibG9ja1xuICAgICAgICAud29yay0tcHJvamVjdHMtLXRpbGUtaW1nXG4gICAgICAgICAgbWl4LWJsZW5kLW1vZGUgZGFya2VuXG4gICAgICAmLWltZ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgICAgcG9zaXRpb24gYWJzb2x1dGVcbiAgICAgICAgdG9wIDBcbiAgICAgICAgbGVmdCAwXG4gICAgICAmLXRpdGxlXG4gICAgICAgIG1hcmdpbi10b3AgMTclXG4gICAgICAgIGZvbnQtc2l6ZSAyNHB4XG4gICAgICAgIGZvbnQtZmFtaWx5ICdNb250c2VycmF0IExpZ2h0J1xuICAgICAgICBsaW5lLWhlaWdodCAxLjVlbVxuICAgICAgJi1zdWJ0aXRsZVxuICAgICAgICBmb250LWZhbWlseSAnTW9udHNlcnJhdCBMaWdodCdcbiAgICAgICAgZm9udC1zaXplIDEycHhcbiAgICAgICAgJi1jb250YWluZXJcbiAgICAgICAgICBib3JkZXItYm90dG9tIDFweCBzb2xpZCB3aGl0ZVxuICAgICAgICAgIHBhZGRpbmctYm90dG9tIGVtKDE1KVxuICAgICAgICAgIG1peC1ibGVuZC1tb2RlIGhhcmQtbGlnaHRcbiAgICAgICYtdGl0bGUsICYtc3VidGl0bGUsICYtc3VidGl0bGUtY29udGFpbmVyLCAuYXJyb3ctcmlnaHRcbiAgICAgICAgY29sb3Igd2hpdGVcbiAgICAgICAgcG9zaXRpb24gcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheSBub25lXG4gICAgICAuYXJyb3ctcmlnaHRcbiAgICAgICAgcGFkZGluZy10b3AgMTVweFxuICAgICAgICBtYXJnaW4gMCBhdXRvXG4gICAgICAgICIsInN1cHBvcnQtZm9yLWllID89IHRydWVcblxub3BhY2l0eShuKVxuICBvcGFjaXR5IG5cbiAgaWYgc3VwcG9ydC1mb3ItaWVcbiAgICBmaWx0ZXIgdW5xdW90ZSgncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JyArIHJvdW5kKG4gKiAxMDApICsgJyknKVxuICAgIFx0XG5lbShwaXhlbHMpXG5cdHJldHVybiBwaXhlbHMvMTZlbSIsIi5mcC1zZWN0aW9uXG4gIC5wcm9qZWN0LCAuZGV0YWlsXG4gICAgJi0tYnJpZWZcbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA4MTBweClcbiAgICAgICAgcGFkZGluZy1ib3R0b20gZW0oMTUwKVxuXG4ucHJvamVjdCwgLmRldGFpbFxuICBiYWNrZ3JvdW5kIHJnYmEoMCwgMCwgMCwgLjE1KVxuICBjb2xvciB3aGl0ZVxuICBoZWlnaHQgMTAwJVxuICBib3gtc2hhZG93IDEuNXB4IDIuNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMzUpXG4gIFxuICAmLS1icmllZlxuICAgIGJhY2tncm91bmQgd2hpdGVcbiAgICBjb2xvciBibGFja1xuICAgIHBhZGRpbmcgZW0oMjgpXG4gICAgbWluLWhlaWdodCAxMDB2aFxuICAgIHBvc2l0aW9uIHJlbGF0aXZlXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZSBlbSgyNClcbiAgICAgIHBhZGRpbmctYm90dG9tIGVtKDIwKVxuICAgICAgZm9udC1mYW1pbHkgJ01vbnRzZXJyYXQgTGlnaHQnXG4gICAgcFxuICAgICAgY29sb3IgYmxhY2tcbiAgICAgIGZvbnQtZmFtaWx5ICdNb250c2VycmF0IFVsdHJhIExpZ2h0J1xuICAgICAgZm9udC1zaXplIDE4cHhcbiAgICAgIGZvbnQtd2VpZ2h0IDIwMFxuICAgICAgbGluZS1oZWlnaHQgMzBweFxuICAgICYtaW1nXG4gICAgICB3aWR0aCAxMDAlXG4gICAgICBtYXJnaW4tYm90dG9tIGVtKDMwKVxuICAgICYtYmFja1xuICAgICAgcG9zaXRpb24gYWJzb2x1dGVcbiAgICAgIHRvcCAwXG4gICAgICBsZWZ0IDBcbiAgICAgIHotaW5kZXggMVxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDgxMHB4KVxuICAgICAgICBpbWdcbiAgICAgICAgICB3aWR0aCBlbSg5MClcbiAgICAmLS10eHQsXG4gICAgJi0taW5mb1xuICAgICAgZmxvYXQgbGVmdFxuICAgICAgd2lkdGggNTAlXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogODEwcHgpXG4gICAgICAgIGZsb2F0IG5vbmVcbiAgICAgICAgd2lkdGggMTAwJVxuICAgICAgJi0taW1nXG4gICAgICAgIHdpZHRoIDEwMCVcbiAgICAgICAgcGFkZGluZy1ib3R0b20gMS4yNWVtXG4gICAgJi0tdHh0XG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogODEwcHgpXG4gICAgICAgIHBcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4XG4gICAgJi0taW5mb1xuICAgICAgbWFyZ2luIDBcbiAgICAgICYtY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmctbGVmdCBlbSgzMClcbiAgICAgICAgcGFkZGluZy1ib3R0b20gZW0oMzUpXG4gICAgICAgIGJvcmRlci1sZWZ0IDFweCBzb2xpZCBncmV5X2xpZ2h0XG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA4MTBweClcbiAgICAgICAgICBwYWRkaW5nLXRvcCAyMHB4XG4gICAgICAgICAgcGFkZGluZy1sZWZ0IDBcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbSAwXG4gICAgICAgICAgYm9yZGVyIG5vbmVcbiAgICAgICYtLXN0YXRcbiAgICAgICAgZm9udC1mYW1pbHkgJ01vbnRzZXJyYXQgVWx0cmEgTGlnaHQnXG4gICAgICAgIGxpc3Qtc3R5bGUgbm9uZVxuICAgICAgICBwYWRkaW5nLWJvdHRvbSBlbSgxNSlcbiAgICAgICAgcGFkZGluZy10b3AgZW0oMTUpXG4gICAgICAgIGJvcmRlci1ib3R0b20gMXB4IHNvbGlkIGdyZXlfbGlnaHRcbiAgICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICAgIHBhZGRpbmctdG9wIDBcbiAgICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgICAgcGFkZGluZy1ib3R0b20gMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20gbm9uZVxuICAgICAgICAmLWljb25cbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbiBtaWRkbGVcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0IGVtKDE1KVxuICAgICAgICBhXG4gICAgICAgICAgY29sb3IgcmVkXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uIHVuZGVybGluZVxuICAgICAgICAgIGN1cnNvciBwb2ludGVyXG4gICAgICAgICAgJjpob3ZlclxuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uIHVuZGVybGluZVxuICAgICAgJi0tbGlzdFxuICAgICAgICBsaXN0LXN0eWxlLXR5cGUgZGlzY1xuICAgICAgICBwYWRkaW5nLWxlZnQgZW0oMjApXG4gICAgICAgIGxpXG4gICAgICAgICAgcGFkZGluZy1ib3R0b20gZW0oMTApXG4gICAgICAgICAgY29sb3IgYmxhY2tcbiAgICAgICAgICBmb250LWZhbWlseSAnTW9udHNlcnJhdCBVbHRyYSBMaWdodCdcblxuLnBsYXllclxuICBwb3NpdGlvbiByZWxhdGl2ZVxuICAmLS1wbGF5LWJ0blxuICAgIHBvc2l0aW9uIGFic29sdXRlXG4gICAgd2lkdGggMTIlXG4gICAgbWFyZ2luIDAgYXV0b1xuICAgIGxlZnQgMFxuICAgIHJpZ2h0IDBcbiAgICBtYXJnaW4gMTIlIGF1dG8gMCBhdXRvXG4gICAgY3Vyc29yIHBvaW50ZXJcbiAgJi0tdmlkZW9cbiAgICBkaXNwbGF5IG5vbmVcbiAgICAgICBcblxuLy8gLmFib3V0XG4vLyAgIC5kZXRhaWwtLWJyaWVmLS10eHRcbi8vICAgICB3aWR0aCAxMDAlXG4vLyAgICAgc3Ryb25nXG4vLyAgICAgICBmb250LWZhbWlseSAnTW9udHNlcnJhdCBMaWdodCdcbi5zbGlkZVxuICAgIC5jb250ZW50XG4gICAgICAmLWNvbnRhaW5lclxuICAgICAgICBkaXNwbGF5IG5vbmUiLCIvKlxuICogYm9yZGVyOiA8Y29sb3I+XG4gKiBib3JkZXI6IC4uLlxuICovXG5cbmJvcmRlcihjb2xvciwgYXJncy4uLilcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IgYXJnc1xuICBlbHNlXG4gICAgYm9yZGVyOiBhcmd1bWVudHNcbiIsIi5zZWFyY2hiYXJcbiAgYmFja2dyb3VuZCByZWRcbiAgcG9zaXRpb24gYWJzb2x1dGVcbiAgdG9wIDBcbiAgcmlnaHQgMFxuICB3aWR0aCA2MDBweFxuICBoZWlnaHQgOTBweFxuICB6LWluZGV4IDEwMDBcbiAgcGFkZGluZyAxZW1cbiAgJi0taW5wdXRcbiAgICBib3JkZXItcmFkaXVzIDEuNWVtXG4gICAgd2lkdGggNTAwcHhcbiAgICBoZWlnaHQgM2VtXG4gICAgbWFyZ2luLXJpZ2h0IDFlbVxuICAgIHBhZGRpbmcgMCAxZW1cbiAgaVxuICAgIGNvbG9yIHdoaXRlXG4gICAgZm9udC1zaXplIDJlbVxuICAgIFxuICAgICIsIi8qXG4gKiBIZWxwZXIgZm9yIGJvcmRlci1yYWRpdXMoKS5cbiAqL1xuXG4tYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gIGlmIGxlbmd0aChwb3MpID09IDNcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8dG9wIHwgYm90dG9tPiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB5ID0gcG9zWzBdXG4gICAgeCA9IHBvc1sxXVxuICAgIC8vIFdlIGRvbid0IHVzZSB2ZW5kb3IgZm9yIGJvZGVyLXJhZGl1cyBhbnltb3JlXG4gICAgLy8gdmVuZG9yKCdib3JkZXItcmFkaXVzLSVzJXMnICUgcG9zLCBwb3NbMl0sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB7J2JvcmRlci0lcy0lcy1yYWRpdXMnICUgcG9zfTogcG9zWzJdIGltcG9ydGFuY2VcbiAgZWxzZSBpZiBwb3NbMF0gaW4gKHRvcCBib3R0b20pXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJvdHRvbT4gPG4+XG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zWzBdIGxlZnQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSByaWdodCBwb3NbMV0sIGltcG9ydGFuY2UpXG4gIGVsc2UgaWYgcG9zWzBdIGluIChsZWZ0IHJpZ2h0KVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDxsZWZ0IHwgcmlnaHQ+IDxuPlxuICAgIHVuc2hpZnQocG9zLCB0b3ApO1xuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICBwb3NbMF0gPSBib3R0b21cbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG5cbi8qXG4gKiBib3JkZXItcmFkaXVzIHN1cHBvcnRpbmcgYXVnbWVudGVkIGJlaGF2aW9yLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIGJvcmRlci1yYWRpdXM6IDJweCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCA1cHggYm90dG9tIDEwcHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHggYm90dG9tIHJpZ2h0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgMTBweCwgYm90dG9tIHJpZ2h0IDVweFxuICpcbiAqL1xuXG5ib3JkZXItcmFkaXVzKClcbiAgcG9zID0gKClcbiAgYXVnbWVudGVkID0gZmFsc2VcbiAgaW1wb3J0YW5jZSA9IGFyZ3VtZW50c1tsZW5ndGgoYXJndW1lbnRzKSAtIDFdID09ICFpbXBvcnRhbnQgPyAhaW1wb3J0YW50IDogdW5xdW90ZSgnJylcblxuICBmb3IgYXJncyBpbiBhcmd1bWVudHNcbiAgICBmb3IgYXJnIGluIGFyZ3NcbiAgICAgIGlmIGFyZyBpcyBhICdpZGVudCdcbiAgICAgICAgYXBwZW5kKHBvcywgYXJnKVxuICAgICAgICBhdWdtZW50ZWQgPSB0cnVlXG4gICAgICBlbHNlXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgaWYgYXVnbWVudGVkXG4gICAgICAgICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICAgICAgICAgIHBvcyA9ICgpXG4gIGJvcmRlci1yYWRpdXMgcG9zIHVubGVzcyBhdWdtZW50ZWRcbiIsIi5pbnRyb1xuXHQudmlkZW8tbG9nb1xuXHRcdHBvc2l0aW9uIGFic29sdXRlXG5cdFx0dG9wIDBcblx0XHRsZWZ0IDBcblx0XHRoZWlnaHQgMTAwJVxuXHRcdHotaW5kZXggMTAwMFxuXHRcdC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eSBoaWRkZW4gLy8gRklYIEZPUiBDSFJPTUUgQ0NTMyBhbmltYXRpb24gZmxhc2hpbmcgZWxlbWVudHNcblx0XHQtd2Via2l0LXRyYW5zZm9ybSBzY2FsZSgxKSAvLyBGSVggRk9SIENIUk9NRSBDQ1MzIGFuaW1hdGlvbiBmbGFzaGluZyBlbGVtZW50c1xuXHRcdEBtZWRpYSAobWF4LXdpZHRoOiA4MTBweClcblx0XHRcdGxlZnQgLTkwcHhcblx0XHRcblx0LmFycm93LWNvbnRhaW5lclxuXHRcdHBvc2l0aW9uIGFic29sdXRlXG5cdFx0Ym90dG9tIGVtKDIwKVxuXHRcdHdpZHRoIDEwMCVcblx0XHQtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHkgaGlkZGVuIC8vIEZJWCBGT1IgQ0hST01FIENDUzMgYW5pbWF0aW9uIGZsYXNoaW5nIGVsZW1lbnRzXG5cdFx0LXdlYmtpdC10cmFuc2Zvcm0gc2NhbGUoMSkgLy8gRklYIEZPUiBDSFJPTUUgQ0NTMyBhbmltYXRpb24gZmxhc2hpbmcgZWxlbWVudHNcblx0XHQuc2Nyb2xsLWFycm93XG5cdFx0XHRvcGFjaXR5IDAuOFxuXHRcdFx0ZGlzcGxheSBibG9ja1xuXHRcdFx0bWFyZ2luIDAgYXV0b1xuXHQudmlkZW8tYW5pbWF0aW9uXG5cdFx0cG9zaXRpb24gYWJzb2x1dGVcblx0XHR0b3AgNTAlXG5cdFx0bGVmdCA1MCVcblx0XHRtaW4td2lkdGggMTAwJVxuXHRcdG1pbi1oZWlnaHQgMTAwJVxuXHRcdHdpZHRoIGF1dG9cblx0XHRoZWlnaHQgYXV0b1xuXHRcdHRyYW5zZm9ybSB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSlcblx0Ji0tbW9iaWxlXG5cdFx0Ji1jb250YWN0XG5cdFx0XHRwb3NpdGlvbiBhYnNvbHV0ZVxuXHRcdFx0dG9wIDBcblx0XHRcdHJpZ2h0IDBcblx0XHRcdHBhZGRpbmcgMTBweFxuXHRcdFx0dGV4dC1hbGlnbiBsZWZ0XG5cdFx0XHRmb250LWZhbWlseSBcIk1vbnRzZXJyYXQgTGlnaHRcIlxuXHRcdFx0Ji0taXRlbVxuXHRcdFx0XHRjb2xvciByZWRcblx0XHRcdFx0cGFkZGluZy1ib3R0b20gMTBweFxuXHRcdFx0XHRcblx0XHQiLCIuY29udGFjdFxuXHQmLS1tYXBcblx0XHRwb3NpdGlvbjogZml4ZWQ7IFxuXHRcdHRvcDogMDsgXG5cdFx0bGVmdDogMDsgXG5cblx0XHQvKiBQcmVzZXJ2ZSBhc3BldCByYXRpbyAqL1xuXHRcdG1pbi13aWR0aDogMTAwJTtcblx0XHRtaW4taGVpZ2h0OiAxMDAlOyJdfQ== */