Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php /* ifreleyici: LYS Encoder Oluturulma Tarihi: 12.01.2024 15:19:04 ..

Decoded Output download

<?php echo $header; ?>
<div id="container" class="container j-container">
  <ul class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
    <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
    <?php } ?>
  </ul>
  <div class="row"><?php echo $column_left; ?><?php echo $column_right; ?>
    <?php if ($column_left && $column_right) { ?>
    <?php $class = 'col-sm-6'; ?>
    <?php } elseif ($column_left || $column_right) { ?>
    <?php $class = 'col-sm-9'; ?>
    <?php } else { ?>
    <?php $class = 'col-sm-12'; ?>
    <?php } ?>
    <div id="content" class="product-page-content">
      <?php if ($this->journal2->settings->get('product_page_title_position', 'top') === 'top'): ?>
      <h1 class="heading-title"><?php echo $heading_title; ?></h1>
      <?php endif; ?>
      <?php echo $content_top; ?>
      <div class="row product-info <?php echo $this->journal2->settings->get('split_ratio'); ?>">
        <?php if ($column_left && $column_right) { ?>
        <?php $class = 'col-sm-6'; ?>
        <?php } elseif ($column_left || $column_right) { ?>
        <?php $class = 'col-sm-6'; ?>
        <?php } else { ?>
        <?php $class = 'col-sm-8'; ?>
        <?php } ?>
        <div class="left">
          <?php if ($thumb) { ?>
          <div class="image">
            <?php if (isset($labels) && is_array($labels)): ?>
            <?php foreach ($labels as $label => $name): ?>
            <span class="label-<?php echo $label; ?>"><b><?php echo $name; ?></b></span>
            <?php endforeach; ?>
            <?php endif; ?>
            <a href="<?php echo $popup; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" id="image" data-largeimg="<?php echo $popup; ?>" /></a>
          </div>
          <?php if($this->journal2->settings->get('product_page_gallery')): ?>
          <div class="gallery-text"><span><?php echo $this->journal2->settings->get('product_page_gallery_text'); ?></span></div>
          <?php endif; ?>

          <?php } ?>
          <?php if ($images) { ?>
          <div id="product-gallery" class="image-additional <?php echo $this->journal2->settings->get('product_page_gallery_carousel') ? 'journal-carousel' : 'image-additional-grid'; ?>">
            <?php if ($this->journal2->settings->get('product_page_gallery_carousel')): ?>
            <div class="swiper">
            <div class="swiper-container" <?php echo $this->journal2->settings->get('rtl') ? 'dir="rtl"' : ''; ?>>
            <div class="swiper-wrapper">
            <?php endif; ?>
                <?php if ($thumb) { ?>
                <a class="swiper-slide" style="<?php echo $this->journal2->settings->get('product_page_gallery_carousel') ? ('width: ' . 100 / $this->journal2->settings->get('product_page_additional_width', 5) . '%') : ''; ?>" href="<?php echo isset($popup_fixed) ? $popup_fixed : $popup; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo isset($thumb_fixed) ? $thumb_fixed : $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>"/></a>
                <?php } ?>
                <?php foreach ($images as $image) { ?>
                <a class="swiper-slide" style="<?php echo $this->journal2->settings->get('product_page_gallery_carousel') ? ('width: ' . 100 / $this->journal2->settings->get('product_page_additional_width', 5) . '%') : ''; ?>" href="<?php echo $image['popup']; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>"/></a>
                <?php } ?>
            <?php if ($this->journal2->settings->get('product_page_gallery_carousel')): ?>
            </div>
            </div>
            <div class="swiper-button-next"></div>
            <div class="swiper-button-prev"></div>
            </div>
            <?php endif; ?>
          </div>
          <?php if ($this->journal2->settings->get('product_page_gallery_carousel')): ?>
          <script>
            (function () {
                var opts = {
                    slidesPerView: parseInt('<?php echo $this->journal2->settings->get('product_page_additional_width', 5) ?>', 10),
                    slidesPerGroup: parseInt('<?php echo $this->journal2->settings->get('product_page_additional_width', 5) ?>', 10),
                    spaceBetween: parseInt('<?php echo $this->journal2->settings->get('product_page_additional_spacing', 10) ?>', 10),
                    nextButton: $('#product-gallery .swiper-button-next'),
                    prevButton: $('#product-gallery .swiper-button-prev'),
                    autoplay: <?php echo $this->journal2->settings->get('product_page_gallery_carousel_autoplay') ? (int)$this->journal2->settings->get('product_page_gallery_carousel_transition_delay', 4000) : 'false'; ?>,
                    speed: <?php echo (int)$this->journal2->settings->get('product_page_gallery_carousel_transition_speed', 400); ?>,
                    touchEventsTarget: <?php echo $this->journal2->settings->get('product_page_gallery_carousel_touchdrag')  ? '\'container\'' : 'false'; ?>,
                };

                $('#product-gallery .swiper-container').swiper(opts);
            })();
          </script>
          <?php endif; ?>
          <?php } ?>
          <?php foreach ($this->journal2->settings->get('additional_product_description_image', array()) as $tab): ?>
          <div class="journal-custom-tab">
            <?php if ($tab['has_icon']): ?>
            <div class="block-icon block-icon-left" style="<?php echo $tab['icon_css']; ?>"><?php echo $tab['icon']; ?></div>
            <?php endif; ?>
            <?php if ($tab['name']): ?>
            <h3><?php echo $tab['name']; ?></h3>
            <?php endif; ?>
            <?php echo $tab['content']; ?>
          </div>
          <?php endforeach; ?>
          <div class="image-gallery" style="display: none !important;">
            <?php if ($thumb) { ?>
            <a href="<?php echo $popup; ?>" data-original="<?php echo isset($original) ? $original : $popup; ?>" title="<?php echo $heading_title; ?>" class="swipebox"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
            <?php } ?>
            <?php if ($images) { ?>
            <?php foreach ($images as $image) { ?>
            <a href="<?php echo $image['popup']; ?>" data-original="<?php echo isset($image['original']) ? $image['original'] : $image['popup']; ?>" title="<?php echo $heading_title; ?>" class="swipebox"><img src="<?php echo $image['thumb']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
            <?php } ?>
            <?php } ?>
          </div>
          <?php if ($this->journal2->settings->get('share_buttons_status') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get('share_buttons_disable_on_mobile', 1))) && $this->journal2->settings->get('share_buttons_position') === 'left' && count($this->journal2->settings->get('config_share_buttons', array()))): ?>
          <div class="social share-this <?php echo $this->journal2->settings->get('share_buttons_disable_on_mobile', 1) ? 'hide-on-mobile' : ''; ?>">
            <div class="social-loaded">
              <script type="text/javascript">var switchTo5x=true;</script>
              <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
              <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get('share_buttons_account_key'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
              <?php foreach ($this->journal2->settings->get('config_share_buttons', array()) as $item): ?>
              <span class="<?php echo $item['class'] . $this->journal2->settings->get('share_buttons_style'); ?>" displayText="<?php echo $this->journal2->settings->get('share_buttons_style') ? $item['name'] : ''; ?>"></span>
              <?php endforeach; ?>
            </div>
          </div>
          <?php endif; ?>
          <meta="description" content="<?php echo $this->journal2->settings->get('product_description'); ?>" />
          <div class="product-tabs">
            <?php if ($this->journal2->settings->get('share_buttons_status') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get('share_buttons_disable_on_mobile', 1))) && $this->journal2->settings->get('share_buttons_position') === 'bottom' && count($this->journal2->settings->get('config_share_buttons', array()))): ?>
            <div class="social share-this <?php echo $this->journal2->settings->get('share_buttons_disable_on_mobile', 1) ? 'hide-on-mobile' : ''; ?>">
              <div class="social-loaded">
                <script type="text/javascript">var switchTo5x=true;</script>
                <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
                <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get('share_buttons_account_key'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
                <?php foreach ($this->journal2->settings->get('config_share_buttons', array()) as $item): ?>
                <span class="<?php echo $item['class'] . $this->journal2->settings->get('share_buttons_style'); ?>" displayText="<?php echo $this->journal2->settings->get('share_buttons_style') ? $item['name'] : ''; ?>"></span>
                <?php endforeach; ?>
              </div>
            </div>
            <?php endif; ?>
          <ul id="tabs" class="nav nav-tabs htabs">
            <?php $is_active = true; ?>
            <?php if (trim($description) && !$this->journal2->settings->get('hide_product_description')) { ?>
            <li <?php if ($is_active) { echo 'class="active"'; $is_active = false; } ;?>><a href="#tab-description" data-toggle="tab"><?php echo $tab_description; ?></a></li>
            <?php } ?>
            <?php if ($attribute_groups) { ?>
            <li <?php if ($is_active) { echo 'class="active"'; $is_active = false; } ;?>><a href="#tab-specification" data-toggle="tab"><?php echo $tab_attribute; ?></a></li>
            <?php } ?>
            <?php if ($review_status) { ?>
            <li <?php if ($is_active) { echo 'class="active"'; $is_active = false; } ;?>><a href="#tab-review" data-toggle="tab"><?php echo $tab_review; ?></a></li>
            <?php } ?>
			<?php if ( isset($customerPhotosData['Enabled']) && $customerPhotosData['Enabled'] == 'yes' && $customerPhotosData['showInTab'] == 'yes' ) { ?>
				<li><a href="#tab_CustomerPhotos" data-toggle="tab"><?php echo $tab_CustomerPhotos; ?></a></li>
			<?php } ?>
            <?php $index = 0; foreach ($this->journal2->settings->get('additional_product_tabs', array()) as $tab): $index++; ?>
            <li <?php if ($is_active) { echo 'class="active"'; $is_active = false; } ;?>><a href="#additional-product-tab-<?php echo $index; ?>" data-toggle="tab"><?php echo $tab['name']; ?></a></li>
            <?php endforeach; ?>
          </ul>
          <div class="tabs-content">
            <?php $is_active = true; ?>
            <?php if (trim($description) && !$this->journal2->settings->get('hide_product_description')) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo 'active'; $is_active = false; } ;?>" id="tab-description"><?php echo $description; ?></div>
            <?php } ?>
			<?php if (!empty($customerPhotosData['Enabled']) && $customerPhotosData['Enabled'] == 'yes' && $customerPhotosData['showInTab'] == 'yes') { ?>
			<div class="tab-pane tab-content1" id="tab_CustomerPhotos">
				<?php 
				$flag=0;
				if (!empty($customerPhotosCustomTags)) {
					foreach ($customerPhotosCustomTags as $CustomTags) {
						 if ($CustomTags['pid']==$product_id) {
							 $flag=1;
								if ($customerPhotosData['UseSiteShortNameProducts'] == "yes") {
									$tagVar = $customerPhotosData['ShortTag'].$CustomTags['tag'];	
								} else {
									$tagVar = $CustomTags['tag'];
								}
						 }
					}
				}
				if ($flag==0) {
					$replace = array(' ', '"', '"', '.', ',' ,'\'', '!', '-', '?', '*', '+', '&', '@', '$', '%', ':', '(', ')');
					$replaced = array('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
					$product_strip_unused_chars = str_replace($replace, $replaced, $heading_title);
					if (extension_loaded('mbstring')) { 
						$final_tag_var = mb_substr($product_strip_unused_chars,0,$customerPhotosData['TagCharacterLimit'], 'utf-8');
						$tagVar = $customerPhotosData['ShortTag'].mb_strtolower($final_tag_var,'utf-8'); 
					 } else {
						$final_tag_var = substr($product_strip_unused_chars,0,$customerPhotosData['TagCharacterLimit']);
						$tagVar = $customerPhotosData['ShortTag'].strtolower($final_tag_var); 
					 }
				}

    			$patterns = array();
				$patterns[0] = '/%s/';
				$patterns[1] = '/{Upload link}/';
				$patterns[2] = '/Twitter/';
				$replacements = array();
				$replacements[0] = "<strong>#".$tagVar."</strong>";
				$replacements[1] = $text_upload_link_product_page;
				$replacements[2] = '<strong>Twitter</strong>';
				echo preg_replace($patterns, $replacements, $customerPhotosData['MainMessage'][$current_language]); ?>
				<br /><br />
        
				<style type="text/css">
				.CustomerPhotosImg {
					border: none;
					height: <?php echo $customerPhotosData['tabImageHeight']; ?>px;
					width: auto;
					padding: 2px;
					display: none;
				}

          .upload-successful{
              text-align:center;
          }
          #upload-container{
              height:300px;
          }

          #upload-message{
              display: inline-block;
              width: 100%;
          }


          .message-container{
              text-align: center;
              margin-top: 20%;
              margin-left: 7%;
          }
          
    
				</style>
				<div id="CustomerPhotosImages">
					<script>
						var customerIgnoredPhotos = '<?php echo $customerPhotosData['IgnoredPhotos']; ?>';
					</script>					
					<?php if ($customerPhotosData['TwitterEnable'] == 'yes') {  ?>
						<script>
                            var twitterTag = '<?php echo $tagVar; ?>';
                            $.ajax({
                                url: 'index.php?route=module/customerphotoswidget/twitterTags&hashtag='+twitterTag,
                                dataType: 'json',
                                success: function(data) { 
                                    if (data) {
                                        $(data).each(function(index, element) {		
                                            if (customerIgnoredPhotos.indexOf(element.image) == -1) {
                                                $('#CustomerPhotosImages').append('<a href="'+element.link+'" title="Click to see the picture in full size" target="_blank"><img src="'+element.image+'" class="CustomerPhotosImg" /></a>');
                                            }
                                        $('.CustomerPhotosImg').fadeIn('slow');
                                        });	
                                    }
                                }
                            });
                     	 </script>
                    <?php } ?>
                  <div class="modal fade" id="upload-modal-product-tpl" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                      <div class="modal-dialog" role="document">
                        <div class="modal-content" >
                          <div class="modal-header">
                            <h3 style="text-align:center"><?php echo $entry_resimyukle; ?></h3>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                          </div>
                          <div class="modal-body" id="produt_page_tab">
                            <div class="row" id="upload-container" style="display:none">
                                <div class="col-xs-10 message-container" >
                                    <span id="upload-message"><?php echo $entry_resimyukleaciklama; ?></span>
                          <button class="btn btn-default" id="upload-button"><i class="glyphicon glyphicon-upload"></i>&nbsp<?php echo $entry_resimyuklebuton; ?></button>
                                </div>
                            </div>
                          <div id="preview" style="display:none; text-align:center">
                                <div class="dz-preview dz-file-preview">
                                    <div class="dz-details" style="text-align:center">
                                        <img data-dz-thumbnail />           
                                    </div>
                                    <br>
                                    <div id="progresbar_container">
                                        <div class="progress progress-striped active" id="bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
                                            <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                    <?php if ($customerPhotosData['UploadedPhotosEnable'] == 'yes') {  ?>
                    <script>
                      var myDropzone;
                      var previewTemplate = $('#preview').html();
                      $('#upload-modal-product-tpl').on('shown.bs.modal', function (e) {
                          $('#upload-container').css('display','block');
                          myDropzone = new Dropzone("div#produt_page_tab", { 
                            url: "<?php echo $customer_photos_upload_action?>",
                            thumbnailWidth: 200,
                            thumbnailHeight: 200,
                            previewTemplate:previewTemplate,
                            clickable:"#upload-button",  
                          });
                          myDropzone.on('sending', function(file, xhr, formData){
                              formData.append('widget_custom_tag', '<?php echo $tagVar; ?>');
                             
                          });
                          myDropzone.on("success", function(progress) {
                             $('.progress-bar').parent().removeClass("active");
                             $('.modal-body').append('<p class="upload-successful">Your photo has been uploaded and will be reviewed by an administrator</p>')
                          });
                      });
                      $('#upload-button').click(function(){
                          $('#upload-container').css('display','none');
                      })
                      $('#upload-modal-product-tpl').on('hidden.bs.modal', function (e) {
                          $('.upload-successful').remove();
                          myDropzone.destroy()
                      });

                      var tag = '<?php echo $tagVar; ?>';
                            $.ajax({
                                url: 'index.php?route=module/customerphotos/getUploadedPhotos',
                                type:'get',
                                dataType: 'json',
                                data:{tag:tag},
                                success: function(data) { 
                                    if (data) {
                                        $(data).each(function(index, element) {   
                                            if (customerIgnoredPhotos.indexOf(element.image_url) == -1) {
                                                $('#CustomerPhotosImages').append('<a href="'+element.image_preview+'" title="Click to see the picture in full size" target="_blank"><img src="'+element.image_url+'" class="CustomerPhotosImg" /></a>');
                                            }
                                        $('.CustomerPhotosImg').fadeIn('slow');
                                        }); 
                                    }
                                }
                            });
                    </script>
                    <?php } ?>
				</div>
			</div>
			<?php } ?>
            <?php if ($attribute_groups) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo 'active'; $is_active = false; } ;?>" id="tab-specification">
              <table class="table table-bordered attribute">
                <?php foreach ($attribute_groups as $attribute_group) { ?>
                
                <tbody>
                  <?php foreach ($attribute_group['attribute'] as $attribute) { ?>
                  <tr>
                    <td style="width:215px; text-align:left;"><?php echo $attribute['name']; ?></td>
                    <td style="width:auto;"><?php echo $attribute['text']; ?></td>
                  </tr>
                  <?php } ?>
                </tbody>
                <?php } ?>
              </table>
            </div>
            <?php } ?>
            <?php if ($review_status) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo 'active'; $is_active = false; } ;?>" id="tab-review" <?php if ($rating): ?><?php endif; ?>>
                <?php if ($rating): ?>
                <meta ="ratingValue" content="<?php echo $rating; ?>" />
                <meta ="reviewCount" content="<?php echo $this->journal2->settings->get('product_num_reviews'); ?>" />
                <meta ="bestRating" content="5" />
                <meta ="worstRating" content="1" />
                <?php endif; ?>
              <form class="form-horizontal" id="form-review">
                <div id="review"></div>
                <h2 id="review-title"><?php echo $text_write; ?></h2>
                <?php if ($review_guest) { ?>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-name"><?php echo $entry_name; ?></label>
                    <input type="text" name="name" value="<?php echo version_compare(VERSION, '2.2', '<') ? '' : $customer_name; ?>" id="input-name" class="form-control" />
                  </div>
                </div>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-review"><?php echo $entry_review; ?></label>
                    <textarea name="text" rows="5" id="input-review" class="form-control"></textarea>
                    <div class="help-block"><?php echo $text_note; ?></div>
                  </div>
                </div>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label"><?php echo $entry_rating; ?></label>
                    &nbsp;&nbsp;&nbsp; <?php echo $entry_bad; ?>&nbsp;
                    <input type="radio" name="rating" value="1" />
                    &nbsp;
                    <input type="radio" name="rating" value="2" />
                    &nbsp;
                    <input type="radio" name="rating" value="3" />
                    &nbsp;
                    <input type="radio" name="rating" value="4" />
                    &nbsp;
                    <input type="radio" name="rating" value="5" />
                    &nbsp;<?php echo $entry_good; ?></div>
                </div>
                <br/>
                <?php if (version_compare(VERSION, '2.0.2', '<')): ?>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-captcha"><?php echo $entry_captcha; ?></label>
                    <input type="text" name="captcha" value="" id="input-captcha" class="form-control" />
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-12"> <img src="index.php?route=tool/captcha" alt="" id="captcha" /> </div>
                </div>
                <?php elseif (version_compare(VERSION, '2.1', '<')): ?>
                <?php if ($site_key) { ?>
                  <div class="form-group">
                    <div class="col-sm-12">
                      <div class="g-recaptcha" data-sitekey="<?php echo $site_key; ?>"></div>
                    </div>
                  </div>
                <?php } ?>
                <?php else: ?>
                <?php echo $captcha; ?>
                <?php endif; ?>
                <div class="buttons">
                  <div class="pull-right">
                    <button type="button" id="button-review" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary button"><?php echo $button_continue; ?></button>
                  </div>
                </div>
                <?php } else { ?>
                <?php echo $text_login; ?>
                <?php } ?>
              </form>
            </div>
            <?php } ?>
            <?php $index = 0; foreach ($this->journal2->settings->get('additional_product_tabs', array()) as $tab): $index++; ?>
              <div id="additional-product-tab-<?php echo $index; ?>" class="tab-pane tab-content journal-custom-tab <?php if ($is_active) { echo 'active'; $is_active = false; } ;?>"><?php echo $tab['content']; ?></div>
            <?php endforeach; ?>
          </div>
          </div>
        </div>
        <?php if ($column_left && $column_right) { ?>
        <?php $class = 'col-sm-6'; ?>
        <?php } elseif ($column_left || $column_right) { ?>
        <?php $class = 'col-sm-6'; ?>
        <?php } else { ?>
        <?php $class = 'col-sm-4'; ?>
        <?php } ?>
        <div class="right">
          <?php if ($this->journal2->settings->get('product_page_title_position', 'top') === 'right'): ?>
          <h1 class="heading-title"><?php echo $heading_title; ?></h1>
          <?php endif; ?>
          <div id="product" class="product-options">
            <?php foreach ($this->journal2->settings->get('additional_product_description_top', array()) as $tab): ?>
            <div class="journal-custom-tab">
              <?php if ($tab['has_icon']): ?>
              <div class="block-icon block-icon-left" style="<?php echo $tab['icon_css']; ?>"><?php echo $tab['icon']; ?></div>
              <?php endif; ?>
              <?php if ($tab['name']): ?>
              <h3><?php echo $tab['name']; ?></h3>
              <?php endif; ?>
              <?php echo $tab['content']; ?>
            </div>
            <?php endforeach; ?>
          <ul class="list-unstyled description">
            <?php if($this->journal2->settings->get('product_views')): ?>
            <li class="product-views-count"><img style="margin-top:-14px;"src="https://www.eticaretgo.com/image/grafikler/ucretsiz-kargo-anime.gif"></li>
            <?php endif; ?>
            <?php if($this->journal2->settings->get('manufacturer_image') == 'on'): ?>
            <li class="brand-logo">
                <a href="<?php echo $manufacturers; ?>" class="brand-image">
                    <img src="<?php echo $manufacturer_image; ?>" width="<?php echo $manufacturer_image_width; ?>" height="<?php echo $manufacturer_image_height; ?>" alt="<?php echo $manufacturer; ?>" />
                </a>
                <?php if(isset($manufacturer_image_name) && $manufacturer_image_name): ?>
                <a href="<?php echo $manufacturers; ?>" class="brand-logo-text">
                    <?php echo $manufacturer_image_name; ?>
                </a>
                <?php endif; ?>
            </li>
            <?php else: ?>
            <?php if ($manufacturer) { ?>
            <li class="p-brand"><?php echo $text_manufacturer; ?> <a href="<?php echo $manufacturers; ?>"><?php echo $manufacturer; ?></a></li>
            <?php } ?>
            <?php endif; ?>
			
			
			
			
			
			
            <li class="p-model"><?php echo $text_model; ?> <span class="p-model"><?php echo $model; ?></span></li>
            

			
			
			<?php if ($reward) { ?>
            <li class="p-rewards"><?php echo $text_reward; ?> <span class="p-rewards"><?php echo $reward; ?></span></li>
            <?php } ?>
            <li class="p-stock"><?php echo $text_stock; ?> <span class="journal-stock <?php echo isset($stock_status) ? $stock_status : ''; ?>"><?php echo $stock; ?></span></li>
          </ul>
          <?php if($this->journal2->settings->get('product_sold')): ?>
          <div class="product-sold-count-text"><?php echo $this->journal2->settings->get('product_sold'); ?></div>
          <?php endif; ?>
          <?php if (isset($date_end) && $date_end && $this->journal2->settings->get('show_countdown_product_page', 'on') == 'on'): ?>
          <div class="countdown-wrapper"><div class="expire-text"><?php echo $this->journal2->settings->get('countdown_product_page_title'); ?></div><div class="countdown"></div></div>
          <script>Journal.countdown($('.right .countdown'), '<?php echo $date_end; ?>');</script>
          <?php endif; ?>
          <?php if ($price) { ?>
    
	
				
							  				<div style="margin-top:5px; margin-bottom:0px;" class="perde-olcu">
                                
                                
                                
              <ul>
                  <?php if ($urun_tip == "stor" || $urun_tip == "jaluzi") { ?>
                  <li>
                      <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_engiriniz; ?></b></span>
                      
                      
                    
					<select name="option[en]" id="sen">
                          <option value="0">-- <?php echo $entry_perdenineniplace; ?> --</option>
                          <?php for ($i=30;$i<=$en;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
                     
                 </li>
				 
				 

				<li style="float:right;">
				 <div style="margin-left:10px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_boygiriniz; ?></b></span>
                      
                       
					   <select name="option[boy]" id="sboy">
                          <option value="0">-- <?php echo $entry_perdeninboyuplace; ?> --</option>
                          <?php for ($i=30;$i<=$boy;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
                      
                      </div>
                  </li>





              <?php }else if ($urun_tip == "perde") { ?>
                 <li>
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_engiriniz; ?></b></span>
                      
					<select name="option[en]" id="pen">
                          <option value="0">-- <?php echo $entry_perdeninenistandartplace; ?> --</option>
                          <?php for ($i=30;$i<=$en;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
					  
                  </li>


                   <li>
				 <div style="margin-left:10px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_boygiriniz; ?></b></span>
                      
                       
						
						<select name="option[boy]" id="pboy">
                          <option value="0">-- <?php echo $entry_perdeninboyustandartplace; ?> --</option>
                          <?php for ($i=180;$i<=$boy;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
						
                       </div>
                  </li>
                  <li style="width:98%; margin-top:15px; margin-bottom:0px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b><?php echo $entry_pile; ?></b></span>
                      <select name="option[pile]" id="ppile">
                          <option value="2.5"><?php echo $entry_pileseyrek; ?></option>
						  <option value="2.75"><?php echo $entry_pileorta; ?></option>
                          <option value="3"><?php echo $entry_pilesik; ?></option>

                      </select>
                  </li>

                  <?php }else if ($urun_tip == "rustik-test") { ?>

                  <li>
                       <span style="font-size:14px; margin-bottom:6px;"><?php echo $entry_ebatgir; ?></b></span>
                      
                      <select name="option[rustik]" id="pebat">
                          <option value="0">-- seiniz --</option>
                          <option value="100">100 cm</option>
                          <option value="150">150 cm</option>
                          <option value="200">200 cm</option>
                          <option value="250">250 cm</option>
                          <option value="300">300 cm</option>
                      </select>
                    
                  </li>

                  <?php }else if ($urun_tip == "varak-test") { ?>

                  <li>
                       <span style="font-size:14px; margin-bottom:6px;"><?php echo $entry_ebatgir; ?></b></span>
                      
							<select name="option[varak]" id="pebat">
                          <option value="0">-- seiniz --</option>
                          <option value="55">55 cm'e kadar</option>
                          <option value="105">105 cm'e kadar</option>
                          <option value="155">155 cm'e kadar</option>
                          <option value="205">205 cm'e kadar</option>
                          <option value="280">280 cm'e kadar</option>
                      </select>                      
                     
                  </li>

                  <?php } ?>


              </ul>
          </div>
	
	
		  <ul  class="list-unstyled price">
            <meta ="itemCondition" />
            <meta ="priceCurrency" content="<?php echo $this->journal2->settings->get('product_price_currency'); ?>" />
            <meta ="price" content="<?php echo $this->journal2->settings->get('product_price'); ?>" />
            <?php if ($this->journal2->settings->get('product_in_stock') === 'yes'): ?>
            <link ="availability"  href="http://schema.org/InStock" />
            <?php endif; ?>
            <?php if (!$special) { ?>
            <li class="product-price"><?php echo $price; ?></li>
            <?php } else { ?>
            <li class="price-old"><?php echo $price; ?></li>
            <li class="price-new"><?php echo $special; ?></li>
            <?php } ?>
            <?php if ($tax) { ?>
            <li class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>
            <?php } ?>
            <?php if ($points) { ?>
            <li class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></li>
            <?php } ?>
            <?php if ($discounts) { ?>
            <?php foreach ($discounts as $discount) { ?>
            <li class="discounts"><?php echo $discount['quantity']; ?><?php echo $text_discount; ?><?php echo $discount['price']; ?></li>
            <?php } ?>
            <?php } ?>
          </ul>
          <?php } ?>
				  
				  		  		   <?php if ($categories) { ?>
				<?php foreach ($categories as $category) { ?>
				<!-- Stor perde -->
					<?php if ($category['category_id'] == '59') { ?> 
						<div style="margin-bottom:-15px;">
	<div style="background-color: #f3f3f3;
	border: 1px solid #dcdcdc;
	padding: 10px;
	margin-bottom: 15px;
	-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	color: #555555;">Girmi olduunuz en ls mekanizma dahil ldr. Kuma 4 cm eksik kesilmektedir. ly buna gre giriniz. (llerinizi setikten sonra tutar otomatik olarak hesaplanacaktr.)</div></div>
					<?php } ?>
					<!-- Zebra perde -->
					<?php if ($category['category_id'] == '66') { ?>
						<div style="margin-bottom:-15px;">
	<div style="background-color: #f3f3f3;
	border: 1px solid #dcdcdc;
	padding: 10px;
	margin-bottom: 15px;
	-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	color: #555555;">Girmi olduunuz en ls mekanizma dahil ldr. Kuma 4 cm eksik kesilmektedir. ly buna gre giriniz. (llerinizi setikten sonra tutar otomatik olarak hesaplanacaktr.)</div></div>
					<?php } ?>
					
					
				<?php } ?>
			<?php } ?>
				  

          <!--<style>
          #seceklerListess li{
			  list-style:none;
			  list-style-type:none;
			  display:block;
			  float:left;
			  margin-left:10px;
		  }
		  #seceklerListess li{
			  width:40%;
			  
			 
			  
		  }
          
          </style> -->


          <input type="hidden" name="toplam-hesap" id="toplam-hesap" value=""/>
          <input type="hidden" id="fiyattt" value="<?php echo $fiyat; ?>"/>
          <input type="hidden" id="kampanyaaa" value="<?php echo $kampanya ?>"/>
           <input type="hidden" id="fiyattt2" value="<?php echo $fiyat2; ?>"/>
          <input type="hidden" id="kampanyaaa2" value="<?php echo $kampanya2 ?>"/>

          <script type="text/javascript">
		  
		  function hesapla123(){
			  
			  $('#sen').trigger("change");
		  }
              
			//  quantity = parseInt($("#input-quantity").val();

              $('#sen').change(function (){
                  var en = $('#sen').val();
                  var boy = $('#sboy').val();
				 	if (boy<=200){
					  boy = 200;
					}else{
						var bsay = boy.substr(1, 2);
						var bson = boy.substr(2,2);
						if (bson!=0) {
							bson = 10 - bson;
							boy = parseInt(boy) + parseInt(bson);
						}
					}
					if (en<=100){
					  en = 100;
					}else{
						var esay = en.substr(1, 2);
						var eson = en.substr(2,2);
						if (eson!=0) {
							eson = 10 - eson;
							en = parseInt(en) + parseInt(eson);
						}
					}

                  if (boy > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*boy*adet)/10000; 
					  metre=metre.toFixed(2);
                      $('#perde-hesap').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                     
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
					  if ($('#sboy').val()>0){
							$('#perde-hesap').addClass('perde-hesap');
							$('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + metre + '</span> m<sup>2</sup>, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
					  }
                  }

              });

              $('#sboy').change(function (){
                  var en = $('#sen').val();
                  var boy = $('#sboy').val();
				 	if (boy<=200){
					  boy = 200;
					}else{
						var bsay = boy.substr(1, 2);
						var bson = boy.substr(2,2);
						if (bson!=0) {
							bson = 10 - bson;
							boy = parseInt(boy) + parseInt(bson);
						}
					}
					if (en<=100){
					  en = 100;
					}else{
						var esay = en.substr(1, 2);
						var eson = en.substr(2,2);
						if (eson!=0) {
							eson = 10 - eson;
							en = parseInt(en) + parseInt(eson);
						}
					}				  
					  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*boy*adet)/10000; metre=metre.toFixed(2);
                      $('#perde-hesap').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
					  
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
                      
					  if ($('#sen').val()>0){
							$('#perde-hesap').addClass('perde-hesap');
							$('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + metre + '</span> m<sup>2</sup>, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
					  }
                  }

              });


              $('#pen').change(function (){
                  var en = $('#pen').val();
                  var boy = $('#pboy').val();
                  var pile = $('#ppile').val();
                  if (boy > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $('#perde-hesap').html("");
                 <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
					  if($('#pboy').val()>0){
							$('#perde-hesap').addClass('perde-hesap');
							$('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + metre + '</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
					  }
                  }

              });
              $('#pboy').change(function (){
                  var en = $('#pen').val();
                  var boy = $('#pboy').val();
                  var pile = $('#ppile').val();
                  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $('#perde-hesap').html("");
                <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
					  
                       toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
                      
					  if ($('#pen').val()>0){
							$('#perde-hesap').addClass('perde-hesap');
							$('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + metre + '</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
					  }
                  }

              });
              $('#ppile').change(function (){
                  var en = $('#pen').val();
                  var boy = $('#pboy').val();
                  var pile = $('#ppile').val();
                  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $('#perde-hesap').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                       
					   toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
					  
                      $('#perde-hesap').addClass('perde-hesap');
                      $('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + metre + '</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
                  }

              });

              $('#pebat').change(function (){
                  var ebat = $('#pebat').val();

                  if (ebat > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (ebat*adet)/1000000;
                      $('#perde-hesap').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                      
					  
					   toplam_hesap=(sonuc/adet).toFixed(2);
                      $('#toplam-hesap').val(toplam_hesap);
					  
                      $('#perde-hesap').addClass('perde-hesap');
                      $('#perde-hesap').append('<?php echo $entry_ebatsonuc; ?> <span id="metre">' + ebat*adet + '</span> cm, <?php echo $entry_sonuctutar; ?> <span id="fiyat">' + sonuc2 + '</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>');
                  }

              });
          </script>
		
		  <?php if ($options) { ?>
    <script>
        function sayfala(sayfa,id,islem){

            var sorgu= $("input[type='radio'][name='option["+id+"]']:checked").val();
				
                if (islem == '+') {
                    if (sorgu=="") { $('#sepete-ekle').trigger('click'); }else {
                        $('.adim' + sayfa).hide();
                        $('.adim' + (parseInt(sayfa) + 1)).show();
                    }
                } else {
                    $('.adim' + sayfa).hide();
                    $('.adim' + (parseInt(sayfa) - 1)).show();
                }

        }

    </script>
    
    
    
    
    <div id="fbfancy" style="display: none;">


    <div id="secenekler">
      <div id="options" class="options">
        <?php $xj=0;  foreach($options as $sayfa){ $sayfa_say[]=$sayfa['sayfa'];} $sayfalandirma =  max($sayfa_say);   $sayfalar = count($options); 
        
        $popup_ac_new = false;
        
        
    foreach ($options as $option) { 
        
       if($option["sayfa"] > 0){
        
        $popup_ac_new = true;
        
        ?>
        <?php  if ($option['type'] == 'select') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option option-<?php echo $option['type']; ?>">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <select class="acilir_listeler" name="option[<?php echo $option['product_option_id']; ?>]">
            <option value=""><?php echo $text_select; ?></option>
            <?php foreach ($option['product_option_value'] as $option_value) { ?>
            <option value="<?php echo $option_value['product_option_value_id']; ?>" data-image="<?php echo $option_value['image']; ?>"><?php echo $option_value['name']; ?>
            <?php if ($option_value['price']) { ?>
            (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
            <?php } ?>
            </option>
            <?php } ?>
          </select>
        </div>

        <?php } ?>
        <?php if ($option['type'] == 'radio') { ?>
          <div id="option-<?php echo $option['product_option_id']; ?>" data-sayfa="<?php echo $option['sayfa']; ?>" class="option option-<?php echo $option['type']; ?>  adim<?php echo $option['sayfa']; ?>">
            
			  
              <div style="clear:both;"></div>

              <div style="width:100%; padding-top:5px; margin-bottom:10px; border-bottom:1px dashed #ccc;">
                  <span class="lightyazisb"><b><?php echo $option['name']; ?></b></span>
              </div>
            <ul id="option-sec">

          <?php $ix=1; foreach ($option['product_option_value'] as $option_value) {  ?>
                <li>
					<div class="list">
						<label for="option-value-<?php echo $option_value['product_option_value_id']; ?>">
						  <img src="<?php echo $option_value['image']; ?>" width="100%" height="100" alt="<?php echo $option_value['name']; ?>"  style="height: 100px ! important; margin-bottom:-5px;" />
						</label>
					</div>
					<div class="label-title">
					<input style="float: left" data-price="" type="radio" <?php echo ($ix==1) ? "checked" : ""; ?> name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" data-image="<?php echo $option_value['image']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
                   <b><?php echo $option_value['name']; ?>
                    <?php if ($option_value['price']) { ?>
                    (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
                    <?php } ?>
                    </b>
                    </div>
          </li>
          <?php $ix++; $xj++; } ?>
            </ul>
			<div style="clear:both;"></div>
			 <?php 
			 if ($option['sayfa_baslik']==1) { ?>			 
				<div >
					  <div style="float:right;margin-left:5px;width:49%">
						  <?php if ($option['sayfa']== $sayfalandirma){ ?>
						  <button id="sepete-ekle" class="btn-evyellow" name="SepeteAt"><?php echo $entry_sepeteekle; ?></button>                  
						  <?php }else{ ?>
						  <button onclick="sayfala('<?php echo $option['sayfa']; ?>','<?php echo $option['product_option_id']; ?>','+');" name="DevamEt"  class="btn-evyellow"><?php echo $entry_devam; ?></button>
						  <?php } ?>
					  </div>
					  <?php if ($option['sayfa']>1){ ?>
					  <div style="float:right;width:49%">
						  <button onclick="sayfala('<?php echo $option['sayfa']; ?>','<?php echo $option['product_option_id']; ?>','-');" name="GeriDon"  class="btn-evblue"><?php echo $entry_geridon; ?></button>
					  </div>
					  <?php }else{ ?> 
					   <div style="float:right;width:49%">
						  <button onclick="$.fancybox.close();" name="GeriDon" id="GeriDon"  class="btn-evblue"><?php echo $entry_kapat; ?></button>
					  </div>					  					 
					  <?php }  ?>
				</div>
				  <?php }  ?>
        </div>

          <?php } ?>
          
          
          
        <?php if ($option['type'] == 'checkbox') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option option-<?php echo $option['type']; ?>">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <?php foreach ($option['product_option_value'] as $option_value) { ?>
          <input type="checkbox" name="option[<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option_value['product_option_value_id']; ?>" data-image="<?php echo $option_value['image']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" />
          <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
            <?php if ($option_value['price']) { ?>
            (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
            <?php } ?>
          </label>
          <br />
          <?php } ?>
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'image') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option option-<?php echo $option['type']; ?>">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <table class="option-image">
            <?php $ix=1; foreach ($option['product_option_value'] as $option_value) { ?>
            <tr>
              <td style="width: 1px;">
                  <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]"    value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" /></td>
              <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><img src="<?php echo $option_value['image']; ?>" width="220" height="100" alt="<?php echo $option_value['name'] . ($option_value['price'] ? ' ' . $option_value['price_prefix'] . $option_value['price'] : ''); ?>" /></label></td>
              <td><label for="option-value-<?php echo $option_value['product_option_value_id']; ?>"><?php echo $option_value['name']; ?>
                  <?php if ($option_value['price']) { ?>
                  (<?php echo $option_value['price_prefix']; ?><?php echo $option_value['price']; ?>)
                  <?php } ?>
                </label></td>
            </tr>
            <?php $ix++; } ?>
          </table>
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'text') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="" placeholder="<?php echo $option['placeholder']; ?>"/>
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'textarea') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <textarea name="option[<?php echo $option['product_option_id']; ?>]" cols="40" rows="5"><?php echo $option['product_option_value']; ?></textarea>
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'file') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <input type="button" value="<?php echo $button_upload; ?>" id="button-option-<?php echo $option['product_option_id']; ?>" class="button">
          <input type="hidden" name="option[<?php echo $option['product_option_id']; ?>]" value="" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'date') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['product_option_value']; ?>" class="date" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'datetime') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['product_option_value']; ?>" class="datetime" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option['type'] == 'time') { ?>
        <div id="option-<?php echo $option['product_option_id']; ?>" class="option">
          <?php if ($option['required']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option['name']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['product_option_value']; ?>" class="time" />
        </div>
        <br />
        <?php } ?>
        
        <?php } ?>
        
        <?php } ?>
      </div>
    </div>
  </div>
      <?php } ?>
		   <?php if ($recurrings) { ?>
            <hr>
            <h3><?php echo $text_payment_recurring ?></h3>
            <div class="form-group required">
              <select name="recurring_id" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($recurrings as $recurring) { ?>
                <option value="<?php echo $recurring['recurring_id'] ?>"><?php echo $recurring['name'] ?></option>
                <?php } ?>
              </select>
              <div class="help-block" id="recurring-description"></div>
            </div>
          <?php } ?>
           <div id="perde-hesap">
		
		</div>
		<input id="sayfa-no" value="1" type="hidden">
            <div class="form-group cart <?php echo isset($labels) && is_array($labels) && isset($labels['outofstock']) ? 'outofstock' : ''; ?>">
              <div>
			                <?php if($this->journal2->settings->get('hide_add_to_cart_button')): ?>
              <?php foreach ($this->journal2->settings->get('additional_product_enquiry', array()) as $tab): ?>
			  <div><?php echo $tab['content']; ?></div>
			  <?php endforeach; ?>
			    <input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />
              <?php else: ?>
			  
			
			
			
			
			 <!--<div id="mobile" style="margin-bottom:15px; color:#238C00;">
			 <ul style="list-style-type:none; margin-left:0px; padding-left:0px;">
			 
			 <li><i class="fa fa-calendar"></i> <?php echo $entry_isgunukargo; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-lock"></i> <?php echo $entry_guvenliodeme; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-credit-card"></i> <?php echo $entry_kredikarti; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-check-circle"></i> <?php echo $entry_havaleeftodeme; ?></li>
			 
			 </ul>
			 
			 </div>-->
			 
			 
			 

			  
			  
			 <span class="qty">
              
              <input type="text" name="quantity" value="<?php echo $minimum; ?>" size="2" data-min-value="<?php echo $minimum; ?>" id="input-quantity" class="form-control" />
              <input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />
              <script>
 /* quantity buttons */
                var $input = $('.cart input[name="quantity"]');
                function up() {
                  var val = parseInt($input.val(), 10) + 1 || parseInt($input.attr('data-min-value'), 10);
                  $input.val(val);
				  hesapla123();
                }
                function down() {
                  var val = parseInt($input.val(), 10) - 1 || 0;
                  var min = parseInt($input.attr('data-min-value'), 10) || 1;
                  $input.val(Math.max(val, min));
				  hesapla123();
                }
                $('<a href="javascript:;" class="journal-stepper">-</a>').insertBefore($input).click(down);
                $('<a href="javascript:;" class="journal-stepper">+</a>').insertAfter($input).click(up);
                $input.keydown(function (e) {
                  if (e.which === 38) {
                    up();
                    return false;
                  }
                  if (e.which === 40) {
                    down();
                    return false;
                  }
                });
              </script>
</span>


            <button type="button" onclick="popup_ac()" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="button"><span class="button-cart-text"><?php echo $button_cart; ?></span></button>
                <?php endif; ?>
              </div>
           
<img style="margin-top:20px; width:100%;" src="https://www.eticaretgo.com/image/grafikler/urun-sayfasi-iconlar.png">
			  
		   	   <a class="fancybox" href="#fbfancy"></a>
			<a class="fancyboxx" href="#after-sayfa" style="display:none;"></a>
			
		<div id="after-sayfa" style="display: none;height: 35px; width: 100%; position: absolute; bottom: 10px;">
            <a onclick="window.location.replace('index.php')" class="btn-evblue" style="width:45%;float:left">Alverie Devam Et</a>
            <a onclick="window.location.replace('index.php?route=checkout/cart')" class="btn-evyellow" style="width:45%;float:left">Sepete Git</a>
        </div>
        
          <script>
          function kontrol() {
              var sen = $('#sen').val();
              var sboy = $('#sboy').val();
              var en = $('#pen').val();
              var boy = $('#pboy').val();
              var ebat = $('#pebat').val();
              
				if (sen == 0) {
					alert("<?php echo $entry_uyarien; ?>");
					return false;
				}
			  
				if (sboy ==0) {
                    alert("<?php echo $entry_uyariboy; ?>");
                    return false;
                } 
                  
                if (en==0) {
                    alert("<?php echo $entry_uyarien; ?>");
                    return false;
                } 
					  
                if (boy ==0) {
                    alert("<?php echo $entry_uyariboy; ?>");
                    return false;
                }              
                               
                if (ebat < 1) {
                    alert("<?php echo $entry_uyariebat; ?>");
                    return false;
                }
                 
                 /* addToCart('<?php echo $product_id; ?>');*/
			   alert ("sepete eklicem. kodumu a");
             
          }
          </script>
       
		   </div>
		  
            <?php if ($minimum > 1) { ?>
            <div class="alert alert-info"><i class="fa fa-info-circle"></i> <?php echo $text_minimum; ?></div>
            <?php } ?>
            <div class="wishlist-compare">
              <span class="links">
                  <a onclick="addToWishList('<?php echo $product_id; ?>');"><?php echo $button_wishlist; ?></a>
                  <a onclick="addToCompare('<?php echo $product_id; ?>');"><?php echo $button_compare; ?></a>
              </span>
            </div>
			
			
			
			
			 <?php if ($review_status) { ?>
          <div class="rating">
            <ul style="margin-left:-20px; margin-top:1px; margin-bottom:-5px;">
          <li>Etek, boncuk ve dier seenekler (varsa) <span style="color:#DB1D0D;">Sepete Ekle</span> butonuna tkladktan sonra alacaktr.</li>
		  <li>Kredi kart taksit seenekleri deme sayfasnda gsterilecektir.</li>
		  <li>Sipariinizle ilgili notunuz varsa deme sayfasnda belirtebilirsiniz.</li>
		  </ul>
		  </div>
          <?php } ?>
			
			
			
			
			
			
			
			
			
          <?php if ($review_status) { ?>
          <div class="rating">
            <p>
              <?php for ($i = 1; $i <= 5; $i++) { ?>
              <?php if ($rating < $i) { ?>
              <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
              <?php } else { ?>
              <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
              <?php } ?>
              <?php } ?>
              <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $reviews; ?></a> / <a href="" onclick="$('a[href=\'#tab-review\']').trigger('click'); return false;"><?php echo $text_write; ?></a></p>
          </div>
          <?php } ?>
            <?php if ($this->journal2->settings->get('share_buttons_status') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get('share_buttons_disable_on_mobile', 1))) && $this->journal2->settings->get('share_buttons_position') === 'right' && count($this->journal2->settings->get('config_share_buttons', array()))): ?>
            <div class="social share-this <?php echo $this->journal2->settings->get('share_buttons_disable_on_mobile', 1) ? 'hide-on-mobile' : ''; ?>">
              <div class="social-loaded">
                <script type="text/javascript">var switchTo5x=true;</script>
                <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
                <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get('share_buttons_account_key'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
                <?php foreach ($this->journal2->settings->get('config_share_buttons', array()) as $item): ?>
                <span class="<?php echo $item['class'] . $this->journal2->settings->get('share_buttons_style'); ?>" displayText="<?php echo $this->journal2->settings->get('share_buttons_style') ? $item['name'] : ''; ?>"></span>
                <?php endforeach; ?>
              </div>
            </div>
            <?php endif; ?>
            <?php foreach ($this->journal2->settings->get('additional_product_description_bottom', array()) as $tab): ?>
            <div class="journal-custom-tab">
              <?php if ($tab['has_icon']): ?>
              <div class="block-icon block-icon-left" style="<?php echo $tab['icon_css']; ?>"><?php echo $tab['icon']; ?></div>
              <?php endif; ?>
              <?php if ($tab['name']): ?>
              <h3><?php echo $tab['name']; ?></h3>
              <?php endif; ?>
              <?php echo $tab['content']; ?>
            </div>
            <?php endforeach; ?>
           </div>
          </div>
        </div>
      <?php if ($tags) { ?>
      <p class="tags"><b><?php echo $text_tags; ?></b>
        <?php for ($i = 0; $i < count($tags); $i++) { ?>
        <?php if ($i < (count($tags) - 1)) { ?>
        <a href="<?php echo $tags[$i]['href']; ?>"><?php echo $tags[$i]['tag']; ?></a>,
        <?php } else { ?>
        <a href="<?php echo $tags[$i]['href']; ?>"><?php echo $tags[$i]['tag']; ?></a>
        <?php } ?>
        <?php } ?>
      </p>
      <?php } ?>
      <?php if ($products && $this->journal2->settings->get('related_products_status')) { ?>
      <div class="box related-products <?php echo $this->journal2->settings->get('related_products_carousel') ? 'journal-carousel' : ''; ?> <?php echo $this->journal2->settings->get('related_products_carousel') && $this->journal2->settings->get('related_products_carousel_arrows') === 'top' ? 'arrows-top' : ''; ?> <?php echo $this->journal2->settings->get('related_products_carousel') && $this->journal2->settings->get('related_products_carousel_bullets') ? 'bullets-on' : ''; ?>">
        <div>
          <div class="box-heading"><?php echo $text_related; ?></div>
          <div class="box-product box-content">
          <?php if ($this->journal2->settings->get('related_products_carousel')): ?>
          <div class="swiper">
          <div class="swiper-container" <?php echo $this->journal2->settings->get('rtl') ? 'dir="rtl"' : ''; ?>>
          <div class="swiper-wrapper">
          <?php endif; ?>
            <?php foreach ($products as $product) { ?>
            <div class="product-grid-item swiper-slide <?php echo $this->journal2->settings->get('related_products_grid_classes'); ?> display-<?php echo $this->journal2->settings->get('product_grid_wishlist_icon_display'); ?> <?php echo $this->journal2->settings->get('product_grid_button_block_button'); ?>">
              <div class="product-thumb product-wrapper <?php echo isset($product['labels']) && is_array($product['labels']) && isset($product['labels']['outofstock']) ? 'outofstock' : ''; ?>">
                <div class="image <?php echo $this->journal2->settings->get('show_countdown', 'never') !== 'never' && isset($product['date_end']) && $product['date_end'] ? 'has-countdown' : ''; ?>">
                  <a href="<?php echo $product['href']; ?>" <?php if(isset($product['thumb2']) && $product['thumb2']): ?> class="has-second-image" style="background: url('<?php echo $product['thumb2']; ?>') no-repeat;" <?php endif; ?>>
                  <img class="first-image" src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" />
                  </a>
                  <?php if (isset($product['labels']) && is_array($product['labels'])): ?>
                  <?php foreach ($product['labels'] as $label => $name): ?>
                  <span class="label-<?php echo $label; ?>"><b><?php echo $name; ?></b></span>
                  <?php endforeach; ?>
                  <?php endif; ?>
                  <?php if($this->journal2->settings->get('product_grid_wishlist_icon_position') === 'image' && $this->journal2->settings->get('product_grid_wishlist_icon_display', '') === 'icon'): ?>
                  <div class="wishlist"><a onclick="addToWishList('<?php echo $product['product_id']; ?>');" class="hint--top" data-hint="<?php echo $button_wishlist; ?>"><i class="wishlist-icon"></i><span class="button-wishlist-text"><?php echo $button_wishlist;?></span></a></div>
                  <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');" class="hint--top" data-hint="<?php echo $button_compare; ?>"><i class="compare-icon"></i><span class="button-compare-text"><?php echo $button_compare;?></span></a></div>
                  <?php endif; ?>
                </div>
                <div class="product-details">
                  <div class="caption">
                    <h4 class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h4>
                    <p class="description"><?php echo $product['description']; ?></p>
                    <?php if ($product['rating']) { ?>
                    <div class="rating">
                      <?php for ($i = 1; $i <= 5; $i++) { ?>
                      <?php if ($product['rating'] < $i) { ?>
                      <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } else { ?>
                      <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } ?>
                      <?php } ?>
                    </div>
                    <?php } ?>
                    <?php if ($product['price']) { ?>
                    <p class="price">
                      <?php if (!$product['special']) { ?>
                      <?php echo $product['price']; ?>
                      <?php } else { ?>
                      <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new" <?php echo isset($product['date_end']) && $product['date_end'] ? "data-end-date='{$product['date_end']}'" : ""; ?>><?php echo $product['special']; ?></span>
                      <?php } ?>
                      <?php if ($product['tax']) { ?>
                      <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
                      <?php } ?>
                    </p>
                    <?php } ?>
                  </div>
                  <div class="button-group">
                    <?php if (Journal2Utils::isEnquiryProduct($this, $product)): ?>
                    <div class="cart enquiry-button">
                      <a href="javascript:Journal.openPopup('<?php echo $this->journal2->settings->get('enquiry_popup_code'); ?>', '<?php echo $product['product_id']; ?>');" data-clk="addToCart('<?php echo $product['product_id']; ?>');" class="button hint--top" data-hint="<?php echo $this->journal2->settings->get('enquiry_button_text'); ?>"><?php echo $this->journal2->settings->get('enquiry_button_icon') . '<span class="button-cart-text">' . $this->journal2->settings->get('enquiry_button_text') . '</span>'; ?></a>
                    </div>
                    <?php else: ?>
                    <div class="cart <?php echo isset($product['labels']) && is_array($product['labels']) && isset($product['labels']['outofstock']) ? 'outofstock' : ''; ?>">
                      <a onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button hint--top" data-hint="<?php echo $button_cart; ?>"><i class="button-left-icon"></i><span class="button-cart-text"><?php echo $button_cart; ?></span><i class="button-right-icon"></i></a>
                    </div>
                    <?php endif; ?>
                    <div class="wishlist"><a onclick="addToWishList('<?php echo $product['product_id']; ?>');" class="hint--top" data-hint="<?php echo $button_wishlist; ?>"><i class="wishlist-icon"></i><span class="button-wishlist-text"><?php echo $button_wishlist;?></span></a></div>
                    <div class="compare"><a onclick="addToCompare('<?php echo $product['product_id']; ?>');" class="hint--top" data-hint="<?php echo $button_compare; ?>"><i class="compare-icon"></i><span class="button-compare-text"><?php echo $button_compare;?></span></a></div>
                  </div>
                </div>
              </div>
            </div>
            <?php } ?>
          </div>
          </div>
          <?php if ($this->journal2->settings->get('related_products_carousel') && $this->journal2->settings->get('related_products_carousel_arrows') !== 'none'): ?>
          <div class="swiper-button-next"></div>
          <div class="swiper-button-prev"></div>
          <?php endif; ?>
          </div>
          <?php if ($this->journal2->settings->get('related_products_carousel') && $this->journal2->settings->get('related_products_carousel_bullets')): ?>
            <div class="swiper-pagination"></div>
          <?php endif; ?>
          </div>
        </div>
      </div>
      <?php /* enable countdown */ ?>
      <?php if ($this->journal2->settings->get('show_countdown', 'never') !== 'never'): ?>
      <script>
        $('.related-products .product-grid-item > div').each(function () {
          var $new = $(this).find('.price-new');
          if ($new.length && $new.attr('data-end-date')) {
            $(this).find('.image').append('<div class="countdown"></div>');
          }
          Journal.countdown($(this).find('.countdown'), $new.attr('data-end-date'));
        });
      </script>
      <?php endif; ?>
      <?php if ($this->journal2->settings->get('related_products_carousel')): ?>
      <?php
      $grid = Journal2Utils::getItemGrid($this->journal2->settings->get('related_products_items_per_row'), $this->journal2->settings->get('site_width', 1024), $this->journal2->settings->get('config_columns_count'));
      $grid = array(
          array(0, (int)$grid['xs']),
          array(470, (int)$grid['sm']),
          array(760, (int)$grid['md']),
          array(980, (int)$grid['lg']),
          array(1100, (int)$grid['xl']),
      );
      ?>
      <script>
        (function () {
          var grid = $.parseJSON('<?php echo json_encode($grid); ?>');

            var breakpoints = {
            470: {
              slidesPerView: grid[0][1],
              slidesPerGroup: grid[0][1]
            },
            760: {
              slidesPerView: grid[1][1],
              slidesPerGroup: grid[1][1]
            },
            980: {
              slidesPerView: grid[2][1],
              slidesPerGroup: grid[2][1]
            },
            1220: {
              slidesPerView: grid[3][1],
              slidesPerGroup: grid[3][1]
            }
          };

          var opts = {
            slidesPerView: grid[4][1],
            slidesPerGroup: grid[4][1],
            breakpoints: breakpoints,
            spaceBetween: parseInt('<?php echo $this->journal2->settings->get('product_grid_item_spacing', '20'); ?>', 10),
            pagination: <?php echo $this->journal2->settings->get('related_products_carousel_bullets') ? '$(\'.related-products .swiper-pagination\')' : 'false'; ?>,
            paginationClickable: true,
            nextButton: <?php echo $this->journal2->settings->get('related_products_carousel_arrows') !== 'none' ? '$(\'.related-products .swiper-button-next\')' : 'false'; ?>,
            prevButton: <?php echo $this->journal2->settings->get('related_products_carousel_arrows') !== 'none' ? '$(\'.related-products .swiper-button-prev\')' : 'false'; ?>,
            autoplay: <?php echo $this->journal2->settings->get('related_products_carousel_autoplay') > 0 ? 4000 : 'false'; ?>,
            autoplayStopOnHover: <?php echo $this->journal2->settings->get('related_products_carousel_pause_on_hover') ? 'true' : 'false'; ?>,
            speed: 400,
            touchEventsTarget: <?php echo $this->journal2->settings->get('related_products_carousel_touchdrag')  ? '\'container\'' : 'false'; ?>,
          };

          $('.related-products .swiper-container').swiper(opts);
        })();
      </script>
      <?php endif; ?>
      <?php } ?>
      <?php echo $content_bottom; ?></div>
    </div>
</div>
    
<script type="text/javascript"><!--
$(document).ready(function() {
    $(".fancybox").fancybox();
});
    $('[data-sayfa]').hide();
    $('[data-sayfa="1"]').show();
    var sayfa = 1;
    $('#sayfa-no').val(sayfa);
    $('#onceki-sayfa').hide();

    var items = {};
    $('div[data-sayfa]').each(function() {
        items[$(this).attr('data-sayfa')] = true;
    });

    var result = new Array();
    for(var i in items)
    {
        result.push(i);
    }
    var totalPages = result.length;

    function sonraki() {
/*
        <?php if ($options) { ?>
        <?php foreach ($options as $option) { ?>
        <?php if ($option['type'] == 'radio') { ?>

                var  veri = $('input[name="option[<?php echo $option['product_option_id']; ?>]"]:checked').length;
                    if (sayfa == <?php echo $option['sayfa']; ?>)
                    {
                        if (veri == 0) {
                            alert("Dikkat! Ltfen zorunlu alanlar bo brakmaynz.");
                            return false;
                        }
                    }
        <?php } } } ?>
*/
        if (totalPages != sayfa){
            $('#onceki-sayfa').show();
            $('[data-sayfa="' + sayfa + '"]').hide();
            $('[data-sayfa="' +(  sayfa + 1 )+ '"]').show();
           sayfa++;
        }

        if (totalPages == sayfa) {
            $('#sonraki-sayfa').hide();
            $('#sepete-ekle').show();

        }
    }



    function onceki(){
        if (sayfa != 1) {
            $('#sonraki-sayfa').show();
            $('[data-sayfa="' + sayfa + '"]').hide();
            $('[data-sayfa="' + (sayfa - 1) + '"]').show();
            sayfa--;
            $('#sepete-ekle').hide();
        }

        if (sayfa == 1)
            $('#onceki-sayfa').hide();
    }


//--></script>
<script type="text/javascript"><!--

function popup_ac(){
    var sen = $('#sen').val();
    var sboy = $('#sboy').val();
    var en = $('#pen').val();
    var boy = $('#pboy').val();
    var ebat = $('#pebat').val();
    
        if (sen < 1) {
            alert("<?php echo $entry_uyarien; ?>");
            return false;
        } else if (sboy < 1) {
			alert("<?php echo $entry_uyariboy; ?>");
            return false;	
		} else if (en < 1) {
			alert("<?php echo $entry_uyarien; ?>");
            return false;	
		} else if (boy < 1) {
			alert("<?php echo $entry_uyarien; ?>");
            return false;	
		}else if (ebat < 1) {
			alert("<?php echo $entry_uyariebat; ?>");
            return false;	
		}else{
			
			<?php if (isset($option)) { ?>
									
					if ($("[name='option[<?php echo $hata_id_ler[0]; ?>]']").val() ==""){
						alert("<?php echo $entry_montajyuksekligiuyari; ?>");
            			return false;
					}else if ($("[name='option[<?php echo $hata_id_ler[1]; ?>]']").val() ==""){
						alert("<?php echo $entry_perdecerceveuyari; ?>");
            			return false;
					}else if ($("[name='option[<?php echo $hata_id_ler[2]; ?>]']").val() ==""){
						alert("<?php echo $entry_nereyetakilacakuyari; ?>");
            			return false;
					}else if ($("[name='option[<?php echo $hata_id_ler[3]; ?>]']").val() ==""){
						alert("<?php echo $entry_digerperdeuyari; ?>");
            			return false;
					//}else if ($("[name='option[<?php echo $hata_id_ler[4]; ?>]']").val() ==""){
						//alert("Dier Perde Bilgisini girmediniz");
            			//return false;
					}else{
						<?php if ($popup_ac_new) { ?>
			
           					$('.fancybox').trigger('click');
				 			$('#sticky-wrapper').removeClass('sticky-wrapper');
						<?php }else{ ?>
							sepeteEkle();
						<?php } ?>
					}
            <?php }else{ ?>
				sepeteEkle();
			<?php } ?>
		}
		
       
  
}

function sepeteEkle(){
        $.ajax({
            url: 'index.php?route=checkout/cart/add',
            type: 'post',
            data: $('#product input[type=\'text\'], #fancybox-wrap input[type=\'text\'], #fancybox-wrap input[type=\'radio\']:checked, #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
            dataType: 'json',
            success: function(json) {
                $('.success, .warning, .attention, information, .error').remove();

                if (json['error']) {
                    if (json['error']['option']) {
                        for (i in json['error']['option']) {
                            $('#option-' + i).after('<span class="error">' + json['error']['option'][i] + '</span>');
                        }
                    }

                    if (json['error']['profile']) {
                        $('select[name="profile_id"]').after('<span class="error">' + json['error']['profile'] + '</span>');
                    }
                }

                if (json['success']) {
					
					
					
					
                   $("#GeriDon").trigger("click");
/*
                    if (!Journal.showNotification(json['success'], json['image'])) {
                        $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
                    }
*/
                    //$('#fbfancyBox').hide();
                    $('.success').fadeIn('slow');

                    $('#cart-total').html(json['total']);
					//window.location = 'index.php?route=checkout/cart';
                    location = 'index.php?route=checkout/cart';
				/*
                    if (json['redirect']) {
                        location = json['redirect'];
                    }
					*/
                }
            }
        });
}

    $('#sepete-ekle').bind('click', function() {
	
        if ($('.hide-cart .right .cart.outofstock').length) { return false;  }
		
        $.ajax({
            url: 'index.php?route=checkout/cart/add',
            type: 'post',
            data: $('#product input[type=\'text\'], #secenekler input[type=\'text\'], #secenekler input[type=\'radio\']:checked, #secenekler2 input[type=\'text\'], #secenekler2 input[type=\'radio\']:checked, #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'),
            dataType: 'json',
            success: function(json) {
                $('.success, .warning, .attention, information, .error').remove();

                if (json['error']) {
                    if (json['error']['option']) {
                        for (i in json['error']['option']) {
                            $('#option-' + i).after('<span class="error">' + json['error']['option'][i] + '</span>');
                        }
                    }

                    if (json['error']['profile']) {
                        $('select[name="profile_id"]').after('<span class="error">' + json['error']['profile'] + '</span>');
                    }
                }

                if (json['success']) {

                   /* $.fancybox.close();

                    $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<i class="fa fa-times"></i></div>');

                    $('.success').fadeIn('slow');

                    $('#cart-total').html(json['total']);

                    $('html, body').animate({ scrollTop: 0 }, 'slow');
					
					$('.fancyboxx').fancybox({

						    fitToView : true,
						    autoSize : true,
							beforeShow: function(){

							}
					}).trigger("click");*/
					
					location = 'index.php?route=checkout/cart';
					
                    if (json['redirect']) {
                        location = json['redirect'];
                    }
                }
            }
        });
        $.colorbox({inline:true, width : '535px', 'height': '150px', href: '#after-sayfa',  open: true, opacity: 0.7}).resize();

    });

	//--></script>	
	
<script type="text/javascript"><!--
$('select[name=\'recurring_id\'], input[name="quantity"]').change(function(){
	$.ajax({
		url: 'index.php?route=product/product/getRecurringDescription',
		type: 'post',
		data: $('input[name=\'product_id\'], input[name=\'quantity\'], select[name=\'recurring_id\']'),
		dataType: 'json',
		beforeSend: function() {
			$('#recurring-description').html('');
		},
		success: function(json) {
			$('.alert, .text-danger').remove();
			
			if (json['success']) {
				$('#recurring-description').html(json['success']);
			}
		}
	});
});
//--></script> 
<script type="text/javascript"><!--
$('.date').datetimepicker({
	pickTime: false
});

$('.datetime').datetimepicker({
	pickDate: true,
	pickTime: true
});

$('.time').datetimepicker({
	pickDate: false
});

$('button[id^=\'button-upload\']').on('click', function() {
	var node = this;
	
	$('#form-upload').remove();
	
	$('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input type="file" name="file" /></form>');
	
	$('#form-upload input[name=\'file\']').trigger('click');
	
	timer = setInterval(function() {
		if ($('#form-upload input[name=\'file\']').val() != '') {
			clearInterval(timer);
			
			$.ajax({
				url: 'index.php?route=tool/upload',
				type: 'post',
				dataType: 'json',
				data: new FormData($('#form-upload')[0]),
				cache: false,
				contentType: false,
				processData: false,
				beforeSend: function() {
					$(node).button('loading');
				},
				complete: function() {
					$(node).button('reset');
				},
				success: function(json) {
					$('.text-danger').remove();
					
					if (json['error']) {
						$(node).parent().find('input').after('<div class="text-danger">' + json['error'] + '</div>');
					}
					
					if (json['success']) {
						alert(json['success']);
						
						$(node).parent().find('input').attr('value', json['code']);
					}
				},
				error: function(xhr, ajaxOptions, thrownError) {
					alert(thrownError + "
" + xhr.statusText + "
" + xhr.responseText);
				}
			});
		}
	}, 500);
});
//--></script> 
<script type="text/javascript"><!--
$('#review').delegate('.pagination a', 'click', function(e) {
  e.preventDefault();

    $('#review').fadeOut('slow');

    $('#review').load(this.href);

    $('#review').fadeIn('slow');
});

$('#review').load('index.php?route=product/product/review&product_id=<?php echo $product_id; ?>');

$('#button-review').on('click', function() {
	$.ajax({
		url: 'index.php?route=product/product/write&product_id=<?php echo $product_id; ?>',
		type: 'post',
		dataType: 'json',
    <?php if (version_compare(VERSION, '2.0.2', '<')): ?>
		data: 'name=' + encodeURIComponent($('input[name=\'name\']').val()) + '&text=' + encodeURIComponent($('textarea[name=\'text\']').val()) + '&rating=' + encodeURIComponent($('input[name=\'rating\']:checked').val() ? $('input[name=\'rating\']:checked').val() : '') + '&captcha=' + encodeURIComponent($('input[name=\'captcha\']').val()),
    <?php else: ?>
    data: $("#form-review").serialize(),
    <?php endif; ?>
		beforeSend: function() {
			$('#button-review').button('loading');
		},
		complete: function() {
			$('#button-review').button('reset');
      <?php if (version_compare(VERSION, '2.0.2', '<')): ?>
			$('#captcha').attr('src', 'index.php?route=tool/captcha#'+new Date().getTime());
			$('input[name=\'captcha\']').val('');
      <?php endif; ?>
		},
		success: function(json) {
			$('.alert-success, .alert-danger').remove();
			
			if (json['error']) {
				$('#review').after('<div class="alert alert-danger warning"><i class="fa fa-exclamation-circle"></i> ' + json['error'] + '</div>');
			}
			
			if (json['success']) {
				$('#review').after('<div class="alert alert-success success"><i class="fa fa-check-circle"></i> ' + json['success'] + '</div>');
				
				$('input[name=\'name\']').val('');
				$('textarea[name=\'text\']').val('');
				$('input[name=\'rating\']:checked').prop('checked', false);
        <?php if (version_compare(VERSION, '2.0.2', '<')): ?>
				$('input[name=\'captcha\']').val('');
        <?php endif; ?>
			}
		}
	});
});

$(document).ready(function() {
	$('.thumbnails').magnificPopup({
		type:'image',
		delegate: 'a',
		gallery: {
			enabled:true
		}
	});
});
//--></script> 
<script type="text/javascript"><!--
				$(document).ready(function() {
					//$('[name^=\'option\']').trigger('change');
				});
				
				$(document).on('change', '.acilir_listeler', function() {
	
				var value = $(this).find('option:selected').text();
				value = $.trim(value);
				if(value == "Evet"){
					$(".gizle").css("display","block");
					
				}else if(value == "Yes"){
					$(".gizle").css("display","block");
					
								}else if(value == "Ja"){
					$(".gizle").css("display","block");
					
								}else if(value == "Oui"){
					$(".gizle").css("display","block");
					
								}else if(value == "S"){
					$(".gizle").css("display","block");
								}else if(value == "S"){
					$(".gizle").css("display","block");
								}else if(value == "Ja"){
					$(".gizle").css("display","block");
					
						
				}else{
					$(".gizle").css("display","none");
					
				}
				
	/*
	
	$(this).after('<div class="yukleniyor"><i class="fa fa-spinner selection-wait"></i> Ykleniyor...</div>');
					
					
					
					var value = $(this).val();
					var parent_id = $(this).attr('name').replace (/[^\d.]/g, '');
			
					$.ajax({
						url: 'index.php?route=product/product/dependentoption&parent_id=' +  parent_id + '&value=' + value + '&product_id=<?php echo $product_id; ?>',
						type: 'get',
						dataType: 'json',			
						success: function(json) {
							
							
							
							$('.yukleniyor').remove();
							
							if (json['option']) {
								for (i = 0; i < json['option'].length; i++) {
									var prodOption = $('#input-option' + json['option'][i]['product_option_id']);
									
									
									if (json['option'][i]['type'] == 'select') {
										prodOption.parent().hide();
										prodOption.next().children().hide();
                                  		prodOption.next().children().removeClass('selected');
										var html = '';
						

										html += '<option value=""><?php echo $text_select; ?></option>';
										
										

										for (j = 0; j < json['option'][i]['option_value'].length; j++) {
											prodOption.parent().show();
											prodOption.next().show();
											$('li[data-value="' + json['option'][i]['option_value'][j]['product_option_value_id'] + '"]').show();
											

											html += '<option value="' + json['option'][i]['option_value'][j]['product_option_value_id'] + '">' + json['option'][i]['option_value'][j]['name'];


											if (json['option'][i]['option_value'][j]['price']) {
												html += ' (' + json['option'][i]['option_value'][j]['price_prefix'] + json['option'][i]['option_value'][j]['price'] + ')';
											}
											
											html += '</option>';

										}
										
										$('select[name=\'option[' + json['option'][i]['product_option_id'] + ']\']').html(html);
	

										

									} else if (json['option'][i]['type'] == 'radio' || json['option'][i]['type'] == 'checkbox' || json['option'][i]['type'] == 'image') {
										
										prodOption.parent().hide();
										prodOption.next().children().hide();
										var html = '';
										
										prodOption.find('input').prop('checked', false);
									
										for (j = 0; j < json['option'][i]['option_value'].length; j++) {

											$('li[data-value="' + json['option'][i]['option_value'][j]['product_option_value_id'] + '"]').show();

											prodOption.parent().show();
											prodOption.show();
											prodOption.siblings('.control-label').show();											
											prodOption.find('input[value=\'' + json['option'][i]['option_value'][j]['product_option_value_id'] + '\']').parent().show();
											prodOption.find('input[value=\'' + json['option'][i]['option_value'][j]['product_option_value_id'] + '\']').parent().parent().show();
										}
									} else {
										// File, text, textarea, date, datetime
										if (json['option'][i]['option_value']) {
											$('#input-option' + json['option'][i]['product_option_id']).parents('.form-group').stop().fadeIn('medium');
										} else {
											$('#input-option' + json['option'][i]['product_option_id']).parents('.form-group').stop().fadeOut('medium');
										}
									}
								}
							}

						},
						error: function(xhr, ajaxOptions, thrownError) {
							alert(thrownError + "
" + xhr.statusText + "
" + xhr.responseText);
						}
					});	
					*/
				});
				//--></script>
<?php echo $footer; ?>

Did this file decode correctly?

Original Code

 <?php
    /*
    ifreleyici: LYS Encoder
    Oluturulma Tarihi: 12.01.2024 15:19:04
    Lisans Sorgulama Adresiniz: http://lisansv2.yesilkare.com/
    E-mail: [email protected]
    Oluturan: Hasan entrk
    */
    echo eval(base64_decode("PD9waHAgZWNobyAkaGVhZGVyOyA/Pg0KPGRpdiBpZD0iY29udGFpbmVyIiBjbGFzcz0iY29udGFpbmVyIGotY29udGFpbmVyIj4NCiAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4NCiAgICA8P3BocCBmb3JlYWNoICgkYnJlYWRjcnVtYnMgYXMgJGJyZWFkY3J1bWIpIHsgPz4NCiAgICA8bGk+PGEgaHJlZj0iPD9waHAgZWNobyAkYnJlYWRjcnVtYlsnaHJlZiddOyA/PiI+PD9waHAgZWNobyAkYnJlYWRjcnVtYlsndGV4dCddOyA/PjwvYT48L2xpPg0KICAgIDw/cGhwIH0gPz4NCiAgPC91bD4NCiAgPGRpdiBjbGFzcz0icm93Ij48P3BocCBlY2hvICRjb2x1bW5fbGVmdDsgPz48P3BocCBlY2hvICRjb2x1bW5fcmlnaHQ7ID8+DQogICAgPD9waHAgaWYgKCRjb2x1bW5fbGVmdCAmJiAkY29sdW1uX3JpZ2h0KSB7ID8+DQogICAgPD9waHAgJGNsYXNzID0gJ2NvbC1zbS02JzsgPz4NCiAgICA8P3BocCB9IGVsc2VpZiAoJGNvbHVtbl9sZWZ0IHx8ICRjb2x1bW5fcmlnaHQpIHsgPz4NCiAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTknOyA/Pg0KICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgPD9waHAgJGNsYXNzID0gJ2NvbC1zbS0xMic7ID8+DQogICAgPD9waHAgfSA/Pg0KICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJwcm9kdWN0LXBhZ2UtY29udGVudCI+DQogICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfdGl0bGVfcG9zaXRpb24nLCAndG9wJykgPT09ICd0b3AnKTogPz4NCiAgICAgIDxoMSBjbGFzcz0iaGVhZGluZy10aXRsZSI+PD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz48L2gxPg0KICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICA8P3BocCBlY2hvICRjb250ZW50X3RvcDsgPz4NCiAgICAgIDxkaXYgY2xhc3M9InJvdyBwcm9kdWN0LWluZm8gPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NwbGl0X3JhdGlvJyk7ID8+Ij4NCiAgICAgICAgPD9waHAgaWYgKCRjb2x1bW5fbGVmdCAmJiAkY29sdW1uX3JpZ2h0KSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tNic7ID8+DQogICAgICAgIDw/cGhwIH0gZWxzZWlmICgkY29sdW1uX2xlZnQgfHwgJGNvbHVtbl9yaWdodCkgeyA/Pg0KICAgICAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTYnOyA/Pg0KICAgICAgICA8P3BocCB9IGVsc2UgeyA/Pg0KICAgICAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTgnOyA/Pg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDxkaXYgY2xhc3M9ImxlZnQiPg0KICAgICAgICAgIDw/cGhwIGlmICgkdGh1bWIpIHsgPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZSI+DQogICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJGxhYmVscykgJiYgaXNfYXJyYXkoJGxhYmVscykpOiA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGxhYmVscyBhcyAkbGFiZWwgPT4gJG5hbWUpOiA/Pg0KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsLTw/cGhwIGVjaG8gJGxhYmVsOyA/PiI+PGI+PD9waHAgZWNobyAkbmFtZTsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyAkcG9wdXA7ID8+IiB0aXRsZT0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iPjxpbWcgc3JjPSI8P3BocCBlY2hvICR0aHVtYjsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgYWx0PSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgaWQ9ImltYWdlIiBkYXRhLWxhcmdlaW1nPSI8P3BocCBlY2hvICRwb3B1cDsgPz4iIC8+PC9hPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGlmKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnknKSk6ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0iZ2FsbGVyeS10ZXh0Ij48c3Bhbj48P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfdGV4dCcpOyA/Pjwvc3Bhbj48L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8P3BocCBpZiAoJGltYWdlcykgeyA/Pg0KICAgICAgICAgIDxkaXYgaWQ9InByb2R1Y3QtZ2FsbGVyeSIgY2xhc3M9ImltYWdlLWFkZGl0aW9uYWwgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsJykgPyAnam91cm5hbC1jYXJvdXNlbCcgOiAnaW1hZ2UtYWRkaXRpb25hbC1ncmlkJzsgPz4iPg0KICAgICAgICAgICAgPD9waHAgaWYgKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWwnKSk6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXIiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWNvbnRhaW5lciIgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3J0bCcpID8gJ2Rpcj0icnRsIicgOiAnJzsgPz4+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItd3JhcHBlciI+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHRodW1iKSB7ID8+DQogICAgICAgICAgICAgICAgPGEgY2xhc3M9InN3aXBlci1zbGlkZSIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbCcpID8gKCd3aWR0aDogJyAuIDEwMCAvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2FkZGl0aW9uYWxfd2lkdGgnLCA1KSAuICclJykgOiAnJzsgPz4iIGhyZWY9Ijw/cGhwIGVjaG8gaXNzZXQoJHBvcHVwX2ZpeGVkKSA/ICRwb3B1cF9maXhlZCA6ICRwb3B1cDsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiI+PGltZyBzcmM9Ijw/cGhwIGVjaG8gaXNzZXQoJHRodW1iX2ZpeGVkKSA/ICR0aHVtYl9maXhlZCA6ICR0aHVtYjsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgYWx0PSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIvPjwvYT4NCiAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGltYWdlcyBhcyAkaW1hZ2UpIHsgPz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3dpcGVyLXNsaWRlIiBzdHlsZT0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsJykgPyAoJ3dpZHRoOiAnIC4gMTAwIC8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfYWRkaXRpb25hbF93aWR0aCcsIDUpIC4gJyUnKSA6ICcnOyA/PiIgaHJlZj0iPD9waHAgZWNobyAkaW1hZ2VbJ3BvcHVwJ107ID8+IiB0aXRsZT0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iPjxpbWcgc3JjPSI8P3BocCBlY2hvICRpbWFnZVsndGh1bWInXTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgYWx0PSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIvPjwvYT4NCiAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbCcpKTogPz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLW5leHQiPjwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWJ1dHRvbi1wcmV2Ij48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPD9waHAgaWYgKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWwnKSk6ID8+DQogICAgICAgICAgPHNjcmlwdD4NCiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdmFyIG9wdHMgPSB7DQogICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHBhcnNlSW50KCc8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2FkZGl0aW9uYWxfd2lkdGgnLCA1KSA/PicsIDEwKSwNCiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IHBhcnNlSW50KCc8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2FkZGl0aW9uYWxfd2lkdGgnLCA1KSA/PicsIDEwKSwNCiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiBwYXJzZUludCgnPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9hZGRpdGlvbmFsX3NwYWNpbmcnLCAxMCkgPz4nLCAxMCksDQogICAgICAgICAgICAgICAgICAgIG5leHRCdXR0b246ICQoJyNwcm9kdWN0LWdhbGxlcnkgLnN3aXBlci1idXR0b24tbmV4dCcpLA0KICAgICAgICAgICAgICAgICAgICBwcmV2QnV0dG9uOiAkKCcjcHJvZHVjdC1nYWxsZXJ5IC5zd2lwZXItYnV0dG9uLXByZXYnKSwNCiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbF9hdXRvcGxheScpID8gKGludCkkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsX3RyYW5zaXRpb25fZGVsYXknLCA0MDAwKSA6ICdmYWxzZSc7ID8+LA0KICAgICAgICAgICAgICAgICAgICBzcGVlZDogPD9waHAgZWNobyAoaW50KSR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWxfdHJhbnNpdGlvbl9zcGVlZCcsIDQwMCk7ID8+LA0KICAgICAgICAgICAgICAgICAgICB0b3VjaEV2ZW50c1RhcmdldDogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsX3RvdWNoZHJhZycpICA/ICdcJ2NvbnRhaW5lclwnJyA6ICdmYWxzZSc7ID8+LA0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAkKCcjcHJvZHVjdC1nYWxsZXJ5IC5zd2lwZXItY29udGFpbmVyJykuc3dpcGVyKG9wdHMpOw0KICAgICAgICAgICAgfSkoKTsNCiAgICAgICAgICA8L3NjcmlwdD4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdhZGRpdGlvbmFsX3Byb2R1Y3RfZGVzY3JpcHRpb25faW1hZ2UnLCBhcnJheSgpKSBhcyAkdGFiKTogPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJqb3VybmFsLWN1c3RvbS10YWIiPg0KICAgICAgICAgICAgPD9waHAgaWYgKCR0YWJbJ2hhc19pY29uJ10pOiA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2staWNvbiBibG9jay1pY29uLWxlZnQiIHN0eWxlPSI8P3BocCBlY2hvICR0YWJbJ2ljb25fY3NzJ107ID8+Ij48P3BocCBlY2hvICR0YWJbJ2ljb24nXTsgPz48L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCR0YWJbJ25hbWUnXSk6ID8+DQogICAgICAgICAgICA8aDM+PD9waHAgZWNobyAkdGFiWyduYW1lJ107ID8+PC9oMz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgZWNobyAkdGFiWydjb250ZW50J107ID8+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1nYWxsZXJ5IiBzdHlsZT0iZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyI+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRodW1iKSB7ID8+DQogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRwb3B1cDsgPz4iIGRhdGEtb3JpZ2luYWw9Ijw/cGhwIGVjaG8gaXNzZXQoJG9yaWdpbmFsKSA/ICRvcmlnaW5hbCA6ICRwb3B1cDsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgY2xhc3M9InN3aXBlYm94Ij48aW1nIHNyYz0iPD9waHAgZWNobyAkdGh1bWI7ID8+IiB0aXRsZT0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iIGFsdD0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iIC8+PC9hPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRpbWFnZXMpIHsgPz4NCiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRpbWFnZXMgYXMgJGltYWdlKSB7ID8+DQogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRpbWFnZVsncG9wdXAnXTsgPz4iIGRhdGEtb3JpZ2luYWw9Ijw/cGhwIGVjaG8gaXNzZXQoJGltYWdlWydvcmlnaW5hbCddKSA/ICRpbWFnZVsnb3JpZ2luYWwnXSA6ICRpbWFnZVsncG9wdXAnXTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgY2xhc3M9InN3aXBlYm94Ij48aW1nIHNyYz0iPD9waHAgZWNobyAkaW1hZ2VbJ3RodW1iJ107ID8+IiB0aXRsZT0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iIGFsdD0iPD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz4iIC8+PC9hPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3RhdHVzJykgJiYgKCFKb3VybmFsMkNhY2hlOjokbW9iaWxlX2RldGVjdC0+aXNNb2JpbGUoKSB8fCAoSm91cm5hbDJDYWNoZTo6JG1vYmlsZV9kZXRlY3QtPmlzTW9iaWxlKCkgJiYgISR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19kaXNhYmxlX29uX21vYmlsZScsIDEpKSkgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3Bvc2l0aW9uJykgPT09ICdsZWZ0JyAmJiBjb3VudCgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2NvbmZpZ19zaGFyZV9idXR0b25zJywgYXJyYXkoKSkpKTogPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzb2NpYWwgc2hhcmUtdGhpcyA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19kaXNhYmxlX29uX21vYmlsZScsIDEpID8gJ2hpZGUtb24tbW9iaWxlJyA6ICcnOyA/PiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzb2NpYWwtbG9hZGVkIj4NCiAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciBzd2l0Y2hUbzV4PXRydWU7PC9zY3JpcHQ+DQogICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3Muc2hhcmV0aGlzLmNvbS9idXR0b24vYnV0dG9ucy5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5zdExpZ2h0Lm9wdGlvbnMoe3B1Ymxpc2hlcjogIjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2FjY291bnRfa2V5Jyk7ID8+IiwgZG9Ob3RIYXNoOiB0cnVlLCBkb05vdENvcHk6IHRydWUsIGhhc2hBZGRyZXNzQmFyOiBmYWxzZX0pOzwvc2NyaXB0Pg0KICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2NvbmZpZ19zaGFyZV9idXR0b25zJywgYXJyYXkoKSkgYXMgJGl0ZW0pOiA/Pg0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iPD9waHAgZWNobyAkaXRlbVsnY2xhc3MnXSAuICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19zdHlsZScpOyA/PiIgZGlzcGxheVRleHQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0eWxlJykgPyAkaXRlbVsnbmFtZSddIDogJyc7ID8+Ij48L3NwYW4+DQogICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8bWV0YT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2Rlc2NyaXB0aW9uJyk7ID8+IiAvPg0KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtdGFicyI+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0YXR1cycpICYmICghSm91cm5hbDJDYWNoZTo6JG1vYmlsZV9kZXRlY3QtPmlzTW9iaWxlKCkgfHwgKEpvdXJuYWwyQ2FjaGU6OiRtb2JpbGVfZGV0ZWN0LT5pc01vYmlsZSgpICYmICEkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfZGlzYWJsZV9vbl9tb2JpbGUnLCAxKSkpICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19wb3NpdGlvbicpID09PSAnYm90dG9tJyAmJiBjb3VudCgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2NvbmZpZ19zaGFyZV9idXR0b25zJywgYXJyYXkoKSkpKTogPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNvY2lhbCBzaGFyZS10aGlzIDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2Rpc2FibGVfb25fbW9iaWxlJywgMSkgPyAnaGlkZS1vbi1tb2JpbGUnIDogJyc7ID8+Ij4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic29jaWFsLWxvYWRlZCI+DQogICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnZhciBzd2l0Y2hUbzV4PXRydWU7PC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93cy5zaGFyZXRoaXMuY29tL2J1dHRvbi9idXR0b25zLmpzIj48L3NjcmlwdD4NCiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+c3RMaWdodC5vcHRpb25zKHtwdWJsaXNoZXI6ICI8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19hY2NvdW50X2tleScpOyA/PiIsIGRvTm90SGFzaDogdHJ1ZSwgZG9Ob3RDb3B5OiB0cnVlLCBoYXNoQWRkcmVzc0JhcjogZmFsc2V9KTs8L3NjcmlwdD4NCiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2NvbmZpZ19zaGFyZV9idXR0b25zJywgYXJyYXkoKSkgYXMgJGl0ZW0pOiA/Pg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSI8P3BocCBlY2hvICRpdGVtWydjbGFzcyddIC4gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0eWxlJyk7ID8+IiBkaXNwbGF5VGV4dD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3R5bGUnKSA/ICRpdGVtWyduYW1lJ10gOiAnJzsgPz4iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgPHVsIGlkPSJ0YWJzIiBjbGFzcz0ibmF2IG5hdi10YWJzIGh0YWJzIj4NCiAgICAgICAgICAgIDw/cGhwICRpc19hY3RpdmUgPSB0cnVlOyA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKHRyaW0oJGRlc2NyaXB0aW9uKSAmJiAhJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdoaWRlX3Byb2R1Y3RfZGVzY3JpcHRpb24nKSkgeyA/Pg0KICAgICAgICAgICAgPGxpIDw/cGhwIGlmICgkaXNfYWN0aXZlKSB7IGVjaG8gJ2NsYXNzPSJhY3RpdmUiJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/Pj48YSBocmVmPSIjdGFiLWRlc2NyaXB0aW9uIiBkYXRhLXRvZ2dsZT0idGFiIj48P3BocCBlY2hvICR0YWJfZGVzY3JpcHRpb247ID8+PC9hPjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGF0dHJpYnV0ZV9ncm91cHMpIHsgPz4NCiAgICAgICAgICAgIDxsaSA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdjbGFzcz0iYWN0aXZlIic7ICRpc19hY3RpdmUgPSBmYWxzZTsgfSA7Pz4+PGEgaHJlZj0iI3RhYi1zcGVjaWZpY2F0aW9uIiBkYXRhLXRvZ2dsZT0idGFiIj48P3BocCBlY2hvICR0YWJfYXR0cmlidXRlOyA/PjwvYT48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRyZXZpZXdfc3RhdHVzKSB7ID8+DQogICAgICAgICAgICA8bGkgPD9waHAgaWYgKCRpc19hY3RpdmUpIHsgZWNobyAnY2xhc3M9ImFjdGl2ZSInOyAkaXNfYWN0aXZlID0gZmFsc2U7IH0gOz8+PjxhIGhyZWY9IiN0YWItcmV2aWV3IiBkYXRhLXRvZ2dsZT0idGFiIj48P3BocCBlY2hvICR0YWJfcmV2aWV3OyA/PjwvYT48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KCQkJPD9waHAgaWYgKCBpc3NldCgkY3VzdG9tZXJQaG90b3NEYXRhWydFbmFibGVkJ10pICYmICRjdXN0b21lclBob3Rvc0RhdGFbJ0VuYWJsZWQnXSA9PSAneWVzJyAmJiAkY3VzdG9tZXJQaG90b3NEYXRhWydzaG93SW5UYWInXSA9PSAneWVzJyApIHsgPz4NCgkJCQk8bGk+PGEgaHJlZj0iI3RhYl9DdXN0b21lclBob3RvcyIgZGF0YS10b2dnbGU9InRhYiI+PD9waHAgZWNobyAkdGFiX0N1c3RvbWVyUGhvdG9zOyA/PjwvYT48L2xpPg0KCQkJPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgJGluZGV4ID0gMDsgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdhZGRpdGlvbmFsX3Byb2R1Y3RfdGFicycsIGFycmF5KCkpIGFzICR0YWIpOiAkaW5kZXgrKzsgPz4NCiAgICAgICAgICAgIDxsaSA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdjbGFzcz0iYWN0aXZlIic7ICRpc19hY3RpdmUgPSBmYWxzZTsgfSA7Pz4+PGEgaHJlZj0iI2FkZGl0aW9uYWwtcHJvZHVjdC10YWItPD9waHAgZWNobyAkaW5kZXg7ID8+IiBkYXRhLXRvZ2dsZT0idGFiIj48P3BocCBlY2hvICR0YWJbJ25hbWUnXTsgPz48L2E+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJzLWNvbnRlbnQiPg0KICAgICAgICAgICAgPD9waHAgJGlzX2FjdGl2ZSA9IHRydWU7ID8+DQogICAgICAgICAgICA8P3BocCBpZiAodHJpbSgkZGVzY3JpcHRpb24pICYmICEkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2hpZGVfcHJvZHVjdF9kZXNjcmlwdGlvbicpKSB7ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB0YWItY29udGVudCA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdhY3RpdmUnOyAkaXNfYWN0aXZlID0gZmFsc2U7IH0gOz8+IiBpZD0idGFiLWRlc2NyaXB0aW9uIj48P3BocCBlY2hvICRkZXNjcmlwdGlvbjsgPz48L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCgkJCTw/cGhwIGlmICghZW1wdHkoJGN1c3RvbWVyUGhvdG9zRGF0YVsnRW5hYmxlZCddKSAmJiAkY3VzdG9tZXJQaG90b3NEYXRhWydFbmFibGVkJ10gPT0gJ3llcycgJiYgJGN1c3RvbWVyUGhvdG9zRGF0YVsnc2hvd0luVGFiJ10gPT0gJ3llcycpIHsgPz4NCgkJCTxkaXYgY2xhc3M9InRhYi1wYW5lIHRhYi1jb250ZW50MSIgaWQ9InRhYl9DdXN0b21lclBob3RvcyI+DQoJCQkJPD9waHAgDQoJCQkJJGZsYWc9MDsNCgkJCQlpZiAoIWVtcHR5KCRjdXN0b21lclBob3Rvc0N1c3RvbVRhZ3MpKSB7DQoJCQkJCWZvcmVhY2ggKCRjdXN0b21lclBob3Rvc0N1c3RvbVRhZ3MgYXMgJEN1c3RvbVRhZ3MpIHsNCgkJCQkJCSBpZiAoJEN1c3RvbVRhZ3NbJ3BpZCddPT0kcHJvZHVjdF9pZCkgew0KCQkJCQkJCSAkZmxhZz0xOw0KCQkJCQkJCQlpZiAoJGN1c3RvbWVyUGhvdG9zRGF0YVsnVXNlU2l0ZVNob3J0TmFtZVByb2R1Y3RzJ10gPT0gInllcyIpIHsNCgkJCQkJCQkJCSR0YWdWYXIgPSAkY3VzdG9tZXJQaG90b3NEYXRhWydTaG9ydFRhZyddLiRDdXN0b21UYWdzWyd0YWcnXTsJDQoJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkkdGFnVmFyID0gJEN1c3RvbVRhZ3NbJ3RhZyddOw0KCQkJCQkJCQl9DQoJCQkJCQkgfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkZmxhZz09MCkgew0KCQkJCQkkcmVwbGFjZSA9IGFycmF5KCcgJywgJyInLCAnIicsICcuJywgJywnICwnXCcnLCAnIScsICctJywgJz8nLCAnKicsICcrJywgJyYnLCAnQCcsICckJywgJyUnLCAnOicsICcoJywgJyknKTsNCgkJCQkJJHJlcGxhY2VkID0gYXJyYXkoJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJyk7DQoJCQkJCSRwcm9kdWN0X3N0cmlwX3VudXNlZF9jaGFycyA9IHN0cl9yZXBsYWNlKCRyZXBsYWNlLCAkcmVwbGFjZWQsICRoZWFkaW5nX3RpdGxlKTsNCgkJCQkJaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykpIHsgDQoJCQkJCQkkZmluYWxfdGFnX3ZhciA9IG1iX3N1YnN0cigkcHJvZHVjdF9zdHJpcF91bnVzZWRfY2hhcnMsMCwkY3VzdG9tZXJQaG90b3NEYXRhWydUYWdDaGFyYWN0ZXJMaW1pdCddLCAndXRmLTgnKTsNCgkJCQkJCSR0YWdWYXIgPSAkY3VzdG9tZXJQaG90b3NEYXRhWydTaG9ydFRhZyddLm1iX3N0cnRvbG93ZXIoJGZpbmFsX3RhZ192YXIsJ3V0Zi04Jyk7IA0KCQkJCQkgfSBlbHNlIHsNCgkJCQkJCSRmaW5hbF90YWdfdmFyID0gc3Vic3RyKCRwcm9kdWN0X3N0cmlwX3VudXNlZF9jaGFycywwLCRjdXN0b21lclBob3Rvc0RhdGFbJ1RhZ0NoYXJhY3RlckxpbWl0J10pOw0KCQkJCQkJJHRhZ1ZhciA9ICRjdXN0b21lclBob3Rvc0RhdGFbJ1Nob3J0VGFnJ10uc3RydG9sb3dlcigkZmluYWxfdGFnX3Zhcik7IA0KCQkJCQkgfQ0KCQkJCX0NCg0KICAgIAkJCSRwYXR0ZXJucyA9IGFycmF5KCk7DQoJCQkJJHBhdHRlcm5zWzBdID0gJy8lcy8nOw0KCQkJCSRwYXR0ZXJuc1sxXSA9ICcve1VwbG9hZCBsaW5rfS8nOw0KCQkJCSRwYXR0ZXJuc1syXSA9ICcvVHdpdHRlci8nOw0KCQkJCSRyZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KCQkJCSRyZXBsYWNlbWVudHNbMF0gPSAiPHN0cm9uZz4jIi4kdGFnVmFyLiI8L3N0cm9uZz4iOw0KCQkJCSRyZXBsYWNlbWVudHNbMV0gPSAkdGV4dF91cGxvYWRfbGlua19wcm9kdWN0X3BhZ2U7DQoJCQkJJHJlcGxhY2VtZW50c1syXSA9ICc8c3Ryb25nPlR3aXR0ZXI8L3N0cm9uZz4nOw0KCQkJCWVjaG8gcHJlZ19yZXBsYWNlKCRwYXR0ZXJucywgJHJlcGxhY2VtZW50cywgJGN1c3RvbWVyUGhvdG9zRGF0YVsnTWFpbk1lc3NhZ2UnXVskY3VycmVudF9sYW5ndWFnZV0pOyA/Pg0KCQkJCTxiciAvPjxiciAvPg0KICAgICAgICANCgkJCQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQkJCS5DdXN0b21lclBob3Rvc0ltZyB7DQoJCQkJCWJvcmRlcjogbm9uZTsNCgkJCQkJaGVpZ2h0OiA8P3BocCBlY2hvICRjdXN0b21lclBob3Rvc0RhdGFbJ3RhYkltYWdlSGVpZ2h0J107ID8+cHg7DQoJCQkJCXdpZHRoOiBhdXRvOw0KCQkJCQlwYWRkaW5nOiAycHg7DQoJCQkJCWRpc3BsYXk6IG5vbmU7DQoJCQkJfQ0KDQogICAgICAgICAgLnVwbG9hZC1zdWNjZXNzZnVsew0KICAgICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICAgICAgICB9DQogICAgICAgICAgI3VwbG9hZC1jb250YWluZXJ7DQogICAgICAgICAgICAgIGhlaWdodDozMDBweDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAjdXBsb2FkLW1lc3NhZ2V7DQogICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAubWVzc2FnZS1jb250YWluZXJ7DQogICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjAlOw0KICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogNyU7DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAgIA0KCQkJCTwvc3R5bGU+DQoJCQkJPGRpdiBpZD0iQ3VzdG9tZXJQaG90b3NJbWFnZXMiPg0KCQkJCQk8c2NyaXB0Pg0KCQkJCQkJdmFyIGN1c3RvbWVySWdub3JlZFBob3RvcyA9ICc8P3BocCBlY2hvICRjdXN0b21lclBob3Rvc0RhdGFbJ0lnbm9yZWRQaG90b3MnXTsgPz4nOw0KCQkJCQk8L3NjcmlwdD4JCQkJCQ0KCQkJCQk8P3BocCBpZiAoJGN1c3RvbWVyUGhvdG9zRGF0YVsnVHdpdHRlckVuYWJsZSddID09ICd5ZXMnKSB7ICA/Pg0KCQkJCQkJPHNjcmlwdD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHdpdHRlclRhZyA9ICc8P3BocCBlY2hvICR0YWdWYXI7ID8+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdpbmRleC5waHA/cm91dGU9bW9kdWxlL2N1c3RvbWVycGhvdG9zd2lkZ2V0L3R3aXR0ZXJUYWdzJmhhc2h0YWc9Jyt0d2l0dGVyVGFnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRhdGEpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHsJCQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VzdG9tZXJJZ25vcmVkUGhvdG9zLmluZGV4T2YoZWxlbWVudC5pbWFnZSkgPT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNDdXN0b21lclBob3Rvc0ltYWdlcycpLmFwcGVuZCgnPGEgaHJlZj0iJytlbGVtZW50LmxpbmsrJyIgdGl0bGU9IkNsaWNrIHRvIHNlZSB0aGUgcGljdHVyZSBpbiBmdWxsIHNpemUiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iJytlbGVtZW50LmltYWdlKyciIGNsYXNzPSJDdXN0b21lclBob3Rvc0ltZyIgLz48L2E+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuQ3VzdG9tZXJQaG90b3NJbWcnKS5mYWRlSW4oJ3Nsb3cnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgIAkgPC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJ1cGxvYWQtbW9kYWwtcHJvZHVjdC10cGwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im15TW9kYWxMYWJlbCI+DQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIiByb2xlPSJkb2N1bWVudCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50IiA+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PD9waHAgZWNobyAkZW50cnlfcmVzaW15dWtsZTsgPz48L2gzPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIGlkPSJwcm9kdXRfcGFnZV90YWIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9InVwbG9hZC1jb250YWluZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtMTAgbWVzc2FnZS1jb250YWluZXIiID4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJ1cGxvYWQtbWVzc2FnZSI+PD9waHAgZWNobyAkZW50cnlfcmVzaW15dWtsZWFjaWtsYW1hOyA/Pjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBpZD0idXBsb2FkLWJ1dHRvbiI+PGkgY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdXBsb2FkIj48L2k+Jm5ic3A8P3BocCBlY2hvICRlbnRyeV9yZXNpbXl1a2xlYnV0b247ID8+PC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJwcmV2aWV3IiBzdHlsZT0iZGlzcGxheTpub25lOyB0ZXh0LWFsaWduOmNlbnRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImR6LXByZXZpZXcgZHotZmlsZS1wcmV2aWV3Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImR6LWRldGFpbHMiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBkYXRhLWR6LXRodW1ibmFpbCAvPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByb2dyZXNiYXJfY29udGFpbmVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcyBwcm9ncmVzcy1zdHJpcGVkIGFjdGl2ZSIgaWQ9ImJhciIgcm9sZT0icHJvZ3Jlc3NiYXIiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjEwMCIgYXJpYS12YWx1ZW5vdz0iMCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzLWJhciBwcm9ncmVzcy1iYXItc3VjY2VzcyIgc3R5bGU9IndpZHRoOjAlOyIgZGF0YS1kei11cGxvYWRwcm9ncmVzcz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkY3VzdG9tZXJQaG90b3NEYXRhWydVcGxvYWRlZFBob3Rvc0VuYWJsZSddID09ICd5ZXMnKSB7ICA/Pg0KICAgICAgICAgICAgICAgICAgICA8c2NyaXB0Pg0KICAgICAgICAgICAgICAgICAgICAgIHZhciBteURyb3B6b25lOw0KICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aWV3VGVtcGxhdGUgPSAkKCcjcHJldmlldycpLmh0bWwoKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdXBsb2FkLW1vZGFsLXByb2R1Y3QtdHBsJykub24oJ3Nob3duLmJzLm1vZGFsJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3VwbG9hZC1jb250YWluZXInKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBteURyb3B6b25lID0gbmV3IERyb3B6b25lKCJkaXYjcHJvZHV0X3BhZ2VfdGFiIiwgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICI8P3BocCBlY2hvICRjdXN0b21lcl9waG90b3NfdXBsb2FkX2FjdGlvbj8+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWxXaWR0aDogMjAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbEhlaWdodDogMjAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpZXdUZW1wbGF0ZTpwcmV2aWV3VGVtcGxhdGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2thYmxlOiIjdXBsb2FkLWJ1dHRvbiIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIG15RHJvcHpvbmUub24oJ3NlbmRpbmcnLCBmdW5jdGlvbihmaWxlLCB4aHIsIGZvcm1EYXRhKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnd2lkZ2V0X2N1c3RvbV90YWcnLCAnPD9waHAgZWNobyAkdGFnVmFyOyA/PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIG15RHJvcHpvbmUub24oInN1Y2Nlc3MiLCBmdW5jdGlvbihwcm9ncmVzcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcucHJvZ3Jlc3MtYmFyJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubW9kYWwtYm9keScpLmFwcGVuZCgnPHAgY2xhc3M9InVwbG9hZC1zdWNjZXNzZnVsIj5Zb3VyIHBob3RvIGhhcyBiZWVuIHVwbG9hZGVkIGFuZCB3aWxsIGJlIHJldmlld2VkIGJ5IGFuIGFkbWluaXN0cmF0b3I8L3A+JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3VwbG9hZC1idXR0b24nKS5jbGljayhmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjdXBsb2FkLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsJ25vbmUnKTsNCiAgICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgICAgICQoJyN1cGxvYWQtbW9kYWwtcHJvZHVjdC10cGwnKS5vbignaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnVwbG9hZC1zdWNjZXNzZnVsJykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIG15RHJvcHpvbmUuZGVzdHJveSgpDQogICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gJzw/cGhwIGVjaG8gJHRhZ1ZhcjsgPz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2luZGV4LnBocD9yb3V0ZT1tb2R1bGUvY3VzdG9tZXJwaG90b3MvZ2V0VXBsb2FkZWRQaG90b3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOidnZXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOnt0YWc6dGFnfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgeyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkYXRhKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b21lcklnbm9yZWRQaG90b3MuaW5kZXhPZihlbGVtZW50LmltYWdlX3VybCkgPT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNDdXN0b21lclBob3Rvc0ltYWdlcycpLmFwcGVuZCgnPGEgaHJlZj0iJytlbGVtZW50LmltYWdlX3ByZXZpZXcrJyIgdGl0bGU9IkNsaWNrIHRvIHNlZSB0aGUgcGljdHVyZSBpbiBmdWxsIHNpemUiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iJytlbGVtZW50LmltYWdlX3VybCsnIiBjbGFzcz0iQ3VzdG9tZXJQaG90b3NJbWciIC8+PC9hPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLkN1c3RvbWVyUGhvdG9zSW1nJykuZmFkZUluKCdzbG93Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJCTw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkYXR0cmlidXRlX2dyb3VwcykgeyA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgdGFiLWNvbnRlbnQgPD9waHAgaWYgKCRpc19hY3RpdmUpIHsgZWNobyAnYWN0aXZlJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/PiIgaWQ9InRhYi1zcGVjaWZpY2F0aW9uIj4NCiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1ib3JkZXJlZCBhdHRyaWJ1dGUiPg0KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRhdHRyaWJ1dGVfZ3JvdXBzIGFzICRhdHRyaWJ1dGVfZ3JvdXApIHsgPz4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dGJvZHk+DQogICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkYXR0cmlidXRlX2dyb3VwWydhdHRyaWJ1dGUnXSBhcyAkYXR0cmlidXRlKSB7ID8+DQogICAgICAgICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6MjE1cHg7IHRleHQtYWxpZ246bGVmdDsiPjw/cGhwIGVjaG8gJGF0dHJpYnV0ZVsnbmFtZSddOyA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6YXV0bzsiPjw/cGhwIGVjaG8gJGF0dHJpYnV0ZVsndGV4dCddOyA/PjwvdGQ+DQogICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgIDwvdGJvZHk+DQogICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHJldmlld19zdGF0dXMpIHsgPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIHRhYi1jb250ZW50IDw/cGhwIGlmICgkaXNfYWN0aXZlKSB7IGVjaG8gJ2FjdGl2ZSc7ICRpc19hY3RpdmUgPSBmYWxzZTsgfSA7Pz4iIGlkPSJ0YWItcmV2aWV3IiA8P3BocCBpZiAoJHJhdGluZyk6ID8+PD9waHAgZW5kaWY7ID8+Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcmF0aW5nKTogPz4NCiAgICAgICAgICAgICAgICA8bWV0YSA9InJhdGluZ1ZhbHVlIiBjb250ZW50PSI8P3BocCBlY2hvICRyYXRpbmc7ID8+IiAvPg0KICAgICAgICAgICAgICAgIDxtZXRhID0icmV2aWV3Q291bnQiIGNvbnRlbnQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X251bV9yZXZpZXdzJyk7ID8+IiAvPg0KICAgICAgICAgICAgICAgIDxtZXRhID0iYmVzdFJhdGluZyIgY29udGVudD0iNSIgLz4NCiAgICAgICAgICAgICAgICA8bWV0YSA9IndvcnN0UmF0aW5nIiBjb250ZW50PSIxIiAvPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz0iZm9ybS1ob3Jpem9udGFsIiBpZD0iZm9ybS1yZXZpZXciPg0KICAgICAgICAgICAgICAgIDxkaXYgaWQ9InJldmlldyI+PC9kaXY+DQogICAgICAgICAgICAgICAgPGgyIGlkPSJyZXZpZXctdGl0bGUiPjw/cGhwIGVjaG8gJHRleHRfd3JpdGU7ID8+PC9oMj4NCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJldmlld19ndWVzdCkgeyA/Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcmVxdWlyZWQiPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIiBmb3I9ImlucHV0LW5hbWUiPjw/cGhwIGVjaG8gJGVudHJ5X25hbWU7ID8+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5hbWUiIHZhbHVlPSI8P3BocCBlY2hvIHZlcnNpb25fY29tcGFyZShWRVJTSU9OLCAnMi4yJywgJzwnKSA/ICcnIDogJGN1c3RvbWVyX25hbWU7ID8+IiBpZD0iaW5wdXQtbmFtZSIgY2xhc3M9ImZvcm0tY29udHJvbCIgLz4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcmVxdWlyZWQiPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIiBmb3I9ImlucHV0LXJldmlldyI+PD9waHAgZWNobyAkZW50cnlfcmV2aWV3OyA/PjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ0ZXh0IiByb3dzPSI1IiBpZD0iaW5wdXQtcmV2aWV3IiBjbGFzcz0iZm9ybS1jb250cm9sIj48L3RleHRhcmVhPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWJsb2NrIj48P3BocCBlY2hvICR0ZXh0X25vdGU7ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJlcXVpcmVkIj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCI+PD9waHAgZWNobyAkZW50cnlfcmF0aW5nOyA/PjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyA8P3BocCBlY2hvICRlbnRyeV9iYWQ7ID8+Jm5ic3A7DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmF0aW5nIiB2YWx1ZT0iMSIgLz4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmF0aW5nIiB2YWx1ZT0iMiIgLz4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmF0aW5nIiB2YWx1ZT0iMyIgLz4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmF0aW5nIiB2YWx1ZT0iNCIgLz4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmF0aW5nIiB2YWx1ZT0iNSIgLz4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PD9waHAgZWNobyAkZW50cnlfZ29vZDsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8YnIvPg0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICh2ZXJzaW9uX2NvbXBhcmUoVkVSU0lPTiwgJzIuMC4yJywgJzwnKSk6ID8+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByZXF1aXJlZCI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwiIGZvcj0iaW5wdXQtY2FwdGNoYSI+PD9waHAgZWNobyAkZW50cnlfY2FwdGNoYTsgPz48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2FwdGNoYSIgdmFsdWU9IiIgaWQ9ImlucHV0LWNhcHRjaGEiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIC8+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiI+IDxpbWcgc3JjPSJpbmRleC5waHA/cm91dGU9dG9vbC9jYXB0Y2hhIiBhbHQ9IiIgaWQ9ImNhcHRjaGEiIC8+IDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2VpZiAodmVyc2lvbl9jb21wYXJlKFZFUlNJT04sICcyLjEnLCAnPCcpKTogPz4NCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHNpdGVfa2V5KSB7ID8+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnLXJlY2FwdGNoYSIgZGF0YS1zaXRla2V5PSI8P3BocCBlY2hvICRzaXRlX2tleTsgPz4iPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGNhcHRjaGE7ID8+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJidXR0b24tcmV2aWV3IiBkYXRhLWxvYWRpbmctdGV4dD0iPD9waHAgZWNobyAkdGV4dF9sb2FkaW5nOyA/PiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBidXR0b24iPjw/cGhwIGVjaG8gJGJ1dHRvbl9jb250aW51ZTsgPz48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkdGV4dF9sb2dpbjsgPz4NCiAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgJGluZGV4ID0gMDsgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdhZGRpdGlvbmFsX3Byb2R1Y3RfdGFicycsIGFycmF5KCkpIGFzICR0YWIpOiAkaW5kZXgrKzsgPz4NCiAgICAgICAgICAgICAgPGRpdiBpZD0iYWRkaXRpb25hbC1wcm9kdWN0LXRhYi08P3BocCBlY2hvICRpbmRleDsgPz4iIGNsYXNzPSJ0YWItcGFuZSB0YWItY29udGVudCBqb3VybmFsLWN1c3RvbS10YWIgPD9waHAgaWYgKCRpc19hY3RpdmUpIHsgZWNobyAnYWN0aXZlJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/PiI+PD9waHAgZWNobyAkdGFiWydjb250ZW50J107ID8+PC9kaXY+DQogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPD9waHAgaWYgKCRjb2x1bW5fbGVmdCAmJiAkY29sdW1uX3JpZ2h0KSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tNic7ID8+DQogICAgICAgIDw/cGhwIH0gZWxzZWlmICgkY29sdW1uX2xlZnQgfHwgJGNvbHVtbl9yaWdodCkgeyA/Pg0KICAgICAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTYnOyA/Pg0KICAgICAgICA8P3BocCB9IGVsc2UgeyA/Pg0KICAgICAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTQnOyA/Pg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDxkaXYgY2xhc3M9InJpZ2h0Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfdGl0bGVfcG9zaXRpb24nLCAndG9wJykgPT09ICdyaWdodCcpOiA/Pg0KICAgICAgICAgIDxoMSBjbGFzcz0iaGVhZGluZy10aXRsZSI+PD9waHAgZWNobyAkaGVhZGluZ190aXRsZTsgPz48L2gxPg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgIDxkaXYgaWQ9InByb2R1Y3QiIGNsYXNzPSJwcm9kdWN0LW9wdGlvbnMiPg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdhZGRpdGlvbmFsX3Byb2R1Y3RfZGVzY3JpcHRpb25fdG9wJywgYXJyYXkoKSkgYXMgJHRhYik6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJqb3VybmFsLWN1c3RvbS10YWIiPg0KICAgICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnaGFzX2ljb24nXSk6ID8+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrLWljb24gYmxvY2staWNvbi1sZWZ0IiBzdHlsZT0iPD9waHAgZWNobyAkdGFiWydpY29uX2NzcyddOyA/PiI+PD9waHAgZWNobyAkdGFiWydpY29uJ107ID8+PC9kaXY+DQogICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnbmFtZSddKTogPz4NCiAgICAgICAgICAgICAgPGgzPjw/cGhwIGVjaG8gJHRhYlsnbmFtZSddOyA/PjwvaDM+DQogICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICA8P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgZGVzY3JpcHRpb24iPg0KICAgICAgICAgICAgPD9waHAgaWYoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3ZpZXdzJykpOiA/Pg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwcm9kdWN0LXZpZXdzLWNvdW50Ij48aW1nIHN0eWxlPSJtYXJnaW4tdG9wOi0xNHB4OyJzcmM9Imh0dHBzOi8vd3d3LmV0aWNhcmV0Z28uY29tL2ltYWdlL2dyYWZpa2xlci91Y3JldHNpei1rYXJnby1hbmltZS5naWYiPjwvbGk+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnbWFudWZhY3R1cmVyX2ltYWdlJykgPT0gJ29uJyk6ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9ImJyYW5kLWxvZ28iPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcnM7ID8+IiBjbGFzcz0iYnJhbmQtaW1hZ2UiPg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlOyA/PiIgd2lkdGg9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcl9pbWFnZV93aWR0aDsgPz4iIGhlaWdodD0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlX2hlaWdodDsgPz4iIGFsdD0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyOyA/PiIgLz4NCiAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgPD9waHAgaWYoaXNzZXQoJG1hbnVmYWN0dXJlcl9pbWFnZV9uYW1lKSAmJiAkbWFudWZhY3R1cmVyX2ltYWdlX25hbWUpOiA/Pg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcnM7ID8+IiBjbGFzcz0iYnJhbmQtbG9nby10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlX25hbWU7ID8+DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJG1hbnVmYWN0dXJlcikgeyA/Pg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwLWJyYW5kIj48P3BocCBlY2hvICR0ZXh0X21hbnVmYWN0dXJlcjsgPz4gPGEgaHJlZj0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyczsgPz4iPjw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcjsgPz48L2E+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwLW1vZGVsIj48P3BocCBlY2hvICR0ZXh0X21vZGVsOyA/PiA8c3BhbiBjbGFzcz0icC1tb2RlbCI+PD9waHAgZWNobyAkbW9kZWw7ID8+PC9zcGFuPjwvbGk+DQogICAgICAgICAgICANCg0KCQkJDQoJCQkNCgkJCTw/cGhwIGlmICgkcmV3YXJkKSB7ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9InAtcmV3YXJkcyI+PD9waHAgZWNobyAkdGV4dF9yZXdhcmQ7ID8+IDxzcGFuIGNsYXNzPSJwLXJld2FyZHMiPjw/cGhwIGVjaG8gJHJld2FyZDsgPz48L3NwYW4+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icC1zdG9jayI+PD9waHAgZWNobyAkdGV4dF9zdG9jazsgPz4gPHNwYW4gY2xhc3M9ImpvdXJuYWwtc3RvY2sgPD9waHAgZWNobyBpc3NldCgkc3RvY2tfc3RhdHVzKSA/ICRzdG9ja19zdGF0dXMgOiAnJzsgPz4iPjw/cGhwIGVjaG8gJHN0b2NrOyA/Pjwvc3Bhbj48L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPD9waHAgaWYoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3NvbGQnKSk6ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1zb2xkLWNvdW50LXRleHQiPjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3NvbGQnKTsgPz48L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJGRhdGVfZW5kKSAmJiAkZGF0ZV9lbmQgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaG93X2NvdW50ZG93bl9wcm9kdWN0X3BhZ2UnLCAnb24nKSA9PSAnb24nKTogPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3VudGRvd24td3JhcHBlciI+PGRpdiBjbGFzcz0iZXhwaXJlLXRleHQiPjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdjb3VudGRvd25fcHJvZHVjdF9wYWdlX3RpdGxlJyk7ID8+PC9kaXY+PGRpdiBjbGFzcz0iY291bnRkb3duIj48L2Rpdj48L2Rpdj4NCiAgICAgICAgICA8c2NyaXB0PkpvdXJuYWwuY291bnRkb3duKCQoJy5yaWdodCAuY291bnRkb3duJyksICc8P3BocCBlY2hvICRkYXRlX2VuZDsgPz4nKTs8L3NjcmlwdD4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8P3BocCBpZiAoJHByaWNlKSB7ID8+DQogICAgDQoJDQoJCQkJDQoJCQkJCQkJICAJCQkJPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7IG1hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBlcmRlLW9sY3UiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHVydW5fdGlwID09ICJzdG9yIiB8fCAkdXJ1bl90aXAgPT0gImphbHV6aSIpIHsgPz4NCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE0cHg7IG1hcmdpbi1ib3R0b206NnB4OyI+PGI+KiA8P3BocCBlY2hvICRlbnRyeV9lbmdpcmluaXo7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoJCQkJCTxzZWxlY3QgbmFtZT0ib3B0aW9uW2VuXSIgaWQ9InNlbiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPi0tIDw/cGhwIGVjaG8gJGVudHJ5X3BlcmRlbmluZW5pcGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRlbjskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgPC9saT4NCgkJCQkgDQoJCQkJIA0KDQoJCQkJPGxpIHN0eWxlPSJmbG9hdDpyaWdodDsiPg0KCQkJCSA8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTRweDsgbWFyZ2luLWJvdHRvbTo2cHg7Ij48Yj4qIDw/cGhwIGVjaG8gJGVudHJ5X2JveWdpcmluaXo7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgIDxzZWxlY3QgbmFtZT0ib3B0aW9uW2JveV0iIGlkPSJzYm95Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+LS0gPD9waHAgZWNobyAkZW50cnlfcGVyZGVuaW5ib3l1cGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRib3k7JGkrKykgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRpOyA/PiI+PD9waHAgZWNobyAkaTsgPz4gY208L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC9saT4NCg0KDQoNCg0KDQogICAgICAgICAgICAgIDw/cGhwIH1lbHNlIGlmICgkdXJ1bl90aXAgPT0gInBlcmRlIikgeyA/Pg0KICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTRweDsgbWFyZ2luLWJvdHRvbTo2cHg7Ij48Yj4qIDw/cGhwIGVjaG8gJGVudHJ5X2VuZ2lyaW5pejsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIA0KCQkJCQk8c2VsZWN0IG5hbWU9Im9wdGlvbltlbl0iIGlkPSJwZW4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSA8P3BocCBlY2hvICRlbnRyeV9wZXJkZW5pbmVuaXN0YW5kYXJ0cGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRlbjskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICA8L2xpPg0KDQoNCiAgICAgICAgICAgICAgICAgICA8bGk+DQoJCQkJIDxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjxiPiogPD9waHAgZWNobyAkZW50cnlfYm95Z2lyaW5pejsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQ0KCQkJCQkJPHNlbGVjdCBuYW1lPSJvcHRpb25bYm95XSIgaWQ9InBib3kiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSA8P3BocCBlY2hvICRlbnRyeV9wZXJkZW5pbmJveXVzdGFuZGFydHBsYWNlOyA/PiAtLTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3IgKCRpPTE4MDskaTw9JGJveTskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQoJCQkJCQkNCiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJ3aWR0aDo5OCU7IG1hcmdpbi10b3A6MTVweDsgbWFyZ2luLWJvdHRvbTowcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjxiPjw/cGhwIGVjaG8gJGVudHJ5X3BpbGU7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9Im9wdGlvbltwaWxlXSIgaWQ9InBwaWxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMi41Ij48P3BocCBlY2hvICRlbnRyeV9waWxlc2V5cmVrOyA/Pjwvb3B0aW9uPg0KCQkJCQkJICA8b3B0aW9uIHZhbHVlPSIyLjc1Ij48P3BocCBlY2hvICRlbnRyeV9waWxlb3J0YTsgPz48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+PD9waHAgZWNobyAkZW50cnlfcGlsZXNpazsgPz48L29wdGlvbj4NCg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgPC9saT4NCg0KICAgICAgICAgICAgICAgICAgPD9waHAgfWVsc2UgaWYgKCR1cnVuX3RpcCA9PSAicnVzdGlrLXRlc3QiKSB7ID8+DQoNCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjw/cGhwIGVjaG8gJGVudHJ5X2ViYXRnaXI7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9Im9wdGlvbltydXN0aWtdIiBpZD0icGViYXQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSBzZcOnaW5peiAtLTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMDAiPjEwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNTAiPjE1MCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMDAiPjIwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyNTAiPjI1MCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIzMDAiPjMwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvbGk+DQoNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH1lbHNlIGlmICgkdXJ1bl90aXAgPT0gInZhcmFrLXRlc3QiKSB7ID8+DQoNCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjw/cGhwIGVjaG8gJGVudHJ5X2ViYXRnaXI7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQk8c2VsZWN0IG5hbWU9Im9wdGlvblt2YXJha10iIGlkPSJwZWJhdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPi0tIHNlw6dpbml6IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjU1Ij41NSBjbSdlIGthZGFyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEwNSI+MTA1IGNtJ2Uga2FkYXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTU1Ij4xNTUgY20nZSBrYWRhcjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMDUiPjIwNSBjbSdlIGthZGFyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjI4MCI+MjgwIGNtJ2Uga2FkYXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4gICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvbGk+DQoNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCg0KDQogICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPC9kaXY+DQoJDQoJDQoJCSAgPHVsICBjbGFzcz0ibGlzdC11bnN0eWxlZCBwcmljZSI+DQogICAgICAgICAgICA8bWV0YSA9Iml0ZW1Db25kaXRpb24iIC8+DQogICAgICAgICAgICA8bWV0YSA9InByaWNlQ3VycmVuY3kiIGNvbnRlbnQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3ByaWNlX2N1cnJlbmN5Jyk7ID8+IiAvPg0KICAgICAgICAgICAgPG1ldGEgPSJwcmljZSIgY29udGVudD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcHJpY2UnKTsgPz4iIC8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2luX3N0b2NrJykgPT09ICd5ZXMnKTogPz4NCiAgICAgICAgICAgIDxsaW5rID0iYXZhaWxhYmlsaXR5IiAgaHJlZj0iaHR0cDovL3NjaGVtYS5vcmcvSW5TdG9jayIgLz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCEkc3BlY2lhbCkgeyA/Pg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwcm9kdWN0LXByaWNlIj48P3BocCBlY2hvICRwcmljZTsgPz48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icHJpY2Utb2xkIj48P3BocCBlY2hvICRwcmljZTsgPz48L2xpPg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwcmljZS1uZXciPjw/cGhwIGVjaG8gJHNwZWNpYWw7ID8+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGF4KSB7ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9InByaWNlLXRheCI+PD9waHAgZWNobyAkdGV4dF90YXg7ID8+IDw/cGhwIGVjaG8gJHRheDsgPz48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRwb2ludHMpIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icmV3YXJkIj48c21hbGw+PD9waHAgZWNobyAkdGV4dF9wb2ludHM7ID8+IDw/cGhwIGVjaG8gJHBvaW50czsgPz48L3NtYWxsPjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGRpc2NvdW50cykgeyA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGRpc2NvdW50cyBhcyAkZGlzY291bnQpIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0iZGlzY291bnRzIj48P3BocCBlY2hvICRkaXNjb3VudFsncXVhbnRpdHknXTsgPz48P3BocCBlY2hvICR0ZXh0X2Rpc2NvdW50OyA/Pjw/cGhwIGVjaG8gJGRpc2NvdW50WydwcmljZSddOyA/PjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgICA8P3BocCB9ID8+DQoJCQkJICANCgkJCQkgIAkJICAJCSAgIDw/cGhwIGlmICgkY2F0ZWdvcmllcykgeyA/Pg0KCQkJCTw/cGhwIGZvcmVhY2ggKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkgeyA/Pg0KCQkJCTwhLS0gU3RvciBwZXJkZSAtLT4NCgkJCQkJPD9waHAgaWYgKCRjYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXSA9PSAnNTknKSB7ID8+IA0KCQkJCQkJPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTotMTVweDsiPg0KCTxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7DQoJYm9yZGVyOiAxcHggc29saWQgI2RjZGNkYzsNCglwYWRkaW5nOiAxMHB4Ow0KCW1hcmdpbi1ib3R0b206IDE1cHg7DQoJLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCgktd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpOw0KCWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpOw0KCWNvbG9yOiAjNTU1NTU1OyI+R2lybWnFnyBvbGR1xJ91bnV6IGVuIMO2bMOnw7xzw7wgbWVrYW5pem1hIGRhaGlsIMO2bMOnw7xkw7xyLiBLdW1hxZ8gNCBjbSBla3NpayBrZXNpbG1la3RlZGlyLiDDlmzDp8O8ecO8IGJ1bmEgZ8O2cmUgZ2lyaW5pei4gKMOWbMOnw7xsZXJpbml6aSBzZcOndGlrdGVuIHNvbnJhIHR1dGFyIG90b21hdGlrIG9sYXJhayBoZXNhcGxhbmFjYWt0xLFyLik8L2Rpdj48L2Rpdj4NCgkJCQkJPD9waHAgfSA/Pg0KCQkJCQk8IS0tIFplYnJhIHBlcmRlIC0tPg0KCQkJCQk8P3BocCBpZiAoJGNhdGVnb3J5WydjYXRlZ29yeV9pZCddID09ICc2NicpIHsgPz4NCgkJCQkJCTxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206LTE1cHg7Ij4NCgk8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzOw0KCWJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7DQoJcGFkZGluZzogMTBweDsNCgltYXJnaW4tYm90dG9tOiAxNXB4Ow0KCS1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7DQoJLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCglib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCgljb2xvcjogIzU1NTU1NTsiPkdpcm1pxZ8gb2xkdcSfdW51eiBlbiDDtmzDp8O8c8O8IG1la2FuaXptYSBkYWhpbCDDtmzDp8O8ZMO8ci4gS3VtYcWfIDQgY20gZWtzaWsga2VzaWxtZWt0ZWRpci4gw5Zsw6fDvHnDvCBidW5hIGfDtnJlIGdpcmluaXouICjDlmzDp8O8bGVyaW5pemkgc2XDp3Rpa3RlbiBzb25yYSB0dXRhciBvdG9tYXRpayBvbGFyYWsgaGVzYXBsYW5hY2FrdMSxci4pPC9kaXY+PC9kaXY+DQoJCQkJCTw/cGhwIH0gPz4NCgkJCQkJDQoJCQkJCQ0KCQkJCTw/cGhwIH0gPz4NCgkJCTw/cGhwIH0gPz4NCgkJCQkgIA0KDQogICAgICAgICAgPCEtLTxzdHlsZT4NCiAgICAgICAgICAjc2VjZWtsZXJMaXN0ZXNzIGxpew0KCQkJICBsaXN0LXN0eWxlOm5vbmU7DQoJCQkgIGxpc3Qtc3R5bGUtdHlwZTpub25lOw0KCQkJICBkaXNwbGF5OmJsb2NrOw0KCQkJICBmbG9hdDpsZWZ0Ow0KCQkJICBtYXJnaW4tbGVmdDoxMHB4Ow0KCQkgIH0NCgkJICAjc2VjZWtsZXJMaXN0ZXNzIGxpew0KCQkJICB3aWR0aDo0MCU7DQoJCQkgIA0KCQkJIA0KCQkJICANCgkJICB9DQogICAgICAgICAgDQogICAgICAgICAgPC9zdHlsZT4gLS0+DQoNCg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRvcGxhbS1oZXNhcCIgaWQ9InRvcGxhbS1oZXNhcCIgdmFsdWU9IiIvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJmaXlhdHR0IiB2YWx1ZT0iPD9waHAgZWNobyAkZml5YXQ7ID8+Ii8+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImthbXBhbnlhYWEiIHZhbHVlPSI8P3BocCBlY2hvICRrYW1wYW55YSA/PiIvPg0KICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZml5YXR0dDIiIHZhbHVlPSI8P3BocCBlY2hvICRmaXlhdDI7ID8+Ii8+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImthbXBhbnlhYWEyIiB2YWx1ZT0iPD9waHAgZWNobyAka2FtcGFueWEyID8+Ii8+DQoNCiAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJCSAgDQoJCSAgZnVuY3Rpb24gaGVzYXBsYTEyMygpew0KCQkJICANCgkJCSAgJCgnI3NlbicpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkgIH0NCiAgICAgICAgICAgICAgDQoJCQkvLyAgcXVhbnRpdHkgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKTsNCg0KICAgICAgICAgICAgICAkKCcjc2VuJykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3NlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNzYm95JykudmFsKCk7DQoJCQkJIAlpZiAoYm95PD0yMDApew0KCQkJCQkgIGJveSA9IDIwMDsNCgkJCQkJfWVsc2V7DQoJCQkJCQl2YXIgYnNheSA9IGJveS5zdWJzdHIoMSwgMik7DQoJCQkJCQl2YXIgYnNvbiA9IGJveS5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChic29uIT0wKSB7DQoJCQkJCQkJYnNvbiA9IDEwIC0gYnNvbjsNCgkJCQkJCQlib3kgPSBwYXJzZUludChib3kpICsgcGFyc2VJbnQoYnNvbik7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGVuPD0xMDApew0KCQkJCQkgIGVuID0gMTAwOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCXZhciBlc2F5ID0gZW4uc3Vic3RyKDEsIDIpOw0KCQkJCQkJdmFyIGVzb24gPSBlbi5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChlc29uIT0wKSB7DQoJCQkJCQkJZXNvbiA9IDEwIC0gZXNvbjsNCgkJCQkJCQllbiA9IHBhcnNlSW50KGVuKSArIHBhcnNlSW50KGVzb24pOw0KCQkJCQkJfQ0KCQkJCQl9DQoNCiAgICAgICAgICAgICAgICAgIGlmIChib3kgPiAwKXsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRldCA9IHBhcnNlSW50KCQoIiNpbnB1dC1xdWFudGl0eSIpLnZhbCgpKTsNCiAgICAgICAgICAgICAgICAgICAgICBtZXRyZT0gKGVuKmJveSphZGV0KS8xMDAwMDsgDQoJCQkJCSAgbWV0cmU9bWV0cmUudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjcGVyZGUtaGVzYXAnKS5odG1sKCIiKTsNCiAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgaWYgKCQoJyNzYm95JykudmFsKCk+MCl7DQoJCQkJCQkJJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQoJCQkJCQkJJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIG1ldHJlICsgJzwvc3Bhbj4gbTxzdXA+Mjwvc3VwPiwgPD9waHAgZWNobyAkZW50cnlfc29udWN0dXRhcjsgPz4gPHNwYW4gaWQ9ImZpeWF0Ij4nICsgc29udWMyICsgJzwvc3Bhbj4gPD9waHAgZWNobyAkdGhpcy0+Y3VycmVuY3ktPmdldENvZGUoKTsgPz4gKyA8P3BocCBlY2hvICRlbnRyeV9hcnRpdmVyZ2k7ID8+Jyk7DQoJCQkJCSAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICQoJyNzYm95JykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3NlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNzYm95JykudmFsKCk7DQoJCQkJIAlpZiAoYm95PD0yMDApew0KCQkJCQkgIGJveSA9IDIwMDsNCgkJCQkJfWVsc2V7DQoJCQkJCQl2YXIgYnNheSA9IGJveS5zdWJzdHIoMSwgMik7DQoJCQkJCQl2YXIgYnNvbiA9IGJveS5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChic29uIT0wKSB7DQoJCQkJCQkJYnNvbiA9IDEwIC0gYnNvbjsNCgkJCQkJCQlib3kgPSBwYXJzZUludChib3kpICsgcGFyc2VJbnQoYnNvbik7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGVuPD0xMDApew0KCQkJCQkgIGVuID0gMTAwOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCXZhciBlc2F5ID0gZW4uc3Vic3RyKDEsIDIpOw0KCQkJCQkJdmFyIGVzb24gPSBlbi5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChlc29uIT0wKSB7DQoJCQkJCQkJZXNvbiA9IDEwIC0gZXNvbjsNCgkJCQkJCQllbiA9IHBhcnNlSW50KGVuKSArIHBhcnNlSW50KGVzb24pOw0KCQkJCQkJfQ0KCQkJCQl9CQkJCSAgDQoJCQkJCSAgaWYgKGVuID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbipib3kqYWRldCkvMTAwMDA7IG1ldHJlPW1ldHJlLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuaHRtbCgiIik7DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJICBpZiAoJCgnI3NlbicpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG08c3VwPjI8L3N1cD4sIDw/cGhwIGVjaG8gJGVudHJ5X3NvbnVjdHV0YXI7ID8+IDxzcGFuIGlkPSJmaXlhdCI+JyArIHNvbnVjMiArICc8L3NwYW4+IDw/cGhwIGVjaG8gJHRoaXMtPmN1cnJlbmN5LT5nZXRDb2RlKCk7ID8+ICsgPD9waHAgZWNobyAkZW50cnlfYXJ0aXZlcmdpOyA/PicpOw0KCQkJCQkgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9KTsNCg0KDQogICAgICAgICAgICAgICQoJyNwZW4nKS5jaGFuZ2UoZnVuY3Rpb24gKCl7DQogICAgICAgICAgICAgICAgICB2YXIgZW4gPSAkKCcjcGVuJykudmFsKCk7DQogICAgICAgICAgICAgICAgICB2YXIgYm95ID0gJCgnI3Bib3knKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIHZhciBwaWxlID0gJCgnI3BwaWxlJykudmFsKCk7DQogICAgICAgICAgICAgICAgICBpZiAoYm95ID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbioxKmFkZXQqcGlsZSkvMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyNwZXJkZS1oZXNhcCcpLmh0bWwoIiIpOw0KICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCgkJCQkJICBpZigkKCcjcGJveScpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG10LCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCgkJCQkJICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoJyNwYm95JykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3BlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNwYm95JykudmFsKCk7DQogICAgICAgICAgICAgICAgICB2YXIgcGlsZSA9ICQoJyNwcGlsZScpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgaWYgKGVuID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbioxKmFkZXQqcGlsZSkvMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyNwZXJkZS1oZXNhcCcpLmh0bWwoIiIpOw0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCgkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJICBpZiAoJCgnI3BlbicpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG10LCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCgkJCQkJICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoJyNwcGlsZScpLmNoYW5nZShmdW5jdGlvbiAoKXsNCiAgICAgICAgICAgICAgICAgIHZhciBlbiA9ICQoJyNwZW4nKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIHZhciBib3kgPSAkKCcjcGJveScpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIHBpbGUgPSAkKCcjcHBpbGUnKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChlbiA+IDApew0KICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGV0ID0gcGFyc2VJbnQoJCgiI2lucHV0LXF1YW50aXR5IikudmFsKCkpOw0KICAgICAgICAgICAgICAgICAgICAgIG1ldHJlPSAoZW4qMSphZGV0KnBpbGUpLzEwMDsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjcGVyZGUtaGVzYXAnKS5odG1sKCIiKTsNCiAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIG1ldHJlICsgJzwvc3Bhbj4gbXQsIDw/cGhwIGVjaG8gJGVudHJ5X3NvbnVjdHV0YXI7ID8+IDxzcGFuIGlkPSJmaXlhdCI+JyArIHNvbnVjMiArICc8L3NwYW4+IDw/cGhwIGVjaG8gJHRoaXMtPmN1cnJlbmN5LT5nZXRDb2RlKCk7ID8+ICsgPD9waHAgZWNobyAkZW50cnlfYXJ0aXZlcmdpOyA/PicpOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICQoJyNwZWJhdCcpLmNoYW5nZShmdW5jdGlvbiAoKXsNCiAgICAgICAgICAgICAgICAgIHZhciBlYmF0ID0gJCgnI3BlYmF0JykudmFsKCk7DQoNCiAgICAgICAgICAgICAgICAgIGlmIChlYmF0ID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlYmF0KmFkZXQpLzEwMDAwMDA7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuaHRtbCgiIik7DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgDQoJCQkJCSAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIGViYXQqYWRldCArICc8L3NwYW4+IGNtLCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICA8L3NjcmlwdD4NCgkJDQoJCSAgPD9waHAgaWYgKCRvcHRpb25zKSB7ID8+DQogICAgPHNjcmlwdD4NCiAgICAgICAgZnVuY3Rpb24gc2F5ZmFsYShzYXlmYSxpZCxpc2xlbSl7DQoNCiAgICAgICAgICAgIHZhciBzb3JndT0gJCgiaW5wdXRbdHlwZT0ncmFkaW8nXVtuYW1lPSdvcHRpb25bIitpZCsiXSddOmNoZWNrZWQiKS52YWwoKTsNCgkJCQkNCiAgICAgICAgICAgICAgICBpZiAoaXNsZW0gPT0gJysnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChzb3JndT09IiIpIHsgJCgnI3NlcGV0ZS1la2xlJykudHJpZ2dlcignY2xpY2snKTsgfWVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgc2F5ZmEpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5hZGltJyArIChwYXJzZUludChzYXlmYSkgKyAxKSkuc2hvdygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgc2F5ZmEpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgKHBhcnNlSW50KHNheWZhKSAtIDEpKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgIDwvc2NyaXB0Pg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIDxkaXYgaWQ9ImZiZmFuY3kiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoNCg0KICAgIDxkaXYgaWQ9InNlY2VuZWtsZXIiPg0KICAgICAgPGRpdiBpZD0ib3B0aW9ucyIgY2xhc3M9Im9wdGlvbnMiPg0KICAgICAgICA8P3BocCAkeGo9MDsgIGZvcmVhY2goJG9wdGlvbnMgYXMgJHNheWZhKXsgJHNheWZhX3NheVtdPSRzYXlmYVsnc2F5ZmEnXTt9ICRzYXlmYWxhbmRpcm1hID0gIG1heCgkc2F5ZmFfc2F5KTsgICAkc2F5ZmFsYXIgPSBjb3VudCgkb3B0aW9ucyk7IA0KICAgICAgICANCiAgICAgICAgJHBvcHVwX2FjX25ldyA9IGZhbHNlOw0KICAgICAgICANCiAgICAgICAgDQogICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbikgeyANCiAgICAgICAgDQogICAgICAgaWYoJG9wdGlvblsic2F5ZmEiXSA+IDApew0KICAgICAgICANCiAgICAgICAgJHBvcHVwX2FjX25ldyA9IHRydWU7DQogICAgICAgIA0KICAgICAgICA/Pg0KICAgICAgICA8P3BocCAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAnc2VsZWN0JykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiBvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWyd0eXBlJ107ID8+Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJhY2lsaXJfbGlzdGVsZXIiIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSI+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPjw/cGhwIGVjaG8gJHRleHRfc2VsZWN0OyA/Pjwvb3B0aW9uPg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJG9wdGlvblsncHJvZHVjdF9vcHRpb25fdmFsdWUnXSBhcyAkb3B0aW9uX3ZhbHVlKSB7ID8+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiBkYXRhLWltYWdlPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ2ltYWdlJ107ID8+Ij48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uX3ZhbHVlWydwcmljZSddKSB7ID8+DQogICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPC9vcHRpb24+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAncmFkaW8nKSB7ID8+DQogICAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGRhdGEtc2F5ZmE9Ijw/cGhwIGVjaG8gJG9wdGlvblsnc2F5ZmEnXTsgPz4iIGNsYXNzPSJvcHRpb24gb3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsndHlwZSddOyA/PiAgYWRpbTw/cGhwIGVjaG8gJG9wdGlvblsnc2F5ZmEnXTsgPz4iPg0KICAgICAgICAgICAgDQoJCQkgIA0KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+DQoNCiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6MTAwJTsgcGFkZGluZy10b3A6NXB4OyBtYXJnaW4tYm90dG9tOjEwcHg7IGJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjY2NjOyI+DQogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHR5YXppc2IiPjxiPjw/cGhwIGVjaG8gJG9wdGlvblsnbmFtZSddOyA/PjwvYj48L3NwYW4+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHVsIGlkPSJvcHRpb24tc2VjIj4NCg0KICAgICAgICAgIDw/cGhwICRpeD0xOyBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgID8+DQogICAgICAgICAgICAgICAgPGxpPg0KCQkJCQk8ZGl2IGNsYXNzPSJsaXN0Ij4NCgkJCQkJCTxsYWJlbCBmb3I9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+Ij4NCgkJCQkJCSAgPGltZyBzcmM9Ijw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsnaW1hZ2UnXTsgPz4iIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCIgYWx0PSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4iICBzdHlsZT0iaGVpZ2h0OiAxMDBweCAhIGltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTotNXB4OyIgLz4NCgkJCQkJCTwvbGFiZWw+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJsYWJlbC10aXRsZSI+DQoJCQkJCTxpbnB1dCBzdHlsZT0iZmxvYXQ6IGxlZnQiIGRhdGEtcHJpY2U9IiIgdHlwZT0icmFkaW8iIDw/cGhwIGVjaG8gKCRpeD09MSkgPyAiY2hlY2tlZCIgOiAiIjsgPz4gbmFtZT0ib3B0aW9uWzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz5dIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgZGF0YS1pbWFnZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydpbWFnZSddOyA/PiIgaWQ9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiAvPg0KICAgICAgICAgICAgICAgICAgIDxiPjw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsnbmFtZSddOyA/Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvbl92YWx1ZVsncHJpY2UnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgIDwvYj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9saT4NCiAgICAgICAgICA8P3BocCAkaXgrKzsgJHhqKys7IH0gPz4NCiAgICAgICAgICAgIDwvdWw+DQoJCQk8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+DQoJCQkgPD9waHAgDQoJCQkgaWYgKCRvcHRpb25bJ3NheWZhX2Jhc2xpayddPT0xKSB7ID8+CQkJIA0KCQkJCTxkaXYgPg0KCQkJCQkgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OjVweDt3aWR0aDo0OSUiPg0KCQkJCQkJICA8P3BocCBpZiAoJG9wdGlvblsnc2F5ZmEnXT09ICRzYXlmYWxhbmRpcm1hKXsgPz4NCgkJCQkJCSAgPGJ1dHRvbiBpZD0ic2VwZXRlLWVrbGUiIGNsYXNzPSJidG4tZXZ5ZWxsb3ciIG5hbWU9IlNlcGV0ZUF0Ij48P3BocCBlY2hvICRlbnRyeV9zZXBldGVla2xlOyA/PjwvYnV0dG9uPiAgICAgICAgICAgICAgICAgIA0KCQkJCQkJICA8P3BocCB9ZWxzZXsgPz4NCgkJCQkJCSAgPGJ1dHRvbiBvbmNsaWNrPSJzYXlmYWxhKCc8P3BocCBlY2hvICRvcHRpb25bJ3NheWZhJ107ID8+JywnPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PicsJysnKTsiIG5hbWU9IkRldmFtRXQiICBjbGFzcz0iYnRuLWV2eWVsbG93Ij48P3BocCBlY2hvICRlbnRyeV9kZXZhbTsgPz48L2J1dHRvbj4NCgkJCQkJCSAgPD9waHAgfSA/Pg0KCQkJCQkgIDwvZGl2Pg0KCQkJCQkgIDw/cGhwIGlmICgkb3B0aW9uWydzYXlmYSddPjEpeyA/Pg0KCQkJCQkgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O3dpZHRoOjQ5JSI+DQoJCQkJCQkgIDxidXR0b24gb25jbGljaz0ic2F5ZmFsYSgnPD9waHAgZWNobyAkb3B0aW9uWydzYXlmYSddOyA/PicsJzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4nLCctJyk7IiBuYW1lPSJHZXJpRG9uIiAgY2xhc3M9ImJ0bi1ldmJsdWUiPjw/cGhwIGVjaG8gJGVudHJ5X2dlcmlkb247ID8+PC9idXR0b24+DQoJCQkJCSAgPC9kaXY+DQoJCQkJCSAgPD9waHAgfWVsc2V7ID8+IA0KCQkJCQkgICA8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDo0OSUiPg0KCQkJCQkJICA8YnV0dG9uIG9uY2xpY2s9IiQuZmFuY3lib3guY2xvc2UoKTsiIG5hbWU9IkdlcmlEb24iIGlkPSJHZXJpRG9uIiAgY2xhc3M9ImJ0bi1ldmJsdWUiPjw/cGhwIGVjaG8gJGVudHJ5X2thcGF0OyA/PjwvYnV0dG9uPg0KCQkJCQkgIDwvZGl2PgkJCQkJICAJCQkJCSANCgkJCQkJICA8P3BocCB9ICA/Pg0KCQkJCTwvZGl2Pg0KCQkJCSAgPD9waHAgfSAgPz4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgDQogICAgICAgICAgDQogICAgICAgICAgDQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2NoZWNrYm94JykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiBvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWyd0eXBlJ107ID8+Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8P3BocCBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgPz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XVtdIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgZGF0YS1pbWFnZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydpbWFnZSddOyA/PiIgaWQ9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiAvPg0KICAgICAgICAgIDxsYWJlbCBmb3I9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+Ij48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uX3ZhbHVlWydwcmljZSddKSB7ID8+DQogICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDwvbGFiZWw+DQogICAgICAgICAgPGJyIC8+DQogICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAnaW1hZ2UnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIG9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3R5cGUnXTsgPz4iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDx0YWJsZSBjbGFzcz0ib3B0aW9uLWltYWdlIj4NCiAgICAgICAgICAgIDw/cGhwICRpeD0xOyBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgPz4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMXB4OyI+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgICAgdmFsdWU9Ijw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXTsgPz4iIGlkPSJvcHRpb24tdmFsdWUtPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgLz48L3RkPg0KICAgICAgICAgICAgICA8dGQ+PGxhYmVsIGZvcj0ib3B0aW9uLXZhbHVlLTw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXTsgPz4iPjxpbWcgc3JjPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ2ltYWdlJ107ID8+IiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjEwMCIgYWx0PSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXSAuICgkb3B0aW9uX3ZhbHVlWydwcmljZSddID8gJyAnIC4gJG9wdGlvbl92YWx1ZVsncHJpY2VfcHJlZml4J10gLiAkb3B0aW9uX3ZhbHVlWydwcmljZSddIDogJycpOyA/PiIgLz48L2xhYmVsPjwvdGQ+DQogICAgICAgICAgICAgIDx0ZD48bGFiZWwgZm9yPSJvcHRpb24tdmFsdWUtPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiI+PD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWyduYW1lJ107ID8+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvbl92YWx1ZVsncHJpY2UnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgKDw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJpY2VfcHJlZml4J107ID8+PD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZSddOyA/PikNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICA8L2xhYmVsPjwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPD9waHAgJGl4Kys7IH0gPz4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAndGV4dCcpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIHZhbHVlPSIiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvICRvcHRpb25bJ3BsYWNlaG9sZGVyJ107ID8+Ii8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICd0ZXh0YXJlYScpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIGNvbHM9IjQwIiByb3dzPSI1Ij48P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlJ107ID8+PC90ZXh0YXJlYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxiciAvPg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2ZpbGUnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIj4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPD9waHAgZWNobyAkYnV0dG9uX3VwbG9hZDsgPz4iIGlkPSJidXR0b24tb3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJidXR0b24iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgdmFsdWU9IiIgLz4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxiciAvPg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2RhdGUnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIj4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3B0aW9uWzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz5dIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddOyA/PiIgY2xhc3M9ImRhdGUiIC8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICdkYXRldGltZScpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIHZhbHVlPSI8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlJ107ID8+IiBjbGFzcz0iZGF0ZXRpbWUiIC8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICd0aW1lJykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiI+DQogICAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3JlcXVpcmVkJ10pIHsgPz4NCiAgICAgICAgICA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+DQogICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDxiPjw/cGhwIGVjaG8gJG9wdGlvblsnbmFtZSddOyA/Pjo8L2I+PGJyIC8+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25fdmFsdWUnXTsgPz4iIGNsYXNzPSJ0aW1lIiAvPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiAgICAgIDw/cGhwIH0gPz4NCgkJICAgPD9waHAgaWYgKCRyZWN1cnJpbmdzKSB7ID8+DQogICAgICAgICAgICA8aHI+DQogICAgICAgICAgICA8aDM+PD9waHAgZWNobyAkdGV4dF9wYXltZW50X3JlY3VycmluZyA/PjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJlcXVpcmVkIj4NCiAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJyZWN1cnJpbmdfaWQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+PD9waHAgZWNobyAkdGV4dF9zZWxlY3Q7ID8+PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHJlY3VycmluZ3MgYXMgJHJlY3VycmluZykgeyA/Pg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJHJlY3VycmluZ1sncmVjdXJyaW5nX2lkJ10gPz4iPjw/cGhwIGVjaG8gJHJlY3VycmluZ1snbmFtZSddID8+PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC1ibG9jayIgaWQ9InJlY3VycmluZy1kZXNjcmlwdGlvbiI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgIDxkaXYgaWQ9InBlcmRlLWhlc2FwIj4NCgkJDQoJCTwvZGl2Pg0KCQk8aW5wdXQgaWQ9InNheWZhLW5vIiB2YWx1ZT0iMSIgdHlwZT0iaGlkZGVuIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY2FydCA8P3BocCBlY2hvIGlzc2V0KCRsYWJlbHMpICYmIGlzX2FycmF5KCRsYWJlbHMpICYmIGlzc2V0KCRsYWJlbHNbJ291dG9mc3RvY2snXSkgPyAnb3V0b2ZzdG9jaycgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICA8ZGl2Pg0KCQkJICAgICAgICAgICAgICAgIDw/cGhwIGlmKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnaGlkZV9hZGRfdG9fY2FydF9idXR0b24nKSk6ID8+DQogICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnYWRkaXRpb25hbF9wcm9kdWN0X2VucXVpcnknLCBhcnJheSgpKSBhcyAkdGFiKTogPz4NCgkJCSAgPGRpdj48P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz48L2Rpdj4NCgkJCSAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCgkJCSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwcm9kdWN0X2lkIiB2YWx1ZT0iPD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4iIC8+DQogICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQoJCQkgIA0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkgPCEtLTxkaXYgaWQ9Im1vYmlsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTVweDsgY29sb3I6IzIzOEMwMDsiPg0KCQkJIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgcGFkZGluZy1sZWZ0OjBweDsiPg0KCQkJIA0KCQkJIDxsaT48aSBjbGFzcz0iZmEgZmEtY2FsZW5kYXIiPjwvaT4gPD9waHAgZWNobyAkZW50cnlfaXNndW51a2FyZ287ID8+PC9saT4NCgkJCSA8bGkgc3R5bGU9Im1hcmdpbi10b3A6N3B4OyI+PGkgY2xhc3M9ImZhcyBmYS1sb2NrIj48L2k+IDw/cGhwIGVjaG8gJGVudHJ5X2d1dmVubGlvZGVtZTsgPz48L2xpPg0KCQkJIDxsaSBzdHlsZT0ibWFyZ2luLXRvcDo3cHg7Ij48aSBjbGFzcz0iZmFzIGZhLWNyZWRpdC1jYXJkIj48L2k+IDw/cGhwIGVjaG8gJGVudHJ5X2tyZWRpa2FydGk7ID8+PC9saT4NCgkJCSA8bGkgc3R5bGU9Im1hcmdpbi10b3A6N3B4OyI+PGkgY2xhc3M9ImZhcyBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyAkZW50cnlfaGF2YWxlZWZ0b2RlbWU7ID8+PC9saT4NCgkJCSANCgkJCSA8L3VsPg0KCQkJIA0KCQkJIDwvZGl2Pi0tPg0KCQkJIA0KCQkJIA0KCQkJIA0KDQoJCQkgIA0KCQkJICANCgkJCSA8c3BhbiBjbGFzcz0icXR5Ij4NCiAgICAgICAgICAgICAgDQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxdWFudGl0eSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG1pbmltdW07ID8+IiBzaXplPSIyIiBkYXRhLW1pbi12YWx1ZT0iPD9waHAgZWNobyAkbWluaW11bTsgPz4iIGlkPSJpbnB1dC1xdWFudGl0eSIgY2xhc3M9ImZvcm0tY29udHJvbCIgLz4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icHJvZHVjdF9pZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+IiAvPg0KICAgICAgICAgICAgICA8c2NyaXB0Pg0KIC8qIHF1YW50aXR5IGJ1dHRvbnMgKi8NCiAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCgnLmNhcnQgaW5wdXRbbmFtZT0icXVhbnRpdHkiXScpOw0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwKCkgew0KICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KCRpbnB1dC52YWwoKSwgMTApICsgMSB8fCBwYXJzZUludCgkaW5wdXQuYXR0cignZGF0YS1taW4tdmFsdWUnKSwgMTApOw0KICAgICAgICAgICAgICAgICAgJGlucHV0LnZhbCh2YWwpOw0KCQkJCSAgaGVzYXBsYTEyMygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb3duKCkgew0KICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KCRpbnB1dC52YWwoKSwgMTApIC0gMSB8fCAwOw0KICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHBhcnNlSW50KCRpbnB1dC5hdHRyKCdkYXRhLW1pbi12YWx1ZScpLCAxMCkgfHwgMTsNCiAgICAgICAgICAgICAgICAgICRpbnB1dC52YWwoTWF0aC5tYXgodmFsLCBtaW4pKTsNCgkJCQkgIGhlc2FwbGExMjMoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJCgnPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0iam91cm5hbC1zdGVwcGVyIj4tPC9hPicpLmluc2VydEJlZm9yZSgkaW5wdXQpLmNsaWNrKGRvd24pOw0KICAgICAgICAgICAgICAgICQoJzxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImpvdXJuYWwtc3RlcHBlciI+KzwvYT4nKS5pbnNlcnRBZnRlcigkaW5wdXQpLmNsaWNrKHVwKTsNCiAgICAgICAgICAgICAgICAkaW5wdXQua2V5ZG93bihmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDM4KSB7DQogICAgICAgICAgICAgICAgICAgIHVwKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSA0MCkgew0KICAgICAgICAgICAgICAgICAgICBkb3duKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgPC9zY3JpcHQ+DQo8L3NwYW4+DQoNCg0KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InBvcHVwX2FjKCkiIGlkPSJidXR0b24tY2FydCIgZGF0YS1sb2FkaW5nLXRleHQ9Ijw/cGhwIGVjaG8gJHRleHRfbG9hZGluZzsgPz4iIGNsYXNzPSJidXR0b24iPjxzcGFuIGNsYXNzPSJidXR0b24tY2FydC10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fY2FydDsgPz48L3NwYW4+PC9idXR0b24+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICANCjxpbWcgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsgd2lkdGg6MTAwJTsiIHNyYz0iaHR0cHM6Ly93d3cuZXRpY2FyZXRnby5jb20vaW1hZ2UvZ3JhZmlrbGVyL3VydW4tc2F5ZmFzaS1pY29ubGFyLnBuZyI+DQoJCQkgIA0KCQkgICAJICAgPGEgY2xhc3M9ImZhbmN5Ym94IiBocmVmPSIjZmJmYW5jeSI+PC9hPg0KCQkJPGEgY2xhc3M9ImZhbmN5Ym94eCIgaHJlZj0iI2FmdGVyLXNheWZhIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9hPg0KCQkJDQoJCTxkaXYgaWQ9ImFmdGVyLXNheWZhIiBzdHlsZT0iZGlzcGxheTogbm9uZTtoZWlnaHQ6IDM1cHg7IHdpZHRoOiAxMDAlOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMTBweDsiPg0KICAgICAgICAgICAgPGEgb25jbGljaz0id2luZG93LmxvY2F0aW9uLnJlcGxhY2UoJ2luZGV4LnBocCcpIiBjbGFzcz0iYnRuLWV2Ymx1ZSIgc3R5bGU9IndpZHRoOjQ1JTtmbG9hdDpsZWZ0Ij5BbMSxxZ92ZXJpxZ9lIERldmFtIEV0PC9hPg0KICAgICAgICAgICAgPGEgb25jbGljaz0id2luZG93LmxvY2F0aW9uLnJlcGxhY2UoJ2luZGV4LnBocD9yb3V0ZT1jaGVja291dC9jYXJ0JykiIGNsYXNzPSJidG4tZXZ5ZWxsb3ciIHN0eWxlPSJ3aWR0aDo0NSU7ZmxvYXQ6bGVmdCI+U2VwZXRlIEdpdDwvYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIA0KICAgICAgICAgIDxzY3JpcHQ+DQogICAgICAgICAgZnVuY3Rpb24ga29udHJvbCgpIHsNCiAgICAgICAgICAgICAgdmFyIHNlbiA9ICQoJyNzZW4nKS52YWwoKTsNCiAgICAgICAgICAgICAgdmFyIHNib3kgPSAkKCcjc2JveScpLnZhbCgpOw0KICAgICAgICAgICAgICB2YXIgZW4gPSAkKCcjcGVuJykudmFsKCk7DQogICAgICAgICAgICAgIHZhciBib3kgPSAkKCcjcGJveScpLnZhbCgpOw0KICAgICAgICAgICAgICB2YXIgZWJhdCA9ICQoJyNwZWJhdCcpLnZhbCgpOw0KICAgICAgICAgICAgICANCgkJCQlpZiAoc2VuID09IDApIHsNCgkJCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpZW47ID8+Iik7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQkgIA0KCQkJCWlmIChzYm95ID09MCkgew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmlib3k7ID8+Iik7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9IA0KICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGVuPT0wKSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWVuOyA/PiIpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfSANCgkJCQkJICANCiAgICAgICAgICAgICAgICBpZiAoYm95ID09MCkgew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmlib3k7ID8+Iik7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoZWJhdCA8IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpZWJhdDsgPz4iKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgIC8qIGFkZFRvQ2FydCgnPD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4nKTsqLw0KCQkJICAgYWxlcnQgKCJzZXBldGUgZWtsaWNlbS4ga29kdW11IGHDpyIpOw0KICAgICAgICAgICAgIA0KICAgICAgICAgIH0NCiAgICAgICAgICA8L3NjcmlwdD4NCiAgICAgICANCgkJICAgPC9kaXY+DQoJCSAgDQogICAgICAgICAgICA8P3BocCBpZiAoJG1pbmltdW0gPiAxKSB7ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyAkdGV4dF9taW5pbXVtOyA/PjwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0id2lzaGxpc3QtY29tcGFyZSI+DQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rcyI+DQogICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJhZGRUb1dpc2hMaXN0KCc8P3BocCBlY2hvICRwcm9kdWN0X2lkOyA/PicpOyI+PD9waHAgZWNobyAkYnV0dG9uX3dpc2hsaXN0OyA/PjwvYT4NCiAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9ImFkZFRvQ29tcGFyZSgnPD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4nKTsiPjw/cGhwIGVjaG8gJGJ1dHRvbl9jb21wYXJlOyA/PjwvYT4NCiAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgPC9kaXY+DQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCSA8P3BocCBpZiAoJHJldmlld19zdGF0dXMpIHsgPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJyYXRpbmciPg0KICAgICAgICAgICAgPHVsIHN0eWxlPSJtYXJnaW4tbGVmdDotMjBweDsgbWFyZ2luLXRvcDoxcHg7IG1hcmdpbi1ib3R0b206LTVweDsiPg0KICAgICAgICAgIDxsaT5FdGVrLCBib25jdWsgdmUgZGnEn2VyIHNlw6dlbmVrbGVyICh2YXJzYSkgPHNwYW4gc3R5bGU9ImNvbG9yOiNEQjFEMEQ7Ij5TZXBldGUgRWtsZTwvc3Bhbj4gYnV0b251bmEgdMSxa2xhZMSxa3RhbiBzb25yYSBhw6fEsWxhY2FrdMSxci48L2xpPg0KCQkgIDxsaT5LcmVkaSBrYXJ0xLEgdGFrc2l0IHNlw6dlbmVrbGVyaSDDtmRlbWUgc2F5ZmFzxLFuZGEgZ8O2c3RlcmlsZWNla3Rpci48L2xpPg0KCQkgIDxsaT5TaXBhcmnFn2luaXpsZSBpbGdpbGkgbm90dW51eiB2YXJzYSDDtmRlbWUgc2F5ZmFzxLFuZGEgYmVsaXJ0ZWJpbGlyc2luaXouPC9saT4NCgkJICA8L3VsPg0KCQkgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIH0gPz4NCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCiAgICAgICAgICA8P3BocCBpZiAoJHJldmlld19zdGF0dXMpIHsgPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJyYXRpbmciPg0KICAgICAgICAgICAgPHA+DQogICAgICAgICAgICAgIDw/cGhwIGZvciAoJGkgPSAxOyAkaSA8PSA1OyAkaSsrKSB7ID8+DQogICAgICAgICAgICAgIDw/cGhwIGlmICgkcmF0aW5nIDwgJGkpIHsgPz4NCiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZhIGZhLXN0YWNrIj48aSBjbGFzcz0iZmEgZmEtc3Rhci1vIGZhLXN0YWNrLTF4Ij48L2k+PC9zcGFuPg0KICAgICAgICAgICAgICA8P3BocCB9IGVsc2UgeyA/Pg0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmEgZmEtc3RhY2siPjxpIGNsYXNzPSJmYSBmYS1zdGFyIGZhLXN0YWNrLTF4Ij48L2k+PGkgY2xhc3M9ImZhIGZhLXN0YXItbyBmYS1zdGFjay0xeCI+PC9pPjwvc3Bhbj4NCiAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgIDxhIGhyZWY9IiIgb25jbGljaz0iJCgnYVtocmVmPVwnI3RhYi1yZXZpZXdcJ10nKS50cmlnZ2VyKCdjbGljaycpOyByZXR1cm4gZmFsc2U7Ij48P3BocCBlY2hvICRyZXZpZXdzOyA/PjwvYT4gLyA8YSBocmVmPSIiIG9uY2xpY2s9IiQoJ2FbaHJlZj1cJyN0YWItcmV2aWV3XCddJykudHJpZ2dlcignY2xpY2snKTsgcmV0dXJuIGZhbHNlOyI+PD9waHAgZWNobyAkdGV4dF93cml0ZTsgPz48L2E+PC9wPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3RhdHVzJykgJiYgKCFKb3VybmFsMkNhY2hlOjokbW9iaWxlX2RldGVjdC0+aXNNb2JpbGUoKSB8fCAoSm91cm5hbDJDYWNoZTo6JG1vYmlsZV9kZXRlY3QtPmlzTW9iaWxlKCkgJiYgISR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19kaXNhYmxlX29uX21vYmlsZScsIDEpKSkgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3Bvc2l0aW9uJykgPT09ICdyaWdodCcgJiYgY291bnQoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdjb25maWdfc2hhcmVfYnV0dG9ucycsIGFycmF5KCkpKSk6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzb2NpYWwgc2hhcmUtdGhpcyA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19kaXNhYmxlX29uX21vYmlsZScsIDEpID8gJ2hpZGUtb24tbW9iaWxlJyA6ICcnOyA/PiI+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNvY2lhbC1sb2FkZWQiPg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgc3dpdGNoVG81eD10cnVlOzwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3Muc2hhcmV0aGlzLmNvbS9idXR0b24vYnV0dG9ucy5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnN0TGlnaHQub3B0aW9ucyh7cHVibGlzaGVyOiAiPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfYWNjb3VudF9rZXknKTsgPz4iLCBkb05vdEhhc2g6IHRydWUsIGRvTm90Q29weTogdHJ1ZSwgaGFzaEFkZHJlc3NCYXI6IGZhbHNlfSk7PC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdjb25maWdfc2hhcmVfYnV0dG9ucycsIGFycmF5KCkpIGFzICRpdGVtKTogPz4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iPD9waHAgZWNobyAkaXRlbVsnY2xhc3MnXSAuICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19zdHlsZScpOyA/PiIgZGlzcGxheVRleHQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0eWxlJykgPyAkaXRlbVsnbmFtZSddIDogJyc7ID8+Ij48L3NwYW4+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdhZGRpdGlvbmFsX3Byb2R1Y3RfZGVzY3JpcHRpb25fYm90dG9tJywgYXJyYXkoKSkgYXMgJHRhYik6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJqb3VybmFsLWN1c3RvbS10YWIiPg0KICAgICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnaGFzX2ljb24nXSk6ID8+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrLWljb24gYmxvY2staWNvbi1sZWZ0IiBzdHlsZT0iPD9waHAgZWNobyAkdGFiWydpY29uX2NzcyddOyA/PiI+PD9waHAgZWNobyAkdGFiWydpY29uJ107ID8+PC9kaXY+DQogICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnbmFtZSddKTogPz4NCiAgICAgICAgICAgICAgPGgzPjw/cGhwIGVjaG8gJHRhYlsnbmFtZSddOyA/PjwvaDM+DQogICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICA8P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPD9waHAgaWYgKCR0YWdzKSB7ID8+DQogICAgICA8cCBjbGFzcz0idGFncyI+PGI+PD9waHAgZWNobyAkdGV4dF90YWdzOyA/PjwvYj4NCiAgICAgICAgPD9waHAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHRhZ3MpOyAkaSsrKSB7ID8+DQogICAgICAgIDw/cGhwIGlmICgkaSA8IChjb3VudCgkdGFncykgLSAxKSkgeyA/Pg0KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICR0YWdzWyRpXVsnaHJlZiddOyA/PiI+PD9waHAgZWNobyAkdGFnc1skaV1bJ3RhZyddOyA/PjwvYT4sDQogICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHRhZ3NbJGldWydocmVmJ107ID8+Ij48P3BocCBlY2hvICR0YWdzWyRpXVsndGFnJ107ID8+PC9hPg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDwvcD4NCiAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDw/cGhwIGlmICgkcHJvZHVjdHMgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX3N0YXR1cycpKSB7ID8+DQogICAgICA8ZGl2IGNsYXNzPSJib3ggcmVsYXRlZC1wcm9kdWN0cyA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbCcpID8gJ2pvdXJuYWwtY2Fyb3VzZWwnIDogJyc7ID8+IDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsJykgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX2Fycm93cycpID09PSAndG9wJyA/ICdhcnJvd3MtdG9wJyA6ICcnOyA/PiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbCcpICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9idWxsZXRzJykgPyAnYnVsbGV0cy1vbicgOiAnJzsgPz4iPg0KICAgICAgICA8ZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJveC1oZWFkaW5nIj48P3BocCBlY2hvICR0ZXh0X3JlbGF0ZWQ7ID8+PC9kaXY+DQogICAgICAgICAgPGRpdiBjbGFzcz0iYm94LXByb2R1Y3QgYm94LWNvbnRlbnQiPg0KICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWwnKSk6ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyIj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItY29udGFpbmVyIiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncnRsJykgPyAnZGlyPSJydGwiJyA6ICcnOyA/Pj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItd3JhcHBlciI+DQogICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkcHJvZHVjdHMgYXMgJHByb2R1Y3QpIHsgPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZC1pdGVtIHN3aXBlci1zbGlkZSA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19ncmlkX2NsYXNzZXMnKTsgPz4gZGlzcGxheS08P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9ncmlkX3dpc2hsaXN0X2ljb25fZGlzcGxheScpOyA/PiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9ncmlkX2J1dHRvbl9ibG9ja19idXR0b24nKTsgPz4iPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LXRodW1iIHByb2R1Y3Qtd3JhcHBlciA8P3BocCBlY2hvIGlzc2V0KCRwcm9kdWN0WydsYWJlbHMnXSkgJiYgaXNfYXJyYXkoJHByb2R1Y3RbJ2xhYmVscyddKSAmJiBpc3NldCgkcHJvZHVjdFsnbGFiZWxzJ11bJ291dG9mc3RvY2snXSkgPyAnb3V0b2ZzdG9jaycgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlIDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaG93X2NvdW50ZG93bicsICduZXZlcicpICE9PSAnbmV2ZXInICYmIGlzc2V0KCRwcm9kdWN0WydkYXRlX2VuZCddKSAmJiAkcHJvZHVjdFsnZGF0ZV9lbmQnXSA/ICdoYXMtY291bnRkb3duJyA6ICcnOyA/PiI+DQogICAgICAgICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRwcm9kdWN0WydocmVmJ107ID8+IiA8P3BocCBpZihpc3NldCgkcHJvZHVjdFsndGh1bWIyJ10pICYmICRwcm9kdWN0Wyd0aHVtYjInXSk6ID8+IGNsYXNzPSJoYXMtc2Vjb25kLWltYWdlIiBzdHlsZT0iYmFja2dyb3VuZDogdXJsKCc8P3BocCBlY2hvICRwcm9kdWN0Wyd0aHVtYjInXTsgPz4nKSBuby1yZXBlYXQ7IiA8P3BocCBlbmRpZjsgPz4+DQogICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJmaXJzdC1pbWFnZSIgc3JjPSI8P3BocCBlY2hvICRwcm9kdWN0Wyd0aHVtYiddOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJHByb2R1Y3RbJ25hbWUnXTsgPz4iIGFsdD0iPD9waHAgZWNobyAkcHJvZHVjdFsnbmFtZSddOyA/PiIgLz4NCiAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChpc3NldCgkcHJvZHVjdFsnbGFiZWxzJ10pICYmIGlzX2FycmF5KCRwcm9kdWN0WydsYWJlbHMnXSkpOiA/Pg0KICAgICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHByb2R1Y3RbJ2xhYmVscyddIGFzICRsYWJlbCA9PiAkbmFtZSk6ID8+DQogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwtPD9waHAgZWNobyAkbGFiZWw7ID8+Ij48Yj48P3BocCBlY2hvICRuYW1lOyA/PjwvYj48L3NwYW4+DQogICAgICAgICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZigkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfZ3JpZF93aXNobGlzdF9pY29uX3Bvc2l0aW9uJykgPT09ICdpbWFnZScgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2dyaWRfd2lzaGxpc3RfaWNvbl9kaXNwbGF5JywgJycpID09PSAnaWNvbicpOiA/Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2lzaGxpc3QiPjxhIG9uY2xpY2s9ImFkZFRvV2lzaExpc3QoJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGNsYXNzPSJoaW50LS10b3AiIGRhdGEtaGludD0iPD9waHAgZWNobyAkYnV0dG9uX3dpc2hsaXN0OyA/PiI+PGkgY2xhc3M9Indpc2hsaXN0LWljb24iPjwvaT48c3BhbiBjbGFzcz0iYnV0dG9uLXdpc2hsaXN0LXRleHQiPjw/cGhwIGVjaG8gJGJ1dHRvbl93aXNobGlzdDs/Pjwvc3Bhbj48L2E+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb21wYXJlIj48YSBvbmNsaWNrPSJhZGRUb0NvbXBhcmUoJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGNsYXNzPSJoaW50LS10b3AiIGRhdGEtaGludD0iPD9waHAgZWNobyAkYnV0dG9uX2NvbXBhcmU7ID8+Ij48aSBjbGFzcz0iY29tcGFyZS1pY29uIj48L2k+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jb21wYXJlLXRleHQiPjw/cGhwIGVjaG8gJGJ1dHRvbl9jb21wYXJlOz8+PC9zcGFuPjwvYT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZGV0YWlscyI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXB0aW9uIj4NCiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJuYW1lIj48YSBocmVmPSI8P3BocCBlY2hvICRwcm9kdWN0WydocmVmJ107ID8+Ij48P3BocCBlY2hvICRwcm9kdWN0WyduYW1lJ107ID8+PC9hPjwvaDQ+DQogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+PD9waHAgZWNobyAkcHJvZHVjdFsnZGVzY3JpcHRpb24nXTsgPz48L3A+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcHJvZHVjdFsncmF0aW5nJ10pIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmF0aW5nIj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3IgKCRpID0gMTsgJGkgPD0gNTsgJGkrKykgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcHJvZHVjdFsncmF0aW5nJ10gPCAkaSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmYSBmYS1zdGFjayI+PGkgY2xhc3M9ImZhIGZhLXN0YXItbyBmYS1zdGFjay0yeCI+PC9pPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9IGVsc2UgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmYSBmYS1zdGFjayI+PGkgY2xhc3M9ImZhIGZhLXN0YXIgZmEtc3RhY2stMngiPjwvaT48aSBjbGFzcz0iZmEgZmEtc3Rhci1vIGZhLXN0YWNrLTJ4Ij48L2k+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcHJvZHVjdFsncHJpY2UnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJpY2UiPg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHByb2R1Y3RbJ3NwZWNpYWwnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHByb2R1Y3RbJ3ByaWNlJ107ID8+DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpY2Utb2xkIj48P3BocCBlY2hvICRwcm9kdWN0WydwcmljZSddOyA/Pjwvc3Bhbj4gPHNwYW4gY2xhc3M9InByaWNlLW5ldyIgPD9waHAgZWNobyBpc3NldCgkcHJvZHVjdFsnZGF0ZV9lbmQnXSkgJiYgJHByb2R1Y3RbJ2RhdGVfZW5kJ10gPyAiZGF0YS1lbmQtZGF0ZT0neyRwcm9kdWN0WydkYXRlX2VuZCddfSciIDogIiI7ID8+Pjw/cGhwIGVjaG8gJHByb2R1Y3RbJ3NwZWNpYWwnXTsgPz48L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcHJvZHVjdFsndGF4J10pIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpY2UtdGF4Ij48P3BocCBlY2hvICR0ZXh0X3RheDsgPz4gPD9waHAgZWNobyAkcHJvZHVjdFsndGF4J107ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgPC9wPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChKb3VybmFsMlV0aWxzOjppc0VucXVpcnlQcm9kdWN0KCR0aGlzLCAkcHJvZHVjdCkpOiA/Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0IGVucXVpcnktYnV0dG9uIj4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OkpvdXJuYWwub3BlblBvcHVwKCc8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnZW5xdWlyeV9wb3B1cF9jb2RlJyk7ID8+JywgJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGRhdGEtY2xrPSJhZGRUb0NhcnQoJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGNsYXNzPSJidXR0b24gaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdlbnF1aXJ5X2J1dHRvbl90ZXh0Jyk7ID8+Ij48P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnZW5xdWlyeV9idXR0b25faWNvbicpIC4gJzxzcGFuIGNsYXNzPSJidXR0b24tY2FydC10ZXh0Ij4nIC4gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdlbnF1aXJ5X2J1dHRvbl90ZXh0JykgLiAnPC9zcGFuPic7ID8+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZTogPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FydCA8P3BocCBlY2hvIGlzc2V0KCRwcm9kdWN0WydsYWJlbHMnXSkgJiYgaXNfYXJyYXkoJHByb2R1Y3RbJ2xhYmVscyddKSAmJiBpc3NldCgkcHJvZHVjdFsnbGFiZWxzJ11bJ291dG9mc3RvY2snXSkgPyAnb3V0b2ZzdG9jaycgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9ImFkZFRvQ2FydCgnPD9waHAgZWNobyAkcHJvZHVjdFsncHJvZHVjdF9pZCddOyA/PicpOyIgY2xhc3M9ImJ1dHRvbiBoaW50LS10b3AiIGRhdGEtaGludD0iPD9waHAgZWNobyAkYnV0dG9uX2NhcnQ7ID8+Ij48aSBjbGFzcz0iYnV0dG9uLWxlZnQtaWNvbiI+PC9pPjxzcGFuIGNsYXNzPSJidXR0b24tY2FydC10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fY2FydDsgPz48L3NwYW4+PGkgY2xhc3M9ImJ1dHRvbi1yaWdodC1pY29uIj48L2k+PC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Indpc2hsaXN0Ij48YSBvbmNsaWNrPSJhZGRUb1dpc2hMaXN0KCc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBjbGFzcz0iaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJGJ1dHRvbl93aXNobGlzdDsgPz4iPjxpIGNsYXNzPSJ3aXNobGlzdC1pY29uIj48L2k+PHNwYW4gY2xhc3M9ImJ1dHRvbi13aXNobGlzdC10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fd2lzaGxpc3Q7Pz48L3NwYW4+PC9hPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb21wYXJlIj48YSBvbmNsaWNrPSJhZGRUb0NvbXBhcmUoJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGNsYXNzPSJoaW50LS10b3AiIGRhdGEtaGludD0iPD9waHAgZWNobyAkYnV0dG9uX2NvbXBhcmU7ID8+Ij48aSBjbGFzcz0iY29tcGFyZS1pY29uIj48L2k+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jb21wYXJlLXRleHQiPjw/cGhwIGVjaG8gJGJ1dHRvbl9jb21wYXJlOz8+PC9zcGFuPjwvYT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWwnKSAmJiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYXJyb3dzJykgIT09ICdub25lJyk6ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWJ1dHRvbi1uZXh0Ij48L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLXByZXYiPjwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWwnKSAmJiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYnVsbGV0cycpKTogPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uIj48L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICAgIDw/cGhwIC8qIGVuYWJsZSBjb3VudGRvd24gKi8gPz4NCiAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Nob3dfY291bnRkb3duJywgJ25ldmVyJykgIT09ICduZXZlcicpOiA/Pg0KICAgICAgPHNjcmlwdD4NCiAgICAgICAgJCgnLnJlbGF0ZWQtcHJvZHVjdHMgLnByb2R1Y3QtZ3JpZC1pdGVtID4gZGl2JykuZWFjaChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgdmFyICRuZXcgPSAkKHRoaXMpLmZpbmQoJy5wcmljZS1uZXcnKTsNCiAgICAgICAgICBpZiAoJG5ldy5sZW5ndGggJiYgJG5ldy5hdHRyKCdkYXRhLWVuZC1kYXRlJykpIHsNCiAgICAgICAgICAgICQodGhpcykuZmluZCgnLmltYWdlJykuYXBwZW5kKCc8ZGl2IGNsYXNzPSJjb3VudGRvd24iPjwvZGl2PicpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBKb3VybmFsLmNvdW50ZG93bigkKHRoaXMpLmZpbmQoJy5jb3VudGRvd24nKSwgJG5ldy5hdHRyKCdkYXRhLWVuZC1kYXRlJykpOw0KICAgICAgICB9KTsNCiAgICAgIDwvc2NyaXB0Pg0KICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsJykpOiA/Pg0KICAgICAgPD9waHANCiAgICAgICRncmlkID0gSm91cm5hbDJVdGlsczo6Z2V0SXRlbUdyaWQoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2l0ZW1zX3Blcl9yb3cnKSwgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaXRlX3dpZHRoJywgMTAyNCksICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX2NvbHVtbnNfY291bnQnKSk7DQogICAgICAkZ3JpZCA9IGFycmF5KA0KICAgICAgICAgIGFycmF5KDAsIChpbnQpJGdyaWRbJ3hzJ10pLA0KICAgICAgICAgIGFycmF5KDQ3MCwgKGludCkkZ3JpZFsnc20nXSksDQogICAgICAgICAgYXJyYXkoNzYwLCAoaW50KSRncmlkWydtZCddKSwNCiAgICAgICAgICBhcnJheSg5ODAsIChpbnQpJGdyaWRbJ2xnJ10pLA0KICAgICAgICAgIGFycmF5KDExMDAsIChpbnQpJGdyaWRbJ3hsJ10pLA0KICAgICAgKTsNCiAgICAgID8+DQogICAgICA8c2NyaXB0Pg0KICAgICAgICAoZnVuY3Rpb24gKCkgew0KICAgICAgICAgIHZhciBncmlkID0gJC5wYXJzZUpTT04oJzw/cGhwIGVjaG8ganNvbl9lbmNvZGUoJGdyaWQpOyA/PicpOw0KDQogICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB7DQogICAgICAgICAgICA0NzA6IHsNCiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogZ3JpZFswXVsxXSwNCiAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IGdyaWRbMF1bMV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICA3NjA6IHsNCiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogZ3JpZFsxXVsxXSwNCiAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IGdyaWRbMV1bMV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICA5ODA6IHsNCiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogZ3JpZFsyXVsxXSwNCiAgICAgICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IGdyaWRbMl1bMV0NCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAxMjIwOiB7DQogICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IGdyaWRbM11bMV0sDQogICAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiBncmlkWzNdWzFdDQogICAgICAgICAgICB9DQogICAgICAgICAgfTsNCg0KICAgICAgICAgIHZhciBvcHRzID0gew0KICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogZ3JpZFs0XVsxXSwNCiAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiBncmlkWzRdWzFdLA0KICAgICAgICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLA0KICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiBwYXJzZUludCgnPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfZ3JpZF9pdGVtX3NwYWNpbmcnLCAnMjAnKTsgPz4nLCAxMCksDQogICAgICAgICAgICBwYWdpbmF0aW9uOiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9idWxsZXRzJykgPyAnJChcJy5yZWxhdGVkLXByb2R1Y3RzIC5zd2lwZXItcGFnaW5hdGlvblwnKScgOiAnZmFsc2UnOyA/PiwNCiAgICAgICAgICAgIHBhZ2luYXRpb25DbGlja2FibGU6IHRydWUsDQogICAgICAgICAgICBuZXh0QnV0dG9uOiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9hcnJvd3MnKSAhPT0gJ25vbmUnID8gJyQoXCcucmVsYXRlZC1wcm9kdWN0cyAuc3dpcGVyLWJ1dHRvbi1uZXh0XCcpJyA6ICdmYWxzZSc7ID8+LA0KICAgICAgICAgICAgcHJldkJ1dHRvbjogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYXJyb3dzJykgIT09ICdub25lJyA/ICckKFwnLnJlbGF0ZWQtcHJvZHVjdHMgLnN3aXBlci1idXR0b24tcHJldlwnKScgOiAnZmFsc2UnOyA/PiwNCiAgICAgICAgICAgIGF1dG9wbGF5OiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9hdXRvcGxheScpID4gMCA/IDQwMDAgOiAnZmFsc2UnOyA/PiwNCiAgICAgICAgICAgIGF1dG9wbGF5U3RvcE9uSG92ZXI6IDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX3BhdXNlX29uX2hvdmVyJykgPyAndHJ1ZScgOiAnZmFsc2UnOyA/PiwNCiAgICAgICAgICAgIHNwZWVkOiA0MDAsDQogICAgICAgICAgICB0b3VjaEV2ZW50c1RhcmdldDogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfdG91Y2hkcmFnJykgID8gJ1wnY29udGFpbmVyXCcnIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgfTsNCg0KICAgICAgICAgICQoJy5yZWxhdGVkLXByb2R1Y3RzIC5zd2lwZXItY29udGFpbmVyJykuc3dpcGVyKG9wdHMpOw0KICAgICAgICB9KSgpOw0KICAgICAgPC9zY3JpcHQ+DQogICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDw/cGhwIGVjaG8gJGNvbnRlbnRfYm90dG9tOyA/PjwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQogICAgDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICAgJCgiLmZhbmN5Ym94IikuZmFuY3lib3goKTsNCn0pOw0KICAgICQoJ1tkYXRhLXNheWZhXScpLmhpZGUoKTsNCiAgICAkKCdbZGF0YS1zYXlmYT0iMSJdJykuc2hvdygpOw0KICAgIHZhciBzYXlmYSA9IDE7DQogICAgJCgnI3NheWZhLW5vJykudmFsKHNheWZhKTsNCiAgICAkKCcjb25jZWtpLXNheWZhJykuaGlkZSgpOw0KDQogICAgdmFyIGl0ZW1zID0ge307DQogICAgJCgnZGl2W2RhdGEtc2F5ZmFdJykuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgaXRlbXNbJCh0aGlzKS5hdHRyKCdkYXRhLXNheWZhJyldID0gdHJ1ZTsNCiAgICB9KTsNCg0KICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoKTsNCiAgICBmb3IodmFyIGkgaW4gaXRlbXMpDQogICAgew0KICAgICAgICByZXN1bHQucHVzaChpKTsNCiAgICB9DQogICAgdmFyIHRvdGFsUGFnZXMgPSByZXN1bHQubGVuZ3RoOw0KDQogICAgZnVuY3Rpb24gc29ucmFraSgpIHsNCi8qDQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9ucykgeyA/Pg0KICAgICAgICA8P3BocCBmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0aW9uKSB7ID8+DQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ3JhZGlvJykgeyA/Pg0KDQogICAgICAgICAgICAgICAgdmFyICB2ZXJpID0gJCgnaW5wdXRbbmFtZT0ib3B0aW9uWzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz5dIl06Y2hlY2tlZCcpLmxlbmd0aDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHNheWZhID09IDw/cGhwIGVjaG8gJG9wdGlvblsnc2F5ZmEnXTsgPz4pDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJpID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiRGlra2F0ISBMw7x0ZmVuIHpvcnVubHUgYWxhbmxhcsSxIGJvxZ8gYsSxcmFrbWF5xLFuxLF6LiIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICA8P3BocCB9IH0gfSA/Pg0KKi8NCiAgICAgICAgaWYgKHRvdGFsUGFnZXMgIT0gc2F5ZmEpew0KICAgICAgICAgICAgJCgnI29uY2VraS1zYXlmYScpLnNob3coKTsNCiAgICAgICAgICAgICQoJ1tkYXRhLXNheWZhPSInICsgc2F5ZmEgKyAnIl0nKS5oaWRlKCk7DQogICAgICAgICAgICAkKCdbZGF0YS1zYXlmYT0iJyArKCAgc2F5ZmEgKyAxICkrICciXScpLnNob3coKTsNCiAgICAgICAgICAgc2F5ZmErKzsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh0b3RhbFBhZ2VzID09IHNheWZhKSB7DQogICAgICAgICAgICAkKCcjc29ucmFraS1zYXlmYScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJyNzZXBldGUtZWtsZScpLnNob3coKTsNCg0KICAgICAgICB9DQogICAgfQ0KDQoNCg0KICAgIGZ1bmN0aW9uIG9uY2VraSgpew0KICAgICAgICBpZiAoc2F5ZmEgIT0gMSkgew0KICAgICAgICAgICAgJCgnI3NvbnJha2ktc2F5ZmEnKS5zaG93KCk7DQogICAgICAgICAgICAkKCdbZGF0YS1zYXlmYT0iJyArIHNheWZhICsgJyJdJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnW2RhdGEtc2F5ZmE9IicgKyAoc2F5ZmEgLSAxKSArICciXScpLnNob3coKTsNCiAgICAgICAgICAgIHNheWZhLS07DQogICAgICAgICAgICAkKCcjc2VwZXRlLWVrbGUnKS5oaWRlKCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoc2F5ZmEgPT0gMSkNCiAgICAgICAgICAgICQoJyNvbmNla2ktc2F5ZmEnKS5oaWRlKCk7DQogICAgfQ0KDQoNCi8vLS0+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KDQpmdW5jdGlvbiBwb3B1cF9hYygpew0KICAgIHZhciBzZW4gPSAkKCcjc2VuJykudmFsKCk7DQogICAgdmFyIHNib3kgPSAkKCcjc2JveScpLnZhbCgpOw0KICAgIHZhciBlbiA9ICQoJyNwZW4nKS52YWwoKTsNCiAgICB2YXIgYm95ID0gJCgnI3Bib3knKS52YWwoKTsNCiAgICB2YXIgZWJhdCA9ICQoJyNwZWJhdCcpLnZhbCgpOw0KICAgIA0KICAgICAgICBpZiAoc2VuIDwgMSkgew0KICAgICAgICAgICAgYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpZW47ID8+Iik7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0gZWxzZSBpZiAoc2JveSA8IDEpIHsNCgkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWJveTsgPz4iKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsJDQoJCX0gZWxzZSBpZiAoZW4gPCAxKSB7DQoJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmllbjsgPz4iKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsJDQoJCX0gZWxzZSBpZiAoYm95IDwgMSkgew0KCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpZW47ID8+Iik7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CQ0KCQl9ZWxzZSBpZiAoZWJhdCA8IDEpIHsNCgkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWViYXQ7ID8+Iik7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CQ0KCQl9ZWxzZXsNCgkJCQ0KCQkJPD9waHAgaWYgKGlzc2V0KCRvcHRpb24pKSB7ID8+DQoJCQkJCQkJCQkNCgkJCQkJaWYgKCQoIltuYW1lPSdvcHRpb25bPD9waHAgZWNobyAkaGF0YV9pZF9sZXJbMF07ID8+XSddIikudmFsKCkgPT0iIil7DQoJCQkJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfbW9udGFqeXVrc2VrbGlnaXV5YXJpOyA/PiIpOw0KICAgICAgICAgICAgCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9ZWxzZSBpZiAoJCgiW25hbWU9J29wdGlvbls8P3BocCBlY2hvICRoYXRhX2lkX2xlclsxXTsgPz5dJ10iKS52YWwoKSA9PSIiKXsNCgkJCQkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV9wZXJkZWNlcmNldmV1eWFyaTsgPz4iKTsNCiAgICAgICAgICAgIAkJCXJldHVybiBmYWxzZTsNCgkJCQkJfWVsc2UgaWYgKCQoIltuYW1lPSdvcHRpb25bPD9waHAgZWNobyAkaGF0YV9pZF9sZXJbMl07ID8+XSddIikudmFsKCkgPT0iIil7DQoJCQkJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfbmVyZXlldGFraWxhY2FrdXlhcmk7ID8+Iik7DQogICAgICAgICAgICAJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX1lbHNlIGlmICgkKCJbbmFtZT0nb3B0aW9uWzw/cGhwIGVjaG8gJGhhdGFfaWRfbGVyWzNdOyA/Pl0nXSIpLnZhbCgpID09IiIpew0KCQkJCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X2RpZ2VycGVyZGV1eWFyaTsgPz4iKTsNCiAgICAgICAgICAgIAkJCXJldHVybiBmYWxzZTsNCgkJCQkJLy99ZWxzZSBpZiAoJCgiW25hbWU9J29wdGlvbls8P3BocCBlY2hvICRoYXRhX2lkX2xlcls0XTsgPz5dJ10iKS52YWwoKSA9PSIiKXsNCgkJCQkJCS8vYWxlcnQoIkRpxJ9lciBQZXJkZSBCaWxnaXNpbmkgZ2lybWVkaW5peiIpOw0KICAgICAgICAgICAgCQkJLy9yZXR1cm4gZmFsc2U7DQoJCQkJCX1lbHNlew0KCQkJCQkJPD9waHAgaWYgKCRwb3B1cF9hY19uZXcpIHsgPz4NCgkJCQ0KICAgICAgICAgICAJCQkJCSQoJy5mYW5jeWJveCcpLnRyaWdnZXIoJ2NsaWNrJyk7DQoJCQkJIAkJCSQoJyNzdGlja3ktd3JhcHBlcicpLnJlbW92ZUNsYXNzKCdzdGlja3ktd3JhcHBlcicpOw0KCQkJCQkJPD9waHAgfWVsc2V7ID8+DQoJCQkJCQkJc2VwZXRlRWtsZSgpOw0KCQkJCQkJPD9waHAgfSA/Pg0KCQkJCQl9DQogICAgICAgICAgICA8P3BocCB9ZWxzZXsgPz4NCgkJCQlzZXBldGVFa2xlKCk7DQoJCQk8P3BocCB9ID8+DQoJCX0NCgkJDQogICAgICAgDQogIA0KfQ0KDQpmdW5jdGlvbiBzZXBldGVFa2xlKCl7DQogICAgICAgICQuYWpheCh7DQogICAgICAgICAgICB1cmw6ICdpbmRleC5waHA/cm91dGU9Y2hlY2tvdXQvY2FydC9hZGQnLA0KICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLA0KICAgICAgICAgICAgZGF0YTogJCgnI3Byb2R1Y3QgaW5wdXRbdHlwZT1cJ3RleHRcJ10sICNmYW5jeWJveC13cmFwIGlucHV0W3R5cGU9XCd0ZXh0XCddLCAjZmFuY3lib3gtd3JhcCBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCwgI3Byb2R1Y3QgaW5wdXRbdHlwZT1cJ2hpZGRlblwnXSwgI3Byb2R1Y3QgaW5wdXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQsICNwcm9kdWN0IGlucHV0W3R5cGU9XCdjaGVja2JveFwnXTpjaGVja2VkLCAjcHJvZHVjdCBzZWxlY3QsICNwcm9kdWN0IHRleHRhcmVhJyksDQogICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLA0KICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbikgew0KICAgICAgICAgICAgICAgICQoJy5zdWNjZXNzLCAud2FybmluZywgLmF0dGVudGlvbiwgaW5mb3JtYXRpb24sIC5lcnJvcicpLnJlbW92ZSgpOw0KDQogICAgICAgICAgICAgICAgaWYgKGpzb25bJ2Vycm9yJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25bJ2Vycm9yJ11bJ29wdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgaW4ganNvblsnZXJyb3InXVsnb3B0aW9uJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjb3B0aW9uLScgKyBpKS5hZnRlcignPHNwYW4gY2xhc3M9ImVycm9yIj4nICsganNvblsnZXJyb3InXVsnb3B0aW9uJ11baV0gKyAnPC9zcGFuPicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25bJ2Vycm9yJ11bJ3Byb2ZpbGUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnc2VsZWN0W25hbWU9InByb2ZpbGVfaWQiXScpLmFmdGVyKCc8c3BhbiBjbGFzcz0iZXJyb3IiPicgKyBqc29uWydlcnJvciddWydwcm9maWxlJ10gKyAnPC9zcGFuPicpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKGpzb25bJ3N1Y2Nlc3MnXSkgew0KCQkJCQkNCgkJCQkJDQoJCQkJCQ0KCQkJCQkNCiAgICAgICAgICAgICAgICAgICAkKCIjR2VyaURvbiIpLnRyaWdnZXIoImNsaWNrIik7DQovKg0KICAgICAgICAgICAgICAgICAgICBpZiAoIUpvdXJuYWwuc2hvd05vdGlmaWNhdGlvbihqc29uWydzdWNjZXNzJ10sIGpzb25bJ2ltYWdlJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCcjbm90aWZpY2F0aW9uJykuaHRtbCgnPGRpdiBjbGFzcz0ic3VjY2VzcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nICsganNvblsnc3VjY2VzcyddICsgJzxpbWcgc3JjPSJjYXRhbG9nL3ZpZXcvdGhlbWUvZGVmYXVsdC9pbWFnZS9jbG9zZS5wbmciIGFsdD0iIiBjbGFzcz0iY2xvc2UiIC8+PC9kaXY+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiovDQogICAgICAgICAgICAgICAgICAgIC8vJCgnI2ZiZmFuY3lCb3gnKS5oaWRlKCk7DQogICAgICAgICAgICAgICAgICAgICQoJy5zdWNjZXNzJykuZmFkZUluKCdzbG93Jyk7DQoNCiAgICAgICAgICAgICAgICAgICAgJCgnI2NhcnQtdG90YWwnKS5odG1sKGpzb25bJ3RvdGFsJ10pOw0KCQkJCQkvL3dpbmRvdy5sb2NhdGlvbiA9ICdpbmRleC5waHA/cm91dGU9Y2hlY2tvdXQvY2FydCc7DQogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gJ2luZGV4LnBocD9yb3V0ZT1jaGVja291dC9jYXJ0JzsNCgkJCQkvKg0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvblsncmVkaXJlY3QnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBqc29uWydyZWRpcmVjdCddOw0KICAgICAgICAgICAgICAgICAgICB9DQoJCQkJCSovDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCn0NCg0KICAgICQoJyNzZXBldGUtZWtsZScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQoJDQogICAgICAgIGlmICgkKCcuaGlkZS1jYXJ0IC5yaWdodCAuY2FydC5vdXRvZnN0b2NrJykubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgIH0NCgkJDQogICAgICAgICQuYWpheCh7DQogICAgICAgICAgICB1cmw6ICdpbmRleC5waHA/cm91dGU9Y2hlY2tvdXQvY2FydC9hZGQnLA0KICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLA0KICAgICAgICAgICAgZGF0YTogJCgnI3Byb2R1Y3QgaW5wdXRbdHlwZT1cJ3RleHRcJ10sICNzZWNlbmVrbGVyIGlucHV0W3R5cGU9XCd0ZXh0XCddLCAjc2VjZW5la2xlciBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCwgI3NlY2VuZWtsZXIyIGlucHV0W3R5cGU9XCd0ZXh0XCddLCAjc2VjZW5la2xlcjIgaW5wdXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQsICNwcm9kdWN0IGlucHV0W3R5cGU9XCdoaWRkZW5cJ10sICNwcm9kdWN0IGlucHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkLCAjcHJvZHVjdCBpbnB1dFt0eXBlPVwnY2hlY2tib3hcJ106Y2hlY2tlZCwgI3Byb2R1Y3Qgc2VsZWN0LCAjcHJvZHVjdCB0ZXh0YXJlYScpLA0KICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywNCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pIHsNCiAgICAgICAgICAgICAgICAkKCcuc3VjY2VzcywgLndhcm5pbmcsIC5hdHRlbnRpb24sIGluZm9ybWF0aW9uLCAuZXJyb3InKS5yZW1vdmUoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddWydvcHRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGpzb25bJ2Vycm9yJ11bJ29wdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI29wdGlvbi0nICsgaSkuYWZ0ZXIoJzxzcGFuIGNsYXNzPSJlcnJvciI+JyArIGpzb25bJ2Vycm9yJ11bJ29wdGlvbiddW2ldICsgJzwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddWydwcm9maWxlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJ3NlbGVjdFtuYW1lPSJwcm9maWxlX2lkIl0nKS5hZnRlcignPHNwYW4gY2xhc3M9ImVycm9yIj4nICsganNvblsnZXJyb3InXVsncHJvZmlsZSddICsgJzwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChqc29uWydzdWNjZXNzJ10pIHsNCg0KICAgICAgICAgICAgICAgICAgIC8qICQuZmFuY3lib3guY2xvc2UoKTsNCg0KICAgICAgICAgICAgICAgICAgICAkKCcjbm90aWZpY2F0aW9uJykuaHRtbCgnPGRpdiBjbGFzcz0ic3VjY2VzcyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nICsganNvblsnc3VjY2VzcyddICsgJzxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvZGl2PicpOw0KDQogICAgICAgICAgICAgICAgICAgICQoJy5zdWNjZXNzJykuZmFkZUluKCdzbG93Jyk7DQoNCiAgICAgICAgICAgICAgICAgICAgJCgnI2NhcnQtdG90YWwnKS5odG1sKGpzb25bJ3RvdGFsJ10pOw0KDQogICAgICAgICAgICAgICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAwIH0sICdzbG93Jyk7DQoJCQkJCQ0KCQkJCQkkKCcuZmFuY3lib3h4JykuZmFuY3lib3goew0KDQoJCQkJCQkgICAgZml0VG9WaWV3IDogdHJ1ZSwNCgkJCQkJCSAgICBhdXRvU2l6ZSA6IHRydWUsDQoJCQkJCQkJYmVmb3JlU2hvdzogZnVuY3Rpb24oKXsNCg0KCQkJCQkJCX0NCgkJCQkJfSkudHJpZ2dlcigiY2xpY2siKTsqLw0KCQkJCQkNCgkJCQkJbG9jYXRpb24gPSAnaW5kZXgucGhwP3JvdXRlPWNoZWNrb3V0L2NhcnQnOw0KCQkJCQkNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25bJ3JlZGlyZWN0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0ganNvblsncmVkaXJlY3QnXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgICQuY29sb3Jib3goe2lubGluZTp0cnVlLCB3aWR0aCA6ICc1MzVweCcsICdoZWlnaHQnOiAnMTUwcHgnLCBocmVmOiAnI2FmdGVyLXNheWZhJywgIG9wZW46IHRydWUsIG9wYWNpdHk6IDAuN30pLnJlc2l6ZSgpOw0KDQogICAgfSk7DQoNCgkvLy0tPjwvc2NyaXB0PgkNCgkNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQokKCdzZWxlY3RbbmFtZT1cJ3JlY3VycmluZ19pZFwnXSwgaW5wdXRbbmFtZT0icXVhbnRpdHkiXScpLmNoYW5nZShmdW5jdGlvbigpew0KCSQuYWpheCh7DQoJCXVybDogJ2luZGV4LnBocD9yb3V0ZT1wcm9kdWN0L3Byb2R1Y3QvZ2V0UmVjdXJyaW5nRGVzY3JpcHRpb24nLA0KCQl0eXBlOiAncG9zdCcsDQoJCWRhdGE6ICQoJ2lucHV0W25hbWU9XCdwcm9kdWN0X2lkXCddLCBpbnB1dFtuYW1lPVwncXVhbnRpdHlcJ10sIHNlbGVjdFtuYW1lPVwncmVjdXJyaW5nX2lkXCddJyksDQoJCWRhdGFUeXBlOiAnanNvbicsDQoJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkgew0KCQkJJCgnI3JlY3VycmluZy1kZXNjcmlwdGlvbicpLmh0bWwoJycpOw0KCQl9LA0KCQlzdWNjZXNzOiBmdW5jdGlvbihqc29uKSB7DQoJCQkkKCcuYWxlcnQsIC50ZXh0LWRhbmdlcicpLnJlbW92ZSgpOw0KCQkJDQoJCQlpZiAoanNvblsnc3VjY2VzcyddKSB7DQoJCQkJJCgnI3JlY3VycmluZy1kZXNjcmlwdGlvbicpLmh0bWwoanNvblsnc3VjY2VzcyddKTsNCgkJCX0NCgkJfQ0KCX0pOw0KfSk7DQovLy0tPjwvc2NyaXB0PiANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQokKCcuZGF0ZScpLmRhdGV0aW1lcGlja2VyKHsNCglwaWNrVGltZTogZmFsc2UNCn0pOw0KDQokKCcuZGF0ZXRpbWUnKS5kYXRldGltZXBpY2tlcih7DQoJcGlja0RhdGU6IHRydWUsDQoJcGlja1RpbWU6IHRydWUNCn0pOw0KDQokKCcudGltZScpLmRhdGV0aW1lcGlja2VyKHsNCglwaWNrRGF0ZTogZmFsc2UNCn0pOw0KDQokKCdidXR0b25baWRePVwnYnV0dG9uLXVwbG9hZFwnXScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KCXZhciBub2RlID0gdGhpczsNCgkNCgkkKCcjZm9ybS11cGxvYWQnKS5yZW1vdmUoKTsNCgkNCgkkKCdib2R5JykucHJlcGVuZCgnPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgaWQ9ImZvcm0tdXBsb2FkIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiAvPjwvZm9ybT4nKTsNCgkNCgkkKCcjZm9ybS11cGxvYWQgaW5wdXRbbmFtZT1cJ2ZpbGVcJ10nKS50cmlnZ2VyKCdjbGljaycpOw0KCQ0KCXRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQoJCWlmICgkKCcjZm9ybS11cGxvYWQgaW5wdXRbbmFtZT1cJ2ZpbGVcJ10nKS52YWwoKSAhPSAnJykgew0KCQkJY2xlYXJJbnRlcnZhbCh0aW1lcik7DQoJCQkNCgkJCSQuYWpheCh7DQoJCQkJdXJsOiAnaW5kZXgucGhwP3JvdXRlPXRvb2wvdXBsb2FkJywNCgkJCQl0eXBlOiAncG9zdCcsDQoJCQkJZGF0YVR5cGU6ICdqc29uJywNCgkJCQlkYXRhOiBuZXcgRm9ybURhdGEoJCgnI2Zvcm0tdXBsb2FkJylbMF0pLA0KCQkJCWNhY2hlOiBmYWxzZSwNCgkJCQljb250ZW50VHlwZTogZmFsc2UsDQoJCQkJcHJvY2Vzc0RhdGE6IGZhbHNlLA0KCQkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKG5vZGUpLmJ1dHRvbignbG9hZGluZycpOw0KCQkJCX0sDQoJCQkJY29tcGxldGU6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKG5vZGUpLmJ1dHRvbigncmVzZXQnKTsNCgkJCQl9LA0KCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pIHsNCgkJCQkJJCgnLnRleHQtZGFuZ2VyJykucmVtb3ZlKCk7DQoJCQkJCQ0KCQkJCQlpZiAoanNvblsnZXJyb3InXSkgew0KCQkJCQkJJChub2RlKS5wYXJlbnQoKS5maW5kKCdpbnB1dCcpLmFmdGVyKCc8ZGl2IGNsYXNzPSJ0ZXh0LWRhbmdlciI+JyArIGpzb25bJ2Vycm9yJ10gKyAnPC9kaXY+Jyk7DQoJCQkJCX0NCgkJCQkJDQoJCQkJCWlmIChqc29uWydzdWNjZXNzJ10pIHsNCgkJCQkJCWFsZXJ0KGpzb25bJ3N1Y2Nlc3MnXSk7DQoJCQkJCQkNCgkJCQkJCSQobm9kZSkucGFyZW50KCkuZmluZCgnaW5wdXQnKS5hdHRyKCd2YWx1ZScsIGpzb25bJ2NvZGUnXSk7DQoJCQkJCX0NCgkJCQl9LA0KCQkJCWVycm9yOiBmdW5jdGlvbih4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcikgew0KCQkJCQlhbGVydCh0aHJvd25FcnJvciArICJcclxuIiArIHhoci5zdGF0dXNUZXh0ICsgIlxyXG4iICsgeGhyLnJlc3BvbnNlVGV4dCk7DQoJCQkJfQ0KCQkJfSk7DQoJCX0NCgl9LCA1MDApOw0KfSk7DQovLy0tPjwvc2NyaXB0PiANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQokKCcjcmV2aWV3JykuZGVsZWdhdGUoJy5wYWdpbmF0aW9uIGEnLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7DQogIGUucHJldmVudERlZmF1bHQoKTsNCg0KICAgICQoJyNyZXZpZXcnKS5mYWRlT3V0KCdzbG93Jyk7DQoNCiAgICAkKCcjcmV2aWV3JykubG9hZCh0aGlzLmhyZWYpOw0KDQogICAgJCgnI3JldmlldycpLmZhZGVJbignc2xvdycpOw0KfSk7DQoNCiQoJyNyZXZpZXcnKS5sb2FkKCdpbmRleC5waHA/cm91dGU9cHJvZHVjdC9wcm9kdWN0L3JldmlldyZwcm9kdWN0X2lkPTw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+Jyk7DQoNCiQoJyNidXR0b24tcmV2aWV3Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7DQoJJC5hamF4KHsNCgkJdXJsOiAnaW5kZXgucGhwP3JvdXRlPXByb2R1Y3QvcHJvZHVjdC93cml0ZSZwcm9kdWN0X2lkPTw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+JywNCgkJdHlwZTogJ3Bvc3QnLA0KCQlkYXRhVHlwZTogJ2pzb24nLA0KICAgIDw/cGhwIGlmICh2ZXJzaW9uX2NvbXBhcmUoVkVSU0lPTiwgJzIuMC4yJywgJzwnKSk6ID8+DQoJCWRhdGE6ICduYW1lPScgKyBlbmNvZGVVUklDb21wb25lbnQoJCgnaW5wdXRbbmFtZT1cJ25hbWVcJ10nKS52YWwoKSkgKyAnJnRleHQ9JyArIGVuY29kZVVSSUNvbXBvbmVudCgkKCd0ZXh0YXJlYVtuYW1lPVwndGV4dFwnXScpLnZhbCgpKSArICcmcmF0aW5nPScgKyBlbmNvZGVVUklDb21wb25lbnQoJCgnaW5wdXRbbmFtZT1cJ3JhdGluZ1wnXTpjaGVja2VkJykudmFsKCkgPyAkKCdpbnB1dFtuYW1lPVwncmF0aW5nXCddOmNoZWNrZWQnKS52YWwoKSA6ICcnKSArICcmY2FwdGNoYT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCQoJ2lucHV0W25hbWU9XCdjYXB0Y2hhXCddJykudmFsKCkpLA0KICAgIDw/cGhwIGVsc2U6ID8+DQogICAgZGF0YTogJCgiI2Zvcm0tcmV2aWV3Iikuc2VyaWFsaXplKCksDQogICAgPD9waHAgZW5kaWY7ID8+DQoJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkgew0KCQkJJCgnI2J1dHRvbi1yZXZpZXcnKS5idXR0b24oJ2xvYWRpbmcnKTsNCgkJfSwNCgkJY29tcGxldGU6IGZ1bmN0aW9uKCkgew0KCQkJJCgnI2J1dHRvbi1yZXZpZXcnKS5idXR0b24oJ3Jlc2V0Jyk7DQogICAgICA8P3BocCBpZiAodmVyc2lvbl9jb21wYXJlKFZFUlNJT04sICcyLjAuMicsICc8JykpOiA/Pg0KCQkJJCgnI2NhcHRjaGEnKS5hdHRyKCdzcmMnLCAnaW5kZXgucGhwP3JvdXRlPXRvb2wvY2FwdGNoYSMnK25ldyBEYXRlKCkuZ2V0VGltZSgpKTsNCgkJCSQoJ2lucHV0W25hbWU9XCdjYXB0Y2hhXCddJykudmFsKCcnKTsNCiAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KCQl9LA0KCQlzdWNjZXNzOiBmdW5jdGlvbihqc29uKSB7DQoJCQkkKCcuYWxlcnQtc3VjY2VzcywgLmFsZXJ0LWRhbmdlcicpLnJlbW92ZSgpOw0KCQkJDQoJCQlpZiAoanNvblsnZXJyb3InXSkgew0KCQkJCSQoJyNyZXZpZXcnKS5hZnRlcignPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIHdhcm5pbmciPjxpIGNsYXNzPSJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGUiPjwvaT4gJyArIGpzb25bJ2Vycm9yJ10gKyAnPC9kaXY+Jyk7DQoJCQl9DQoJCQkNCgkJCWlmIChqc29uWydzdWNjZXNzJ10pIHsNCgkJCQkkKCcjcmV2aWV3JykuYWZ0ZXIoJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3Mgc3VjY2VzcyI+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLWNpcmNsZSI+PC9pPiAnICsganNvblsnc3VjY2VzcyddICsgJzwvZGl2PicpOw0KCQkJCQ0KCQkJCSQoJ2lucHV0W25hbWU9XCduYW1lXCddJykudmFsKCcnKTsNCgkJCQkkKCd0ZXh0YXJlYVtuYW1lPVwndGV4dFwnXScpLnZhbCgnJyk7DQoJCQkJJCgnaW5wdXRbbmFtZT1cJ3JhdGluZ1wnXTpjaGVja2VkJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsNCiAgICAgICAgPD9waHAgaWYgKHZlcnNpb25fY29tcGFyZShWRVJTSU9OLCAnMi4wLjInLCAnPCcpKTogPz4NCgkJCQkkKCdpbnB1dFtuYW1lPVwnY2FwdGNoYVwnXScpLnZhbCgnJyk7DQogICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KCQkJfQ0KCQl9DQoJfSk7DQp9KTsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQoJJCgnLnRodW1ibmFpbHMnKS5tYWduaWZpY1BvcHVwKHsNCgkJdHlwZTonaW1hZ2UnLA0KCQlkZWxlZ2F0ZTogJ2EnLA0KCQlnYWxsZXJ5OiB7DQoJCQllbmFibGVkOnRydWUNCgkJfQ0KCX0pOw0KfSk7DQovLy0tPjwvc2NyaXB0PiANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQoJCQkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQoJCQkJCS8vJCgnW25hbWVePVwnb3B0aW9uXCddJykudHJpZ2dlcignY2hhbmdlJyk7DQoJCQkJfSk7DQoJCQkJDQoJCQkJJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuYWNpbGlyX2xpc3RlbGVyJywgZnVuY3Rpb24oKSB7DQoJDQoJCQkJdmFyIHZhbHVlID0gJCh0aGlzKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7DQoJCQkJdmFsdWUgPSAkLnRyaW0odmFsdWUpOw0KCQkJCWlmKHZhbHVlID09ICJFdmV0Iil7DQoJCQkJCSQoIi5naXpsZSIpLmNzcygiZGlzcGxheSIsImJsb2NrIik7DQoJCQkJCQ0KCQkJCX1lbHNlIGlmKHZhbHVlID09ICJZZXMiKXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsNCgkJCQkJDQoJCQkJCQkJCX1lbHNlIGlmKHZhbHVlID09ICJKYSIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkNCgkJCQkJCQkJfWVsc2UgaWYodmFsdWUgPT0gIk91aSIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkNCgkJCQkJCQkJfWVsc2UgaWYodmFsdWUgPT0gIlPDrCIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkJCQl9ZWxzZSBpZih2YWx1ZSA9PSAiU8OtIil7DQoJCQkJCSQoIi5naXpsZSIpLmNzcygiZGlzcGxheSIsImJsb2NrIik7DQoJCQkJCQkJCX1lbHNlIGlmKHZhbHVlID09ICJKYSIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkNCgkJCQkJCQ0KCQkJCX1lbHNlew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJub25lIik7DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkvKg0KCQ0KCSQodGhpcykuYWZ0ZXIoJzxkaXYgY2xhc3M9Inl1a2xlbml5b3IiPjxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIHNlbGVjdGlvbi13YWl0Ij48L2k+IFnDvGtsZW5peW9yLi4uPC9kaXY+Jyk7DQoJCQkJCQ0KCQkJCQkNCgkJCQkJDQoJCQkJCXZhciB2YWx1ZSA9ICQodGhpcykudmFsKCk7DQoJCQkJCXZhciBwYXJlbnRfaWQgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKS5yZXBsYWNlICgvW15cZC5dL2csICcnKTsNCgkJCQ0KCQkJCQkkLmFqYXgoew0KCQkJCQkJdXJsOiAnaW5kZXgucGhwP3JvdXRlPXByb2R1Y3QvcHJvZHVjdC9kZXBlbmRlbnRvcHRpb24mcGFyZW50X2lkPScgKyAgcGFyZW50X2lkICsgJyZ2YWx1ZT0nICsgdmFsdWUgKyAnJnByb2R1Y3RfaWQ9PD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4nLA0KCQkJCQkJdHlwZTogJ2dldCcsDQoJCQkJCQlkYXRhVHlwZTogJ2pzb24nLAkJCQ0KCQkJCQkJc3VjY2VzczogZnVuY3Rpb24oanNvbikgew0KCQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCSQoJy55dWtsZW5peW9yJykucmVtb3ZlKCk7DQoJCQkJCQkJDQoJCQkJCQkJaWYgKGpzb25bJ29wdGlvbiddKSB7DQoJCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBqc29uWydvcHRpb24nXS5sZW5ndGg7IGkrKykgew0KCQkJCQkJCQkJdmFyIHByb2RPcHRpb24gPSAkKCcjaW5wdXQtb3B0aW9uJyArIGpzb25bJ29wdGlvbiddW2ldWydwcm9kdWN0X29wdGlvbl9pZCddKTsNCgkJCQkJCQkJCQ0KCQkJCQkJCQkJDQoJCQkJCQkJCQlpZiAoanNvblsnb3B0aW9uJ11baV1bJ3R5cGUnXSA9PSAnc2VsZWN0Jykgew0KCQkJCQkJCQkJCXByb2RPcHRpb24ucGFyZW50KCkuaGlkZSgpOw0KCQkJCQkJCQkJCXByb2RPcHRpb24ubmV4dCgpLmNoaWxkcmVuKCkuaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJcHJvZE9wdGlvbi5uZXh0KCkuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsNCgkJCQkJCQkJCQl2YXIgaHRtbCA9ICcnOw0KCQkJCQkJDQoNCgkJCQkJCQkJCQlodG1sICs9ICc8b3B0aW9uIHZhbHVlPSIiPjw/cGhwIGVjaG8gJHRleHRfc2VsZWN0OyA/Pjwvb3B0aW9uPic7DQoJCQkJCQkJCQkJDQoJCQkJCQkJCQkJDQoNCgkJCQkJCQkJCQlmb3IgKGogPSAwOyBqIDwganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddLmxlbmd0aDsgaisrKSB7DQoJCQkJCQkJCQkJCXByb2RPcHRpb24ucGFyZW50KCkuc2hvdygpOw0KCQkJCQkJCQkJCQlwcm9kT3B0aW9uLm5leHQoKS5zaG93KCk7DQoJCQkJCQkJCQkJCSQoJ2xpW2RhdGEtdmFsdWU9IicgKyBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ11bal1bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ10gKyAnIl0nKS5zaG93KCk7DQoJCQkJCQkJCQkJCQ0KDQoJCQkJCQkJCQkJCWh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ11bal1bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ10gKyAnIj4nICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWyduYW1lJ107DQoNCg0KCQkJCQkJCQkJCQlpZiAoanNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcmljZSddKSB7DQoJCQkJCQkJCQkJCQlodG1sICs9ICcgKCcgKyBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ11bal1bJ3ByaWNlX3ByZWZpeCddICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcmljZSddICsgJyknOw0KCQkJCQkJCQkJCQl9DQoJCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQlodG1sICs9ICc8L29wdGlvbj4nOw0KDQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCSQoJ3NlbGVjdFtuYW1lPVwnb3B0aW9uWycgKyBqc29uWydvcHRpb24nXVtpXVsncHJvZHVjdF9vcHRpb25faWQnXSArICddXCddJykuaHRtbChodG1sKTsNCgkNCg0KCQkJCQkJCQkJCQ0KDQoJCQkJCQkJCQl9IGVsc2UgaWYgKGpzb25bJ29wdGlvbiddW2ldWyd0eXBlJ10gPT0gJ3JhZGlvJyB8fCBqc29uWydvcHRpb24nXVtpXVsndHlwZSddID09ICdjaGVja2JveCcgfHwganNvblsnb3B0aW9uJ11baV1bJ3R5cGUnXSA9PSAnaW1hZ2UnKSB7DQoJCQkJCQkJCQkJDQoJCQkJCQkJCQkJcHJvZE9wdGlvbi5wYXJlbnQoKS5oaWRlKCk7DQoJCQkJCQkJCQkJcHJvZE9wdGlvbi5uZXh0KCkuY2hpbGRyZW4oKS5oaWRlKCk7DQoJCQkJCQkJCQkJdmFyIGh0bWwgPSAnJzsNCgkJCQkJCQkJCQkNCgkJCQkJCQkJCQlwcm9kT3B0aW9uLmZpbmQoJ2lucHV0JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsNCgkJCQkJCQkJCQ0KCQkJCQkJCQkJCWZvciAoaiA9IDA7IGogPCBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ10ubGVuZ3RoOyBqKyspIHsNCg0KCQkJCQkJCQkJCQkkKCdsaVtkYXRhLXZhbHVlPSInICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddICsgJyJdJykuc2hvdygpOw0KDQoJCQkJCQkJCQkJCXByb2RPcHRpb24ucGFyZW50KCkuc2hvdygpOw0KCQkJCQkJCQkJCQlwcm9kT3B0aW9uLnNob3coKTsNCgkJCQkJCQkJCQkJcHJvZE9wdGlvbi5zaWJsaW5ncygnLmNvbnRyb2wtbGFiZWwnKS5zaG93KCk7CQkJCQkJCQkJCQkNCgkJCQkJCQkJCQkJcHJvZE9wdGlvbi5maW5kKCdpbnB1dFt2YWx1ZT1cJycgKyBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ11bal1bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ10gKyAnXCddJykucGFyZW50KCkuc2hvdygpOw0KCQkJCQkJCQkJCQlwcm9kT3B0aW9uLmZpbmQoJ2lucHV0W3ZhbHVlPVwnJyArIGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXVtqXVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXSArICdcJ10nKS5wYXJlbnQoKS5wYXJlbnQoKS5zaG93KCk7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCQkvLyBGaWxlLCB0ZXh0LCB0ZXh0YXJlYSwgZGF0ZSwgZGF0ZXRpbWUNCgkJCQkJCQkJCQlpZiAoanNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddKSB7DQoJCQkJCQkJCQkJCSQoJyNpbnB1dC1vcHRpb24nICsganNvblsnb3B0aW9uJ11baV1bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ10pLnBhcmVudHMoJy5mb3JtLWdyb3VwJykuc3RvcCgpLmZhZGVJbignbWVkaXVtJyk7DQoJCQkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCQkJJCgnI2lucHV0LW9wdGlvbicgKyBqc29uWydvcHRpb24nXVtpXVsncHJvZHVjdF9vcHRpb25faWQnXSkucGFyZW50cygnLmZvcm0tZ3JvdXAnKS5zdG9wKCkuZmFkZU91dCgnbWVkaXVtJyk7DQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KDQoJCQkJCQl9LA0KCQkJCQkJZXJyb3I6IGZ1bmN0aW9uKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKSB7DQoJCQkJCQkJYWxlcnQodGhyb3duRXJyb3IgKyAiXHJcbiIgKyB4aHIuc3RhdHVzVGV4dCArICJcclxuIiArIHhoci5yZXNwb25zZVRleHQpOw0KCQkJCQkJfQ0KCQkJCQl9KTsJDQoJCQkJCSovDQoJCQkJfSk7DQoJCQkJLy8tLT48L3NjcmlwdD4NCjw/cGhwIGVjaG8gJGZvb3RlcjsgPz4="));
  ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 20045ae5adb9a06e83b15563d57052c6
Eval Count 1
Decode Time 321 ms