WordPress.org

Make WordPress Core

Ticket #30439: 30439.diff

File 30439.diff, 590.5 KB (added by toddmilliken, 4 years ago)

Fixes CSS Parsing error by removing a trailing comma.

  • src/wp-content/themes/twentyfourteen/footer.php

     
    2020                                <?php do_action( 'twentyfourteen_credits' ); ?>
    2121                                <a href="<?php echo esc_url( __( 'https://wordpress.org/', 'twentyfourteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?></a>
    2222                        </div><!-- .site-info -->
     23                        <?php if ( has_nav_menu( 'social' ) ) : ?>
     24                                <nav id="social-navigation" class="social-navigation" role="navigation">
     25                                        <?php
     26                                                // Social links navigation menu.
     27                                                wp_nav_menu( array(
     28                                                        'theme_location' => 'social',
     29                                                        'depth'          => 1,
     30                                                        'link_before'    => '<span class="screen-reader-text">',
     31                                                        'link_after'     => '</span>',
     32                                                ) );
     33                                        ?>
     34                                </nav><!-- .social-navigation -->
     35                        <?php endif; ?>
    2336                </footer><!-- #colophon -->
    2437        </div><!-- #page -->
    2538
    2639        <?php wp_footer(); ?>
    2740</body>
    28 </html>
    29  No newline at end of file
     41</html>
  • src/wp-content/themes/twentyfourteen/functions.php

     
    7878        set_post_thumbnail_size( 672, 372, true );
    7979        add_image_size( 'twentyfourteen-full-width', 1038, 576, true );
    8080
    81         // This theme uses wp_nav_menu() in two locations.
     81        // This theme uses wp_nav_menu() in three locations.
    8282        register_nav_menus( array(
    8383                'primary'   => __( 'Top primary menu', 'twentyfourteen' ),
    8484                'secondary' => __( 'Secondary menu in left sidebar', 'twentyfourteen' ),
     85                'social'  => __( 'Social Links Menu', 'twentyfifteen' ),
    8586        ) );
    8687
    8788        /*
  • src/wp-content/themes/twentyfourteen/genericons/genericons.css

     
    11/**
    22
    3         Genericons Helper CSS
     3        Genericons
    44
    55*/
    66
    77
    8 /**
    9  * The font was graciously generated by Font Squirrel (http://www.fontsquirrel.com). We love those guys.
    10  */
     8/* IE8 and below use EOT and allow cross-site embedding.
     9   IE9 uses WOFF which is base64 encoded to allow cross-site embedding.
     10   So unfortunately, IE9 will throw a console error, but it'll still work.
     11   When the font is base64 encoded, cross-site embedding works in Firefox */
    1112
    1213@font-face {
    1314    font-family: 'Genericons';
    14     src: url('font/genericons-regular-webfont.eot');
     15    src: url('Genericons.eot');
    1516}
    1617
    1718@font-face {
    1819    font-family: 'Genericons';
    19     src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),
    20          url('font/genericons-regular-webfont.ttf') format('truetype'),
    21          url('font/genericons-regular-webfont.svg#genericonsregular') format('svg');
     20    src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'),
     21         url('Genericons.ttf') format('truetype'),
     22         url('Genericons.svg#genericonsregular') format('svg');
    2223    font-weight: normal;
    2324    font-style: normal;
    2425}
    2526
     27@media screen and (-webkit-min-device-pixel-ratio:0) {
     28  @font-face {
     29    font-family: "Genericons";
     30    src: url("./Genericons.svg#Genericons") format("svg");
     31  }
     32}
    2633
     34
    2735/**
    2836 * All Genericons
    2937 */
    3038
    3139.genericon {
     40        font-size: 16px;
     41        vertical-align: top;
     42        text-align: center;
     43        -moz-transition: color .1s ease-in 0;
     44        -webkit-transition: color .1s ease-in 0;
    3245        display: inline-block;
    33         width: 16px;
    34         height: 16px;
    35         -webkit-font-smoothing: antialiased;
    36         -moz-osx-font-smoothing: grayscale;
    37         font-size: 16px;
     46        font-family: "Genericons";
     47        font-style: normal;
     48        font-weight: normal;
     49        font-variant: normal;
    3850        line-height: 1;
    39         font-family: 'Genericons';
    4051        text-decoration: inherit;
    41         font-weight: normal;
    42         font-style: normal;
    43         vertical-align: top;
     52        text-transform: none;
     53        -moz-osx-font-smoothing: grayscale;
     54        -webkit-font-smoothing: antialiased;
     55        speak: none;
    4456}
    4557
    46 /**
    47  * IE7 and IE6 hacks
    48  */
    4958
    50 .genericon {
    51         *overflow: auto;
    52         *zoom: 1;
    53         *display: inline;
    54 }
    55 
    5659/**
    5760 * Individual icons
    5861 */
    5962
    60 /* Post formats */
    61 .genericon-standard:before {        content: '\f100'; }
    62 .genericon-aside:before {           content: '\f101'; }
    63 .genericon-image:before {           content: '\f102'; }
    64 .genericon-gallery:before {         content: '\f103'; }
    65 .genericon-video:before {           content: '\f104'; }
    66 .genericon-status:before {          content: '\f105'; }
    67 .genericon-quote:before {           content: '\f106'; }
    68 .genericon-link:before {            content: '\f107'; }
    69 .genericon-chat:before {            content: '\f108'; }
    70 .genericon-audio:before {           content: '\f109'; }
    71 
    72 /* Social icons */
    73 .genericon-github:before {          content: '\f200'; }
    74 .genericon-dribbble:before {        content: '\f201'; }
    75 .genericon-twitter:before {         content: '\f202'; }
    76 .genericon-facebook:before {        content: '\f203'; }
    77 .genericon-facebook-alt:before {    content: '\f204'; }
    78 .genericon-wordpress:before {       content: '\f205'; }
    79 .genericon-googleplus:before {      content: '\f206'; }
    80 .genericon-linkedin:before {        content: '\f207'; }
    81 .genericon-linkedin-alt:before {    content: '\f208'; }
    82 .genericon-pinterest:before {       content: '\f209'; }
    83 .genericon-pinterest-alt:before {   content: '\f210'; }
    84 .genericon-flickr:before {          content: '\f211'; }
    85 .genericon-vimeo:before {           content: '\f212'; }
    86 .genericon-youtube:before {         content: '\f213'; }
    87 .genericon-tumblr:before {          content: '\f214'; }
    88 .genericon-instagram:before {       content: '\f215'; }
    89 .genericon-codepen:before {         content: '\f216'; }
    90 .genericon-polldaddy:before {       content: '\f217'; }
    91 .genericon-googleplus-alt:before {  content: '\f218'; }
    92 .genericon-path:before {            content: '\f219'; }
    93 .genericon-skype:before {           content: '\f220'; }
    94 .genericon-digg:before {            content: '\f221'; }
    95 .genericon-reddit:before {          content: '\f222'; }
    96 .genericon-stumbleupon:before {     content: '\f223'; }
    97 .genericon-pocket:before {          content: '\f224'; }
    98 .genericon-dropbox:before {         content: '\f225'; }
    99 
    100 /* Meta icons */
    101 .genericon-comment:before {         content: '\f300'; }
    102 .genericon-category:before {        content: '\f301'; }
    103 .genericon-tag:before {             content: '\f302'; }
    104 .genericon-time:before {            content: '\f303'; }
    105 .genericon-user:before {            content: '\f304'; }
    106 .genericon-day:before {             content: '\f305'; }
    107 .genericon-week:before {            content: '\f306'; }
    108 .genericon-month:before {           content: '\f307'; }
    109 .genericon-pinned:before {          content: '\f308'; }
    110 
    111 /* Other icons */
    112 .genericon-search:before {          content: '\f400'; }
    113 .genericon-unzoom:before {          content: '\f401'; }
    114 .genericon-zoom:before {            content: '\f402'; }
    115 .genericon-show:before {            content: '\f403'; }
    116 .genericon-hide:before {            content: '\f404'; }
    117 .genericon-close:before {           content: '\f405'; }
    118 .genericon-close-alt:before {       content: '\f406'; }
    119 .genericon-trash:before {           content: '\f407'; }
    120 .genericon-star:before {            content: '\f408'; }
    121 .genericon-home:before {            content: '\f409'; }
    122 .genericon-mail:before {            content: '\f410'; }
    123 .genericon-edit:before {            content: '\f411'; }
    124 .genericon-reply:before {           content: '\f412'; }
    125 .genericon-feed:before {            content: '\f413'; }
    126 .genericon-warning:before {         content: '\f414'; }
    127 .genericon-share:before {           content: '\f415'; }
    128 .genericon-attachment:before {      content: '\f416'; }
    129 .genericon-location:before {        content: '\f417'; }
    130 .genericon-checkmark:before {       content: '\f418'; }
    131 .genericon-menu:before {            content: '\f419'; }
    132 .genericon-refresh:before {         content: '\f420'; }
    133 .genericon-minimize:before {        content: '\f421'; }
    134 .genericon-maximize:before {        content: '\f422'; }
    135 .genericon-404:before {             content: '\f423'; }
    136 .genericon-spam:before {            content: '\f424'; }
    137 .genericon-summary:before {         content: '\f425'; }
    138 .genericon-cloud:before {           content: '\f426'; }
    139 .genericon-key:before {             content: '\f427'; }
    140 .genericon-dot:before {             content: '\f428'; }
    141 .genericon-next:before {            content: '\f429'; }
    142 .genericon-previous:before {        content: '\f430'; }
    143 .genericon-expand:before {          content: '\f431'; }
    144 .genericon-collapse:before {        content: '\f432'; }
    145 .genericon-dropdown:before {        content: '\f433'; }
    146 .genericon-dropdown-left:before {   content: '\f434'; }
    147 .genericon-top:before {             content: '\f435'; }
    148 .genericon-draggable:before {       content: '\f436'; }
    149 .genericon-phone:before {           content: '\f437'; }
    150 .genericon-send-to-phone:before {   content: '\f438'; }
    151 .genericon-plugin:before {          content: '\f439'; }
    152 .genericon-cloud-download:before {  content: '\f440'; }
    153 .genericon-cloud-upload:before {    content: '\f441'; }
    154 .genericon-external:before {        content: '\f442'; }
    155 .genericon-document:before {        content: '\f443'; }
    156 .genericon-book:before {            content: '\f444'; }
    157 .genericon-cog:before {             content: '\f445'; }
    158 .genericon-unapprove:before {       content: '\f446'; }
    159 .genericon-cart:before {            content: '\f447'; }
    160 .genericon-pause:before {           content: '\f448'; }
    161 .genericon-stop:before {            content: '\f449'; }
    162 .genericon-skip-back:before {       content: '\f450'; }
    163 .genericon-skip-ahead:before {      content: '\f451'; }
    164 .genericon-play:before {            content: '\f452'; }
    165 .genericon-tablet:before {          content: '\f453'; }
    166 .genericon-send-to-tablet:before {  content: '\f454'; }
    167 .genericon-info:before {            content: '\f455'; }
    168 .genericon-notice:before {          content: '\f456'; }
    169 .genericon-help:before {            content: '\f457'; }
    170 .genericon-fastforward:before {     content: '\f458'; }
    171 .genericon-rewind:before {          content: '\f459'; }
    172 .genericon-portfolio:before {       content: '\f460'; }
    173 .genericon-heart:before {           content: '\f461'; }
    174 .genericon-code:before {            content: '\f462'; }
    175 .genericon-subscribe:before {       content: '\f463'; }
    176 .genericon-unsubscribe:before {     content: '\f464'; }
    177 .genericon-subscribed:before {      content: '\f465'; }
    178 .genericon-reply-alt:before {       content: '\f466'; }
    179 .genericon-reply-single:before {    content: '\f467'; }
    180 .genericon-flag:before {            content: '\f468'; }
    181 .genericon-print:before {           content: '\f469'; }
    182 .genericon-lock:before {            content: '\f470'; }
    183 .genericon-bold:before {            content: '\f471'; }
    184 .genericon-italic:before {          content: '\f472'; }
    185 .genericon-picture:before {         content: '\f473'; }
    186 .genericon-fullscreen:before {      content: '\f474'; }
    187 
    188 /* Generic shapes */
    189 .genericon-uparrow:before {         content: '\f500'; }
    190 .genericon-rightarrow:before {      content: '\f501'; }
    191 .genericon-downarrow:before {       content: '\f502'; }
    192 .genericon-leftarrow:before {       content: '\f503'; }
    193 
    194 
    195 
    196 
    197 
     63.genericon-404:before { content: "\f423"; }
     64.genericon-activity:before { content: "\f508"; }
     65.genericon-anchor:before { content: "\f509"; }
     66.genericon-aside:before { content: "\f101"; }
     67.genericon-attachment:before { content: "\f416"; }
     68.genericon-audio:before { content: "\f109"; }
     69.genericon-bold:before { content: "\f471"; }
     70.genericon-book:before { content: "\f444"; }
     71.genericon-bug:before { content: "\f50a"; }
     72.genericon-cart:before { content: "\f447"; }
     73.genericon-category:before { content: "\f301"; }
     74.genericon-chat:before { content: "\f108"; }
     75.genericon-checkmark:before { content: "\f418"; }
     76.genericon-close:before { content: "\f405"; }
     77.genericon-close-alt:before { content: "\f406"; }
     78.genericon-cloud:before { content: "\f426"; }
     79.genericon-cloud-download:before { content: "\f440"; }
     80.genericon-cloud-upload:before { content: "\f441"; }
     81.genericon-code:before { content: "\f462"; }
     82.genericon-codepen:before { content: "\f216"; }
     83.genericon-cog:before { content: "\f445"; }
     84.genericon-collapse:before { content: "\f432"; }
     85.genericon-comment:before { content: "\f300"; }
     86.genericon-day:before { content: "\f305"; }
     87.genericon-digg:before { content: "\f221"; }
     88.genericon-document:before { content: "\f443"; }
     89.genericon-dot:before { content: "\f428"; }
     90.genericon-downarrow:before { content: "\f502"; }
     91.genericon-download:before { content: "\f50b"; }
     92.genericon-draggable:before { content: "\f436"; }
     93.genericon-dribbble:before { content: "\f201"; }
     94.genericon-dropbox:before { content: "\f225"; }
     95.genericon-dropdown:before { content: "\f433"; }
     96.genericon-dropdown-left:before { content: "\f434"; }
     97.genericon-edit:before { content: "\f411"; }
     98.genericon-ellipsis:before { content: "\f476"; }
     99.genericon-expand:before { content: "\f431"; }
     100.genericon-external:before { content: "\f442"; }
     101.genericon-facebook:before { content: "\f203"; }
     102.genericon-facebook-alt:before { content: "\f204"; }
     103.genericon-fastforward:before { content: "\f458"; }
     104.genericon-feed:before { content: "\f413"; }
     105.genericon-flag:before { content: "\f468"; }
     106.genericon-flickr:before { content: "\f211"; }
     107.genericon-foursquare:before { content: "\f226"; }
     108.genericon-fullscreen:before { content: "\f474"; }
     109.genericon-gallery:before { content: "\f103"; }
     110.genericon-github:before { content: "\f200"; }
     111.genericon-googleplus:before { content: "\f206"; }
     112.genericon-googleplus-alt:before { content: "\f218"; }
     113.genericon-handset:before { content: "\f50c"; }
     114.genericon-heart:before { content: "\f461"; }
     115.genericon-help:before { content: "\f457"; }
     116.genericon-hide:before { content: "\f404"; }
     117.genericon-hierarchy:before { content: "\f505"; }
     118.genericon-home:before { content: "\f409"; }
     119.genericon-image:before { content: "\f102"; }
     120.genericon-info:before { content: "\f455"; }
     121.genericon-instagram:before { content: "\f215"; }
     122.genericon-italic:before { content: "\f472"; }
     123.genericon-key:before { content: "\f427"; }
     124.genericon-leftarrow:before { content: "\f503"; }
     125.genericon-link:before { content: "\f107"; }
     126.genericon-linkedin:before { content: "\f207"; }
     127.genericon-linkedin-alt:before { content: "\f208"; }
     128.genericon-location:before { content: "\f417"; }
     129.genericon-lock:before { content: "\f470"; }
     130.genericon-mail:before { content: "\f410"; }
     131.genericon-maximize:before { content: "\f422"; }
     132.genericon-menu:before { content: "\f419"; }
     133.genericon-microphone:before { content: "\f50d"; }
     134.genericon-minimize:before { content: "\f421"; }
     135.genericon-minus:before { content: "\f50e"; }
     136.genericon-month:before { content: "\f307"; }
     137.genericon-move:before { content: "\f50f"; }
     138.genericon-next:before { content: "\f429"; }
     139.genericon-notice:before { content: "\f456"; }
     140.genericon-paintbrush:before { content: "\f506"; }
     141.genericon-path:before { content: "\f219"; }
     142.genericon-pause:before { content: "\f448"; }
     143.genericon-phone:before { content: "\f437"; }
     144.genericon-picture:before { content: "\f473"; }
     145.genericon-pinned:before { content: "\f308"; }
     146.genericon-pinterest:before { content: "\f209"; }
     147.genericon-pinterest-alt:before { content: "\f210"; }
     148.genericon-play:before { content: "\f452"; }
     149.genericon-plugin:before { content: "\f439"; }
     150.genericon-plus:before { content: "\f510"; }
     151.genericon-pocket:before { content: "\f224"; }
     152.genericon-polldaddy:before { content: "\f217"; }
     153.genericon-portfolio:before { content: "\f460"; }
     154.genericon-previous:before { content: "\f430"; }
     155.genericon-print:before { content: "\f469"; }
     156.genericon-quote:before { content: "\f106"; }
     157.genericon-rating-empty:before { content: "\f511"; }
     158.genericon-rating-full:before { content: "\f512"; }
     159.genericon-rating-half:before { content: "\f513"; }
     160.genericon-reddit:before { content: "\f222"; }
     161.genericon-refresh:before { content: "\f420"; }
     162.genericon-reply:before { content: "\f412"; }
     163.genericon-reply-alt:before { content: "\f466"; }
     164.genericon-reply-single:before { content: "\f467"; }
     165.genericon-rewind:before { content: "\f459"; }
     166.genericon-rightarrow:before { content: "\f501"; }
     167.genericon-search:before { content: "\f400"; }
     168.genericon-send-to-phone:before { content: "\f438"; }
     169.genericon-send-to-tablet:before { content: "\f454"; }
     170.genericon-share:before { content: "\f415"; }
     171.genericon-show:before { content: "\f403"; }
     172.genericon-shuffle:before { content: "\f514"; }
     173.genericon-sitemap:before { content: "\f507"; }
     174.genericon-skip-ahead:before { content: "\f451"; }
     175.genericon-skip-back:before { content: "\f450"; }
     176.genericon-skype:before { content: "\f220"; }
     177.genericon-spam:before { content: "\f424"; }
     178.genericon-spotify:before { content: "\f515"; }
     179.genericon-standard:before { content: "\f100"; }
     180.genericon-star:before { content: "\f408"; }
     181.genericon-status:before { content: "\f105"; }
     182.genericon-stop:before { content: "\f449"; }
     183.genericon-stumbleupon:before { content: "\f223"; }
     184.genericon-subscribe:before { content: "\f463"; }
     185.genericon-subscribed:before { content: "\f465"; }
     186.genericon-summary:before { content: "\f425"; }
     187.genericon-tablet:before { content: "\f453"; }
     188.genericon-tag:before { content: "\f302"; }
     189.genericon-time:before { content: "\f303"; }
     190.genericon-top:before { content: "\f435"; }
     191.genericon-trash:before { content: "\f407"; }
     192.genericon-tumblr:before { content: "\f214"; }
     193.genericon-twitch:before { content: "\f516"; }
     194.genericon-twitter:before { content: "\f202"; }
     195.genericon-unapprove:before { content: "\f446"; }
     196.genericon-unsubscribe:before { content: "\f464"; }
     197.genericon-unzoom:before { content: "\f401"; }
     198.genericon-uparrow:before { content: "\f500"; }
     199.genericon-user:before { content: "\f304"; }
     200.genericon-video:before { content: "\f104"; }
     201.genericon-videocamera:before { content: "\f517"; }
     202.genericon-vimeo:before { content: "\f212"; }
     203.genericon-warning:before { content: "\f414"; }
     204.genericon-website:before { content: "\f475"; }
     205.genericon-week:before { content: "\f306"; }
     206.genericon-wordpress:before { content: "\f205"; }
     207.genericon-xpost:before { content: "\f504"; }
     208.genericon-youtube:before { content: "\f213"; }
     209.genericon-zoom:before { content: "\f402"; }
  • src/wp-content/themes/twentyfourteen/style.css

     
    791791.contributor-posts-link:before,
    792792.menu-toggle:before,
    793793.search-toggle:before,
     794.social-navigation a:before,
    794795.slider-direction-nav a:before,
    795796.widget_twentyfourteen_ephemera .widget-title:before {
    796797        -webkit-font-smoothing: antialiased;
     
    969970        font-weight: 900;
    970971}
    971972
     973
     974.social-navigation {
     975        margin: 0;
     976        float: right;
     977}
     978
     979.social-navigation ul {
     980        list-style: none;
     981        margin: 1.1em 0 0 0;
     982}
     983
     984.social-navigation li {
     985        float: left;
     986}
     987
     988.social-navigation a {
     989        color: rgba(255, 255, 255, 0.7);
     990        display: block;
     991        height: 3em;
     992        position: relative;
     993        width: 3em;
     994}
     995
     996.social-navigation a:hover {
     997        color: #24890d;
     998}
     999
     1000.social-navigation a:before {
     1001        content: "\f415";
     1002        font-size: 18px;
     1003        position: absolute;
     1004        top: 0;
     1005        left: 0;
     1006}
     1007
     1008.social-navigation a[href*="codepen.io"]:before {
     1009        content: "\f216";
     1010}
     1011
     1012.social-navigation a[href*="digg.com"]:before {
     1013        content: "\f221";
     1014}
     1015
     1016.social-navigation a[href*="dribbble.com"]:before {
     1017        content: "\f201";
     1018}
     1019
     1020.social-navigation a[href*="dropbox.com"]:before {
     1021        content: "\f225";
     1022}
     1023
     1024.social-navigation a[href*="facebook.com"]:before {
     1025        content: "\f203";
     1026}
     1027
     1028.social-navigation a[href*="flickr.com"]:before {
     1029        content: "\f211";
     1030}
     1031
     1032.social-navigation a[href*="foursquare.com"]:before {
     1033        content: "\f226";
     1034}
     1035
     1036.social-navigation a[href*="plus.google.com"]:before {
     1037        content: "\f206";
     1038}
     1039
     1040.social-navigation a[href*="github.com"]:before {
     1041        content: "\f200";
     1042}
     1043
     1044.social-navigation a[href*="instagram.com"]:before {
     1045        content: "\f215";
     1046}
     1047
     1048.social-navigation a[href*="linkedin.com"]:before {
     1049        content: "\f208";
     1050}
     1051
     1052.social-navigation a[href*="pinterest.com"]:before {
     1053        content: "\f210";
     1054}
     1055
     1056.social-navigation a[href*="getpocket.com"]:before {
     1057        content: "\f224";
     1058}
     1059
     1060.social-navigation a[href*="polldaddy.com"]:before {
     1061        content: "\f217";
     1062}
     1063
     1064.social-navigation a[href*="reddit.com"]:before {
     1065        content: "\f222";
     1066}
     1067
     1068.social-navigation a[href*="stumbleupon.com"]:before {
     1069        content: "\f223";
     1070}
     1071
     1072.social-navigation a[href*="tumblr.com"]:before {
     1073        content: "\f214";
     1074}
     1075
     1076.social-navigation a[href*="twitter.com"]:before {
     1077        content: "\f202";
     1078}
     1079
     1080.social-navigation a[href*="vimeo.com"]:before {
     1081        content: "\f212";
     1082}
     1083
     1084.social-navigation a[href*="wordpress.com"]:before,
     1085.social-navigation a[href*="wordpress.org"]:before {
     1086        content: "\f205";
     1087}
     1088
     1089.social-navigation a[href*="youtube.com"]:before {
     1090        content: "\f213";
     1091}
     1092
     1093.social-navigation a[href*="mailto:"]:before {
     1094        content: "\f410";
     1095}
     1096
     1097.social-navigation a[href*="spotify.com"]:before {
     1098        content: "\f515";
     1099}
     1100
     1101.social-navigation a[href*="twitch.tv"]:before {
     1102        content: "\f516";
     1103}
     1104
     1105.social-navigation a[href$="/feed/"]:before {
     1106        content: "\f413";
     1107}
     1108
     1109.social-navigation a[href*="path.com"]:before {
     1110        content: "\f219";
     1111}
     1112
     1113.social-navigation a[href*="skype.com"]:before {
     1114        content: "\f220";
     1115}
     1116
    9721117/* Primary Navigation */
    9731118
    9741119.primary-navigation {
     
    28302975}
    28312976
    28322977.site-info {
     2978        float: left;
    28332979        padding: 15px 10px;
    28342980}
    28352981
  • src/wp-includes/js/media-audiovideo.js

     
    918918
    919919module.exports = VideoDetails;
    920920
    921 },{}]},{},[1]);
     921},{}]},{},[1])
     922//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvYXVkaW92aWRlby5tYW5pZmVzdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9hdWRpby1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL3ZpZGVvLWRldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzL3Bvc3QtbWVkaWEuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXVkaW8tZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS9hdWRpby1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL21lZGlhLWRldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvdmlkZW8tZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9tZWRpYS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ZpZGVvLWRldGFpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJ2YXIgbWVkaWEgPSB3cC5tZWRpYSxcblx0YmFzZVNldHRpbmdzID0gd2luZG93Ll93cG1lanNTZXR0aW5ncyB8fCB7fSxcblx0bDEwbiA9IHdpbmRvdy5fd3BNZWRpYVZpZXdzTDEwbiB8fCB7fTtcblxuLyoqXG4gKiBAbWl4aW5cbiAqL1xud3AubWVkaWEubWl4aW4gPSB7XG5cdG1lanNTZXR0aW5nczogYmFzZVNldHRpbmdzLFxuXG5cdHJlbW92ZUFsbFBsYXllcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwO1xuXG5cdFx0aWYgKCB3aW5kb3cubWVqcyAmJiB3aW5kb3cubWVqcy5wbGF5ZXJzICkge1xuXHRcdFx0Zm9yICggcCBpbiB3aW5kb3cubWVqcy5wbGF5ZXJzICkge1xuXHRcdFx0XHR3aW5kb3cubWVqcy5wbGF5ZXJzW3BdLnBhdXNlKCk7XG5cdFx0XHRcdHRoaXMucmVtb3ZlUGxheWVyKCB3aW5kb3cubWVqcy5wbGF5ZXJzW3BdICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBPdmVycmlkZSB0aGUgTWVkaWFFbGVtZW50IG1ldGhvZCBmb3IgcmVtb3ZpbmcgYSBwbGF5ZXIuXG5cdCAqXHRNZWRpYUVsZW1lbnQgdHJpZXMgdG8gcHVsbCB0aGUgYXVkaW8vdmlkZW8gdGFnIG91dCBvZlxuXHQgKlx0aXRzIGNvbnRhaW5lciBhbmQgcmUtYWRkIGl0IHRvIHRoZSBET00uXG5cdCAqL1xuXHRyZW1vdmVQbGF5ZXI6IGZ1bmN0aW9uKHQpIHtcblx0XHR2YXIgZmVhdHVyZUluZGV4LCBmZWF0dXJlO1xuXG5cdFx0aWYgKCAhIHQub3B0aW9ucyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpbnZva2UgZmVhdHVyZXMgY2xlYW51cFxuXHRcdGZvciAoIGZlYXR1cmVJbmRleCBpbiB0Lm9wdGlvbnMuZmVhdHVyZXMgKSB7XG5cdFx0XHRmZWF0dXJlID0gdC5vcHRpb25zLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF07XG5cdFx0XHRpZiAoIHRbJ2NsZWFuJyArIGZlYXR1cmVdICkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHRbJ2NsZWFuJyArIGZlYXR1cmVdKHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggISB0LmlzRHluYW1pYyApIHtcblx0XHRcdHQuJG5vZGUucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAnbmF0aXZlJyAhPT0gdC5tZWRpYS5wbHVnaW5UeXBlICkge1xuXHRcdFx0dC4kbWVkaWEucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHdpbmRvdy5tZWpzLnBsYXllcnNbdC5pZF07XG5cblx0XHR0LmNvbnRhaW5lci5yZW1vdmUoKTtcblx0XHR0Lmdsb2JhbFVuYmluZCgpO1xuXHRcdGRlbGV0ZSB0Lm5vZGUucGxheWVyO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgYW55IGNsYXNzIHRoYXQgaGFzIHNldCAncGxheWVyJyB0byBhIE1lZGlhRWxlbWVudFBsYXllclxuXHQgKiAgaW5zdGFuY2UgdG8gcmVtb3ZlIHRoZSBwbGF5ZXIgd2hlbiBsaXN0ZW5pbmcgdG8gZXZlbnRzLlxuXHQgKlxuXHQgKiAgRXhhbXBsZXM6IG1vZGFsIGNsb3Nlcywgc2hvcnRjb2RlIHByb3BlcnRpZXMgYXJlIHJlbW92ZWQsIGV0Yy5cblx0ICovXG5cdHVuc2V0UGxheWVycyA6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5wbGF5ZXJzICYmIHRoaXMucGxheWVycy5sZW5ndGggKSB7XG5cdFx0XHRfLmVhY2goIHRoaXMucGxheWVycywgZnVuY3Rpb24gKHBsYXllcikge1xuXHRcdFx0XHRwbGF5ZXIucGF1c2UoKTtcblx0XHRcdFx0d3AubWVkaWEubWl4aW4ucmVtb3ZlUGxheWVyKCBwbGF5ZXIgKTtcblx0XHRcdH0gKTtcblx0XHRcdHRoaXMucGxheWVycyA9IFtdO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBBdXRvd2lyZSBcImNvbGxlY3Rpb25cIi10eXBlIHNob3J0Y29kZXNcbiAqL1xud3AubWVkaWEucGxheWxpc3QgPSBuZXcgd3AubWVkaWEuY29sbGVjdGlvbih7XG5cdHRhZzogJ3BsYXlsaXN0Jyxcblx0ZWRpdFRpdGxlIDogbDEwbi5lZGl0UGxheWxpc3RUaXRsZSxcblx0ZGVmYXVsdHMgOiB7XG5cdFx0aWQ6IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRzdHlsZTogJ2xpZ2h0Jyxcblx0XHR0cmFja2xpc3Q6IHRydWUsXG5cdFx0dHJhY2tudW1iZXJzOiB0cnVlLFxuXHRcdGltYWdlczogdHJ1ZSxcblx0XHRhcnRpc3RzOiB0cnVlLFxuXHRcdHR5cGU6ICdhdWRpbydcblx0fVxufSk7XG5cbi8qKlxuICogU2hvcnRjb2RlIG1vZGVsaW5nIGZvciBhdWRpb1xuICogIGBlZGl0KClgIHByZXBhcmVzIHRoZSBzaG9ydGNvZGUgZm9yIHRoZSBtZWRpYSBtb2RhbFxuICogIGBzaG9ydGNvZGUoKWAgYnVpbGRzIHRoZSBuZXcgc2hvcnRjb2RlIGFmdGVyIHVwZGF0ZVxuICpcbiAqIEBuYW1lc3BhY2VcbiAqL1xud3AubWVkaWEuYXVkaW8gPSB7XG5cdGNvZXJjZSA6IHdwLm1lZGlhLmNvZXJjZSxcblxuXHRkZWZhdWx0cyA6IHtcblx0XHRpZCA6IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRzcmMgOiAnJyxcblx0XHRsb29wIDogZmFsc2UsXG5cdFx0YXV0b3BsYXkgOiBmYWxzZSxcblx0XHRwcmVsb2FkIDogJ25vbmUnLFxuXHRcdHdpZHRoIDogNDAwXG5cdH0sXG5cblx0ZWRpdCA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHZhciBmcmFtZSwgc2hvcnRjb2RlID0gd3Auc2hvcnRjb2RlLm5leHQoICdhdWRpbycsIGRhdGEgKS5zaG9ydGNvZGU7XG5cblx0XHRmcmFtZSA9IHdwLm1lZGlhKHtcblx0XHRcdGZyYW1lOiAnYXVkaW8nLFxuXHRcdFx0c3RhdGU6ICdhdWRpby1kZXRhaWxzJyxcblx0XHRcdG1ldGFkYXRhOiBfLmRlZmF1bHRzKCBzaG9ydGNvZGUuYXR0cnMubmFtZWQsIHRoaXMuZGVmYXVsdHMgKVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZyYW1lO1xuXHR9LFxuXG5cdHNob3J0Y29kZSA6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHR2YXIgY29udGVudDtcblxuXHRcdF8uZWFjaCggdGhpcy5kZWZhdWx0cywgZnVuY3Rpb24oIHZhbHVlLCBrZXkgKSB7XG5cdFx0XHRtb2RlbFsga2V5IF0gPSB0aGlzLmNvZXJjZSggbW9kZWwsIGtleSApO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSBtb2RlbFsga2V5IF0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBtb2RlbFsga2V5IF07XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0Y29udGVudCA9IG1vZGVsLmNvbnRlbnQ7XG5cdFx0ZGVsZXRlIG1vZGVsLmNvbnRlbnQ7XG5cblx0XHRyZXR1cm4gbmV3IHdwLnNob3J0Y29kZSh7XG5cdFx0XHR0YWc6ICdhdWRpbycsXG5cdFx0XHRhdHRyczogbW9kZWwsXG5cdFx0XHRjb250ZW50OiBjb250ZW50XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8qKlxuICogU2hvcnRjb2RlIG1vZGVsaW5nIGZvciB2aWRlb1xuICogIGBlZGl0KClgIHByZXBhcmVzIHRoZSBzaG9ydGNvZGUgZm9yIHRoZSBtZWRpYSBtb2RhbFxuICogIGBzaG9ydGNvZGUoKWAgYnVpbGRzIHRoZSBuZXcgc2hvcnRjb2RlIGFmdGVyIHVwZGF0ZVxuICpcbiAqIEBuYW1lc3BhY2VcbiAqL1xud3AubWVkaWEudmlkZW8gPSB7XG5cdGNvZXJjZSA6IHdwLm1lZGlhLmNvZXJjZSxcblxuXHRkZWZhdWx0cyA6IHtcblx0XHRpZCA6IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRzcmMgOiAnJyxcblx0XHRwb3N0ZXIgOiAnJyxcblx0XHRsb29wIDogZmFsc2UsXG5cdFx0YXV0b3BsYXkgOiBmYWxzZSxcblx0XHRwcmVsb2FkIDogJ21ldGFkYXRhJyxcblx0XHRjb250ZW50IDogJycsXG5cdFx0d2lkdGggOiA2NDAsXG5cdFx0aGVpZ2h0IDogMzYwXG5cdH0sXG5cblx0ZWRpdCA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXHRcdHZhciBmcmFtZSxcblx0XHRcdHNob3J0Y29kZSA9IHdwLnNob3J0Y29kZS5uZXh0KCAndmlkZW8nLCBkYXRhICkuc2hvcnRjb2RlLFxuXHRcdFx0YXR0cnM7XG5cblx0XHRhdHRycyA9IHNob3J0Y29kZS5hdHRycy5uYW1lZDtcblx0XHRhdHRycy5jb250ZW50ID0gc2hvcnRjb2RlLmNvbnRlbnQ7XG5cblx0XHRmcmFtZSA9IHdwLm1lZGlhKHtcblx0XHRcdGZyYW1lOiAndmlkZW8nLFxuXHRcdFx0c3RhdGU6ICd2aWRlby1kZXRhaWxzJyxcblx0XHRcdG1ldGFkYXRhOiBfLmRlZmF1bHRzKCBhdHRycywgdGhpcy5kZWZhdWx0cyApXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZnJhbWU7XG5cdH0sXG5cblx0c2hvcnRjb2RlIDogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdHZhciBjb250ZW50O1xuXG5cdFx0Xy5lYWNoKCB0aGlzLmRlZmF1bHRzLCBmdW5jdGlvbiggdmFsdWUsIGtleSApIHtcblx0XHRcdG1vZGVsWyBrZXkgXSA9IHRoaXMuY29lcmNlKCBtb2RlbCwga2V5ICk7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IG1vZGVsWyBrZXkgXSApIHtcblx0XHRcdFx0ZGVsZXRlIG1vZGVsWyBrZXkgXTtcblx0XHRcdH1cblx0XHR9LCB0aGlzICk7XG5cblx0XHRjb250ZW50ID0gbW9kZWwuY29udGVudDtcblx0XHRkZWxldGUgbW9kZWwuY29udGVudDtcblxuXHRcdHJldHVybiBuZXcgd3Auc2hvcnRjb2RlKHtcblx0XHRcdHRhZzogJ3ZpZGVvJyxcblx0XHRcdGF0dHJzOiBtb2RlbCxcblx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHR9KTtcblx0fVxufTtcblxubWVkaWEubW9kZWwuUG9zdE1lZGlhID0gcmVxdWlyZSggJy4vbW9kZWxzL3Bvc3QtbWVkaWEuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkF1ZGlvRGV0YWlscyA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2F1ZGlvLWRldGFpbHMuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLlZpZGVvRGV0YWlscyA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL3ZpZGVvLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWVkaWFEZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUvbWVkaWEtZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5BdWRpb0RldGFpbHMgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9hdWRpby1kZXRhaWxzLmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lLlZpZGVvRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lL3ZpZGVvLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL21lZGlhLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3LkF1ZGlvRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2F1ZGlvLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3LlZpZGVvRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL3ZpZGVvLWRldGFpbHMuanMnICk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuQXVkaW9EZXRhaWxzXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBBdWRpbyBEZXRhaWxzIHN0YXRlXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBTdGF0ZSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEF1ZGlvRGV0YWlscztcblxuQXVkaW9EZXRhaWxzID0gU3RhdGUuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRpZDogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdHRvb2xiYXI6ICdhdWRpby1kZXRhaWxzJyxcblx0XHR0aXRsZTogbDEwbi5hdWRpb0RldGFpbHNUaXRsZSxcblx0XHRjb250ZW50OiAnYXVkaW8tZGV0YWlscycsXG5cdFx0bWVudTogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdHJvdXRlcjogZmFsc2UsXG5cdFx0cHJpb3JpdHk6IDYwXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dGhpcy5tZWRpYSA9IG9wdGlvbnMubWVkaWE7XG5cdFx0U3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0RldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuVmlkZW9EZXRhaWxzXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBWaWRlbyBEZXRhaWxzIHN0YXRlXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBTdGF0ZSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFZpZGVvRGV0YWlscztcblxuVmlkZW9EZXRhaWxzID0gU3RhdGUuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRpZDogJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdHRvb2xiYXI6ICd2aWRlby1kZXRhaWxzJyxcblx0XHR0aXRsZTogbDEwbi52aWRlb0RldGFpbHNUaXRsZSxcblx0XHRjb250ZW50OiAndmlkZW8tZGV0YWlscycsXG5cdFx0bWVudTogJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdHJvdXRlcjogZmFsc2UsXG5cdFx0cHJpb3JpdHk6IDYwXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dGhpcy5tZWRpYSA9IG9wdGlvbnMubWVkaWE7XG5cdFx0U3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBWaWRlb0RldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLlBvc3RNZWRpYVxuICpcbiAqIFNoYXJlZCBtb2RlbCBjbGFzcyBmb3IgYXVkaW8gYW5kIHZpZGVvLiBVcGRhdGVzIHRoZSBtb2RlbCBhZnRlclxuICogICBcIkFkZCBBdWRpb3xWaWRlbyBTb3VyY2VcIiBhbmQgXCJSZXBsYWNlIEF1ZGlvfFZpZGVvXCIgc3RhdGVzIHJldHVyblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBQb3N0TWVkaWEgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmF0dGFjaG1lbnQgPSBmYWxzZTtcblx0fSxcblxuXHRzZXRTb3VyY2U6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5leHRlbnNpb24gPSBhdHRhY2htZW50LmdldCggJ2ZpbGVuYW1lJyApLnNwbGl0KCcuJykucG9wKCk7XG5cblx0XHRpZiAoIHRoaXMuZ2V0KCAnc3JjJyApICYmIHRoaXMuZXh0ZW5zaW9uID09PSB0aGlzLmdldCggJ3NyYycgKS5zcGxpdCgnLicpLnBvcCgpICkge1xuXHRcdFx0dGhpcy51bnNldCggJ3NyYycgKTtcblx0XHR9XG5cblx0XHRpZiAoIF8uY29udGFpbnMoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuZW1iZWRFeHRzLCB0aGlzLmV4dGVuc2lvbiApICkge1xuXHRcdFx0dGhpcy5zZXQoIHRoaXMuZXh0ZW5zaW9uLCB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAndXJsJyApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudW5zZXQoIHRoaXMuZXh0ZW5zaW9uICk7XG5cdFx0fVxuXHR9LFxuXG5cdGNoYW5nZUF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdHRoaXMuc2V0U291cmNlKCBhdHRhY2htZW50ICk7XG5cblx0XHR0aGlzLnVuc2V0KCAnc3JjJyApO1xuXHRcdF8uZWFjaCggXy53aXRob3V0KCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLmVtYmVkRXh0cywgdGhpcy5leHRlbnNpb24gKSwgZnVuY3Rpb24oIGV4dCApIHtcblx0XHRcdHRoaXMudW5zZXQoIGV4dCApO1xuXHRcdH0sIHRoaXMgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9zdE1lZGlhO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF1ZGlvRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIE1lZGlhRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzLFxuXHRBdWRpb0RldGFpbHM7XG5cbkF1ZGlvRGV0YWlscyA9IE1lZGlhRGV0YWlscy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdhdWRpby1kZXRhaWxzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnYXVkaW8tZGV0YWlscycpLFxuXG5cdHNldE1lZGlhOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXVkaW8gPSB0aGlzLiQoJy53cC1hdWRpby1zaG9ydGNvZGUnKTtcblxuXHRcdGlmICggYXVkaW8uZmluZCggJ3NvdXJjZScgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGF1ZGlvLmlzKCc6aGlkZGVuJykgKSB7XG5cdFx0XHRcdGF1ZGlvLnNob3coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMubWVkaWEgPSBNZWRpYURldGFpbHMucHJlcGFyZVNyYyggYXVkaW8uZ2V0KDApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF1ZGlvLmhpZGUoKTtcblx0XHRcdHRoaXMubWVkaWEgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXVkaW9EZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuQXVkaW9EZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLk1lZGlhRGV0YWlsc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIE1lZGlhRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NZWRpYURldGFpbHMsXG5cdE1lZGlhTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTWVkaWFMaWJyYXJ5LFxuXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEF1ZGlvRGV0YWlscztcblxuQXVkaW9EZXRhaWxzID0gTWVkaWFEZXRhaWxzLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgJ2F1ZGlvJyxcblx0XHR1cmw6ICAgICAnJyxcblx0XHRtZW51OiAgICAnYXVkaW8tZGV0YWlscycsXG5cdFx0Y29udGVudDogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdHRvb2xiYXI6ICdhdWRpby1kZXRhaWxzJyxcblx0XHR0eXBlOiAgICAnbGluaycsXG5cdFx0dGl0bGU6ICAgIGwxMG4uYXVkaW9EZXRhaWxzVGl0bGUsXG5cdFx0cHJpb3JpdHk6IDEyMFxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdG9wdGlvbnMuRGV0YWlsc1ZpZXcgPSB3cC5tZWRpYS52aWV3LkF1ZGlvRGV0YWlscztcblx0XHRvcHRpb25zLmNhbmNlbFRleHQgPSBsMTBuLmF1ZGlvRGV0YWlsc0NhbmNlbDtcblx0XHRvcHRpb25zLmFkZFRleHQgPSBsMTBuLmF1ZGlvQWRkU291cmNlVGl0bGU7XG5cblx0XHRNZWRpYURldGFpbHMucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCggdGhpcywgb3B0aW9ucyApO1xuXHR9LFxuXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0TWVkaWFEZXRhaWxzLnByb3RvdHlwZS5iaW5kSGFuZGxlcnMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOnJlcGxhY2UtYXVkaW8nLCB0aGlzLnJlbmRlclJlcGxhY2VUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOmFkZC1hdWRpby1zb3VyY2UnLCB0aGlzLnJlbmRlckFkZFNvdXJjZVRvb2xiYXIsIHRoaXMgKTtcblx0fSxcblxuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3RhdGVzLmFkZChbXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5BdWRpb0RldGFpbHMoIHtcblx0XHRcdFx0bWVkaWE6IHRoaXMubWVkaWFcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IE1lZGlhTGlicmFyeSgge1xuXHRcdFx0XHR0eXBlOiAnYXVkaW8nLFxuXHRcdFx0XHRpZDogJ3JlcGxhY2UtYXVkaW8nLFxuXHRcdFx0XHR0aXRsZTogbDEwbi5hdWRpb1JlcGxhY2VUaXRsZSxcblx0XHRcdFx0dG9vbGJhcjogJ3JlcGxhY2UtYXVkaW8nLFxuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYSxcblx0XHRcdFx0bWVudTogJ2F1ZGlvLWRldGFpbHMnXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBNZWRpYUxpYnJhcnkoIHtcblx0XHRcdFx0dHlwZTogJ2F1ZGlvJyxcblx0XHRcdFx0aWQ6ICdhZGQtYXVkaW8tc291cmNlJyxcblx0XHRcdFx0dGl0bGU6IGwxMG4uYXVkaW9BZGRTb3VyY2VUaXRsZSxcblx0XHRcdFx0dG9vbGJhcjogJ2FkZC1hdWRpby1zb3VyY2UnLFxuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYSxcblx0XHRcdFx0bWVudTogZmFsc2Vcblx0XHRcdH0gKVxuXHRcdF0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0RldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NZWRpYURldGFpbHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBTZWxlY3QgPSB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRNZWRpYURldGFpbHM7XG5cbk1lZGlhRGV0YWlscyA9IFNlbGVjdC5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICdtZWRpYScsXG5cdFx0dXJsOiAgICAgJycsXG5cdFx0bWVudTogICAgJ21lZGlhLWRldGFpbHMnLFxuXHRcdGNvbnRlbnQ6ICdtZWRpYS1kZXRhaWxzJyxcblx0XHR0b29sYmFyOiAnbWVkaWEtZGV0YWlscycsXG5cdFx0dHlwZTogICAgJ2xpbmsnLFxuXHRcdHByaW9yaXR5OiAxMjBcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLkRldGFpbHNWaWV3ID0gb3B0aW9ucy5EZXRhaWxzVmlldztcblx0XHR0aGlzLmNhbmNlbFRleHQgPSBvcHRpb25zLmNhbmNlbFRleHQ7XG5cdFx0dGhpcy5hZGRUZXh0ID0gb3B0aW9ucy5hZGRUZXh0O1xuXG5cdFx0dGhpcy5tZWRpYSA9IG5ldyB3cC5tZWRpYS5tb2RlbC5Qb3N0TWVkaWEoIG9wdGlvbnMubWV0YWRhdGEgKTtcblx0XHR0aGlzLm9wdGlvbnMuc2VsZWN0aW9uID0gbmV3IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiggdGhpcy5tZWRpYS5hdHRhY2htZW50LCB7IG11bHRpcGxlOiBmYWxzZSB9ICk7XG5cdFx0U2VsZWN0LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHRiaW5kSGFuZGxlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZW51ID0gdGhpcy5kZWZhdWx0cy5tZW51O1xuXG5cdFx0U2VsZWN0LnByb3RvdHlwZS5iaW5kSGFuZGxlcnMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy5vbiggJ21lbnU6Y3JlYXRlOicgKyBtZW51LCB0aGlzLmNyZWF0ZU1lbnUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6JyArIG1lbnUsIHRoaXMucmVuZGVyRGV0YWlsc0NvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnbWVudTpyZW5kZXI6JyArIG1lbnUsIHRoaXMucmVuZGVyTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjonICsgbWVudSwgdGhpcy5yZW5kZXJEZXRhaWxzVG9vbGJhciwgdGhpcyApO1xuXHR9LFxuXG5cdHJlbmRlckRldGFpbHNDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmlldyA9IG5ldyB0aGlzLkRldGFpbHNWaWV3KHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRtb2RlbDogdGhpcy5zdGF0ZSgpLm1lZGlhLFxuXHRcdFx0YXR0YWNobWVudDogdGhpcy5zdGF0ZSgpLm1lZGlhLmF0dGFjaG1lbnRcblx0XHR9KS5yZW5kZXIoKTtcblxuXHRcdHRoaXMuY29udGVudC5zZXQoIHZpZXcgKTtcblx0fSxcblxuXHRyZW5kZXJNZW51OiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgbGFzdFN0YXRlID0gdGhpcy5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZCxcblx0XHRcdGZyYW1lID0gdGhpcztcblxuXHRcdHZpZXcuc2V0KHtcblx0XHRcdGNhbmNlbDoge1xuXHRcdFx0XHR0ZXh0OiAgICAgdGhpcy5jYW5jZWxUZXh0LFxuXHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdGNsaWNrOiAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2VwYXJhdGVDYW5jZWw6IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnc2VwYXJhdG9yJyxcblx0XHRcdFx0cHJpb3JpdHk6IDQwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXG5cdH0sXG5cblx0c2V0UHJpbWFyeUJ1dHRvbjogZnVuY3Rpb24odGV4dCwgaGFuZGxlcikge1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGJ1dHRvbjoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIHRleHQsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXHRcdFx0XHRcdGNsaWNrOiAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyO1xuXHRcdFx0XHRcdFx0aGFuZGxlci5jYWxsKCB0aGlzLCBjb250cm9sbGVyLCBjb250cm9sbGVyLnN0YXRlKCkgKTtcblx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgYW5kIHJlc2V0IHRoZSBkZWZhdWx0IHN0YXRlLlxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5zZXRTdGF0ZSggY29udHJvbGxlci5vcHRpb25zLnN0YXRlICk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnJlc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fSxcblxuXHRyZW5kZXJEZXRhaWxzVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zZXRQcmltYXJ5QnV0dG9uKCBsMTBuLnVwZGF0ZSwgZnVuY3Rpb24oIGNvbnRyb2xsZXIsIHN0YXRlICkge1xuXHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXHRcdFx0c3RhdGUudHJpZ2dlciggJ3VwZGF0ZScsIGNvbnRyb2xsZXIubWVkaWEudG9KU09OKCkgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0cmVuZGVyUmVwbGFjZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2V0UHJpbWFyeUJ1dHRvbiggbDEwbi5yZXBsYWNlLCBmdW5jdGlvbiggY29udHJvbGxlciwgc3RhdGUgKSB7XG5cdFx0XHR2YXIgYXR0YWNobWVudCA9IHN0YXRlLmdldCggJ3NlbGVjdGlvbicgKS5zaW5nbGUoKTtcblx0XHRcdGNvbnRyb2xsZXIubWVkaWEuY2hhbmdlQXR0YWNobWVudCggYXR0YWNobWVudCApO1xuXHRcdFx0c3RhdGUudHJpZ2dlciggJ3JlcGxhY2UnLCBjb250cm9sbGVyLm1lZGlhLnRvSlNPTigpICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHJlbmRlckFkZFNvdXJjZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2V0UHJpbWFyeUJ1dHRvbiggdGhpcy5hZGRUZXh0LCBmdW5jdGlvbiggY29udHJvbGxlciwgc3RhdGUgKSB7XG5cdFx0XHR2YXIgYXR0YWNobWVudCA9IHN0YXRlLmdldCggJ3NlbGVjdGlvbicgKS5zaW5nbGUoKTtcblx0XHRcdGNvbnRyb2xsZXIubWVkaWEuc2V0U291cmNlKCBhdHRhY2htZW50ICk7XG5cdFx0XHRzdGF0ZS50cmlnZ2VyKCAnYWRkLXNvdXJjZScsIGNvbnRyb2xsZXIubWVkaWEudG9KU09OKCkgKTtcblx0XHR9ICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lZGlhRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlZpZGVvRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NZWRpYURldGFpbHNcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBNZWRpYURldGFpbHMgPSB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWVkaWFEZXRhaWxzLFxuXHRNZWRpYUxpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLk1lZGlhTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0VmlkZW9EZXRhaWxzO1xuXG5WaWRlb0RldGFpbHMgPSBNZWRpYURldGFpbHMuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRpZDogICAgICAndmlkZW8nLFxuXHRcdHVybDogICAgICcnLFxuXHRcdG1lbnU6ICAgICd2aWRlby1kZXRhaWxzJyxcblx0XHRjb250ZW50OiAndmlkZW8tZGV0YWlscycsXG5cdFx0dG9vbGJhcjogJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdHR5cGU6ICAgICdsaW5rJyxcblx0XHR0aXRsZTogICAgbDEwbi52aWRlb0RldGFpbHNUaXRsZSxcblx0XHRwcmlvcml0eTogMTIwXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0b3B0aW9ucy5EZXRhaWxzVmlldyA9IHdwLm1lZGlhLnZpZXcuVmlkZW9EZXRhaWxzO1xuXHRcdG9wdGlvbnMuY2FuY2VsVGV4dCA9IGwxMG4udmlkZW9EZXRhaWxzQ2FuY2VsO1xuXHRcdG9wdGlvbnMuYWRkVGV4dCA9IGwxMG4udmlkZW9BZGRTb3VyY2VUaXRsZTtcblxuXHRcdE1lZGlhRGV0YWlscy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKCB0aGlzLCBvcHRpb25zICk7XG5cdH0sXG5cblx0YmluZEhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHRNZWRpYURldGFpbHMucHJvdG90eXBlLmJpbmRIYW5kbGVycy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6cmVwbGFjZS12aWRlbycsIHRoaXMucmVuZGVyUmVwbGFjZVRvb2xiYXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6YWRkLXZpZGVvLXNvdXJjZScsIHRoaXMucmVuZGVyQWRkU291cmNlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjpzZWxlY3QtcG9zdGVyLWltYWdlJywgdGhpcy5yZW5kZXJTZWxlY3RQb3N0ZXJJbWFnZVRvb2xiYXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6YWRkLXRyYWNrJywgdGhpcy5yZW5kZXJBZGRUcmFja1Rvb2xiYXIsIHRoaXMgKTtcblx0fSxcblxuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3RhdGVzLmFkZChbXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5WaWRlb0RldGFpbHMoe1xuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyBNZWRpYUxpYnJhcnkoIHtcblx0XHRcdFx0dHlwZTogJ3ZpZGVvJyxcblx0XHRcdFx0aWQ6ICdyZXBsYWNlLXZpZGVvJyxcblx0XHRcdFx0dGl0bGU6IGwxMG4udmlkZW9SZXBsYWNlVGl0bGUsXG5cdFx0XHRcdHRvb2xiYXI6ICdyZXBsYWNlLXZpZGVvJyxcblx0XHRcdFx0bWVkaWE6IHRoaXMubWVkaWEsXG5cdFx0XHRcdG1lbnU6ICd2aWRlby1kZXRhaWxzJ1xuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgTWVkaWFMaWJyYXJ5KCB7XG5cdFx0XHRcdHR5cGU6ICd2aWRlbycsXG5cdFx0XHRcdGlkOiAnYWRkLXZpZGVvLXNvdXJjZScsXG5cdFx0XHRcdHRpdGxlOiBsMTBuLnZpZGVvQWRkU291cmNlVGl0bGUsXG5cdFx0XHRcdHRvb2xiYXI6ICdhZGQtdmlkZW8tc291cmNlJyxcblx0XHRcdFx0bWVkaWE6IHRoaXMubWVkaWEsXG5cdFx0XHRcdG1lbnU6IGZhbHNlXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBNZWRpYUxpYnJhcnkoIHtcblx0XHRcdFx0dHlwZTogJ2ltYWdlJyxcblx0XHRcdFx0aWQ6ICdzZWxlY3QtcG9zdGVyLWltYWdlJyxcblx0XHRcdFx0dGl0bGU6IGwxMG4udmlkZW9TZWxlY3RQb3N0ZXJJbWFnZVRpdGxlLFxuXHRcdFx0XHR0b29sYmFyOiAnc2VsZWN0LXBvc3Rlci1pbWFnZScsXG5cdFx0XHRcdG1lZGlhOiB0aGlzLm1lZGlhLFxuXHRcdFx0XHRtZW51OiAndmlkZW8tZGV0YWlscydcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IE1lZGlhTGlicmFyeSgge1xuXHRcdFx0XHR0eXBlOiAndGV4dCcsXG5cdFx0XHRcdGlkOiAnYWRkLXRyYWNrJyxcblx0XHRcdFx0dGl0bGU6IGwxMG4udmlkZW9BZGRUcmFja1RpdGxlLFxuXHRcdFx0XHR0b29sYmFyOiAnYWRkLXRyYWNrJyxcblx0XHRcdFx0bWVkaWE6IHRoaXMubWVkaWEsXG5cdFx0XHRcdG1lbnU6ICd2aWRlby1kZXRhaWxzJ1xuXHRcdFx0fSApXG5cdFx0XSk7XG5cdH0sXG5cblx0cmVuZGVyU2VsZWN0UG9zdGVySW1hZ2VUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnNldFByaW1hcnlCdXR0b24oIGwxMG4udmlkZW9TZWxlY3RQb3N0ZXJJbWFnZVRpdGxlLCBmdW5jdGlvbiggY29udHJvbGxlciwgc3RhdGUgKSB7XG5cdFx0XHR2YXIgdXJscyA9IFtdLCBhdHRhY2htZW50ID0gc3RhdGUuZ2V0KCAnc2VsZWN0aW9uJyApLnNpbmdsZSgpO1xuXG5cdFx0XHRjb250cm9sbGVyLm1lZGlhLnNldCggJ3Bvc3RlcicsIGF0dGFjaG1lbnQuZ2V0KCAndXJsJyApICk7XG5cdFx0XHRzdGF0ZS50cmlnZ2VyKCAnc2V0LXBvc3Rlci1pbWFnZScsIGNvbnRyb2xsZXIubWVkaWEudG9KU09OKCkgKTtcblxuXHRcdFx0Xy5lYWNoKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLmVtYmVkRXh0cywgZnVuY3Rpb24gKGV4dCkge1xuXHRcdFx0XHRpZiAoIGNvbnRyb2xsZXIubWVkaWEuZ2V0KCBleHQgKSApIHtcblx0XHRcdFx0XHR1cmxzLnB1c2goIGNvbnRyb2xsZXIubWVkaWEuZ2V0KCBleHQgKSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdHdwLmFqYXguc2VuZCggJ3NldC1hdHRhY2htZW50LXRodW1ibmFpbCcsIHtcblx0XHRcdFx0ZGF0YSA6IHtcblx0XHRcdFx0XHR1cmxzOiB1cmxzLFxuXHRcdFx0XHRcdHRodW1ibmFpbF9pZDogYXR0YWNobWVudC5nZXQoICdpZCcgKVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHJlbmRlckFkZFRyYWNrVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zZXRQcmltYXJ5QnV0dG9uKCBsMTBuLnZpZGVvQWRkVHJhY2tUaXRsZSwgZnVuY3Rpb24oIGNvbnRyb2xsZXIsIHN0YXRlICkge1xuXHRcdFx0dmFyIGF0dGFjaG1lbnQgPSBzdGF0ZS5nZXQoICdzZWxlY3Rpb24nICkuc2luZ2xlKCksXG5cdFx0XHRcdGNvbnRlbnQgPSBjb250cm9sbGVyLm1lZGlhLmdldCggJ2NvbnRlbnQnICk7XG5cblx0XHRcdGlmICggLTEgPT09IGNvbnRlbnQuaW5kZXhPZiggYXR0YWNobWVudC5nZXQoICd1cmwnICkgKSApIHtcblx0XHRcdFx0Y29udGVudCArPSBbXG5cdFx0XHRcdFx0Jzx0cmFjayBzcmNsYW5nPVwiZW5cIiBsYWJlbD1cIkVuZ2xpc2hcIiBraW5kPVwic3VidGl0bGVzXCIgc3JjPVwiJyxcblx0XHRcdFx0XHRhdHRhY2htZW50LmdldCggJ3VybCcgKSxcblx0XHRcdFx0XHQnXCIgLz4nXG5cdFx0XHRcdF0uam9pbignJyk7XG5cblx0XHRcdFx0Y29udHJvbGxlci5tZWRpYS5zZXQoICdjb250ZW50JywgY29udGVudCApO1xuXHRcdFx0fVxuXHRcdFx0c3RhdGUudHJpZ2dlciggJ2FkZC10cmFjaycsIGNvbnRyb2xsZXIubWVkaWEudG9KU09OKCkgKTtcblx0XHR9ICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvRGV0YWlscztcbiIsIi8qIGdsb2JhbCBNZWRpYUVsZW1lbnRQbGF5ZXIgKi9cblxuLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBBdHRhY2htZW50RGlzcGxheSA9IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXksXG5cdCQgPSBqUXVlcnksXG5cdE1lZGlhRGV0YWlscztcblxuTWVkaWFEZXRhaWxzID0gQXR0YWNobWVudERpc3BsYXkuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5iaW5kQWxsKHRoaXMsICdzdWNjZXNzJyk7XG5cdFx0dGhpcy5wbGF5ZXJzID0gW107XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jb250cm9sbGVyLCAnY2xvc2UnLCB3cC5tZWRpYS5taXhpbi51bnNldFBsYXllcnMgKTtcblx0XHR0aGlzLm9uKCAncmVhZHknLCB0aGlzLnNldFBsYXllciApO1xuXHRcdHRoaXMub24oICdtZWRpYTpzZXR0aW5nOnJlbW92ZScsIHdwLm1lZGlhLm1peGluLnVuc2V0UGxheWVycywgdGhpcyApO1xuXHRcdHRoaXMub24oICdtZWRpYTpzZXR0aW5nOnJlbW92ZScsIHRoaXMucmVuZGVyICk7XG5cdFx0dGhpcy5vbiggJ21lZGlhOnNldHRpbmc6cmVtb3ZlJywgdGhpcy5zZXRQbGF5ZXIgKTtcblxuXHRcdEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHRldmVudHM6IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIF8uZXh0ZW5kKCB7XG5cdFx0XHQnY2xpY2sgLnJlbW92ZS1zZXR0aW5nJyA6ICdyZW1vdmVTZXR0aW5nJyxcblx0XHRcdCdjaGFuZ2UgLmNvbnRlbnQtdHJhY2snIDogJ3NldFRyYWNrcycsXG5cdFx0XHQnY2xpY2sgLnJlbW92ZS10cmFjaycgOiAnc2V0VHJhY2tzJyxcblx0XHRcdCdjbGljayAuYWRkLW1lZGlhLXNvdXJjZScgOiAnYWRkU291cmNlJ1xuXHRcdH0sIEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5ldmVudHMgKTtcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gXy5kZWZhdWx0cyh7XG5cdFx0XHRtb2RlbDogdGhpcy5tb2RlbC50b0pTT04oKVxuXHRcdH0sIHRoaXMub3B0aW9ucyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBzZXR0aW5nJ3MgVUkgd2hlbiB0aGUgbW9kZWwgdW5zZXRzIGl0XG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS52aWV3Lk1lZGlhRGV0YWlscyNtZWRpYTpzZXR0aW5nOnJlbW92ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdCAqL1xuXHRyZW1vdmVTZXR0aW5nIDogZnVuY3Rpb24oZSkge1xuXHRcdHZhciB3cmFwID0gJCggZS5jdXJyZW50VGFyZ2V0ICkucGFyZW50KCksIHNldHRpbmc7XG5cdFx0c2V0dGluZyA9IHdyYXAuZmluZCggJ2lucHV0JyApLmRhdGEoICdzZXR0aW5nJyApO1xuXG5cdFx0aWYgKCBzZXR0aW5nICkge1xuXHRcdFx0dGhpcy5tb2RlbC51bnNldCggc2V0dGluZyApO1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnbWVkaWE6c2V0dGluZzpyZW1vdmUnLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0d3JhcC5yZW1vdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzI21lZGlhOnNldHRpbmc6cmVtb3ZlXG5cdCAqL1xuXHRzZXRUcmFja3MgOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHJhY2tzID0gJyc7XG5cblx0XHRfLmVhY2goIHRoaXMuJCgnLmNvbnRlbnQtdHJhY2snKSwgZnVuY3Rpb24odHJhY2spIHtcblx0XHRcdHRyYWNrcyArPSAkKCB0cmFjayApLnZhbCgpO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMubW9kZWwuc2V0KCAnY29udGVudCcsIHRyYWNrcyApO1xuXHRcdHRoaXMudHJpZ2dlciggJ21lZGlhOnNldHRpbmc6cmVtb3ZlJywgdGhpcyApO1xuXHR9LFxuXG5cdGFkZFNvdXJjZSA6IGZ1bmN0aW9uKCBlICkge1xuXHRcdHRoaXMuY29udHJvbGxlci5sYXN0TWltZSA9ICQoIGUuY3VycmVudFRhcmdldCApLmRhdGEoICdtaW1lJyApO1xuXHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSggJ2FkZC0nICsgdGhpcy5jb250cm9sbGVyLmRlZmF1bHRzLmlkICsgJy1zb3VyY2UnICk7XG5cdH0sXG5cblx0bG9hZFBsYXllcjogZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMucGxheWVycy5wdXNoKCBuZXcgTWVkaWFFbGVtZW50UGxheWVyKCB0aGlzLm1lZGlhLCB0aGlzLnNldHRpbmdzICkgKTtcblx0XHR0aGlzLnNjcmlwdFhociA9IGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAZ2xvYmFsIE1lZGlhRWxlbWVudFBsYXllclxuXHQgKi9cblx0c2V0UGxheWVyIDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGJhc2VTZXR0aW5ncywgc3JjO1xuXG5cdFx0aWYgKCB0aGlzLnBsYXllcnMubGVuZ3RoIHx8ICEgdGhpcy5tZWRpYSB8fCB0aGlzLnNjcmlwdFhociApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzcmMgPSB0aGlzLm1vZGVsLmdldCggJ3NyYycgKTtcblxuXHRcdGlmICggc3JjICYmIHNyYy5pbmRleE9mKCAndmltZW8nICkgPiAtMSAmJiAhICggJ0Zyb29nYWxvb3AnIGluIHdpbmRvdyApICkge1xuXHRcdFx0YmFzZVNldHRpbmdzID0gd3AubWVkaWEubWl4aW4ubWVqc1NldHRpbmdzO1xuXHRcdFx0dGhpcy5zY3JpcHRYaHIgPSAkLmdldFNjcmlwdCggYmFzZVNldHRpbmdzLnBsdWdpblBhdGggKyAnZnJvb2dhbG9vcC5taW4uanMnLCBfLmJpbmQoIHRoaXMubG9hZFBsYXllciwgdGhpcyApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9hZFBsYXllcigpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQGFic3RyYWN0XG5cdCAqL1xuXHRzZXRNZWRpYSA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN1Y2Nlc3MgOiBmdW5jdGlvbihtZWpzKSB7XG5cdFx0dmFyIGF1dG9wbGF5ID0gbWVqcy5hdHRyaWJ1dGVzLmF1dG9wbGF5ICYmICdmYWxzZScgIT09IG1lanMuYXR0cmlidXRlcy5hdXRvcGxheTtcblxuXHRcdGlmICggJ2ZsYXNoJyA9PT0gbWVqcy5wbHVnaW5UeXBlICYmIGF1dG9wbGF5ICkge1xuXHRcdFx0bWVqcy5hZGRFdmVudExpc3RlbmVyKCAnY2FucGxheScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZWpzLnBsYXkoKTtcblx0XHRcdH0sIGZhbHNlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tZWpzID0gbWVqcztcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge21lZGlhLnZpZXcuTWVkaWFEZXRhaWxzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdHNldFRpbWVvdXQoIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnJlc2V0Rm9jdXMoKTtcblx0XHR9LCB0aGlzICksIDEwICk7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gXy5kZWZhdWx0cygge1xuXHRcdFx0c3VjY2VzcyA6IHRoaXMuc3VjY2Vzc1xuXHRcdH0sIHdwLm1lZGlhLm1peGluLm1lanNTZXR0aW5ncyApO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0TWVkaWEoKTtcblx0fSxcblxuXHRyZXNldEZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiQoICcuZW1iZWQtbWVkaWEtc2V0dGluZ3MnICkuc2Nyb2xsVG9wKCAwICk7XG5cdH1cbn0sIHtcblx0aW5zdGFuY2VzIDogMCxcblx0LyoqXG5cdCAqIFdoZW4gbXVsdGlwbGUgcGxheWVycyBpbiB0aGUgRE9NIGNvbnRhaW4gdGhlIHNhbWUgc3JjLCB0aGluZ3MgZ2V0IHdlaXJkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtXG5cdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cblx0ICovXG5cdHByZXBhcmVTcmMgOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgaSA9IE1lZGlhRGV0YWlscy5pbnN0YW5jZXMrKztcblx0XHRfLmVhY2goICQoIGVsZW0gKS5maW5kKCAnc291cmNlJyApLCBmdW5jdGlvbiggc291cmNlICkge1xuXHRcdFx0c291cmNlLnNyYyA9IFtcblx0XHRcdFx0c291cmNlLnNyYyxcblx0XHRcdFx0c291cmNlLnNyYy5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/Jyxcblx0XHRcdFx0J189Jyxcblx0XHRcdFx0aVxuXHRcdFx0XS5qb2luKCcnKTtcblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVkaWFEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlZpZGVvRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIE1lZGlhRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzLFxuXHRWaWRlb0RldGFpbHM7XG5cblZpZGVvRGV0YWlscyA9IE1lZGlhRGV0YWlscy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICd2aWRlby1kZXRhaWxzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgndmlkZW8tZGV0YWlscycpLFxuXG5cdHNldE1lZGlhOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmlkZW8gPSB0aGlzLiQoJy53cC12aWRlby1zaG9ydGNvZGUnKTtcblxuXHRcdGlmICggdmlkZW8uZmluZCggJ3NvdXJjZScgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIHZpZGVvLmlzKCc6aGlkZGVuJykgKSB7XG5cdFx0XHRcdHZpZGVvLnNob3coKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHZpZGVvLmhhc0NsYXNzKCAneW91dHViZS12aWRlbycgKSAmJiAhIHZpZGVvLmhhc0NsYXNzKCAndmltZW8tdmlkZW8nICkgKSB7XG5cdFx0XHRcdHRoaXMubWVkaWEgPSBNZWRpYURldGFpbHMucHJlcGFyZVNyYyggdmlkZW8uZ2V0KDApICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1lZGlhID0gdmlkZW8uZ2V0KDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWRlby5oaWRlKCk7XG5cdFx0XHR0aGlzLm1lZGlhID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvRGV0YWlscztcbiJdfQ==
  • src/wp-includes/js/media-grid.js

     
    854854
    855855module.exports = Manage;
    856856
    857 },{}]},{},[2]);
     857},{}]},{},[2])
     858//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvZWRpdC1hdHRhY2htZW50LW1ldGFkYXRhLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2dyaWQubWFuaWZlc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvcm91dGVycy9tYW5hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9kZXRhaWxzLXR3by1jb2x1bW4uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYnV0dG9uL2RlbGV0ZS1zZWxlY3RlZC1wZXJtYW5lbnRseS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9idXR0b24vZGVsZXRlLXNlbGVjdGVkLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2J1dHRvbi9zZWxlY3QtbW9kZS10b2dnbGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZWRpdC1pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL2VkaXQtYXR0YWNobWVudHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvbWFuYWdlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkVkaXRBdHRhY2htZW50TWV0YWRhdGFcbiAqXG4gKiBBIHN0YXRlIGZvciBlZGl0aW5nIGFuIGF0dGFjaG1lbnQncyBtZXRhZGF0YS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEVkaXRBdHRhY2htZW50TWV0YWRhdGE7XG5cbkVkaXRBdHRhY2htZW50TWV0YWRhdGEgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgJ2VkaXQtYXR0YWNobWVudCcsXG5cdFx0Ly8gVGl0bGUgc3RyaW5nIHBhc3NlZCB0byB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24gdmlldy5cblx0XHR0aXRsZTogICBsMTBuLmF0dGFjaG1lbnREZXRhaWxzLFxuXHRcdC8vIFJlZ2lvbiBtb2RlIGRlZmF1bHRzLlxuXHRcdGNvbnRlbnQ6ICdlZGl0LW1ldGFkYXRhJyxcblx0XHRtZW51OiAgICBmYWxzZSxcblx0XHR0b29sYmFyOiBmYWxzZSxcblx0XHRyb3V0ZXI6ICBmYWxzZVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0QXR0YWNobWVudE1ldGFkYXRhO1xuIiwidmFyIG1lZGlhID0gd3AubWVkaWE7XG5cbm1lZGlhLmNvbnRyb2xsZXIuRWRpdEF0dGFjaG1lbnRNZXRhZGF0YSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2VkaXQtYXR0YWNobWVudC1tZXRhZGF0YS5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NYW5hZ2UgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9tYW5hZ2UuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlscy5Ud29Db2x1bW4gPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50L2RldGFpbHMtdHdvLWNvbHVtbi5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NYW5hZ2UuUm91dGVyID0gcmVxdWlyZSggJy4vcm91dGVycy9tYW5hZ2UuanMnICk7XG5tZWRpYS52aWV3LkVkaXRJbWFnZS5EZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvZWRpdC1pbWFnZS1kZXRhaWxzLmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lLkVkaXRBdHRhY2htZW50cyA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lL2VkaXQtYXR0YWNobWVudHMuanMnICk7XG5tZWRpYS52aWV3LlNlbGVjdE1vZGVUb2dnbGVCdXR0b24gPSByZXF1aXJlKCAnLi92aWV3cy9idXR0b24vc2VsZWN0LW1vZGUtdG9nZ2xlLmpzJyApO1xubWVkaWEudmlldy5EZWxldGVTZWxlY3RlZEJ1dHRvbiA9IHJlcXVpcmUoICcuL3ZpZXdzL2J1dHRvbi9kZWxldGUtc2VsZWN0ZWQuanMnICk7XG5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkUGVybWFuZW50bHlCdXR0b24gPSByZXF1aXJlKCAnLi92aWV3cy9idXR0b24vZGVsZXRlLXNlbGVjdGVkLXBlcm1hbmVudGx5LmpzJyApO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWFuYWdlLlJvdXRlclxuICpcbiAqIEEgcm91dGVyIGZvciBoYW5kbGluZyB0aGUgYnJvd3NlciBoaXN0b3J5IGFuZCBhcHBsaWNhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Sb3V0ZXJcbiAqL1xudmFyIFJvdXRlciA9IEJhY2tib25lLlJvdXRlci5leHRlbmQoe1xuXHRyb3V0ZXM6IHtcblx0XHQndXBsb2FkLnBocD9pdGVtPTpzbHVnJzogICAgJ3Nob3dJdGVtJyxcblx0XHQndXBsb2FkLnBocD9zZWFyY2g9OnF1ZXJ5JzogJ3NlYXJjaCdcblx0fSxcblxuXHQvLyBNYXAgcm91dGVzIGFnYWluc3QgdGhlIHBhZ2UgVVJMXG5cdGJhc2VVcmw6IGZ1bmN0aW9uKCB1cmwgKSB7XG5cdFx0cmV0dXJuICd1cGxvYWQucGhwJyArIHVybDtcblx0fSxcblxuXHQvLyBSZXNwb25kIHRvIHRoZSBzZWFyY2ggcm91dGUgYnkgZmlsbGluZyB0aGUgc2VhcmNoIGZpZWxkIGFuZCB0cmlnZ2dlcmluZyB0aGUgaW5wdXQgZXZlbnRcblx0c2VhcmNoOiBmdW5jdGlvbiggcXVlcnkgKSB7XG5cdFx0alF1ZXJ5KCAnI21lZGlhLXNlYXJjaC1pbnB1dCcgKS52YWwoIHF1ZXJ5ICkudHJpZ2dlciggJ2lucHV0JyApO1xuXHR9LFxuXG5cdC8vIFNob3cgdGhlIG1vZGFsIHdpdGggYSBzcGVjaWZpYyBpdGVtXG5cdHNob3dJdGVtOiBmdW5jdGlvbiggcXVlcnkgKSB7XG5cdFx0dmFyIG1lZGlhID0gd3AubWVkaWEsXG5cdFx0XHRsaWJyYXJ5ID0gbWVkaWEuZnJhbWUuc3RhdGUoKS5nZXQoJ2xpYnJhcnknKSxcblx0XHRcdGl0ZW07XG5cblx0XHQvLyBUcmlnZ2VyIHRoZSBtZWRpYSBmcmFtZSB0byBvcGVuIHRoZSBjb3JyZWN0IGl0ZW1cblx0XHRpdGVtID0gbGlicmFyeS5maW5kV2hlcmUoIHsgaWQ6IHBhcnNlSW50KCBxdWVyeSwgMTAgKSB9ICk7XG5cdFx0aWYgKCBpdGVtICkge1xuXHRcdFx0bWVkaWEuZnJhbWUudHJpZ2dlciggJ2VkaXQ6YXR0YWNobWVudCcsIGl0ZW0gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbSA9IG1lZGlhLmF0dGFjaG1lbnQoIHF1ZXJ5ICk7XG5cdFx0XHRtZWRpYS5mcmFtZS5saXN0ZW5UbyggaXRlbSwgJ2NoYW5nZScsIGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHRcdFx0bWVkaWEuZnJhbWUuc3RvcExpc3RlbmluZyggaXRlbSApO1xuXHRcdFx0XHRtZWRpYS5mcmFtZS50cmlnZ2VyKCAnZWRpdDphdHRhY2htZW50JywgbW9kZWwgKTtcblx0XHRcdH0gKTtcblx0XHRcdGl0ZW0uZmV0Y2goKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJvdXRlcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50LkRldGFpbHMuVHdvQ29sdW1uXG4gKlxuICogQSBzaW1pbGFyIHZpZXcgdG8gbWVkaWEudmlldy5BdHRhY2htZW50LkRldGFpbHNcbiAqIGZvciB1c2UgaW4gdGhlIEVkaXQgQXR0YWNobWVudCBtb2RhbC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlsc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzLFxuXHRUd29Db2x1bW47XG5cblR3b0NvbHVtbiA9IERldGFpbHMuZXh0ZW5kKHtcblx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCAnYXR0YWNobWVudC1kZXRhaWxzLXR3by1jb2x1bW4nICksXG5cblx0ZWRpdEF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHRoaXMuY29udHJvbGxlci5jb250ZW50Lm1vZGUoICdlZGl0LWltYWdlJyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBOb29wIHRoaXMgZnJvbSBwYXJlbnQgY2xhc3MsIGRvZXNuJ3QgYXBwbHkgaGVyZS5cblx0ICovXG5cdHRvZ2dsZVNlbGVjdGlvbkhhbmRsZXI6IGZ1bmN0aW9uKCkge30sXG5cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHREZXRhaWxzLnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0d3AubWVkaWEubWl4aW4ucmVtb3ZlQWxsUGxheWVycygpO1xuXHRcdHRoaXMuJCggJ2F1ZGlvLCB2aWRlbycgKS5lYWNoKCBmdW5jdGlvbiAoaSwgZWxlbSkge1xuXHRcdFx0dmFyIGVsID0gd3AubWVkaWEudmlldy5NZWRpYURldGFpbHMucHJlcGFyZVNyYyggZWxlbSApO1xuXHRcdFx0bmV3IHdpbmRvdy5NZWRpYUVsZW1lbnRQbGF5ZXIoIGVsLCB3cC5tZWRpYS5taXhpbi5tZWpzU2V0dGluZ3MgKTtcblx0XHR9ICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFR3b0NvbHVtbjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5EZWxldGVTZWxlY3RlZFBlcm1hbmVudGx5QnV0dG9uXG4gKlxuICogV2hlbiBNRURJQV9UUkFTSCBpcyB0cnVlLCBhIGJ1dHRvbiB0aGF0IGhhbmRsZXMgYnVsayBEZWxldGUgUGVybWFuZW50bHkgbG9naWNcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkQnV0dG9uXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5CdXR0b25cbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHREZWxldGVTZWxlY3RlZCA9IHdwLm1lZGlhLnZpZXcuRGVsZXRlU2VsZWN0ZWRCdXR0b24sXG5cdERlbGV0ZVNlbGVjdGVkUGVybWFuZW50bHk7XG5cbkRlbGV0ZVNlbGVjdGVkUGVybWFuZW50bHkgPSBEZWxldGVTZWxlY3RlZC5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHREZWxldGVTZWxlY3RlZC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5jb250cm9sbGVyLm9uKCAnc2VsZWN0OmFjdGl2YXRlJywgdGhpcy5zZWxlY3RBY3RpdmF0ZSwgdGhpcyApO1xuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ3NlbGVjdDpkZWFjdGl2YXRlJywgdGhpcy5zZWxlY3REZWFjdGl2YXRlLCB0aGlzICk7XG5cdH0sXG5cblx0ZmlsdGVyQ2hhbmdlOiBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0dGhpcy5jYW5TaG93ID0gKCAndHJhc2gnID09PSBtb2RlbC5nZXQoICdzdGF0dXMnICkgKTtcblx0fSxcblxuXHRzZWxlY3RBY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50b2dnbGVEaXNhYmxlZCgpO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnaGlkZGVuJywgISB0aGlzLmNhblNob3cgKTtcblx0fSxcblxuXHRzZWxlY3REZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRvZ2dsZURpc2FibGVkKCk7XG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdH0sXG5cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5zZWxlY3RBY3RpdmF0ZSgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWxldGVTZWxlY3RlZFBlcm1hbmVudGx5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkQnV0dG9uXG4gKlxuICogQSBidXR0b24gdGhhdCBoYW5kbGVzIGJ1bGsgRGVsZXRlL1RyYXNoIGxvZ2ljXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5CdXR0b25cbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHREZWxldGVTZWxlY3RlZDtcblxuRGVsZXRlU2VsZWN0ZWQgPSBCdXR0b24uZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0QnV0dG9uLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5maWx0ZXJzICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLmZpbHRlcnMubW9kZWwub24oICdjaGFuZ2UnLCB0aGlzLmZpbHRlckNoYW5nZSwgdGhpcyApO1xuXHRcdH1cblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdzZWxlY3Rpb246dG9nZ2xlJywgdGhpcy50b2dnbGVEaXNhYmxlZCwgdGhpcyApO1xuXHR9LFxuXG5cdGZpbHRlckNoYW5nZTogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdGlmICggJ3RyYXNoJyA9PT0gbW9kZWwuZ2V0KCAnc3RhdHVzJyApICkge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoICd0ZXh0JywgbDEwbi51bnRyYXNoU2VsZWN0ZWQgKTtcblx0XHR9IGVsc2UgaWYgKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1lZGlhVHJhc2ggKSB7XG5cdFx0XHR0aGlzLm1vZGVsLnNldCggJ3RleHQnLCBsMTBuLnRyYXNoU2VsZWN0ZWQgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoICd0ZXh0JywgbDEwbi5kZWxldGVTZWxlY3RlZCApO1xuXHRcdH1cblx0fSxcblxuXHR0b2dnbGVEaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5tb2RlbC5zZXQoICdkaXNhYmxlZCcsICEgdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCAnc2VsZWN0aW9uJyApLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0QnV0dG9uLnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ3NlbGVjdCcgKSApIHtcblx0XHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnZGVsZXRlLXNlbGVjdGVkLWJ1dHRvbicgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdkZWxldGUtc2VsZWN0ZWQtYnV0dG9uIGhpZGRlbicgKTtcblx0XHR9XG5cdFx0dGhpcy50b2dnbGVEaXNhYmxlZCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWxldGVTZWxlY3RlZDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5TZWxlY3RNb2RlVG9nZ2xlQnV0dG9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5CdXR0b25cbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEJ1dHRvbiA9IHdwLm1lZGlhLnZpZXcuQnV0dG9uLFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRTZWxlY3RNb2RlVG9nZ2xlO1xuXG5TZWxlY3RNb2RlVG9nZ2xlID0gQnV0dG9uLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0c2l6ZSA6ICcnXG5cdFx0fSApO1xuXG5cdFx0QnV0dG9uLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdzZWxlY3Q6YWN0aXZhdGUgc2VsZWN0OmRlYWN0aXZhdGUnLCB0aGlzLnRvZ2dsZUJ1bGtFZGl0SGFuZGxlciwgdGhpcyApO1xuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ3NlbGVjdGlvbjphY3Rpb246ZG9uZScsIHRoaXMuYmFjaywgdGhpcyApO1xuXHR9LFxuXG5cdGJhY2s6IGZ1bmN0aW9uICgpIHtcblx0XHR0aGlzLmNvbnRyb2xsZXIuZGVhY3RpdmF0ZU1vZGUoICdzZWxlY3QnICkuYWN0aXZhdGVNb2RlKCAnZWRpdCcgKTtcblx0fSxcblxuXHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0QnV0dG9uLnByb3RvdHlwZS5jbGljay5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnc2VsZWN0JyApICkge1xuXHRcdFx0dGhpcy5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci5kZWFjdGl2YXRlTW9kZSggJ2VkaXQnICkuYWN0aXZhdGVNb2RlKCAnc2VsZWN0JyApO1xuXHRcdH1cblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdEJ1dHRvbi5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ3NlbGVjdC1tb2RlLXRvZ2dsZS1idXR0b24nICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQnVsa0VkaXRIYW5kbGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdG9vbGJhciA9IHRoaXMuY29udHJvbGxlci5jb250ZW50LmdldCgpLnRvb2xiYXIsIGNoaWxkcmVuO1xuXG5cdFx0Y2hpbGRyZW4gPSB0b29sYmFyLiQoICcubWVkaWEtdG9vbGJhci1zZWNvbmRhcnkgPiAqLCAubWVkaWEtdG9vbGJhci1wcmltYXJ5ID4gKicgKTtcblxuXHRcdC8vIFRPRE86IHRoZSBGcmFtZSBzaG91bGQgYmUgZG9pbmcgYWxsIG9mIHRoaXMuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnc2VsZWN0JyApICkge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoIHtcblx0XHRcdFx0c2l6ZTogJ2xhcmdlJyxcblx0XHRcdFx0dGV4dDogbDEwbi5jYW5jZWxTZWxlY3Rpb25cblx0XHRcdH0gKTtcblx0XHRcdGNoaWxkcmVuLm5vdCggJy5zcGlubmVyLCAubWVkaWEtYnV0dG9uJyApLmhpZGUoKTtcblx0XHRcdHRoaXMuJGVsLnNob3coKTtcblx0XHRcdHRvb2xiYXIuJCggJy5kZWxldGUtc2VsZWN0ZWQtYnV0dG9uJyApLnJlbW92ZUNsYXNzKCAnaGlkZGVuJyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1vZGVsLnNldCgge1xuXHRcdFx0XHRzaXplOiAnJyxcblx0XHRcdFx0dGV4dDogbDEwbi5idWxrU2VsZWN0XG5cdFx0XHR9ICk7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuY29udGVudC5nZXQoKS4kZWwucmVtb3ZlQ2xhc3MoICdmaXhlZCcgKTtcblx0XHRcdHRvb2xiYXIuJGVsLmNzcyggJ3dpZHRoJywgJycgKTtcblx0XHRcdHRvb2xiYXIuJCggJy5kZWxldGUtc2VsZWN0ZWQtYnV0dG9uJyApLmFkZENsYXNzKCAnaGlkZGVuJyApO1xuXHRcdFx0Y2hpbGRyZW4ubm90KCAnLm1lZGlhLWJ1dHRvbicgKS5zaG93KCk7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoICdzZWxlY3Rpb24nICkucmVzZXQoKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdE1vZGVUb2dnbGU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRWRpdEltYWdlLkRldGFpbHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdEVkaXRJbWFnZSA9IHdwLm1lZGlhLnZpZXcuRWRpdEltYWdlLFxuXHREZXRhaWxzO1xuXG5EZXRhaWxzID0gRWRpdEltYWdlLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHRoaXMuZWRpdG9yID0gd2luZG93LmltYWdlRWRpdDtcblx0XHR0aGlzLmZyYW1lID0gb3B0aW9ucy5mcmFtZTtcblx0XHR0aGlzLmNvbnRyb2xsZXIgPSBvcHRpb25zLmNvbnRyb2xsZXI7XG5cdFx0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0YmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5jb250ZW50Lm1vZGUoICdlZGl0LW1ldGFkYXRhJyApO1xuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW9kZWwuZmV0Y2goKS5kb25lKCBfLmJpbmQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5mcmFtZS5jb250ZW50Lm1vZGUoICdlZGl0LW1ldGFkYXRhJyApO1xuXHRcdH0sIHRoaXMgKSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuRWRpdEF0dGFjaG1lbnRzXG4gKlxuICogQSBmcmFtZSBmb3IgZWRpdGluZyB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIG1lZGlhIGl0ZW0uXG4gKlxuICogT3BlbnMgaW4gYSBtb2RhbCBieSBkZWZhdWx0LlxuICpcbiAqIFJlcXVpcmVzIGFuIGF0dGFjaG1lbnQgbW9kZWwgdG8gYmUgcGFzc2VkIGluIHRoZSBvcHRpb25zIGhhc2ggdW5kZXIgYG1vZGVsYC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIEZyYW1lID0gd3AubWVkaWEudmlldy5GcmFtZSxcblx0TWVkaWFGcmFtZSA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZSxcblxuXHQkID0galF1ZXJ5LFxuXHRFZGl0QXR0YWNobWVudHM7XG5cbkVkaXRBdHRhY2htZW50cyA9IE1lZGlhRnJhbWUuZXh0ZW5kKHtcblxuXHRjbGFzc05hbWU6ICdlZGl0LWF0dGFjaG1lbnQtZnJhbWUnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCAnZWRpdC1hdHRhY2htZW50LWZyYW1lJyApLFxuXHRyZWdpb25zOiAgIFsgJ3RpdGxlJywgJ2NvbnRlbnQnIF0sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIC5sZWZ0JzogICdwcmV2aW91c01lZGlhSXRlbScsXG5cdFx0J2NsaWNrIC5yaWdodCc6ICduZXh0TWVkaWFJdGVtJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdEZyYW1lLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0bW9kYWw6IHRydWUsXG5cdFx0XHRzdGF0ZTogJ2VkaXQtYXR0YWNobWVudCdcblx0XHR9KTtcblxuXHRcdHRoaXMuY29udHJvbGxlciA9IHRoaXMub3B0aW9ucy5jb250cm9sbGVyO1xuXHRcdHRoaXMuZ3JpZFJvdXRlciA9IHRoaXMuY29udHJvbGxlci5ncmlkUm91dGVyO1xuXHRcdHRoaXMubGlicmFyeSA9IHRoaXMub3B0aW9ucy5saWJyYXJ5O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubW9kZWwgKSB7XG5cdFx0XHR0aGlzLm1vZGVsID0gdGhpcy5vcHRpb25zLm1vZGVsO1xuXHRcdH1cblxuXHRcdHRoaXMuYmluZEhhbmRsZXJzKCk7XG5cdFx0dGhpcy5jcmVhdGVTdGF0ZXMoKTtcblx0XHR0aGlzLmNyZWF0ZU1vZGFsKCk7XG5cblx0XHR0aGlzLnRpdGxlLm1vZGUoICdkZWZhdWx0JyApO1xuXHRcdHRoaXMudG9nZ2xlTmF2KCk7XG5cdH0sXG5cblx0YmluZEhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHQvLyBCaW5kIGRlZmF1bHQgdGl0bGUgY3JlYXRpb24uXG5cdFx0dGhpcy5vbiggJ3RpdGxlOmNyZWF0ZTpkZWZhdWx0JywgdGhpcy5jcmVhdGVUaXRsZSwgdGhpcyApO1xuXG5cdFx0Ly8gQ2xvc2UgdGhlIG1vZGFsIGlmIHRoZSBhdHRhY2htZW50IGlzIGRlbGV0ZWQuXG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpzdGF0dXMgZGVzdHJveScsIHRoaXMuY2xvc2UsIHRoaXMgKTtcblxuXHRcdHRoaXMub24oICdjb250ZW50OmNyZWF0ZTplZGl0LW1ldGFkYXRhJywgdGhpcy5lZGl0TWV0YWRhdGFNb2RlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmVkaXQtaW1hZ2UnLCB0aGlzLmVkaXRJbWFnZU1vZGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6ZWRpdC1pbWFnZScsIHRoaXMuZWRpdEltYWdlTW9kZVJlbmRlciwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjbG9zZScsIHRoaXMuZGV0YWNoICk7XG5cdH0sXG5cblx0Y3JlYXRlTW9kYWw6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIEluaXRpYWxpemUgbW9kYWwgY29udGFpbmVyIHZpZXcuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubW9kYWwgKSB7XG5cdFx0XHR0aGlzLm1vZGFsID0gbmV3IHdwLm1lZGlhLnZpZXcuTW9kYWwoe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0XHR0aXRsZTogICAgICB0aGlzLm9wdGlvbnMudGl0bGVcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1vZGFsLm9uKCAnb3BlbicsIF8uYmluZCggZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQkKCAnYm9keScgKS5vbiggJ2tleWRvd24ubWVkaWEtbW9kYWwnLCBfLmJpbmQoIHRoaXMua2V5RXZlbnQsIHRoaXMgKSApO1xuXHRcdFx0fSwgdGhpcyApICk7XG5cblx0XHRcdC8vIENvbXBsZXRlbHkgZGVzdHJveSB0aGUgbW9kYWwgRE9NIGVsZW1lbnQgd2hlbiBjbG9zaW5nIGl0LlxuXHRcdFx0dGhpcy5tb2RhbC5vbiggJ2Nsb3NlJywgXy5iaW5kKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5tb2RhbC5yZW1vdmUoKTtcblx0XHRcdFx0JCggJ2JvZHknICkub2ZmKCAna2V5ZG93bi5tZWRpYS1tb2RhbCcgKTsgLyogcmVtb3ZlIHRoZSBrZXlkb3duIGV2ZW50ICovXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGZvY3VzIGl0ZW0gaWYgcG9zc2libGVcblx0XHRcdFx0JCggJ2xpLmF0dGFjaG1lbnRbZGF0YS1pZD1cIicgKyB0aGlzLm1vZGVsLmdldCggJ2lkJyApICsnXCJdJyApLmZvY3VzKCk7XG5cdFx0XHRcdHRoaXMucmVzZXRSb3V0ZSgpO1xuXHRcdFx0fSwgdGhpcyApICk7XG5cblx0XHRcdC8vIFNldCB0aGlzIGZyYW1lIGFzIHRoZSBtb2RhbCdzIGNvbnRlbnQuXG5cdFx0XHR0aGlzLm1vZGFsLmNvbnRlbnQoIHRoaXMgKTtcblx0XHRcdHRoaXMubW9kYWwub3BlbigpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQWRkIHRoZSBkZWZhdWx0IHN0YXRlcyB0byB0aGUgZnJhbWUuXG5cdCAqL1xuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3RhdGVzLmFkZChbXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5FZGl0QXR0YWNobWVudE1ldGFkYXRhKCB7IG1vZGVsOiB0aGlzLm1vZGVsIH0gKVxuXHRcdF0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb250ZW50IHJlZ2lvbiByZW5kZXJpbmcgY2FsbGJhY2sgZm9yIHRoZSBgZWRpdC1tZXRhZGF0YWAgbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRlbnRSZWdpb24gQmFzaWMgb2JqZWN0IHdpdGggYSBgdmlld2AgcHJvcGVydHksIHdoaWNoXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgd2l0aCB0aGUgcHJvcGVyIHJlZ2lvbiB2aWV3LlxuXHQgKi9cblx0ZWRpdE1ldGFkYXRhTW9kZTogZnVuY3Rpb24oIGNvbnRlbnRSZWdpb24gKSB7XG5cdFx0Y29udGVudFJlZ2lvbi52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzLlR3b0NvbHVtbih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0bW9kZWw6ICAgICAgdGhpcy5tb2RlbFxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogQXR0YWNoIGEgc3VidmlldyB0byBkaXNwbGF5IGZpZWxkcyBhZGRlZCB2aWEgdGhlXG5cdFx0ICogYGF0dGFjaG1lbnRfZmllbGRzX3RvX2VkaXRgIGZpbHRlci5cblx0XHQgKi9cblx0XHRjb250ZW50UmVnaW9uLnZpZXcudmlld3Muc2V0KCAnLmF0dGFjaG1lbnQtY29tcGF0JywgbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudENvbXBhdCh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0bW9kZWw6ICAgICAgdGhpcy5tb2RlbFxuXHRcdH0pICk7XG5cblx0XHQvLyBVcGRhdGUgYnJvd3NlciB1cmwgd2hlbiBuYXZpZ2F0aW5nIG1lZGlhIGRldGFpbHNcblx0XHRpZiAoIHRoaXMubW9kZWwgKSB7XG5cdFx0XHR0aGlzLmdyaWRSb3V0ZXIubmF2aWdhdGUoIHRoaXMuZ3JpZFJvdXRlci5iYXNlVXJsKCAnP2l0ZW09JyArIHRoaXMubW9kZWwuaWQgKSApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUmVuZGVyIHRoZSBFZGl0SW1hZ2UgdmlldyBpbnRvIHRoZSBmcmFtZSdzIGNvbnRlbnQgcmVnaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gY29udGVudFJlZ2lvbiBCYXNpYyBvYmplY3Qgd2l0aCBhIGB2aWV3YCBwcm9wZXJ0eSwgd2hpY2hcblx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB3aXRoIHRoZSBwcm9wZXIgcmVnaW9uIHZpZXcuXG5cdCAqL1xuXHRlZGl0SW1hZ2VNb2RlOiBmdW5jdGlvbiggY29udGVudFJlZ2lvbiApIHtcblx0XHR2YXIgZWRpdEltYWdlQ29udHJvbGxlciA9IG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkVkaXRJbWFnZSgge1xuXHRcdFx0bW9kZWw6IHRoaXMubW9kZWwsXG5cdFx0XHRmcmFtZTogdGhpc1xuXHRcdH0gKTtcblx0XHQvLyBOb29wIHNvbWUgbWV0aG9kcy5cblx0XHRlZGl0SW1hZ2VDb250cm9sbGVyLl90b29sYmFyID0gZnVuY3Rpb24oKSB7fTtcblx0XHRlZGl0SW1hZ2VDb250cm9sbGVyLl9yb3V0ZXIgPSBmdW5jdGlvbigpIHt9O1xuXHRcdGVkaXRJbWFnZUNvbnRyb2xsZXIuX21lbnUgPSBmdW5jdGlvbigpIHt9O1xuXG5cdFx0Y29udGVudFJlZ2lvbi52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuRWRpdEltYWdlLkRldGFpbHMoIHtcblx0XHRcdG1vZGVsOiB0aGlzLm1vZGVsLFxuXHRcdFx0ZnJhbWU6IHRoaXMsXG5cdFx0XHRjb250cm9sbGVyOiBlZGl0SW1hZ2VDb250cm9sbGVyXG5cdFx0fSApO1xuXHR9LFxuXG5cdGVkaXRJbWFnZU1vZGVSZW5kZXI6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZpZXcub24oICdyZWFkeScsIHZpZXcubG9hZEVkaXRvciApO1xuXHR9LFxuXG5cdHRvZ2dsZU5hdjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCcubGVmdCcpLnRvZ2dsZUNsYXNzKCAnZGlzYWJsZWQnLCAhIHRoaXMuaGFzUHJldmlvdXMoKSApO1xuXHRcdHRoaXMuJCgnLnJpZ2h0JykudG9nZ2xlQ2xhc3MoICdkaXNhYmxlZCcsICEgdGhpcy5oYXNOZXh0KCkgKTtcblx0fSxcblxuXHQvKipcblx0ICogUmVyZW5kZXIgdGhlIHZpZXcuXG5cdCAqL1xuXHRyZXJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gT25seSByZXJlbmRlciB0aGUgYGNvbnRlbnRgIHJlZ2lvbi5cblx0XHRpZiAoIHRoaXMuY29udGVudC5tb2RlKCkgIT09ICdlZGl0LW1ldGFkYXRhJyApIHtcblx0XHRcdHRoaXMuY29udGVudC5tb2RlKCAnZWRpdC1tZXRhZGF0YScgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jb250ZW50LnJlbmRlcigpO1xuXHRcdH1cblxuXHRcdHRoaXMudG9nZ2xlTmF2KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsaWNrIGhhbmRsZXIgdG8gc3dpdGNoIHRvIHRoZSBwcmV2aW91cyBtZWRpYSBpdGVtLlxuXHQgKi9cblx0cHJldmlvdXNNZWRpYUl0ZW06IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggISB0aGlzLmhhc1ByZXZpb3VzKCkgKSB7XG5cdFx0XHR0aGlzLiQoICcubGVmdCcgKS5ibHVyKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubW9kZWwgPSB0aGlzLmxpYnJhcnkuYXQoIHRoaXMuZ2V0Q3VycmVudEluZGV4KCkgLSAxICk7XG5cdFx0dGhpcy5yZXJlbmRlcigpO1xuXHRcdHRoaXMuJCggJy5sZWZ0JyApLmZvY3VzKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENsaWNrIGhhbmRsZXIgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IG1lZGlhIGl0ZW0uXG5cdCAqL1xuXHRuZXh0TWVkaWFJdGVtOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgdGhpcy5oYXNOZXh0KCkgKSB7XG5cdFx0XHR0aGlzLiQoICcucmlnaHQnICkuYmx1cigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLm1vZGVsID0gdGhpcy5saWJyYXJ5LmF0KCB0aGlzLmdldEN1cnJlbnRJbmRleCgpICsgMSApO1xuXHRcdHRoaXMucmVyZW5kZXIoKTtcblx0XHR0aGlzLiQoICcucmlnaHQnICkuZm9jdXMoKTtcblx0fSxcblxuXHRnZXRDdXJyZW50SW5kZXg6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmxpYnJhcnkuaW5kZXhPZiggdGhpcy5tb2RlbCApO1xuXHR9LFxuXG5cdGhhc05leHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAoIHRoaXMuZ2V0Q3VycmVudEluZGV4KCkgKyAxICkgPCB0aGlzLmxpYnJhcnkubGVuZ3RoO1xuXHR9LFxuXG5cdGhhc1ByZXZpb3VzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gKCB0aGlzLmdldEN1cnJlbnRJbmRleCgpIC0gMSApID4gLTE7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXNwb25kIHRvIHRoZSBrZXlib2FyZCBldmVudHM6IHJpZ2h0IGFycm93LCBsZWZ0IGFycm93LCBleGNlcHQgd2hlblxuXHQgKiBmb2N1cyBpcyBpbiBhIHRleHRhcmVhIG9yIGlucHV0IGZpZWxkLlxuXHQgKi9cblx0a2V5RXZlbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICggJ0lOUFVUJyA9PT0gZXZlbnQudGFyZ2V0Lm5vZGVOYW1lIHx8ICdURVhUQVJFQScgPT09IGV2ZW50LnRhcmdldC5ub2RlTmFtZSApICYmICEgKCBldmVudC50YXJnZXQucmVhZE9ubHkgfHwgZXZlbnQudGFyZ2V0LmRpc2FibGVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHJpZ2h0IGFycm93IGtleVxuXHRcdGlmICggMzkgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHR0aGlzLm5leHRNZWRpYUl0ZW0oKTtcblx0XHR9XG5cdFx0Ly8gVGhlIGxlZnQgYXJyb3cga2V5XG5cdFx0aWYgKCAzNyA9PT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdHRoaXMucHJldmlvdXNNZWRpYUl0ZW0oKTtcblx0XHR9XG5cdH0sXG5cblx0cmVzZXRSb3V0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5ncmlkUm91dGVyLm5hdmlnYXRlKCB0aGlzLmdyaWRSb3V0ZXIuYmFzZVVybCggJycgKSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0QXR0YWNobWVudHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NYW5hZ2VcbiAqXG4gKiBBIGdlbmVyaWMgbWFuYWdlbWVudCBmcmFtZSB3b3JrZmxvdy5cbiAqXG4gKiBVc2VkIGluIHRoZSBtZWRpYSBncmlkIHZpZXcuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBNZWRpYUZyYW1lID0gd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLFxuXHRMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXG5cdCQgPSBCYWNrYm9uZS4kLFxuXHRNYW5hZ2U7XG5cbk1hbmFnZSA9IE1lZGlhRnJhbWUuZXh0ZW5kKHtcblx0LyoqXG5cdCAqIEBnbG9iYWwgd3AuVXBsb2FkZXJcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0dGl0bGU6ICAgICAnJyxcblx0XHRcdG1vZGFsOiAgICAgZmFsc2UsXG5cdFx0XHRzZWxlY3Rpb246IFtdLFxuXHRcdFx0bGlicmFyeTogICB7fSwgLy8gT3B0aW9ucyBoYXNoIGZvciB0aGUgcXVlcnkgdG8gdGhlIG1lZGlhIGxpYnJhcnkuXG5cdFx0XHRtdWx0aXBsZTogICdhZGQnLFxuXHRcdFx0c3RhdGU6ICAgICAnbGlicmFyeScsXG5cdFx0XHR1cGxvYWRlcjogIHRydWUsXG5cdFx0XHRtb2RlOiAgICAgIFsgJ2dyaWQnLCAnZWRpdCcgXVxuXHRcdH0pO1xuXG5cdFx0dGhpcy4kYm9keSA9ICQoIGRvY3VtZW50LmJvZHkgKTtcblx0XHR0aGlzLiR3aW5kb3cgPSAkKCB3aW5kb3cgKTtcblx0XHR0aGlzLiRhZG1pbkJhciA9ICQoICcjd3BhZG1pbmJhcicgKTtcblx0XHR0aGlzLiR3aW5kb3cub24oICdzY3JvbGwgcmVzaXplJywgXy5kZWJvdW5jZSggXy5iaW5kKCB0aGlzLmZpeFBvc2l0aW9uLCB0aGlzICksIDE1ICkgKTtcblx0XHQkKCBkb2N1bWVudCApLm9uKCAnY2xpY2snLCAnLnBhZ2UtdGl0bGUtYWN0aW9uJywgXy5iaW5kKCB0aGlzLmFkZE5ld0NsaWNrSGFuZGxlciwgdGhpcyApICk7XG5cblx0XHQvLyBFbnN1cmUgY29yZSBhbmQgbWVkaWEgZ3JpZCB2aWV3IFVJIGlzIGVuYWJsZWQuXG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoJ3dwLWNvcmUtdWknKTtcblxuXHRcdC8vIEZvcmNlIHRoZSB1cGxvYWRlciBvZmYgaWYgdGhlIHVwbG9hZCBsaW1pdCBoYXMgYmVlbiBleGNlZWRlZCBvclxuXHRcdC8vIGlmIHRoZSBicm93c2VyIGlzbid0IHN1cHBvcnRlZC5cblx0XHRpZiAoIHdwLlVwbG9hZGVyLmxpbWl0RXhjZWVkZWQgfHwgISB3cC5VcGxvYWRlci5icm93c2VyLnN1cHBvcnRlZCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy51cGxvYWRlciA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgYSB3aW5kb3ctd2lkZSB1cGxvYWRlci5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy51cGxvYWRlciApIHtcblx0XHRcdHRoaXMudXBsb2FkZXIgPSBuZXcgd3AubWVkaWEudmlldy5VcGxvYWRlcldpbmRvdyh7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRcdHVwbG9hZGVyOiB7XG5cdFx0XHRcdFx0ZHJvcHpvbmU6ICBkb2N1bWVudC5ib2R5LFxuXHRcdFx0XHRcdGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keVxuXHRcdFx0XHR9XG5cdFx0XHR9KS5yZW5kZXIoKTtcblx0XHRcdHRoaXMudXBsb2FkZXIucmVhZHkoKTtcblx0XHRcdCQoJ2JvZHknKS5hcHBlbmQoIHRoaXMudXBsb2FkZXIuZWwgKTtcblxuXHRcdFx0dGhpcy5vcHRpb25zLnVwbG9hZGVyID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5ncmlkUm91dGVyID0gbmV3IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NYW5hZ2UuUm91dGVyKCk7XG5cblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdE1lZGlhRnJhbWUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0Ly8gQXBwZW5kIHRoZSBmcmFtZSB2aWV3IGRpcmVjdGx5IHRoZSBzdXBwbGllZCBjb250YWluZXIuXG5cdFx0dGhpcy4kZWwuYXBwZW5kVG8oIHRoaXMub3B0aW9ucy5jb250YWluZXIgKTtcblxuXHRcdHRoaXMuY3JlYXRlU3RhdGVzKCk7XG5cdFx0dGhpcy5iaW5kUmVnaW9uTW9kZUhhbmRsZXJzKCk7XG5cdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR0aGlzLmJpbmRTZWFyY2hIYW5kbGVyKCk7XG5cdH0sXG5cblx0YmluZFNlYXJjaEhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWFyY2ggPSB0aGlzLiQoICcjbWVkaWEtc2VhcmNoLWlucHV0JyApLFxuXHRcdFx0Y3VycmVudFNlYXJjaCA9IHRoaXMub3B0aW9ucy5jb250YWluZXIuZGF0YSggJ3NlYXJjaCcgKSxcblx0XHRcdHNlYXJjaFZpZXcgPSB0aGlzLmJyb3dzZXJWaWV3LnRvb2xiYXIuZ2V0KCAnc2VhcmNoJyApLiRlbCxcblx0XHRcdGxpc3RNb2RlID0gdGhpcy4kKCAnLnZpZXctbGlzdCcgKSxcblxuXHRcdFx0aW5wdXQgID0gXy5kZWJvdW5jZSggZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0dmFyIHZhbCA9ICQoIGUuY3VycmVudFRhcmdldCApLnZhbCgpLFxuXHRcdFx0XHRcdHVybCA9ICcnO1xuXG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHVybCArPSAnP3NlYXJjaD0nICsgdmFsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ3JpZFJvdXRlci5uYXZpZ2F0ZSggdGhpcy5ncmlkUm91dGVyLmJhc2VVcmwoIHVybCApICk7XG5cdFx0XHR9LCAxMDAwICk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIFVSTCB3aGVuIGVudGVyaW5nIHNlYXJjaCBzdHJpbmcgKGF0IG1vc3Qgb25jZSBwZXIgc2Vjb25kKVxuXHRcdHNlYXJjaC5vbiggJ2lucHV0JywgXy5iaW5kKCBpbnB1dCwgdGhpcyApICk7XG5cdFx0c2VhcmNoVmlldy52YWwoIGN1cnJlbnRTZWFyY2ggKS50cmlnZ2VyKCAnaW5wdXQnICk7XG5cblx0XHR0aGlzLmdyaWRSb3V0ZXIub24oICdyb3V0ZTpzZWFyY2gnLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0aWYgKCBocmVmLmluZGV4T2YoICdtb2RlPScgKSA+IC0xICkge1xuXHRcdFx0XHRocmVmID0gaHJlZi5yZXBsYWNlKCAvbW9kZT1bXiZdKy9nLCAnbW9kZT1saXN0JyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aHJlZiArPSBocmVmLmluZGV4T2YoICc/JyApID4gLTEgPyAnJm1vZGU9bGlzdCcgOiAnP21vZGU9bGlzdCc7XG5cdFx0XHR9XG5cdFx0XHRocmVmID0gaHJlZi5yZXBsYWNlKCAnc2VhcmNoPScsICdzPScgKTtcblx0XHRcdGxpc3RNb2RlLnByb3AoICdocmVmJywgaHJlZiApO1xuXHRcdH0gKTtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBkZWZhdWx0IHN0YXRlcyBmb3IgdGhlIGZyYW1lLlxuXHQgKi9cblx0Y3JlYXRlU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0YXRlcyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGRlZmF1bHQgc3RhdGVzLlxuXHRcdHRoaXMuc3RhdGVzLmFkZChbXG5cdFx0XHRuZXcgTGlicmFyeSh7XG5cdFx0XHRcdGxpYnJhcnk6ICAgICAgICAgICAgd3AubWVkaWEucXVlcnkoIG9wdGlvbnMubGlicmFyeSApLFxuXHRcdFx0XHRtdWx0aXBsZTogICAgICAgICAgIG9wdGlvbnMubXVsdGlwbGUsXG5cdFx0XHRcdHRpdGxlOiAgICAgICAgICAgICAgb3B0aW9ucy50aXRsZSxcblx0XHRcdFx0Y29udGVudDogICAgICAgICAgICAnYnJvd3NlJyxcblx0XHRcdFx0dG9vbGJhcjogICAgICAgICAgICAnc2VsZWN0Jyxcblx0XHRcdFx0Y29udGVudFVzZXJTZXR0aW5nOiBmYWxzZSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogICAgICAgICAnYWxsJyxcblx0XHRcdFx0YXV0b1NlbGVjdDogICAgICAgICBmYWxzZVxuXHRcdFx0fSlcblx0XHRdKTtcblx0fSxcblxuXHQvKipcblx0ICogQmluZCByZWdpb24gbW9kZSBhY3RpdmF0aW9uIGV2ZW50cyB0byBwcm9wZXIgaGFuZGxlcnMuXG5cdCAqL1xuXHRiaW5kUmVnaW9uTW9kZUhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6YnJvd3NlJywgdGhpcy5icm93c2VDb250ZW50LCB0aGlzICk7XG5cblx0XHQvLyBIYW5kbGUgYSBmcmFtZS1sZXZlbCBldmVudCBmb3IgZWRpdGluZyBhbiBhdHRhY2htZW50LlxuXHRcdHRoaXMub24oICdlZGl0OmF0dGFjaG1lbnQnLCB0aGlzLm9wZW5FZGl0QXR0YWNobWVudE1vZGFsLCB0aGlzICk7XG5cblx0XHR0aGlzLm9uKCAnc2VsZWN0OmFjdGl2YXRlJywgdGhpcy5iaW5kS2V5ZG93biwgdGhpcyApO1xuXHRcdHRoaXMub24oICdzZWxlY3Q6ZGVhY3RpdmF0ZScsIHRoaXMudW5iaW5kS2V5ZG93biwgdGhpcyApO1xuXHR9LFxuXG5cdGhhbmRsZUtleWRvd246IGZ1bmN0aW9uKCBlICkge1xuXHRcdGlmICggMjcgPT09IGUud2hpY2ggKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmRlYWN0aXZhdGVNb2RlKCAnc2VsZWN0JyApLmFjdGl2YXRlTW9kZSggJ2VkaXQnICk7XG5cdFx0fVxuXHR9LFxuXG5cdGJpbmRLZXlkb3duOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRib2R5Lm9uKCAna2V5ZG93bi5zZWxlY3QnLCBfLmJpbmQoIHRoaXMuaGFuZGxlS2V5ZG93biwgdGhpcyApICk7XG5cdH0sXG5cblx0dW5iaW5kS2V5ZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kYm9keS5vZmYoICdrZXlkb3duLnNlbGVjdCcgKTtcblx0fSxcblxuXHRmaXhQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyICRicm93c2VyLCAkdG9vbGJhcjtcblx0XHRpZiAoICEgdGhpcy5pc01vZGVBY3RpdmUoICdzZWxlY3QnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGJyb3dzZXIgPSB0aGlzLiQoJy5hdHRhY2htZW50cy1icm93c2VyJyk7XG5cdFx0JHRvb2xiYXIgPSAkYnJvd3Nlci5maW5kKCcubWVkaWEtdG9vbGJhcicpO1xuXG5cdFx0Ly8gT2Zmc2V0IGRvZXNuJ3QgYXBwZWFyIHRvIHRha2UgdG9wIG1hcmdpbiBpbnRvIGFjY291bnQsIGhlbmNlICsxNlxuXHRcdGlmICggKCAkYnJvd3Nlci5vZmZzZXQoKS50b3AgKyAxNiApIDwgdGhpcy4kd2luZG93LnNjcm9sbFRvcCgpICsgdGhpcy4kYWRtaW5CYXIuaGVpZ2h0KCkgKSB7XG5cdFx0XHQkYnJvd3Nlci5hZGRDbGFzcyggJ2ZpeGVkJyApO1xuXHRcdFx0JHRvb2xiYXIuY3NzKCd3aWR0aCcsICRicm93c2VyLndpZHRoKCkgKyAncHgnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGJyb3dzZXIucmVtb3ZlQ2xhc3MoICdmaXhlZCcgKTtcblx0XHRcdCR0b29sYmFyLmNzcygnd2lkdGgnLCAnJyk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGljayBoYW5kbGVyIGZvciB0aGUgYEFkZCBOZXdgIGJ1dHRvbi5cblx0ICovXG5cdGFkZE5ld0NsaWNrSGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy50cmlnZ2VyKCAndG9nZ2xlOnVwbG9hZDphdHRhY2htZW50JyApO1xuXG5cdFx0aWYgKCB0aGlzLnVwbG9hZGVyICkge1xuXHRcdFx0dGhpcy51cGxvYWRlci5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBPcGVuIHRoZSBFZGl0IEF0dGFjaG1lbnQgbW9kYWwuXG5cdCAqL1xuXHRvcGVuRWRpdEF0dGFjaG1lbnRNb2RhbDogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBFZGl0QXR0YWNobWVudCBmcmFtZSwgcGFzc2luZyBhbG9uZyB0aGUgbGlicmFyeSBhbmQgdGhlIGF0dGFjaG1lbnQgbW9kZWwuXG5cdFx0d3AubWVkaWEoIHtcblx0XHRcdGZyYW1lOiAgICAgICAnZWRpdC1hdHRhY2htZW50cycsXG5cdFx0XHRjb250cm9sbGVyOiAgdGhpcyxcblx0XHRcdGxpYnJhcnk6ICAgICB0aGlzLnN0YXRlKCkuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRtb2RlbDogICAgICAgbW9kZWxcblx0XHR9ICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhbiBhdHRhY2htZW50cyBicm93c2VyIHZpZXcgd2l0aGluIHRoZSBjb250ZW50IHJlZ2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRlbnRSZWdpb24gQmFzaWMgb2JqZWN0IHdpdGggYSBgdmlld2AgcHJvcGVydHksIHdoaWNoXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgd2l0aCB0aGUgcHJvcGVyIHJlZ2lvbiB2aWV3LlxuXHQgKiBAdGhpcyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuXHQgKi9cblx0YnJvd3NlQ29udGVudDogZnVuY3Rpb24oIGNvbnRlbnRSZWdpb24gKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuXG5cdFx0Ly8gQnJvd3NlIG91ciBsaWJyYXJ5IG9mIGF0dGFjaG1lbnRzLlxuXHRcdHRoaXMuYnJvd3NlclZpZXcgPSBjb250ZW50UmVnaW9uLnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGNvbGxlY3Rpb246IHN0YXRlLmdldCgnbGlicmFyeScpLFxuXHRcdFx0c2VsZWN0aW9uOiAgc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdG1vZGVsOiAgICAgIHN0YXRlLFxuXHRcdFx0c29ydGFibGU6ICAgc3RhdGUuZ2V0KCdzb3J0YWJsZScpLFxuXHRcdFx0c2VhcmNoOiAgICAgc3RhdGUuZ2V0KCdzZWFyY2hhYmxlJyksXG5cdFx0XHRmaWx0ZXJzOiAgICBzdGF0ZS5nZXQoJ2ZpbHRlcmFibGUnKSxcblx0XHRcdGRhdGU6ICAgICAgIHN0YXRlLmdldCgnZGF0ZScpLFxuXHRcdFx0ZGlzcGxheTogICAgc3RhdGUuZ2V0KCdkaXNwbGF5U2V0dGluZ3MnKSxcblx0XHRcdGRyYWdJbmZvOiAgIHN0YXRlLmdldCgnZHJhZ0luZm8nKSxcblx0XHRcdHNpZGViYXI6ICAgICdlcnJvcnMnLFxuXG5cdFx0XHRzdWdnZXN0ZWRXaWR0aDogIHN0YXRlLmdldCgnc3VnZ2VzdGVkV2lkdGgnKSxcblx0XHRcdHN1Z2dlc3RlZEhlaWdodDogc3RhdGUuZ2V0KCdzdWdnZXN0ZWRIZWlnaHQnKSxcblxuXHRcdFx0QXR0YWNobWVudFZpZXc6IHN0YXRlLmdldCgnQXR0YWNobWVudFZpZXcnKSxcblxuXHRcdFx0c2Nyb2xsRWxlbWVudDogZG9jdW1lbnRcblx0XHR9KTtcblx0XHR0aGlzLmJyb3dzZXJWaWV3Lm9uKCAncmVhZHknLCBfLmJpbmQoIHRoaXMuYmluZERlZmVycmVkLCB0aGlzICkgKTtcblxuXHRcdHRoaXMuZXJyb3JzID0gd3AuVXBsb2FkZXIuZXJyb3JzO1xuXHRcdHRoaXMuZXJyb3JzLm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIHRoaXMuc2lkZWJhclZpc2liaWxpdHksIHRoaXMgKTtcblx0fSxcblxuXHRzaWRlYmFyVmlzaWJpbGl0eTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5icm93c2VyVmlldy4kKCAnLm1lZGlhLXNpZGViYXInICkudG9nZ2xlKCAhISB0aGlzLmVycm9ycy5sZW5ndGggKTtcblx0fSxcblxuXHRiaW5kRGVmZXJyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggISB0aGlzLmJyb3dzZXJWaWV3LmRmZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5icm93c2VyVmlldy5kZmQuZG9uZSggXy5iaW5kKCB0aGlzLnN0YXJ0SGlzdG9yeSwgdGhpcyApICk7XG5cdH0sXG5cblx0c3RhcnRIaXN0b3J5OiBmdW5jdGlvbigpIHtcblx0XHQvLyBWZXJpZnkgcHVzaFN0YXRlIHN1cHBvcnQgYW5kIGFjdGl2YXRlXG5cdFx0aWYgKCB3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgKSB7XG5cdFx0XHRCYWNrYm9uZS5oaXN0b3J5LnN0YXJ0KCB7XG5cdFx0XHRcdHJvb3Q6IHdpbmRvdy5fd3BNZWRpYUdyaWRTZXR0aW5ncy5hZG1pblVybCxcblx0XHRcdFx0cHVzaFN0YXRlOiB0cnVlXG5cdFx0XHR9ICk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYW5hZ2U7XG4iXX0=
  • src/wp-includes/js/media-models.js

     
    15031503
    15041504module.exports = Selection;
    15051505
    1506 },{}]},{},[1]);
     1506},{}]},{},[1])
     1507//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzLm1hbmlmZXN0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL21vZGVscy9hdHRhY2htZW50LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL21vZGVscy9hdHRhY2htZW50cy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9tb2RlbHMvcG9zdC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9tb2RlbHMvcXVlcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzL3NlbGVjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJ2YXIgJCA9IGpRdWVyeSxcblx0QXR0YWNobWVudCwgQXR0YWNobWVudHMsIGwxMG4sIG1lZGlhO1xuXG53aW5kb3cud3AgPSB3aW5kb3cud3AgfHwge307XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBtZWRpYSBmcmFtZS5cbiAqXG4gKiBIYW5kbGVzIHRoZSBkZWZhdWx0IG1lZGlhIGV4cGVyaWVuY2UuXG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSBhdHRyaWJ1dGVzIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgbWFpbiBtZWRpYSBjb250cm9sbGVyLlxuICogQHJldHVybiB7d3AubWVkaWEudmlldy5NZWRpYUZyYW1lfSBBIG1lZGlhIHdvcmtmbG93LlxuICovXG5tZWRpYSA9IHdwLm1lZGlhID0gZnVuY3Rpb24oIGF0dHJpYnV0ZXMgKSB7XG5cdHZhciBNZWRpYUZyYW1lID0gbWVkaWEudmlldy5NZWRpYUZyYW1lLFxuXHRcdGZyYW1lO1xuXG5cdGlmICggISBNZWRpYUZyYW1lICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKCBhdHRyaWJ1dGVzIHx8IHt9LCB7XG5cdFx0ZnJhbWU6ICdzZWxlY3QnXG5cdH0pO1xuXG5cdGlmICggJ3NlbGVjdCcgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5TZWxlY3QgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5TZWxlY3QoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ3Bvc3QnID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuUG9zdCApIHtcblx0XHRmcmFtZSA9IG5ldyBNZWRpYUZyYW1lLlBvc3QoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ21hbmFnZScgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5NYW5hZ2UgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5NYW5hZ2UoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ2ltYWdlJyA9PT0gYXR0cmlidXRlcy5mcmFtZSAmJiBNZWRpYUZyYW1lLkltYWdlRGV0YWlscyApIHtcblx0XHRmcmFtZSA9IG5ldyBNZWRpYUZyYW1lLkltYWdlRGV0YWlscyggYXR0cmlidXRlcyApO1xuXHR9IGVsc2UgaWYgKCAnYXVkaW8nID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuQXVkaW9EZXRhaWxzICkge1xuXHRcdGZyYW1lID0gbmV3IE1lZGlhRnJhbWUuQXVkaW9EZXRhaWxzKCBhdHRyaWJ1dGVzICk7XG5cdH0gZWxzZSBpZiAoICd2aWRlbycgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5WaWRlb0RldGFpbHMgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5WaWRlb0RldGFpbHMoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ2VkaXQtYXR0YWNobWVudHMnID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuRWRpdEF0dGFjaG1lbnRzICkge1xuXHRcdGZyYW1lID0gbmV3IE1lZGlhRnJhbWUuRWRpdEF0dGFjaG1lbnRzKCBhdHRyaWJ1dGVzICk7XG5cdH1cblxuXHRkZWxldGUgYXR0cmlidXRlcy5mcmFtZTtcblxuXHRtZWRpYS5mcmFtZSA9IGZyYW1lO1xuXG5cdHJldHVybiBmcmFtZTtcbn07XG5cbl8uZXh0ZW5kKCBtZWRpYSwgeyBtb2RlbDoge30sIHZpZXc6IHt9LCBjb250cm9sbGVyOiB7fSwgZnJhbWVzOiB7fSB9KTtcblxuLy8gTGluayBhbnkgbG9jYWxpemVkIHN0cmluZ3MuXG5sMTBuID0gbWVkaWEubW9kZWwubDEwbiA9IHdpbmRvdy5fd3BNZWRpYU1vZGVsc0wxMG4gfHwge307XG5cbi8vIExpbmsgYW55IHNldHRpbmdzLlxubWVkaWEubW9kZWwuc2V0dGluZ3MgPSBsMTBuLnNldHRpbmdzIHx8IHt9O1xuZGVsZXRlIGwxMG4uc2V0dGluZ3M7XG5cbkF0dGFjaG1lbnQgPSBtZWRpYS5tb2RlbC5BdHRhY2htZW50ID0gcmVxdWlyZSggJy4vbW9kZWxzL2F0dGFjaG1lbnQuanMnICk7XG5BdHRhY2htZW50cyA9IG1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzID0gcmVxdWlyZSggJy4vbW9kZWxzL2F0dGFjaG1lbnRzLmpzJyApO1xuXG5tZWRpYS5tb2RlbC5RdWVyeSA9IHJlcXVpcmUoICcuL21vZGVscy9xdWVyeS5qcycgKTtcbm1lZGlhLm1vZGVsLlBvc3RJbWFnZSA9IHJlcXVpcmUoICcuL21vZGVscy9wb3N0LWltYWdlLmpzJyApO1xubWVkaWEubW9kZWwuU2VsZWN0aW9uID0gcmVxdWlyZSggJy4vbW9kZWxzL3NlbGVjdGlvbi5qcycgKTtcblxuLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFVUSUxJVElFU1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBBIGJhc2ljIGVxdWFsaXR5IGNvbXBhcmF0b3IgZm9yIEJhY2tib25lIG1vZGVscy5cbiAqXG4gKiBVc2VkIHRvIG9yZGVyIG1vZGVscyB3aXRoaW4gYSBjb2xsZWN0aW9uIC0gQHNlZSB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50cy5jb21wYXJhdG9yKCkuXG4gKlxuICogQHBhcmFtICB7bWl4ZWR9ICBhICBUaGUgcHJpbWFyeSBwYXJhbWV0ZXIgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSAge21peGVkfSAgYiAgVGhlIHByaW1hcnkgcGFyYW1ldGVyIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjIFRoZSBmYWxsYmFjayBwYXJhbWV0ZXIgdG8gY29tcGFyZSwgYSdzIGNpZC5cbiAqIEBwYXJhbSAge3N0cmluZ30gYmMgVGhlIGZhbGxiYWNrIHBhcmFtZXRlciB0byBjb21wYXJlLCBiJ3MgY2lkLlxuICogQHJldHVybiB7bnVtYmVyfSAgICAtMTogYSBzaG91bGQgY29tZSBiZWZvcmUgYi5cbiAqICAgICAgICAgICAgICAgICAgICAgIDA6IGEgYW5kIGIgYXJlIG9mIHRoZSBzYW1lIHJhbmsuXG4gKiAgICAgICAgICAgICAgICAgICAgICAxOiBiIHNob3VsZCBjb21lIGJlZm9yZSBhLlxuICovXG5tZWRpYS5jb21wYXJlID0gZnVuY3Rpb24oIGEsIGIsIGFjLCBiYyApIHtcblx0aWYgKCBfLmlzRXF1YWwoIGEsIGIgKSApIHtcblx0XHRyZXR1cm4gYWMgPT09IGJjID8gMCA6IChhYyA+IGJjID8gLTEgOiAxKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYSA+IGIgPyAtMSA6IDE7XG5cdH1cbn07XG5cbl8uZXh0ZW5kKCBtZWRpYSwge1xuXHQvKipcblx0ICogbWVkaWEudGVtcGxhdGUoIGlkIClcblx0ICpcblx0ICogRmV0Y2ggYSBKYXZhU2NyaXB0IHRlbXBsYXRlIGZvciBhbiBpZCwgYW5kIHJldHVybiBhIHRlbXBsYXRpbmcgZnVuY3Rpb24gZm9yIGl0LlxuXHQgKlxuXHQgKiBTZWUgd3AudGVtcGxhdGUoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLnRlbXBsYXRlIGFzIHRlbXBsYXRlXG5cdCAqL1xuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUsXG5cblx0LyoqXG5cdCAqIG1lZGlhLnBvc3QoIFthY3Rpb25dLCBbZGF0YV0gKVxuXHQgKlxuXHQgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBXb3JkUHJlc3MuXG5cdCAqIFNlZSB3cC5hamF4LnBvc3QoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLmFqYXgucG9zdCBhcyBwb3N0XG5cdCAqL1xuXHRwb3N0OiB3cC5hamF4LnBvc3QsXG5cblx0LyoqXG5cdCAqIG1lZGlhLmFqYXgoIFthY3Rpb25dLCBbb3B0aW9uc10gKVxuXHQgKlxuXHQgKiBTZW5kcyBhbiBYSFIgcmVxdWVzdCB0byBXb3JkUHJlc3MuXG5cdCAqIFNlZSB3cC5hamF4LnNlbmQoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLmFqYXguc2VuZCBhcyBhamF4XG5cdCAqL1xuXHRhamF4OiB3cC5hamF4LnNlbmQsXG5cblx0LyoqXG5cdCAqIFNjYWxlcyBhIHNldCBvZiBkaW1lbnNpb25zIHRvIGZpdCB3aXRoaW4gYm91bmRpbmcgZGltZW5zaW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRpbWVuc2lvbnNcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGZpdDogZnVuY3Rpb24oIGRpbWVuc2lvbnMgKSB7XG5cdFx0dmFyIHdpZHRoICAgICA9IGRpbWVuc2lvbnMud2lkdGgsXG5cdFx0XHRoZWlnaHQgICAgPSBkaW1lbnNpb25zLmhlaWdodCxcblx0XHRcdG1heFdpZHRoICA9IGRpbWVuc2lvbnMubWF4V2lkdGgsXG5cdFx0XHRtYXhIZWlnaHQgPSBkaW1lbnNpb25zLm1heEhlaWdodCxcblx0XHRcdGNvbnN0cmFpbnQ7XG5cblx0XHQvLyBDb21wYXJlIHJhdGlvcyBiZXR3ZWVuIHRoZSB0d28gdmFsdWVzIHRvIGRldGVybWluZSB3aGljaFxuXHRcdC8vIG1heCB0byBjb25zdHJhaW4gYnkuIElmIGEgbWF4IHZhbHVlIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlXG5cdFx0Ly8gb3Bwb3NpdGUgc2lkZSBpcyB0aGUgY29uc3RyYWludC5cblx0XHRpZiAoICEgXy5pc1VuZGVmaW5lZCggbWF4V2lkdGggKSAmJiAhIF8uaXNVbmRlZmluZWQoIG1heEhlaWdodCApICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICggd2lkdGggLyBoZWlnaHQgPiBtYXhXaWR0aCAvIG1heEhlaWdodCApID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXHRcdH0gZWxzZSBpZiAoIF8uaXNVbmRlZmluZWQoIG1heEhlaWdodCApICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICd3aWR0aCc7XG5cdFx0fSBlbHNlIGlmICggIF8uaXNVbmRlZmluZWQoIG1heFdpZHRoICkgJiYgaGVpZ2h0ID4gbWF4SGVpZ2h0ICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICdoZWlnaHQnO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RyYWluZWQgc2lkZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4LFxuXHRcdC8vIHRoZW4gc2NhbGUgdGhlIHZhbHVlcy4gT3RoZXJ3aXNlIHJldHVybiB0aGUgb3JpZ2luYWxzOyB0aGV5IGZpdC5cblx0XHRpZiAoICd3aWR0aCcgPT09IGNvbnN0cmFpbnQgJiYgd2lkdGggPiBtYXhXaWR0aCApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogbWF4V2lkdGgsXG5cdFx0XHRcdGhlaWdodDogTWF0aC5yb3VuZCggbWF4V2lkdGggKiBoZWlnaHQgLyB3aWR0aCApXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoICdoZWlnaHQnID09PSBjb25zdHJhaW50ICYmIGhlaWdodCA+IG1heEhlaWdodCApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogTWF0aC5yb3VuZCggbWF4SGVpZ2h0ICogd2lkdGggLyBoZWlnaHQgKSxcblx0XHRcdFx0aGVpZ2h0OiBtYXhIZWlnaHRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogd2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRydW5jYXRlcyBhIHN0cmluZyBieSBpbmplY3RpbmcgYW4gZWxsaXBzaXMgaW50byB0aGUgbWlkZGxlLlxuXHQgKiBVc2VmdWwgZm9yIGZpbGVuYW1lcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuXHQgKiBAcGFyYW0ge051bWJlcn0gW2xlbmd0aD0zMF1cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtyZXBsYWNlbWVudD0maGVsbGlwO11cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHN0cmluZywgdW5sZXNzIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gc3RyaW5nLmxlbmd0aC5cblx0ICovXG5cdHRydW5jYXRlOiBmdW5jdGlvbiggc3RyaW5nLCBsZW5ndGgsIHJlcGxhY2VtZW50ICkge1xuXHRcdGxlbmd0aCA9IGxlbmd0aCB8fCAzMDtcblx0XHRyZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50IHx8ICcmaGVsbGlwOyc7XG5cblx0XHRpZiAoIHN0cmluZy5sZW5ndGggPD0gbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHN0cmluZztcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nLnN1YnN0ciggMCwgbGVuZ3RoIC8gMiApICsgcmVwbGFjZW1lbnQgKyBzdHJpbmcuc3Vic3RyKCAtMSAqIGxlbmd0aCAvIDIgKTtcblx0fVxufSk7XG5cbi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBNT0RFTFNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vKipcbiAqIHdwLm1lZGlhLmF0dGFjaG1lbnRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgQSBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSBhIG1vZGVsLlxuICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9XG4gKi9cbm1lZGlhLmF0dGFjaG1lbnQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdHJldHVybiBBdHRhY2htZW50LmdldCggaWQgKTtcbn07XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIGFsbCBhdHRhY2htZW50cyB0aGF0IGhhdmUgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c31cbiAqL1xuQXR0YWNobWVudHMuYWxsID0gbmV3IEF0dGFjaG1lbnRzKCk7XG5cbi8qKlxuICogd3AubWVkaWEucXVlcnlcbiAqXG4gKiBTaG9ydGhhbmQgZm9yIGNyZWF0aW5nIGEgbmV3IEF0dGFjaG1lbnRzIFF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9XG4gKi9cbm1lZGlhLnF1ZXJ5ID0gZnVuY3Rpb24oIHByb3BzICkge1xuXHRyZXR1cm4gbmV3IEF0dGFjaG1lbnRzKCBudWxsLCB7XG5cdFx0cHJvcHM6IF8uZXh0ZW5kKCBfLmRlZmF1bHRzKCBwcm9wcyB8fCB7fSwgeyBvcmRlcmJ5OiAnZGF0ZScgfSApLCB7IHF1ZXJ5OiB0cnVlIH0gKVxuXHR9KTtcbn07XG5cbi8vIENsZWFuIHVwLiBQcmV2ZW50cyBtb2JpbGUgYnJvd3NlcnMgY2FjaGluZ1xuJCh3aW5kb3cpLm9uKCd1bmxvYWQnLCBmdW5jdGlvbigpe1xuXHR3aW5kb3cud3AgPSBudWxsO1xufSk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICovXG52YXIgJCA9IEJhY2tib25lLiQsXG5cdEF0dGFjaG1lbnQ7XG5cbkF0dGFjaG1lbnQgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe1xuXHQvKipcblx0ICogVHJpZ2dlcmVkIHdoZW4gYXR0YWNobWVudCBkZXRhaWxzIGNoYW5nZVxuXHQgKiBPdmVycmlkZXMgQmFja2JvbmUuTW9kZWwuc3luY1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gbW9kZWxcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdHN5bmM6IGZ1bmN0aW9uKCBtZXRob2QsIG1vZGVsLCBvcHRpb25zICkge1xuXHRcdC8vIElmIHRoZSBhdHRhY2htZW50IGRvZXMgbm90IHlldCBoYXZlIGFuIGBpZGAsIHJldHVybiBhbiBpbnN0YW50bHlcblx0XHQvLyByZWplY3RlZCBwcm9taXNlLiBPdGhlcndpc2UsIGFsbCBvZiBvdXIgcmVxdWVzdHMgd2lsbCBmYWlsLlxuXHRcdGlmICggXy5pc1VuZGVmaW5lZCggdGhpcy5pZCApICkge1xuXHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdH1cblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBgcmVhZGAgcmVxdWVzdCBzbyBBdHRhY2htZW50LmZldGNoKCkgZnVuY3Rpb25zIGNvcnJlY3RseS5cblx0XHRpZiAoICdyZWFkJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0XHRvcHRpb25zLmNvbnRleHQgPSB0aGlzO1xuXHRcdFx0b3B0aW9ucy5kYXRhID0gXy5leHRlbmQoIG9wdGlvbnMuZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRhY3Rpb246ICdnZXQtYXR0YWNobWVudCcsXG5cdFx0XHRcdGlkOiB0aGlzLmlkXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICk7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgYHVwZGF0ZWAgcmVxdWVzdCBzbyBwcm9wZXJ0aWVzIGNhbiBiZSBzYXZlZC5cblx0XHR9IGVsc2UgaWYgKCAndXBkYXRlJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0Ly8gSWYgd2UgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBub25jZSwgZmFpbCBpbW1lZGl0YXRlbHkuXG5cdFx0XHRpZiAoICEgdGhpcy5nZXQoJ25vbmNlcycpIHx8ICEgdGhpcy5nZXQoJ25vbmNlcycpLnVwZGF0ZSApIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0XHRcdG9wdGlvbnMuY29udGV4dCA9IHRoaXM7XG5cblx0XHRcdC8vIFNldCB0aGUgYWN0aW9uIGFuZCBJRC5cblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgJ3NhdmUtYXR0YWNobWVudCcsXG5cdFx0XHRcdGlkOiAgICAgIHRoaXMuaWQsXG5cdFx0XHRcdG5vbmNlOiAgIHRoaXMuZ2V0KCdub25jZXMnKS51cGRhdGUsXG5cdFx0XHRcdHBvc3RfaWQ6IHdwLm1lZGlhLm1vZGVsLnNldHRpbmdzLnBvc3QuaWRcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZWNvcmQgdGhlIHZhbHVlcyBvZiB0aGUgY2hhbmdlZCBhdHRyaWJ1dGVzLlxuXHRcdFx0aWYgKCBtb2RlbC5oYXNDaGFuZ2VkKCkgKSB7XG5cdFx0XHRcdG9wdGlvbnMuZGF0YS5jaGFuZ2VzID0ge307XG5cblx0XHRcdFx0Xy5lYWNoKCBtb2RlbC5jaGFuZ2VkLCBmdW5jdGlvbiggdmFsdWUsIGtleSApIHtcblx0XHRcdFx0XHRvcHRpb25zLmRhdGEuY2hhbmdlc1sga2V5IF0gPSB0aGlzLmdldCgga2V5ICk7XG5cdFx0XHRcdH0sIHRoaXMgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHdwLm1lZGlhLmFqYXgoIG9wdGlvbnMgKTtcblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBgZGVsZXRlYCByZXF1ZXN0IHNvIGF0dGFjaG1lbnRzIGNhbiBiZSByZW1vdmVkLlxuXHRcdC8vIFRoaXMgd2lsbCBwZXJtYW5lbnRseSBkZWxldGUgYW4gYXR0YWNobWVudC5cblx0XHR9IGVsc2UgaWYgKCAnZGVsZXRlJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHRcdGlmICggISBvcHRpb25zLndhaXQgKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0b3B0aW9ucy5jb250ZXh0ID0gdGhpcztcblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgICdkZWxldGUtcG9zdCcsXG5cdFx0XHRcdGlkOiAgICAgICB0aGlzLmlkLFxuXHRcdFx0XHRfd3Bub25jZTogdGhpcy5nZXQoJ25vbmNlcycpWydkZWxldGUnXVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblx0XHRcdH0pLmZhaWwoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBgQmFja2JvbmUuc3luYygpYC5cblx0XHR9IGVsc2Uge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsIGBzeW5jYCBkaXJlY3RseSBvbiBCYWNrYm9uZS5Nb2RlbFxuXHRcdFx0ICovXG5cdFx0XHRyZXR1cm4gQmFja2JvbmUuTW9kZWwucHJvdG90eXBlLnN5bmMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENvbnZlcnQgZGF0ZSBzdHJpbmdzIGludG8gRGF0ZSBvYmplY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcmVzcCBUaGUgcmF3IHJlc3BvbnNlIG9iamVjdCwgdHlwaWNhbGx5IHJldHVybmVkIGJ5IGZldGNoKClcblx0ICogQHJldHVybnMge09iamVjdH0gVGhlIG1vZGlmaWVkIHJlc3BvbnNlIG9iamVjdCwgd2hpY2ggaXMgdGhlIGF0dHJpYnV0ZXMgaGFzaFxuXHQgKiAgICB0byBiZSBzZXQgb24gdGhlIG1vZGVsLlxuXHQgKi9cblx0cGFyc2U6IGZ1bmN0aW9uKCByZXNwICkge1xuXHRcdGlmICggISByZXNwICkge1xuXHRcdFx0cmV0dXJuIHJlc3A7XG5cdFx0fVxuXG5cdFx0cmVzcC5kYXRlID0gbmV3IERhdGUoIHJlc3AuZGF0ZSApO1xuXHRcdHJlc3AubW9kaWZpZWQgPSBuZXcgRGF0ZSggcmVzcC5tb2RpZmllZCApO1xuXHRcdHJldHVybiByZXNwO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIHByb3BlcnRpZXMgdG8gYmUgc2F2ZWQuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFN5bmMgb3B0aW9ucy4gZS5nLiBwYXRjaCwgd2FpdCwgc3VjY2VzcywgZXJyb3IuXG5cdCAqXG5cdCAqIEB0aGlzIEJhY2tib25lLk1vZGVsXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0c2F2ZUNvbXBhdDogZnVuY3Rpb24oIGRhdGEsIG9wdGlvbnMgKSB7XG5cdFx0dmFyIG1vZGVsID0gdGhpcztcblxuXHRcdC8vIElmIHdlIGRvIG5vdCBoYXZlIHRoZSBuZWNlc3Nhcnkgbm9uY2UsIGZhaWwgaW1tZWRpdGF0ZWx5LlxuXHRcdGlmICggISB0aGlzLmdldCgnbm9uY2VzJykgfHwgISB0aGlzLmdldCgnbm9uY2VzJykudXBkYXRlICkge1xuXHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB3cC5tZWRpYS5wb3N0KCAnc2F2ZS1hdHRhY2htZW50LWNvbXBhdCcsIF8uZGVmYXVsdHMoe1xuXHRcdFx0aWQ6ICAgICAgdGhpcy5pZCxcblx0XHRcdG5vbmNlOiAgIHRoaXMuZ2V0KCdub25jZXMnKS51cGRhdGUsXG5cdFx0XHRwb3N0X2lkOiB3cC5tZWRpYS5tb2RlbC5zZXR0aW5ncy5wb3N0LmlkXG5cdFx0fSwgZGF0YSApICkuZG9uZSggZnVuY3Rpb24oIHJlc3AsIHN0YXR1cywgeGhyICkge1xuXHRcdFx0bW9kZWwuc2V0KCBtb2RlbC5wYXJzZSggcmVzcCwgeGhyICksIG9wdGlvbnMgKTtcblx0XHR9KTtcblx0fVxufSwge1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IG1vZGVsIG9uIHRoZSBzdGF0aWMgJ2FsbCcgYXR0YWNobWVudHMgY29sbGVjdGlvbiBhbmQgcmV0dXJuIGl0LlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH1cblx0ICovXG5cdGNyZWF0ZTogZnVuY3Rpb24oIGF0dHJzICkge1xuXHRcdHZhciBBdHRhY2htZW50cyA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzO1xuXHRcdHJldHVybiBBdHRhY2htZW50cy5hbGwucHVzaCggYXR0cnMgKTtcblx0fSxcblx0LyoqXG5cdCAqIENyZWF0ZSBhIG5ldyBtb2RlbCBvbiB0aGUgc3RhdGljICdhbGwnIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gYW5kIHJldHVybiBpdC5cblx0ICpcblx0ICogSWYgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhlIGlkLFxuXHQgKiBpdCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXR0YWNobWVudC5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSBhIG1vZGVsLlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfHVuZGVmaW5lZH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH1cblx0ICovXG5cdGdldDogXy5tZW1vaXplKCBmdW5jdGlvbiggaWQsIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIEF0dGFjaG1lbnRzID0gd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHM7XG5cdFx0cmV0dXJuIEF0dGFjaG1lbnRzLmFsbC5wdXNoKCBhdHRhY2htZW50IHx8IHsgaWQ6IGlkIH0gKTtcblx0fSlcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG4gKlxuICogQSBjb2xsZWN0aW9uIG9mIGF0dGFjaG1lbnRzLlxuICpcbiAqIFRoaXMgY29sbGVjdGlvbiBoYXMgbm8gcGVyc2lzdGVuY2Ugd2l0aCB0aGUgc2VydmVyIHdpdGhvdXQgc3VwcGx5aW5nXG4gKiAnb3B0aW9ucy5wcm9wcy5xdWVyeSA9IHRydWUnLCB3aGljaCB3aWxsIG1pcnJvciB0aGUgY29sbGVjdGlvblxuICogdG8gYW4gQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbiAtIEBzZWUgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMubWlycm9yKCkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuQ29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSB7YXJyYXl9ICBbbW9kZWxzXSAgICAgICAgICAgICAgICBNb2RlbHMgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAgICAgICAgICAgICAgIE9wdGlvbnMgaGFzaCBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucHJvcHNdICAgICAgICAgT3B0aW9ucyBoYXNoIGZvciB0aGUgaW5pdGlhbCBxdWVyeSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnByb3BzLm9yZGVyXSAgIEluaXRpYWwgb3JkZXIgKEFTQyBvciBERVNDKSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucHJvcHMub3JkZXJieV0gSW5pdGlhbCBhdHRyaWJ1dGUga2V5IHRvIG9yZGVyIHRoZSBjb2xsZWN0aW9uIGJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnByb3BzLnF1ZXJ5XSAgIFdoZXRoZXIgdGhlIGNvbGxlY3Rpb24gaXMgbGlua2VkIHRvIGFuIGF0dGFjaG1lbnRzIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9ic2VydmVdXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZmlsdGVyc11cbiAqXG4gKi9cbnZhciBBdHRhY2htZW50cyA9IEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHtcblx0LyoqXG5cdCAqIEB0eXBlIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fVxuXHQgKi9cblx0bW9kZWw6IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQsXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBbbW9kZWxzPVtdXSBBcnJheSBvZiBtb2RlbHMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgY29sbGVjdGlvbi5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG1vZGVscywgb3B0aW9ucyApIHtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHRoaXMucHJvcHMgICA9IG5ldyBCYWNrYm9uZS5Nb2RlbCgpO1xuXHRcdHRoaXMuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVycyB8fCB7fTtcblxuXHRcdC8vIEJpbmQgZGVmYXVsdCBgY2hhbmdlYCBldmVudHMgdG8gdGhlIGBwcm9wc2AgbW9kZWwuXG5cdFx0dGhpcy5wcm9wcy5vbiggJ2NoYW5nZScsIHRoaXMuX2NoYW5nZUZpbHRlcmVkUHJvcHMsIHRoaXMgKTtcblxuXHRcdHRoaXMucHJvcHMub24oICdjaGFuZ2U6b3JkZXInLCAgIHRoaXMuX2NoYW5nZU9yZGVyLCAgIHRoaXMgKTtcblx0XHR0aGlzLnByb3BzLm9uKCAnY2hhbmdlOm9yZGVyYnknLCB0aGlzLl9jaGFuZ2VPcmRlcmJ5LCB0aGlzICk7XG5cdFx0dGhpcy5wcm9wcy5vbiggJ2NoYW5nZTpxdWVyeScsICAgdGhpcy5fY2hhbmdlUXVlcnksICAgdGhpcyApO1xuXG5cdFx0dGhpcy5wcm9wcy5zZXQoIF8uZGVmYXVsdHMoIG9wdGlvbnMucHJvcHMgfHwge30gKSApO1xuXG5cdFx0aWYgKCBvcHRpb25zLm9ic2VydmUgKSB7XG5cdFx0XHR0aGlzLm9ic2VydmUoIG9wdGlvbnMub2JzZXJ2ZSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNvcnQgdGhlIGNvbGxlY3Rpb24gd2hlbiB0aGUgb3JkZXIgYXR0cmlidXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0X2NoYW5nZU9yZGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuY29tcGFyYXRvciApIHtcblx0XHRcdHRoaXMuc29ydCgpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgZGVmYXVsdCBjb21wYXJhdG9yIG9ubHkgd2hlbiB0aGUgYG9yZGVyYnlgIHByb3BlcnR5IGlzIHNldC5cblx0ICpcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlcmJ5XG5cdCAqL1xuXHRfY2hhbmdlT3JkZXJieTogZnVuY3Rpb24oIG1vZGVsLCBvcmRlcmJ5ICkge1xuXHRcdC8vIElmIGEgZGlmZmVyZW50IGNvbXBhcmF0b3IgaXMgZGVmaW5lZCwgYmFpbC5cblx0XHRpZiAoIHRoaXMuY29tcGFyYXRvciAmJiB0aGlzLmNvbXBhcmF0b3IgIT09IEF0dGFjaG1lbnRzLmNvbXBhcmF0b3IgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvcmRlcmJ5ICYmICdwb3N0X19pbicgIT09IG9yZGVyYnkgKSB7XG5cdFx0XHR0aGlzLmNvbXBhcmF0b3IgPSBBdHRhY2htZW50cy5jb21wYXJhdG9yO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wYXJhdG9yO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHRoZSBgcXVlcnlgIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCBxdWVyeSB0aGUgc2VydmVyIHVzaW5nXG5cdCAqIHRoZSBgcHJvcHNgIHZhbHVlcywgYW5kIHN5bmMgdGhlIHJlc3VsdHMgdG8gdGhpcyBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICpcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICogQHBhcmFtIHtCb29sZWFufSBxdWVyeVxuXHQgKi9cblx0X2NoYW5nZVF1ZXJ5OiBmdW5jdGlvbiggbW9kZWwsIHF1ZXJ5ICkge1xuXHRcdGlmICggcXVlcnkgKSB7XG5cdFx0XHR0aGlzLnByb3BzLm9uKCAnY2hhbmdlJywgdGhpcy5fcmVxdWVyeSwgdGhpcyApO1xuXHRcdFx0dGhpcy5fcmVxdWVyeSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnByb3BzLm9mZiggJ2NoYW5nZScsIHRoaXMuX3JlcXVlcnksIHRoaXMgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICpcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICovXG5cdF9jaGFuZ2VGaWx0ZXJlZFByb3BzOiBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0Ly8gSWYgdGhpcyBpcyBhIHF1ZXJ5LCB1cGRhdGluZyB0aGUgY29sbGVjdGlvbiB3aWxsIGJlIGhhbmRsZWQgYnlcblx0XHQvLyBgdGhpcy5fcmVxdWVyeSgpYC5cblx0XHRpZiAoIHRoaXMucHJvcHMuZ2V0KCdxdWVyeScpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjaGFuZ2VkID0gXy5jaGFpbiggbW9kZWwuY2hhbmdlZCApLm1hcCggZnVuY3Rpb24oIHQsIHByb3AgKSB7XG5cdFx0XHR2YXIgZmlsdGVyID0gQXR0YWNobWVudHMuZmlsdGVyc1sgcHJvcCBdLFxuXHRcdFx0XHR0ZXJtID0gbW9kZWwuZ2V0KCBwcm9wICk7XG5cblx0XHRcdGlmICggISBmaWx0ZXIgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0ZXJtICYmICEgdGhpcy5maWx0ZXJzWyBwcm9wIF0gKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyc1sgcHJvcCBdID0gZmlsdGVyO1xuXHRcdFx0fSBlbHNlIGlmICggISB0ZXJtICYmIHRoaXMuZmlsdGVyc1sgcHJvcCBdID09PSBmaWx0ZXIgKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmZpbHRlcnNbIHByb3AgXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVjb3JkIHRoZSBjaGFuZ2UuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LCB0aGlzICkuYW55KCkudmFsdWUoKTtcblxuXHRcdGlmICggISBjaGFuZ2VkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIG5vIGBBdHRhY2htZW50c2AgbW9kZWwgaXMgcHJvdmlkZWQgdG8gc291cmNlIHRoZSBzZWFyY2hlc1xuXHRcdC8vIGZyb20sIHRoZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIHNvdXJjZSBmcm9tIHRoZSBleGlzdGluZ1xuXHRcdC8vIG1vZGVscy5cblx0XHRpZiAoICEgdGhpcy5fc291cmNlICkge1xuXHRcdFx0dGhpcy5fc291cmNlID0gbmV3IEF0dGFjaG1lbnRzKCB0aGlzLm1vZGVscyApO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzZXQoIHRoaXMuX3NvdXJjZS5maWx0ZXIoIHRoaXMudmFsaWRhdG9yLCB0aGlzICkgKTtcblx0fSxcblxuXHR2YWxpZGF0ZURlc3Ryb3llZDogZmFsc2UsXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGlzIHZhbGlkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0b3I6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdGlmICggISB0aGlzLnZhbGlkYXRlRGVzdHJveWVkICYmIGF0dGFjaG1lbnQuZGVzdHJveWVkICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gXy5hbGwoIHRoaXMuZmlsdGVycywgZnVuY3Rpb24oIGZpbHRlciApIHtcblx0XHRcdHJldHVybiAhISBmaWx0ZXIuY2FsbCggdGhpcywgYXR0YWNobWVudCApO1xuXHRcdH0sIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEFkZCBvciByZW1vdmUgYW4gYXR0YWNobWVudCB0byB0aGUgY29sbGVjdGlvbiBkZXBlbmRpbmcgb24gaXRzIHZhbGlkaXR5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0dmFsaWRhdGU6IGZ1bmN0aW9uKCBhdHRhY2htZW50LCBvcHRpb25zICkge1xuXHRcdHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdG9yKCBhdHRhY2htZW50ICksXG5cdFx0XHRoYXNBdHRhY2htZW50ID0gISEgdGhpcy5nZXQoIGF0dGFjaG1lbnQuY2lkICk7XG5cblx0XHRpZiAoICEgdmFsaWQgJiYgaGFzQXR0YWNobWVudCApIHtcblx0XHRcdHRoaXMucmVtb3ZlKCBhdHRhY2htZW50LCBvcHRpb25zICk7XG5cdFx0fSBlbHNlIGlmICggdmFsaWQgJiYgISBoYXNBdHRhY2htZW50ICkge1xuXHRcdFx0dGhpcy5hZGQoIGF0dGFjaG1lbnQsIG9wdGlvbnMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkIG9yIHJlbW92ZSBhbGwgYXR0YWNobWVudHMgZnJvbSBhbm90aGVyIGNvbGxlY3Rpb24gZGVwZW5kaW5nIG9uIGVhY2ggb25lJ3MgdmFsaWRpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzI3Jlc2V0XG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHZhbGlkYXRlQWxsOiBmdW5jdGlvbiggYXR0YWNobWVudHMsIG9wdGlvbnMgKSB7XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHRfLmVhY2goIGF0dGFjaG1lbnRzLm1vZGVscywgZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCBhdHRhY2htZW50LCB7IHNpbGVudDogdHJ1ZSB9KTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHRpZiAoICEgb3B0aW9ucy5zaWxlbnQgKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdyZXNldCcsIHRoaXMsIG9wdGlvbnMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdGFydCBvYnNlcnZpbmcgYW5vdGhlciBhdHRhY2htZW50cyBjb2xsZWN0aW9uIGNoYW5nZSBldmVudHNcblx0ICogYW5kIHJlcGxpY2F0ZSB0aGVtIG9uIHRoaXMgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gb2JzZXJ2ZS5cblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZy5cblx0ICovXG5cdG9ic2VydmU6IGZ1bmN0aW9uKCBhdHRhY2htZW50cyApIHtcblx0XHR0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzIHx8IFtdO1xuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2goIGF0dGFjaG1lbnRzICk7XG5cblx0XHRhdHRhY2htZW50cy5vbiggJ2FkZCBjaGFuZ2UgcmVtb3ZlJywgdGhpcy5fdmFsaWRhdGVIYW5kbGVyLCB0aGlzICk7XG5cdFx0YXR0YWNobWVudHMub24oICdyZXNldCcsIHRoaXMuX3ZhbGlkYXRlQWxsSGFuZGxlciwgdGhpcyApO1xuXHRcdHRoaXMudmFsaWRhdGVBbGwoIGF0dGFjaG1lbnRzICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdG9wIHJlcGxpY2F0aW5nIGNvbGxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tIGFub3RoZXIgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gc3RvcCBvYnNlcnZpbmcuXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHVub2JzZXJ2ZTogZnVuY3Rpb24oIGF0dGFjaG1lbnRzICkge1xuXHRcdGlmICggYXR0YWNobWVudHMgKSB7XG5cdFx0XHRhdHRhY2htZW50cy5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHRcdHRoaXMub2JzZXJ2ZXJzID0gXy53aXRob3V0KCB0aGlzLm9ic2VydmVycywgYXR0YWNobWVudHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmVhY2goIHRoaXMub2JzZXJ2ZXJzLCBmdW5jdGlvbiggYXR0YWNobWVudHMgKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnRzLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdFx0fSwgdGhpcyApO1xuXHRcdFx0ZGVsZXRlIHRoaXMub2JzZXJ2ZXJzO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gYXR0YWNobWVudHNcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0X3ZhbGlkYXRlSGFuZGxlcjogZnVuY3Rpb24oIGF0dGFjaG1lbnQsIGF0dGFjaG1lbnRzLCBvcHRpb25zICkge1xuXHRcdC8vIElmIHdlJ3JlIG5vdCBtaXJyb3JpbmcgdGhpcyBgYXR0YWNobWVudHNgIGNvbGxlY3Rpb24sXG5cdFx0Ly8gb25seSByZXRhaW4gdGhlIGBzaWxlbnRgIG9wdGlvbi5cblx0XHRvcHRpb25zID0gYXR0YWNobWVudHMgPT09IHRoaXMubWlycm9yaW5nID8gb3B0aW9ucyA6IHtcblx0XHRcdHNpbGVudDogb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0ZSggYXR0YWNobWVudCwgb3B0aW9ucyApO1xuXHR9LFxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdF92YWxpZGF0ZUFsbEhhbmRsZXI6IGZ1bmN0aW9uKCBhdHRhY2htZW50cywgb3B0aW9ucyApIHtcblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0ZUFsbCggYXR0YWNobWVudHMsIG9wdGlvbnMgKTtcblx0fSxcblx0LyoqXG5cdCAqIFN0YXJ0IG1pcnJvcmluZyBhbm90aGVyIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24sIGNsZWFyaW5nIG91dCBhbnkgbW9kZWxzIGFscmVhZHlcblx0ICogaW4gdGhlIGNvbGxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIG1pcnJvci5cblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0bWlycm9yOiBmdW5jdGlvbiggYXR0YWNobWVudHMgKSB7XG5cdFx0aWYgKCB0aGlzLm1pcnJvcmluZyAmJiB0aGlzLm1pcnJvcmluZyA9PT0gYXR0YWNobWVudHMgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLnVubWlycm9yKCk7XG5cdFx0dGhpcy5taXJyb3JpbmcgPSBhdHRhY2htZW50cztcblxuXHRcdC8vIENsZWFyIHRoZSBjb2xsZWN0aW9uIHNpbGVudGx5LiBBIGByZXNldGAgZXZlbnQgd2lsbCBiZSBmaXJlZFxuXHRcdC8vIHdoZW4gYG9ic2VydmUoKWAgY2FsbHMgYHZhbGlkYXRlQWxsKClgLlxuXHRcdHRoaXMucmVzZXQoIFtdLCB7IHNpbGVudDogdHJ1ZSB9ICk7XG5cdFx0dGhpcy5vYnNlcnZlKCBhdHRhY2htZW50cyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdG9wIG1pcnJvcmluZyBhbm90aGVyIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG5cdCAqL1xuXHR1bm1pcnJvcjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHRoaXMubWlycm9yaW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMudW5vYnNlcnZlKCB0aGlzLm1pcnJvcmluZyApO1xuXHRcdGRlbGV0ZSB0aGlzLm1pcnJvcmluZztcblx0fSxcblx0LyoqXG5cdCAqIFJldHJpdmUgbW9yZSBhdHRhY2htZW50cyBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoZSBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBPbmx5IHdvcmtzIGlmIHRoZSBjb2xsZWN0aW9uIGlzIG1pcnJvcmluZyBhIFF1ZXJ5IEF0dGFjaG1lbnRzIGNvbGxlY3Rpb24sXG5cdCAqIGFuZCBmb3J3YXJkcyB0byBpdHMgYG1vcmVgIG1ldGhvZC4gVGhpcyBjb2xsZWN0aW9uIGNsYXNzIGRvZXNuJ3QgaGF2ZVxuXHQgKiBzZXJ2ZXIgcGVyc2lzdGVuY2UgYnkgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG1vcmU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0bWlycm9yaW5nID0gdGhpcy5taXJyb3JpbmcsXG5cdFx0XHRhdHRhY2htZW50cyA9IHRoaXM7XG5cblx0XHRpZiAoICEgbWlycm9yaW5nIHx8ICEgbWlycm9yaW5nLm1vcmUgKSB7XG5cdFx0XHRyZXR1cm4gZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMgKS5wcm9taXNlKCk7XG5cdFx0fVxuXHRcdC8vIElmIHdlJ3JlIG1pcnJvcmluZyBhbm90aGVyIGNvbGxlY3Rpb24sIGZvcndhcmQgYG1vcmVgIHRvXG5cdFx0Ly8gdGhlIG1pcnJvcmVkIGNvbGxlY3Rpb24uIEFjY291bnQgZm9yIGEgcmFjZSBjb25kaXRpb24gYnlcblx0XHQvLyBjaGVja2luZyBpZiB3ZSdyZSBzdGlsbCBtaXJyb3JpbmcgdGhhdCBjb2xsZWN0aW9uIHdoZW5cblx0XHQvLyB0aGUgcmVxdWVzdCByZXNvbHZlcy5cblx0XHRtaXJyb3JpbmcubW9yZSggb3B0aW9ucyApLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCB0aGlzID09PSBhdHRhY2htZW50cy5taXJyb3JpbmcgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuXHR9LFxuXHQvKipcblx0ICogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBhdHRhY2htZW50cyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jJ2QgZnJvbSB0aGUgc2VydmVyXG5cdCAqIHRoYXQgbWF0Y2ggdGhlIGNvbGxlY3Rpb24ncyBxdWVyeS5cblx0ICpcblx0ICogT25seSB3b3JrcyBpZiB0aGUgY29sbGVjdGlvbiBpcyBtaXJyb3JpbmcgYSBRdWVyeSBBdHRhY2htZW50cyBjb2xsZWN0aW9uLFxuXHQgKiBhbmQgZm9yd2FyZHMgdG8gaXRzIGBoYXNNb3JlYCBtZXRob2QuIFRoaXMgY29sbGVjdGlvbiBjbGFzcyBkb2Vzbid0IGhhdmVcblx0ICogc2VydmVyIHBlcnNpc3RlbmNlIGJ5IGl0c2VsZi5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNNb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5taXJyb3JpbmcgPyB0aGlzLm1pcnJvcmluZy5oYXNNb3JlKCkgOiBmYWxzZTtcblx0fSxcblx0LyoqXG5cdCAqIEEgY3VzdG9tIEFKQVgtcmVzcG9uc2UgcGFyc2VyLlxuXHQgKlxuXHQgKiBTZWUgdHJhYyB0aWNrZXQgIzI0NzUzXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSByZXNwIFRoZSByYXcgcmVzcG9uc2UgT2JqZWN0L0FycmF5LlxuXHQgKiBAcGFyYW0ge09iamVjdH0geGhyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGFycmF5IG9mIG1vZGVsIGF0dHJpYnV0ZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb25cblx0ICovXG5cdHBhcnNlOiBmdW5jdGlvbiggcmVzcCwgeGhyICkge1xuXHRcdGlmICggISBfLmlzQXJyYXkoIHJlc3AgKSApIHtcblx0XHRcdHJlc3AgPSBbcmVzcF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF8ubWFwKCByZXNwLCBmdW5jdGlvbiggYXR0cnMgKSB7XG5cdFx0XHR2YXIgaWQsIGF0dGFjaG1lbnQsIG5ld0F0dHJpYnV0ZXM7XG5cblx0XHRcdGlmICggYXR0cnMgaW5zdGFuY2VvZiBCYWNrYm9uZS5Nb2RlbCApIHtcblx0XHRcdFx0aWQgPSBhdHRycy5nZXQoICdpZCcgKTtcblx0XHRcdFx0YXR0cnMgPSBhdHRycy5hdHRyaWJ1dGVzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWQgPSBhdHRycy5pZDtcblx0XHRcdH1cblxuXHRcdFx0YXR0YWNobWVudCA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQuZ2V0KCBpZCApO1xuXHRcdFx0bmV3QXR0cmlidXRlcyA9IGF0dGFjaG1lbnQucGFyc2UoIGF0dHJzLCB4aHIgKTtcblxuXHRcdFx0aWYgKCAhIF8uaXNFcXVhbCggYXR0YWNobWVudC5hdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzICkgKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuc2V0KCBuZXdBdHRyaWJ1dGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhdHRhY2htZW50O1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogSWYgdGhlIGNvbGxlY3Rpb24gaXMgYSBxdWVyeSwgY3JlYXRlIGFuZCBtaXJyb3IgYW4gQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRfcmVxdWVyeTogZnVuY3Rpb24oIHJlZnJlc2ggKSB7XG5cdFx0dmFyIHByb3BzO1xuXHRcdGlmICggdGhpcy5wcm9wcy5nZXQoJ3F1ZXJ5JykgKSB7XG5cdFx0XHRwcm9wcyA9IHRoaXMucHJvcHMudG9KU09OKCk7XG5cdFx0XHRwcm9wcy5jYWNoZSA9ICggdHJ1ZSAhPT0gcmVmcmVzaCApO1xuXHRcdFx0dGhpcy5taXJyb3IoIHdwLm1lZGlhLm1vZGVsLlF1ZXJ5LmdldCggcHJvcHMgKSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHRoaXMgY29sbGVjdGlvbiBpcyBzb3J0ZWQgYnkgYG1lbnVPcmRlcmAsIHJlY2FsY3VsYXRlcyBhbmQgc2F2ZXNcblx0ICogdGhlIG1lbnUgb3JkZXIgdG8gdGhlIGRhdGFiYXNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfFByb21pc2V9XG5cdCAqL1xuXHRzYXZlTWVudU9yZGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICdtZW51T3JkZXInICE9PSB0aGlzLnByb3BzLmdldCgnb3JkZXJieScpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZXMgYW55IHVwbG9hZGluZyBhdHRhY2htZW50cywgdXBkYXRlcyBlYWNoIGF0dGFjaG1lbnQnc1xuXHRcdC8vIG1lbnUgb3JkZXIsIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFuIHsgaWQ6IG1lbnVPcmRlciB9XG5cdFx0Ly8gbWFwcGluZyB0byBwYXNzIHRvIHRoZSByZXF1ZXN0LlxuXHRcdHZhciBhdHRhY2htZW50cyA9IHRoaXMuY2hhaW4oKS5maWx0ZXIoIGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0cmV0dXJuICEgXy5pc1VuZGVmaW5lZCggYXR0YWNobWVudC5pZCApO1xuXHRcdH0pLm1hcCggZnVuY3Rpb24oIGF0dGFjaG1lbnQsIGluZGV4ICkge1xuXHRcdFx0Ly8gSW5kaWNlcyBzdGFydCBhdCAxLlxuXHRcdFx0aW5kZXggPSBpbmRleCArIDE7XG5cdFx0XHRhdHRhY2htZW50LnNldCggJ21lbnVPcmRlcicsIGluZGV4ICk7XG5cdFx0XHRyZXR1cm4gWyBhdHRhY2htZW50LmlkLCBpbmRleCBdO1xuXHRcdH0pLm9iamVjdCgpLnZhbHVlKCk7XG5cblx0XHRpZiAoIF8uaXNFbXB0eSggYXR0YWNobWVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm4gd3AubWVkaWEucG9zdCggJ3NhdmUtYXR0YWNobWVudC1vcmRlcicsIHtcblx0XHRcdG5vbmNlOiAgICAgICB3cC5tZWRpYS5tb2RlbC5zZXR0aW5ncy5wb3N0Lm5vbmNlLFxuXHRcdFx0cG9zdF9pZDogICAgIHdwLm1lZGlhLm1vZGVsLnNldHRpbmdzLnBvc3QuaWQsXG5cdFx0XHRhdHRhY2htZW50czogYXR0YWNobWVudHNcblx0XHR9KTtcblx0fVxufSwge1xuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBhdHRhY2htZW50IG1vZGVscyBpbiBhbiBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBVc2VkIGFzIHRoZSBkZWZhdWx0IGNvbXBhcmF0b3IgZm9yIGluc3RhbmNlcyBvZiB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHQgKiBhbmQgaXRzIHN1YmNsYXNzZXMuIEBzZWUgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMuX2NoYW5nZU9yZGVyYnkoKS5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBhXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IGJcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge051bWJlcn0gLTEgaWYgdGhlIGZpcnN0IG1vZGVsIHNob3VsZCBjb21lIGJlZm9yZSB0aGUgc2Vjb25kLFxuXHQgKiAgICAwIGlmIHRoZXkgYXJlIG9mIHRoZSBzYW1lIHJhbmsgYW5kXG5cdCAqICAgIDEgaWYgdGhlIGZpcnN0IG1vZGVsIHNob3VsZCBjb21lIGFmdGVyLlxuXHQgKi9cblx0Y29tcGFyYXRvcjogZnVuY3Rpb24oIGEsIGIsIG9wdGlvbnMgKSB7XG5cdFx0dmFyIGtleSAgID0gdGhpcy5wcm9wcy5nZXQoJ29yZGVyYnknKSxcblx0XHRcdG9yZGVyID0gdGhpcy5wcm9wcy5nZXQoJ29yZGVyJykgfHwgJ0RFU0MnLFxuXHRcdFx0YWMgICAgPSBhLmNpZCxcblx0XHRcdGJjICAgID0gYi5jaWQ7XG5cblx0XHRhID0gYS5nZXQoIGtleSApO1xuXHRcdGIgPSBiLmdldCgga2V5ICk7XG5cblx0XHRpZiAoICdkYXRlJyA9PT0ga2V5IHx8ICdtb2RpZmllZCcgPT09IGtleSApIHtcblx0XHRcdGEgPSBhIHx8IG5ldyBEYXRlKCk7XG5cdFx0XHRiID0gYiB8fCBuZXcgRGF0ZSgpO1xuXHRcdH1cblxuXHRcdC8vIElmIGBvcHRpb25zLnRpZXNgIGlzIHNldCwgZG9uJ3QgZW5mb3JjZSB0aGUgYGNpZGAgdGllYnJlYWtlci5cblx0XHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy50aWVzICkge1xuXHRcdFx0YWMgPSBiYyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICggJ0RFU0MnID09PSBvcmRlciApID8gd3AubWVkaWEuY29tcGFyZSggYSwgYiwgYWMsIGJjICkgOiB3cC5tZWRpYS5jb21wYXJlKCBiLCBhLCBiYywgYWMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBuYW1lc3BhY2Vcblx0ICovXG5cdGZpbHRlcnM6IHtcblx0XHQvKipcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogTm90ZSB0aGF0IHRoaXMgY2xpZW50LXNpZGUgc2VhcmNoaW5nIGlzICpub3QqIGVxdWl2YWxlbnRcblx0XHQgKiB0byBvdXIgc2VydmVyLXNpZGUgc2VhcmNoaW5nLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdFx0ICpcblx0XHQgKiBAdGhpcyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdFx0ICovXG5cdFx0c2VhcmNoOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggISB0aGlzLnByb3BzLmdldCgnc2VhcmNoJykgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gXy5hbnkoWyd0aXRsZScsJ2ZpbGVuYW1lJywnZGVzY3JpcHRpb24nLCdjYXB0aW9uJywnbmFtZSddLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBhdHRhY2htZW50LmdldCgga2V5ICk7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiAtMSAhPT0gdmFsdWUuc2VhcmNoKCB0aGlzLnByb3BzLmdldCgnc2VhcmNoJykgKTtcblx0XHRcdH0sIHRoaXMgKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0XHQgKlxuXHRcdCAqIEB0aGlzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHR0eXBlOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy5wcm9wcy5nZXQoJ3R5cGUnKSwgYXR0cyA9IGF0dGFjaG1lbnQudG9KU09OKCksIG1pbWUsIGZvdW5kO1xuXG5cdFx0XHRpZiAoICEgdHlwZSB8fCAoIF8uaXNBcnJheSggdHlwZSApICYmICEgdHlwZS5sZW5ndGggKSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdG1pbWUgPSBhdHRzLm1pbWUgfHwgKCBhdHRzLmZpbGUgJiYgYXR0cy5maWxlLnR5cGUgKSB8fCAnJztcblxuXHRcdFx0aWYgKCBfLmlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRcdFx0Zm91bmQgPSBfLmZpbmQoIHR5cGUsIGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xICE9PSBtaW1lLmluZGV4T2YoIHQgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm91bmQgPSAtMSAhPT0gbWltZS5pbmRleE9mKCB0eXBlICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0XHQgKlxuXHRcdCAqIEB0aGlzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHR1cGxvYWRlZFRvOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciB1cGxvYWRlZFRvID0gdGhpcy5wcm9wcy5nZXQoJ3VwbG9hZGVkVG8nKTtcblx0XHRcdGlmICggXy5pc1VuZGVmaW5lZCggdXBsb2FkZWRUbyApICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVwbG9hZGVkVG8gPT09IGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRlZFRvJyk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdFx0ICpcblx0XHQgKiBAdGhpcyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdFx0ICovXG5cdFx0c3RhdHVzOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciBzdGF0dXMgPSB0aGlzLnByb3BzLmdldCgnc3RhdHVzJyk7XG5cdFx0XHRpZiAoIF8uaXNVbmRlZmluZWQoIHN0YXR1cyApICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHN0YXR1cyA9PT0gYXR0YWNobWVudC5nZXQoJ3N0YXR1cycpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXR0YWNobWVudHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLlBvc3RJbWFnZVxuICpcbiAqIEFuIGluc3RhbmNlIG9mIGFuIGltYWdlIHRoYXQncyBiZWVuIGVtYmVkZGVkIGludG8gYSBwb3N0LlxuICpcbiAqIFVzZWQgaW4gdGhlIGVtYmVkZGVkIGltYWdlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBtb2RhbCAtIEBzZWUgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLkltYWdlRGV0YWlscy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7aW50fSBbYXR0cmlidXRlc10gICAgICAgICAgICAgICBJbml0aWFsIG1vZGVsIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge2ludH0gW2F0dHJpYnV0ZXMuYXR0YWNobWVudF9pZF0gSUQgb2YgdGhlIGF0dGFjaG1lbnQuXG4gKiovXG52YXIgUG9zdEltYWdlID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggYXR0cmlidXRlcyApIHtcblx0XHR2YXIgQXR0YWNobWVudCA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gZmFsc2U7XG5cblx0XHRpZiAoIGF0dHJpYnV0ZXMuYXR0YWNobWVudF9pZCApIHtcblx0XHRcdHRoaXMuYXR0YWNobWVudCA9IEF0dGFjaG1lbnQuZ2V0KCBhdHRyaWJ1dGVzLmF0dGFjaG1lbnRfaWQgKTtcblx0XHRcdGlmICggdGhpcy5hdHRhY2htZW50LmdldCggJ3VybCcgKSApIHtcblx0XHRcdFx0dGhpcy5kZmQgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblx0XHRcdFx0dGhpcy5kZmQucmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kZmQgPSB0aGlzLmF0dGFjaG1lbnQuZmV0Y2goKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYmluZEF0dGFjaG1lbnRMaXN0ZW5lcnMoKTtcblx0XHR9XG5cblx0XHQvLyBrZWVwIHVybCBpbiBzeW5jIHdpdGggY2hhbmdlcyB0byB0aGUgdHlwZSBvZiBsaW5rXG5cdFx0dGhpcy5vbiggJ2NoYW5nZTpsaW5rJywgdGhpcy51cGRhdGVMaW5rVXJsLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NoYW5nZTpzaXplJywgdGhpcy51cGRhdGVTaXplLCB0aGlzICk7XG5cblx0XHR0aGlzLnNldExpbmtUeXBlRnJvbVVybCgpO1xuXHRcdHRoaXMuc2V0QXNwZWN0UmF0aW8oKTtcblxuXHRcdHRoaXMuc2V0KCAnb3JpZ2luYWxVcmwnLCBhdHRyaWJ1dGVzLnVybCApO1xuXHR9LFxuXG5cdGJpbmRBdHRhY2htZW50TGlzdGVuZXJzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmF0dGFjaG1lbnQsICdzeW5jJywgdGhpcy5zZXRMaW5rVHlwZUZyb21VcmwgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmF0dGFjaG1lbnQsICdzeW5jJywgdGhpcy5zZXRBc3BlY3RSYXRpbyApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuYXR0YWNobWVudCwgJ2NoYW5nZScsIHRoaXMudXBkYXRlU2l6ZSApO1xuXHR9LFxuXG5cdGNoYW5nZUF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBhdHRhY2htZW50LCBwcm9wcyApIHtcblx0XHR0aGlzLnN0b3BMaXN0ZW5pbmcoIHRoaXMuYXR0YWNobWVudCApO1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5iaW5kQXR0YWNobWVudExpc3RlbmVycygpO1xuXG5cdFx0dGhpcy5zZXQoICdhdHRhY2htZW50X2lkJywgdGhpcy5hdHRhY2htZW50LmdldCggJ2lkJyApICk7XG5cdFx0dGhpcy5zZXQoICdjYXB0aW9uJywgdGhpcy5hdHRhY2htZW50LmdldCggJ2NhcHRpb24nICkgKTtcblx0XHR0aGlzLnNldCggJ2FsdCcsIHRoaXMuYXR0YWNobWVudC5nZXQoICdhbHQnICkgKTtcblx0XHR0aGlzLnNldCggJ3NpemUnLCBwcm9wcy5nZXQoICdzaXplJyApICk7XG5cdFx0dGhpcy5zZXQoICdhbGlnbicsIHByb3BzLmdldCggJ2FsaWduJyApICk7XG5cdFx0dGhpcy5zZXQoICdsaW5rJywgcHJvcHMuZ2V0KCAnbGluaycgKSApO1xuXHRcdHRoaXMudXBkYXRlTGlua1VybCgpO1xuXHRcdHRoaXMudXBkYXRlU2l6ZSgpO1xuXHR9LFxuXG5cdHNldExpbmtUeXBlRnJvbVVybDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxpbmtVcmwgPSB0aGlzLmdldCggJ2xpbmtVcmwnICksXG5cdFx0XHR0eXBlO1xuXG5cdFx0aWYgKCAhIGxpbmtVcmwgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpbmsnLCAnbm9uZScgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBkZWZhdWx0IHRvIGN1c3RvbSBpZiB0aGVyZSBpcyBhIGxpbmtVcmxcblx0XHR0eXBlID0gJ2N1c3RvbSc7XG5cblx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggdGhpcy5hdHRhY2htZW50LmdldCggJ3VybCcgKSA9PT0gbGlua1VybCApIHtcblx0XHRcdFx0dHlwZSA9ICdmaWxlJztcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuYXR0YWNobWVudC5nZXQoICdsaW5rJyApID09PSBsaW5rVXJsICkge1xuXHRcdFx0XHR0eXBlID0gJ3Bvc3QnO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIHRoaXMuZ2V0KCAndXJsJyApID09PSBsaW5rVXJsICkge1xuXHRcdFx0XHR0eXBlID0gJ2ZpbGUnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAnbGluaycsIHR5cGUgKTtcblx0fSxcblxuXHR1cGRhdGVMaW5rVXJsOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGluayA9IHRoaXMuZ2V0KCAnbGluaycgKSxcblx0XHRcdHVybDtcblxuXHRcdHN3aXRjaCggbGluayApIHtcblx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCApIHtcblx0XHRcdFx0XHR1cmwgPSB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAndXJsJyApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVybCA9IHRoaXMuZ2V0KCAndXJsJyApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0KCAnbGlua1VybCcsIHVybCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3Bvc3QnOlxuXHRcdFx0XHR0aGlzLnNldCggJ2xpbmtVcmwnLCB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAnbGluaycgKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHR0aGlzLnNldCggJ2xpbmtVcmwnLCAnJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlU2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNpemU7XG5cblx0XHRpZiAoICEgdGhpcy5hdHRhY2htZW50ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5nZXQoICdzaXplJyApID09PSAnY3VzdG9tJyApIHtcblx0XHRcdHRoaXMuc2V0KCAnd2lkdGgnLCB0aGlzLmdldCggJ2N1c3RvbVdpZHRoJyApICk7XG5cdFx0XHR0aGlzLnNldCggJ2hlaWdodCcsIHRoaXMuZ2V0KCAnY3VzdG9tSGVpZ2h0JyApICk7XG5cdFx0XHR0aGlzLnNldCggJ3VybCcsIHRoaXMuZ2V0KCAnb3JpZ2luYWxVcmwnICkgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzaXplID0gdGhpcy5hdHRhY2htZW50LmdldCggJ3NpemVzJyApWyB0aGlzLmdldCggJ3NpemUnICkgXTtcblxuXHRcdGlmICggISBzaXplICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAndXJsJywgc2l6ZS51cmwgKTtcblx0XHR0aGlzLnNldCggJ3dpZHRoJywgc2l6ZS53aWR0aCApO1xuXHRcdHRoaXMuc2V0KCAnaGVpZ2h0Jywgc2l6ZS5oZWlnaHQgKTtcblx0fSxcblxuXHRzZXRBc3BlY3RSYXRpbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZ1bGw7XG5cblx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCAmJiB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAnc2l6ZXMnICkgKSB7XG5cdFx0XHRmdWxsID0gdGhpcy5hdHRhY2htZW50LmdldCggJ3NpemVzJyApLmZ1bGw7XG5cblx0XHRcdGlmICggZnVsbCApIHtcblx0XHRcdFx0dGhpcy5zZXQoICdhc3BlY3RSYXRpbycsIGZ1bGwud2lkdGggLyBmdWxsLmhlaWdodCApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXQoICdhc3BlY3RSYXRpbycsIHRoaXMuZ2V0KCAnY3VzdG9tV2lkdGgnICkgLyB0aGlzLmdldCggJ2N1c3RvbUhlaWdodCcgKSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb3N0SW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLlF1ZXJ5XG4gKlxuICogQSBjb2xsZWN0aW9uIG9mIGF0dGFjaG1lbnRzIHRoYXQgbWF0Y2ggdGhlIHN1cHBsaWVkIHF1ZXJ5IGFyZ3VtZW50cy5cbiAqXG4gKiBOb3RlOiBEbyBOT1QgY2hhbmdlIHRoaXMuYXJncyBhZnRlciB0aGUgcXVlcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gKiAgICAgICBUaGluZ3Mgd2lsbCBicmVhay5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuICogQGF1Z21lbnRzIEJhY2tib25lLkNvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSAgW21vZGVsc10gICAgICAgICAgICAgICAgICAgICAgTW9kZWxzIHRvIGluaXRpYWxpemUgd2l0aCB0aGUgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGhhc2guXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuYXJnc10gICAgICAgICAgICAgICAgQXR0YWNobWVudHMgcXVlcnkgYXJndW1lbnRzLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmFyZ3MucG9zdHNfcGVyX3BhZ2VdXG4gKi9cbnZhciBBdHRhY2htZW50cyA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzLFxuXHRRdWVyeTtcblxuUXVlcnkgPSBBdHRhY2htZW50cy5leHRlbmQoe1xuXHQvKipcblx0ICogQGdsb2JhbCB3cC5VcGxvYWRlclxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fSAgW21vZGVscz1bXV0gIEFycmF5IG9mIGluaXRpYWwgbW9kZWxzIHRvIHBvcHVsYXRlIHRoZSBjb2xsZWN0aW9uLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggbW9kZWxzLCBvcHRpb25zICkge1xuXHRcdHZhciBhbGxvd2VkO1xuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0QXR0YWNobWVudHMucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy5hcmdzICAgICA9IG9wdGlvbnMuYXJncztcblx0XHR0aGlzLl9oYXNNb3JlID0gdHJ1ZTtcblx0XHR0aGlzLmNyZWF0ZWQgID0gbmV3IERhdGUoKTtcblxuXHRcdHRoaXMuZmlsdGVycy5vcmRlciA9IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0dmFyIG9yZGVyYnkgPSB0aGlzLnByb3BzLmdldCgnb3JkZXJieScpLFxuXHRcdFx0XHRvcmRlciA9IHRoaXMucHJvcHMuZ2V0KCdvcmRlcicpO1xuXG5cdFx0XHRpZiAoICEgdGhpcy5jb21wYXJhdG9yICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Ugd2FudCBhbnkgaXRlbXMgdGhhdCBjYW4gYmUgcGxhY2VkIGJlZm9yZSB0aGUgbGFzdFxuXHRcdFx0Ly8gaXRlbSBpbiB0aGUgc2V0LiBJZiB3ZSBhZGQgYW55IGl0ZW1zIGFmdGVyIHRoZSBsYXN0XG5cdFx0XHQvLyBpdGVtLCB0aGVuIHdlIGNhbid0IGd1YXJhbnRlZSB0aGUgc2V0IGlzIGNvbXBsZXRlLlxuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIDEgIT09IHRoaXMuY29tcGFyYXRvciggYXR0YWNobWVudCwgdGhpcy5sYXN0KCksIHsgdGllczogdHJ1ZSB9KTtcblxuXHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBpdGVtcyB5ZXQgYW5kXG5cdFx0XHQvLyB3ZSdyZSBzb3J0aW5nIGZvciByZWNlbnQgaXRlbXMuIEluIHRoYXQgY2FzZSwgd2Ugd2FudFxuXHRcdFx0Ly8gY2hhbmdlcyB0aGF0IG9jY3VycmVkIGFmdGVyIHdlIGNyZWF0ZWQgdGhlIHF1ZXJ5LlxuXHRcdFx0fSBlbHNlIGlmICggJ0RFU0MnID09PSBvcmRlciAmJiAoICdkYXRlJyA9PT0gb3JkZXJieSB8fCAnbW9kaWZpZWQnID09PSBvcmRlcmJ5ICkgKSB7XG5cdFx0XHRcdHJldHVybiBhdHRhY2htZW50LmdldCggb3JkZXJieSApID49IHRoaXMuY3JlYXRlZDtcblxuXHRcdFx0Ly8gSWYgd2UncmUgc29ydGluZyBieSBtZW51IG9yZGVyIGFuZCB3ZSBoYXZlIG5vIGl0ZW1zLFxuXHRcdFx0Ly8gYWNjZXB0IGFueSBpdGVtcyB0aGF0IGhhdmUgdGhlIGRlZmF1bHQgbWVudSBvcmRlciAoMCkuXG5cdFx0XHR9IGVsc2UgaWYgKCAnQVNDJyA9PT0gb3JkZXIgJiYgJ21lbnVPcmRlcicgPT09IG9yZGVyYnkgKSB7XG5cdFx0XHRcdHJldHVybiBhdHRhY2htZW50LmdldCggb3JkZXJieSApID09PSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIHdlIGRvbid0IHdhbnQgYW55IGl0ZW1zIHlldC5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0Ly8gT2JzZXJ2ZSB0aGUgY2VudHJhbCBgd3AuVXBsb2FkZXIucXVldWVgIGNvbGxlY3Rpb24gdG8gd2F0Y2ggZm9yXG5cdFx0Ly8gbmV3IG1hdGNoZXMgZm9yIHRoZSBxdWVyeS5cblx0XHQvL1xuXHRcdC8vIE9ubHkgb2JzZXJ2ZSB3aGVuIGEgbGltaXRlZCBudW1iZXIgb2YgcXVlcnkgYXJncyBhcmUgc2V0LiBUaGVyZVxuXHRcdC8vIGFyZSBubyBmaWx0ZXJzIGZvciBvdGhlciBwcm9wZXJ0aWVzLCBzbyBvYnNlcnZpbmcgd2lsbCByZXN1bHQgaW5cblx0XHQvLyBmYWxzZSBwb3NpdGl2ZXMgaW4gdGhvc2UgcXVlcmllcy5cblx0XHRhbGxvd2VkID0gWyAncycsICdvcmRlcicsICdvcmRlcmJ5JywgJ3Bvc3RzX3Blcl9wYWdlJywgJ3Bvc3RfbWltZV90eXBlJywgJ3Bvc3RfcGFyZW50JyBdO1xuXHRcdGlmICggd3AuVXBsb2FkZXIgJiYgXyggdGhpcy5hcmdzICkuY2hhaW4oKS5rZXlzKCkuZGlmZmVyZW5jZSggYWxsb3dlZCApLmlzRW1wdHkoKS52YWx1ZSgpICkge1xuXHRcdFx0dGhpcy5vYnNlcnZlKCB3cC5VcGxvYWRlci5xdWV1ZSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgYXR0YWNobWVudHMgdGhhdCBoYXZlbid0IGJlZW4gc3luYydkIGZyb20gdGhlIHNlcnZlclxuXHQgKiB0aGF0IG1hdGNoIHRoZSBjb2xsZWN0aW9uJ3MgcXVlcnkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzTW9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hhc01vcmU7XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaCBtb3JlIGF0dGFjaG1lbnRzIGZyb20gdGhlIHNlcnZlciBmb3IgdGhlIGNvbGxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSAgIHtvYmplY3R9ICBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRtb3JlOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgcXVlcnkgPSB0aGlzO1xuXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlcXVlc3QgcGVuZGluZywgcmV0dXJuIGVhcmx5IHdpdGggdGhlIERlZmVycmVkIG9iamVjdC5cblx0XHRpZiAoIHRoaXMuX21vcmUgJiYgJ3BlbmRpbmcnID09PSB0aGlzLl9tb3JlLnN0YXRlKCkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fbW9yZTtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5oYXNNb3JlKCkgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCkucmVzb2x2ZVdpdGgoIHRoaXMgKS5wcm9taXNlKCk7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0b3B0aW9ucy5yZW1vdmUgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl9tb3JlID0gdGhpcy5mZXRjaCggb3B0aW9ucyApLmRvbmUoIGZ1bmN0aW9uKCByZXNwICkge1xuXHRcdFx0aWYgKCBfLmlzRW1wdHkoIHJlc3AgKSB8fCAtMSA9PT0gdGhpcy5hcmdzLnBvc3RzX3Blcl9wYWdlIHx8IHJlc3AubGVuZ3RoIDwgdGhpcy5hcmdzLnBvc3RzX3Blcl9wYWdlICkge1xuXHRcdFx0XHRxdWVyeS5faGFzTW9yZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogT3ZlcnJpZGVzIEJhY2tib25lLkNvbGxlY3Rpb24uc3luY1xuXHQgKiBPdmVycmlkZXMgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMuc3luY1xuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRzeW5jOiBmdW5jdGlvbiggbWV0aG9kLCBtb2RlbCwgb3B0aW9ucyApIHtcblx0XHR2YXIgYXJncywgZmFsbGJhY2s7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgcmVhZCBtZXRob2Qgc28gQXR0YWNobWVudC5mZXRjaCgpIGZ1bmN0aW9ucyBjb3JyZWN0bHkuXG5cdFx0aWYgKCAncmVhZCcgPT09IG1ldGhvZCApIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRcdFx0b3B0aW9ucy5jb250ZXh0ID0gdGhpcztcblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgJ3F1ZXJ5LWF0dGFjaG1lbnRzJyxcblx0XHRcdFx0cG9zdF9pZDogd3AubWVkaWEubW9kZWwuc2V0dGluZ3MucG9zdC5pZFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENsb25lIHRoZSBhcmdzIHNvIG1hbmlwdWxhdGlvbiBpcyBub24tZGVzdHJ1Y3RpdmUuXG5cdFx0XHRhcmdzID0gXy5jbG9uZSggdGhpcy5hcmdzICk7XG5cblx0XHRcdC8vIERldGVybWluZSB3aGljaCBwYWdlIHRvIHF1ZXJ5LlxuXHRcdFx0aWYgKCAtMSAhPT0gYXJncy5wb3N0c19wZXJfcGFnZSApIHtcblx0XHRcdFx0YXJncy5wYWdlZCA9IE1hdGgucm91bmQoIHRoaXMubGVuZ3RoIC8gYXJncy5wb3N0c19wZXJfcGFnZSApICsgMTtcblx0XHRcdH1cblxuXHRcdFx0b3B0aW9ucy5kYXRhLnF1ZXJ5ID0gYXJncztcblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICk7XG5cblx0XHQvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBCYWNrYm9uZS5zeW5jKClcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzLnN5bmMgb3IgQmFja2JvbmUuc3luY1xuXHRcdFx0ICovXG5cdFx0XHRmYWxsYmFjayA9IEF0dGFjaG1lbnRzLnByb3RvdHlwZS5zeW5jID8gQXR0YWNobWVudHMucHJvdG90eXBlIDogQmFja2JvbmU7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2suc3luYy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9XG59LCB7XG5cdC8qKlxuXHQgKiBAcmVhZG9ubHlcblx0ICovXG5cdGRlZmF1bHRQcm9wczoge1xuXHRcdG9yZGVyYnk6ICdkYXRlJyxcblx0XHRvcmRlcjogICAnREVTQydcblx0fSxcblx0LyoqXG5cdCAqIEByZWFkb25seVxuXHQgKi9cblx0ZGVmYXVsdEFyZ3M6IHtcblx0XHRwb3N0c19wZXJfcGFnZTogNDBcblx0fSxcblx0LyoqXG5cdCAqIEByZWFkb25seVxuXHQgKi9cblx0b3JkZXJieToge1xuXHRcdGFsbG93ZWQ6ICBbICduYW1lJywgJ2F1dGhvcicsICdkYXRlJywgJ3RpdGxlJywgJ21vZGlmaWVkJywgJ3VwbG9hZGVkVG8nLCAnaWQnLCAncG9zdF9faW4nLCAnbWVudU9yZGVyJyBdLFxuXHRcdC8qKlxuXHRcdCAqIEEgbWFwIG9mIEphdmFTY3JpcHQgb3JkZXJieSB2YWx1ZXMgdG8gdGhlaXIgV1BfUXVlcnkgZXF1aXZhbGVudHMuXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0XHR2YWx1ZW1hcDoge1xuXHRcdFx0J2lkJzogICAgICAgICAnSUQnLFxuXHRcdFx0J3VwbG9hZGVkVG8nOiAncGFyZW50Jyxcblx0XHRcdCdtZW51T3JkZXInOiAgJ21lbnVfb3JkZXIgSUQnXG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQSBtYXAgb2YgSmF2YVNjcmlwdCBxdWVyeSBwcm9wZXJ0aWVzIHRvIHRoZWlyIFdQX1F1ZXJ5IGVxdWl2YWxlbnRzLlxuXHQgKlxuXHQgKiBAcmVhZG9ubHlcblx0ICovXG5cdHByb3BtYXA6IHtcblx0XHQnc2VhcmNoJzogICAgJ3MnLFxuXHRcdCd0eXBlJzogICAgICAncG9zdF9taW1lX3R5cGUnLFxuXHRcdCdwZXJQYWdlJzogICAncG9zdHNfcGVyX3BhZ2UnLFxuXHRcdCdtZW51T3JkZXInOiAnbWVudV9vcmRlcicsXG5cdFx0J3VwbG9hZGVkVG8nOiAncG9zdF9wYXJlbnQnLFxuXHRcdCdzdGF0dXMnOiAgICAgJ3Bvc3Rfc3RhdHVzJyxcblx0XHQnaW5jbHVkZSc6ICAgICdwb3N0X19pbicsXG5cdFx0J2V4Y2x1ZGUnOiAgICAncG9zdF9fbm90X2luJ1xuXHR9LFxuXHQvKipcblx0ICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBBdHRhY2htZW50cyBRdWVyeSBjb2xsZWN0aW9uIGdpdmVuIHRoZSBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBDYWNoZXMgcXVlcnkgb2JqZWN0cyBhbmQgcmV1c2VzIHdoZXJlIHBvc3NpYmxlLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZXRob2Rcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5jYWNoZT10cnVlXSAgIFdoZXRoZXIgdG8gdXNlIHRoZSBxdWVyeSBjYWNoZSBvciBub3QuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMub3JkZXJdXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMub3JkZXJieV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5pbmNsdWRlXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLmV4Y2x1ZGVdXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMuc11cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5wb3N0X21pbWVfdHlwZV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5wb3N0c19wZXJfcGFnZV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5tZW51X29yZGVyXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLnBvc3RfcGFyZW50XVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLnBvc3Rfc3RhdHVzXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5RdWVyeX0gQSBuZXcgQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbi5cblx0ICovXG5cdGdldDogKGZ1bmN0aW9uKCl7XG5cdFx0LyoqXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIEFycmF5XG5cdFx0ICovXG5cdFx0dmFyIHF1ZXJpZXMgPSBbXTtcblxuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtRdWVyeX1cblx0XHQgKi9cblx0XHRyZXR1cm4gZnVuY3Rpb24oIHByb3BzLCBvcHRpb25zICkge1xuXHRcdFx0dmFyIGFyZ3MgICAgID0ge30sXG5cdFx0XHRcdG9yZGVyYnkgID0gUXVlcnkub3JkZXJieSxcblx0XHRcdFx0ZGVmYXVsdHMgPSBRdWVyeS5kZWZhdWx0UHJvcHMsXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjYWNoZSAgICA9ICEhIHByb3BzLmNhY2hlIHx8IF8uaXNVbmRlZmluZWQoIHByb3BzLmNhY2hlICk7XG5cblx0XHRcdC8vIFJlbW92ZSB0aGUgYHF1ZXJ5YCBwcm9wZXJ0eS4gVGhpcyBpc24ndCBsaW5rZWQgdG8gYSBxdWVyeSxcblx0XHRcdC8vIHRoaXMgKmlzKiB0aGUgcXVlcnkuXG5cdFx0XHRkZWxldGUgcHJvcHMucXVlcnk7XG5cdFx0XHRkZWxldGUgcHJvcHMuY2FjaGU7XG5cblx0XHRcdC8vIEZpbGwgZGVmYXVsdCBhcmdzLlxuXHRcdFx0Xy5kZWZhdWx0cyggcHJvcHMsIGRlZmF1bHRzICk7XG5cblx0XHRcdC8vIE5vcm1hbGl6ZSB0aGUgb3JkZXIuXG5cdFx0XHRwcm9wcy5vcmRlciA9IHByb3BzLm9yZGVyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRpZiAoICdERVNDJyAhPT0gcHJvcHMub3JkZXIgJiYgJ0FTQycgIT09IHByb3BzLm9yZGVyICkge1xuXHRcdFx0XHRwcm9wcy5vcmRlciA9IGRlZmF1bHRzLm9yZGVyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgb3JkZXJieSB2YWx1ZS5cblx0XHRcdGlmICggISBfLmNvbnRhaW5zKCBvcmRlcmJ5LmFsbG93ZWQsIHByb3BzLm9yZGVyYnkgKSApIHtcblx0XHRcdFx0cHJvcHMub3JkZXJieSA9IGRlZmF1bHRzLm9yZGVyYnk7XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCggWyAnaW5jbHVkZScsICdleGNsdWRlJyBdLCBmdW5jdGlvbiggcHJvcCApIHtcblx0XHRcdFx0aWYgKCBwcm9wc1sgcHJvcCBdICYmICEgXy5pc0FycmF5KCBwcm9wc1sgcHJvcCBdICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIHByb3AgXSA9IFsgcHJvcHNbIHByb3AgXSBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEdlbmVyYXRlIHRoZSBxdWVyeSBgYXJnc2Agb2JqZWN0LlxuXHRcdFx0Ly8gQ29ycmVjdCBhbnkgZGlmZmVyaW5nIHByb3BlcnR5IG5hbWVzLlxuXHRcdFx0Xy5lYWNoKCBwcm9wcywgZnVuY3Rpb24oIHZhbHVlLCBwcm9wICkge1xuXHRcdFx0XHRpZiAoIF8uaXNOdWxsKCB2YWx1ZSApICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFyZ3NbIFF1ZXJ5LnByb3BtYXBbIHByb3AgXSB8fCBwcm9wIF0gPSB2YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGaWxsIGFueSBvdGhlciBkZWZhdWx0IHF1ZXJ5IGFyZ3MuXG5cdFx0XHRfLmRlZmF1bHRzKCBhcmdzLCBRdWVyeS5kZWZhdWx0QXJncyApO1xuXG5cdFx0XHQvLyBgcHJvcHMub3JkZXJieWAgZG9lcyBub3QgYWx3YXlzIG1hcCBkaXJlY3RseSB0byBgYXJncy5vcmRlcmJ5YC5cblx0XHRcdC8vIFN1YnN0aXR1dGUgZXhjZXB0aW9ucyBzcGVjaWZpZWQgaW4gb3JkZXJieS5rZXltYXAuXG5cdFx0XHRhcmdzLm9yZGVyYnkgPSBvcmRlcmJ5LnZhbHVlbWFwWyBwcm9wcy5vcmRlcmJ5IF0gfHwgcHJvcHMub3JkZXJieTtcblxuXHRcdFx0Ly8gU2VhcmNoIHRoZSBxdWVyeSBjYWNoZSBmb3IgYSBtYXRjaGluZyBxdWVyeS5cblx0XHRcdGlmICggY2FjaGUgKSB7XG5cdFx0XHRcdHF1ZXJ5ID0gXy5maW5kKCBxdWVyaWVzLCBmdW5jdGlvbiggcXVlcnkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF8uaXNFcXVhbCggcXVlcnkuYXJncywgYXJncyApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHF1ZXJpZXMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgcXVlcnkgYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuXG5cdFx0XHRpZiAoICEgcXVlcnkgKSB7XG5cdFx0XHRcdHF1ZXJ5ID0gbmV3IFF1ZXJ5KCBbXSwgXy5leHRlbmQoIG9wdGlvbnMgfHwge30sIHtcblx0XHRcdFx0XHRwcm9wczogcHJvcHMsXG5cdFx0XHRcdFx0YXJnczogIGFyZ3Ncblx0XHRcdFx0fSApICk7XG5cdFx0XHRcdHF1ZXJpZXMucHVzaCggcXVlcnkgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXHRcdH07XG5cdH0oKSlcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXJ5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb25cbiAqXG4gKiBBIHNlbGVjdGlvbiBvZiBhdHRhY2htZW50cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuICogQGF1Z21lbnRzIEJhY2tib25lLkNvbGxlY3Rpb25cbiAqL1xudmFyIEF0dGFjaG1lbnRzID0gd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMsXG5cdFNlbGVjdGlvbjtcblxuU2VsZWN0aW9uID0gQXR0YWNobWVudHMuZXh0ZW5kKHtcblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGBzaW5nbGVgIG1vZGVsIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy5cblx0ICogQmluZHMgYHNpbmdsZWAgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29udGV4dCBhcmd1bWVudCB0byBlbnN1cmVcblx0ICogaXQgcmVjZWl2ZXMgbm8gcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gW21vZGVscz1bXV0gQXJyYXkgb2YgbW9kZWxzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGNvbGxlY3Rpb24uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBtb2RlbHMsIG9wdGlvbnMgKSB7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdEF0dGFjaG1lbnRzLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLm11bHRpcGxlID0gb3B0aW9ucyAmJiBvcHRpb25zLm11bHRpcGxlO1xuXG5cdFx0dGhpcy5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCBfLmJpbmQoIHRoaXMuc2luZ2xlLCB0aGlzLCBmYWxzZSApICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIElmIHRoZSB3b3JrZmxvdyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpLXNlbGVjdCwgY2xlYXIgb3V0IHRoZSBzZWxlY3Rpb25cblx0ICogYmVmb3JlIGFkZGluZyBhIG5ldyBhdHRhY2htZW50IHRvIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBtb2RlbHNcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRbXX1cblx0ICovXG5cdGFkZDogZnVuY3Rpb24oIG1vZGVscywgb3B0aW9ucyApIHtcblx0XHRpZiAoICEgdGhpcy5tdWx0aXBsZSApIHtcblx0XHRcdHRoaXMucmVtb3ZlKCB0aGlzLm1vZGVscyApO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdhZGQnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gQXR0YWNobWVudHMucHJvdG90eXBlLmFkZC5jYWxsKCB0aGlzLCBtb2RlbHMsIG9wdGlvbnMgKTtcblx0fSxcblxuXHQvKipcblx0ICogRmlyZWQgd2hlbiB0b2dnbGluZyAoY2xpY2tpbmcgb24pIGFuIGF0dGFjaG1lbnQgaW4gdGhlIG1vZGFsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3VuZGVmaW5lZHxib29sZWFufHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IG1vZGVsXG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24jc2VsZWN0aW9uOnNpbmdsZVxuXHQgKiBAZmlyZXMgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uI3NlbGVjdGlvbjp1bnNpbmdsZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QmFja2JvbmUuTW9kZWx9XG5cdCAqL1xuXHRzaW5nbGU6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHR2YXIgcHJldmlvdXMgPSB0aGlzLl9zaW5nbGU7XG5cblx0XHQvLyBJZiBhIGBtb2RlbGAgaXMgcHJvdmlkZWQsIHVzZSBpdCBhcyB0aGUgc2luZ2xlIG1vZGVsLlxuXHRcdGlmICggbW9kZWwgKSB7XG5cdFx0XHR0aGlzLl9zaW5nbGUgPSBtb2RlbDtcblx0XHR9XG5cdFx0Ly8gSWYgdGhlIHNpbmdsZSBtb2RlbCBpc24ndCBpbiB0aGUgc2VsZWN0aW9uLCByZW1vdmUgaXQuXG5cdFx0aWYgKCB0aGlzLl9zaW5nbGUgJiYgISB0aGlzLmdldCggdGhpcy5fc2luZ2xlLmNpZCApICkge1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3NpbmdsZTtcblx0XHR9XG5cblx0XHR0aGlzLl9zaW5nbGUgPSB0aGlzLl9zaW5nbGUgfHwgdGhpcy5sYXN0KCk7XG5cblx0XHQvLyBJZiBzaW5nbGUgaGFzIGNoYW5nZWQsIGZpcmUgYW4gZXZlbnQuXG5cdFx0aWYgKCB0aGlzLl9zaW5nbGUgIT09IHByZXZpb3VzICkge1xuXHRcdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdFx0cHJldmlvdXMudHJpZ2dlciggJ3NlbGVjdGlvbjp1bnNpbmdsZScsIHByZXZpb3VzLCB0aGlzICk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIG1vZGVsIHdhcyBhbHJlYWR5IHJlbW92ZWQsIHRyaWdnZXIgdGhlIGNvbGxlY3Rpb25cblx0XHRcdFx0Ly8gZXZlbnQgbWFudWFsbHkuXG5cdFx0XHRcdGlmICggISB0aGlzLmdldCggcHJldmlvdXMuY2lkICkgKSB7XG5cdFx0XHRcdFx0dGhpcy50cmlnZ2VyKCAnc2VsZWN0aW9uOnVuc2luZ2xlJywgcHJldmlvdXMsIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCB0aGlzLl9zaW5nbGUgKSB7XG5cdFx0XHRcdHRoaXMuX3NpbmdsZS50cmlnZ2VyKCAnc2VsZWN0aW9uOnNpbmdsZScsIHRoaXMuX3NpbmdsZSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgc2luZ2xlIG1vZGVsLCBvciB0aGUgbGFzdCBtb2RlbCBhcyBhIGZhbGxiYWNrLlxuXHRcdHJldHVybiB0aGlzLl9zaW5nbGU7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdGlvbjtcbiJdfQ==
  • src/wp-includes/js/media-views.js

     
    85348534
    85358535module.exports = View;
    85368536
    8537 },{}]},{},[19]);
     8537},{}]},{},[19])
     8538//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY29sbGVjdGlvbi1hZGQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY29sbGVjdGlvbi1lZGl0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL2Nyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY3VzdG9taXplLWltYWdlLWNyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvZWRpdC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9lbWJlZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9mZWF0dXJlZC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9nYWxsZXJ5LWFkZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9nYWxsZXJ5LWVkaXQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvaW1hZ2UtZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9saWJyYXJ5LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL21lZGlhLWxpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvcmVnaW9uLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL3JlcGxhY2UtaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvc2l0ZS1pY29uLWNyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvc3RhdGUtbWFjaGluZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9zdGF0ZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS91dGlscy9zZWxlY3Rpb24tc3luYy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy5tYW5pZmVzdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWNvbXBhdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC1maWx0ZXJzL2FsbC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvZGF0ZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvdXBsb2FkZWQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50L2RldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9lZGl0LWxpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9lZGl0LXNlbGVjdGlvbi5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50L2xpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudHMvYnJvd3Nlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50cy9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYnV0dG9uLWdyb3VwLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2J1dHRvbi5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9jcm9wcGVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2VkaXQtaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQvaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQvbGluay5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9lbWJlZC91cmwuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZm9jdXMtbWFuYWdlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS9pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL3Bvc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvc2VsZWN0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2lmcmFtZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2xhYmVsLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21lZGlhLWZyYW1lLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21lbnUtaXRlbS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9tZW51LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21vZGFsLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ByaW9yaXR5LWxpc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvcm91dGVyLWl0ZW0uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvcm91dGVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3NlYXJjaC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MvYXR0YWNobWVudC1kaXNwbGF5LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3NldHRpbmdzL2dhbGxlcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MvcGxheWxpc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2lkZWJhci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zaXRlLWljb24tY3JvcHBlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zaXRlLWljb24tcHJldmlldy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zcGlubmVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3Rvb2xiYXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdG9vbGJhci9lbWJlZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy90b29sYmFyL3NlbGVjdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy91cGxvYWRlci9lZGl0b3IuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdXBsb2FkZXIvaW5saW5lLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3VwbG9hZGVyL3N0YXR1cy1lcnJvci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy91cGxvYWRlci9zdGF0dXMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdXBsb2FkZXIvd2luZG93LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ZpZXcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uQWRkXG4gKlxuICogQSBzdGF0ZSBmb3IgYWRkaW5nIGF0dGFjaG1lbnRzIHRvIGEgY29sbGVjdGlvbiAoZS5nLiB2aWRlbyBwbGF5bGlzdCkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmlkPWxpYnJhcnldICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlICAgICAgICAgICAgICAgICAgICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tdWx0aXBsZT1hZGRdICAgICAgICAgICAgV2hldGhlciBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZC4gQHRvZG8gJ2FkZCcgZG9lc24ndCBzZWVtIGRvIGFueXRoaW5nIHNwZWNpYWwsIGFuZCBnZXRzIHVzZWQgYXMgYSBib29sZWFuLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIGJyb3dzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBvbmUgaXMgbm90IHN1cHBsaWVkLCBhIGNvbGxlY3Rpb24gb2YgYXR0YWNobWVudHMgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHdpbGwgYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9ICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmZpbHRlcmFibGU9dXBsb2FkZWRdICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIGZpbHRlcmFibGUsIGFuZCBpZiBzbyB3aGF0IGZpbHRlcnMgc2hvdWxkIGJlIHNob3duLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ2FsbCcsICd1cGxvYWRlZCcsIG9yICd1bmF0dGFjaGVkJy5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm1lbnU9Z2FsbGVyeV0gICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9dXBsb2FkXSAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBjb250ZW50IHJlZ2lvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZGVuIGJ5IHBlcnNpc3RlbnQgdXNlciBzZXR0aW5nIGlmICdjb250ZW50VXNlclNldHRpbmcnIGlzIHRydWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5yb3V0ZXI9YnJvd3NlXSAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgcm91dGVyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRvb2xiYXI9Z2FsbGVyeS1hZGRdICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSB0b29sYmFyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNlYXJjaGFibGU9dHJ1ZV0gICAgICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHNlYXJjaGFibGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zb3J0YWJsZT10cnVlXSAgICAgICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2hvdWxkIGJlIHNvcnRhYmxlLiBEZXBlbmRzIG9uIHRoZSBvcmRlcmJ5IHByb3BlcnR5IGJlaW5nIHNldCB0byBtZW51T3JkZXIgb24gdGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5hdXRvU2VsZWN0PXRydWVdICAgICAgICAgV2hldGhlciBhbiB1cGxvYWRlZCBhdHRhY2htZW50IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50VXNlclNldHRpbmc9dHJ1ZV0gV2hldGhlciB0aGUgY29udGVudCByZWdpb24ncyBtb2RlIHNob3VsZCBiZSBzZXQgYW5kIHBlcnNpc3RlZCBwZXIgdXNlci5cbiAqIEBwYXJhbSB7aW50fSAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnByaW9yaXR5PTEwMF0gICAgICAgICAgICBUaGUgcHJpb3JpdHkgZm9yIHRoZSBzdGF0ZSBsaW5rIGluIHRoZSBtZWRpYSBtZW51LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc3luY1NlbGVjdGlvbj1mYWxzZV0gICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNlbGVjdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZyb20gdGhlIGxhc3Qgc3RhdGUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UgYmVjYXVzZSBmb3IgdGhpcyBzdGF0ZSwgYmVjYXVzZSB0aGUgbGlicmFyeSBvZiB0aGUgRWRpdCBHYWxsZXJ5IHN0YXRlIGlzIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnR5cGUgICAgICAgICAgICAgICAgICAgVGhlIGNvbGxlY3Rpb24ncyBtZWRpYSB0eXBlLiAoZS5nLiAndmlkZW8nKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sbGVjdGlvblR5cGUgICAgICAgICBUaGUgY29sbGVjdGlvbiB0eXBlLiAoZS5nLiAncGxheWxpc3QnKS5cbiAqL1xudmFyIFNlbGVjdGlvbiA9IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbixcblx0TGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0Q29sbGVjdGlvbkFkZDtcblxuQ29sbGVjdGlvbkFkZCA9IExpYnJhcnkuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IF8uZGVmYXVsdHMoIHtcblx0XHQvLyBTZWxlY3Rpb24gZGVmYXVsdHMuIEBzZWUgbWVkaWEubW9kZWwuU2VsZWN0aW9uXG5cdFx0bXVsdGlwbGU6ICAgICAgJ2FkZCcsXG5cdFx0Ly8gQXR0YWNobWVudHMgYnJvd3NlciBkZWZhdWx0cy4gQHNlZSBtZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3NlclxuXHRcdGZpbHRlcmFibGU6ICAgICd1cGxvYWRlZCcsXG5cblx0XHRwcmlvcml0eTogICAgICAxMDAsXG5cdFx0c3luY1NlbGVjdGlvbjogZmFsc2Vcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29sbGVjdGlvblR5cGUgPSB0aGlzLmdldCgnY29sbGVjdGlvblR5cGUnKTtcblxuXHRcdGlmICggJ3ZpZGVvJyA9PT0gdGhpcy5nZXQoICd0eXBlJyApICkge1xuXHRcdFx0Y29sbGVjdGlvblR5cGUgPSAndmlkZW8tJyArIGNvbGxlY3Rpb25UeXBlO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAnaWQnLCBjb2xsZWN0aW9uVHlwZSArICctbGlicmFyeScgKTtcblx0XHR0aGlzLnNldCggJ3Rvb2xiYXInLCBjb2xsZWN0aW9uVHlwZSArICctYWRkJyApO1xuXHRcdHRoaXMuc2V0KCAnbWVudScsIGNvbGxlY3Rpb25UeXBlICk7XG5cblx0XHQvLyBJZiB3ZSBoYXZlbid0IGJlZW4gcHJvdmlkZWQgYSBgbGlicmFyeWAsIGNyZWF0ZSBhIGBTZWxlY3Rpb25gLlxuXHRcdGlmICggISB0aGlzLmdldCgnbGlicmFyeScpICkge1xuXHRcdFx0dGhpcy5zZXQoICdsaWJyYXJ5Jywgd3AubWVkaWEucXVlcnkoeyB0eXBlOiB0aGlzLmdldCgndHlwZScpIH0pICk7XG5cdFx0fVxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRlZGl0TGlicmFyeSA9IHRoaXMuZ2V0KCdlZGl0TGlicmFyeScpLFxuXHRcdFx0ZWRpdCA9IHRoaXMuZnJhbWUuc3RhdGUoIHRoaXMuZ2V0KCdjb2xsZWN0aW9uVHlwZScpICsgJy1lZGl0JyApLmdldCgnbGlicmFyeScpO1xuXG5cdFx0aWYgKCBlZGl0TGlicmFyeSAmJiBlZGl0TGlicmFyeSAhPT0gZWRpdCApIHtcblx0XHRcdGxpYnJhcnkudW5vYnNlcnZlKCBlZGl0TGlicmFyeSApO1xuXHRcdH1cblxuXHRcdC8vIEFjY2VwdHMgYXR0YWNobWVudHMgdGhhdCBleGlzdCBpbiB0aGUgb3JpZ2luYWwgbGlicmFyeSBhbmRcblx0XHQvLyB0aGF0IGRvIG5vdCBleGlzdCBpbiBnYWxsZXJ5J3MgbGlicmFyeS5cblx0XHRsaWJyYXJ5LnZhbGlkYXRvciA9IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0cmV0dXJuICEhIHRoaXMubWlycm9yaW5nLmdldCggYXR0YWNobWVudC5jaWQgKSAmJiAhIGVkaXQuZ2V0KCBhdHRhY2htZW50LmNpZCApICYmIFNlbGVjdGlvbi5wcm90b3R5cGUudmFsaWRhdG9yLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gUmVzZXQgdGhlIGxpYnJhcnkgdG8gZW5zdXJlIHRoYXQgYWxsIGF0dGFjaG1lbnRzIGFyZSByZS1hZGRlZFxuXHRcdC8vIHRvIHRoZSBjb2xsZWN0aW9uLiBEbyBzbyBzaWxlbnRseSwgYXMgY2FsbGluZyBgb2JzZXJ2ZWAgd2lsbFxuXHRcdC8vIHRyaWdnZXIgdGhlIGByZXNldGAgZXZlbnQuXG5cdFx0bGlicmFyeS5yZXNldCggbGlicmFyeS5taXJyb3JpbmcubW9kZWxzLCB7IHNpbGVudDogdHJ1ZSB9KTtcblx0XHRsaWJyYXJ5Lm9ic2VydmUoIGVkaXQgKTtcblx0XHR0aGlzLnNldCgnZWRpdExpYnJhcnknLCBlZGl0KTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbkFkZDtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uRWRpdFxuICpcbiAqIEEgc3RhdGUgZm9yIGVkaXRpbmcgYSBjb2xsZWN0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IGF1ZGlvIGFuZCB2aWRlbyBwbGF5bGlzdHMsXG4gKiBhbmQgY2FuIGJlIHVzZWQgZm9yIG90aGVyIGNvbGxlY3Rpb25zLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzXSAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlICAgICAgICAgICAgICAgICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIG1lZGlhIG1lbnUgYW5kIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IFthdHRyaWJ1dGVzLmxpYnJhcnldICAgICAgICAgICAgICBUaGUgYXR0YWNobWVudHMgY29sbGVjdGlvbiB0byBlZGl0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGFuIGVtcHR5IG1lZGlhLm1vZGVsLlNlbGVjdGlvbiBjb2xsZWN0aW9uIGlzIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tdWx0aXBsZT1mYWxzZV0gICAgICAgV2hldGhlciBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9YnJvd3NlXSAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBjb250ZW50IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMubWVudSAgICAgICAgICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi4gQHRvZG8gdGhpcyBuZWVkcyBhIGJldHRlciBleHBsYW5hdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNlYXJjaGFibGU9ZmFsc2VdICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHNlYXJjaGFibGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zb3J0YWJsZT10cnVlXSAgICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2hvdWxkIGJlIHNvcnRhYmxlLiBEZXBlbmRzIG9uIHRoZSBvcmRlcmJ5IHByb3BlcnR5IGJlaW5nIHNldCB0byBtZW51T3JkZXIgb24gdGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kYXRlPXRydWVdICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSBkYXRlIGZpbHRlciBpbiB0aGUgYnJvd3NlcidzIHRvb2xiYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kZXNjcmliZT10cnVlXSAgICAgICAgV2hldGhlciB0byBvZmZlciBVSSB0byBkZXNjcmliZSB0aGUgYXR0YWNobWVudHMgLSBlLmcuIGNhcHRpb25pbmcgaW1hZ2VzIGluIGEgZ2FsbGVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRyYWdJbmZvPXRydWVdICAgICAgICBXaGV0aGVyIHRvIHNob3cgaW5zdHJ1Y3Rpb25hbCB0ZXh0IGFib3V0IHRoZSBhdHRhY2htZW50cyBiZWluZyBzb3J0YWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRyYWdJbmZvVGV4dF0gICAgICAgICBJbnN0cnVjdGlvbmFsIHRleHQgYWJvdXQgdGhlIGF0dGFjaG1lbnRzIGJlaW5nIHNvcnRhYmxlLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWRlYWxDb2x1bW5XaWR0aD0xNzBdIFRoZSBpZGVhbCBjb2x1bW4gd2lkdGggaW4gcGl4ZWxzIGZvciBhdHRhY2htZW50cy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmVkaXRpbmc9ZmFsc2VdICAgICAgICBXaGV0aGVyIHRoZSBnYWxsZXJ5IGlzIGJlaW5nIGNyZWF0ZWQsIG9yIGVkaXRpbmcgYW4gZXhpc3RpbmcgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5wcmlvcml0eT02MF0gICAgICAgICAgVGhlIHByaW9yaXR5IGZvciB0aGUgc3RhdGUgbGluayBpbiB0aGUgbWVkaWEgbWVudS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnN5bmNTZWxlY3Rpb249ZmFsc2VdICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzZWxlY3Rpb24gc2hvdWxkIGJlIHBlcnNpc3RlZCBmcm9tIHRoZSBsYXN0IHN0YXRlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGZhbHNlIGZvciB0aGlzIHN0YXRlLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IHBhc3NlZCBpbiAgKmlzKiB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHt2aWV3fSAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuU2V0dGluZ3NWaWV3XSAgICAgICAgIFRoZSB2aWV3IHRvIGVkaXQgdGhlIGNvbGxlY3Rpb24gaW5zdGFuY2Ugc2V0dGluZ3MgKGUuZy4gUGxheWxpc3Qgc2V0dGluZ3Mgd2l0aCBcIlNob3cgdHJhY2tsaXN0XCIgY2hlY2tib3gpLlxuICogQHBhcmFtIHt2aWV3fSAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuQXR0YWNobWVudFZpZXddICAgICAgIFRoZSBzaW5nbGUgYEF0dGFjaG1lbnRgIHZpZXcgdG8gYmUgdXNlZCBpbiB0aGUgYEF0dGFjaG1lbnRzYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub25lIHN1cHBsaWVkLCBkZWZhdWx0cyB0byB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdExpYnJhcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnR5cGUgICAgICAgICAgICAgICAgICAgVGhlIGNvbGxlY3Rpb24ncyBtZWRpYSB0eXBlLiAoZS5nLiAndmlkZW8nKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuY29sbGVjdGlvblR5cGUgICAgICAgICBUaGUgY29sbGVjdGlvbiB0eXBlLiAoZS5nLiAncGxheWxpc3QnKS5cbiAqL1xudmFyIExpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnksXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdCQgPSBqUXVlcnksXG5cdENvbGxlY3Rpb25FZGl0O1xuXG5Db2xsZWN0aW9uRWRpdCA9IExpYnJhcnkuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRtdWx0aXBsZTogICAgICAgICBmYWxzZSxcblx0XHRzb3J0YWJsZTogICAgICAgICB0cnVlLFxuXHRcdGRhdGU6ICAgICAgICAgICAgIGZhbHNlLFxuXHRcdHNlYXJjaGFibGU6ICAgICAgIGZhbHNlLFxuXHRcdGNvbnRlbnQ6ICAgICAgICAgICdicm93c2UnLFxuXHRcdGRlc2NyaWJlOiAgICAgICAgIHRydWUsXG5cdFx0ZHJhZ0luZm86ICAgICAgICAgdHJ1ZSxcblx0XHRpZGVhbENvbHVtbldpZHRoOiAxNzAsXG5cdFx0ZWRpdGluZzogICAgICAgICAgZmFsc2UsXG5cdFx0cHJpb3JpdHk6ICAgICAgICAgNjAsXG5cdFx0U2V0dGluZ3NWaWV3OiAgICAgZmFsc2UsXG5cdFx0c3luY1NlbGVjdGlvbjogICAgZmFsc2Vcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29sbGVjdGlvblR5cGUgPSB0aGlzLmdldCgnY29sbGVjdGlvblR5cGUnKTtcblxuXHRcdGlmICggJ3ZpZGVvJyA9PT0gdGhpcy5nZXQoICd0eXBlJyApICkge1xuXHRcdFx0Y29sbGVjdGlvblR5cGUgPSAndmlkZW8tJyArIGNvbGxlY3Rpb25UeXBlO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAnaWQnLCBjb2xsZWN0aW9uVHlwZSArICctZWRpdCcgKTtcblx0XHR0aGlzLnNldCggJ3Rvb2xiYXInLCBjb2xsZWN0aW9uVHlwZSArICctZWRpdCcgKTtcblxuXHRcdC8vIElmIHdlIGhhdmVuJ3QgYmVlbiBwcm92aWRlZCBhIGBsaWJyYXJ5YCwgY3JlYXRlIGEgYFNlbGVjdGlvbmAuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCkgKTtcblx0XHR9XG5cdFx0Ly8gVGhlIHNpbmdsZSBgQXR0YWNobWVudGAgdmlldyB0byBiZSB1c2VkIGluIHRoZSBgQXR0YWNobWVudHNgIHZpZXcuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdBdHRhY2htZW50VmlldycpICkge1xuXHRcdFx0dGhpcy5zZXQoICdBdHRhY2htZW50VmlldycsIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5FZGl0TGlicmFyeSApO1xuXHRcdH1cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxpYnJhcnkgPSB0aGlzLmdldCgnbGlicmFyeScpO1xuXG5cdFx0Ly8gTGltaXQgdGhlIGxpYnJhcnkgdG8gaW1hZ2VzIG9ubHkuXG5cdFx0bGlicmFyeS5wcm9wcy5zZXQoICd0eXBlJywgdGhpcy5nZXQoICd0eXBlJyApICk7XG5cblx0XHQvLyBXYXRjaCBmb3IgdXBsb2FkZWQgYXR0YWNobWVudHMuXG5cdFx0dGhpcy5nZXQoJ2xpYnJhcnknKS5vYnNlcnZlKCB3cC5VcGxvYWRlci5xdWV1ZSApO1xuXG5cdFx0dGhpcy5mcmFtZS5vbiggJ2NvbnRlbnQ6cmVuZGVyOmJyb3dzZScsIHRoaXMucmVuZGVyU2V0dGluZ3MsIHRoaXMgKTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBTdG9wIHdhdGNoaW5nIGZvciB1cGxvYWRlZCBhdHRhY2htZW50cy5cblx0XHR0aGlzLmdldCgnbGlicmFyeScpLnVub2JzZXJ2ZSggd3AuVXBsb2FkZXIucXVldWUgKTtcblxuXHRcdHRoaXMuZnJhbWUub2ZmKCAnY29udGVudDpyZW5kZXI6YnJvd3NlJywgdGhpcy5yZW5kZXJTZXR0aW5ncywgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuZGVhY3RpdmF0ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgY29sbGVjdGlvbiBlbWJlZCBzZXR0aW5ncyB2aWV3IGluIHRoZSBicm93c2VyIHNpZGViYXIuXG5cdCAqXG5cdCAqIEB0b2RvIFRoaXMgaXMgYWdhaW5zdCB0aGUgcGF0dGVybiBlbHNld2hlcmUgaW4gbWVkaWEuIFR5cGljYWxseSB0aGUgZnJhbWVcblx0ICogICAgICAgaXMgcmVzcG9uc2libGUgZm9yIGFkZGluZyByZWdpb24gbW9kZSBjYWxsYmFja3MuIEV4cGxhaW4uXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLnZpZXcuYXR0YWNobWVudHNCcm93c2VyfSBUaGUgYXR0YWNobWVudHMgYnJvd3NlciB2aWV3LlxuXHQgKi9cblx0cmVuZGVyU2V0dGluZ3M6IGZ1bmN0aW9uKCBhdHRhY2htZW50c0Jyb3dzZXJWaWV3ICkge1xuXHRcdHZhciBsaWJyYXJ5ID0gdGhpcy5nZXQoJ2xpYnJhcnknKSxcblx0XHRcdGNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXQoJ2NvbGxlY3Rpb25UeXBlJyksXG5cdFx0XHRkcmFnSW5mb1RleHQgPSB0aGlzLmdldCgnZHJhZ0luZm9UZXh0JyksXG5cdFx0XHRTZXR0aW5nc1ZpZXcgPSB0aGlzLmdldCgnU2V0dGluZ3NWaWV3JyksXG5cdFx0XHRvYmogPSB7fTtcblxuXHRcdGlmICggISBsaWJyYXJ5IHx8ICEgYXR0YWNobWVudHNCcm93c2VyVmlldyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsaWJyYXJ5WyBjb2xsZWN0aW9uVHlwZSBdID0gbGlicmFyeVsgY29sbGVjdGlvblR5cGUgXSB8fCBuZXcgQmFja2JvbmUuTW9kZWwoKTtcblxuXHRcdG9ialsgY29sbGVjdGlvblR5cGUgXSA9IG5ldyBTZXR0aW5nc1ZpZXcoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiAgICAgIGxpYnJhcnlbIGNvbGxlY3Rpb25UeXBlIF0sXG5cdFx0XHRwcmlvcml0eTogICA0MFxuXHRcdH0pO1xuXG5cdFx0YXR0YWNobWVudHNCcm93c2VyVmlldy5zaWRlYmFyLnNldCggb2JqICk7XG5cblx0XHRpZiAoIGRyYWdJbmZvVGV4dCApIHtcblx0XHRcdGF0dGFjaG1lbnRzQnJvd3NlclZpZXcudG9vbGJhci5zZXQoICdkcmFnSW5mbycsIG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0ZWw6ICQoICc8ZGl2IGNsYXNzPVwiaW5zdHJ1Y3Rpb25zXCI+JyArIGRyYWdJbmZvVGV4dCArICc8L2Rpdj4nIClbMF0sXG5cdFx0XHRcdHByaW9yaXR5OiAtNDBcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSAnUmV2ZXJzZSBvcmRlcicgYnV0dG9uIHRvIHRoZSB0b29sYmFyLlxuXHRcdGF0dGFjaG1lbnRzQnJvd3NlclZpZXcudG9vbGJhci5zZXQoICdyZXZlcnNlJywge1xuXHRcdFx0dGV4dDogICAgIGwxMG4ucmV2ZXJzZU9yZGVyLFxuXHRcdFx0cHJpb3JpdHk6IDgwLFxuXG5cdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpYnJhcnkucmVzZXQoIGxpYnJhcnkudG9BcnJheSgpLnJldmVyc2UoKSApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uRWRpdDtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5Dcm9wcGVyXG4gKlxuICogQSBzdGF0ZSBmb3IgY3JvcHBpbmcgYW4gaW1hZ2UuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRDcm9wcGVyO1xuXG5Dcm9wcGVyID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICAgICAnY3JvcHBlcicsXG5cdFx0dGl0bGU6ICAgICAgIGwxMG4uY3JvcEltYWdlLFxuXHRcdC8vIFJlZ2lvbiBtb2RlIGRlZmF1bHRzLlxuXHRcdHRvb2xiYXI6ICAgICAnY3JvcCcsXG5cdFx0Y29udGVudDogICAgICdjcm9wJyxcblx0XHRyb3V0ZXI6ICAgICAgZmFsc2UsXG5cdFx0Y2FuU2tpcENyb3A6IGZhbHNlLFxuXG5cdFx0Ly8gRGVmYXVsdCBkb0Nyb3AgQWpheCBhcmd1bWVudHMgdG8gYWxsb3cgdGhlIEN1c3RvbWl6ZXIgKGZvciBleGFtcGxlKSB0byBpbmplY3Qgc3RhdGUuXG5cdFx0ZG9Dcm9wQXJnczoge31cblx0fSxcblxuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmNyb3AnLCB0aGlzLmNyZWF0ZUNyb3BDb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ2Nsb3NlJywgdGhpcy5yZW1vdmVDcm9wcGVyLCB0aGlzICk7XG5cdFx0dGhpcy5zZXQoJ3NlbGVjdGlvbicsIG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKHRoaXMuZnJhbWUuX3NlbGVjdGlvbi5zaW5nbGUpKTtcblx0fSxcblxuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZyYW1lLnRvb2xiYXIubW9kZSgnYnJvd3NlJyk7XG5cdH0sXG5cblx0Y3JlYXRlQ3JvcENvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY3JvcHBlclZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5Dcm9wcGVyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRhdHRhY2htZW50OiB0aGlzLmdldCgnc2VsZWN0aW9uJykuZmlyc3QoKVxuXHRcdH0pO1xuXHRcdHRoaXMuY3JvcHBlclZpZXcub24oJ2ltYWdlLWxvYWRlZCcsIHRoaXMuY3JlYXRlQ3JvcFRvb2xiYXIsIHRoaXMpO1xuXHRcdHRoaXMuZnJhbWUuY29udGVudC5zZXQodGhpcy5jcm9wcGVyVmlldyk7XG5cblx0fSxcblx0cmVtb3ZlQ3JvcHBlcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5pbWdTZWxlY3QuY2FuY2VsU2VsZWN0aW9uKCk7XG5cdFx0dGhpcy5pbWdTZWxlY3Quc2V0T3B0aW9ucyh7cmVtb3ZlOiB0cnVlfSk7XG5cdFx0dGhpcy5pbWdTZWxlY3QudXBkYXRlKCk7XG5cdFx0dGhpcy5jcm9wcGVyVmlldy5yZW1vdmUoKTtcblx0fSxcblx0Y3JlYXRlQ3JvcFRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYW5Ta2lwQ3JvcCwgdG9vbGJhck9wdGlvbnM7XG5cblx0XHRjYW5Ta2lwQ3JvcCA9IHRoaXMuZ2V0KCdjYW5Ta2lwQ3JvcCcpIHx8IGZhbHNlO1xuXG5cdFx0dG9vbGJhck9wdGlvbnMgPSB7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmZyYW1lLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jcm9wSW1hZ2UsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXHRcdFx0XHRcdHJlcXVpcmVzOiB7IGxpYnJhcnk6IGZhbHNlLCBzZWxlY3Rpb246IGZhbHNlIH0sXG5cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24gPSBjb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKS5maXJzdCgpO1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLnNldCh7Y3JvcERldGFpbHM6IGNvbnRyb2xsZXIuc3RhdGUoKS5pbWdTZWxlY3QuZ2V0U2VsZWN0aW9uKCl9KTtcblxuXHRcdFx0XHRcdFx0dGhpcy4kZWwudGV4dChsMTBuLmNyb3BwaW5nKTtcblx0XHRcdFx0XHRcdHRoaXMuJGVsLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc3RhdGUoKS5kb0Nyb3AoIHNlbGVjdGlvbiApLmRvbmUoIGZ1bmN0aW9uKCBjcm9wcGVkSW1hZ2UgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIudHJpZ2dlcignY3JvcHBlZCcsIGNyb3BwZWRJbWFnZSApO1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9KS5mYWlsKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci50cmlnZ2VyKCdjb250ZW50OmVycm9yOmNyb3AnKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoIGNhblNraXBDcm9wICkge1xuXHRcdFx0Xy5leHRlbmQoIHRvb2xiYXJPcHRpb25zLml0ZW1zLCB7XG5cdFx0XHRcdHNraXA6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgICAnc2Vjb25kYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgICBsMTBuLnNraXBDcm9wcGluZyxcblx0XHRcdFx0XHRwcmlvcml0eTogICA3MCxcblx0XHRcdFx0XHRyZXF1aXJlczogICB7IGxpYnJhcnk6IGZhbHNlLCBzZWxlY3Rpb246IGZhbHNlIH0sXG5cdFx0XHRcdFx0Y2xpY2s6ICAgICAgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKS5maXJzdCgpO1xuXHRcdFx0XHRcdFx0dGhpcy5jb250cm9sbGVyLnN0YXRlKCkuY3JvcHBlclZpZXcucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlcignc2tpcHBlZGNyb3AnLCBzZWxlY3Rpb24pO1xuXHRcdFx0XHRcdFx0dGhpcy5jb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmZyYW1lLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHRvb2xiYXJPcHRpb25zKSApO1xuXHR9LFxuXG5cdGRvQ3JvcDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0cmV0dXJuIHdwLmFqYXgucG9zdCggJ2N1c3RvbS1oZWFkZXItY3JvcCcsIF8uZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzLmRlZmF1bHRzLmRvQ3JvcEFyZ3MsXG5cdFx0XHR7XG5cdFx0XHRcdG5vbmNlOiBhdHRhY2htZW50LmdldCggJ25vbmNlcycgKS5lZGl0LFxuXHRcdFx0XHRpZDogYXR0YWNobWVudC5nZXQoICdpZCcgKSxcblx0XHRcdFx0Y3JvcERldGFpbHM6IGF0dGFjaG1lbnQuZ2V0KCAnY3JvcERldGFpbHMnIClcblx0XHRcdH1cblx0XHQpICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENyb3BwZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuQ3VzdG9taXplSW1hZ2VDcm9wcGVyXG4gKlxuICogQSBzdGF0ZSBmb3IgY3JvcHBpbmcgYW4gaW1hZ2UuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5Dcm9wcGVyXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBDb250cm9sbGVyID0gd3AubWVkaWEuY29udHJvbGxlcixcblx0Q3VzdG9taXplSW1hZ2VDcm9wcGVyO1xuXG5DdXN0b21pemVJbWFnZUNyb3BwZXIgPSBDb250cm9sbGVyLkNyb3BwZXIuZXh0ZW5kKHtcblx0ZG9Dcm9wOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHR2YXIgY3JvcERldGFpbHMgPSBhdHRhY2htZW50LmdldCggJ2Nyb3BEZXRhaWxzJyApLFxuXHRcdFx0Y29udHJvbCA9IHRoaXMuZ2V0KCAnY29udHJvbCcgKSxcblx0XHRcdHJhdGlvID0gY3JvcERldGFpbHMud2lkdGggLyBjcm9wRGV0YWlscy5oZWlnaHQ7XG5cblx0XHQvLyBVc2UgY3JvcCBtZWFzdXJlbWVudHMgd2hlbiBmbGV4aWJsZSBpbiBib3RoIGRpcmVjdGlvbnMuXG5cdFx0aWYgKCBjb250cm9sLnBhcmFtcy5mbGV4X3dpZHRoICYmIGNvbnRyb2wucGFyYW1zLmZsZXhfaGVpZ2h0ICkge1xuXHRcdFx0Y3JvcERldGFpbHMuZHN0X3dpZHRoICA9IGNyb3BEZXRhaWxzLndpZHRoO1xuXHRcdFx0Y3JvcERldGFpbHMuZHN0X2hlaWdodCA9IGNyb3BEZXRhaWxzLmhlaWdodDtcblxuXHRcdC8vIENvbnN0cmFpbiBmbGV4aWJsZSBzaWRlIGJhc2VkIG9uIGltYWdlIHJhdGlvIGFuZCBzaXplIG9mIHRoZSBmaXhlZCBzaWRlLlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjcm9wRGV0YWlscy5kc3Rfd2lkdGggID0gY29udHJvbC5wYXJhbXMuZmxleF93aWR0aCAgPyBjb250cm9sLnBhcmFtcy5oZWlnaHQgKiByYXRpbyA6IGNvbnRyb2wucGFyYW1zLndpZHRoO1xuXHRcdFx0Y3JvcERldGFpbHMuZHN0X2hlaWdodCA9IGNvbnRyb2wucGFyYW1zLmZsZXhfaGVpZ2h0ID8gY29udHJvbC5wYXJhbXMud2lkdGggIC8gcmF0aW8gOiBjb250cm9sLnBhcmFtcy5oZWlnaHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdwLmFqYXgucG9zdCggJ2Nyb3AtaW1hZ2UnLCB7XG5cdFx0XHR3cF9jdXN0b21pemU6ICdvbicsXG5cdFx0XHRub25jZTogYXR0YWNobWVudC5nZXQoICdub25jZXMnICkuZWRpdCxcblx0XHRcdGlkOiBhdHRhY2htZW50LmdldCggJ2lkJyApLFxuXHRcdFx0Y29udGV4dDogY29udHJvbC5pZCxcblx0XHRcdGNyb3BEZXRhaWxzOiBjcm9wRGV0YWlsc1xuXHRcdH0gKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ3VzdG9taXplSW1hZ2VDcm9wcGVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkVkaXRJbWFnZVxuICpcbiAqIEEgc3RhdGUgZm9yIGVkaXRpbmcgKGNyb3BwaW5nLCBldGMuKSBhbiBpbWFnZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRyaWJ1dGVzLm1vZGVsICAgICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50LlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1lZGl0LWltYWdlXSAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1FZGl0IEltYWdlXSAgIFRpdGxlIGZvciB0aGUgc3RhdGUuIERpc3BsYXlzIGluIHRoZSBtZWRpYSBtZW51IGFuZCB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9ZWRpdC1pbWFnZV0gSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRvb2xiYXI9ZWRpdC1pbWFnZV0gSW5pdGlhbCBtb2RlIGZvciB0aGUgdG9vbGJhciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm1lbnU9ZmFsc2VdICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgbWVudSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnVybF0gICAgICAgICAgICAgICAgVW51c2VkLiBAdG9kbyBDb25zaWRlciByZW1vdmFsLlxuICovXG52YXIgbDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0RWRpdEltYWdlO1xuXG5FZGl0SW1hZ2UgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgJ2VkaXQtaW1hZ2UnLFxuXHRcdHRpdGxlOiAgIGwxMG4uZWRpdEltYWdlLFxuXHRcdG1lbnU6ICAgIGZhbHNlLFxuXHRcdHRvb2xiYXI6ICdlZGl0LWltYWdlJyxcblx0XHRjb250ZW50OiAnZWRpdC1pbWFnZScsXG5cdFx0dXJsOiAgICAgJydcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ3Rvb2xiYXI6cmVuZGVyOmVkaXQtaW1hZ2UnLCBfLmJpbmQoIHRoaXMudG9vbGJhciwgdGhpcyApICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0ZGVhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5vZmYoICd0b29sYmFyOnJlbmRlcjplZGl0LWltYWdlJyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdHRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmcmFtZSA9IHRoaXMuZnJhbWUsXG5cdFx0XHRsYXN0U3RhdGUgPSBmcmFtZS5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZDtcblxuXHRcdGZyYW1lLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IGZyYW1lLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0YmFjazoge1xuXHRcdFx0XHRcdHN0eWxlOiAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uYmFjayxcblx0XHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmcmFtZS5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRJbWFnZTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5FbWJlZFxuICpcbiAqIEEgc3RhdGUgZm9yIGVtYmVkZGluZyBtZWRpYSBmcm9tIGEgVVJMLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBhdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy5pZD1lbWJlZF0gICAgICAgICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLnRpdGxlPUluc2VydCBGcm9tIFVSTF0gVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIG1lZGlhIG1lbnUgYW5kIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy5jb250ZW50PWVtYmVkXSAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLm1lbnU9ZGVmYXVsdF0gICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgbWVudSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0dHJpYnV0ZXMudG9vbGJhcj1tYWluLWVtYmVkXSAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSB0b29sYmFyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy5tZW51PWZhbHNlXSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtpbnR9ICAgIFthdHRyaWJ1dGVzLnByaW9yaXR5PTEyMF0gICAgICAgICAgVGhlIHByaW9yaXR5IGZvciB0aGUgc3RhdGUgbGluayBpbiB0aGUgbWVkaWEgbWVudS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy50eXBlPWxpbmtdICAgICAgICAgICAgIFRoZSB0eXBlIG9mIGVtYmVkLiBDdXJyZW50bHkgb25seSBsaW5rIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy51cmxdICAgICAgICAgICAgICAgICAgIFRoZSBlbWJlZCBVUkwuXG4gKiBAcGFyYW0ge29iamVjdH0gW2F0dHJpYnV0ZXMubWV0YWRhdGE9e31dICAgICAgICAgICBQcm9wZXJ0aWVzIG9mIHRoZSBlbWJlZCwgd2hpY2ggd2lsbCBvdmVycmlkZSBhdHRyaWJ1dGVzLnVybCBpZiBzZXQuXG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHQkID0gQmFja2JvbmUuJCxcblx0RW1iZWQ7XG5cbkVtYmVkID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICAnZW1iZWQnLFxuXHRcdHRpdGxlOiAgICBsMTBuLmluc2VydEZyb21VcmxUaXRsZSxcblx0XHRjb250ZW50OiAgJ2VtYmVkJyxcblx0XHRtZW51OiAgICAgJ2RlZmF1bHQnLFxuXHRcdHRvb2xiYXI6ICAnbWFpbi1lbWJlZCcsXG5cdFx0cHJpb3JpdHk6IDEyMCxcblx0XHR0eXBlOiAgICAgJ2xpbmsnLFxuXHRcdHVybDogICAgICAnJyxcblx0XHRtZXRhZGF0YToge31cblx0fSxcblxuXHQvLyBUaGUgYW1vdW50IG9mIHRpbWUgdXNlZCB3aGVuIGRlYm91bmNpbmcgdGhlIHNjYW4uXG5cdHNlbnNpdGl2aXR5OiA0MDAsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24ob3B0aW9ucykge1xuXHRcdHRoaXMubWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhO1xuXHRcdHRoaXMuZGVib3VuY2VkU2NhbiA9IF8uZGVib3VuY2UoIF8uYmluZCggdGhpcy5zY2FuLCB0aGlzICksIHRoaXMuc2Vuc2l0aXZpdHkgKTtcblx0XHR0aGlzLnByb3BzID0gbmV3IEJhY2tib25lLk1vZGVsKCB0aGlzLm1ldGFkYXRhIHx8IHsgdXJsOiAnJyB9KTtcblx0XHR0aGlzLnByb3BzLm9uKCAnY2hhbmdlOnVybCcsIHRoaXMuZGVib3VuY2VkU2NhbiwgdGhpcyApO1xuXHRcdHRoaXMucHJvcHMub24oICdjaGFuZ2U6dXJsJywgdGhpcy5yZWZyZXNoLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3NjYW4nLCB0aGlzLnNjYW5JbWFnZSwgdGhpcyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VyIGEgc2NhbiBvZiB0aGUgZW1iZWRkZWQgVVJMJ3MgY29udGVudCBmb3IgbWV0YWRhdGEgcmVxdWlyZWQgdG8gZW1iZWQuXG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS5jb250cm9sbGVyLkVtYmVkI3NjYW5cblx0ICovXG5cdHNjYW46IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzY2FubmVycyxcblx0XHRcdGVtYmVkID0gdGhpcyxcblx0XHRcdGF0dHJpYnV0ZXMgPSB7XG5cdFx0XHRcdHR5cGU6ICdsaW5rJyxcblx0XHRcdFx0c2Nhbm5lcnM6IFtdXG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2NhbiBpcyB0cmlnZ2VyZWQgd2l0aCB0aGUgbGlzdCBvZiBgYXR0cmlidXRlc2AgdG8gc2V0IG9uIHRoZVxuXHRcdC8vIHN0YXRlLCB1c2VmdWwgZm9yIHRoZSAndHlwZScgYXR0cmlidXRlIGFuZCAnc2Nhbm5lcnMnIGF0dHJpYnV0ZSxcblx0XHQvLyBhbiBhcnJheSBvZiBwcm9taXNlIG9iamVjdHMgZm9yIGFzeW5jaHJvbm91cyBzY2FuIG9wZXJhdGlvbnMuXG5cdFx0aWYgKCB0aGlzLnByb3BzLmdldCgndXJsJykgKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdzY2FuJywgYXR0cmlidXRlcyApO1xuXHRcdH1cblxuXHRcdGlmICggYXR0cmlidXRlcy5zY2FubmVycy5sZW5ndGggKSB7XG5cdFx0XHRzY2FubmVycyA9IGF0dHJpYnV0ZXMuc2Nhbm5lcnMgPSAkLndoZW4uYXBwbHkoICQsIGF0dHJpYnV0ZXMuc2Nhbm5lcnMgKTtcblx0XHRcdHNjYW5uZXJzLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggZW1iZWQuZ2V0KCdzY2FubmVycycpID09PSBzY2FubmVycyApIHtcblx0XHRcdFx0XHRlbWJlZC5zZXQoICdsb2FkaW5nJywgZmFsc2UgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF0dHJpYnV0ZXMuc2Nhbm5lcnMgPSBudWxsO1xuXHRcdH1cblxuXHRcdGF0dHJpYnV0ZXMubG9hZGluZyA9ICEhIGF0dHJpYnV0ZXMuc2Nhbm5lcnM7XG5cdFx0dGhpcy5zZXQoIGF0dHJpYnV0ZXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIFRyeSBzY2FubmluZyB0aGUgZW1iZWQgYXMgYW4gaW1hZ2UgdG8gZGlzY292ZXIgaXRzIGRpbWVuc2lvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzXG5cdCAqL1xuXHRzY2FuSW1hZ2U6IGZ1bmN0aW9uKCBhdHRyaWJ1dGVzICkge1xuXHRcdHZhciBmcmFtZSA9IHRoaXMuZnJhbWUsXG5cdFx0XHRzdGF0ZSA9IHRoaXMsXG5cdFx0XHR1cmwgPSB0aGlzLnByb3BzLmdldCgndXJsJyksXG5cdFx0XHRpbWFnZSA9IG5ldyBJbWFnZSgpLFxuXHRcdFx0ZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cblx0XHRhdHRyaWJ1dGVzLnNjYW5uZXJzLnB1c2goIGRlZmVycmVkLnByb21pc2UoKSApO1xuXG5cdFx0Ly8gVHJ5IHRvIGxvYWQgdGhlIGltYWdlIGFuZCBmaW5kIGl0cyB3aWR0aC9oZWlnaHQuXG5cdFx0aW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cblx0XHRcdGlmICggc3RhdGUgIT09IGZyYW1lLnN0YXRlKCkgfHwgdXJsICE9PSBzdGF0ZS5wcm9wcy5nZXQoJ3VybCcpICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHN0YXRlLnNldCh7XG5cdFx0XHRcdHR5cGU6ICdpbWFnZSdcblx0XHRcdH0pO1xuXG5cdFx0XHRzdGF0ZS5wcm9wcy5zZXQoe1xuXHRcdFx0XHR3aWR0aDogIGltYWdlLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodFxuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGltYWdlLm9uZXJyb3IgPSBkZWZlcnJlZC5yZWplY3Q7XG5cdFx0aW1hZ2Uuc3JjID0gdXJsO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZnJhbWUudG9vbGJhci5nZXQoKS5yZWZyZXNoKCk7XG5cdH0sXG5cblx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMucHJvcHMuY2xlYXIoKS5zZXQoeyB1cmw6ICcnIH0pO1xuXG5cdFx0aWYgKCB0aGlzLmFjdGl2ZSApIHtcblx0XHRcdHRoaXMucmVmcmVzaCgpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRW1iZWQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuRmVhdHVyZWRJbWFnZVxuICpcbiAqIEEgc3RhdGUgZm9yIHNlbGVjdGluZyBhIGZlYXR1cmVkIGltYWdlIGZvciBhIHBvc3QuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1mZWF0dXJlZC1pbWFnZV0gICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudGl0bGU9U2V0IEZlYXR1cmVkIEltYWdlXSBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgbWVkaWEgbWVudSBhbmQgdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgICAgICBUaGUgYXR0YWNobWVudHMgY29sbGVjdGlvbiB0byBicm93c2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGEgY29sbGVjdGlvbiBvZiBhbGwgaW1hZ2VzIHdpbGwgYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWZhbHNlXSAgICAgICAgICAgV2hldGhlciBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9dXBsb2FkXSAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRkZW4gYnkgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcgaWYgJ2NvbnRlbnRVc2VyU2V0dGluZycgaXMgdHJ1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm1lbnU9ZGVmYXVsdF0gICAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgbWVudSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5yb3V0ZXI9YnJvd3NlXSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHJvdXRlciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPWZlYXR1cmVkLWltYWdlXSAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9NjBdICAgICAgICAgICAgICBUaGUgcHJpb3JpdHkgZm9yIHRoZSBzdGF0ZSBsaW5rIGluIHRoZSBtZWRpYSBtZW51LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT10cnVlXSAgICAgICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHNlYXJjaGFibGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfSAgICAgICAgICAgICBbYXR0cmlidXRlcy5maWx0ZXJhYmxlPWZhbHNlXSAgICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgZmlsdGVyYWJsZSwgYW5kIGlmIHNvIHdoYXQgZmlsdGVycyBzaG91bGQgYmUgc2hvd24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ2FsbCcsICd1cGxvYWRlZCcsIG9yICd1bmF0dGFjaGVkJy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNvcnRhYmxlPXRydWVdICAgICAgICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2hvdWxkIGJlIHNvcnRhYmxlLiBEZXBlbmRzIG9uIHRoZSBvcmRlcmJ5IHByb3BlcnR5IGJlaW5nIHNldCB0byBtZW51T3JkZXIgb24gdGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5hdXRvU2VsZWN0PXRydWVdICAgICAgICAgIFdoZXRoZXIgYW4gdXBsb2FkZWQgYXR0YWNobWVudCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZGVzY3JpYmU9ZmFsc2VdICAgICAgICAgICBXaGV0aGVyIHRvIG9mZmVyIFVJIHRvIGRlc2NyaWJlIGF0dGFjaG1lbnRzIC0gZS5nLiBjYXB0aW9uaW5nIGltYWdlcyBpbiBhIGdhbGxlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50VXNlclNldHRpbmc9dHJ1ZV0gIFdoZXRoZXIgdGhlIGNvbnRlbnQgcmVnaW9uJ3MgbW9kZSBzaG91bGQgYmUgc2V0IGFuZCBwZXJzaXN0ZWQgcGVyIHVzZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zeW5jU2VsZWN0aW9uPXRydWVdICAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNlbGVjdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZyb20gdGhlIGxhc3Qgc3RhdGUuXG4gKi9cbnZhciBBdHRhY2htZW50ID0gd3AubWVkaWEubW9kZWwuQXR0YWNobWVudCxcblx0TGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0RmVhdHVyZWRJbWFnZTtcblxuRmVhdHVyZWRJbWFnZSA9IExpYnJhcnkuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IF8uZGVmYXVsdHMoe1xuXHRcdGlkOiAgICAgICAgICAgICdmZWF0dXJlZC1pbWFnZScsXG5cdFx0dGl0bGU6ICAgICAgICAgbDEwbi5zZXRGZWF0dXJlZEltYWdlVGl0bGUsXG5cdFx0bXVsdGlwbGU6ICAgICAgZmFsc2UsXG5cdFx0ZmlsdGVyYWJsZTogICAgJ3VwbG9hZGVkJyxcblx0XHR0b29sYmFyOiAgICAgICAnZmVhdHVyZWQtaW1hZ2UnLFxuXHRcdHByaW9yaXR5OiAgICAgIDYwLFxuXHRcdHN5bmNTZWxlY3Rpb246IHRydWVcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGlicmFyeSwgY29tcGFyYXRvcjtcblxuXHRcdC8vIElmIHdlIGhhdmVuJ3QgYmVlbiBwcm92aWRlZCBhIGBsaWJyYXJ5YCwgY3JlYXRlIGEgYFNlbGVjdGlvbmAuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCB3cC5tZWRpYS5xdWVyeSh7IHR5cGU6ICdpbWFnZScgfSkgKTtcblx0XHR9XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdGxpYnJhcnkgICAgPSB0aGlzLmdldCgnbGlicmFyeScpO1xuXHRcdGNvbXBhcmF0b3IgPSBsaWJyYXJ5LmNvbXBhcmF0b3I7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgbGlicmFyeSdzIGNvbXBhcmF0b3IgdG8gcHVzaCBpdGVtcyB0aGF0IGFyZSBub3QgaW5cblx0XHQvLyB0aGUgbWlycm9yZWQgcXVlcnkgdG8gdGhlIGZyb250IG9mIHRoZSBhZ2dyZWdhdGUgY29sbGVjdGlvbi5cblx0XHRsaWJyYXJ5LmNvbXBhcmF0b3IgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhSW5RdWVyeSA9ICEhIHRoaXMubWlycm9yaW5nLmdldCggYS5jaWQgKSxcblx0XHRcdFx0YkluUXVlcnkgPSAhISB0aGlzLm1pcnJvcmluZy5nZXQoIGIuY2lkICk7XG5cblx0XHRcdGlmICggISBhSW5RdWVyeSAmJiBiSW5RdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fSBlbHNlIGlmICggYUluUXVlcnkgJiYgISBiSW5RdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGFyYXRvci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBhbGwgaXRlbXMgaW4gdGhlIHNlbGVjdGlvbiB0byB0aGUgbGlicmFyeSwgc28gYW55IGZlYXR1cmVkXG5cdFx0Ly8gaW1hZ2VzIHRoYXQgYXJlIG5vdCBpbml0aWFsbHkgbG9hZGVkIHN0aWxsIGFwcGVhci5cblx0XHRsaWJyYXJ5Lm9ic2VydmUoIHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuXHRcdHRoaXMuZnJhbWUub24oICdvcGVuJywgdGhpcy51cGRhdGVTZWxlY3Rpb24sIHRoaXMgKTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZyYW1lLm9mZiggJ29wZW4nLCB0aGlzLnVwZGF0ZVNlbGVjdGlvbiwgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuZGVhY3RpdmF0ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0dXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXQoJ3NlbGVjdGlvbicpLFxuXHRcdFx0aWQgPSB3cC5tZWRpYS52aWV3LnNldHRpbmdzLnBvc3QuZmVhdHVyZWRJbWFnZUlkLFxuXHRcdFx0YXR0YWNobWVudDtcblxuXHRcdGlmICggJycgIT09IGlkICYmIC0xICE9PSBpZCApIHtcblx0XHRcdGF0dGFjaG1lbnQgPSBBdHRhY2htZW50LmdldCggaWQgKTtcblx0XHRcdGF0dGFjaG1lbnQuZmV0Y2goKTtcblx0XHR9XG5cblx0XHRzZWxlY3Rpb24ucmVzZXQoIGF0dGFjaG1lbnQgPyBbIGF0dGFjaG1lbnQgXSA6IFtdICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZlYXR1cmVkSW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuR2FsbGVyeUFkZFxuICpcbiAqIEEgc3RhdGUgZm9yIHNlbGVjdGluZyBtb3JlIGltYWdlcyB0byBhZGQgdG8gYSBnYWxsZXJ5LlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzXSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1nYWxsZXJ5LWxpYnJhcnldICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1BZGQgdG8gR2FsbGVyeV0gICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubXVsdGlwbGU9YWRkXSAgICAgICAgICAgIFdoZXRoZXIgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQuIEB0b2RvICdhZGQnIGRvZXNuJ3Qgc2VlbSBkbyBhbnl0aGluZyBzcGVjaWFsLCBhbmQgZ2V0cyB1c2VkIGFzIGEgYm9vbGVhbi5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IFthdHRyaWJ1dGVzLmxpYnJhcnldICAgICAgICAgICAgICAgICBUaGUgYXR0YWNobWVudHMgY29sbGVjdGlvbiB0byBicm93c2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYSBjb2xsZWN0aW9uIG9mIGFsbCBpbWFnZXMgd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ30gICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZmlsdGVyYWJsZT11cGxvYWRlZF0gICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgZmlsdGVyYWJsZSwgYW5kIGlmIHNvIHdoYXQgZmlsdGVycyBzaG91bGQgYmUgc2hvd24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnYWxsJywgJ3VwbG9hZGVkJywgb3IgJ3VuYXR0YWNoZWQnLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1nYWxsZXJ5XSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD11cGxvYWRdICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRkZW4gYnkgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcgaWYgJ2NvbnRlbnRVc2VyU2V0dGluZycgaXMgdHJ1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnJvdXRlcj1icm93c2VdICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSByb3V0ZXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudG9vbGJhcj1nYWxsZXJ5LWFkZF0gICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT10cnVlXSAgICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc2VhcmNoYWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNvcnRhYmxlPXRydWVdICAgICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmF1dG9TZWxlY3Q9dHJ1ZV0gICAgICAgICBXaGV0aGVyIGFuIHVwbG9hZGVkIGF0dGFjaG1lbnQgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnRVc2VyU2V0dGluZz10cnVlXSBXaGV0aGVyIHRoZSBjb250ZW50IHJlZ2lvbidzIG1vZGUgc2hvdWxkIGJlIHNldCBhbmQgcGVyc2lzdGVkIHBlciB1c2VyLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9MTAwXSAgICAgICAgICAgIFRoZSBwcmlvcml0eSBmb3IgdGhlIHN0YXRlIGxpbmsgaW4gdGhlIG1lZGlhIG1lbnUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zeW5jU2VsZWN0aW9uPWZhbHNlXSAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZSBiZWNhdXNlIGZvciB0aGlzIHN0YXRlLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IG9mIHRoZSBFZGl0IEdhbGxlcnkgc3RhdGUgaXMgdGhlIHNlbGVjdGlvbi5cbiAqL1xudmFyIFNlbGVjdGlvbiA9IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbixcblx0TGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0R2FsbGVyeUFkZDtcblxuR2FsbGVyeUFkZCA9IExpYnJhcnkuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IF8uZGVmYXVsdHMoe1xuXHRcdGlkOiAgICAgICAgICAgICdnYWxsZXJ5LWxpYnJhcnknLFxuXHRcdHRpdGxlOiAgICAgICAgIGwxMG4uYWRkVG9HYWxsZXJ5VGl0bGUsXG5cdFx0bXVsdGlwbGU6ICAgICAgJ2FkZCcsXG5cdFx0ZmlsdGVyYWJsZTogICAgJ3VwbG9hZGVkJyxcblx0XHRtZW51OiAgICAgICAgICAnZ2FsbGVyeScsXG5cdFx0dG9vbGJhcjogICAgICAgJ2dhbGxlcnktYWRkJyxcblx0XHRwcmlvcml0eTogICAgICAxMDAsXG5cdFx0c3luY1NlbGVjdGlvbjogZmFsc2Vcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQvLyBJZiBhIGxpYnJhcnkgd2Fzbid0IHN1cHBsaWVkLCBjcmVhdGUgYSBsaWJyYXJ5IG9mIGltYWdlcy5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ2xpYnJhcnknKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIHdwLm1lZGlhLnF1ZXJ5KHsgdHlwZTogJ2ltYWdlJyB9KSApO1xuXHRcdH1cblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRlZGl0ICAgID0gdGhpcy5mcmFtZS5zdGF0ZSgnZ2FsbGVyeS1lZGl0JykuZ2V0KCdsaWJyYXJ5Jyk7XG5cblx0XHRpZiAoIHRoaXMuZWRpdExpYnJhcnkgJiYgdGhpcy5lZGl0TGlicmFyeSAhPT0gZWRpdCApIHtcblx0XHRcdGxpYnJhcnkudW5vYnNlcnZlKCB0aGlzLmVkaXRMaWJyYXJ5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWNjZXB0cyBhdHRhY2htZW50cyB0aGF0IGV4aXN0IGluIHRoZSBvcmlnaW5hbCBsaWJyYXJ5IGFuZFxuXHRcdC8vIHRoYXQgZG8gbm90IGV4aXN0IGluIGdhbGxlcnkncyBsaWJyYXJ5LlxuXHRcdGxpYnJhcnkudmFsaWRhdG9yID0gZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gISEgdGhpcy5taXJyb3JpbmcuZ2V0KCBhdHRhY2htZW50LmNpZCApICYmICEgZWRpdC5nZXQoIGF0dGFjaG1lbnQuY2lkICkgJiYgU2VsZWN0aW9uLnByb3RvdHlwZS52YWxpZGF0b3IuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBSZXNldCB0aGUgbGlicmFyeSB0byBlbnN1cmUgdGhhdCBhbGwgYXR0YWNobWVudHMgYXJlIHJlLWFkZGVkXG5cdFx0Ly8gdG8gdGhlIGNvbGxlY3Rpb24uIERvIHNvIHNpbGVudGx5LCBhcyBjYWxsaW5nIGBvYnNlcnZlYCB3aWxsXG5cdFx0Ly8gdHJpZ2dlciB0aGUgYHJlc2V0YCBldmVudC5cblx0XHRsaWJyYXJ5LnJlc2V0KCBsaWJyYXJ5Lm1pcnJvcmluZy5tb2RlbHMsIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdGxpYnJhcnkub2JzZXJ2ZSggZWRpdCApO1xuXHRcdHRoaXMuZWRpdExpYnJhcnkgPSBlZGl0O1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBHYWxsZXJ5QWRkO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkdhbGxlcnlFZGl0XG4gKlxuICogQSBzdGF0ZSBmb3IgZWRpdGluZyBhIGdhbGxlcnkncyBpbWFnZXMgYW5kIHNldHRpbmdzLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzXSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWQ9Z2FsbGVyeS1lZGl0XSAgICAgICBVbmlxdWUgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRpdGxlPUVkaXQgR2FsbGVyeV0gICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgICBUaGUgY29sbGVjdGlvbiBvZiBhdHRhY2htZW50cyBpbiB0aGUgZ2FsbGVyeS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYW4gZW1wdHkgbWVkaWEubW9kZWwuU2VsZWN0aW9uIGNvbGxlY3Rpb24gaXMgY3JlYXRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWZhbHNlXSAgICAgICAgV2hldGhlciBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNlYXJjaGFibGU9ZmFsc2VdICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBzZWFyY2hhYmxlLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc29ydGFibGU9dHJ1ZV0gICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRhdGU9dHJ1ZV0gICAgICAgICAgICAgV2hldGhlciB0byBzaG93IHRoZSBkYXRlIGZpbHRlciBpbiB0aGUgYnJvd3NlcidzIHRvb2xiYXIuXG4gKiBAcGFyYW0ge3N0cmluZ3xmYWxzZX0gICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PWJyb3dzZV0gICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd8ZmFsc2V9ICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudG9vbGJhcj1pbWFnZS1kZXRhaWxzXSBJbml0aWFsIG1vZGUgZm9yIHRoZSB0b29sYmFyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRlc2NyaWJlPXRydWVdICAgICAgICAgV2hldGhlciB0byBvZmZlciBVSSB0byBkZXNjcmliZSBhdHRhY2htZW50cyAtIGUuZy4gY2FwdGlvbmluZyBpbWFnZXMgaW4gYSBnYWxsZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZGlzcGxheVNldHRpbmdzPXRydWVdICBXaGV0aGVyIHRvIHNob3cgdGhlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kcmFnSW5mbz10cnVlXSAgICAgICAgIFdoZXRoZXIgdG8gc2hvdyBpbnN0cnVjdGlvbmFsIHRleHQgYWJvdXQgdGhlIGF0dGFjaG1lbnRzIGJlaW5nIHNvcnRhYmxlLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWRlYWxDb2x1bW5XaWR0aD0xNzBdICBUaGUgaWRlYWwgY29sdW1uIHdpZHRoIGluIHBpeGVscyBmb3IgYXR0YWNobWVudHMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5lZGl0aW5nPWZhbHNlXSAgICAgICAgIFdoZXRoZXIgdGhlIGdhbGxlcnkgaXMgYmVpbmcgY3JlYXRlZCwgb3IgZWRpdGluZyBhbiBleGlzdGluZyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW50fSAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnByaW9yaXR5PTYwXSAgICAgICAgICAgVGhlIHByaW9yaXR5IGZvciB0aGUgc3RhdGUgbGluayBpbiB0aGUgbWVkaWEgbWVudS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnN5bmNTZWxlY3Rpb249ZmFsc2VdICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UgZm9yIHRoaXMgc3RhdGUsIGJlY2F1c2UgdGhlIGxpYnJhcnkgcGFzc2VkIGluICAqaXMqIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge3ZpZXd9ICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5BdHRhY2htZW50Vmlld10gICAgICAgIFRoZSBzaW5nbGUgYEF0dGFjaG1lbnRgIHZpZXcgdG8gYmUgdXNlZCBpbiB0aGUgYEF0dGFjaG1lbnRzYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm9uZSBzdXBwbGllZCwgZGVmYXVsdHMgdG8gd3AubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRMaWJyYXJ5LlxuICovXG52YXIgTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0R2FsbGVyeUVkaXQ7XG5cbkdhbGxlcnlFZGl0ID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICAgICAgICAgICdnYWxsZXJ5LWVkaXQnLFxuXHRcdHRpdGxlOiAgICAgICAgICAgIGwxMG4uZWRpdEdhbGxlcnlUaXRsZSxcblx0XHRtdWx0aXBsZTogICAgICAgICBmYWxzZSxcblx0XHRzZWFyY2hhYmxlOiAgICAgICBmYWxzZSxcblx0XHRzb3J0YWJsZTogICAgICAgICB0cnVlLFxuXHRcdGRhdGU6ICAgICAgICAgICAgIGZhbHNlLFxuXHRcdGRpc3BsYXk6ICAgICAgICAgIGZhbHNlLFxuXHRcdGNvbnRlbnQ6ICAgICAgICAgICdicm93c2UnLFxuXHRcdHRvb2xiYXI6ICAgICAgICAgICdnYWxsZXJ5LWVkaXQnLFxuXHRcdGRlc2NyaWJlOiAgICAgICAgIHRydWUsXG5cdFx0ZGlzcGxheVNldHRpbmdzOiAgdHJ1ZSxcblx0XHRkcmFnSW5mbzogICAgICAgICB0cnVlLFxuXHRcdGlkZWFsQ29sdW1uV2lkdGg6IDE3MCxcblx0XHRlZGl0aW5nOiAgICAgICAgICBmYWxzZSxcblx0XHRwcmlvcml0eTogICAgICAgICA2MCxcblx0XHRzeW5jU2VsZWN0aW9uOiAgICBmYWxzZVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIElmIHdlIGhhdmVuJ3QgYmVlbiBwcm92aWRlZCBhIGBsaWJyYXJ5YCwgY3JlYXRlIGEgYFNlbGVjdGlvbmAuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCkgKTtcblx0XHR9XG5cblx0XHQvLyBUaGUgc2luZ2xlIGBBdHRhY2htZW50YCB2aWV3IHRvIGJlIHVzZWQgaW4gdGhlIGBBdHRhY2htZW50c2Agdmlldy5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ0F0dGFjaG1lbnRWaWV3JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ0F0dGFjaG1lbnRWaWV3Jywgd3AubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRMaWJyYXJ5ICk7XG5cdFx0fVxuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsaWJyYXJ5ID0gdGhpcy5nZXQoJ2xpYnJhcnknKTtcblxuXHRcdC8vIExpbWl0IHRoZSBsaWJyYXJ5IHRvIGltYWdlcyBvbmx5LlxuXHRcdGxpYnJhcnkucHJvcHMuc2V0KCAndHlwZScsICdpbWFnZScgKTtcblxuXHRcdC8vIFdhdGNoIGZvciB1cGxvYWRlZCBhdHRhY2htZW50cy5cblx0XHR0aGlzLmdldCgnbGlicmFyeScpLm9ic2VydmUoIHdwLlVwbG9hZGVyLnF1ZXVlICk7XG5cblx0XHR0aGlzLmZyYW1lLm9uKCAnY29udGVudDpyZW5kZXI6YnJvd3NlJywgdGhpcy5nYWxsZXJ5U2V0dGluZ3MsIHRoaXMgKTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBTdG9wIHdhdGNoaW5nIGZvciB1cGxvYWRlZCBhdHRhY2htZW50cy5cblx0XHR0aGlzLmdldCgnbGlicmFyeScpLnVub2JzZXJ2ZSggd3AuVXBsb2FkZXIucXVldWUgKTtcblxuXHRcdHRoaXMuZnJhbWUub2ZmKCAnY29udGVudDpyZW5kZXI6YnJvd3NlJywgdGhpcy5nYWxsZXJ5U2V0dGluZ3MsIHRoaXMgKTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmRlYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIGJyb3dzZXJcblx0ICovXG5cdGdhbGxlcnlTZXR0aW5nczogZnVuY3Rpb24oIGJyb3dzZXIgKSB7XG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdkaXNwbGF5U2V0dGluZ3MnKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuZ2V0KCdsaWJyYXJ5Jyk7XG5cblx0XHRpZiAoICEgbGlicmFyeSB8fCAhIGJyb3dzZXIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGlicmFyeS5nYWxsZXJ5ID0gbGlicmFyeS5nYWxsZXJ5IHx8IG5ldyBCYWNrYm9uZS5Nb2RlbCgpO1xuXG5cdFx0YnJvd3Nlci5zaWRlYmFyLnNldCh7XG5cdFx0XHRnYWxsZXJ5OiBuZXcgd3AubWVkaWEudmlldy5TZXR0aW5ncy5HYWxsZXJ5KHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdFx0bW9kZWw6ICAgICAgbGlicmFyeS5nYWxsZXJ5LFxuXHRcdFx0XHRwcmlvcml0eTogICA0MFxuXHRcdFx0fSlcblx0XHR9KTtcblxuXHRcdGJyb3dzZXIudG9vbGJhci5zZXQoICdyZXZlcnNlJywge1xuXHRcdFx0dGV4dDogICAgIGwxMG4ucmV2ZXJzZU9yZGVyLFxuXHRcdFx0cHJpb3JpdHk6IDgwLFxuXG5cdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpYnJhcnkucmVzZXQoIGxpYnJhcnkudG9BcnJheSgpLnJldmVyc2UoKSApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBHYWxsZXJ5RWRpdDtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5JbWFnZURldGFpbHNcbiAqXG4gKiBBIHN0YXRlIGZvciBlZGl0aW5nIHRoZSBhdHRhY2htZW50IGRpc3BsYXkgc2V0dGluZ3Mgb2YgYW4gaW1hZ2UgdGhhdCdzIGJlZW5cbiAqIGluc2VydGVkIGludG8gdGhlIGVkaXRvci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzXSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1pbWFnZS1kZXRhaWxzXSAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1JbWFnZSBEZXRhaWxzXSAgIFRpdGxlIGZvciB0aGUgc3RhdGUuIERpc3BsYXlzIGluIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0cmlidXRlcy5pbWFnZSAgICAgICAgICAgICAgICAgICBUaGUgaW1hZ2UncyBtb2RlbC5cbiAqIEBwYXJhbSB7c3RyaW5nfGZhbHNlfSAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD1pbWFnZS1kZXRhaWxzXSBJbml0aWFsIG1vZGUgZm9yIHRoZSBjb250ZW50IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfGZhbHNlfSAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1mYWxzZV0gICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfGZhbHNlfSAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucm91dGVyPWZhbHNlXSAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSByb3V0ZXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd8ZmFsc2V9ICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPWltYWdlLWRldGFpbHNdIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5lZGl0aW5nPWZhbHNlXSAgICAgICAgIFVudXNlZC5cbiAqIEBwYXJhbSB7aW50fSAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9NjBdICAgICAgICAgICBVbnVzZWQuXG4gKlxuICogQHRvZG8gVGhpcyBzdGF0ZSBpbmhlcml0cyBzb21lIGRlZmF1bHRzIGZyb20gbWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyxcbiAqICAgICAgIGhvd2V2ZXIgdGhpcyBtYXkgbm90IGRvIGFueXRoaW5nLlxuICovXG52YXIgU3RhdGUgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLFxuXHRMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRJbWFnZURldGFpbHM7XG5cbkltYWdlRGV0YWlscyA9IFN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiBfLmRlZmF1bHRzKHtcblx0XHRpZDogICAgICAgJ2ltYWdlLWRldGFpbHMnLFxuXHRcdHRpdGxlOiAgICBsMTBuLmltYWdlRGV0YWlsc1RpdGxlLFxuXHRcdGNvbnRlbnQ6ICAnaW1hZ2UtZGV0YWlscycsXG5cdFx0bWVudTogICAgIGZhbHNlLFxuXHRcdHJvdXRlcjogICBmYWxzZSxcblx0XHR0b29sYmFyOiAgJ2ltYWdlLWRldGFpbHMnLFxuXHRcdGVkaXRpbmc6ICBmYWxzZSxcblx0XHRwcmlvcml0eTogNjBcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zIEF0dHJpYnV0ZXNcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHRoaXMuaW1hZ2UgPSBvcHRpb25zLmltYWdlO1xuXHRcdFN0YXRlLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5tb2RhbC4kZWwuYWRkQ2xhc3MoJ2ltYWdlLWRldGFpbHMnKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSW1hZ2VEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnlcbiAqXG4gKiBBIHN0YXRlIGZvciBjaG9vc2luZyBhbiBhdHRhY2htZW50IG9yIGdyb3VwIG9mIGF0dGFjaG1lbnRzIGZyb20gdGhlIG1lZGlhIGxpYnJhcnkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKiBAbWl4ZXMgbWVkaWEuc2VsZWN0aW9uU3luY1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWQ9bGlicmFyeV0gICAgICAgICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1NZWRpYSBsaWJyYXJ5XSAgICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIG1lZGlhIG1lbnUgYW5kIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9ICAgICAgW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIGJyb3dzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGEgY29sbGVjdGlvbiBvZiBhbGwgYXR0YWNobWVudHMgd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb258b2JqZWN0fSBbYXR0cmlidXRlcy5zZWxlY3Rpb25dICAgICAgICAgICAgICAgQSBjb2xsZWN0aW9uIHRvIGNvbnRhaW4gYXR0YWNobWVudCBzZWxlY3Rpb25zIHdpdGhpbiB0aGUgc3RhdGUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgJ3NlbGVjdGlvbicgYXR0cmlidXRlIGlzIGEgcGxhaW4gSlMgb2JqZWN0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBTZWxlY3Rpb24gd2lsbCBiZSBjcmVhdGVkIHVzaW5nIGl0cyB2YWx1ZXMgYXMgdGhlIHNlbGVjdGlvbiBpbnN0YW5jZSdzIGBwcm9wc2AgbW9kZWwuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIGl0IHdpbGwgY29weSB0aGUgbGlicmFyeSdzIGBwcm9wc2AgbW9kZWwuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWZhbHNlXSAgICAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PXVwbG9hZF0gICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVycmlkZGVuIGJ5IHBlcnNpc3RlbnQgdXNlciBzZXR0aW5nIGlmICdjb250ZW50VXNlclNldHRpbmcnIGlzIHRydWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm1lbnU9ZGVmYXVsdF0gICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucm91dGVyPWJyb3dzZV0gICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHJvdXRlciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRvb2xiYXI9c2VsZWN0XSAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSB0b29sYmFyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT10cnVlXSAgICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc2VhcmNoYWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9ICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZmlsdGVyYWJsZT1mYWxzZV0gICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgZmlsdGVyYWJsZSwgYW5kIGlmIHNvIHdoYXQgZmlsdGVycyBzaG91bGQgYmUgc2hvd24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICdhbGwnLCAndXBsb2FkZWQnLCBvciAndW5hdHRhY2hlZCcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNvcnRhYmxlPXRydWVdICAgICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuYXV0b1NlbGVjdD10cnVlXSAgICAgICAgIFdoZXRoZXIgYW4gdXBsb2FkZWQgYXR0YWNobWVudCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kZXNjcmliZT1mYWxzZV0gICAgICAgICAgV2hldGhlciB0byBvZmZlciBVSSB0byBkZXNjcmliZSBhdHRhY2htZW50cyAtIGUuZy4gY2FwdGlvbmluZyBpbWFnZXMgaW4gYSBnYWxsZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50VXNlclNldHRpbmc9dHJ1ZV0gV2hldGhlciB0aGUgY29udGVudCByZWdpb24ncyBtb2RlIHNob3VsZCBiZSBzZXQgYW5kIHBlcnNpc3RlZCBwZXIgdXNlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc3luY1NlbGVjdGlvbj10cnVlXSAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNlbGVjdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZyb20gdGhlIGxhc3Qgc3RhdGUuXG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRnZXRVc2VyU2V0dGluZyA9IHdpbmRvdy5nZXRVc2VyU2V0dGluZyxcblx0c2V0VXNlclNldHRpbmcgPSB3aW5kb3cuc2V0VXNlclNldHRpbmcsXG5cdExpYnJhcnk7XG5cbkxpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgICAgICAgICAgICAnbGlicmFyeScsXG5cdFx0dGl0bGU6ICAgICAgICAgICAgICBsMTBuLm1lZGlhTGlicmFyeVRpdGxlLFxuXHRcdG11bHRpcGxlOiAgICAgICAgICAgZmFsc2UsXG5cdFx0Y29udGVudDogICAgICAgICAgICAndXBsb2FkJyxcblx0XHRtZW51OiAgICAgICAgICAgICAgICdkZWZhdWx0Jyxcblx0XHRyb3V0ZXI6ICAgICAgICAgICAgICdicm93c2UnLFxuXHRcdHRvb2xiYXI6ICAgICAgICAgICAgJ3NlbGVjdCcsXG5cdFx0c2VhcmNoYWJsZTogICAgICAgICB0cnVlLFxuXHRcdGZpbHRlcmFibGU6ICAgICAgICAgZmFsc2UsXG5cdFx0c29ydGFibGU6ICAgICAgICAgICB0cnVlLFxuXHRcdGF1dG9TZWxlY3Q6ICAgICAgICAgdHJ1ZSxcblx0XHRkZXNjcmliZTogICAgICAgICAgIGZhbHNlLFxuXHRcdGNvbnRlbnRVc2VyU2V0dGluZzogdHJ1ZSxcblx0XHRzeW5jU2VsZWN0aW9uOiAgICAgIHRydWVcblx0fSxcblxuXHQvKipcblx0ICogSWYgYSBsaWJyYXJ5IGlzbid0IHByb3ZpZGVkLCBxdWVyeSBhbGwgbWVkaWEgaXRlbXMuXG5cdCAqIElmIGEgc2VsZWN0aW9uIGluc3RhbmNlIGlzbid0IHByb3ZpZGVkLCBjcmVhdGUgb25lLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRwcm9wcztcblxuXHRcdGlmICggISB0aGlzLmdldCgnbGlicmFyeScpICkge1xuXHRcdFx0dGhpcy5zZXQoICdsaWJyYXJ5Jywgd3AubWVkaWEucXVlcnkoKSApO1xuXHRcdH1cblxuXHRcdGlmICggISAoIHNlbGVjdGlvbiBpbnN0YW5jZW9mIHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiApICkge1xuXHRcdFx0cHJvcHMgPSBzZWxlY3Rpb247XG5cblx0XHRcdGlmICggISBwcm9wcyApIHtcblx0XHRcdFx0cHJvcHMgPSB0aGlzLmdldCgnbGlicmFyeScpLnByb3BzLnRvSlNPTigpO1xuXHRcdFx0XHRwcm9wcyA9IF8ub21pdCggcHJvcHMsICdvcmRlcmJ5JywgJ3F1ZXJ5JyApO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldCggJ3NlbGVjdGlvbicsIG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oIG51bGwsIHtcblx0XHRcdFx0bXVsdGlwbGU6IHRoaXMuZ2V0KCdtdWx0aXBsZScpLFxuXHRcdFx0XHRwcm9wczogcHJvcHNcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXNldERpc3BsYXlzKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3luY1NlbGVjdGlvbigpO1xuXG5cdFx0d3AuVXBsb2FkZXIucXVldWUub24oICdhZGQnLCB0aGlzLnVwbG9hZGluZywgdGhpcyApO1xuXG5cdFx0dGhpcy5nZXQoJ3NlbGVjdGlvbicpLm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIHRoaXMucmVmcmVzaENvbnRlbnQsIHRoaXMgKTtcblxuXHRcdGlmICggdGhpcy5nZXQoICdyb3V0ZXInICkgJiYgdGhpcy5nZXQoJ2NvbnRlbnRVc2VyU2V0dGluZycpICkge1xuXHRcdFx0dGhpcy5mcmFtZS5vbiggJ2NvbnRlbnQ6YWN0aXZhdGUnLCB0aGlzLnNhdmVDb250ZW50TW9kZSwgdGhpcyApO1xuXHRcdFx0dGhpcy5zZXQoICdjb250ZW50JywgZ2V0VXNlclNldHRpbmcoICdsaWJyYXJ5Q29udGVudCcsIHRoaXMuZ2V0KCdjb250ZW50JykgKSApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnJlY29yZFNlbGVjdGlvbigpO1xuXG5cdFx0dGhpcy5mcmFtZS5vZmYoICdjb250ZW50OmFjdGl2YXRlJywgdGhpcy5zYXZlQ29udGVudE1vZGUsIHRoaXMgKTtcblxuXHRcdC8vIFVuYmluZCBhbGwgZXZlbnQgaGFuZGxlcnMgdGhhdCB1c2UgdGhpcyBzdGF0ZSBhcyB0aGUgY29udGV4dFxuXHRcdC8vIGZyb20gdGhlIHNlbGVjdGlvbi5cblx0XHR0aGlzLmdldCgnc2VsZWN0aW9uJykub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cblx0XHR3cC5VcGxvYWRlci5xdWV1ZS5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0fSxcblxuXHQvKipcblx0ICogUmVzZXQgdGhlIGxpYnJhcnkgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZ2V0KCdzZWxlY3Rpb24nKS5yZXNldCgpO1xuXHRcdHRoaXMucmVzZXREaXNwbGF5cygpO1xuXHRcdHRoaXMucmVmcmVzaENvbnRlbnQoKTtcblx0fSxcblxuXHQvKipcblx0ICogUmVzZXQgdGhlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBkZWZhdWx0cyB0byB0aGUgc2l0ZSBvcHRpb25zLlxuXHQgKlxuXHQgKiBJZiBzaXRlIG9wdGlvbnMgZG9uJ3QgZGVmaW5lIHRoZW0sIGZhbGwgYmFjayB0byBhIHBlcnNpc3RlbnQgdXNlciBzZXR0aW5nLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHJlc2V0RGlzcGxheXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkZWZhdWx0UHJvcHMgPSB3cC5tZWRpYS52aWV3LnNldHRpbmdzLmRlZmF1bHRQcm9wcztcblx0XHR0aGlzLl9kaXNwbGF5cyA9IFtdO1xuXHRcdHRoaXMuX2RlZmF1bHREaXNwbGF5U2V0dGluZ3MgPSB7XG5cdFx0XHRhbGlnbjogZ2V0VXNlclNldHRpbmcoICdhbGlnbicsIGRlZmF1bHRQcm9wcy5hbGlnbiApIHx8ICdub25lJyxcblx0XHRcdHNpemU6ICBnZXRVc2VyU2V0dGluZyggJ2ltZ3NpemUnLCBkZWZhdWx0UHJvcHMuc2l6ZSApIHx8ICdtZWRpdW0nLFxuXHRcdFx0bGluazogIGdldFVzZXJTZXR0aW5nKCAndXJsYnV0dG9uJywgZGVmYXVsdFByb3BzLmxpbmsgKSB8fCAnbm9uZSdcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBtb2RlbCB0byByZXByZXNlbnQgZGlzcGxheSBzZXR0aW5ncyAoYWxpZ25tZW50LCBldGMuKSBmb3IgYW4gYXR0YWNobWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7QmFja2JvbmUuTW9kZWx9XG5cdCAqL1xuXHRkaXNwbGF5OiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHR2YXIgZGlzcGxheXMgPSB0aGlzLl9kaXNwbGF5cztcblxuXHRcdGlmICggISBkaXNwbGF5c1sgYXR0YWNobWVudC5jaWQgXSApIHtcblx0XHRcdGRpc3BsYXlzWyBhdHRhY2htZW50LmNpZCBdID0gbmV3IEJhY2tib25lLk1vZGVsKCB0aGlzLmRlZmF1bHREaXNwbGF5U2V0dGluZ3MoIGF0dGFjaG1lbnQgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzcGxheXNbIGF0dGFjaG1lbnQuY2lkIF07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdpdmVuIGFuIGF0dGFjaG1lbnQsIGNyZWF0ZSBhdHRhY2htZW50IGRpc3BsYXkgc2V0dGluZ3MgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHNpbmNlIDMuNi4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxuXHQgKi9cblx0ZGVmYXVsdERpc3BsYXlTZXR0aW5nczogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIHNldHRpbmdzID0gXy5jbG9uZSggdGhpcy5fZGVmYXVsdERpc3BsYXlTZXR0aW5ncyApO1xuXG5cdFx0aWYgKCBzZXR0aW5ncy5jYW5FbWJlZCA9IHRoaXMuY2FuRW1iZWQoIGF0dGFjaG1lbnQgKSApIHtcblx0XHRcdHNldHRpbmdzLmxpbmsgPSAnZW1iZWQnO1xuXHRcdH0gZWxzZSBpZiAoICEgdGhpcy5pc0ltYWdlQXR0YWNobWVudCggYXR0YWNobWVudCApICYmIHNldHRpbmdzLmxpbmsgPT09ICdub25lJyApIHtcblx0XHRcdHNldHRpbmdzLmxpbmsgPSAnZmlsZSc7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIGFuIGF0dGFjaG1lbnQgaXMgaW1hZ2UuXG5cdCAqXG5cdCAqIEBzaW5jZSA0LjQuMVxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqL1xuXHRpc0ltYWdlQXR0YWNobWVudDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0Ly8gSWYgdXBsb2FkaW5nLCB3ZSBrbm93IHRoZSBmaWxlbmFtZSBidXQgbm90IHRoZSBtaW1lIHR5cGUuXG5cdFx0aWYgKCBhdHRhY2htZW50LmdldCgndXBsb2FkaW5nJykgKSB7XG5cdFx0XHRyZXR1cm4gL1xcLihqcGU/Z3xwbmd8Z2lmKSQvaS50ZXN0KCBhdHRhY2htZW50LmdldCgnZmlsZW5hbWUnKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhdHRhY2htZW50LmdldCgndHlwZScpID09PSAnaW1hZ2UnO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIGFuIGF0dGFjaG1lbnQgY2FuIGJlIGVtYmVkZGVkIChhdWRpbyBvciB2aWRlbykuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjYuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqL1xuXHRjYW5FbWJlZDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0Ly8gSWYgdXBsb2FkaW5nLCB3ZSBrbm93IHRoZSBmaWxlbmFtZSBidXQgbm90IHRoZSBtaW1lIHR5cGUuXG5cdFx0aWYgKCAhIGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRpbmcnKSApIHtcblx0XHRcdHZhciB0eXBlID0gYXR0YWNobWVudC5nZXQoJ3R5cGUnKTtcblx0XHRcdGlmICggdHlwZSAhPT0gJ2F1ZGlvJyAmJiB0eXBlICE9PSAndmlkZW8nICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF8uY29udGFpbnMoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuZW1iZWRFeHRzLCBhdHRhY2htZW50LmdldCgnZmlsZW5hbWUnKS5zcGxpdCgnLicpLnBvcCgpICk7XG5cdH0sXG5cblxuXHQvKipcblx0ICogSWYgdGhlIHN0YXRlIGlzIGFjdGl2ZSwgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLCBhbmQgdGhlIGN1cnJlbnRcblx0ICogY29udGVudCBtb2RlIGlzIG5vdCBhbiBvcHRpb24gaW4gdGhlIHN0YXRlJ3Mgcm91dGVyIChwcm92aWRlZFxuXHQgKiB0aGUgc3RhdGUgaGFzIGEgcm91dGVyKSwgcmVzZXQgdGhlIGNvbnRlbnQgbW9kZSB0byB0aGUgZGVmYXVsdC5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRyZWZyZXNoQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdGZyYW1lID0gdGhpcy5mcmFtZSxcblx0XHRcdHJvdXRlciA9IGZyYW1lLnJvdXRlci5nZXQoKSxcblx0XHRcdG1vZGUgPSBmcmFtZS5jb250ZW50Lm1vZGUoKTtcblxuXHRcdGlmICggdGhpcy5hY3RpdmUgJiYgISBzZWxlY3Rpb24ubGVuZ3RoICYmIHJvdXRlciAmJiAhIHJvdXRlci5nZXQoIG1vZGUgKSApIHtcblx0XHRcdHRoaXMuZnJhbWUuY29udGVudC5yZW5kZXIoIHRoaXMuZ2V0KCdjb250ZW50JykgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIGhhbmRsZXIgd2hlbiBhbiBhdHRhY2htZW50IGlzIHVwbG9hZGVkLlxuXHQgKlxuXHQgKiBTd2l0Y2ggdG8gdGhlIE1lZGlhIExpYnJhcnkgaWYgdXBsb2FkZWQgZnJvbSB0aGUgJ1VwbG9hZCBGaWxlcycgdGFiLlxuXHQgKlxuXHQgKiBBZGRzIGFueSB1cGxvYWRpbmcgYXR0YWNobWVudHMgdG8gdGhlIHNlbGVjdGlvbi5cblx0ICpcblx0ICogSWYgdGhlIHN0YXRlIG9ubHkgc3VwcG9ydHMgb25lIGF0dGFjaG1lbnQgdG8gYmUgc2VsZWN0ZWQgYW5kIG11bHRpcGxlXG5cdCAqIGF0dGFjaG1lbnRzIGFyZSB1cGxvYWRlZCwgdGhlIGxhc3QgYXR0YWNobWVudCBpbiB0aGUgdXBsb2FkIHF1ZXVlIHdpbGxcblx0ICogYmUgc2VsZWN0ZWQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICovXG5cdHVwbG9hZGluZzogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIGNvbnRlbnQgPSB0aGlzLmZyYW1lLmNvbnRlbnQ7XG5cblx0XHRpZiAoICd1cGxvYWQnID09PSBjb250ZW50Lm1vZGUoKSApIHtcblx0XHRcdHRoaXMuZnJhbWUuY29udGVudC5tb2RlKCdicm93c2UnKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZ2V0KCAnYXV0b1NlbGVjdCcgKSApIHtcblx0XHRcdHRoaXMuZ2V0KCdzZWxlY3Rpb24nKS5hZGQoIGF0dGFjaG1lbnQgKTtcblx0XHRcdHRoaXMuZnJhbWUudHJpZ2dlciggJ2xpYnJhcnk6c2VsZWN0aW9uOmFkZCcgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBlcnNpc3QgdGhlIG1vZGUgb2YgdGhlIGNvbnRlbnQgcmVnaW9uIGFzIGEgdXNlciBzZXR0aW5nLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHNhdmVDb250ZW50TW9kZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAnYnJvd3NlJyAhPT0gdGhpcy5nZXQoJ3JvdXRlcicpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBtb2RlID0gdGhpcy5mcmFtZS5jb250ZW50Lm1vZGUoKSxcblx0XHRcdHZpZXcgPSB0aGlzLmZyYW1lLnJvdXRlci5nZXQoKTtcblxuXHRcdGlmICggdmlldyAmJiB2aWV3LmdldCggbW9kZSApICkge1xuXHRcdFx0c2V0VXNlclNldHRpbmcoICdsaWJyYXJ5Q29udGVudCcsIG1vZGUgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vLyBNYWtlIHNlbGVjdGlvblN5bmMgYXZhaWxhYmxlIG9uIGFueSBNZWRpYSBMaWJyYXJ5IHN0YXRlLlxuXy5leHRlbmQoIExpYnJhcnkucHJvdG90eXBlLCB3cC5tZWRpYS5zZWxlY3Rpb25TeW5jICk7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlicmFyeTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5NZWRpYUxpYnJhcnlcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIExpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnksXG5cdE1lZGlhTGlicmFyeTtcblxuTWVkaWFMaWJyYXJ5ID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czogXy5kZWZhdWx0cyh7XG5cdFx0Ly8gQXR0YWNobWVudHMgYnJvd3NlciBkZWZhdWx0cy4gQHNlZSBtZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3NlclxuXHRcdGZpbHRlcmFibGU6ICAgICAgJ3VwbG9hZGVkJyxcblxuXHRcdGRpc3BsYXlTZXR0aW5nczogZmFsc2UsXG5cdFx0cHJpb3JpdHk6ICAgICAgICA4MCxcblx0XHRzeW5jU2VsZWN0aW9uOiAgIGZhbHNlXG5cdH0sIExpYnJhcnkucHJvdG90eXBlLmRlZmF1bHRzICksXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKlxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dGhpcy5tZWRpYSA9IG9wdGlvbnMubWVkaWE7XG5cdFx0dGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuXHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIHdwLm1lZGlhLnF1ZXJ5KHsgdHlwZTogdGhpcy50eXBlIH0pICk7XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQHRvZG8gdGhpcyBzaG91bGQgdXNlIHRoaXMuZnJhbWUuXG5cdFx0aWYgKCB3cC5tZWRpYS5mcmFtZS5sYXN0TWltZSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIHdwLm1lZGlhLnF1ZXJ5KHsgdHlwZTogd3AubWVkaWEuZnJhbWUubGFzdE1pbWUgfSkgKTtcblx0XHRcdGRlbGV0ZSB3cC5tZWRpYS5mcmFtZS5sYXN0TWltZTtcblx0XHR9XG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNZWRpYUxpYnJhcnk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uXG4gKlxuICogQSByZWdpb24gaXMgYSBwZXJzaXN0ZW50IGFwcGxpY2F0aW9uIGxheW91dCBhcmVhLlxuICpcbiAqIEEgcmVnaW9uIGFzc3VtZXMgb25lIG1vZGUgYXQgYW55IHRpbWUsIGFuZCBjYW4gYmUgc3dpdGNoZWQgdG8gYW5vdGhlci5cbiAqXG4gKiBXaGVuIG1vZGUgY2hhbmdlcywgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgb24gdGhlIHJlZ2lvbidzIHBhcmVudCB2aWV3LlxuICogVGhlIHBhcmVudCB2aWV3IHdpbGwgbGlzdGVuIHRvIHNwZWNpZmljIGV2ZW50cyBhbmQgZmlsbCB0aGUgcmVnaW9uIHdpdGggYW5cbiAqIGFwcHJvcHJpYXRlIHZpZXcgZGVwZW5kaW5nIG9uIG1vZGUuIEZvciBleGFtcGxlLCBhIGZyYW1lIGxpc3RlbnMgZm9yIHRoZVxuICogJ2Jyb3dzZScgbW9kZSB0IGJlIGFjdGl2YXRlZCBvbiB0aGUgJ2NvbnRlbnQnIHZpZXcgYW5kIHRoZW4gZmlsbHMgdGhlIHJlZ2lvblxuICogd2l0aCBhbiBBdHRhY2htZW50c0Jyb3dzZXIgdmlldy5cbiAqXG4gKiBAY2xhc3NcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgIG9wdGlvbnMgICAgICAgICAgT3B0aW9ucyBoYXNoIGZvciB0aGUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBvcHRpb25zLmlkICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcmVnaW9uLlxuICogQHBhcmFtIHtCYWNrYm9uZS5WaWV3fSBvcHRpb25zLnZpZXcgICAgIEEgcGFyZW50IHZpZXcgdGhlIHJlZ2lvbiBleGlzdHMgd2l0aGluLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICBvcHRpb25zLnNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmb3IgdGhlIHJlZ2lvbiB3aXRoaW4gdGhlIHBhcmVudCB2aWV3LlxuICovXG52YXIgUmVnaW9uID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdF8uZXh0ZW5kKCB0aGlzLCBfLnBpY2soIG9wdGlvbnMgfHwge30sICdpZCcsICd2aWV3JywgJ3NlbGVjdG9yJyApICk7XG59O1xuXG4vLyBVc2UgQmFja2JvbmUncyBzZWxmLXByb3BhZ2F0aW5nIGBleHRlbmRgIGluaGVyaXRhbmNlIG1ldGhvZC5cblJlZ2lvbi5leHRlbmQgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQ7XG5cbl8uZXh0ZW5kKCBSZWdpb24ucHJvdG90eXBlLCB7XG5cdC8qKlxuXHQgKiBBY3RpdmF0ZSBhIG1vZGUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbW9kZVxuXHQgKlxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTphY3RpdmF0ZTp7dGhpcy5fbW9kZX1cblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06YWN0aXZhdGVcblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06ZGVhY3RpdmF0ZTp7dGhpcy5fbW9kZX1cblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06ZGVhY3RpdmF0ZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuY29udHJvbGxlci5SZWdpb259IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nLlxuXHQgKi9cblx0bW9kZTogZnVuY3Rpb24oIG1vZGUgKSB7XG5cdFx0aWYgKCAhIG1vZGUgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fbW9kZTtcblx0XHR9XG5cdFx0Ly8gQmFpbCBpZiB3ZSdyZSB0cnlpbmcgdG8gY2hhbmdlIHRvIHRoZSBjdXJyZW50IG1vZGUuXG5cdFx0aWYgKCBtb2RlID09PSB0aGlzLl9tb2RlICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogUmVnaW9uIG1vZGUgZGVhY3RpdmF0aW9uIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06ZGVhY3RpdmF0ZTp7dGhpcy5fbW9kZX1cblx0XHQgKiBAZXZlbnQgdGhpcy52aWV3I3t0aGlzLmlkfTpkZWFjdGl2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy50cmlnZ2VyKCdkZWFjdGl2YXRlJyk7XG5cblx0XHR0aGlzLl9tb2RlID0gbW9kZTtcblx0XHR0aGlzLnJlbmRlciggbW9kZSApO1xuXG5cdFx0LyoqXG5cdFx0ICogUmVnaW9uIG1vZGUgYWN0aXZhdGlvbiBldmVudC5cblx0XHQgKlxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmFjdGl2YXRlOnt0aGlzLl9tb2RlfVxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmFjdGl2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy50cmlnZ2VyKCdhY3RpdmF0ZScpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogUmVuZGVyIGEgbW9kZS5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlXG5cdCAqXG5cdCAqIEBmaXJlcyB0aGlzLnZpZXcje3RoaXMuaWR9OmNyZWF0ZTp7dGhpcy5fbW9kZX1cblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06Y3JlYXRlXG5cdCAqIEBmaXJlcyB0aGlzLnZpZXcje3RoaXMuaWR9OnJlbmRlcjp7dGhpcy5fbW9kZX1cblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06cmVuZGVyXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvbn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oIG1vZGUgKSB7XG5cdFx0Ly8gSWYgdGhlIG1vZGUgaXNuJ3QgYWN0aXZlLCBhY3RpdmF0ZSBpdC5cblx0XHRpZiAoIG1vZGUgJiYgbW9kZSAhPT0gdGhpcy5fbW9kZSApIHtcblx0XHRcdHJldHVybiB0aGlzLm1vZGUoIG1vZGUgKTtcblx0XHR9XG5cblx0XHR2YXIgc2V0ID0geyB2aWV3OiBudWxsIH0sXG5cdFx0XHR2aWV3O1xuXG5cdFx0LyoqXG5cdFx0ICogQ3JlYXRlIHJlZ2lvbiB2aWV3IGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogUmVnaW9uIHZpZXcgY3JlYXRpb24gdGFrZXMgcGxhY2UgaW4gYW4gZXZlbnQgY2FsbGJhY2sgb24gdGhlIGZyYW1lLlxuXHRcdCAqXG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06Y3JlYXRlOnt0aGlzLl9tb2RlfVxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmNyZWF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMudHJpZ2dlciggJ2NyZWF0ZScsIHNldCApO1xuXHRcdHZpZXcgPSBzZXQudmlldztcblxuXHRcdC8qKlxuXHRcdCAqIFJlbmRlciByZWdpb24gdmlldyBldmVudC5cblx0XHQgKlxuXHRcdCAqIFJlZ2lvbiB2aWV3IGNyZWF0aW9uIHRha2VzIHBsYWNlIGluIGFuIGV2ZW50IGNhbGxiYWNrIG9uIHRoZSBmcmFtZS5cblx0XHQgKlxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmNyZWF0ZTp7dGhpcy5fbW9kZX1cblx0XHQgKiBAZXZlbnQgdGhpcy52aWV3I3t0aGlzLmlkfTpjcmVhdGVcblx0XHQgKi9cblx0XHR0aGlzLnRyaWdnZXIoICdyZW5kZXInLCB2aWV3ICk7XG5cdFx0aWYgKCB2aWV3ICkge1xuXHRcdFx0dGhpcy5zZXQoIHZpZXcgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVnaW9uJ3Mgdmlldy5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fVxuXHQgKi9cblx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy52aWV3LnZpZXdzLmZpcnN0KCB0aGlzLnNlbGVjdG9yICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFNldCB0aGUgcmVnaW9uJ3MgdmlldyBhcyBhIHN1YnZpZXcgb2YgdGhlIGZyYW1lLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHZpZXdzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge3dwLkJhY2tib25lLlN1YnZpZXdzfSBTdWJ2aWV3cyBpcyByZXR1cm5lZCB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0c2V0OiBmdW5jdGlvbiggdmlld3MsIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy5hZGQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudmlldy52aWV3cy5zZXQoIHRoaXMuc2VsZWN0b3IsIHZpZXdzLCBvcHRpb25zICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXIgcmVnaW9uYWwgdmlldyBldmVudHMgb24gdGhlIGZyYW1lLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG5cdCAqIEByZXR1cm5zIHt1bmRlZmluZWR8d3AubWVkaWEuY29udHJvbGxlci5SZWdpb259IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nLlxuXHQgKi9cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBiYXNlLCBhcmdzO1xuXG5cdFx0aWYgKCAhIHRoaXMuX21vZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YXJncyA9IF8udG9BcnJheSggYXJndW1lbnRzICk7XG5cdFx0YmFzZSA9IHRoaXMuaWQgKyAnOicgKyBldmVudDtcblxuXHRcdC8vIFRyaWdnZXIgYHt0aGlzLmlkfTp7ZXZlbnR9Ont0aGlzLl9tb2RlfWAgZXZlbnQgb24gdGhlIGZyYW1lLlxuXHRcdGFyZ3NbMF0gPSBiYXNlICsgJzonICsgdGhpcy5fbW9kZTtcblx0XHR0aGlzLnZpZXcudHJpZ2dlci5hcHBseSggdGhpcy52aWV3LCBhcmdzICk7XG5cblx0XHQvLyBUcmlnZ2VyIGB7dGhpcy5pZH06e2V2ZW50fWAgZXZlbnQgb24gdGhlIGZyYW1lLlxuXHRcdGFyZ3NbMF0gPSBiYXNlO1xuXHRcdHRoaXMudmlldy50cmlnZ2VyLmFwcGx5KCB0aGlzLnZpZXcsIGFyZ3MgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVnaW9uO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLlJlcGxhY2VJbWFnZVxuICpcbiAqIEEgc3RhdGUgZm9yIHJlcGxhY2luZyBhbiBpbWFnZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlc10gICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWQ9cmVwbGFjZS1pbWFnZV0gICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudGl0bGU9UmVwbGFjZSBJbWFnZV0gICAgIFRpdGxlIGZvciB0aGUgc3RhdGUuIERpc3BsYXlzIGluIHRoZSBtZWRpYSBtZW51IGFuZCB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBbYXR0cmlidXRlcy5saWJyYXJ5XSAgICAgICAgICAgICAgICAgVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gYnJvd3NlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGEgY29sbGVjdGlvbiBvZiBhbGwgaW1hZ2VzIHdpbGwgYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWZhbHNlXSAgICAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD11cGxvYWRdICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRkZW4gYnkgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcgaWYgJ2NvbnRlbnRVc2VyU2V0dGluZycgaXMgdHJ1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm1lbnU9ZGVmYXVsdF0gICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnJvdXRlcj1icm93c2VdICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSByb3V0ZXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudG9vbGJhcj1yZXBsYWNlXSAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9NjBdICAgICAgICAgICAgIFRoZSBwcmlvcml0eSBmb3IgdGhlIHN0YXRlIGxpbmsgaW4gdGhlIG1lZGlhIG1lbnUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zZWFyY2hhYmxlPXRydWVdICAgICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBzZWFyY2hhYmxlLlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ30gICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZmlsdGVyYWJsZT11cGxvYWRlZF0gICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgZmlsdGVyYWJsZSwgYW5kIGlmIHNvIHdoYXQgZmlsdGVycyBzaG91bGQgYmUgc2hvd24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnYWxsJywgJ3VwbG9hZGVkJywgb3IgJ3VuYXR0YWNoZWQnLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc29ydGFibGU9dHJ1ZV0gICAgICAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNob3VsZCBiZSBzb3J0YWJsZS4gRGVwZW5kcyBvbiB0aGUgb3JkZXJieSBwcm9wZXJ0eSBiZWluZyBzZXQgdG8gbWVudU9yZGVyIG9uIHRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuYXV0b1NlbGVjdD10cnVlXSAgICAgICAgIFdoZXRoZXIgYW4gdXBsb2FkZWQgYXR0YWNobWVudCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZGVzY3JpYmU9ZmFsc2VdICAgICAgICAgIFdoZXRoZXIgdG8gb2ZmZXIgVUkgdG8gZGVzY3JpYmUgYXR0YWNobWVudHMgLSBlLmcuIGNhcHRpb25pbmcgaW1hZ2VzIGluIGEgZ2FsbGVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnRVc2VyU2V0dGluZz10cnVlXSBXaGV0aGVyIHRoZSBjb250ZW50IHJlZ2lvbidzIG1vZGUgc2hvdWxkIGJlIHNldCBhbmQgcGVyc2lzdGVkIHBlciB1c2VyLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc3luY1NlbGVjdGlvbj10cnVlXSAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNlbGVjdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZyb20gdGhlIGxhc3Qgc3RhdGUuXG4gKi9cbnZhciBMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRSZXBsYWNlSW1hZ2U7XG5cblJlcGxhY2VJbWFnZSA9IExpYnJhcnkuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IF8uZGVmYXVsdHMoe1xuXHRcdGlkOiAgICAgICAgICAgICdyZXBsYWNlLWltYWdlJyxcblx0XHR0aXRsZTogICAgICAgICBsMTBuLnJlcGxhY2VJbWFnZVRpdGxlLFxuXHRcdG11bHRpcGxlOiAgICAgIGZhbHNlLFxuXHRcdGZpbHRlcmFibGU6ICAgICd1cGxvYWRlZCcsXG5cdFx0dG9vbGJhcjogICAgICAgJ3JlcGxhY2UnLFxuXHRcdG1lbnU6ICAgICAgICAgIGZhbHNlLFxuXHRcdHByaW9yaXR5OiAgICAgIDYwLFxuXHRcdHN5bmNTZWxlY3Rpb246IHRydWVcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgbGlicmFyeSwgY29tcGFyYXRvcjtcblxuXHRcdHRoaXMuaW1hZ2UgPSBvcHRpb25zLmltYWdlO1xuXHRcdC8vIElmIHdlIGhhdmVuJ3QgYmVlbiBwcm92aWRlZCBhIGBsaWJyYXJ5YCwgY3JlYXRlIGEgYFNlbGVjdGlvbmAuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCB3cC5tZWRpYS5xdWVyeSh7IHR5cGU6ICdpbWFnZScgfSkgKTtcblx0XHR9XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdGxpYnJhcnkgICAgPSB0aGlzLmdldCgnbGlicmFyeScpO1xuXHRcdGNvbXBhcmF0b3IgPSBsaWJyYXJ5LmNvbXBhcmF0b3I7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgbGlicmFyeSdzIGNvbXBhcmF0b3IgdG8gcHVzaCBpdGVtcyB0aGF0IGFyZSBub3QgaW5cblx0XHQvLyB0aGUgbWlycm9yZWQgcXVlcnkgdG8gdGhlIGZyb250IG9mIHRoZSBhZ2dyZWdhdGUgY29sbGVjdGlvbi5cblx0XHRsaWJyYXJ5LmNvbXBhcmF0b3IgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhSW5RdWVyeSA9ICEhIHRoaXMubWlycm9yaW5nLmdldCggYS5jaWQgKSxcblx0XHRcdFx0YkluUXVlcnkgPSAhISB0aGlzLm1pcnJvcmluZy5nZXQoIGIuY2lkICk7XG5cblx0XHRcdGlmICggISBhSW5RdWVyeSAmJiBiSW5RdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fSBlbHNlIGlmICggYUluUXVlcnkgJiYgISBiSW5RdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGFyYXRvci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBhbGwgaXRlbXMgaW4gdGhlIHNlbGVjdGlvbiB0byB0aGUgbGlicmFyeSwgc28gYW55IGZlYXR1cmVkXG5cdFx0Ly8gaW1hZ2VzIHRoYXQgYXJlIG5vdCBpbml0aWFsbHkgbG9hZGVkIHN0aWxsIGFwcGVhci5cblx0XHRsaWJyYXJ5Lm9ic2VydmUoIHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuXHRcdExpYnJhcnkucHJvdG90eXBlLmFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqL1xuXHR1cGRhdGVTZWxlY3Rpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRhdHRhY2htZW50ID0gdGhpcy5pbWFnZS5hdHRhY2htZW50O1xuXG5cdFx0c2VsZWN0aW9uLnJlc2V0KCBhdHRhY2htZW50ID8gWyBhdHRhY2htZW50IF0gOiBbXSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZXBsYWNlSW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuU2l0ZUljb25Dcm9wcGVyXG4gKlxuICogQSBzdGF0ZSBmb3IgY3JvcHBpbmcgYSBTaXRlIEljb24uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5Dcm9wcGVyXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBDb250cm9sbGVyID0gd3AubWVkaWEuY29udHJvbGxlcixcblx0U2l0ZUljb25Dcm9wcGVyO1xuXG5TaXRlSWNvbkNyb3BwZXIgPSBDb250cm9sbGVyLkNyb3BwZXIuZXh0ZW5kKHtcblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZnJhbWUub24oICdjb250ZW50OmNyZWF0ZTpjcm9wJywgdGhpcy5jcmVhdGVDcm9wQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMuZnJhbWUub24oICdjbG9zZScsIHRoaXMucmVtb3ZlQ3JvcHBlciwgdGhpcyApO1xuXHRcdHRoaXMuc2V0KCdzZWxlY3Rpb24nLCBuZXcgQmFja2JvbmUuQ29sbGVjdGlvbih0aGlzLmZyYW1lLl9zZWxlY3Rpb24uc2luZ2xlKSk7XG5cdH0sXG5cblx0Y3JlYXRlQ3JvcENvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY3JvcHBlclZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5TaXRlSWNvbkNyb3BwZXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGF0dGFjaG1lbnQ6IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKS5maXJzdCgpXG5cdFx0fSk7XG5cdFx0dGhpcy5jcm9wcGVyVmlldy5vbignaW1hZ2UtbG9hZGVkJywgdGhpcy5jcmVhdGVDcm9wVG9vbGJhciwgdGhpcyk7XG5cdFx0dGhpcy5mcmFtZS5jb250ZW50LnNldCh0aGlzLmNyb3BwZXJWaWV3KTtcblxuXHR9LFxuXG5cdGRvQ3JvcDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIGNyb3BEZXRhaWxzID0gYXR0YWNobWVudC5nZXQoICdjcm9wRGV0YWlscycgKSxcblx0XHRcdGNvbnRyb2wgPSB0aGlzLmdldCggJ2NvbnRyb2wnICk7XG5cblx0XHRjcm9wRGV0YWlscy5kc3Rfd2lkdGggID0gY29udHJvbC5wYXJhbXMud2lkdGg7XG5cdFx0Y3JvcERldGFpbHMuZHN0X2hlaWdodCA9IGNvbnRyb2wucGFyYW1zLmhlaWdodDtcblxuXHRcdHJldHVybiB3cC5hamF4LnBvc3QoICdjcm9wLWltYWdlJywge1xuXHRcdFx0bm9uY2U6IGF0dGFjaG1lbnQuZ2V0KCAnbm9uY2VzJyApLmVkaXQsXG5cdFx0XHRpZDogYXR0YWNobWVudC5nZXQoICdpZCcgKSxcblx0XHRcdGNvbnRleHQ6ICdzaXRlLWljb24nLFxuXHRcdFx0Y3JvcERldGFpbHM6IGNyb3BEZXRhaWxzXG5cdFx0fSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlSWNvbkNyb3BwZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKlxuICogQSBzdGF0ZSBtYWNoaW5lIGtlZXBzIHRyYWNrIG9mIHN0YXRlLiBJdCBpcyBpbiBvbmUgc3RhdGUgYXQgYSB0aW1lLFxuICogYW5kIGNhbiBjaGFuZ2UgZnJvbSBvbmUgc3RhdGUgdG8gYW5vdGhlci5cbiAqXG4gKiBTdGF0ZXMgYXJlIHN0b3JlZCBhcyBtb2RlbHMgaW4gYSBCYWNrYm9uZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBzaW5jZSAzLjUuMFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKiBAbWl4aW5cbiAqIEBtaXhlcyBCYWNrYm9uZS5FdmVudHNcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGF0ZXNcbiAqL1xudmFyIFN0YXRlTWFjaGluZSA9IGZ1bmN0aW9uKCBzdGF0ZXMgKSB7XG5cdC8vIEB0b2RvIFRoaXMgaXMgZGVhZCBjb2RlLiBUaGUgc3RhdGVzIGNvbGxlY3Rpb24gZ2V0cyBjcmVhdGVkIGluIG1lZGlhLnZpZXcuRnJhbWUuX2NyZWF0ZVN0YXRlcy5cblx0dGhpcy5zdGF0ZXMgPSBuZXcgQmFja2JvbmUuQ29sbGVjdGlvbiggc3RhdGVzICk7XG59O1xuXG4vLyBVc2UgQmFja2JvbmUncyBzZWxmLXByb3BhZ2F0aW5nIGBleHRlbmRgIGluaGVyaXRhbmNlIG1ldGhvZC5cblN0YXRlTWFjaGluZS5leHRlbmQgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQ7XG5cbl8uZXh0ZW5kKCBTdGF0ZU1hY2hpbmUucHJvdG90eXBlLCBCYWNrYm9uZS5FdmVudHMsIHtcblx0LyoqXG5cdCAqIEZldGNoIGEgc3RhdGUuXG5cdCAqXG5cdCAqIElmIG5vIGBpZGAgaXMgcHJvdmlkZWQsIHJldHVybnMgdGhlIGFjdGl2ZSBzdGF0ZS5cblx0ICpcblx0ICogSW1wbGljaXRseSBjcmVhdGVzIHN0YXRlcy5cblx0ICpcblx0ICogRW5zdXJlIHRoYXQgdGhlIGBzdGF0ZXNgIGNvbGxlY3Rpb24gZXhpc3RzIHNvIHRoZSBgU3RhdGVNYWNoaW5lYFxuXHQgKiAgIGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4uXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGV9IFJldHVybnMgYSBTdGF0ZSBtb2RlbFxuXHQgKiAgIGZyb20gdGhlIFN0YXRlTWFjaGluZSBjb2xsZWN0aW9uXG5cdCAqL1xuXHRzdGF0ZTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMgfHwgbmV3IEJhY2tib25lLkNvbGxlY3Rpb24oKTtcblxuXHRcdC8vIERlZmF1bHQgdG8gdGhlIGFjdGl2ZSBzdGF0ZS5cblx0XHRpZCA9IGlkIHx8IHRoaXMuX3N0YXRlO1xuXG5cdFx0aWYgKCBpZCAmJiAhIHRoaXMuc3RhdGVzLmdldCggaWQgKSApIHtcblx0XHRcdHRoaXMuc3RhdGVzLmFkZCh7IGlkOiBpZCB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGVzLmdldCggaWQgKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aXZlIHN0YXRlLlxuXHQgKlxuXHQgKiBCYWlsIGlmIHdlJ3JlIHRyeWluZyB0byBzZWxlY3QgdGhlIGN1cnJlbnQgc3RhdGUsIGlmIHdlIGhhdmVuJ3Rcblx0ICogY3JlYXRlZCB0aGUgYHN0YXRlc2AgY29sbGVjdGlvbiwgb3IgYXJlIHRyeWluZyB0byBzZWxlY3QgYSBzdGF0ZVxuXHQgKiB0aGF0IGRvZXMgbm90IGV4aXN0LlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlI2RlYWN0aXZhdGVcblx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjYWN0aXZhdGVcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0c2V0U3RhdGU6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHR2YXIgcHJldmlvdXMgPSB0aGlzLnN0YXRlKCk7XG5cblx0XHRpZiAoICggcHJldmlvdXMgJiYgaWQgPT09IHByZXZpb3VzLmlkICkgfHwgISB0aGlzLnN0YXRlcyB8fCAhIHRoaXMuc3RhdGVzLmdldCggaWQgKSApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggcHJldmlvdXMgKSB7XG5cdFx0XHRwcmV2aW91cy50cmlnZ2VyKCdkZWFjdGl2YXRlJyk7XG5cdFx0XHR0aGlzLl9sYXN0U3RhdGUgPSBwcmV2aW91cy5pZDtcblx0XHR9XG5cblx0XHR0aGlzLl9zdGF0ZSA9IGlkO1xuXHRcdHRoaXMuc3RhdGUoKS50cmlnZ2VyKCdhY3RpdmF0ZScpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByZXZpb3VzIGFjdGl2ZSBzdGF0ZS5cblx0ICpcblx0ICogQ2FsbCB0aGUgYHN0YXRlKClgIG1ldGhvZCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcmV0cmlldmUgdGhlIGN1cnJlbnRcblx0ICogYWN0aXZlIHN0YXRlLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGV9IFJldHVybnMgYSBTdGF0ZSBtb2RlbFxuXHQgKiAgICBmcm9tIHRoZSBTdGF0ZU1hY2hpbmUgY29sbGVjdGlvblxuXHQgKi9cblx0bGFzdFN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuX2xhc3RTdGF0ZSApIHtcblx0XHRcdHJldHVybiB0aGlzLnN0YXRlKCB0aGlzLl9sYXN0U3RhdGUgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vLyBNYXAgYWxsIGV2ZW50IGJpbmRpbmcgYW5kIHRyaWdnZXJpbmcgb24gYSBTdGF0ZU1hY2hpbmUgdG8gaXRzIGBzdGF0ZXNgIGNvbGxlY3Rpb24uXG5fLmVhY2goWyAnb24nLCAnb2ZmJywgJ3RyaWdnZXInIF0sIGZ1bmN0aW9uKCBtZXRob2QgKSB7XG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nLlxuXHQgKi9cblx0U3RhdGVNYWNoaW5lLnByb3RvdHlwZVsgbWV0aG9kIF0gPSBmdW5jdGlvbigpIHtcblx0XHQvLyBFbnN1cmUgdGhhdCB0aGUgYHN0YXRlc2AgY29sbGVjdGlvbiBleGlzdHMgc28gdGhlIGBTdGF0ZU1hY2hpbmVgXG5cdFx0Ly8gY2FuIGJlIHVzZWQgYXMgYSBtaXhpbi5cblx0XHR0aGlzLnN0YXRlcyA9IHRoaXMuc3RhdGVzIHx8IG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKCk7XG5cdFx0Ly8gRm9yd2FyZCB0aGUgbWV0aG9kIHRvIHRoZSBgc3RhdGVzYCBjb2xsZWN0aW9uLlxuXHRcdHRoaXMuc3RhdGVzWyBtZXRob2QgXS5hcHBseSggdGhpcy5zdGF0ZXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGVNYWNoaW5lO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKlxuICogQSBzdGF0ZSBpcyBhIHN0ZXAgaW4gYSB3b3JrZmxvdyB0aGF0IHdoZW4gc2V0IHdpbGwgdHJpZ2dlciB0aGUgY29udHJvbGxlcnNcbiAqIGZvciB0aGUgcmVnaW9ucyB0byBiZSB1cGRhdGVkIGFzIHNwZWNpZmllZCBpbiB0aGUgZnJhbWUuXG4gKlxuICogQSBzdGF0ZSBoYXMgYW4gZXZlbnQtZHJpdmVuIGxpZmVjeWNsZTpcbiAqXG4gKiAgICAgJ3JlYWR5JyAgICAgIHRyaWdnZXJzIHdoZW4gYSBzdGF0ZSBpcyBhZGRlZCB0byBhIHN0YXRlIG1hY2hpbmUncyBjb2xsZWN0aW9uLlxuICogICAgICdhY3RpdmF0ZScgICB0cmlnZ2VycyB3aGVuIGEgc3RhdGUgaXMgYWN0aXZhdGVkIGJ5IGEgc3RhdGUgbWFjaGluZS5cbiAqICAgICAnZGVhY3RpdmF0ZScgdHJpZ2dlcnMgd2hlbiBhIHN0YXRlIGlzIGRlYWN0aXZhdGVkIGJ5IGEgc3RhdGUgbWFjaGluZS5cbiAqICAgICAncmVzZXQnICAgICAgaXMgbm90IHRyaWdnZXJlZCBhdXRvbWF0aWNhbGx5LiBJdCBzaG91bGQgYmUgaW52b2tlZCBieSB0aGVcbiAqICAgICAgICAgICAgICAgICAgcHJvcGVyIGNvbnRyb2xsZXIgdG8gcmVzZXQgdGhlIHN0YXRlIHRvIGl0cyBkZWZhdWx0LlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBTdGF0ZSA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7XG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vbiggJ2FjdGl2YXRlJywgdGhpcy5fcHJlQWN0aXZhdGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnYWN0aXZhdGUnLCB0aGlzLmFjdGl2YXRlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2FjdGl2YXRlJywgdGhpcy5fcG9zdEFjdGl2YXRlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2RlYWN0aXZhdGUnLCB0aGlzLl9kZWFjdGl2YXRlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2RlYWN0aXZhdGUnLCB0aGlzLmRlYWN0aXZhdGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAncmVzZXQnLCB0aGlzLnJlc2V0LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3JlYWR5JywgdGhpcy5fcmVhZHksIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAncmVhZHknLCB0aGlzLnJlYWR5LCB0aGlzICk7XG5cdFx0LyoqXG5cdFx0ICogQ2FsbCBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCBwYXNzZWQgYXJndW1lbnRzXG5cdFx0ICovXG5cdFx0QmFja2JvbmUuTW9kZWwuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMub24oICdjaGFuZ2U6bWVudScsIHRoaXMuX3VwZGF0ZU1lbnUsIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIFJlYWR5IGV2ZW50IGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAYWJzdHJhY3Rcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRyZWFkeTogZnVuY3Rpb24oKSB7fSxcblxuXHQvKipcblx0ICogQWN0aXZhdGUgZXZlbnQgY2FsbGJhY2suXG5cdCAqXG5cdCAqIEBhYnN0cmFjdFxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHt9LFxuXG5cdC8qKlxuXHQgKiBEZWFjdGl2YXRlIGV2ZW50IGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAYWJzdHJhY3Rcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRkZWFjdGl2YXRlOiBmdW5jdGlvbigpIHt9LFxuXG5cdC8qKlxuXHQgKiBSZXNldCBldmVudCBjYWxsYmFjay5cblx0ICpcblx0ICogQGFic3RyYWN0XG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0cmVzZXQ6IGZ1bmN0aW9uKCkge30sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdF9yZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fdXBkYXRlTWVudSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCovXG5cdF9wcmVBY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5hY3RpdmUgPSB0cnVlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRfcG9zdEFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9uKCAnY2hhbmdlOm1lbnUnLCB0aGlzLl9tZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NoYW5nZTp0aXRsZU1vZGUnLCB0aGlzLl90aXRsZSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjaGFuZ2U6Y29udGVudCcsIHRoaXMuX2NvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY2hhbmdlOnRvb2xiYXInLCB0aGlzLl90b29sYmFyLCB0aGlzICk7XG5cblx0XHR0aGlzLmZyYW1lLm9uKCAndGl0bGU6cmVuZGVyOmRlZmF1bHQnLCB0aGlzLl9yZW5kZXJUaXRsZSwgdGhpcyApO1xuXG5cdFx0dGhpcy5fdGl0bGUoKTtcblx0XHR0aGlzLl9tZW51KCk7XG5cdFx0dGhpcy5fdG9vbGJhcigpO1xuXHRcdHRoaXMuX2NvbnRlbnQoKTtcblx0XHR0aGlzLl9yb3V0ZXIoKTtcblx0fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X2RlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cblx0XHR0aGlzLmZyYW1lLm9mZiggJ3RpdGxlOnJlbmRlcjpkZWZhdWx0JywgdGhpcy5fcmVuZGVyVGl0bGUsIHRoaXMgKTtcblxuXHRcdHRoaXMub2ZmKCAnY2hhbmdlOm1lbnUnLCB0aGlzLl9tZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vZmYoICdjaGFuZ2U6dGl0bGVNb2RlJywgdGhpcy5fdGl0bGUsIHRoaXMgKTtcblx0XHR0aGlzLm9mZiggJ2NoYW5nZTpjb250ZW50JywgdGhpcy5fY29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub2ZmKCAnY2hhbmdlOnRvb2xiYXInLCB0aGlzLl90b29sYmFyLCB0aGlzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdF90aXRsZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS50aXRsZS5yZW5kZXIoIHRoaXMuZ2V0KCd0aXRsZU1vZGUnKSB8fCAnZGVmYXVsdCcgKTtcblx0fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X3JlbmRlclRpdGxlOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2aWV3LiRlbC50ZXh0KCB0aGlzLmdldCgndGl0bGUnKSB8fCAnJyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRfcm91dGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcm91dGVyID0gdGhpcy5mcmFtZS5yb3V0ZXIsXG5cdFx0XHRtb2RlID0gdGhpcy5nZXQoJ3JvdXRlcicpLFxuXHRcdFx0dmlldztcblxuXHRcdHRoaXMuZnJhbWUuJGVsLnRvZ2dsZUNsYXNzKCAnaGlkZS1yb3V0ZXInLCAhIG1vZGUgKTtcblx0XHRpZiAoICEgbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmZyYW1lLnJvdXRlci5yZW5kZXIoIG1vZGUgKTtcblxuXHRcdHZpZXcgPSByb3V0ZXIuZ2V0KCk7XG5cdFx0aWYgKCB2aWV3ICYmIHZpZXcuc2VsZWN0ICkge1xuXHRcdFx0dmlldy5zZWxlY3QoIHRoaXMuZnJhbWUuY29udGVudC5tb2RlKCkgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdF9tZW51OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWVudSA9IHRoaXMuZnJhbWUubWVudSxcblx0XHRcdG1vZGUgPSB0aGlzLmdldCgnbWVudScpLFxuXHRcdFx0dmlldztcblxuXHRcdHRoaXMuZnJhbWUuJGVsLnRvZ2dsZUNsYXNzKCAnaGlkZS1tZW51JywgISBtb2RlICk7XG5cdFx0aWYgKCAhIG1vZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bWVudS5tb2RlKCBtb2RlICk7XG5cblx0XHR2aWV3ID0gbWVudS5nZXQoKTtcblx0XHRpZiAoIHZpZXcgJiYgdmlldy5zZWxlY3QgKSB7XG5cdFx0XHR2aWV3LnNlbGVjdCggdGhpcy5pZCApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X3VwZGF0ZU1lbnU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwcmV2aW91cyA9IHRoaXMucHJldmlvdXMoJ21lbnUnKSxcblx0XHRcdG1lbnUgPSB0aGlzLmdldCgnbWVudScpO1xuXG5cdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdHRoaXMuZnJhbWUub2ZmKCAnbWVudTpyZW5kZXI6JyArIHByZXZpb3VzLCB0aGlzLl9yZW5kZXJNZW51LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBtZW51ICkge1xuXHRcdFx0dGhpcy5mcmFtZS5vbiggJ21lbnU6cmVuZGVyOicgKyBtZW51LCB0aGlzLl9yZW5kZXJNZW51LCB0aGlzICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYSB2aWV3IGluIHRoZSBtZWRpYSBtZW51IGZvciB0aGUgc3RhdGUuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHttZWRpYS52aWV3Lk1lbnV9IHZpZXcgVGhlIG1lbnUgdmlldy5cblx0ICovXG5cdF9yZW5kZXJNZW51OiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgbWVudUl0ZW0gPSB0aGlzLmdldCgnbWVudUl0ZW0nKSxcblx0XHRcdHRpdGxlID0gdGhpcy5nZXQoJ3RpdGxlJyksXG5cdFx0XHRwcmlvcml0eSA9IHRoaXMuZ2V0KCdwcmlvcml0eScpO1xuXG5cdFx0aWYgKCAhIG1lbnVJdGVtICYmIHRpdGxlICkge1xuXHRcdFx0bWVudUl0ZW0gPSB7IHRleHQ6IHRpdGxlIH07XG5cblx0XHRcdGlmICggcHJpb3JpdHkgKSB7XG5cdFx0XHRcdG1lbnVJdGVtLnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhIG1lbnVJdGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZpZXcuc2V0KCB0aGlzLmlkLCBtZW51SXRlbSApO1xuXHR9XG59KTtcblxuXy5lYWNoKFsndG9vbGJhcicsJ2NvbnRlbnQnXSwgZnVuY3Rpb24oIHJlZ2lvbiApIHtcblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0U3RhdGUucHJvdG90eXBlWyAnXycgKyByZWdpb24gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtb2RlID0gdGhpcy5nZXQoIHJlZ2lvbiApO1xuXHRcdGlmICggbW9kZSApIHtcblx0XHRcdHRoaXMuZnJhbWVbIHJlZ2lvbiBdLnJlbmRlciggbW9kZSApO1xuXHRcdH1cblx0fTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5zZWxlY3Rpb25TeW5jXG4gKlxuICogU3luYyBhbiBhdHRhY2htZW50cyBzZWxlY3Rpb24gaW4gYSBzdGF0ZSB3aXRoIGFub3RoZXIgc3RhdGUuXG4gKlxuICogQWxsb3dzIGZvciBzZWxlY3RpbmcgbXVsdGlwbGUgaW1hZ2VzIGluIHRoZSBJbnNlcnQgTWVkaWEgd29ya2Zsb3csIGFuZCB0aGVuXG4gKiBzd2l0Y2hpbmcgdG8gdGhlIEluc2VydCBHYWxsZXJ5IHdvcmtmbG93IHdoaWxlIHByZXNlcnZpbmcgdGhlIGF0dGFjaG1lbnRzIHNlbGVjdGlvbi5cbiAqXG4gKiBAbWl4aW5cbiAqL1xudmFyIHNlbGVjdGlvblN5bmMgPSB7XG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHN5bmNTZWxlY3Rpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRtYW5hZ2VyID0gdGhpcy5mcmFtZS5fc2VsZWN0aW9uO1xuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdzeW5jU2VsZWN0aW9uJykgfHwgISBtYW5hZ2VyIHx8ICEgc2VsZWN0aW9uICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBzZWxlY3Rpb24gc3VwcG9ydHMgbXVsdGlwbGUgaXRlbXMsIHZhbGlkYXRlIHRoZSBzdG9yZWRcblx0XHQvLyBhdHRhY2htZW50cyBiYXNlZCBvbiB0aGUgbmV3IHNlbGVjdGlvbidzIGNvbmRpdGlvbnMuIFJlY29yZFxuXHRcdC8vIHRoZSBhdHRhY2htZW50cyB0aGF0IGFyZSBub3QgaW5jbHVkZWQ7IHdlJ2xsIG1haW50YWluIGFcblx0XHQvLyByZWZlcmVuY2UgdG8gdGhvc2UuIE90aGVyIGF0dGFjaG1lbnRzIGFyZSBjb25zaWRlcmVkIGluIGZsdXguXG5cdFx0aWYgKCBzZWxlY3Rpb24ubXVsdGlwbGUgKSB7XG5cdFx0XHRzZWxlY3Rpb24ucmVzZXQoIFtdLCB7IHNpbGVudDogdHJ1ZSB9KTtcblx0XHRcdHNlbGVjdGlvbi52YWxpZGF0ZUFsbCggbWFuYWdlci5hdHRhY2htZW50cyApO1xuXHRcdFx0bWFuYWdlci5kaWZmZXJlbmNlID0gXy5kaWZmZXJlbmNlKCBtYW5hZ2VyLmF0dGFjaG1lbnRzLm1vZGVscywgc2VsZWN0aW9uLm1vZGVscyApO1xuXHRcdH1cblxuXHRcdC8vIFN5bmMgdGhlIHNlbGVjdGlvbidzIHNpbmdsZSBpdGVtIHdpdGggdGhlIG1hc3Rlci5cblx0XHRzZWxlY3Rpb24uc2luZ2xlKCBtYW5hZ2VyLnNpbmdsZSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZWNvcmQgdGhlIGN1cnJlbnRseSBhY3RpdmUgYXR0YWNobWVudHMsIHdoaWNoIGlzIGEgY29tYmluYXRpb25cblx0ICogb2YgdGhlIHNlbGVjdGlvbidzIGF0dGFjaG1lbnRzIGFuZCB0aGUgc2V0IG9mIHNlbGVjdGVkXG5cdCAqIGF0dGFjaG1lbnRzIHRoYXQgdGhpcyBzcGVjaWZpYyBzZWxlY3Rpb24gY29uc2lkZXJlZCBpbnZhbGlkLlxuXHQgKiBSZXNldCB0aGUgZGlmZmVyZW5jZSBhbmQgcmVjb3JkIHRoZSBzaW5nbGUgYXR0YWNobWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRyZWNvcmRTZWxlY3Rpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRtYW5hZ2VyID0gdGhpcy5mcmFtZS5fc2VsZWN0aW9uO1xuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdzeW5jU2VsZWN0aW9uJykgfHwgISBtYW5hZ2VyIHx8ICEgc2VsZWN0aW9uICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0aW9uLm11bHRpcGxlICkge1xuXHRcdFx0bWFuYWdlci5hdHRhY2htZW50cy5yZXNldCggc2VsZWN0aW9uLnRvQXJyYXkoKS5jb25jYXQoIG1hbmFnZXIuZGlmZmVyZW5jZSApICk7XG5cdFx0XHRtYW5hZ2VyLmRpZmZlcmVuY2UgPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWFuYWdlci5hdHRhY2htZW50cy5hZGQoIHNlbGVjdGlvbi50b0FycmF5KCkgKTtcblx0XHR9XG5cblx0XHRtYW5hZ2VyLnNpbmdsZSA9IHNlbGVjdGlvbi5fc2luZ2xlO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdGlvblN5bmM7XG4iLCJ2YXIgbWVkaWEgPSB3cC5tZWRpYSxcblx0JCA9IGpRdWVyeSxcblx0bDEwbjtcblxubWVkaWEuaXNUb3VjaERldmljZSA9ICggJ29udG91Y2hlbmQnIGluIGRvY3VtZW50ICk7XG5cbi8vIExpbmsgYW55IGxvY2FsaXplZCBzdHJpbmdzLlxubDEwbiA9IG1lZGlhLnZpZXcubDEwbiA9IHdpbmRvdy5fd3BNZWRpYVZpZXdzTDEwbiB8fCB7fTtcblxuLy8gTGluayBhbnkgc2V0dGluZ3MuXG5tZWRpYS52aWV3LnNldHRpbmdzID0gbDEwbi5zZXR0aW5ncyB8fCB7fTtcbmRlbGV0ZSBsMTBuLnNldHRpbmdzO1xuXG4vLyBDb3B5IHRoZSBgcG9zdGAgc2V0dGluZyBvdmVyIHRvIHRoZSBtb2RlbCBzZXR0aW5ncy5cbm1lZGlhLm1vZGVsLnNldHRpbmdzLnBvc3QgPSBtZWRpYS52aWV3LnNldHRpbmdzLnBvc3Q7XG5cbi8vIENoZWNrIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIENTUyAzLjAgdHJhbnNpdGlvbnNcbiQuc3VwcG9ydC50cmFuc2l0aW9uID0gKGZ1bmN0aW9uKCl7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcblx0XHR0cmFuc2l0aW9ucyA9IHtcblx0XHRcdFdlYmtpdFRyYW5zaXRpb246ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcblx0XHRcdE1velRyYW5zaXRpb246ICAgICd0cmFuc2l0aW9uZW5kJyxcblx0XHRcdE9UcmFuc2l0aW9uOiAgICAgICdvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCcsXG5cdFx0XHR0cmFuc2l0aW9uOiAgICAgICAndHJhbnNpdGlvbmVuZCdcblx0XHR9LCB0cmFuc2l0aW9uO1xuXG5cdHRyYW5zaXRpb24gPSBfLmZpbmQoIF8ua2V5cyggdHJhbnNpdGlvbnMgKSwgZnVuY3Rpb24oIHRyYW5zaXRpb24gKSB7XG5cdFx0cmV0dXJuICEgXy5pc1VuZGVmaW5lZCggc3R5bGVbIHRyYW5zaXRpb24gXSApO1xuXHR9KTtcblxuXHRyZXR1cm4gdHJhbnNpdGlvbiAmJiB7XG5cdFx0ZW5kOiB0cmFuc2l0aW9uc1sgdHJhbnNpdGlvbiBdXG5cdH07XG59KCkpO1xuXG4vKipcbiAqIEEgc2hhcmVkIGV2ZW50IGJ1cyB1c2VkIHRvIHByb3ZpZGUgZXZlbnRzIGludG9cbiAqIHRoZSBtZWRpYSB3b3JrZmxvd3MgdGhhdCAzcmQtcGFydHkgZGV2cyBjYW4gdXNlIHRvIGhvb2tcbiAqIGluLlxuICovXG5tZWRpYS5ldmVudHMgPSBfLmV4dGVuZCgge30sIEJhY2tib25lLkV2ZW50cyApO1xuXG4vKipcbiAqIE1ha2VzIGl0IGVhc2llciB0byBiaW5kIGV2ZW50cyB1c2luZyB0cmFuc2l0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7TnVtYmVyfSBzZW5zaXRpdml0eVxuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbm1lZGlhLnRyYW5zaXRpb24gPSBmdW5jdGlvbiggc2VsZWN0b3IsIHNlbnNpdGl2aXR5ICkge1xuXHR2YXIgZGVmZXJyZWQgPSAkLkRlZmVycmVkKCk7XG5cblx0c2Vuc2l0aXZpdHkgPSBzZW5zaXRpdml0eSB8fCAyMDAwO1xuXG5cdGlmICggJC5zdXBwb3J0LnRyYW5zaXRpb24gKSB7XG5cdFx0aWYgKCAhIChzZWxlY3RvciBpbnN0YW5jZW9mICQpICkge1xuXHRcdFx0c2VsZWN0b3IgPSAkKCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIFJlc29sdmUgdGhlIGRlZmVycmVkIHdoZW4gdGhlIGZpcnN0IGVsZW1lbnQgZmluaXNoZXMgYW5pbWF0aW5nLlxuXHRcdHNlbGVjdG9yLmZpcnN0KCkub25lKCAkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGRlZmVycmVkLnJlc29sdmUgKTtcblxuXHRcdC8vIEp1c3QgaW4gY2FzZSB0aGUgZXZlbnQgZG9lc24ndCB0cmlnZ2VyLCBmaXJlIGEgY2FsbGJhY2suXG5cdFx0Xy5kZWxheSggZGVmZXJyZWQucmVzb2x2ZSwgc2Vuc2l0aXZpdHkgKTtcblxuXHQvLyBPdGhlcndpc2UsIGV4ZWN1dGUgb24gdGhlIHNwb3QuXG5cdH0gZWxzZSB7XG5cdFx0ZGVmZXJyZWQucmVzb2x2ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UoKTtcbn07XG5cbm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvcmVnaW9uLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmUgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9zdGF0ZS1tYWNoaW5lLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5TdGF0ZSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL3N0YXRlLmpzJyApO1xuXG5tZWRpYS5zZWxlY3Rpb25TeW5jID0gcmVxdWlyZSggJy4vdXRpbHMvc2VsZWN0aW9uLXN5bmMuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnkgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9saWJyYXJ5LmpzJyApO1xubWVkaWEuY29udHJvbGxlci5JbWFnZURldGFpbHMgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9pbWFnZS1kZXRhaWxzLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5HYWxsZXJ5RWRpdCA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2dhbGxlcnktZWRpdC5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuR2FsbGVyeUFkZCA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2dhbGxlcnktYWRkLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uRWRpdCA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2NvbGxlY3Rpb24tZWRpdC5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuQ29sbGVjdGlvbkFkZCA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2NvbGxlY3Rpb24tYWRkLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5GZWF0dXJlZEltYWdlID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvZmVhdHVyZWQtaW1hZ2UuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLlJlcGxhY2VJbWFnZSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL3JlcGxhY2UtaW1hZ2UuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkVkaXRJbWFnZSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2VkaXQtaW1hZ2UuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLk1lZGlhTGlicmFyeSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL21lZGlhLWxpYnJhcnkuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkVtYmVkID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvZW1iZWQuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkNyb3BwZXIgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9jcm9wcGVyLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5DdXN0b21pemVJbWFnZUNyb3BwZXIgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9jdXN0b21pemUtaW1hZ2UtY3JvcHBlci5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuU2l0ZUljb25Dcm9wcGVyID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvc2l0ZS1pY29uLWNyb3BwZXIuanMnICk7XG5cbm1lZGlhLlZpZXcgPSByZXF1aXJlKCAnLi92aWV3cy92aWV3LmpzJyApO1xubWVkaWEudmlldy5GcmFtZSA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lLmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lID0gcmVxdWlyZSggJy4vdmlld3MvbWVkaWEtZnJhbWUuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0ID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUvc2VsZWN0LmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lLlBvc3QgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9wb3N0LmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lLkltYWdlRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lL2ltYWdlLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3Lk1vZGFsID0gcmVxdWlyZSggJy4vdmlld3MvbW9kYWwuanMnICk7XG5tZWRpYS52aWV3LkZvY3VzTWFuYWdlciA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZvY3VzLW1hbmFnZXIuanMnICk7XG5tZWRpYS52aWV3LlVwbG9hZGVyV2luZG93ID0gcmVxdWlyZSggJy4vdmlld3MvdXBsb2FkZXIvd2luZG93LmpzJyApO1xubWVkaWEudmlldy5FZGl0b3JVcGxvYWRlciA9IHJlcXVpcmUoICcuL3ZpZXdzL3VwbG9hZGVyL2VkaXRvci5qcycgKTtcbm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmUgPSByZXF1aXJlKCAnLi92aWV3cy91cGxvYWRlci9pbmxpbmUuanMnICk7XG5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzID0gcmVxdWlyZSggJy4vdmlld3MvdXBsb2FkZXIvc3RhdHVzLmpzJyApO1xubWVkaWEudmlldy5VcGxvYWRlclN0YXR1c0Vycm9yID0gcmVxdWlyZSggJy4vdmlld3MvdXBsb2FkZXIvc3RhdHVzLWVycm9yLmpzJyApO1xubWVkaWEudmlldy5Ub29sYmFyID0gcmVxdWlyZSggJy4vdmlld3MvdG9vbGJhci5qcycgKTtcbm1lZGlhLnZpZXcuVG9vbGJhci5TZWxlY3QgPSByZXF1aXJlKCAnLi92aWV3cy90b29sYmFyL3NlbGVjdC5qcycgKTtcbm1lZGlhLnZpZXcuVG9vbGJhci5FbWJlZCA9IHJlcXVpcmUoICcuL3ZpZXdzL3Rvb2xiYXIvZW1iZWQuanMnICk7XG5tZWRpYS52aWV3LkJ1dHRvbiA9IHJlcXVpcmUoICcuL3ZpZXdzL2J1dHRvbi5qcycgKTtcbm1lZGlhLnZpZXcuQnV0dG9uR3JvdXAgPSByZXF1aXJlKCAnLi92aWV3cy9idXR0b24tZ3JvdXAuanMnICk7XG5tZWRpYS52aWV3LlByaW9yaXR5TGlzdCA9IHJlcXVpcmUoICcuL3ZpZXdzL3ByaW9yaXR5LWxpc3QuanMnICk7XG5tZWRpYS52aWV3Lk1lbnVJdGVtID0gcmVxdWlyZSggJy4vdmlld3MvbWVudS1pdGVtLmpzJyApO1xubWVkaWEudmlldy5NZW51ID0gcmVxdWlyZSggJy4vdmlld3MvbWVudS5qcycgKTtcbm1lZGlhLnZpZXcuUm91dGVySXRlbSA9IHJlcXVpcmUoICcuL3ZpZXdzL3JvdXRlci1pdGVtLmpzJyApO1xubWVkaWEudmlldy5Sb3V0ZXIgPSByZXF1aXJlKCAnLi92aWV3cy9yb3V0ZXIuanMnICk7XG5tZWRpYS52aWV3LlNpZGViYXIgPSByZXF1aXJlKCAnLi92aWV3cy9zaWRlYmFyLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50ID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudC5MaWJyYXJ5ID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC9saWJyYXJ5LmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRMaWJyYXJ5ID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC9lZGl0LWxpYnJhcnkuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnRzID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudHMuanMnICk7XG5tZWRpYS52aWV3LlNlYXJjaCA9IHJlcXVpcmUoICcuL3ZpZXdzL3NlYXJjaC5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnMgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMuanMnICk7XG5tZWRpYS52aWV3LkRhdGVGaWx0ZXIgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvZGF0ZS5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnMuVXBsb2FkZWQgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvdXBsb2FkZWQuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLkFsbCA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQtZmlsdGVycy9hbGwuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3NlciA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnRzL2Jyb3dzZXIuanMnICk7XG5tZWRpYS52aWV3LlNlbGVjdGlvbiA9IHJlcXVpcmUoICcuL3ZpZXdzL3NlbGVjdGlvbi5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudC5TZWxlY3Rpb24gPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50L3NlbGVjdGlvbi5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudHMuU2VsZWN0aW9uID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudHMvc2VsZWN0aW9uLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRTZWxlY3Rpb24gPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50L2VkaXQtc2VsZWN0aW9uLmpzJyApO1xubWVkaWEudmlldy5TZXR0aW5ncyA9IHJlcXVpcmUoICcuL3ZpZXdzL3NldHRpbmdzLmpzJyApO1xubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheSA9IHJlcXVpcmUoICcuL3ZpZXdzL3NldHRpbmdzL2F0dGFjaG1lbnQtZGlzcGxheS5qcycgKTtcbm1lZGlhLnZpZXcuU2V0dGluZ3MuR2FsbGVyeSA9IHJlcXVpcmUoICcuL3ZpZXdzL3NldHRpbmdzL2dhbGxlcnkuanMnICk7XG5tZWRpYS52aWV3LlNldHRpbmdzLlBsYXlsaXN0ID0gcmVxdWlyZSggJy4vdmlld3Mvc2V0dGluZ3MvcGxheWxpc3QuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQvZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudENvbXBhdCA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQtY29tcGF0LmpzJyApO1xubWVkaWEudmlldy5JZnJhbWUgPSByZXF1aXJlKCAnLi92aWV3cy9pZnJhbWUuanMnICk7XG5tZWRpYS52aWV3LkVtYmVkID0gcmVxdWlyZSggJy4vdmlld3MvZW1iZWQuanMnICk7XG5tZWRpYS52aWV3LkxhYmVsID0gcmVxdWlyZSggJy4vdmlld3MvbGFiZWwuanMnICk7XG5tZWRpYS52aWV3LkVtYmVkVXJsID0gcmVxdWlyZSggJy4vdmlld3MvZW1iZWQvdXJsLmpzJyApO1xubWVkaWEudmlldy5FbWJlZExpbmsgPSByZXF1aXJlKCAnLi92aWV3cy9lbWJlZC9saW5rLmpzJyApO1xubWVkaWEudmlldy5FbWJlZEltYWdlID0gcmVxdWlyZSggJy4vdmlld3MvZW1iZWQvaW1hZ2UuanMnICk7XG5tZWRpYS52aWV3LkltYWdlRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2ltYWdlLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3LkNyb3BwZXIgPSByZXF1aXJlKCAnLi92aWV3cy9jcm9wcGVyLmpzJyApO1xubWVkaWEudmlldy5TaXRlSWNvbkNyb3BwZXIgPSByZXF1aXJlKCAnLi92aWV3cy9zaXRlLWljb24tY3JvcHBlci5qcycgKTtcbm1lZGlhLnZpZXcuU2l0ZUljb25QcmV2aWV3ID0gcmVxdWlyZSggJy4vdmlld3Mvc2l0ZS1pY29uLXByZXZpZXcuanMnICk7XG5tZWRpYS52aWV3LkVkaXRJbWFnZSA9IHJlcXVpcmUoICcuL3ZpZXdzL2VkaXQtaW1hZ2UuanMnICk7XG5tZWRpYS52aWV3LlNwaW5uZXIgPSByZXF1aXJlKCAnLi92aWV3cy9zcGlubmVyLmpzJyApO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRDb21wYXRcbiAqXG4gKiBBIHZpZXcgdG8gZGlzcGxheSBmaWVsZHMgYWRkZWQgdmlhIHRoZSBgYXR0YWNobWVudF9maWVsZHNfdG9fZWRpdGAgZmlsdGVyLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdEF0dGFjaG1lbnRDb21wYXQ7XG5cbkF0dGFjaG1lbnRDb21wYXQgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2Zvcm0nLFxuXHRjbGFzc05hbWU6ICdjb21wYXQtaXRlbScsXG5cblx0ZXZlbnRzOiB7XG5cdFx0J3N1Ym1pdCc6ICAgICAgICAgICdwcmV2ZW50RGVmYXVsdCcsXG5cdFx0J2NoYW5nZSBpbnB1dCc6ICAgICdzYXZlJyxcblx0XHQnY2hhbmdlIHNlbGVjdCc6ICAgJ3NhdmUnLFxuXHRcdCdjaGFuZ2UgdGV4dGFyZWEnOiAnc2F2ZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmNvbXBhdCcsIHRoaXMucmVuZGVyICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50Q29tcGF0fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLiQoJzpmb2N1cycpLmxlbmd0aCApIHtcblx0XHRcdHRoaXMuc2F2ZSgpO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdkaXNwb3NlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0cmV0dXJuIFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQXR0YWNobWVudENvbXBhdH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNvbXBhdCA9IHRoaXMubW9kZWwuZ2V0KCdjb21wYXQnKTtcblx0XHRpZiAoICEgY29tcGF0IHx8ICEgY29tcGF0Lml0ZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3cy5kZXRhY2goKTtcblx0XHR0aGlzLiRlbC5odG1sKCBjb21wYXQuaXRlbSApO1xuXHRcdHRoaXMudmlld3MucmVuZGVyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0c2F2ZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBkYXRhID0ge307XG5cblx0XHRpZiAoIGV2ZW50ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHRfLmVhY2goIHRoaXMuJGVsLnNlcmlhbGl6ZUFycmF5KCksIGZ1bmN0aW9uKCBwYWlyICkge1xuXHRcdFx0ZGF0YVsgcGFpci5uYW1lIF0gPSBwYWlyLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdhdHRhY2htZW50OmNvbXBhdDp3YWl0aW5nJywgWyd3YWl0aW5nJ10gKTtcblx0XHR0aGlzLm1vZGVsLnNhdmVDb21wYXQoIGRhdGEgKS5hbHdheXMoIF8uYmluZCggdGhpcy5wb3N0U2F2ZSwgdGhpcyApICk7XG5cdH0sXG5cblx0cG9zdFNhdmU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnYXR0YWNobWVudDpjb21wYXQ6cmVhZHknLCBbJ3JlYWR5J10gKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXR0YWNobWVudENvbXBhdDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVyc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgJCA9IGpRdWVyeSxcblx0QXR0YWNobWVudEZpbHRlcnM7XG5cbkF0dGFjaG1lbnRGaWx0ZXJzID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdzZWxlY3QnLFxuXHRjbGFzc05hbWU6ICdhdHRhY2htZW50LWZpbHRlcnMnLFxuXHRpZDogICAgICAgICdtZWRpYS1hdHRhY2htZW50LWZpbHRlcnMnLFxuXG5cdGV2ZW50czoge1xuXHRcdGNoYW5nZTogJ2NoYW5nZSdcblx0fSxcblxuXHRrZXlzOiBbXSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmNyZWF0ZUZpbHRlcnMoKTtcblx0XHRfLmV4dGVuZCggdGhpcy5maWx0ZXJzLCB0aGlzLm9wdGlvbnMuZmlsdGVycyApO1xuXG5cdFx0Ly8gQnVpbGQgYDxvcHRpb24+YCBlbGVtZW50cy5cblx0XHR0aGlzLiRlbC5odG1sKCBfLmNoYWluKCB0aGlzLmZpbHRlcnMgKS5tYXAoIGZ1bmN0aW9uKCBmaWx0ZXIsIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZWw6ICQoICc8b3B0aW9uPjwvb3B0aW9uPicgKS52YWwoIHZhbHVlICkuaHRtbCggZmlsdGVyLnRleHQgKVswXSxcblx0XHRcdFx0cHJpb3JpdHk6IGZpbHRlci5wcmlvcml0eSB8fCA1MFxuXHRcdFx0fTtcblx0XHR9LCB0aGlzICkuc29ydEJ5KCdwcmlvcml0eScpLnBsdWNrKCdlbCcpLnZhbHVlKCkgKTtcblxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLnNlbGVjdCApO1xuXHRcdHRoaXMuc2VsZWN0KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhYnN0cmFjdFxuXHQgKi9cblx0Y3JlYXRlRmlsdGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5maWx0ZXJzID0ge307XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZW4gdGhlIHNlbGVjdGVkIGZpbHRlciBjaGFuZ2VzLCB1cGRhdGUgdGhlIEF0dGFjaG1lbnQgUXVlcnkgcHJvcGVydGllcyB0byBtYXRjaC5cblx0ICovXG5cdGNoYW5nZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZpbHRlciA9IHRoaXMuZmlsdGVyc1sgdGhpcy5lbC52YWx1ZSBdO1xuXHRcdGlmICggZmlsdGVyICkge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoIGZpbHRlci5wcm9wcyApO1xuXHRcdH1cblx0fSxcblxuXHRzZWxlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtb2RlbCA9IHRoaXMubW9kZWwsXG5cdFx0XHR2YWx1ZSA9ICdhbGwnLFxuXHRcdFx0cHJvcHMgPSBtb2RlbC50b0pTT04oKTtcblxuXHRcdF8uZmluZCggdGhpcy5maWx0ZXJzLCBmdW5jdGlvbiggZmlsdGVyLCBpZCApIHtcblx0XHRcdHZhciBlcXVhbCA9IF8uYWxsKCBmaWx0ZXIucHJvcHMsIGZ1bmN0aW9uKCBwcm9wLCBrZXkgKSB7XG5cdFx0XHRcdHJldHVybiBwcm9wID09PSAoIF8uaXNVbmRlZmluZWQoIHByb3BzWyBrZXkgXSApID8gbnVsbCA6IHByb3BzWyBrZXkgXSApO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICggZXF1YWwgKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9IGlkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy4kZWwudmFsKCB2YWx1ZSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdHRhY2htZW50RmlsdGVycztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycy5BbGxcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRBbGw7XG5cbkFsbCA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnMuZXh0ZW5kKHtcblx0Y3JlYXRlRmlsdGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZpbHRlcnMgPSB7fTtcblxuXHRcdF8uZWFjaCggd3AubWVkaWEudmlldy5zZXR0aW5ncy5taW1lVHlwZXMgfHwge30sIGZ1bmN0aW9uKCB0ZXh0LCBrZXkgKSB7XG5cdFx0XHRmaWx0ZXJzWyBrZXkgXSA9IHtcblx0XHRcdFx0dGV4dDogdGV4dCxcblx0XHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0XHRzdGF0dXM6ICBudWxsLFxuXHRcdFx0XHRcdHR5cGU6ICAgIGtleSxcblx0XHRcdFx0XHR1cGxvYWRlZFRvOiBudWxsLFxuXHRcdFx0XHRcdG9yZGVyYnk6ICdkYXRlJyxcblx0XHRcdFx0XHRvcmRlcjogICAnREVTQydcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHRcdGZpbHRlcnMuYWxsID0ge1xuXHRcdFx0dGV4dDogIGwxMG4uYWxsTWVkaWFJdGVtcyxcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdHN0YXR1czogIG51bGwsXG5cdFx0XHRcdHR5cGU6ICAgIG51bGwsXG5cdFx0XHRcdHVwbG9hZGVkVG86IG51bGwsXG5cdFx0XHRcdG9yZGVyYnk6ICdkYXRlJyxcblx0XHRcdFx0b3JkZXI6ICAgJ0RFU0MnXG5cdFx0XHR9LFxuXHRcdFx0cHJpb3JpdHk6IDEwXG5cdFx0fTtcblxuXHRcdGlmICggd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkICkge1xuXHRcdFx0ZmlsdGVycy51cGxvYWRlZCA9IHtcblx0XHRcdFx0dGV4dDogIGwxMG4udXBsb2FkZWRUb1RoaXNQb3N0LFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHN0YXR1czogIG51bGwsXG5cdFx0XHRcdFx0dHlwZTogICAgbnVsbCxcblx0XHRcdFx0XHR1cGxvYWRlZFRvOiB3cC5tZWRpYS52aWV3LnNldHRpbmdzLnBvc3QuaWQsXG5cdFx0XHRcdFx0b3JkZXJieTogJ21lbnVPcmRlcicsXG5cdFx0XHRcdFx0b3JkZXI6ICAgJ0FTQydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6IDIwXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGZpbHRlcnMudW5hdHRhY2hlZCA9IHtcblx0XHRcdHRleHQ6ICBsMTBuLnVuYXR0YWNoZWQsXG5cdFx0XHRwcm9wczoge1xuXHRcdFx0XHRzdGF0dXM6ICAgICBudWxsLFxuXHRcdFx0XHR1cGxvYWRlZFRvOiAwLFxuXHRcdFx0XHR0eXBlOiAgICAgICBudWxsLFxuXHRcdFx0XHRvcmRlcmJ5OiAgICAnbWVudU9yZGVyJyxcblx0XHRcdFx0b3JkZXI6ICAgICAgJ0FTQydcblx0XHRcdH0sXG5cdFx0XHRwcmlvcml0eTogNTBcblx0XHR9O1xuXG5cdFx0aWYgKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1lZGlhVHJhc2ggJiZcblx0XHRcdHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXG5cdFx0XHRmaWx0ZXJzLnRyYXNoID0ge1xuXHRcdFx0XHR0ZXh0OiAgbDEwbi50cmFzaCxcblx0XHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0XHR1cGxvYWRlZFRvOiBudWxsLFxuXHRcdFx0XHRcdHN0YXR1czogICAgICd0cmFzaCcsXG5cdFx0XHRcdFx0dHlwZTogICAgICAgbnVsbCxcblx0XHRcdFx0XHRvcmRlcmJ5OiAgICAnZGF0ZScsXG5cdFx0XHRcdFx0b3JkZXI6ICAgICAgJ0RFU0MnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHByaW9yaXR5OiA1MFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHR0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbGw7XG4iLCIvKipcbiAqIEEgZmlsdGVyIGRyb3Bkb3duIGZvciBtb250aC9kYXRlcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHREYXRlRmlsdGVyO1xuXG5EYXRlRmlsdGVyID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycy5leHRlbmQoe1xuXHRpZDogJ21lZGlhLWF0dGFjaG1lbnQtZGF0ZS1maWx0ZXJzJyxcblxuXHRjcmVhdGVGaWx0ZXJzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZmlsdGVycyA9IHt9O1xuXHRcdF8uZWFjaCggd3AubWVkaWEudmlldy5zZXR0aW5ncy5tb250aHMgfHwge30sIGZ1bmN0aW9uKCB2YWx1ZSwgaW5kZXggKSB7XG5cdFx0XHRmaWx0ZXJzWyBpbmRleCBdID0ge1xuXHRcdFx0XHR0ZXh0OiB2YWx1ZS50ZXh0LFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHllYXI6IHZhbHVlLnllYXIsXG5cdFx0XHRcdFx0bW9udGhudW06IHZhbHVlLm1vbnRoXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0ZmlsdGVycy5hbGwgPSB7XG5cdFx0XHR0ZXh0OiAgbDEwbi5hbGxEYXRlcyxcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdG1vbnRobnVtOiBmYWxzZSxcblx0XHRcdFx0eWVhcjogIGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0cHJpb3JpdHk6IDEwXG5cdFx0fTtcblx0XHR0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlRmlsdGVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLlVwbG9hZGVkXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVyc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgbDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0VXBsb2FkZWQ7XG5cblVwbG9hZGVkID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycy5leHRlbmQoe1xuXHRjcmVhdGVGaWx0ZXJzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHlwZSA9IHRoaXMubW9kZWwuZ2V0KCd0eXBlJyksXG5cdFx0XHR0eXBlcyA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MubWltZVR5cGVzLFxuXHRcdFx0dGV4dDtcblxuXHRcdGlmICggdHlwZXMgJiYgdHlwZSApIHtcblx0XHRcdHRleHQgPSB0eXBlc1sgdHlwZSBdO1xuXHRcdH1cblxuXHRcdHRoaXMuZmlsdGVycyA9IHtcblx0XHRcdGFsbDoge1xuXHRcdFx0XHR0ZXh0OiAgdGV4dCB8fCBsMTBuLmFsbE1lZGlhSXRlbXMsXG5cdFx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdFx0dXBsb2FkZWRUbzogbnVsbCxcblx0XHRcdFx0XHRvcmRlcmJ5OiAnZGF0ZScsXG5cdFx0XHRcdFx0b3JkZXI6ICAgJ0RFU0MnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHByaW9yaXR5OiAxMFxuXHRcdFx0fSxcblxuXHRcdFx0dXBsb2FkZWQ6IHtcblx0XHRcdFx0dGV4dDogIGwxMG4udXBsb2FkZWRUb1RoaXNQb3N0LFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHVwbG9hZGVkVG86IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRcdFx0XHRvcmRlcmJ5OiAnbWVudU9yZGVyJyxcblx0XHRcdFx0XHRvcmRlcjogICAnQVNDJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogMjBcblx0XHRcdH0sXG5cblx0XHRcdHVuYXR0YWNoZWQ6IHtcblx0XHRcdFx0dGV4dDogIGwxMG4udW5hdHRhY2hlZCxcblx0XHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0XHR1cGxvYWRlZFRvOiAwLFxuXHRcdFx0XHRcdG9yZGVyYnk6ICdtZW51T3JkZXInLFxuXHRcdFx0XHRcdG9yZGVyOiAgICdBU0MnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHByaW9yaXR5OiA1MFxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwbG9hZGVkO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHQkID0galF1ZXJ5LFxuXHRBdHRhY2htZW50O1xuXG5BdHRhY2htZW50ID0gVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdsaScsXG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnQnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdhdHRhY2htZW50JyksXG5cblx0YXR0cmlidXRlczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCd0YWJJbmRleCc6ICAgICAwLFxuXHRcdFx0J3JvbGUnOiAgICAgICAgICdjaGVja2JveCcsXG5cdFx0XHQnYXJpYS1sYWJlbCc6ICAgdGhpcy5tb2RlbC5nZXQoICd0aXRsZScgKSxcblx0XHRcdCdhcmlhLWNoZWNrZWQnOiBmYWxzZSxcblx0XHRcdCdkYXRhLWlkJzogICAgICB0aGlzLm1vZGVsLmdldCggJ2lkJyApXG5cdFx0fTtcblx0fSxcblxuXHRldmVudHM6IHtcblx0XHQnY2xpY2sgLmpzLS1zZWxlY3QtYXR0YWNobWVudCc6ICAgJ3RvZ2dsZVNlbGVjdGlvbkhhbmRsZXInLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10nOiAgICAgICAgICAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSBpbnB1dCc6ICAgICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2hhbmdlIFtkYXRhLXNldHRpbmddIHNlbGVjdCc6ICAgJ3VwZGF0ZVNldHRpbmcnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10gdGV4dGFyZWEnOiAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NsaWNrIC5hdHRhY2htZW50LWNsb3NlJzogICAgICAgICdyZW1vdmVGcm9tTGlicmFyeScsXG5cdFx0J2NsaWNrIC5jaGVjayc6ICAgICAgICAgICAgICAgICAgICdjaGVja0NsaWNrSGFuZGxlcicsXG5cdFx0J2tleWRvd24nOiAgICAgICAgICAgICAgICAgICAgICAgICd0b2dnbGVTZWxlY3Rpb25IYW5kbGVyJ1xuXHR9LFxuXG5cdGJ1dHRvbnM6IHt9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLFxuXHRcdFx0b3B0aW9ucyA9IF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0XHRyZXJlbmRlck9uTW9kZWxDaGFuZ2U6IHRydWVcblx0XHRcdH0gKTtcblxuXHRcdGlmICggb3B0aW9ucy5yZXJlbmRlck9uTW9kZWxDaGFuZ2UgKSB7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5yZW5kZXIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpwZXJjZW50JywgdGhpcy5wcm9ncmVzcyApO1xuXHRcdH1cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnRpdGxlJywgdGhpcy5fc3luY1RpdGxlICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpjYXB0aW9uJywgdGhpcy5fc3luY0NhcHRpb24gKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmFydGlzdCcsIHRoaXMuX3N5bmNBcnRpc3QgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmFsYnVtJywgdGhpcy5fc3luY0FsYnVtICk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi5cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnYWRkJywgdGhpcy5zZWxlY3QgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAncmVtb3ZlJywgdGhpcy5kZXNlbGVjdCApO1xuXHRcdGlmICggc2VsZWN0aW9uICkge1xuXHRcdFx0c2VsZWN0aW9uLm9uKCAncmVzZXQnLCB0aGlzLnVwZGF0ZVNlbGVjdCwgdGhpcyApO1xuXHRcdFx0Ly8gVXBkYXRlIHRoZSBtb2RlbCdzIGRldGFpbHMgdmlldy5cblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdzZWxlY3Rpb246c2luZ2xlIHNlbGVjdGlvbjp1bnNpbmdsZScsIHRoaXMuZGV0YWlscyApO1xuXHRcdFx0dGhpcy5kZXRhaWxzKCB0aGlzLm1vZGVsLCB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoJ3NlbGVjdGlvbicpICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jb250cm9sbGVyLCAnYXR0YWNobWVudDpjb21wYXQ6d2FpdGluZyBhdHRhY2htZW50OmNvbXBhdDpyZWFkeScsIHRoaXMudXBkYXRlU2F2ZSApO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQXR0YWNobWVudH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIGFsbCBzZXR0aW5ncyBhcmUgc2F2ZWQgYmVmb3JlIHJlbW92aW5nIHRoZSB2aWV3LlxuXHRcdHRoaXMudXBkYXRlQWxsKCk7XG5cblx0XHRpZiAoIHNlbGVjdGlvbiApIHtcblx0XHRcdHNlbGVjdGlvbi5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQXR0YWNobWVudH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSBfLmRlZmF1bHRzKCB0aGlzLm1vZGVsLnRvSlNPTigpLCB7XG5cdFx0XHRcdG9yaWVudGF0aW9uOiAgICdsYW5kc2NhcGUnLFxuXHRcdFx0XHR1cGxvYWRpbmc6ICAgICBmYWxzZSxcblx0XHRcdFx0dHlwZTogICAgICAgICAgJycsXG5cdFx0XHRcdHN1YnR5cGU6ICAgICAgICcnLFxuXHRcdFx0XHRpY29uOiAgICAgICAgICAnJyxcblx0XHRcdFx0ZmlsZW5hbWU6ICAgICAgJycsXG5cdFx0XHRcdGNhcHRpb246ICAgICAgICcnLFxuXHRcdFx0XHR0aXRsZTogICAgICAgICAnJyxcblx0XHRcdFx0ZGF0ZUZvcm1hdHRlZDogJycsXG5cdFx0XHRcdHdpZHRoOiAgICAgICAgICcnLFxuXHRcdFx0XHRoZWlnaHQ6ICAgICAgICAnJyxcblx0XHRcdFx0Y29tcGF0OiAgICAgICAgZmFsc2UsXG5cdFx0XHRcdGFsdDogICAgICAgICAgICcnLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogICAnJ1xuXHRcdFx0fSwgdGhpcy5vcHRpb25zICk7XG5cblx0XHRvcHRpb25zLmJ1dHRvbnMgID0gdGhpcy5idXR0b25zO1xuXHRcdG9wdGlvbnMuZGVzY3JpYmUgPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoJ2Rlc2NyaWJlJyk7XG5cblx0XHRpZiAoICdpbWFnZScgPT09IG9wdGlvbnMudHlwZSApIHtcblx0XHRcdG9wdGlvbnMuc2l6ZSA9IHRoaXMuaW1hZ2VTaXplKCk7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucy5jYW4gPSB7fTtcblx0XHRpZiAoIG9wdGlvbnMubm9uY2VzICkge1xuXHRcdFx0b3B0aW9ucy5jYW4ucmVtb3ZlID0gISEgb3B0aW9ucy5ub25jZXNbJ2RlbGV0ZSddO1xuXHRcdFx0b3B0aW9ucy5jYW4uc2F2ZSA9ICEhIG9wdGlvbnMubm9uY2VzLnVwZGF0ZTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnYWxsb3dMb2NhbEVkaXRzJykgKSB7XG5cdFx0XHRvcHRpb25zLmFsbG93TG9jYWxFZGl0cyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnVwbG9hZGluZyAmJiAhIG9wdGlvbnMucGVyY2VudCApIHtcblx0XHRcdG9wdGlvbnMucGVyY2VudCA9IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3cy5kZXRhY2goKTtcblx0XHR0aGlzLiRlbC5odG1sKCB0aGlzLnRlbXBsYXRlKCBvcHRpb25zICkgKTtcblxuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAndXBsb2FkaW5nJywgb3B0aW9ucy51cGxvYWRpbmcgKTtcblxuXHRcdGlmICggb3B0aW9ucy51cGxvYWRpbmcgKSB7XG5cdFx0XHR0aGlzLiRiYXIgPSB0aGlzLiQoJy5tZWRpYS1wcm9ncmVzcy1iYXIgZGl2Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSB0aGlzLiRiYXI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG1vZGVsIGlzIHNlbGVjdGVkLlxuXHRcdHRoaXMudXBkYXRlU2VsZWN0KCk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIHNhdmUgc3RhdHVzLlxuXHRcdHRoaXMudXBkYXRlU2F2ZSgpO1xuXG5cdFx0dGhpcy52aWV3cy5yZW5kZXIoKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuJGJhciAmJiB0aGlzLiRiYXIubGVuZ3RoICkge1xuXHRcdFx0dGhpcy4kYmFyLndpZHRoKCB0aGlzLm1vZGVsLmdldCgncGVyY2VudCcpICsgJyUnICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHRvZ2dsZVNlbGVjdGlvbkhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgbWV0aG9kO1xuXG5cdFx0Ly8gRG9uJ3QgZG8gYW55dGhpbmcgaW5zaWRlIGlucHV0cyBhbmQgb24gdGhlIGF0dGFjaG1lbnQgY2hlY2sgYW5kIHJlbW92ZSBidXR0b25zLlxuXHRcdGlmICggJ0lOUFVUJyA9PT0gZXZlbnQudGFyZ2V0Lm5vZGVOYW1lIHx8ICdCVVRUT04nID09PSBldmVudC50YXJnZXQubm9kZU5hbWUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2F0Y2ggYXJyb3cgZXZlbnRzXG5cdFx0aWYgKCAzNyA9PT0gZXZlbnQua2V5Q29kZSB8fCAzOCA9PT0gZXZlbnQua2V5Q29kZSB8fCAzOSA9PT0gZXZlbnQua2V5Q29kZSB8fCA0MCA9PT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnYXR0YWNobWVudDprZXlkb3duOmFycm93JywgZXZlbnQgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYXRjaCBlbnRlciBhbmQgc3BhY2UgZXZlbnRzXG5cdFx0aWYgKCAna2V5ZG93bicgPT09IGV2ZW50LnR5cGUgJiYgMTMgIT09IGV2ZW50LmtleUNvZGUgJiYgMzIgIT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdC8vIEluIHRoZSBncmlkIHZpZXcsIGJ1YmJsZSB1cCBhbiBlZGl0OmF0dGFjaG1lbnQgZXZlbnQgdG8gdGhlIGNvbnRyb2xsZXIuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKSApIHtcblx0XHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2VkaXQnICkgKSB7XG5cdFx0XHRcdC8vIFBhc3MgdGhlIGN1cnJlbnQgdGFyZ2V0IHRvIHJlc3RvcmUgZm9jdXMgd2hlbiBjbG9zaW5nXG5cdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnZWRpdDphdHRhY2htZW50JywgdGhpcy5tb2RlbCwgZXZlbnQuY3VycmVudFRhcmdldCApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ3NlbGVjdCcgKSApIHtcblx0XHRcdFx0bWV0aG9kID0gJ3RvZ2dsZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBldmVudC5zaGlmdEtleSApIHtcblx0XHRcdG1ldGhvZCA9ICdiZXR3ZWVuJztcblx0XHR9IGVsc2UgaWYgKCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgKSB7XG5cdFx0XHRtZXRob2QgPSAndG9nZ2xlJztcblx0XHR9XG5cblx0XHR0aGlzLnRvZ2dsZVNlbGVjdGlvbih7XG5cdFx0XHRtZXRob2Q6IG1ldGhvZFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdzZWxlY3Rpb246dG9nZ2xlJyApO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdHRvZ2dsZVNlbGVjdGlvbjogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb24sXG5cdFx0XHRzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLFxuXHRcdFx0bW9kZWwgPSB0aGlzLm1vZGVsLFxuXHRcdFx0bWV0aG9kID0gb3B0aW9ucyAmJiBvcHRpb25zLm1ldGhvZCxcblx0XHRcdHNpbmdsZSwgbW9kZWxzLCBzaW5nbGVJbmRleCwgbW9kZWxJbmRleDtcblxuXHRcdGlmICggISBzZWxlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c2luZ2xlID0gc2VsZWN0aW9uLnNpbmdsZSgpO1xuXHRcdG1ldGhvZCA9IF8uaXNVbmRlZmluZWQoIG1ldGhvZCApID8gc2VsZWN0aW9uLm11bHRpcGxlIDogbWV0aG9kO1xuXG5cdFx0Ly8gSWYgdGhlIGBtZXRob2RgIGlzIHNldCB0byBgYmV0d2VlbmAsIHNlbGVjdCBhbGwgbW9kZWxzIHRoYXRcblx0XHQvLyBleGlzdCBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgc2VsZWN0ZWQgbW9kZWwuXG5cdFx0aWYgKCAnYmV0d2VlbicgPT09IG1ldGhvZCAmJiBzaW5nbGUgJiYgc2VsZWN0aW9uLm11bHRpcGxlICkge1xuXHRcdFx0Ly8gSWYgdGhlIG1vZGVscyBhcmUgdGhlIHNhbWUsIHNob3J0LWNpcmN1aXQuXG5cdFx0XHRpZiAoIHNpbmdsZSA9PT0gbW9kZWwgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2luZ2xlSW5kZXggPSBjb2xsZWN0aW9uLmluZGV4T2YoIHNpbmdsZSApO1xuXHRcdFx0bW9kZWxJbmRleCAgPSBjb2xsZWN0aW9uLmluZGV4T2YoIHRoaXMubW9kZWwgKTtcblxuXHRcdFx0aWYgKCBzaW5nbGVJbmRleCA8IG1vZGVsSW5kZXggKSB7XG5cdFx0XHRcdG1vZGVscyA9IGNvbGxlY3Rpb24ubW9kZWxzLnNsaWNlKCBzaW5nbGVJbmRleCwgbW9kZWxJbmRleCArIDEgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vZGVscyA9IGNvbGxlY3Rpb24ubW9kZWxzLnNsaWNlKCBtb2RlbEluZGV4LCBzaW5nbGVJbmRleCArIDEgKTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uLmFkZCggbW9kZWxzICk7XG5cdFx0XHRzZWxlY3Rpb24uc2luZ2xlKCBtb2RlbCApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Ly8gSWYgdGhlIGBtZXRob2RgIGlzIHNldCB0byBgdG9nZ2xlYCwganVzdCBmbGlwIHRoZSBzZWxlY3Rpb25cblx0XHQvLyBzdGF0dXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbW9kZWwgaXMgdGhlIHNpbmdsZSBtb2RlbC5cblx0XHR9IGVsc2UgaWYgKCAndG9nZ2xlJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0c2VsZWN0aW9uWyB0aGlzLnNlbGVjdGVkKCkgPyAncmVtb3ZlJyA6ICdhZGQnIF0oIG1vZGVsICk7XG5cdFx0XHRzZWxlY3Rpb24uc2luZ2xlKCBtb2RlbCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gZWxzZSBpZiAoICdhZGQnID09PSBtZXRob2QgKSB7XG5cdFx0XHRzZWxlY3Rpb24uYWRkKCBtb2RlbCApO1xuXHRcdFx0c2VsZWN0aW9uLnNpbmdsZSggbW9kZWwgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGaXhlcyBidWcgdGhhdCBsb3NlcyBmb2N1cyB3aGVuIHNlbGVjdGluZyBhIGZlYXR1cmVkIGltYWdlXG5cdFx0aWYgKCAhIG1ldGhvZCApIHtcblx0XHRcdG1ldGhvZCA9ICdhZGQnO1xuXHRcdH1cblxuXHRcdGlmICggbWV0aG9kICE9PSAnYWRkJyApIHtcblx0XHRcdG1ldGhvZCA9ICdyZXNldCc7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLnNlbGVjdGVkKCkgKSB7XG5cdFx0XHQvLyBJZiB0aGUgbW9kZWwgaXMgdGhlIHNpbmdsZSBtb2RlbCwgcmVtb3ZlIGl0LlxuXHRcdFx0Ly8gSWYgaXQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBzaW5nbGUgbW9kZWwsXG5cdFx0XHQvLyBpdCBub3cgYmVjb21lcyB0aGUgc2luZ2xlIG1vZGVsLlxuXHRcdFx0c2VsZWN0aW9uWyBzaW5nbGUgPT09IG1vZGVsID8gJ3JlbW92ZScgOiAnc2luZ2xlJyBdKCBtb2RlbCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBJZiB0aGUgbW9kZWwgaXMgbm90IHNlbGVjdGVkLCBydW4gdGhlIGBtZXRob2RgIG9uIHRoZVxuXHRcdFx0Ly8gc2VsZWN0aW9uLiBCeSBkZWZhdWx0LCB3ZSBgcmVzZXRgIHRoZSBzZWxlY3Rpb24sIGJ1dCB0aGVcblx0XHRcdC8vIGBtZXRob2RgIGNhbiBiZSBzZXQgdG8gYGFkZGAgdGhlIG1vZGVsIHRvIHRoZSBzZWxlY3Rpb24uXG5cdFx0XHRzZWxlY3Rpb25bIG1ldGhvZCBdKCBtb2RlbCApO1xuXHRcdFx0c2VsZWN0aW9uLnNpbmdsZSggbW9kZWwgKTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlU2VsZWN0OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzWyB0aGlzLnNlbGVjdGVkKCkgPyAnc2VsZWN0JyA6ICdkZXNlbGVjdCcgXSgpO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3VucmVzb2x2ZWR8Qm9vbGVhbn1cblx0ICovXG5cdHNlbGVjdGVkOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbjtcblx0XHRpZiAoIHNlbGVjdGlvbiApIHtcblx0XHRcdHJldHVybiAhISBzZWxlY3Rpb24uZ2V0KCB0aGlzLm1vZGVsLmNpZCApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuQ29sbGVjdGlvbn0gY29sbGVjdGlvblxuXHQgKi9cblx0c2VsZWN0OiBmdW5jdGlvbiggbW9kZWwsIGNvbGxlY3Rpb24gKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYSBzZWxlY3Rpb24gZXhpc3RzIGFuZCBpZiBpdCdzIHRoZSBjb2xsZWN0aW9uIHByb3ZpZGVkLlxuXHRcdC8vIElmIHRoZXkncmUgbm90IHRoZSBzYW1lIGNvbGxlY3Rpb24sIGJhaWw7IHdlJ3JlIGluIGFub3RoZXJcblx0XHQvLyBzZWxlY3Rpb24ncyBldmVudCBsb29wLlxuXHRcdGlmICggISBzZWxlY3Rpb24gfHwgKCBjb2xsZWN0aW9uICYmIGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbiApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEJhaWwgaWYgdGhlIG1vZGVsIGlzIGFscmVhZHkgc2VsZWN0ZWQuXG5cdFx0aWYgKCB0aGlzLiRlbC5oYXNDbGFzcyggJ3NlbGVjdGVkJyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFkZCAnc2VsZWN0ZWQnIGNsYXNzIHRvIG1vZGVsLCBzZXQgYXJpYS1jaGVja2VkIHRvIHRydWUuXG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdzZWxlY3RlZCcgKS5hdHRyKCAnYXJpYS1jaGVja2VkJywgdHJ1ZSApO1xuXHRcdC8vICBNYWtlIHRoZSBjaGVja2JveCB0YWJhYmxlLCBleGNlcHQgaW4gbWVkaWEgZ3JpZCAoYnVsayBzZWxlY3QgbW9kZSkuXG5cdFx0aWYgKCAhICggY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICYmIGNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnc2VsZWN0JyApICkgKSB7XG5cdFx0XHR0aGlzLiQoICcuY2hlY2snICkuYXR0ciggJ3RhYmluZGV4JywgJzAnICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Db2xsZWN0aW9ufSBjb2xsZWN0aW9uXG5cdCAqL1xuXHRkZXNlbGVjdDogZnVuY3Rpb24oIG1vZGVsLCBjb2xsZWN0aW9uICkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgYSBzZWxlY3Rpb24gZXhpc3RzIGFuZCBpZiBpdCdzIHRoZSBjb2xsZWN0aW9uIHByb3ZpZGVkLlxuXHRcdC8vIElmIHRoZXkncmUgbm90IHRoZSBzYW1lIGNvbGxlY3Rpb24sIGJhaWw7IHdlJ3JlIGluIGFub3RoZXJcblx0XHQvLyBzZWxlY3Rpb24ncyBldmVudCBsb29wLlxuXHRcdGlmICggISBzZWxlY3Rpb24gfHwgKCBjb2xsZWN0aW9uICYmIGNvbGxlY3Rpb24gIT09IHNlbGVjdGlvbiApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcyggJ3NlbGVjdGVkJyApLmF0dHIoICdhcmlhLWNoZWNrZWQnLCBmYWxzZSApXG5cdFx0XHQuZmluZCggJy5jaGVjaycgKS5hdHRyKCAndGFiaW5kZXgnLCAnLTEnICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBtb2RlbFxuXHQgKiBAcGFyYW0ge0JhY2tib25lLkNvbGxlY3Rpb259IGNvbGxlY3Rpb25cblx0ICovXG5cdGRldGFpbHM6IGZ1bmN0aW9uKCBtb2RlbCwgY29sbGVjdGlvbiApIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdGRldGFpbHM7XG5cblx0XHRpZiAoIHNlbGVjdGlvbiAhPT0gY29sbGVjdGlvbiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRkZXRhaWxzID0gc2VsZWN0aW9uLnNpbmdsZSgpO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnZGV0YWlscycsIGRldGFpbHMgPT09IHRoaXMubW9kZWwgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzaXplXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRpbWFnZVNpemU6IGZ1bmN0aW9uKCBzaXplICkge1xuXHRcdHZhciBzaXplcyA9IHRoaXMubW9kZWwuZ2V0KCdzaXplcycpLCBtYXRjaGVkID0gZmFsc2U7XG5cblx0XHRzaXplID0gc2l6ZSB8fCAnbWVkaXVtJztcblxuXHRcdC8vIFVzZSB0aGUgcHJvdmlkZWQgaW1hZ2Ugc2l6ZSBpZiBwb3NzaWJsZS5cblx0XHRpZiAoIHNpemVzICkge1xuXHRcdFx0aWYgKCBzaXplc1sgc2l6ZSBdICkge1xuXHRcdFx0XHRtYXRjaGVkID0gc2l6ZXNbIHNpemUgXTtcblx0XHRcdH0gZWxzZSBpZiAoIHNpemVzLmxhcmdlICkge1xuXHRcdFx0XHRtYXRjaGVkID0gc2l6ZXMubGFyZ2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzaXplcy50aHVtYm5haWwgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBzaXplcy50aHVtYm5haWw7XG5cdFx0XHR9IGVsc2UgaWYgKCBzaXplcy5mdWxsICkge1xuXHRcdFx0XHRtYXRjaGVkID0gc2l6ZXMuZnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBtYXRjaGVkICkge1xuXHRcdFx0XHRyZXR1cm4gXy5jbG9uZSggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR1cmw6ICAgICAgICAgdGhpcy5tb2RlbC5nZXQoJ3VybCcpLFxuXHRcdFx0d2lkdGg6ICAgICAgIHRoaXMubW9kZWwuZ2V0KCd3aWR0aCcpLFxuXHRcdFx0aGVpZ2h0OiAgICAgIHRoaXMubW9kZWwuZ2V0KCdoZWlnaHQnKSxcblx0XHRcdG9yaWVudGF0aW9uOiB0aGlzLm1vZGVsLmdldCgnb3JpZW50YXRpb24nKVxuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHVwZGF0ZVNldHRpbmc6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgJHNldHRpbmcgPSAkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCdbZGF0YS1zZXR0aW5nXScpLFxuXHRcdFx0c2V0dGluZywgdmFsdWU7XG5cblx0XHRpZiAoICEgJHNldHRpbmcubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNldHRpbmcgPSAkc2V0dGluZy5kYXRhKCdzZXR0aW5nJyk7XG5cdFx0dmFsdWUgICA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuXHRcdGlmICggdGhpcy5tb2RlbC5nZXQoIHNldHRpbmcgKSAhPT0gdmFsdWUgKSB7XG5cdFx0XHR0aGlzLnNhdmUoIHNldHRpbmcsIHZhbHVlICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBQYXNzIGFsbCB0aGUgYXJndW1lbnRzIHRvIHRoZSBtb2RlbCdzIHNhdmUgbWV0aG9kLlxuXHQgKlxuXHQgKiBSZWNvcmRzIHRoZSBhZ2dyZWdhdGUgc3RhdHVzIG9mIGFsbCBzYXZlIHJlcXVlc3RzIGFuZCB1cGRhdGVzIHRoZVxuXHQgKiB2aWV3J3MgY2xhc3NlcyBhY2NvcmRpbmdseS5cblx0ICovXG5cdHNhdmU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2aWV3ID0gdGhpcyxcblx0XHRcdHNhdmUgPSB0aGlzLl9zYXZlID0gdGhpcy5fc2F2ZSB8fCB7IHN0YXR1czogJ3JlYWR5JyB9LFxuXHRcdFx0cmVxdWVzdCA9IHRoaXMubW9kZWwuc2F2ZS5hcHBseSggdGhpcy5tb2RlbCwgYXJndW1lbnRzICksXG5cdFx0XHRyZXF1ZXN0cyA9IHNhdmUucmVxdWVzdHMgPyAkLndoZW4oIHJlcXVlc3QsIHNhdmUucmVxdWVzdHMgKSA6IHJlcXVlc3Q7XG5cblx0XHQvLyBJZiB3ZSdyZSB3YWl0aW5nIHRvIHJlbW92ZSAnU2F2ZWQuJywgc3RvcC5cblx0XHRpZiAoIHNhdmUuc2F2ZWRUaW1lciApIHtcblx0XHRcdGNsZWFyVGltZW91dCggc2F2ZS5zYXZlZFRpbWVyICk7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVTYXZlKCd3YWl0aW5nJyk7XG5cdFx0c2F2ZS5yZXF1ZXN0cyA9IHJlcXVlc3RzO1xuXHRcdHJlcXVlc3RzLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBJZiB3ZSd2ZSBwZXJmb3JtZWQgYW5vdGhlciByZXF1ZXN0IHNpbmNlIHRoaXMgb25lLCBiYWlsLlxuXHRcdFx0aWYgKCBzYXZlLnJlcXVlc3RzICE9PSByZXF1ZXN0cyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2aWV3LnVwZGF0ZVNhdmUoIHJlcXVlc3RzLnN0YXRlKCkgPT09ICdyZXNvbHZlZCcgPyAnY29tcGxldGUnIDogJ2Vycm9yJyApO1xuXHRcdFx0c2F2ZS5zYXZlZFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZpZXcudXBkYXRlU2F2ZSgncmVhZHknKTtcblx0XHRcdFx0ZGVsZXRlIHNhdmUuc2F2ZWRUaW1lcjtcblx0XHRcdH0sIDIwMDAgKTtcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0dXNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQXR0YWNobWVudH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHVwZGF0ZVNhdmU6IGZ1bmN0aW9uKCBzdGF0dXMgKSB7XG5cdFx0dmFyIHNhdmUgPSB0aGlzLl9zYXZlID0gdGhpcy5fc2F2ZSB8fCB7IHN0YXR1czogJ3JlYWR5JyB9O1xuXG5cdFx0aWYgKCBzdGF0dXMgJiYgc3RhdHVzICE9PSBzYXZlLnN0YXR1cyApIHtcblx0XHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAnc2F2ZS0nICsgc2F2ZS5zdGF0dXMgKTtcblx0XHRcdHNhdmUuc3RhdHVzID0gc3RhdHVzO1xuXHRcdH1cblxuXHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnc2F2ZS0nICsgc2F2ZS5zdGF0dXMgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR1cGRhdGVBbGw6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkc2V0dGluZ3MgPSB0aGlzLiQoJ1tkYXRhLXNldHRpbmddJyksXG5cdFx0XHRtb2RlbCA9IHRoaXMubW9kZWwsXG5cdFx0XHRjaGFuZ2VkO1xuXG5cdFx0Y2hhbmdlZCA9IF8uY2hhaW4oICRzZXR0aW5ncyApLm1hcCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0dmFyICRpbnB1dCA9ICQoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbdmFsdWVdJywgZWwgKSxcblx0XHRcdFx0c2V0dGluZywgdmFsdWU7XG5cblx0XHRcdGlmICggISAkaW5wdXQubGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHNldHRpbmcgPSAkKGVsKS5kYXRhKCdzZXR0aW5nJyk7XG5cdFx0XHR2YWx1ZSA9ICRpbnB1dC52YWwoKTtcblxuXHRcdFx0Ly8gUmVjb3JkIHRoZSB2YWx1ZSBpZiBpdCBjaGFuZ2VkLlxuXHRcdFx0aWYgKCBtb2RlbC5nZXQoIHNldHRpbmcgKSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybiBbIHNldHRpbmcsIHZhbHVlIF07XG5cdFx0XHR9XG5cdFx0fSkuY29tcGFjdCgpLm9iamVjdCgpLnZhbHVlKCk7XG5cblx0XHRpZiAoICEgXy5pc0VtcHR5KCBjaGFuZ2VkICkgKSB7XG5cdFx0XHRtb2RlbC5zYXZlKCBjaGFuZ2VkICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRyZW1vdmVGcm9tTGlicmFyeTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdC8vIENhdGNoIGVudGVyIGFuZCBzcGFjZSBldmVudHNcblx0XHRpZiAoICdrZXlkb3duJyA9PT0gZXZlbnQudHlwZSAmJiAxMyAhPT0gZXZlbnQua2V5Q29kZSAmJiAzMiAhPT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBTdG9wIHByb3BhZ2F0aW9uIHNvIHRoZSBtb2RlbCBpc24ndCBzZWxlY3RlZC5cblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbi5yZW1vdmUoIHRoaXMubW9kZWwgKTtcblx0fSxcblxuXHQvKipcblx0ICogQWRkIHRoZSBtb2RlbCBpZiBpdCBpc24ndCBpbiB0aGUgc2VsZWN0aW9uLCBpZiBpdCBpcyBpbiB0aGUgc2VsZWN0aW9uLFxuXHQgKiByZW1vdmUgaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSAge1t0eXBlXX0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuXHQgKiBAcmV0dXJuIHtbdHlwZV19ICAgICAgIFtkZXNjcmlwdGlvbl1cblx0ICovXG5cdGNoZWNrQ2xpY2tIYW5kbGVyOiBmdW5jdGlvbiAoIGV2ZW50ICkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uO1xuXHRcdGlmICggISBzZWxlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdGlmICggc2VsZWN0aW9uLndoZXJlKCB7IGlkOiB0aGlzLm1vZGVsLmdldCggJ2lkJyApIH0gKS5sZW5ndGggKSB7XG5cdFx0XHRzZWxlY3Rpb24ucmVtb3ZlKCB0aGlzLm1vZGVsICk7XG5cdFx0XHQvLyBNb3ZlIGZvY3VzIGJhY2sgdG8gdGhlIGF0dGFjaG1lbnQgdGlsZSAoZnJvbSB0aGUgY2hlY2spLlxuXHRcdFx0dGhpcy4kZWwuZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0aW9uLmFkZCggdGhpcy5tb2RlbCApO1xuXHRcdH1cblx0fVxufSk7XG5cbi8vIEVuc3VyZSBzZXR0aW5ncyByZW1haW4gaW4gc3luYyBiZXR3ZWVuIGF0dGFjaG1lbnQgdmlld3MuXG5fLmVhY2goe1xuXHRjYXB0aW9uOiAnX3N5bmNDYXB0aW9uJyxcblx0dGl0bGU6ICAgJ19zeW5jVGl0bGUnLFxuXHRhcnRpc3Q6ICAnX3N5bmNBcnRpc3QnLFxuXHRhbGJ1bTogICAnX3N5bmNBbGJ1bSdcbn0sIGZ1bmN0aW9uKCBtZXRob2QsIHNldHRpbmcgKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBtb2RlbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQXR0YWNobWVudH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdEF0dGFjaG1lbnQucHJvdG90eXBlWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCBtb2RlbCwgdmFsdWUgKSB7XG5cdFx0dmFyICRzZXR0aW5nID0gdGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwiJyArIHNldHRpbmcgKyAnXCJdJyk7XG5cblx0XHRpZiAoICEgJHNldHRpbmcubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHVwZGF0ZWQgdmFsdWUgaXMgaW4gc3luYyB3aXRoIHRoZSB2YWx1ZSBpbiB0aGUgRE9NLCB0aGVyZVxuXHRcdC8vIGlzIG5vIG5lZWQgdG8gcmUtcmVuZGVyLiBJZiB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZyB0aGUgdmFsdWUsXG5cdFx0Ly8gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGluIHN5bmMsIHN1cHByZXNzaW5nIHRoZSByZS1yZW5kZXIgZm9yXG5cdFx0Ly8gdGhlIHZpZXcgd2UncmUgZWRpdGluZywgd2hpbGUgdXBkYXRpbmcgYW55IG90aGVycy5cblx0XHRpZiAoIHZhbHVlID09PSAkc2V0dGluZy5maW5kKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3ZhbHVlXScpLnZhbCgpICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyKCk7XG5cdH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdHRhY2htZW50O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgQXR0YWNobWVudCA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudCxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0RGV0YWlscztcblxuRGV0YWlscyA9IEF0dGFjaG1lbnQuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAnYXR0YWNobWVudC1kZXRhaWxzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnYXR0YWNobWVudC1kZXRhaWxzJyksXG5cblx0YXR0cmlidXRlczogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCd0YWJJbmRleCc6ICAgICAwLFxuXHRcdFx0J2RhdGEtaWQnOiAgICAgIHRoaXMubW9kZWwuZ2V0KCAnaWQnIClcblx0XHR9O1xuXHR9LFxuXG5cdGV2ZW50czoge1xuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10nOiAgICAgICAgICAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSBpbnB1dCc6ICAgICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2hhbmdlIFtkYXRhLXNldHRpbmddIHNlbGVjdCc6ICAgJ3VwZGF0ZVNldHRpbmcnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10gdGV4dGFyZWEnOiAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NsaWNrIC5kZWxldGUtYXR0YWNobWVudCc6ICAgICAgICdkZWxldGVBdHRhY2htZW50Jyxcblx0XHQnY2xpY2sgLnRyYXNoLWF0dGFjaG1lbnQnOiAgICAgICAgJ3RyYXNoQXR0YWNobWVudCcsXG5cdFx0J2NsaWNrIC51bnRyYXNoLWF0dGFjaG1lbnQnOiAgICAgICd1bnRyYXNoQXR0YWNobWVudCcsXG5cdFx0J2NsaWNrIC5lZGl0LWF0dGFjaG1lbnQnOiAgICAgICAgICdlZGl0QXR0YWNobWVudCcsXG5cdFx0J2tleWRvd24nOiAgICAgICAgICAgICAgICAgICAgICAgICd0b2dnbGVTZWxlY3Rpb25IYW5kbGVyJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMub3B0aW9ucyA9IF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0cmVyZW5kZXJPbk1vZGVsQ2hhbmdlOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbiggJ3JlYWR5JywgdGhpcy5pbml0aWFsRm9jdXMgKTtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdEF0dGFjaG1lbnQucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdGluaXRpYWxGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgKSB7XG5cdFx0XHQvKlxuXHRcdFx0UHJldmlvdXNseSBmb2N1c2VkIHRoZSBmaXJzdCAnOmlucHV0JyAodGhlIHJlYWRvbmx5IFVSTCB0ZXh0IGZpZWxkKS5cblx0XHRcdFNpbmNlIHRoZSBmaXJzdCAnOmlucHV0JyBpcyBub3cgYSBidXR0b24gKGRlbGV0ZS90cmFzaCk6IHdoZW4gcHJlc3Npbmdcblx0XHRcdHNwYWNlYmFyIG9uIGFuIGF0dGFjaG1lbnQsIEZpcmVmb3ggZmlyZXMgZGVsZXRlQXR0YWNobWVudC90cmFzaEF0dGFjaG1lbnRcblx0XHRcdGFzIHNvb24gYXMgZm9jdXMgaXMgbW92ZWQuIEV4cGxpY2l0bHkgdGFyZ2V0IHRoZSBmaXJzdCB0ZXh0IGZpZWxkIGZvciBub3cuXG5cdFx0XHRAdG9kbyBjaGFuZ2UgaW5pdGlhbCBmb2N1cyBsb2dpYywgYWxzbyBmb3IgYWNjZXNzaWJpbGl0eS5cblx0XHRcdCovXG5cdFx0XHR0aGlzLiQoICdpbnB1dFt0eXBlPVwidGV4dFwiXScgKS5lcSggMCApLmZvY3VzKCk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRkZWxldGVBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmICggd2luZG93LmNvbmZpcm0oIGwxMG4ud2FybkRlbGV0ZSApICkge1xuXHRcdFx0dGhpcy5tb2RlbC5kZXN0cm95KCk7XG5cdFx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdFx0Ly8gYWZ0ZXIgaW1hZ2UgaXMgZGVsZXRlZFxuXHRcdFx0dGhpcy5jb250cm9sbGVyLm1vZGFsLmZvY3VzTWFuYWdlci5mb2N1cygpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dHJhc2hBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGxpYnJhcnkgPSB0aGlzLmNvbnRyb2xsZXIubGlicmFyeTtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1lZGlhVHJhc2ggJiZcblx0XHRcdCdlZGl0LW1ldGFkYXRhJyA9PT0gdGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSgpICkge1xuXG5cdFx0XHR0aGlzLm1vZGVsLnNldCggJ3N0YXR1cycsICd0cmFzaCcgKTtcblx0XHRcdHRoaXMubW9kZWwuc2F2ZSgpLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsaWJyYXJ5Ll9yZXF1ZXJ5KCB0cnVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSAgZWxzZSB7XG5cdFx0XHR0aGlzLm1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHVudHJhc2hBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGxpYnJhcnkgPSB0aGlzLmNvbnRyb2xsZXIubGlicmFyeTtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0dGhpcy5tb2RlbC5zZXQoICdzdGF0dXMnLCAnaW5oZXJpdCcgKTtcblx0XHR0aGlzLm1vZGVsLnNhdmUoKS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdGxpYnJhcnkuX3JlcXVlcnkoIHRydWUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdGVkaXRBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGVkaXRTdGF0ZSA9IHRoaXMuY29udHJvbGxlci5zdGF0ZXMuZ2V0KCAnZWRpdC1pbWFnZScgKTtcblx0XHRpZiAoIHdpbmRvdy5pbWFnZUVkaXQgJiYgZWRpdFN0YXRlICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0ZWRpdFN0YXRlLnNldCggJ2ltYWdlJywgdGhpcy5tb2RlbCApO1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCAnZWRpdC1pbWFnZScgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4kZWwuYWRkQ2xhc3MoJ25lZWRzLXJlZnJlc2gnKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBXaGVuIHJldmVyc2UgdGFiYmluZyhzaGlmdCt0YWIpIG91dCBvZiB0aGUgcmlnaHQgZGV0YWlscyBwYW5lbCwgZGVsaXZlclxuXHQgKiB0aGUgZm9jdXMgdG8gdGhlIGl0ZW0gaW4gdGhlIGxpc3QgdGhhdCB3YXMgYmVpbmcgZWRpdGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHRvZ2dsZVNlbGVjdGlvbkhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoICdrZXlkb3duJyA9PT0gZXZlbnQudHlwZSAmJiA5ID09PSBldmVudC5rZXlDb2RlICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LnRhcmdldCA9PT0gdGhpcy4kKCAnOnRhYmJhYmxlJyApLmdldCggMCApICkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdhdHRhY2htZW50OmRldGFpbHM6c2hpZnQtdGFiJywgZXZlbnQgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoIDM3ID09PSBldmVudC5rZXlDb2RlIHx8IDM4ID09PSBldmVudC5rZXlDb2RlIHx8IDM5ID09PSBldmVudC5rZXlDb2RlIHx8IDQwID09PSBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdhdHRhY2htZW50OmtleWRvd246YXJyb3cnLCBldmVudCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRMaWJyYXJ5XG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBFZGl0TGlicmFyeSA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5leHRlbmQoe1xuXHRidXR0b25zOiB7XG5cdFx0Y2xvc2U6IHRydWVcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdExpYnJhcnk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHMuRWRpdFNlbGVjdGlvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5TZWxlY3Rpb25cbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEVkaXRTZWxlY3Rpb24gPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuU2VsZWN0aW9uLmV4dGVuZCh7XG5cdGJ1dHRvbnM6IHtcblx0XHRjbG9zZTogdHJ1ZVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0U2VsZWN0aW9uO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuTGlicmFyeVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgTGlicmFyeSA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5leHRlbmQoe1xuXHRidXR0b25zOiB7XG5cdFx0Y2hlY2s6IHRydWVcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlicmFyeTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50LlNlbGVjdGlvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgU2VsZWN0aW9uID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnQgc2VsZWN0aW9uJyxcblxuXHQvLyBPbiBjbGljaywganVzdCBzZWxlY3QgdGhlIG1vZGVsLCBpbnN0ZWFkIG9mIHJlbW92aW5nIHRoZSBtb2RlbCBmcm9tXG5cdC8vIHRoZSBzZWxlY3Rpb24uXG5cdHRvZ2dsZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vcHRpb25zLnNlbGVjdGlvbi5zaW5nbGUoIHRoaXMubW9kZWwgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0aW9uO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0JCA9IGpRdWVyeSxcblx0QXR0YWNobWVudHM7XG5cbkF0dGFjaG1lbnRzID0gVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICd1bCcsXG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnRzJyxcblxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0dGFiSW5kZXg6IC0xXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbC5pZCA9IF8udW5pcXVlSWQoJ19fYXR0YWNobWVudHMtdmlldy0nKTtcblxuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0cmVmcmVzaFNlbnNpdGl2aXR5OiB3cC5tZWRpYS5pc1RvdWNoRGV2aWNlID8gMzAwIDogMjAwLFxuXHRcdFx0cmVmcmVzaFRocmVzaG9sZDogICAzLFxuXHRcdFx0QXR0YWNobWVudFZpZXc6ICAgICB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQsXG5cdFx0XHRzb3J0YWJsZTogICAgICAgICAgIGZhbHNlLFxuXHRcdFx0cmVzaXplOiAgICAgICAgICAgICB0cnVlLFxuXHRcdFx0aWRlYWxDb2x1bW5XaWR0aDogICAkKCB3aW5kb3cgKS53aWR0aCgpIDwgNjQwID8gMTM1IDogMTUwXG5cdFx0fSk7XG5cblx0XHR0aGlzLl92aWV3c0J5Q2lkID0ge307XG5cdFx0dGhpcy4kd2luZG93ID0gJCggd2luZG93ICk7XG5cdFx0dGhpcy5yZXNpemVFdmVudCA9ICdyZXNpemUubWVkaWEtbW9kYWwtY29sdW1ucyc7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb24ub24oICdhZGQnLCBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHRoaXMudmlld3MuYWRkKCB0aGlzLmNyZWF0ZUF0dGFjaG1lbnRWaWV3KCBhdHRhY2htZW50ICksIHtcblx0XHRcdFx0YXQ6IHRoaXMuY29sbGVjdGlvbi5pbmRleE9mKCBhdHRhY2htZW50IClcblx0XHRcdH0pO1xuXHRcdH0sIHRoaXMgKTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbi5vbiggJ3JlbW92ZScsIGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0dmFyIHZpZXcgPSB0aGlzLl92aWV3c0J5Q2lkWyBhdHRhY2htZW50LmNpZCBdO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3ZpZXdzQnlDaWRbIGF0dGFjaG1lbnQuY2lkIF07XG5cblx0XHRcdGlmICggdmlldyApIHtcblx0XHRcdFx0dmlldy5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzICk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb24ub24oICdyZXNldCcsIHRoaXMucmVuZGVyLCB0aGlzICk7XG5cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdsaWJyYXJ5OnNlbGVjdGlvbjphZGQnLCAgICB0aGlzLmF0dGFjaG1lbnRGb2N1cyApO1xuXG5cdFx0Ly8gVGhyb3R0bGUgdGhlIHNjcm9sbCBoYW5kbGVyIGFuZCBiaW5kIHRoaXMuXG5cdFx0dGhpcy5zY3JvbGwgPSBfLmNoYWluKCB0aGlzLnNjcm9sbCApLmJpbmQoIHRoaXMgKS50aHJvdHRsZSggdGhpcy5vcHRpb25zLnJlZnJlc2hTZW5zaXRpdml0eSApLnZhbHVlKCk7XG5cblx0XHR0aGlzLm9wdGlvbnMuc2Nyb2xsRWxlbWVudCA9IHRoaXMub3B0aW9ucy5zY3JvbGxFbGVtZW50IHx8IHRoaXMuZWw7XG5cdFx0JCggdGhpcy5vcHRpb25zLnNjcm9sbEVsZW1lbnQgKS5vbiggJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsICk7XG5cblx0XHR0aGlzLmluaXRTb3J0YWJsZSgpO1xuXG5cdFx0Xy5iaW5kQWxsKCB0aGlzLCAnc2V0Q29sdW1ucycgKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnJlc2l6ZSApIHtcblx0XHRcdHRoaXMub24oICdyZWFkeScsIHRoaXMuYmluZEV2ZW50cyApO1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLm9uKCAnb3BlbicsIHRoaXMuc2V0Q29sdW1ucyApO1xuXG5cdFx0XHQvLyBDYWxsIHRoaXMuc2V0Q29sdW1ucygpIGFmdGVyIHRoaXMgdmlldyBoYXMgYmVlbiByZW5kZXJlZCBpbiB0aGUgRE9NIHNvXG5cdFx0XHQvLyBhdHRhY2htZW50cyBnZXQgcHJvcGVyIHdpZHRoIGFwcGxpZWQuXG5cdFx0XHRfLmRlZmVyKCB0aGlzLnNldENvbHVtbnMsIHRoaXMgKTtcblx0XHR9XG5cdH0sXG5cblx0YmluZEV2ZW50czogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kd2luZG93Lm9mZiggdGhpcy5yZXNpemVFdmVudCApLm9uKCB0aGlzLnJlc2l6ZUV2ZW50LCBfLmRlYm91bmNlKCB0aGlzLnNldENvbHVtbnMsIDUwICkgKTtcblx0fSxcblxuXHRhdHRhY2htZW50Rm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJCggJ2xpOmZpcnN0JyApLmZvY3VzKCk7XG5cdH0sXG5cblx0cmVzdG9yZUZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiQoICdsaS5zZWxlY3RlZDpmaXJzdCcgKS5mb2N1cygpO1xuXHR9LFxuXG5cdGFycm93RXZlbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYXR0YWNobWVudHMgPSB0aGlzLiRlbC5jaGlsZHJlbiggJ2xpJyApLFxuXHRcdFx0cGVyUm93ID0gdGhpcy5jb2x1bW5zLFxuXHRcdFx0aW5kZXggPSBhdHRhY2htZW50cy5maWx0ZXIoICc6Zm9jdXMnICkuaW5kZXgoKSxcblx0XHRcdHJvdyA9ICggaW5kZXggKyAxICkgPD0gcGVyUm93ID8gMSA6IE1hdGguY2VpbCggKCBpbmRleCArIDEgKSAvIHBlclJvdyApO1xuXG5cdFx0aWYgKCBpbmRleCA9PT0gLTEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTGVmdCBhcnJvd1xuXHRcdGlmICggMzcgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRpZiAoIDAgPT09IGluZGV4ICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhdHRhY2htZW50cy5lcSggaW5kZXggLSAxICkuZm9jdXMoKTtcblx0XHR9XG5cblx0XHQvLyBVcCBhcnJvd1xuXHRcdGlmICggMzggPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRpZiAoIDEgPT09IHJvdyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YXR0YWNobWVudHMuZXEoIGluZGV4IC0gcGVyUm93ICkuZm9jdXMoKTtcblx0XHR9XG5cblx0XHQvLyBSaWdodCBhcnJvd1xuXHRcdGlmICggMzkgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRpZiAoIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gaW5kZXggKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGF0dGFjaG1lbnRzLmVxKCBpbmRleCArIDEgKS5mb2N1cygpO1xuXHRcdH1cblxuXHRcdC8vIERvd24gYXJyb3dcblx0XHRpZiAoIDQwID09PSBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0aWYgKCBNYXRoLmNlaWwoIGF0dGFjaG1lbnRzLmxlbmd0aCAvIHBlclJvdyApID09PSByb3cgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGF0dGFjaG1lbnRzLmVxKCBpbmRleCArIHBlclJvdyApLmZvY3VzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbi5wcm9wcy5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHRpZiAoIHRoaXMub3B0aW9ucy5yZXNpemUgKSB7XG5cdFx0XHR0aGlzLiR3aW5kb3cub2ZmKCB0aGlzLnJlc2l6ZUV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdHNldENvbHVtbnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwcmV2ID0gdGhpcy5jb2x1bW5zLFxuXHRcdFx0d2lkdGggPSB0aGlzLiRlbC53aWR0aCgpO1xuXG5cdFx0aWYgKCB3aWR0aCApIHtcblx0XHRcdHRoaXMuY29sdW1ucyA9IE1hdGgubWluKCBNYXRoLnJvdW5kKCB3aWR0aCAvIHRoaXMub3B0aW9ucy5pZGVhbENvbHVtbldpZHRoICksIDEyICkgfHwgMTtcblxuXHRcdFx0aWYgKCAhIHByZXYgfHwgcHJldiAhPT0gdGhpcy5jb2x1bW5zICkge1xuXHRcdFx0XHR0aGlzLiRlbC5jbG9zZXN0KCAnLm1lZGlhLWZyYW1lLWNvbnRlbnQnICkuYXR0ciggJ2RhdGEtY29sdW1ucycsIHRoaXMuY29sdW1ucyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRpbml0U29ydGFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xuXG5cdFx0aWYgKCB3cC5tZWRpYS5pc1RvdWNoRGV2aWNlIHx8ICEgdGhpcy5vcHRpb25zLnNvcnRhYmxlIHx8ICEgJC5mbi5zb3J0YWJsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5zb3J0YWJsZSggXy5leHRlbmQoe1xuXHRcdFx0Ly8gSWYgdGhlIGBjb2xsZWN0aW9uYCBoYXMgYSBgY29tcGFyYXRvcmAsIGRpc2FibGUgc29ydGluZy5cblx0XHRcdGRpc2FibGVkOiAhISBjb2xsZWN0aW9uLmNvbXBhcmF0b3IsXG5cblx0XHRcdC8vIENoYW5nZSB0aGUgcG9zaXRpb24gb2YgdGhlIGF0dGFjaG1lbnQgYXMgc29vbiBhcyB0aGVcblx0XHRcdC8vIG1vdXNlIHBvaW50ZXIgb3ZlcmxhcHMgYSB0aHVtYm5haWwuXG5cdFx0XHR0b2xlcmFuY2U6ICdwb2ludGVyJyxcblxuXHRcdFx0Ly8gUmVjb3JkIHRoZSBpbml0aWFsIGBpbmRleGAgb2YgdGhlIGRyYWdnZWQgbW9kZWwuXG5cdFx0XHRzdGFydDogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0dWkuaXRlbS5kYXRhKCdzb3J0YWJsZUluZGV4U3RhcnQnLCB1aS5pdGVtLmluZGV4KCkpO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBtb2RlbCdzIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uLlxuXHRcdFx0Ly8gRG8gc28gc2lsZW50bHksIGFzIHRoZSB2aWV3IGlzIGFscmVhZHkgYWNjdXJhdGUuXG5cdFx0XHR1cGRhdGU6IGZ1bmN0aW9uKCBldmVudCwgdWkgKSB7XG5cdFx0XHRcdHZhciBtb2RlbCA9IGNvbGxlY3Rpb24uYXQoIHVpLml0ZW0uZGF0YSgnc29ydGFibGVJbmRleFN0YXJ0JykgKSxcblx0XHRcdFx0XHRjb21wYXJhdG9yID0gY29sbGVjdGlvbi5jb21wYXJhdG9yO1xuXG5cdFx0XHRcdC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIGNvbXBhcmF0b3IgdG8gcHJldmVudCBgYWRkYFxuXHRcdFx0XHQvLyBmcm9tIHJlLXNvcnRpbmcuXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uLmNvbXBhcmF0b3I7XG5cblx0XHRcdFx0Ly8gU2lsZW50bHkgc2hpZnQgdGhlIG1vZGVsIHRvIGl0cyBuZXcgaW5kZXguXG5cdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlKCBtb2RlbCwge1xuXHRcdFx0XHRcdHNpbGVudDogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29sbGVjdGlvbi5hZGQoIG1vZGVsLCB7XG5cdFx0XHRcdFx0c2lsZW50OiB0cnVlLFxuXHRcdFx0XHRcdGF0OiAgICAgdWkuaXRlbS5pbmRleCgpXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIGNvbXBhcmF0b3IuXG5cdFx0XHRcdGNvbGxlY3Rpb24uY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7XG5cblx0XHRcdFx0Ly8gRmlyZSB0aGUgYHJlc2V0YCBldmVudCB0byBlbnN1cmUgb3RoZXIgY29sbGVjdGlvbnMgc3luYy5cblx0XHRcdFx0Y29sbGVjdGlvbi50cmlnZ2VyKCAncmVzZXQnLCBjb2xsZWN0aW9uICk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGNvbGxlY3Rpb24gaXMgc29ydGVkIGJ5IG1lbnUgb3JkZXIsXG5cdFx0XHRcdC8vIHVwZGF0ZSB0aGUgbWVudSBvcmRlci5cblx0XHRcdFx0Y29sbGVjdGlvbi5zYXZlTWVudU9yZGVyKCk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcy5vcHRpb25zLnNvcnRhYmxlICkgKTtcblxuXHRcdC8vIElmIHRoZSBgb3JkZXJieWAgcHJvcGVydHkgaXMgY2hhbmdlZCBvbiB0aGUgYGNvbGxlY3Rpb25gLFxuXHRcdC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgYGNvbXBhcmF0b3JgLiBJZiBzbywgZGlzYWJsZSBzb3J0aW5nLlxuXHRcdGNvbGxlY3Rpb24ucHJvcHMub24oICdjaGFuZ2U6b3JkZXJieScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kZWwuc29ydGFibGUoICdvcHRpb24nLCAnZGlzYWJsZWQnLCAhISBjb2xsZWN0aW9uLmNvbXBhcmF0b3IgKTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHR0aGlzLmNvbGxlY3Rpb24ucHJvcHMub24oICdjaGFuZ2U6b3JkZXJieScsIHRoaXMucmVmcmVzaFNvcnRhYmxlLCB0aGlzICk7XG5cdFx0dGhpcy5yZWZyZXNoU29ydGFibGUoKTtcblx0fSxcblxuXHRyZWZyZXNoU29ydGFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggd3AubWVkaWEuaXNUb3VjaERldmljZSB8fCAhIHRoaXMub3B0aW9ucy5zb3J0YWJsZSB8fCAhICQuZm4uc29ydGFibGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGBjb2xsZWN0aW9uYCBoYXMgYSBgY29tcGFyYXRvcmAsIGRpc2FibGUgc29ydGluZy5cblx0XHR2YXIgY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbixcblx0XHRcdG9yZGVyYnkgPSBjb2xsZWN0aW9uLnByb3BzLmdldCgnb3JkZXJieScpLFxuXHRcdFx0ZW5hYmxlZCA9ICdtZW51T3JkZXInID09PSBvcmRlcmJ5IHx8ICEgY29sbGVjdGlvbi5jb21wYXJhdG9yO1xuXG5cdFx0dGhpcy4kZWwuc29ydGFibGUoICdvcHRpb24nLCAnZGlzYWJsZWQnLCAhIGVuYWJsZWQgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fVxuXHQgKi9cblx0Y3JlYXRlQXR0YWNobWVudFZpZXc6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdHZhciB2aWV3ID0gbmV3IHRoaXMub3B0aW9ucy5BdHRhY2htZW50Vmlldyh7XG5cdFx0XHRjb250cm9sbGVyOiAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0bW9kZWw6ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQsXG5cdFx0XHRjb2xsZWN0aW9uOiAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uLFxuXHRcdFx0c2VsZWN0aW9uOiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25cblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzLl92aWV3c0J5Q2lkWyBhdHRhY2htZW50LmNpZCBdID0gdmlldztcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBDcmVhdGUgYWxsIG9mIHRoZSBBdHRhY2htZW50IHZpZXdzLCBhbmQgcmVwbGFjZVxuXHRcdC8vIHRoZSBsaXN0IGluIGEgc2luZ2xlIERPTSBvcGVyYXRpb24uXG5cdFx0aWYgKCB0aGlzLmNvbGxlY3Rpb24ubGVuZ3RoICkge1xuXHRcdFx0dGhpcy52aWV3cy5zZXQoIHRoaXMuY29sbGVjdGlvbi5tYXAoIHRoaXMuY3JlYXRlQXR0YWNobWVudFZpZXcsIHRoaXMgKSApO1xuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIG5vIGVsZW1lbnRzLCBjbGVhciB0aGUgdmlld3MgYW5kIGxvYWQgc29tZS5cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52aWV3cy51bnNldCgpO1xuXHRcdFx0dGhpcy5jb2xsZWN0aW9uLm1vcmUoKS5kb25lKCB0aGlzLnNjcm9sbCApO1xuXHRcdH1cblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gVHJpZ2dlciB0aGUgc2Nyb2xsIGV2ZW50IHRvIGNoZWNrIGlmIHdlJ3JlIHdpdGhpbiB0aGVcblx0XHQvLyB0aHJlc2hvbGQgdG8gcXVlcnkgZm9yIGFkZGl0aW9uYWwgYXR0YWNobWVudHMuXG5cdFx0dGhpcy5zY3JvbGwoKTtcblx0fSxcblxuXHRzY3JvbGw6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2aWV3ID0gdGhpcyxcblx0XHRcdGVsID0gdGhpcy5vcHRpb25zLnNjcm9sbEVsZW1lbnQsXG5cdFx0XHRzY3JvbGxUb3AgPSBlbC5zY3JvbGxUb3AsXG5cdFx0XHR0b29sYmFyO1xuXG5cdFx0Ly8gVGhlIHNjcm9sbCBldmVudCBvY2N1cnMgb24gdGhlIGRvY3VtZW50LCBidXQgdGhlIGVsZW1lbnRcblx0XHQvLyB0aGF0IHNob3VsZCBiZSBjaGVja2VkIGlzIHRoZSBkb2N1bWVudCBib2R5LlxuXHRcdGlmICggZWwgPT09IGRvY3VtZW50ICkge1xuXHRcdFx0ZWwgPSBkb2N1bWVudC5ib2R5O1xuXHRcdFx0c2Nyb2xsVG9wID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhICQoZWwpLmlzKCc6dmlzaWJsZScpIHx8ICEgdGhpcy5jb2xsZWN0aW9uLmhhc01vcmUoKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0b29sYmFyID0gdGhpcy52aWV3cy5wYXJlbnQudG9vbGJhcjtcblxuXHRcdC8vIFNob3cgdGhlIHNwaW5uZXIgb25seSBpZiB3ZSBhcmUgY2xvc2UgdG8gdGhlIGJvdHRvbS5cblx0XHRpZiAoIGVsLnNjcm9sbEhlaWdodCAtICggc2Nyb2xsVG9wICsgZWwuY2xpZW50SGVpZ2h0ICkgPCBlbC5jbGllbnRIZWlnaHQgLyAzICkge1xuXHRcdFx0dG9vbGJhci5nZXQoJ3NwaW5uZXInKS5zaG93KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBlbC5zY3JvbGxIZWlnaHQgPCBzY3JvbGxUb3AgKyAoIGVsLmNsaWVudEhlaWdodCAqIHRoaXMub3B0aW9ucy5yZWZyZXNoVGhyZXNob2xkICkgKSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb24ubW9yZSgpLmRvbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZpZXcuc2Nyb2xsKCk7XG5cdFx0XHRcdHRvb2xiYXIuZ2V0KCdzcGlubmVyJykuaGlkZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdHRhY2htZW50cztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICBbb3B0aW9uc10gICAgICAgICAgICAgICBUaGUgb3B0aW9ucyBoYXNoIHBhc3NlZCB0byB0aGUgdmlldy5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9IFtvcHRpb25zLmZpbHRlcnM9ZmFsc2VdIFdoaWNoIGZpbHRlcnMgdG8gc2hvdyBpbiB0aGUgYnJvd3NlcidzIHRvb2xiYXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICd1cGxvYWRlZCcgYW5kICdhbGwnLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgW29wdGlvbnMuc2VhcmNoPXRydWVdICAgV2hldGhlciB0byBzaG93IHRoZSBzZWFyY2ggaW50ZXJmYWNlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlcidzIHRvb2xiYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICBbb3B0aW9ucy5kYXRlPXRydWVdICAgICBXaGV0aGVyIHRvIHNob3cgdGhlIGRhdGUgZmlsdGVyIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlcidzIHRvb2xiYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICBbb3B0aW9ucy5kaXNwbGF5PWZhbHNlXSBXaGV0aGVyIHRvIHNob3cgdGhlIGF0dGFjaG1lbnRzIGRpc3BsYXkgc2V0dGluZ3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgaW4gdGhlIHNpZGViYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfSBbb3B0aW9ucy5zaWRlYmFyPXRydWVdICBXaGV0aGVyIHRvIGNyZWF0ZSBhIHNpZGViYXIgZm9yIHRoZSBicm93c2VyLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyB0cnVlLCBmYWxzZSwgYW5kICdlcnJvcnMnLlxuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdG1lZGlhVHJhc2ggPSB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1lZGlhVHJhc2gsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdCQgPSBqUXVlcnksXG5cdEF0dGFjaG1lbnRzQnJvd3NlcjtcblxuQXR0YWNobWVudHNCcm93c2VyID0gVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICdhdHRhY2htZW50cy1icm93c2VyJyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdGZpbHRlcnM6IGZhbHNlLFxuXHRcdFx0c2VhcmNoOiAgdHJ1ZSxcblx0XHRcdGRhdGU6ICAgIHRydWUsXG5cdFx0XHRkaXNwbGF5OiBmYWxzZSxcblx0XHRcdHNpZGViYXI6IHRydWUsXG5cdFx0XHRBdHRhY2htZW50Vmlldzogd3AubWVkaWEudmlldy5BdHRhY2htZW50LkxpYnJhcnlcblx0XHR9KTtcblxuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ3RvZ2dsZTp1cGxvYWQ6YXR0YWNobWVudCcsIHRoaXMudG9nZ2xlVXBsb2FkZXIsIHRoaXMgKTtcblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdlZGl0OnNlbGVjdGlvbicsIHRoaXMuZWRpdFNlbGVjdGlvbiApO1xuXHRcdHRoaXMuY3JlYXRlVG9vbGJhcigpO1xuXHRcdHRoaXMuY3JlYXRlVXBsb2FkZXIoKTtcblx0XHR0aGlzLmNyZWF0ZUF0dGFjaG1lbnRzKCk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc2lkZWJhciApIHtcblx0XHRcdHRoaXMuY3JlYXRlU2lkZWJhcigpO1xuXHRcdH1cblx0XHR0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcblxuXHRcdGlmICggISB0aGlzLm9wdGlvbnMuc2lkZWJhciB8fCAnZXJyb3JzJyA9PT0gdGhpcy5vcHRpb25zLnNpZGViYXIgKSB7XG5cdFx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ2hpZGUtc2lkZWJhcicgKTtcblxuXHRcdFx0aWYgKCAnZXJyb3JzJyA9PT0gdGhpcy5vcHRpb25zLnNpZGViYXIgKSB7XG5cdFx0XHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnc2lkZWJhci1mb3ItZXJyb3JzJyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY29sbGVjdGlvbi5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnVwZGF0ZUNvbnRlbnQsIHRoaXMgKTtcblx0fSxcblxuXHRlZGl0U2VsZWN0aW9uOiBmdW5jdGlvbiggbW9kYWwgKSB7XG5cdFx0bW9kYWwuJCggJy5tZWRpYS1idXR0b24tYmFja1RvTGlicmFyeScgKS5mb2N1cygpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXJ9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNyZWF0ZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBMaWJyYXJ5Vmlld1N3aXRjaGVyLCBGaWx0ZXJzLCB0b29sYmFyT3B0aW9ucztcblxuXHRcdHRvb2xiYXJPcHRpb25zID0ge1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyXG5cdFx0fTtcblxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2dyaWQnICkgKSB7XG5cdFx0XHR0b29sYmFyT3B0aW9ucy5jbGFzc05hbWUgPSAnbWVkaWEtdG9vbGJhciB3cC1maWx0ZXInO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCogQG1lbWJlciB7d3AubWVkaWEudmlldy5Ub29sYmFyfVxuXHRcdCovXG5cdFx0dGhpcy50b29sYmFyID0gbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhciggdG9vbGJhck9wdGlvbnMgKTtcblxuXHRcdHRoaXMudmlld3MuYWRkKCB0aGlzLnRvb2xiYXIgKTtcblxuXHRcdHRoaXMudG9vbGJhci5zZXQoICdzcGlubmVyJywgbmV3IHdwLm1lZGlhLnZpZXcuU3Bpbm5lcih7XG5cdFx0XHRwcmlvcml0eTogLTYwXG5cdFx0fSkgKTtcblxuXHRcdGlmICggLTEgIT09ICQuaW5BcnJheSggdGhpcy5vcHRpb25zLmZpbHRlcnMsIFsgJ3VwbG9hZGVkJywgJ2FsbCcgXSApICkge1xuXHRcdFx0Ly8gXCJGaWx0ZXJzXCIgd2lsbCByZXR1cm4gYSA8c2VsZWN0PiwgbmVlZCB0byByZW5kZXJcblx0XHRcdC8vIHNjcmVlbiByZWFkZXIgdGV4dCBiZWZvcmVcblx0XHRcdHRoaXMudG9vbGJhci5zZXQoICdmaWx0ZXJzTGFiZWwnLCBuZXcgd3AubWVkaWEudmlldy5MYWJlbCh7XG5cdFx0XHRcdHZhbHVlOiBsMTBuLmZpbHRlckJ5VHlwZSxcblx0XHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRcdCdmb3InOiAgJ21lZGlhLWF0dGFjaG1lbnQtZmlsdGVycydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgLTgwXG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXG5cdFx0XHRpZiAoICd1cGxvYWRlZCcgPT09IHRoaXMub3B0aW9ucy5maWx0ZXJzICkge1xuXHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZmlsdGVycycsIG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLlVwbG9hZGVkKHtcblx0XHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0bW9kZWw6ICAgICAgdGhpcy5jb2xsZWN0aW9uLnByb3BzLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAgIC04MFxuXHRcdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0RmlsdGVycyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLkFsbCh7XG5cdFx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdG1vZGVsOiAgICAgIHRoaXMuY29sbGVjdGlvbi5wcm9wcyxcblx0XHRcdFx0XHRwcmlvcml0eTogICAtODBcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2ZpbHRlcnMnLCBGaWx0ZXJzLnJlbmRlcigpICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmVlbHMgb2RkIHRvIGJyaW5nIHRoZSBnbG9iYWwgbWVkaWEgbGlicmFyeSBzd2l0Y2hlciBpbnRvIHRoZSBBdHRhY2htZW50XG5cdFx0Ly8gYnJvd3NlciB2aWV3LiBJcyB0aGlzIGEgdXNlIGNhc2UgZm9yIGRvQWN0aW9uKCAnYWRkOnRvb2xiYXItaXRlbXM6YXR0YWNobWVudHMtYnJvd3NlcicsIHRoaXMudG9vbGJhciApO1xuXHRcdC8vIHdoaWNoIHRoZSBjb250cm9sbGVyIGNhbiB0YXAgaW50byBhbmQgYWRkIHRoaXMgdmlldz9cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXHRcdFx0TGlicmFyeVZpZXdTd2l0Y2hlciA9IFZpZXcuZXh0ZW5kKHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAndmlldy1zd2l0Y2ggbWVkaWEtZ3JpZC12aWV3LXN3aXRjaCcsXG5cdFx0XHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSggJ21lZGlhLWxpYnJhcnktdmlldy1zd2l0Y2hlcicpXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2xpYnJhcnlWaWV3U3dpdGNoZXInLCBuZXcgTGlicmFyeVZpZXdTd2l0Y2hlcih7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC05MFxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0Ly8gRGF0ZUZpbHRlciBpcyBhIDxzZWxlY3Q+LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGF0ZUZpbHRlckxhYmVsJywgbmV3IHdwLm1lZGlhLnZpZXcuTGFiZWwoe1xuXHRcdFx0XHR2YWx1ZTogbDEwbi5maWx0ZXJCeURhdGUsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLWF0dGFjaG1lbnQtZGF0ZS1maWx0ZXJzJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogLTc1XG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RhdGVGaWx0ZXInLCBuZXcgd3AubWVkaWEudmlldy5EYXRlRmlsdGVyKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAtNzVcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cblx0XHRcdC8vIEJ1bGtTZWxlY3Rpb24gaXMgYSA8ZGl2PiB3aXRoIHN1YnZpZXdzLCBpbmNsdWRpbmcgc2NyZWVuIHJlYWRlciB0ZXh0XG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VsZWN0TW9kZVRvZ2dsZUJ1dHRvbicsIG5ldyB3cC5tZWRpYS52aWV3LlNlbGVjdE1vZGVUb2dnbGVCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBsMTBuLmJ1bGtTZWxlY3QsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC03MFxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RlbGV0ZVNlbGVjdGVkQnV0dG9uJywgbmV3IHdwLm1lZGlhLnZpZXcuRGVsZXRlU2VsZWN0ZWRCdXR0b24oe1xuXHRcdFx0XHRmaWx0ZXJzOiBGaWx0ZXJzLFxuXHRcdFx0XHRzdHlsZTogJ3ByaW1hcnknLFxuXHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0dGV4dDogbWVkaWFUcmFzaCA/IGwxMG4udHJhc2hTZWxlY3RlZCA6IGwxMG4uZGVsZXRlU2VsZWN0ZWQsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC02MCxcblx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaGFuZ2VkID0gW10sIHJlbW92ZWQgPSBbXSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbiA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCggJ3NlbGVjdGlvbicgKSxcblx0XHRcdFx0XHRcdGxpYnJhcnkgPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoICdsaWJyYXJ5JyApO1xuXG5cdFx0XHRcdFx0aWYgKCAhIHNlbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhIG1lZGlhVHJhc2ggJiYgISB3aW5kb3cuY29uZmlybSggbDEwbi53YXJuQnVsa0RlbGV0ZSApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggbWVkaWFUcmFzaCAmJlxuXHRcdFx0XHRcdFx0J3RyYXNoJyAhPT0gc2VsZWN0aW9uLmF0KCAwICkuZ2V0KCAnc3RhdHVzJyApICYmXG5cdFx0XHRcdFx0XHQhIHdpbmRvdy5jb25maXJtKCBsMTBuLndhcm5CdWxrVHJhc2ggKSApIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICEgbW9kZWwuZ2V0KCAnbm9uY2VzJyApWydkZWxldGUnXSApIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlZC5wdXNoKCBtb2RlbCApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICggbWVkaWFUcmFzaCAmJiAndHJhc2gnID09PSBtb2RlbC5nZXQoICdzdGF0dXMnICkgKSB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsLnNldCggJ3N0YXR1cycsICdpbmhlcml0JyApO1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2VkLnB1c2goIG1vZGVsLnNhdmUoKSApO1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVkLnB1c2goIG1vZGVsICk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBtZWRpYVRyYXNoICkge1xuXHRcdFx0XHRcdFx0XHRtb2RlbC5zZXQoICdzdGF0dXMnLCAndHJhc2gnICk7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZWQucHVzaCggbW9kZWwuc2F2ZSgpICk7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZWQucHVzaCggbW9kZWwgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsLmRlc3Ryb3koe3dhaXQ6IHRydWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRpZiAoIGNoYW5nZWQubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLnJlbW92ZSggcmVtb3ZlZCApO1xuXG5cdFx0XHRcdFx0XHQkLndoZW4uYXBwbHkoIG51bGwsIGNoYW5nZWQgKS50aGVuKCBfLmJpbmQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRsaWJyYXJ5Ll9yZXF1ZXJ5KCB0cnVlICk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdFx0fSwgdGhpcyApICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0aWYgKCBtZWRpYVRyYXNoICkge1xuXHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGVsZXRlU2VsZWN0ZWRQZXJtYW5lbnRseUJ1dHRvbicsIG5ldyB3cC5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkUGVybWFuZW50bHlCdXR0b24oe1xuXHRcdFx0XHRcdGZpbHRlcnM6IEZpbHRlcnMsXG5cdFx0XHRcdFx0c3R5bGU6ICdwcmltYXJ5Jyxcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHR0ZXh0OiBsMTBuLmRlbGV0ZVNlbGVjdGVkLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRwcmlvcml0eTogLTU1LFxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciByZW1vdmVkID0gW10sIHNlbGVjdGlvbiA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCggJ3NlbGVjdGlvbicgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCAhIHNlbGVjdGlvbi5sZW5ndGggfHwgISB3aW5kb3cuY29uZmlybSggbDEwbi53YXJuQnVsa0RlbGV0ZSApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISBtb2RlbC5nZXQoICdub25jZXMnIClbJ2RlbGV0ZSddICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlbW92ZWQucHVzaCggbW9kZWwgKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRtb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5yZW1vdmUoIHJlbW92ZWQgKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkucmVuZGVyKCkgKTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMub3B0aW9ucy5kYXRlICkge1xuXHRcdFx0Ly8gRGF0ZUZpbHRlciBpcyBhIDxzZWxlY3Q+LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGF0ZUZpbHRlckxhYmVsJywgbmV3IHdwLm1lZGlhLnZpZXcuTGFiZWwoe1xuXHRcdFx0XHR2YWx1ZTogbDEwbi5maWx0ZXJCeURhdGUsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLWF0dGFjaG1lbnQtZGF0ZS1maWx0ZXJzJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogLTc1XG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RhdGVGaWx0ZXInLCBuZXcgd3AubWVkaWEudmlldy5EYXRlRmlsdGVyKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAtNzVcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc2VhcmNoICkge1xuXHRcdFx0Ly8gU2VhcmNoIGlzIGFuIGlucHV0LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VhcmNoTGFiZWwnLCBuZXcgd3AubWVkaWEudmlldy5MYWJlbCh7XG5cdFx0XHRcdHZhbHVlOiBsMTBuLnNlYXJjaE1lZGlhTGFiZWwsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLXNlYXJjaC1pbnB1dCdcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgNjBcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VhcmNoJywgbmV3IHdwLm1lZGlhLnZpZXcuU2VhcmNoKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAgIDYwXG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmRyYWdJbmZvICkge1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RyYWdJbmZvJywgbmV3IFZpZXcoe1xuXHRcdFx0XHRlbDogJCggJzxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbnNcIj4nICsgbDEwbi5kcmFnSW5mbyArICc8L2Rpdj4nIClbMF0sXG5cdFx0XHRcdHByaW9yaXR5OiAtNDBcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3VnZ2VzdGVkV2lkdGggJiYgdGhpcy5vcHRpb25zLnN1Z2dlc3RlZEhlaWdodCApIHtcblx0XHRcdHRoaXMudG9vbGJhci5zZXQoICdzdWdnZXN0ZWREaW1lbnNpb25zJywgbmV3IFZpZXcoe1xuXHRcdFx0XHRlbDogJCggJzxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbnNcIj4nICsgbDEwbi5zdWdnZXN0ZWREaW1lbnNpb25zICsgJyAnICsgdGhpcy5vcHRpb25zLnN1Z2dlc3RlZFdpZHRoICsgJyAmdGltZXM7ICcgKyB0aGlzLm9wdGlvbnMuc3VnZ2VzdGVkSGVpZ2h0ICsgJzwvZGl2PicgKVswXSxcblx0XHRcdFx0cHJpb3JpdHk6IC00MFxuXHRcdFx0fSkgKTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLFxuXHRcdFx0bm9JdGVtc1ZpZXc7XG5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXHRcdFx0bm9JdGVtc1ZpZXcgPSB2aWV3LmF0dGFjaG1lbnRzTm9SZXN1bHRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub0l0ZW1zVmlldyA9IHZpZXcudXBsb2FkZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHRoaXMuY29sbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnRvb2xiYXIuZ2V0KCAnc3Bpbm5lcicgKS5zaG93KCk7XG5cdFx0XHR0aGlzLmRmZCA9IHRoaXMuY29sbGVjdGlvbi5tb3JlKCkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISB2aWV3LmNvbGxlY3Rpb24ubGVuZ3RoICkge1xuXHRcdFx0XHRcdG5vSXRlbXNWaWV3LiRlbC5yZW1vdmVDbGFzcyggJ2hpZGRlbicgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRub0l0ZW1zVmlldy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmlldy50b29sYmFyLmdldCggJ3NwaW5uZXInICkuaGlkZSgpO1xuXHRcdFx0fSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub0l0ZW1zVmlldy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdFx0XHR2aWV3LnRvb2xiYXIuZ2V0KCAnc3Bpbm5lcicgKS5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGNyZWF0ZVVwbG9hZGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVwbG9hZGVyID0gbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmUoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0c3RhdHVzOiAgICAgZmFsc2UsXG5cdFx0XHRtZXNzYWdlOiAgICB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKSA/ICcnIDogbDEwbi5ub0l0ZW1zRm91bmQsXG5cdFx0XHRjYW5DbG9zZTogICB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy51cGxvYWRlci5oaWRlKCk7XG5cdFx0dGhpcy52aWV3cy5hZGQoIHRoaXMudXBsb2FkZXIgKTtcblx0fSxcblxuXHR0b2dnbGVVcGxvYWRlcjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLnVwbG9hZGVyLiRlbC5oYXNDbGFzcyggJ2hpZGRlbicgKSApIHtcblx0XHRcdHRoaXMudXBsb2FkZXIuc2hvdygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLmhpZGUoKTtcblx0XHR9XG5cdH0sXG5cblx0Y3JlYXRlQXR0YWNobWVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYXR0YWNobWVudHMgPSBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50cyh7XG5cdFx0XHRjb250cm9sbGVyOiAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0Y29sbGVjdGlvbjogICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcblx0XHRcdHNlbGVjdGlvbjogICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLFxuXHRcdFx0bW9kZWw6ICAgICAgICAgICAgICAgIHRoaXMubW9kZWwsXG5cdFx0XHRzb3J0YWJsZTogICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvcnRhYmxlLFxuXHRcdFx0c2Nyb2xsRWxlbWVudDogICAgICAgIHRoaXMub3B0aW9ucy5zY3JvbGxFbGVtZW50LFxuXHRcdFx0aWRlYWxDb2x1bW5XaWR0aDogICAgIHRoaXMub3B0aW9ucy5pZGVhbENvbHVtbldpZHRoLFxuXG5cdFx0XHQvLyBUaGUgc2luZ2xlIGBBdHRhY2htZW50YCB2aWV3IHRvIGJlIHVzZWQgaW4gdGhlIGBBdHRhY2htZW50c2Agdmlldy5cblx0XHRcdEF0dGFjaG1lbnRWaWV3OiB0aGlzLm9wdGlvbnMuQXR0YWNobWVudFZpZXdcblx0XHR9KTtcblxuXHRcdC8vIEFkZCBrZXlkb3duIGxpc3RlbmVyIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgQXR0YWNobWVudHMgdmlld1xuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ2F0dGFjaG1lbnQ6a2V5ZG93bjphcnJvdycsICAgICBfLmJpbmQoIHRoaXMuYXR0YWNobWVudHMuYXJyb3dFdmVudCwgdGhpcy5hdHRhY2htZW50cyApICk7XG5cdFx0dGhpcy5jb250cm9sbGVyLm9uKCAnYXR0YWNobWVudDpkZXRhaWxzOnNoaWZ0LXRhYicsIF8uYmluZCggdGhpcy5hdHRhY2htZW50cy5yZXN0b3JlRm9jdXMsIHRoaXMuYXR0YWNobWVudHMgKSApO1xuXG5cdFx0dGhpcy52aWV3cy5hZGQoIHRoaXMuYXR0YWNobWVudHMgKTtcblxuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKSApIHtcblx0XHRcdHRoaXMuYXR0YWNobWVudHNOb1Jlc3VsdHMgPSBuZXcgVmlldyh7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0dGFnTmFtZTogJ3AnXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hdHRhY2htZW50c05vUmVzdWx0cy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4gbm8tbWVkaWEnICk7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzTm9SZXN1bHRzLiRlbC5odG1sKCBsMTBuLm5vTWVkaWEgKTtcblxuXHRcdFx0dGhpcy52aWV3cy5hZGQoIHRoaXMuYXR0YWNobWVudHNOb1Jlc3VsdHMgKTtcblx0XHR9XG5cdH0sXG5cblx0Y3JlYXRlU2lkZWJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG5cdFx0XHRzZWxlY3Rpb24gPSBvcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdHNpZGViYXIgPSB0aGlzLnNpZGViYXIgPSBuZXcgd3AubWVkaWEudmlldy5TaWRlYmFyKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyXG5cdFx0XHR9KTtcblxuXHRcdHRoaXMudmlld3MuYWRkKCBzaWRlYmFyICk7XG5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci51cGxvYWRlciApIHtcblx0XHRcdHNpZGViYXIuc2V0KCAndXBsb2FkcycsIG5ldyB3cC5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRwcmlvcml0eTogICA0MFxuXHRcdFx0fSkgKTtcblx0XHR9XG5cblx0XHRzZWxlY3Rpb24ub24oICdzZWxlY3Rpb246c2luZ2xlJywgdGhpcy5jcmVhdGVTaW5nbGUsIHRoaXMgKTtcblx0XHRzZWxlY3Rpb24ub24oICdzZWxlY3Rpb246dW5zaW5nbGUnLCB0aGlzLmRpc3Bvc2VTaW5nbGUsIHRoaXMgKTtcblxuXHRcdGlmICggc2VsZWN0aW9uLnNpbmdsZSgpICkge1xuXHRcdFx0dGhpcy5jcmVhdGVTaW5nbGUoKTtcblx0XHR9XG5cdH0sXG5cblx0Y3JlYXRlU2luZ2xlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2lkZWJhciA9IHRoaXMuc2lkZWJhcixcblx0XHRcdHNpbmdsZSA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb24uc2luZ2xlKCk7XG5cblx0XHRzaWRlYmFyLnNldCggJ2RldGFpbHMnLCBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50LkRldGFpbHMoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0bW9kZWw6ICAgICAgc2luZ2xlLFxuXHRcdFx0cHJpb3JpdHk6ICAgODBcblx0XHR9KSApO1xuXG5cdFx0c2lkZWJhci5zZXQoICdjb21wYXQnLCBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50Q29tcGF0KHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdG1vZGVsOiAgICAgIHNpbmdsZSxcblx0XHRcdHByaW9yaXR5OiAgIDEyMFxuXHRcdH0pICk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kaXNwbGF5ICkge1xuXHRcdFx0c2lkZWJhci5zZXQoICdkaXNwbGF5JywgbmV3IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXkoe1xuXHRcdFx0XHRjb250cm9sbGVyOiAgIHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0bW9kZWw6ICAgICAgICB0aGlzLm1vZGVsLmRpc3BsYXkoIHNpbmdsZSApLFxuXHRcdFx0XHRhdHRhY2htZW50OiAgIHNpbmdsZSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgICAxNjAsXG5cdFx0XHRcdHVzZXJTZXR0aW5nczogdGhpcy5tb2RlbC5nZXQoJ2Rpc3BsYXlVc2VyU2V0dGluZ3MnKVxuXHRcdFx0fSkgKTtcblx0XHR9XG5cblx0XHQvLyBTaG93IHRoZSBzaWRlYmFyIG9uIG1vYmlsZVxuXHRcdGlmICggdGhpcy5tb2RlbC5pZCA9PT0gJ2luc2VydCcgKSB7XG5cdFx0XHRzaWRlYmFyLiRlbC5hZGRDbGFzcyggJ3Zpc2libGUnICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3Bvc2VTaW5nbGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzaWRlYmFyID0gdGhpcy5zaWRlYmFyO1xuXHRcdHNpZGViYXIudW5zZXQoJ2RldGFpbHMnKTtcblx0XHRzaWRlYmFyLnVuc2V0KCdjb21wYXQnKTtcblx0XHRzaWRlYmFyLnVuc2V0KCdkaXNwbGF5Jyk7XG5cdFx0Ly8gSGlkZSB0aGUgc2lkZWJhciBvbiBtb2JpbGVcblx0XHRzaWRlYmFyLiRlbC5yZW1vdmVDbGFzcyggJ3Zpc2libGUnICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnRzQnJvd3NlcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50cy5TZWxlY3Rpb25cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBBdHRhY2htZW50cyA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHMsXG5cdFNlbGVjdGlvbjtcblxuU2VsZWN0aW9uID0gQXR0YWNobWVudHMuZXh0ZW5kKHtcblx0ZXZlbnRzOiB7fSxcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRzb3J0YWJsZTogICBmYWxzZSxcblx0XHRcdHJlc2l6ZTogICAgIGZhbHNlLFxuXG5cdFx0XHQvLyBUaGUgc2luZ2xlIGBBdHRhY2htZW50YCB2aWV3IHRvIGJlIHVzZWQgaW4gdGhlIGBBdHRhY2htZW50c2Agdmlldy5cblx0XHRcdEF0dGFjaG1lbnRWaWV3OiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuU2VsZWN0aW9uXG5cdFx0fSk7XG5cdFx0Ly8gQ2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzcy5cblx0XHRyZXR1cm4gQXR0YWNobWVudHMucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Rpb247XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQnV0dG9uR3JvdXBcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyICQgPSBCYWNrYm9uZS4kLFxuXHRCdXR0b25Hcm91cDtcblxuQnV0dG9uR3JvdXAgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ2J1dHRvbi1ncm91cCBidXR0b24tbGFyZ2UgbWVkaWEtYnV0dG9uLWdyb3VwJyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQvKipcblx0XHQgKiBAbWVtYmVyIHt3cC5tZWRpYS52aWV3LkJ1dHRvbltdfVxuXHRcdCAqL1xuXHRcdHRoaXMuYnV0dG9ucyA9IF8ubWFwKCB0aGlzLm9wdGlvbnMuYnV0dG9ucyB8fCBbXSwgZnVuY3Rpb24oIGJ1dHRvbiApIHtcblx0XHRcdGlmICggYnV0dG9uIGluc3RhbmNlb2YgQmFja2JvbmUuVmlldyApIHtcblx0XHRcdFx0cmV0dXJuIGJ1dHRvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBuZXcgd3AubWVkaWEudmlldy5CdXR0b24oIGJ1dHRvbiApLnJlbmRlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0ZGVsZXRlIHRoaXMub3B0aW9ucy5idXR0b25zO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuY2xhc3NlcyApIHtcblx0XHRcdHRoaXMuJGVsLmFkZENsYXNzKCB0aGlzLm9wdGlvbnMuY2xhc3NlcyApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQnV0dG9uR3JvdXB9XG5cdCAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLmh0bWwoICQoIF8ucGx1Y2soIHRoaXMuYnV0dG9ucywgJ2VsJyApICkuZGV0YWNoKCkgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQnV0dG9uR3JvdXA7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQnV0dG9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBCdXR0b24gPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgICdidXR0b24nLFxuXHRjbGFzc05hbWU6ICAnbWVkaWEtYnV0dG9uJyxcblx0YXR0cmlidXRlczogeyB0eXBlOiAnYnV0dG9uJyB9LFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayc6ICdjbGljaydcblx0fSxcblxuXHRkZWZhdWx0czoge1xuXHRcdHRleHQ6ICAgICAnJyxcblx0XHRzdHlsZTogICAgJycsXG5cdFx0c2l6ZTogICAgICdsYXJnZScsXG5cdFx0ZGlzYWJsZWQ6IGZhbHNlXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogQ3JlYXRlIGEgbW9kZWwgd2l0aCB0aGUgcHJvdmlkZWQgYGRlZmF1bHRzYC5cblx0XHQgKlxuXHRcdCAqIEBtZW1iZXIge0JhY2tib25lLk1vZGVsfVxuXHRcdCAqL1xuXHRcdHRoaXMubW9kZWwgPSBuZXcgQmFja2JvbmUuTW9kZWwoIHRoaXMuZGVmYXVsdHMgKTtcblxuXHRcdC8vIElmIGFueSBvZiB0aGUgYG9wdGlvbnNgIGhhdmUgYSBrZXkgZnJvbSBgZGVmYXVsdHNgLCBhcHBseSBpdHNcblx0XHQvLyB2YWx1ZSB0byB0aGUgYG1vZGVsYCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGBvcHRpb25zIG9iamVjdC5cblx0XHRfLmVhY2goIHRoaXMuZGVmYXVsdHMsIGZ1bmN0aW9uKCBkZWYsIGtleSApIHtcblx0XHRcdHZhciB2YWx1ZSA9IHRoaXMub3B0aW9uc1sga2V5IF07XG5cdFx0XHRpZiAoIF8uaXNVbmRlZmluZWQoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5tb2RlbC5zZXQoIGtleSwgdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnNbIGtleSBdO1xuXHRcdH0sIHRoaXMgKTtcblxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLnJlbmRlciApO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQnV0dG9ufSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2xhc3NlcyA9IFsgJ2J1dHRvbicsIHRoaXMuY2xhc3NOYW1lIF0sXG5cdFx0XHRtb2RlbCA9IHRoaXMubW9kZWwudG9KU09OKCk7XG5cblx0XHRpZiAoIG1vZGVsLnN0eWxlICkge1xuXHRcdFx0Y2xhc3Nlcy5wdXNoKCAnYnV0dG9uLScgKyBtb2RlbC5zdHlsZSApO1xuXHRcdH1cblxuXHRcdGlmICggbW9kZWwuc2l6ZSApIHtcblx0XHRcdGNsYXNzZXMucHVzaCggJ2J1dHRvbi0nICsgbW9kZWwuc2l6ZSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBfLnVuaXEoIGNsYXNzZXMuY29uY2F0KCB0aGlzLm9wdGlvbnMuY2xhc3NlcyApICk7XG5cdFx0dGhpcy5lbC5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oJyAnKTtcblxuXHRcdHRoaXMuJGVsLmF0dHIoICdkaXNhYmxlZCcsIG1vZGVsLmRpc2FibGVkICk7XG5cdFx0dGhpcy4kZWwudGV4dCggdGhpcy5tb2RlbC5nZXQoJ3RleHQnKSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdGNsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCAnIycgPT09IHRoaXMuYXR0cmlidXRlcy5ocmVmICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5jbGljayAmJiAhIHRoaXMubW9kZWwuZ2V0KCdkaXNhYmxlZCcpICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLmNsaWNrLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1dHRvbjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5Dcm9wcGVyXG4gKlxuICogVXNlcyB0aGUgaW1nQXJlYVNlbGVjdCBwbHVnaW4gdG8gYWxsb3cgYSB1c2VyIHRvIGNyb3AgYW4gaW1hZ2UuXG4gKlxuICogVGFrZXMgaW1nQXJlYVNlbGVjdCBvcHRpb25zIGZyb21cbiAqIHdwLmN1c3RvbWl6ZS5IZWFkZXJDb250cm9sLmNhbGN1bGF0ZUltYWdlU2VsZWN0T3B0aW9ucyB2aWFcbiAqIHdwLmN1c3RvbWl6ZS5IZWFkZXJDb250cm9sLm9wZW5NTS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHRVcGxvYWRlclN0YXR1cyA9IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXMsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdCQgPSBqUXVlcnksXG5cdENyb3BwZXI7XG5cbkNyb3BwZXIgPSBWaWV3LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2Nyb3AtY29udGVudCcsXG5cdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgnY3JvcC1jb250ZW50JyksXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uYmluZEFsbCh0aGlzLCAnb25JbWFnZUxvYWQnKTtcblx0fSxcblx0cmVhZHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udHJvbGxlci5mcmFtZS5vbignY29udGVudDplcnJvcjpjcm9wJywgdGhpcy5vbkVycm9yLCB0aGlzKTtcblx0XHR0aGlzLiRpbWFnZSA9IHRoaXMuJGVsLmZpbmQoJy5jcm9wLWltYWdlJyk7XG5cdFx0dGhpcy4kaW1hZ2Uub24oJ2xvYWQnLCB0aGlzLm9uSW1hZ2VMb2FkKTtcblx0XHQkKHdpbmRvdykub24oJ3Jlc2l6ZS5jcm9wcGVyJywgXy5kZWJvdW5jZSh0aGlzLm9uSW1hZ2VMb2FkLCAyNTApKTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHQkKHdpbmRvdykub2ZmKCdyZXNpemUuY3JvcHBlcicpO1xuXHRcdHRoaXMuJGVsLnJlbW92ZSgpO1xuXHRcdHRoaXMuJGVsLm9mZigpO1xuXHRcdFZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR9LFxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IGwxMG4uY3JvcFlvdXJJbWFnZSxcblx0XHRcdHVybDogdGhpcy5vcHRpb25zLmF0dGFjaG1lbnQuZ2V0KCd1cmwnKVxuXHRcdH07XG5cdH0sXG5cdG9uSW1hZ2VMb2FkOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW1nT3B0aW9ucyA9IHRoaXMuY29udHJvbGxlci5nZXQoJ2ltZ1NlbGVjdE9wdGlvbnMnKTtcblx0XHRpZiAodHlwZW9mIGltZ09wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGltZ09wdGlvbnMgPSBpbWdPcHRpb25zKHRoaXMub3B0aW9ucy5hdHRhY2htZW50LCB0aGlzLmNvbnRyb2xsZXIpO1xuXHRcdH1cblxuXHRcdGltZ09wdGlvbnMgPSBfLmV4dGVuZChpbWdPcHRpb25zLCB7cGFyZW50OiB0aGlzLiRlbH0pO1xuXHRcdHRoaXMudHJpZ2dlcignaW1hZ2UtbG9hZGVkJyk7XG5cdFx0dGhpcy5jb250cm9sbGVyLmltZ1NlbGVjdCA9IHRoaXMuJGltYWdlLmltZ0FyZWFTZWxlY3QoaW1nT3B0aW9ucyk7XG5cdH0sXG5cdG9uRXJyb3I6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmaWxlbmFtZSA9IHRoaXMub3B0aW9ucy5hdHRhY2htZW50LmdldCgnZmlsZW5hbWUnKTtcblxuXHRcdHRoaXMudmlld3MuYWRkKCAnLnVwbG9hZC1lcnJvcnMnLCBuZXcgd3AubWVkaWEudmlldy5VcGxvYWRlclN0YXR1c0Vycm9yKHtcblx0XHRcdGZpbGVuYW1lOiBVcGxvYWRlclN0YXR1cy5wcm90b3R5cGUuZmlsZW5hbWUoZmlsZW5hbWUpLFxuXHRcdFx0bWVzc2FnZTogd2luZG93Ll93cE1lZGlhVmlld3NMMTBuLmNyb3BFcnJvclxuXHRcdH0pLCB7IGF0OiAwIH0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDcm9wcGVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdEVkaXRJbWFnZTtcblxuRWRpdEltYWdlID0gVmlldy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdpbWFnZS1lZGl0b3InLFxuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ2ltYWdlLWVkaXRvcicpLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHRoaXMuZWRpdG9yID0gd2luZG93LmltYWdlRWRpdDtcblx0XHR0aGlzLmNvbnRyb2xsZXIgPSBvcHRpb25zLmNvbnRyb2xsZXI7XG5cdFx0Vmlldy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0cHJlcGFyZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWwudG9KU09OKCk7XG5cdH0sXG5cblx0bG9hZEVkaXRvcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRmZCA9IHRoaXMuZWRpdG9yLm9wZW4oIHRoaXMubW9kZWwuZ2V0KCdpZCcpLCB0aGlzLm1vZGVsLmdldCgnbm9uY2VzJykuZWRpdCwgdGhpcyApO1xuXHRcdGRmZC5kb25lKCBfLmJpbmQoIHRoaXMuZm9jdXMsIHRoaXMgKSApO1xuXHR9LFxuXG5cdGZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiQoICcuaW1nZWRpdC1zdWJtaXQgLmJ1dHRvbicgKS5lcSggMCApLmZvY3VzKCk7XG5cdH0sXG5cblx0YmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxhc3RTdGF0ZSA9IHRoaXMuY29udHJvbGxlci5sYXN0U3RhdGUoKTtcblx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoIGxhc3RTdGF0ZSApO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW9kZWwuZmV0Y2goKTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGFzdFN0YXRlID0gdGhpcy5jb250cm9sbGVyLmxhc3RTdGF0ZSgpO1xuXG5cdFx0dGhpcy5tb2RlbC5mZXRjaCgpLmRvbmUoIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoIGxhc3RTdGF0ZSApO1xuXHRcdH0sIHRoaXMgKSApO1xuXHR9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRJbWFnZTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5FbWJlZFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgRW1iZWQgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ21lZGlhLWVtYmVkJyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQvKipcblx0XHQgKiBAbWVtYmVyIHt3cC5tZWRpYS52aWV3LkVtYmVkVXJsfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gbmV3IHdwLm1lZGlhLnZpZXcuRW1iZWRVcmwoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0bW9kZWw6ICAgICAgdGhpcy5tb2RlbC5wcm9wc1xuXHRcdH0pLnJlbmRlcigpO1xuXG5cdFx0dGhpcy52aWV3cy5zZXQoWyB0aGlzLnVybCBdKTtcblx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnR5cGUnLCB0aGlzLnJlZnJlc2ggKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmxvYWRpbmcnLCB0aGlzLmxvYWRpbmcgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHZpZXdcblx0ICovXG5cdHNldHRpbmdzOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHRpZiAoIHRoaXMuX3NldHRpbmdzICkge1xuXHRcdFx0dGhpcy5fc2V0dGluZ3MucmVtb3ZlKCk7XG5cdFx0fVxuXHRcdHRoaXMuX3NldHRpbmdzID0gdmlldztcblx0XHR0aGlzLnZpZXdzLmFkZCggdmlldyApO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0eXBlID0gdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKSxcblx0XHRcdGNvbnN0cnVjdG9yO1xuXG5cdFx0aWYgKCAnaW1hZ2UnID09PSB0eXBlICkge1xuXHRcdFx0Y29uc3RydWN0b3IgPSB3cC5tZWRpYS52aWV3LkVtYmVkSW1hZ2U7XG5cdFx0fSBlbHNlIGlmICggJ2xpbmsnID09PSB0eXBlICkge1xuXHRcdFx0Y29uc3RydWN0b3IgPSB3cC5tZWRpYS52aWV3LkVtYmVkTGluaztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0dGluZ3MoIG5ldyBjb25zdHJ1Y3Rvcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRtb2RlbDogICAgICB0aGlzLm1vZGVsLnByb3BzLFxuXHRcdFx0cHJpb3JpdHk6ICAgNDBcblx0XHR9KSApO1xuXHR9LFxuXG5cdGxvYWRpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnZW1iZWQtbG9hZGluZycsIHRoaXMubW9kZWwuZ2V0KCdsb2FkaW5nJykgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRW1iZWQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRW1iZWRJbWFnZVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBBdHRhY2htZW50RGlzcGxheSA9IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXksXG5cdEVtYmVkSW1hZ2U7XG5cbkVtYmVkSW1hZ2UgPSBBdHRhY2htZW50RGlzcGxheS5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdlbWJlZC1tZWRpYS1zZXR0aW5ncycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ2VtYmVkLWltYWdlLXNldHRpbmdzJyksXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogQ2FsbCBgaW5pdGlhbGl6ZWAgZGlyZWN0bHkgb24gcGFyZW50IGNsYXNzIHdpdGggcGFzc2VkIGFyZ3VtZW50c1xuXHRcdCAqL1xuXHRcdEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnVybCcsIHRoaXMudXBkYXRlSW1hZ2UgKTtcblx0fSxcblxuXHR1cGRhdGVJbWFnZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCdpbWcnKS5hdHRyKCAnc3JjJywgdGhpcy5tb2RlbC5nZXQoJ3VybCcpICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtYmVkSW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRW1iZWRMaW5rXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5nc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgJCA9IGpRdWVyeSxcblx0RW1iZWRMaW5rO1xuXG5FbWJlZExpbmsgPSB3cC5tZWRpYS52aWV3LlNldHRpbmdzLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2VtYmVkLWxpbmstc2V0dGluZ3MnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdlbWJlZC1saW5rLXNldHRpbmdzJyksXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTp1cmwnLCB0aGlzLnVwZGF0ZW9FbWJlZCApO1xuXHR9LFxuXG5cdHVwZGF0ZW9FbWJlZDogXy5kZWJvdW5jZSggZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVybCA9IHRoaXMubW9kZWwuZ2V0KCAndXJsJyApO1xuXG5cdFx0Ly8gY2xlYXIgb3V0IHByZXZpb3VzIHJlc3VsdHNcblx0XHR0aGlzLiQoJy5lbWJlZC1jb250YWluZXInKS5oaWRlKCkuZmluZCgnLmVtYmVkLXByZXZpZXcnKS5lbXB0eSgpO1xuXHRcdHRoaXMuJCggJy5zZXR0aW5nJyApLmhpZGUoKTtcblxuXHRcdC8vIG9ubHkgcHJvY2VlZCB3aXRoIGVtYmVkIGlmIHRoZSBmaWVsZCBjb250YWlucyBtb3JlIHRoYW4gMTEgY2hhcmFjdGVyc1xuXHRcdC8vIEV4YW1wbGU6IGh0dHA6Ly9hLmlvIGlzIDExIGNoYXJzXG5cdFx0aWYgKCB1cmwgJiYgKCB1cmwubGVuZ3RoIDwgMTEgfHwgISB1cmwubWF0Y2goL15odHRwKHMpPzpcXC9cXC8vKSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuZmV0Y2goKTtcblx0fSwgd3AubWVkaWEuY29udHJvbGxlci5FbWJlZC5zZW5zaXRpdml0eSApLFxuXG5cdGZldGNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZW1iZWQ7XG5cblx0XHQvLyBjaGVjayBpZiB0aGV5IGhhdmVuJ3QgdHlwZWQgaW4gNTAwIG1zXG5cdFx0aWYgKCAkKCcjZW1iZWQtdXJsLWZpZWxkJykudmFsKCkgIT09IHRoaXMubW9kZWwuZ2V0KCd1cmwnKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuZGZkICYmICdwZW5kaW5nJyA9PT0gdGhpcy5kZmQuc3RhdGUoKSApIHtcblx0XHRcdHRoaXMuZGZkLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0ZW1iZWQgPSBuZXcgd3Auc2hvcnRjb2RlKHtcblx0XHRcdHRhZzogJ2VtYmVkJyxcblx0XHRcdGF0dHJzOiBfLnBpY2soIHRoaXMubW9kZWwuYXR0cmlidXRlcywgWyAnd2lkdGgnLCAnaGVpZ2h0JywgJ3NyYycgXSApLFxuXHRcdFx0Y29udGVudDogdGhpcy5tb2RlbC5nZXQoJ3VybCcpXG5cdFx0fSk7XG5cblx0XHR0aGlzLmRmZCA9ICQuYWpheCh7XG5cdFx0XHR0eXBlOiAgICAnUE9TVCcsXG5cdFx0XHR1cmw6ICAgICB3cC5hamF4LnNldHRpbmdzLnVybCxcblx0XHRcdGNvbnRleHQ6IHRoaXMsXG5cdFx0XHRkYXRhOiAgICB7XG5cdFx0XHRcdGFjdGlvbjogJ3BhcnNlLWVtYmVkJyxcblx0XHRcdFx0cG9zdF9JRDogd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdFx0XHRzaG9ydGNvZGU6IGVtYmVkLnN0cmluZygpXG5cdFx0XHR9XG5cdFx0fSlcblx0XHRcdC5kb25lKCB0aGlzLnJlbmRlcm9FbWJlZCApXG5cdFx0XHQuZmFpbCggdGhpcy5yZW5kZXJGYWlsICk7XG5cdH0sXG5cblx0cmVuZGVyRmFpbDogZnVuY3Rpb24gKCByZXNwb25zZSwgc3RhdHVzICkge1xuXHRcdGlmICggJ2Fib3J0JyA9PT0gc3RhdHVzICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLiQoICcubGluay10ZXh0JyApLnNob3coKTtcblx0fSxcblxuXHRyZW5kZXJvRW1iZWQ6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHR2YXIgaHRtbCA9ICggcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmJvZHkgKSB8fCAnJztcblxuXHRcdGlmICggaHRtbCApIHtcblx0XHRcdHRoaXMuJCgnLmVtYmVkLWNvbnRhaW5lcicpLnNob3coKS5maW5kKCcuZW1iZWQtcHJldmlldycpLmh0bWwoIGh0bWwgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5yZW5kZXJGYWlsKCk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbWJlZExpbms7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRW1iZWRVcmxcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHQkID0galF1ZXJ5LFxuXHRFbWJlZFVybDtcblxuRW1iZWRVcmwgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2xhYmVsJyxcblx0Y2xhc3NOYW1lOiAnZW1iZWQtdXJsJyxcblxuXHRldmVudHM6IHtcblx0XHQnaW5wdXQnOiAgJ3VybCcsXG5cdFx0J2tleXVwJzogICd1cmwnLFxuXHRcdCdjaGFuZ2UnOiAndXJsJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGlucHV0ID0gJCgnPGlucHV0IGlkPVwiZW1iZWQtdXJsLWZpZWxkXCIgdHlwZT1cInVybFwiIC8+JykudmFsKCB0aGlzLm1vZGVsLmdldCgndXJsJykgKTtcblx0XHR0aGlzLmlucHV0ID0gdGhpcy4kaW5wdXRbMF07XG5cblx0XHR0aGlzLnNwaW5uZXIgPSAkKCc8c3BhbiBjbGFzcz1cInNwaW5uZXJcIiAvPicpWzBdO1xuXHRcdHRoaXMuJGVsLmFwcGVuZChbIHRoaXMuaW5wdXQsIHRoaXMuc3Bpbm5lciBdKTtcblxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6dXJsJywgdGhpcy5yZW5kZXIgKTtcblxuXHRcdGlmICggdGhpcy5tb2RlbC5nZXQoICd1cmwnICkgKSB7XG5cdFx0XHRfLmRlbGF5KCBfLmJpbmQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhpcy5tb2RlbC50cmlnZ2VyKCAnY2hhbmdlOnVybCcgKTtcblx0XHRcdH0sIHRoaXMgKSwgNTAwICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuRW1iZWRVcmx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkaW5wdXQgPSB0aGlzLiRpbnB1dDtcblxuXHRcdGlmICggJGlucHV0LmlzKCc6Zm9jdXMnKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmlucHV0LnZhbHVlID0gdGhpcy5tb2RlbC5nZXQoJ3VybCcpIHx8ICdodHRwOi8vJztcblx0XHQvKipcblx0XHQgKiBDYWxsIGByZW5kZXJgIGRpcmVjdGx5IG9uIHBhcmVudCBjbGFzcyB3aXRoIHBhc3NlZCBhcmd1bWVudHNcblx0XHQgKi9cblx0XHRWaWV3LnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgd3AubWVkaWEuaXNUb3VjaERldmljZSApIHtcblx0XHRcdHRoaXMuZm9jdXMoKTtcblx0XHR9XG5cdH0sXG5cblx0dXJsOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dGhpcy5tb2RlbC5zZXQoICd1cmwnLCBldmVudC50YXJnZXQudmFsdWUgKTtcblx0fSxcblxuXHQvKipcblx0ICogSWYgdGhlIGlucHV0IGlzIHZpc2libGUsIGZvY3VzIGFuZCBzZWxlY3QgaXRzIGNvbnRlbnRzLlxuXHQgKi9cblx0Zm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkaW5wdXQgPSB0aGlzLiRpbnB1dDtcblx0XHRpZiAoICRpbnB1dC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdCRpbnB1dC5mb2N1cygpWzBdLnNlbGVjdCgpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRW1iZWRVcmw7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRm9jdXNNYW5hZ2VyXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBGb2N1c01hbmFnZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cblx0ZXZlbnRzOiB7XG5cdFx0J2tleWRvd24nOiAnY29uc3RyYWluVGFiYmluZydcblx0fSxcblxuXHRmb2N1czogZnVuY3Rpb24oKSB7IC8vIFJlc2V0IGZvY3VzIG9uIGZpcnN0IGxlZnQgbWVudSBpdGVtXG5cdFx0dGhpcy4kKCcubWVkaWEtbWVudS1pdGVtJykuZmlyc3QoKS5mb2N1cygpO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRjb25zdHJhaW5UYWJiaW5nOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIHRhYmJhYmxlcztcblxuXHRcdC8vIExvb2sgZm9yIHRoZSB0YWIga2V5LlxuXHRcdGlmICggOSAhPT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBTa2lwIHRoZSBmaWxlIGlucHV0IGFkZGVkIGJ5IFBsdXBsb2FkLlxuXHRcdHRhYmJhYmxlcyA9IHRoaXMuJCggJzp0YWJiYWJsZScgKS5ub3QoICcubW94aWUtc2hpbSBpbnB1dFt0eXBlPVwiZmlsZVwiXScgKTtcblxuXHRcdC8vIEtlZXAgdGFiIGZvY3VzIHdpdGhpbiBtZWRpYSBtb2RhbCB3aGlsZSBpdCdzIG9wZW5cblx0XHRpZiAoIHRhYmJhYmxlcy5sYXN0KClbMF0gPT09IGV2ZW50LnRhcmdldCAmJiAhIGV2ZW50LnNoaWZ0S2V5ICkge1xuXHRcdFx0dGFiYmFibGVzLmZpcnN0KCkuZm9jdXMoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKCB0YWJiYWJsZXMuZmlyc3QoKVswXSA9PT0gZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnNoaWZ0S2V5ICkge1xuXHRcdFx0dGFiYmFibGVzLmxhc3QoKS5mb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBGb2N1c01hbmFnZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRnJhbWVcbiAqXG4gKiBBIGZyYW1lIGlzIGEgY29tcG9zaXRlIHZpZXcgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSByZWdpb25zIGFuZCBvbmUgb3IgbW9yZVxuICogc3RhdGVzLlxuICpcbiAqIEBzZWUgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQHNlZSB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBGcmFtZSA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRtb2RlOiBbICdzZWxlY3QnIF1cblx0XHR9KTtcblx0XHR0aGlzLl9jcmVhdGVSZWdpb25zKCk7XG5cdFx0dGhpcy5fY3JlYXRlU3RhdGVzKCk7XG5cdFx0dGhpcy5fY3JlYXRlTW9kZXMoKTtcblx0fSxcblxuXHRfY3JlYXRlUmVnaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQ2xvbmUgdGhlIHJlZ2lvbnMgYXJyYXkuXG5cdFx0dGhpcy5yZWdpb25zID0gdGhpcy5yZWdpb25zID8gdGhpcy5yZWdpb25zLnNsaWNlKCkgOiBbXTtcblxuXHRcdC8vIEluaXRpYWxpemUgcmVnaW9ucy5cblx0XHRfLmVhY2goIHRoaXMucmVnaW9ucywgZnVuY3Rpb24oIHJlZ2lvbiApIHtcblx0XHRcdHRoaXNbIHJlZ2lvbiBdID0gbmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uKHtcblx0XHRcdFx0dmlldzogICAgIHRoaXMsXG5cdFx0XHRcdGlkOiAgICAgICByZWdpb24sXG5cdFx0XHRcdHNlbGVjdG9yOiAnLm1lZGlhLWZyYW1lLScgKyByZWdpb25cblx0XHRcdH0pO1xuXHRcdH0sIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgZnJhbWUncyBzdGF0ZXMuXG5cdCAqXG5cdCAqIEBzZWUgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuXHQgKiBAc2VlIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlI3JlYWR5XG5cdCAqL1xuXHRfY3JlYXRlU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHQvLyBDcmVhdGUgdGhlIGRlZmF1bHQgYHN0YXRlc2AgY29sbGVjdGlvbi5cblx0XHR0aGlzLnN0YXRlcyA9IG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKCBudWxsLCB7XG5cdFx0XHRtb2RlbDogd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW5zdXJlIHN0YXRlcyBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBmcmFtZS5cblx0XHR0aGlzLnN0YXRlcy5vbiggJ2FkZCcsIGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHRcdG1vZGVsLmZyYW1lID0gdGhpcztcblx0XHRcdG1vZGVsLnRyaWdnZXIoJ3JlYWR5Jyk7XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RhdGVzICkge1xuXHRcdFx0dGhpcy5zdGF0ZXMuYWRkKCB0aGlzLm9wdGlvbnMuc3RhdGVzICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBBIGZyYW1lIGNhbiBiZSBpbiBhIG1vZGUgb3IgbXVsdGlwbGUgbW9kZXMgYXQgb25lIHRpbWUuXG5cdCAqXG5cdCAqIEZvciBleGFtcGxlLCB0aGUgbWFuYWdlIG1lZGlhIGZyYW1lIGNhbiBiZSBpbiB0aGUgYEJ1bGsgU2VsZWN0YCBvciBgRWRpdGAgbW9kZS5cblx0ICovXG5cdF9jcmVhdGVNb2RlczogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gU3RvcmUgYWN0aXZlIFwibW9kZXNcIiB0aGF0IHRoZSBmcmFtZSBpcyBpbi4gVW5yZWxhdGVkIHRvIHJlZ2lvbiBtb2Rlcy5cblx0XHR0aGlzLmFjdGl2ZU1vZGVzID0gbmV3IEJhY2tib25lLkNvbGxlY3Rpb24oKTtcblx0XHR0aGlzLmFjdGl2ZU1vZGVzLm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIF8uYmluZCggdGhpcy50cmlnZ2VyTW9kZUV2ZW50cywgdGhpcyApICk7XG5cblx0XHRfLmVhY2goIHRoaXMub3B0aW9ucy5tb2RlLCBmdW5jdGlvbiggbW9kZSApIHtcblx0XHRcdHRoaXMuYWN0aXZhdGVNb2RlKCBtb2RlICk7XG5cdFx0fSwgdGhpcyApO1xuXHR9LFxuXHQvKipcblx0ICogUmVzZXQgYWxsIHN0YXRlcyBvbiB0aGUgZnJhbWUgdG8gdGhlaXIgZGVmYXVsdHMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkZyYW1lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3RhdGVzLmludm9rZSggJ3RyaWdnZXInLCAncmVzZXQnICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBNYXAgYWN0aXZlTW9kZSBjb2xsZWN0aW9uIGV2ZW50cyB0byB0aGUgZnJhbWUuXG5cdCAqL1xuXHR0cmlnZ2VyTW9kZUV2ZW50czogZnVuY3Rpb24oIG1vZGVsLCBjb2xsZWN0aW9uLCBvcHRpb25zICkge1xuXHRcdHZhciBjb2xsZWN0aW9uRXZlbnQsXG5cdFx0XHRtb2RlRXZlbnRNYXAgPSB7XG5cdFx0XHRcdGFkZDogJ2FjdGl2YXRlJyxcblx0XHRcdFx0cmVtb3ZlOiAnZGVhY3RpdmF0ZSdcblx0XHRcdH0sXG5cdFx0XHRldmVudFRvVHJpZ2dlcjtcblx0XHQvLyBQcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcy5cblx0XHRfLmVhY2goIG9wdGlvbnMsIGZ1bmN0aW9uKCB2YWx1ZSwga2V5ICkge1xuXHRcdFx0aWYgKCB2YWx1ZSApIHtcblx0XHRcdFx0Y29sbGVjdGlvbkV2ZW50ID0ga2V5O1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdGlmICggISBfLmhhcyggbW9kZUV2ZW50TWFwLCBjb2xsZWN0aW9uRXZlbnQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRldmVudFRvVHJpZ2dlciA9IG1vZGVsLmdldCgnaWQnKSArICc6JyArIG1vZGVFdmVudE1hcFtjb2xsZWN0aW9uRXZlbnRdO1xuXHRcdHRoaXMudHJpZ2dlciggZXZlbnRUb1RyaWdnZXIgKTtcblx0fSxcblx0LyoqXG5cdCAqIEFjdGl2YXRlIGEgbW9kZSBvbiB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdHJpbmcgbW9kZSBNb2RlIElELlxuXHQgKiBAcmV0dXJucyB7dGhpc30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmcuXG5cdCAqL1xuXHRhY3RpdmF0ZU1vZGU6IGZ1bmN0aW9uKCBtb2RlICkge1xuXHRcdC8vIEJhaWwgaWYgdGhlIG1vZGUgaXMgYWxyZWFkeSBhY3RpdmUuXG5cdFx0aWYgKCB0aGlzLmlzTW9kZUFjdGl2ZSggbW9kZSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmFjdGl2ZU1vZGVzLmFkZCggWyB7IGlkOiBtb2RlIH0gXSApO1xuXHRcdC8vIEFkZCBhIENTUyBjbGFzcyB0byB0aGUgZnJhbWUgc28gZWxlbWVudHMgY2FuIGJlIHN0eWxlZCBmb3IgdGhlIG1vZGUuXG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdtb2RlLScgKyBtb2RlICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIERlYWN0aXZhdGUgYSBtb2RlIG9uIHRoZSBmcmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZyBtb2RlIE1vZGUgSUQuXG5cdCAqIEByZXR1cm5zIHt0aGlzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZy5cblx0ICovXG5cdGRlYWN0aXZhdGVNb2RlOiBmdW5jdGlvbiggbW9kZSApIHtcblx0XHQvLyBCYWlsIGlmIHRoZSBtb2RlIGlzbid0IGFjdGl2ZS5cblx0XHRpZiAoICEgdGhpcy5pc01vZGVBY3RpdmUoIG1vZGUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHR0aGlzLmFjdGl2ZU1vZGVzLnJlbW92ZSggdGhpcy5hY3RpdmVNb2Rlcy53aGVyZSggeyBpZDogbW9kZSB9ICkgKTtcblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcyggJ21vZGUtJyArIG1vZGUgKTtcblx0XHQvKipcblx0XHQgKiBGcmFtZSBtb2RlIGRlYWN0aXZhdGlvbiBldmVudC5cblx0XHQgKlxuXHRcdCAqIEBldmVudCB0aGlzI3ttb2RlfTpkZWFjdGl2YXRlXG5cdFx0ICovXG5cdFx0dGhpcy50cmlnZ2VyKCBtb2RlICsgJzpkZWFjdGl2YXRlJyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG1vZGUgaXMgZW5hYmxlZCBvbiB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSAgc3RyaW5nIG1vZGUgTW9kZSBJRC5cblx0ICogQHJldHVybiBib29sXG5cdCAqL1xuXHRpc01vZGVBY3RpdmU6IGZ1bmN0aW9uKCBtb2RlICkge1xuXHRcdHJldHVybiBCb29sZWFuKCB0aGlzLmFjdGl2ZU1vZGVzLndoZXJlKCB7IGlkOiBtb2RlIH0gKS5sZW5ndGggKTtcblx0fVxufSk7XG5cbi8vIE1ha2UgdGhlIGBGcmFtZWAgYSBgU3RhdGVNYWNoaW5lYC5cbl8uZXh0ZW5kKCBGcmFtZS5wcm90b3R5cGUsIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lLnByb3RvdHlwZSApO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZyYW1lO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuSW1hZ2VEZXRhaWxzXG4gKlxuICogQSBtZWRpYSBmcmFtZSBmb3IgbWFuaXB1bGF0aW5nIGFuIGltYWdlIHRoYXQncyBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gYSBwb3N0LlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIFNlbGVjdCA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEltYWdlRGV0YWlscztcblxuSW1hZ2VEZXRhaWxzID0gU2VsZWN0LmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgJ2ltYWdlJyxcblx0XHR1cmw6ICAgICAnJyxcblx0XHRtZW51OiAgICAnaW1hZ2UtZGV0YWlscycsXG5cdFx0Y29udGVudDogJ2ltYWdlLWRldGFpbHMnLFxuXHRcdHRvb2xiYXI6ICdpbWFnZS1kZXRhaWxzJyxcblx0XHR0eXBlOiAgICAnbGluaycsXG5cdFx0dGl0bGU6ICAgIGwxMG4uaW1hZ2VEZXRhaWxzVGl0bGUsXG5cdFx0cHJpb3JpdHk6IDEyMFxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHRoaXMuaW1hZ2UgPSBuZXcgd3AubWVkaWEubW9kZWwuUG9zdEltYWdlKCBvcHRpb25zLm1ldGFkYXRhICk7XG5cdFx0dGhpcy5vcHRpb25zLnNlbGVjdGlvbiA9IG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oIHRoaXMuaW1hZ2UuYXR0YWNobWVudCwgeyBtdWx0aXBsZTogZmFsc2UgfSApO1xuXHRcdFNlbGVjdC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0YmluZEhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHRTZWxlY3QucHJvdG90eXBlLmJpbmRIYW5kbGVycy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5vbiggJ21lbnU6Y3JlYXRlOmltYWdlLWRldGFpbHMnLCB0aGlzLmNyZWF0ZU1lbnUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6aW1hZ2UtZGV0YWlscycsIHRoaXMuaW1hZ2VEZXRhaWxzQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlcjplZGl0LWltYWdlJywgdGhpcy5lZGl0SW1hZ2VDb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOmltYWdlLWRldGFpbHMnLCB0aGlzLnJlbmRlckltYWdlRGV0YWlsc1Rvb2xiYXIsIHRoaXMgKTtcblx0XHQvLyBvdmVycmlkZSB0aGUgc2VsZWN0IHRvb2xiYXJcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6cmVwbGFjZScsIHRoaXMucmVuZGVyUmVwbGFjZUltYWdlVG9vbGJhciwgdGhpcyApO1xuXHR9LFxuXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zdGF0ZXMuYWRkKFtcblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkltYWdlRGV0YWlscyh7XG5cdFx0XHRcdGltYWdlOiB0aGlzLmltYWdlLFxuXHRcdFx0XHRlZGl0YWJsZTogZmFsc2Vcblx0XHRcdH0pLFxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVwbGFjZUltYWdlKHtcblx0XHRcdFx0aWQ6ICdyZXBsYWNlLWltYWdlJyxcblx0XHRcdFx0bGlicmFyeTogd3AubWVkaWEucXVlcnkoIHsgdHlwZTogJ2ltYWdlJyB9ICksXG5cdFx0XHRcdGltYWdlOiB0aGlzLmltYWdlLFxuXHRcdFx0XHRtdWx0aXBsZTogIGZhbHNlLFxuXHRcdFx0XHR0aXRsZTogICAgIGwxMG4uaW1hZ2VSZXBsYWNlVGl0bGUsXG5cdFx0XHRcdHRvb2xiYXI6ICdyZXBsYWNlJyxcblx0XHRcdFx0cHJpb3JpdHk6ICA4MCxcblx0XHRcdFx0ZGlzcGxheVNldHRpbmdzOiB0cnVlXG5cdFx0XHR9KSxcblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkVkaXRJbWFnZSgge1xuXHRcdFx0XHRpbWFnZTogdGhpcy5pbWFnZSxcblx0XHRcdFx0c2VsZWN0aW9uOiB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uXG5cdFx0XHR9IClcblx0XHRdKTtcblx0fSxcblxuXHRpbWFnZURldGFpbHNDb250ZW50OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHRvcHRpb25zLnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5JbWFnZURldGFpbHMoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiB0aGlzLnN0YXRlKCkuaW1hZ2UsXG5cdFx0XHRhdHRhY2htZW50OiB0aGlzLnN0YXRlKCkuaW1hZ2UuYXR0YWNobWVudFxuXHRcdH0pO1xuXHR9LFxuXG5cdGVkaXRJbWFnZUNvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUoKSxcblx0XHRcdG1vZGVsID0gc3RhdGUuZ2V0KCdpbWFnZScpLFxuXHRcdFx0dmlldztcblxuXHRcdGlmICggISBtb2RlbCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuRWRpdEltYWdlKCB7IG1vZGVsOiBtb2RlbCwgY29udHJvbGxlcjogdGhpcyB9ICkucmVuZGVyKCk7XG5cblx0XHR0aGlzLmNvbnRlbnQuc2V0KCB2aWV3ICk7XG5cblx0XHQvLyBhZnRlciBicmluZ2luZyBpbiB0aGUgZnJhbWUsIGxvYWQgdGhlIGFjdHVhbCBlZGl0b3IgdmlhIGFuIGFqYXggY2FsbFxuXHRcdHZpZXcubG9hZEVkaXRvcigpO1xuXG5cdH0sXG5cblx0cmVuZGVySW1hZ2VEZXRhaWxzVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0c2VsZWN0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi51cGRhdGUsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpO1xuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cblx0XHRcdFx0XHRcdC8vIG5vdCBzdXJlIGlmIHdlIHdhbnQgdG8gdXNlIHdwLm1lZGlhLnN0cmluZy5pbWFnZSB3aGljaCB3aWxsIGNyZWF0ZSBhIHNob3J0Y29kZSBvclxuXHRcdFx0XHRcdFx0Ly8gcGVyaGFwcyB3cC5odG1sLnN0cmluZyB0byBhdCBsZWFzdCB0byBidWlsZCB0aGUgPGltZyAvPlxuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlciggJ3VwZGF0ZScsIGNvbnRyb2xsZXIuaW1hZ2UudG9KU09OKCkgKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHJlbmRlclJlcGxhY2VJbWFnZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmcmFtZSA9IHRoaXMsXG5cdFx0XHRsYXN0U3RhdGUgPSBmcmFtZS5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZDtcblxuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGJhY2s6IHtcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5iYWNrLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAyMCxcblx0XHRcdFx0XHRjbGljazogICAgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0XHRmcmFtZS5zZXRTdGF0ZSggcHJldmlvdXMgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHJlcGxhY2U6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLnJlcGxhY2UsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb24gPSBzdGF0ZS5nZXQoICdzZWxlY3Rpb24nICksXG5cdFx0XHRcdFx0XHRcdGF0dGFjaG1lbnQgPSBzZWxlY3Rpb24uc2luZ2xlKCk7XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5pbWFnZS5jaGFuZ2VBdHRhY2htZW50KCBhdHRhY2htZW50LCBzdGF0ZS5kaXNwbGF5KCBhdHRhY2htZW50ICkgKTtcblxuXHRcdFx0XHRcdFx0Ly8gbm90IHN1cmUgaWYgd2Ugd2FudCB0byB1c2Ugd3AubWVkaWEuc3RyaW5nLmltYWdlIHdoaWNoIHdpbGwgY3JlYXRlIGEgc2hvcnRjb2RlIG9yXG5cdFx0XHRcdFx0XHQvLyBwZXJoYXBzIHdwLmh0bWwuc3RyaW5nIHRvIGF0IGxlYXN0IHRvIGJ1aWxkIHRoZSA8aW1nIC8+XG5cdFx0XHRcdFx0XHRzdGF0ZS50cmlnZ2VyKCAncmVwbGFjZScsIGNvbnRyb2xsZXIuaW1hZ2UudG9KU09OKCkgKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9XG5cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlBvc3RcbiAqXG4gKiBUaGUgZnJhbWUgZm9yIG1hbmlwdWxhdGluZyBtZWRpYSBvbiB0aGUgRWRpdCBQb3N0IHBhZ2UuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqIEBtaXhlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuICovXG52YXIgU2VsZWN0ID0gd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdCxcblx0TGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0UG9zdDtcblxuUG9zdCA9IFNlbGVjdC5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmNvdW50cyA9IHtcblx0XHRcdGF1ZGlvOiB7XG5cdFx0XHRcdGNvdW50OiB3cC5tZWRpYS52aWV3LnNldHRpbmdzLmF0dGFjaG1lbnRDb3VudHMuYXVkaW8sXG5cdFx0XHRcdHN0YXRlOiAncGxheWxpc3QnXG5cdFx0XHR9LFxuXHRcdFx0dmlkZW86IHtcblx0XHRcdFx0Y291bnQ6IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuYXR0YWNobWVudENvdW50cy52aWRlbyxcblx0XHRcdFx0c3RhdGU6ICd2aWRlby1wbGF5bGlzdCdcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRtdWx0aXBsZTogIHRydWUsXG5cdFx0XHRlZGl0aW5nOiAgIGZhbHNlLFxuXHRcdFx0c3RhdGU6ICAgICdpbnNlcnQnLFxuXHRcdFx0bWV0YWRhdGE6ICB7fVxuXHRcdH0pO1xuXG5cdFx0Ly8gQ2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzcy5cblx0XHRTZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMuY3JlYXRlSWZyYW1lU3RhdGVzKCk7XG5cblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBkZWZhdWx0IHN0YXRlcy5cblx0ICovXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHR0aGlzLnN0YXRlcy5hZGQoW1xuXHRcdFx0Ly8gTWFpbiBzdGF0ZXMuXG5cdFx0XHRuZXcgTGlicmFyeSh7XG5cdFx0XHRcdGlkOiAgICAgICAgICdpbnNlcnQnLFxuXHRcdFx0XHR0aXRsZTogICAgICBsMTBuLmluc2VydE1lZGlhVGl0bGUsXG5cdFx0XHRcdHByaW9yaXR5OiAgIDIwLFxuXHRcdFx0XHR0b29sYmFyOiAgICAnbWFpbi1pbnNlcnQnLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiAnYWxsJyxcblx0XHRcdFx0bGlicmFyeTogICAgd3AubWVkaWEucXVlcnkoIG9wdGlvbnMubGlicmFyeSApLFxuXHRcdFx0XHRtdWx0aXBsZTogICBvcHRpb25zLm11bHRpcGxlID8gJ3Jlc2V0JyA6IGZhbHNlLFxuXHRcdFx0XHRlZGl0YWJsZTogICB0cnVlLFxuXG5cdFx0XHRcdC8vIElmIHRoZSB1c2VyIGlzbid0IGFsbG93ZWQgdG8gZWRpdCBmaWVsZHMsXG5cdFx0XHRcdC8vIGNhbiB0aGV5IHN0aWxsIGVkaXQgaXQgbG9jYWxseT9cblx0XHRcdFx0YWxsb3dMb2NhbEVkaXRzOiB0cnVlLFxuXG5cdFx0XHRcdC8vIFNob3cgdGhlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncy5cblx0XHRcdFx0ZGlzcGxheVNldHRpbmdzOiB0cnVlLFxuXHRcdFx0XHQvLyBVcGRhdGUgdXNlciBzZXR0aW5ncyB3aGVuIHVzZXJzIGFkanVzdCB0aGVcblx0XHRcdFx0Ly8gYXR0YWNobWVudCBkaXNwbGF5IHNldHRpbmdzLlxuXHRcdFx0XHRkaXNwbGF5VXNlclNldHRpbmdzOiB0cnVlXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IExpYnJhcnkoe1xuXHRcdFx0XHRpZDogICAgICAgICAnZ2FsbGVyeScsXG5cdFx0XHRcdHRpdGxlOiAgICAgIGwxMG4uY3JlYXRlR2FsbGVyeVRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogICA0MCxcblx0XHRcdFx0dG9vbGJhcjogICAgJ21haW4tZ2FsbGVyeScsXG5cdFx0XHRcdGZpbHRlcmFibGU6ICd1cGxvYWRlZCcsXG5cdFx0XHRcdG11bHRpcGxlOiAgICdhZGQnLFxuXHRcdFx0XHRlZGl0YWJsZTogICBmYWxzZSxcblxuXHRcdFx0XHRsaWJyYXJ5OiAgd3AubWVkaWEucXVlcnkoIF8uZGVmYXVsdHMoe1xuXHRcdFx0XHRcdHR5cGU6ICdpbWFnZSdcblx0XHRcdFx0fSwgb3B0aW9ucy5saWJyYXJ5ICkgKVxuXHRcdFx0fSksXG5cblx0XHRcdC8vIEVtYmVkIHN0YXRlcy5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkVtYmVkKCB7IG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhIH0gKSxcblxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuRWRpdEltYWdlKCB7IG1vZGVsOiBvcHRpb25zLmVkaXRJbWFnZSB9ICksXG5cblx0XHRcdC8vIEdhbGxlcnkgc3RhdGVzLlxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuR2FsbGVyeUVkaXQoe1xuXHRcdFx0XHRsaWJyYXJ5OiBvcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdFx0ZWRpdGluZzogb3B0aW9ucy5lZGl0aW5nLFxuXHRcdFx0XHRtZW51OiAgICAnZ2FsbGVyeSdcblx0XHRcdH0pLFxuXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5HYWxsZXJ5QWRkKCksXG5cblx0XHRcdG5ldyBMaWJyYXJ5KHtcblx0XHRcdFx0aWQ6ICAgICAgICAgJ3BsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6ICAgICAgbDEwbi5jcmVhdGVQbGF5bGlzdFRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogICA2MCxcblx0XHRcdFx0dG9vbGJhcjogICAgJ21haW4tcGxheWxpc3QnLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiAndXBsb2FkZWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogICAnYWRkJyxcblx0XHRcdFx0ZWRpdGFibGU6ICAgZmFsc2UsXG5cblx0XHRcdFx0bGlicmFyeTogIHdwLm1lZGlhLnF1ZXJ5KCBfLmRlZmF1bHRzKHtcblx0XHRcdFx0XHR0eXBlOiAnYXVkaW8nXG5cdFx0XHRcdH0sIG9wdGlvbnMubGlicmFyeSApIClcblx0XHRcdH0pLFxuXG5cdFx0XHQvLyBQbGF5bGlzdCBzdGF0ZXMuXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uRWRpdCh7XG5cdFx0XHRcdHR5cGU6ICdhdWRpbycsXG5cdFx0XHRcdGNvbGxlY3Rpb25UeXBlOiAncGxheWxpc3QnLFxuXHRcdFx0XHR0aXRsZTogICAgICAgICAgbDEwbi5lZGl0UGxheWxpc3RUaXRsZSxcblx0XHRcdFx0U2V0dGluZ3NWaWV3OiAgIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuUGxheWxpc3QsXG5cdFx0XHRcdGxpYnJhcnk6ICAgICAgICBvcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdFx0ZWRpdGluZzogICAgICAgIG9wdGlvbnMuZWRpdGluZyxcblx0XHRcdFx0bWVudTogICAgICAgICAgICdwbGF5bGlzdCcsXG5cdFx0XHRcdGRyYWdJbmZvVGV4dDogICBsMTBuLnBsYXlsaXN0RHJhZ0luZm8sXG5cdFx0XHRcdGRyYWdJbmZvOiAgICAgICBmYWxzZVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25BZGQoe1xuXHRcdFx0XHR0eXBlOiAnYXVkaW8nLFxuXHRcdFx0XHRjb2xsZWN0aW9uVHlwZTogJ3BsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6IGwxMG4uYWRkVG9QbGF5bGlzdFRpdGxlXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IExpYnJhcnkoe1xuXHRcdFx0XHRpZDogICAgICAgICAndmlkZW8tcGxheWxpc3QnLFxuXHRcdFx0XHR0aXRsZTogICAgICBsMTBuLmNyZWF0ZVZpZGVvUGxheWxpc3RUaXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgNjAsXG5cdFx0XHRcdHRvb2xiYXI6ICAgICdtYWluLXZpZGVvLXBsYXlsaXN0Jyxcblx0XHRcdFx0ZmlsdGVyYWJsZTogJ3VwbG9hZGVkJyxcblx0XHRcdFx0bXVsdGlwbGU6ICAgJ2FkZCcsXG5cdFx0XHRcdGVkaXRhYmxlOiAgIGZhbHNlLFxuXG5cdFx0XHRcdGxpYnJhcnk6ICB3cC5tZWRpYS5xdWVyeSggXy5kZWZhdWx0cyh7XG5cdFx0XHRcdFx0dHlwZTogJ3ZpZGVvJ1xuXHRcdFx0XHR9LCBvcHRpb25zLmxpYnJhcnkgKSApXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuQ29sbGVjdGlvbkVkaXQoe1xuXHRcdFx0XHR0eXBlOiAndmlkZW8nLFxuXHRcdFx0XHRjb2xsZWN0aW9uVHlwZTogJ3BsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6ICAgICAgICAgIGwxMG4uZWRpdFZpZGVvUGxheWxpc3RUaXRsZSxcblx0XHRcdFx0U2V0dGluZ3NWaWV3OiAgIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuUGxheWxpc3QsXG5cdFx0XHRcdGxpYnJhcnk6ICAgICAgICBvcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdFx0ZWRpdGluZzogICAgICAgIG9wdGlvbnMuZWRpdGluZyxcblx0XHRcdFx0bWVudTogICAgICAgICAgICd2aWRlby1wbGF5bGlzdCcsXG5cdFx0XHRcdGRyYWdJbmZvVGV4dDogICBsMTBuLnZpZGVvUGxheWxpc3REcmFnSW5mbyxcblx0XHRcdFx0ZHJhZ0luZm86ICAgICAgIGZhbHNlXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuQ29sbGVjdGlvbkFkZCh7XG5cdFx0XHRcdHR5cGU6ICd2aWRlbycsXG5cdFx0XHRcdGNvbGxlY3Rpb25UeXBlOiAncGxheWxpc3QnLFxuXHRcdFx0XHR0aXRsZTogbDEwbi5hZGRUb1ZpZGVvUGxheWxpc3RUaXRsZVxuXHRcdFx0fSlcblx0XHRdKTtcblxuXHRcdGlmICggd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmZlYXR1cmVkSW1hZ2VJZCApIHtcblx0XHRcdHRoaXMuc3RhdGVzLmFkZCggbmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuRmVhdHVyZWRJbWFnZSgpICk7XG5cdFx0fVxuXHR9LFxuXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhhbmRsZXJzLCBjaGVja0NvdW50cztcblxuXHRcdFNlbGVjdC5wcm90b3R5cGUuYmluZEhhbmRsZXJzLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdHRoaXMub24oICdhY3RpdmF0ZScsIHRoaXMuYWN0aXZhdGUsIHRoaXMgKTtcblxuXHRcdC8vIE9ubHkgYm90aGVyIGNoZWNraW5nIG1lZGlhIHR5cGUgY291bnRzIGlmIG9uZSBvZiB0aGUgY291bnRzIGlzIHplcm9cblx0XHRjaGVja0NvdW50cyA9IF8uZmluZCggdGhpcy5jb3VudHMsIGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0cmV0dXJuIHR5cGUuY291bnQgPT09IDA7XG5cdFx0fSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgY2hlY2tDb3VudHMgIT09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0dGhpcy5saXN0ZW5Ubyggd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMuYWxsLCAnY2hhbmdlOnR5cGUnLCB0aGlzLm1lZGlhVHlwZUNvdW50cyApO1xuXHRcdH1cblxuXHRcdHRoaXMub24oICdtZW51OmNyZWF0ZTpnYWxsZXJ5JywgdGhpcy5jcmVhdGVNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ21lbnU6Y3JlYXRlOnBsYXlsaXN0JywgdGhpcy5jcmVhdGVNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ21lbnU6Y3JlYXRlOnZpZGVvLXBsYXlsaXN0JywgdGhpcy5jcmVhdGVNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOm1haW4taW5zZXJ0JywgdGhpcy5jcmVhdGVUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOm1haW4tZ2FsbGVyeScsIHRoaXMuY3JlYXRlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTptYWluLXBsYXlsaXN0JywgdGhpcy5jcmVhdGVUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOm1haW4tdmlkZW8tcGxheWxpc3QnLCB0aGlzLmNyZWF0ZVRvb2xiYXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpjcmVhdGU6ZmVhdHVyZWQtaW1hZ2UnLCB0aGlzLmZlYXR1cmVkSW1hZ2VUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOm1haW4tZW1iZWQnLCB0aGlzLm1haW5FbWJlZFRvb2xiYXIsIHRoaXMgKTtcblxuXHRcdGhhbmRsZXJzID0ge1xuXHRcdFx0bWVudToge1xuXHRcdFx0XHQnZGVmYXVsdCc6ICdtYWluTWVudScsXG5cdFx0XHRcdCdnYWxsZXJ5JzogJ2dhbGxlcnlNZW51Jyxcblx0XHRcdFx0J3BsYXlsaXN0JzogJ3BsYXlsaXN0TWVudScsXG5cdFx0XHRcdCd2aWRlby1wbGF5bGlzdCc6ICd2aWRlb1BsYXlsaXN0TWVudSdcblx0XHRcdH0sXG5cblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0J2VtYmVkJzogICAgICAgICAgJ2VtYmVkQ29udGVudCcsXG5cdFx0XHRcdCdlZGl0LWltYWdlJzogICAgICdlZGl0SW1hZ2VDb250ZW50Jyxcblx0XHRcdFx0J2VkaXQtc2VsZWN0aW9uJzogJ2VkaXRTZWxlY3Rpb25Db250ZW50J1xuXHRcdFx0fSxcblxuXHRcdFx0dG9vbGJhcjoge1xuXHRcdFx0XHQnbWFpbi1pbnNlcnQnOiAgICAgICdtYWluSW5zZXJ0VG9vbGJhcicsXG5cdFx0XHRcdCdtYWluLWdhbGxlcnknOiAgICAgJ21haW5HYWxsZXJ5VG9vbGJhcicsXG5cdFx0XHRcdCdnYWxsZXJ5LWVkaXQnOiAgICAgJ2dhbGxlcnlFZGl0VG9vbGJhcicsXG5cdFx0XHRcdCdnYWxsZXJ5LWFkZCc6ICAgICAgJ2dhbGxlcnlBZGRUb29sYmFyJyxcblx0XHRcdFx0J21haW4tcGxheWxpc3QnOlx0J21haW5QbGF5bGlzdFRvb2xiYXInLFxuXHRcdFx0XHQncGxheWxpc3QtZWRpdCc6XHQncGxheWxpc3RFZGl0VG9vbGJhcicsXG5cdFx0XHRcdCdwbGF5bGlzdC1hZGQnOlx0XHQncGxheWxpc3RBZGRUb29sYmFyJyxcblx0XHRcdFx0J21haW4tdmlkZW8tcGxheWxpc3QnOiAnbWFpblZpZGVvUGxheWxpc3RUb29sYmFyJyxcblx0XHRcdFx0J3ZpZGVvLXBsYXlsaXN0LWVkaXQnOiAndmlkZW9QbGF5bGlzdEVkaXRUb29sYmFyJyxcblx0XHRcdFx0J3ZpZGVvLXBsYXlsaXN0LWFkZCc6ICd2aWRlb1BsYXlsaXN0QWRkVG9vbGJhcidcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Xy5lYWNoKCBoYW5kbGVycywgZnVuY3Rpb24oIHJlZ2lvbkhhbmRsZXJzLCByZWdpb24gKSB7XG5cdFx0XHRfLmVhY2goIHJlZ2lvbkhhbmRsZXJzLCBmdW5jdGlvbiggY2FsbGJhY2ssIGhhbmRsZXIgKSB7XG5cdFx0XHRcdHRoaXMub24oIHJlZ2lvbiArICc6cmVuZGVyOicgKyBoYW5kbGVyLCB0aGlzWyBjYWxsYmFjayBdLCB0aGlzICk7XG5cdFx0XHR9LCB0aGlzICk7XG5cdFx0fSwgdGhpcyApO1xuXHR9LFxuXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBIaWRlIG1lbnUgaXRlbXMgZm9yIHN0YXRlcyB0aWVkIHRvIHBhcnRpY3VsYXIgbWVkaWEgdHlwZXMgaWYgdGhlcmUgYXJlIG5vIGl0ZW1zXG5cdFx0Xy5lYWNoKCB0aGlzLmNvdW50cywgZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRpZiAoIHR5cGUuY291bnQgPCAxICkge1xuXHRcdFx0XHR0aGlzLm1lbnVJdGVtVmlzaWJpbGl0eSggdHlwZS5zdGF0ZSwgJ2hpZGUnICk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyApO1xuXHR9LFxuXG5cdG1lZGlhVHlwZUNvdW50czogZnVuY3Rpb24oIG1vZGVsLCBhdHRyICkge1xuXHRcdGlmICggdHlwZW9mIHRoaXMuY291bnRzWyBhdHRyIF0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY291bnRzWyBhdHRyIF0uY291bnQgPCAxICkge1xuXHRcdFx0dGhpcy5jb3VudHNbIGF0dHIgXS5jb3VudCsrO1xuXHRcdFx0dGhpcy5tZW51SXRlbVZpc2liaWxpdHkoIHRoaXMuY291bnRzWyBhdHRyIF0uc3RhdGUsICdzaG93JyApO1xuXHRcdH1cblx0fSxcblxuXHQvLyBNZW51c1xuXHQvKipcblx0ICogQHBhcmFtIHt3cC5CYWNrYm9uZS5WaWV3fSB2aWV3XG5cdCAqL1xuXHRtYWluTWVudTogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmlldy5zZXQoe1xuXHRcdFx0J2xpYnJhcnktc2VwYXJhdG9yJzogbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHRjbGFzc05hbWU6ICdzZXBhcmF0b3InLFxuXHRcdFx0XHRwcmlvcml0eTogMTAwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXHR9LFxuXG5cdG1lbnVJdGVtVmlzaWJpbGl0eTogZnVuY3Rpb24oIHN0YXRlLCB2aXNpYmlsaXR5ICkge1xuXHRcdHZhciBtZW51ID0gdGhpcy5tZW51LmdldCgpO1xuXHRcdGlmICggdmlzaWJpbGl0eSA9PT0gJ2hpZGUnICkge1xuXHRcdFx0bWVudS5oaWRlKCBzdGF0ZSApO1xuXHRcdH0gZWxzZSBpZiAoIHZpc2liaWxpdHkgPT09ICdzaG93JyApIHtcblx0XHRcdG1lbnUuc2hvdyggc3RhdGUgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3dwLkJhY2tib25lLlZpZXd9IHZpZXdcblx0ICovXG5cdGdhbGxlcnlNZW51OiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgbGFzdFN0YXRlID0gdGhpcy5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZCxcblx0XHRcdGZyYW1lID0gdGhpcztcblxuXHRcdHZpZXcuc2V0KHtcblx0XHRcdGNhbmNlbDoge1xuXHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jYW5jZWxHYWxsZXJ5VGl0bGUsXG5cdFx0XHRcdHByaW9yaXR5OiAyMCxcblx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggcHJldmlvdXMgKSB7XG5cdFx0XHRcdFx0XHRmcmFtZS5zZXRTdGF0ZSggcHJldmlvdXMgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZnJhbWUuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdFx0XHRcdC8vIGFmdGVyIGNhbmNlbGluZyBhIGdhbGxlcnlcblx0XHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIubW9kYWwuZm9jdXNNYW5hZ2VyLmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXBhcmF0ZUNhbmNlbDogbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHRjbGFzc05hbWU6ICdzZXBhcmF0b3InLFxuXHRcdFx0XHRwcmlvcml0eTogNDBcblx0XHRcdH0pXG5cdFx0fSk7XG5cdH0sXG5cblx0cGxheWxpc3RNZW51OiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgbGFzdFN0YXRlID0gdGhpcy5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZCxcblx0XHRcdGZyYW1lID0gdGhpcztcblxuXHRcdHZpZXcuc2V0KHtcblx0XHRcdGNhbmNlbDoge1xuXHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jYW5jZWxQbGF5bGlzdFRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdGNsaWNrOiAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2VwYXJhdGVDYW5jZWw6IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnc2VwYXJhdG9yJyxcblx0XHRcdFx0cHJpb3JpdHk6IDQwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXHR9LFxuXG5cdHZpZGVvUGxheWxpc3RNZW51OiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgbGFzdFN0YXRlID0gdGhpcy5sYXN0U3RhdGUoKSxcblx0XHRcdHByZXZpb3VzID0gbGFzdFN0YXRlICYmIGxhc3RTdGF0ZS5pZCxcblx0XHRcdGZyYW1lID0gdGhpcztcblxuXHRcdHZpZXcuc2V0KHtcblx0XHRcdGNhbmNlbDoge1xuXHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5jYW5jZWxWaWRlb1BsYXlsaXN0VGl0bGUsXG5cdFx0XHRcdHByaW9yaXR5OiAyMCxcblx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggcHJldmlvdXMgKSB7XG5cdFx0XHRcdFx0XHRmcmFtZS5zZXRTdGF0ZSggcHJldmlvdXMgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZnJhbWUuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXBhcmF0ZUNhbmNlbDogbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHRjbGFzc05hbWU6ICdzZXBhcmF0b3InLFxuXHRcdFx0XHRwcmlvcml0eTogNDBcblx0XHRcdH0pXG5cdFx0fSk7XG5cdH0sXG5cblx0Ly8gQ29udGVudFxuXHRlbWJlZENvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuRW1iZWQoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiAgICAgIHRoaXMuc3RhdGUoKVxuXHRcdH0pLnJlbmRlcigpO1xuXG5cdFx0dGhpcy5jb250ZW50LnNldCggdmlldyApO1xuXG5cdFx0aWYgKCAhIHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgKSB7XG5cdFx0XHR2aWV3LnVybC5mb2N1cygpO1xuXHRcdH1cblx0fSxcblxuXHRlZGl0U2VsZWN0aW9uQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZSgpLFxuXHRcdFx0c2VsZWN0aW9uID0gc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdHZpZXc7XG5cblx0XHR2aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRjb2xsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0XHRzZWxlY3Rpb246ICBzZWxlY3Rpb24sXG5cdFx0XHRtb2RlbDogICAgICBzdGF0ZSxcblx0XHRcdHNvcnRhYmxlOiAgIHRydWUsXG5cdFx0XHRzZWFyY2g6ICAgICBmYWxzZSxcblx0XHRcdGRhdGU6ICAgICAgIGZhbHNlLFxuXHRcdFx0ZHJhZ0luZm86ICAgdHJ1ZSxcblxuXHRcdFx0QXR0YWNobWVudFZpZXc6IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHMuRWRpdFNlbGVjdGlvblxuXHRcdH0pLnJlbmRlcigpO1xuXG5cdFx0dmlldy50b29sYmFyLnNldCggJ2JhY2tUb0xpYnJhcnknLCB7XG5cdFx0XHR0ZXh0OiAgICAgbDEwbi5yZXR1cm5Ub0xpYnJhcnksXG5cdFx0XHRwcmlvcml0eTogLTEwMCxcblxuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCdicm93c2UnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEJyb3dzZSBvdXIgbGlicmFyeSBvZiBhdHRhY2htZW50cy5cblx0XHR0aGlzLmNvbnRlbnQuc2V0KCB2aWV3ICk7XG5cblx0XHQvLyBUcmlnZ2VyIHRoZSBjb250cm9sbGVyIHRvIHNldCBmb2N1c1xuXHRcdHRoaXMudHJpZ2dlciggJ2VkaXQ6c2VsZWN0aW9uJywgdGhpcyApO1xuXHR9LFxuXG5cdGVkaXRJbWFnZUNvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpbWFnZSA9IHRoaXMuc3RhdGUoKS5nZXQoJ2ltYWdlJyksXG5cdFx0XHR2aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuRWRpdEltYWdlKCB7IG1vZGVsOiBpbWFnZSwgY29udHJvbGxlcjogdGhpcyB9ICkucmVuZGVyKCk7XG5cblx0XHR0aGlzLmNvbnRlbnQuc2V0KCB2aWV3ICk7XG5cblx0XHQvLyBhZnRlciBjcmVhdGluZyB0aGUgd3JhcHBlciB2aWV3LCBsb2FkIHRoZSBhY3R1YWwgZWRpdG9yIHZpYSBhbiBhamF4IGNhbGxcblx0XHR2aWV3LmxvYWRFZGl0b3IoKTtcblxuXHR9LFxuXG5cdC8vIFRvb2xiYXJzXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7d3AuQmFja2JvbmUuVmlld30gdmlld1xuXHQgKi9cblx0c2VsZWN0aW9uU3RhdHVzVG9vbGJhcjogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGVkaXRhYmxlID0gdGhpcy5zdGF0ZSgpLmdldCgnZWRpdGFibGUnKTtcblxuXHRcdHZpZXcuc2V0KCAnc2VsZWN0aW9uJywgbmV3IHdwLm1lZGlhLnZpZXcuU2VsZWN0aW9uKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRjb2xsZWN0aW9uOiB0aGlzLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdHByaW9yaXR5OiAgIC00MCxcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdGlvbiBpcyBlZGl0YWJsZSwgcGFzcyB0aGUgY2FsbGJhY2sgdG9cblx0XHRcdC8vIHN3aXRjaCB0aGUgY29udGVudCBtb2RlLlxuXHRcdFx0ZWRpdGFibGU6IGVkaXRhYmxlICYmIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCdlZGl0LXNlbGVjdGlvbicpO1xuXHRcdFx0fVxuXHRcdH0pLnJlbmRlcigpICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7d3AuQmFja2JvbmUuVmlld30gdmlld1xuXHQgKi9cblx0bWFpbkluc2VydFRvb2xiYXI6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBjb250cm9sbGVyID0gdGhpcztcblxuXHRcdHRoaXMuc2VsZWN0aW9uU3RhdHVzVG9vbGJhciggdmlldyApO1xuXG5cdFx0dmlldy5zZXQoICdpbnNlcnQnLCB7XG5cdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0cHJpb3JpdHk6IDgwLFxuXHRcdFx0dGV4dDogICAgIGwxMG4uaW5zZXJ0SW50b1Bvc3QsXG5cdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSNpbnNlcnRcblx0XHRcdCAqL1xuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRcdFx0c2VsZWN0aW9uID0gc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKTtcblxuXHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdHN0YXRlLnRyaWdnZXIoICdpbnNlcnQnLCBzZWxlY3Rpb24gKS5yZXNldCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3dwLkJhY2tib25lLlZpZXd9IHZpZXdcblx0ICovXG5cdG1haW5HYWxsZXJ5VG9vbGJhcjogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzO1xuXG5cdFx0dGhpcy5zZWxlY3Rpb25TdGF0dXNUb29sYmFyKCB2aWV3ICk7XG5cblx0XHR2aWV3LnNldCggJ2dhbGxlcnknLCB7XG5cdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0dGV4dDogICAgIGwxMG4uY3JlYXRlTmV3R2FsbGVyeSxcblx0XHRcdHByaW9yaXR5OiA2MCxcblx0XHRcdHJlcXVpcmVzOiB7IHNlbGVjdGlvbjogdHJ1ZSB9LFxuXG5cdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBzZWxlY3Rpb24gPSBjb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdFx0XHRlZGl0ID0gY29udHJvbGxlci5zdGF0ZSgnZ2FsbGVyeS1lZGl0JyksXG5cdFx0XHRcdFx0bW9kZWxzID0gc2VsZWN0aW9uLndoZXJlKHsgdHlwZTogJ2ltYWdlJyB9KTtcblxuXHRcdFx0XHRlZGl0LnNldCggJ2xpYnJhcnknLCBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCBtb2RlbHMsIHtcblx0XHRcdFx0XHRwcm9wczogICAgc2VsZWN0aW9uLnByb3BzLnRvSlNPTigpLFxuXHRcdFx0XHRcdG11bHRpcGxlOiB0cnVlXG5cdFx0XHRcdH0pICk7XG5cblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCdnYWxsZXJ5LWVkaXQnKTtcblxuXHRcdFx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdFx0XHQvLyBhZnRlciBqdW1waW5nIHRvIGdhbGxlcnkgdmlld1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIubW9kYWwuZm9jdXNNYW5hZ2VyLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0bWFpblBsYXlsaXN0VG9vbGJhcjogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzO1xuXG5cdFx0dGhpcy5zZWxlY3Rpb25TdGF0dXNUb29sYmFyKCB2aWV3ICk7XG5cblx0XHR2aWV3LnNldCggJ3BsYXlsaXN0Jywge1xuXHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdHRleHQ6ICAgICBsMTBuLmNyZWF0ZU5ld1BsYXlsaXN0LFxuXHRcdFx0cHJpb3JpdHk6IDEwMCxcblx0XHRcdHJlcXVpcmVzOiB7IHNlbGVjdGlvbjogdHJ1ZSB9LFxuXG5cdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBzZWxlY3Rpb24gPSBjb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdFx0XHRlZGl0ID0gY29udHJvbGxlci5zdGF0ZSgncGxheWxpc3QtZWRpdCcpLFxuXHRcdFx0XHRcdG1vZGVscyA9IHNlbGVjdGlvbi53aGVyZSh7IHR5cGU6ICdhdWRpbycgfSk7XG5cblx0XHRcdFx0ZWRpdC5zZXQoICdsaWJyYXJ5JywgbmV3IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiggbW9kZWxzLCB7XG5cdFx0XHRcdFx0cHJvcHM6ICAgIHNlbGVjdGlvbi5wcm9wcy50b0pTT04oKSxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZVxuXHRcdFx0XHR9KSApO1xuXG5cdFx0XHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSgncGxheWxpc3QtZWRpdCcpO1xuXG5cdFx0XHRcdC8vIEtlZXAgZm9jdXMgaW5zaWRlIG1lZGlhIG1vZGFsXG5cdFx0XHRcdC8vIGFmdGVyIGp1bXBpbmcgdG8gcGxheWxpc3Qgdmlld1xuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIubW9kYWwuZm9jdXNNYW5hZ2VyLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0bWFpblZpZGVvUGxheWxpc3RUb29sYmFyOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgY29udHJvbGxlciA9IHRoaXM7XG5cblx0XHR0aGlzLnNlbGVjdGlvblN0YXR1c1Rvb2xiYXIoIHZpZXcgKTtcblxuXHRcdHZpZXcuc2V0KCAndmlkZW8tcGxheWxpc3QnLCB7XG5cdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0dGV4dDogICAgIGwxMG4uY3JlYXRlTmV3VmlkZW9QbGF5bGlzdCxcblx0XHRcdHByaW9yaXR5OiAxMDAsXG5cdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRcdFx0ZWRpdCA9IGNvbnRyb2xsZXIuc3RhdGUoJ3ZpZGVvLXBsYXlsaXN0LWVkaXQnKSxcblx0XHRcdFx0XHRtb2RlbHMgPSBzZWxlY3Rpb24ud2hlcmUoeyB0eXBlOiAndmlkZW8nIH0pO1xuXG5cdFx0XHRcdGVkaXQuc2V0KCAnbGlicmFyeScsIG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oIG1vZGVscywge1xuXHRcdFx0XHRcdHByb3BzOiAgICBzZWxlY3Rpb24ucHJvcHMudG9KU09OKCksXG5cdFx0XHRcdFx0bXVsdGlwbGU6IHRydWVcblx0XHRcdFx0fSkgKTtcblxuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoJ3ZpZGVvLXBsYXlsaXN0LWVkaXQnKTtcblxuXHRcdFx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdFx0XHQvLyBhZnRlciBqdW1waW5nIHRvIHZpZGVvIHBsYXlsaXN0IHZpZXdcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLm1vZGFsLmZvY3VzTWFuYWdlci5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdGZlYXR1cmVkSW1hZ2VUb29sYmFyOiBmdW5jdGlvbiggdG9vbGJhciApIHtcblx0XHR0aGlzLmNyZWF0ZVNlbGVjdFRvb2xiYXIoIHRvb2xiYXIsIHtcblx0XHRcdHRleHQ6ICBsMTBuLnNldEZlYXR1cmVkSW1hZ2UsXG5cdFx0XHRzdGF0ZTogdGhpcy5vcHRpb25zLnN0YXRlXG5cdFx0fSk7XG5cdH0sXG5cblx0bWFpbkVtYmVkVG9vbGJhcjogZnVuY3Rpb24oIHRvb2xiYXIgKSB7XG5cdFx0dG9vbGJhci52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhci5FbWJlZCh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzXG5cdFx0fSk7XG5cdH0sXG5cblx0Z2FsbGVyeUVkaXRUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWRpdGluZyA9IHRoaXMuc3RhdGUoKS5nZXQoJ2VkaXRpbmcnKTtcblx0XHR0aGlzLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRpbnNlcnQ6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBlZGl0aW5nID8gbDEwbi51cGRhdGVHYWxsZXJ5IDogbDEwbi5pbnNlcnRHYWxsZXJ5LFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblx0XHRcdFx0XHRyZXF1aXJlczogeyBsaWJyYXJ5OiB0cnVlIH0sXG5cblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSN1cGRhdGVcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCk7XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoICd1cGRhdGUnLCBzdGF0ZS5nZXQoJ2xpYnJhcnknKSApO1xuXG5cdFx0XHRcdFx0XHQvLyBSZXN0b3JlIGFuZCByZXNldCB0aGUgZGVmYXVsdCBzdGF0ZS5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoIGNvbnRyb2xsZXIub3B0aW9ucy5zdGF0ZSApO1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5yZXNldCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pICk7XG5cdH0sXG5cblx0Z2FsbGVyeUFkZFRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGluc2VydDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uYWRkVG9HYWxsZXJ5LFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblx0XHRcdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIEBmaXJlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlI3Jlc2V0XG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRlZGl0ID0gY29udHJvbGxlci5zdGF0ZSgnZ2FsbGVyeS1lZGl0Jyk7XG5cblx0XHRcdFx0XHRcdGVkaXQuZ2V0KCdsaWJyYXJ5JykuYWRkKCBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpLm1vZGVscyApO1xuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlcigncmVzZXQnKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoJ2dhbGxlcnktZWRpdCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pICk7XG5cdH0sXG5cblx0cGxheWxpc3RFZGl0VG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVkaXRpbmcgPSB0aGlzLnN0YXRlKCkuZ2V0KCdlZGl0aW5nJyk7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgZWRpdGluZyA/IGwxMG4udXBkYXRlUGxheWxpc3QgOiBsMTBuLmluc2VydFBsYXlsaXN0LFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblx0XHRcdFx0XHRyZXF1aXJlczogeyBsaWJyYXJ5OiB0cnVlIH0sXG5cblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSN1cGRhdGVcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCk7XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoICd1cGRhdGUnLCBzdGF0ZS5nZXQoJ2xpYnJhcnknKSApO1xuXG5cdFx0XHRcdFx0XHQvLyBSZXN0b3JlIGFuZCByZXNldCB0aGUgZGVmYXVsdCBzdGF0ZS5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoIGNvbnRyb2xsZXIub3B0aW9ucy5zdGF0ZSApO1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5yZXNldCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pICk7XG5cdH0sXG5cblx0cGxheWxpc3RBZGRUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRpbnNlcnQ6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLmFkZFRvUGxheWxpc3QsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXHRcdFx0XHRcdHJlcXVpcmVzOiB7IHNlbGVjdGlvbjogdHJ1ZSB9LFxuXG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjcmVzZXRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRcdFx0XHRcdGVkaXQgPSBjb250cm9sbGVyLnN0YXRlKCdwbGF5bGlzdC1lZGl0Jyk7XG5cblx0XHRcdFx0XHRcdGVkaXQuZ2V0KCdsaWJyYXJ5JykuYWRkKCBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpLm1vZGVscyApO1xuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlcigncmVzZXQnKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoJ3BsYXlsaXN0LWVkaXQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHZpZGVvUGxheWxpc3RFZGl0VG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVkaXRpbmcgPSB0aGlzLnN0YXRlKCkuZ2V0KCdlZGl0aW5nJyk7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgZWRpdGluZyA/IGwxMG4udXBkYXRlVmlkZW9QbGF5bGlzdCA6IGwxMG4uaW5zZXJ0VmlkZW9QbGF5bGlzdCxcblx0XHRcdFx0XHRwcmlvcml0eTogMTQwLFxuXHRcdFx0XHRcdHJlcXVpcmVzOiB7IGxpYnJhcnk6IHRydWUgfSxcblxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IGNvbnRyb2xsZXIuc3RhdGUoKSxcblx0XHRcdFx0XHRcdFx0bGlicmFyeSA9IHN0YXRlLmdldCgnbGlicmFyeScpO1xuXG5cdFx0XHRcdFx0XHRsaWJyYXJ5LnR5cGUgPSAndmlkZW8nO1xuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRzdGF0ZS50cmlnZ2VyKCAndXBkYXRlJywgbGlicmFyeSApO1xuXG5cdFx0XHRcdFx0XHQvLyBSZXN0b3JlIGFuZCByZXNldCB0aGUgZGVmYXVsdCBzdGF0ZS5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoIGNvbnRyb2xsZXIub3B0aW9ucy5zdGF0ZSApO1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5yZXNldCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pICk7XG5cdH0sXG5cblx0dmlkZW9QbGF5bGlzdEFkZFRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGluc2VydDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uYWRkVG9WaWRlb1BsYXlsaXN0LFxuXHRcdFx0XHRcdHByaW9yaXR5OiAxNDAsXG5cdFx0XHRcdFx0cmVxdWlyZXM6IHsgc2VsZWN0aW9uOiB0cnVlIH0sXG5cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRcdFx0XHRcdGVkaXQgPSBjb250cm9sbGVyLnN0YXRlKCd2aWRlby1wbGF5bGlzdC1lZGl0Jyk7XG5cblx0XHRcdFx0XHRcdGVkaXQuZ2V0KCdsaWJyYXJ5JykuYWRkKCBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpLm1vZGVscyApO1xuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlcigncmVzZXQnKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoJ3ZpZGVvLXBsYXlsaXN0LWVkaXQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb3N0O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0XG4gKlxuICogQSBmcmFtZSBmb3Igc2VsZWN0aW5nIGFuIGl0ZW0gb3IgaXRlbXMgZnJvbSB0aGUgbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xuXG52YXIgTWVkaWFGcmFtZSA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0U2VsZWN0O1xuXG5TZWxlY3QgPSBNZWRpYUZyYW1lLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0TWVkaWFGcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRsaWJyYXJ5OiAgIHt9LFxuXHRcdFx0bXVsdGlwbGU6ICBmYWxzZSxcblx0XHRcdHN0YXRlOiAgICAnbGlicmFyeSdcblx0XHR9KTtcblxuXHRcdHRoaXMuY3JlYXRlU2VsZWN0aW9uKCk7XG5cdFx0dGhpcy5jcmVhdGVTdGF0ZXMoKTtcblx0XHR0aGlzLmJpbmRIYW5kbGVycygpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBzZWxlY3Rpb24gY29sbGVjdGlvbiB0byB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEEgc2VsZWN0aW9uIGlzIGEgY29sbGVjdGlvbiBvZiBhdHRhY2htZW50cyB1c2VkIGZvciBhIHNwZWNpZmljIHB1cnBvc2Vcblx0ICogYnkgYSBtZWRpYSBmcmFtZS4gZS5nLiBTZWxlY3RpbmcgYW4gYXR0YWNobWVudCAob3IgbWFueSkgdG8gaW5zZXJ0IGludG9cblx0ICogcG9zdCBjb250ZW50LlxuXHQgKlxuXHQgKiBAc2VlIG1lZGlhLm1vZGVsLlNlbGVjdGlvblxuXHQgKi9cblx0Y3JlYXRlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbjtcblxuXHRcdGlmICggISAoc2VsZWN0aW9uIGluc3RhbmNlb2Ygd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKSApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zZWxlY3Rpb24gPSBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCBzZWxlY3Rpb24sIHtcblx0XHRcdFx0bXVsdGlwbGU6IHRoaXMub3B0aW9ucy5tdWx0aXBsZVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fc2VsZWN0aW9uID0ge1xuXHRcdFx0YXR0YWNobWVudHM6IG5ldyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50cygpLFxuXHRcdFx0ZGlmZmVyZW5jZTogW11cblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGRlZmF1bHQgc3RhdGVzIG9uIHRoZSBmcmFtZS5cblx0ICovXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGF0ZXMgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSBkZWZhdWx0IHN0YXRlcy5cblx0XHR0aGlzLnN0YXRlcy5hZGQoW1xuXHRcdFx0Ly8gTWFpbiBzdGF0ZXMuXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5KHtcblx0XHRcdFx0bGlicmFyeTogICB3cC5tZWRpYS5xdWVyeSggb3B0aW9ucy5saWJyYXJ5ICksXG5cdFx0XHRcdG11bHRpcGxlOiAgb3B0aW9ucy5tdWx0aXBsZSxcblx0XHRcdFx0dGl0bGU6ICAgICBvcHRpb25zLnRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogIDIwXG5cdFx0XHR9KVxuXHRcdF0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBCaW5kIHJlZ2lvbiBtb2RlIGV2ZW50IGNhbGxiYWNrcy5cblx0ICpcblx0ICogQHNlZSBtZWRpYS5jb250cm9sbGVyLlJlZ2lvbi5yZW5kZXJcblx0ICovXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vbiggJ3JvdXRlcjpjcmVhdGU6YnJvd3NlJywgdGhpcy5jcmVhdGVSb3V0ZXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAncm91dGVyOnJlbmRlcjpicm93c2UnLCB0aGlzLmJyb3dzZVJvdXRlciwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjb250ZW50OmNyZWF0ZTpicm93c2UnLCB0aGlzLmJyb3dzZUNvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6dXBsb2FkJywgdGhpcy51cGxvYWRDb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOnNlbGVjdCcsIHRoaXMuY3JlYXRlU2VsZWN0VG9vbGJhciwgdGhpcyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW5kZXIgY2FsbGJhY2sgZm9yIHRoZSByb3V0ZXIgcmVnaW9uIGluIHRoZSBgYnJvd3NlYCBtb2RlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLnZpZXcuUm91dGVyfSByb3V0ZXJWaWV3XG5cdCAqL1xuXHRicm93c2VSb3V0ZXI6IGZ1bmN0aW9uKCByb3V0ZXJWaWV3ICkge1xuXHRcdHJvdXRlclZpZXcuc2V0KHtcblx0XHRcdHVwbG9hZDoge1xuXHRcdFx0XHR0ZXh0OiAgICAgbDEwbi51cGxvYWRGaWxlc1RpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogMjBcblx0XHRcdH0sXG5cdFx0XHRicm93c2U6IHtcblx0XHRcdFx0dGV4dDogICAgIGwxMG4ubWVkaWFMaWJyYXJ5VGl0bGUsXG5cdFx0XHRcdHByaW9yaXR5OiA0MFxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW5kZXIgY2FsbGJhY2sgZm9yIHRoZSBjb250ZW50IHJlZ2lvbiBpbiB0aGUgYGJyb3dzZWAgbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvbn0gY29udGVudFJlZ2lvblxuXHQgKi9cblx0YnJvd3NlQ29udGVudDogZnVuY3Rpb24oIGNvbnRlbnRSZWdpb24gKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuXG5cdFx0dGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2hpZGUtdG9vbGJhcicpO1xuXG5cdFx0Ly8gQnJvd3NlIG91ciBsaWJyYXJ5IG9mIGF0dGFjaG1lbnRzLlxuXHRcdGNvbnRlbnRSZWdpb24udmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3Nlcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0Y29sbGVjdGlvbjogc3RhdGUuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRzZWxlY3Rpb246ICBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpLFxuXHRcdFx0bW9kZWw6ICAgICAgc3RhdGUsXG5cdFx0XHRzb3J0YWJsZTogICBzdGF0ZS5nZXQoJ3NvcnRhYmxlJyksXG5cdFx0XHRzZWFyY2g6ICAgICBzdGF0ZS5nZXQoJ3NlYXJjaGFibGUnKSxcblx0XHRcdGZpbHRlcnM6ICAgIHN0YXRlLmdldCgnZmlsdGVyYWJsZScpLFxuXHRcdFx0ZGF0ZTogICAgICAgc3RhdGUuZ2V0KCdkYXRlJyksXG5cdFx0XHRkaXNwbGF5OiAgICBzdGF0ZS5oYXMoJ2Rpc3BsYXknKSA/IHN0YXRlLmdldCgnZGlzcGxheScpIDogc3RhdGUuZ2V0KCdkaXNwbGF5U2V0dGluZ3MnKSxcblx0XHRcdGRyYWdJbmZvOiAgIHN0YXRlLmdldCgnZHJhZ0luZm8nKSxcblxuXHRcdFx0aWRlYWxDb2x1bW5XaWR0aDogc3RhdGUuZ2V0KCdpZGVhbENvbHVtbldpZHRoJyksXG5cdFx0XHRzdWdnZXN0ZWRXaWR0aDogICBzdGF0ZS5nZXQoJ3N1Z2dlc3RlZFdpZHRoJyksXG5cdFx0XHRzdWdnZXN0ZWRIZWlnaHQ6ICBzdGF0ZS5nZXQoJ3N1Z2dlc3RlZEhlaWdodCcpLFxuXG5cdFx0XHRBdHRhY2htZW50Vmlldzogc3RhdGUuZ2V0KCdBdHRhY2htZW50VmlldycpXG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbmRlciBjYWxsYmFjayBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uIGluIHRoZSBgdXBsb2FkYCBtb2RlLlxuXHQgKi9cblx0dXBsb2FkQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwucmVtb3ZlQ2xhc3MoICdoaWRlLXRvb2xiYXInICk7XG5cdFx0dGhpcy5jb250ZW50LnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmUoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdH0pICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRvb2xiYXJzXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0b29sYmFyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICogQHRoaXMgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cblx0ICovXG5cdGNyZWF0ZVNlbGVjdFRvb2xiYXI6IGZ1bmN0aW9uKCB0b29sYmFyLCBvcHRpb25zICkge1xuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMub3B0aW9ucy5idXR0b24gfHwge307XG5cdFx0b3B0aW9ucy5jb250cm9sbGVyID0gdGhpcztcblxuXHRcdHRvb2xiYXIudmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIuU2VsZWN0KCBvcHRpb25zICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5JZnJhbWVcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIElmcmFtZSA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnbWVkaWEtaWZyYW1lJyxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LklmcmFtZX0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy52aWV3cy5kZXRhY2goKTtcblx0XHR0aGlzLiRlbC5odG1sKCAnPGlmcmFtZSBzcmM9XCInICsgdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzcmMnKSArICdcIiAvPicgKTtcblx0XHR0aGlzLnZpZXdzLnJlbmRlcigpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJZnJhbWU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuSW1hZ2VEZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEF0dGFjaG1lbnREaXNwbGF5ID0gd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheSxcblx0JCA9IGpRdWVyeSxcblx0SW1hZ2VEZXRhaWxzO1xuXG5JbWFnZURldGFpbHMgPSBBdHRhY2htZW50RGlzcGxheS5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdpbWFnZS1kZXRhaWxzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnaW1hZ2UtZGV0YWlscycpLFxuXHRldmVudHM6IF8uZGVmYXVsdHMoIEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5ldmVudHMsIHtcblx0XHQnY2xpY2sgLmVkaXQtYXR0YWNobWVudCc6ICdlZGl0QXR0YWNobWVudCcsXG5cdFx0J2NsaWNrIC5yZXBsYWNlLWF0dGFjaG1lbnQnOiAncmVwbGFjZUF0dGFjaG1lbnQnLFxuXHRcdCdjbGljayAuYWR2YW5jZWQtdG9nZ2xlJzogJ29uVG9nZ2xlQWR2YW5jZWQnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZz1cImN1c3RvbVdpZHRoXCJdJzogJ29uQ3VzdG9tU2l6ZScsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nPVwiY3VzdG9tSGVpZ2h0XCJdJzogJ29uQ3VzdG9tU2l6ZScsXG5cdFx0J2tleXVwIFtkYXRhLXNldHRpbmc9XCJjdXN0b21XaWR0aFwiXSc6ICdvbkN1c3RvbVNpemUnLFxuXHRcdCdrZXl1cCBbZGF0YS1zZXR0aW5nPVwiY3VzdG9tSGVpZ2h0XCJdJzogJ29uQ3VzdG9tU2l6ZSdcblx0fSApLFxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQvLyB1c2VkIGluIEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS51cGRhdGVMaW5rVG9cblx0XHR0aGlzLm9wdGlvbnMuYXR0YWNobWVudCA9IHRoaXMubW9kZWwuYXR0YWNobWVudDtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnVybCcsIHRoaXMudXBkYXRlVXJsICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpsaW5rJywgdGhpcy50b2dnbGVMaW5rU2V0dGluZ3MgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnNpemUnLCB0aGlzLnRvZ2dsZUN1c3RvbVNpemUgKTtcblxuXHRcdEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXR0YWNobWVudCA9IGZhbHNlO1xuXG5cdFx0aWYgKCB0aGlzLm1vZGVsLmF0dGFjaG1lbnQgKSB7XG5cdFx0XHRhdHRhY2htZW50ID0gdGhpcy5tb2RlbC5hdHRhY2htZW50LnRvSlNPTigpO1xuXHRcdH1cblx0XHRyZXR1cm4gXy5kZWZhdWx0cyh7XG5cdFx0XHRtb2RlbDogdGhpcy5tb2RlbC50b0pTT04oKSxcblx0XHRcdGF0dGFjaG1lbnQ6IGF0dGFjaG1lbnRcblx0XHR9LCB0aGlzLm9wdGlvbnMgKTtcblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG5cdFx0aWYgKCB0aGlzLm1vZGVsLmF0dGFjaG1lbnQgJiYgJ3BlbmRpbmcnID09PSB0aGlzLm1vZGVsLmRmZC5zdGF0ZSgpICkge1xuXHRcdFx0dGhpcy5tb2RlbC5kZmRcblx0XHRcdFx0LmRvbmUoIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0QXR0YWNobWVudERpc3BsYXkucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJncyApO1xuXHRcdFx0XHRcdHRoaXMucG9zdFJlbmRlcigpO1xuXHRcdFx0XHR9LCB0aGlzICkgKVxuXHRcdFx0XHQuZmFpbCggXy5iaW5kKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHR0aGlzLm1vZGVsLmF0dGFjaG1lbnQgPSBmYWxzZTtcblx0XHRcdFx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmdzICk7XG5cdFx0XHRcdFx0dGhpcy5wb3N0UmVuZGVyKCk7XG5cdFx0XHRcdH0sIHRoaXMgKSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdHRoaXMucG9zdFJlbmRlcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHBvc3RSZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHNldFRpbWVvdXQoIF8uYmluZCggdGhpcy5yZXNldEZvY3VzLCB0aGlzICksIDEwICk7XG5cdFx0dGhpcy50b2dnbGVMaW5rU2V0dGluZ3MoKTtcblx0XHRpZiAoIHdpbmRvdy5nZXRVc2VyU2V0dGluZyggJ2FkdkltZ0RldGFpbHMnICkgPT09ICdzaG93JyApIHtcblx0XHRcdHRoaXMudG9nZ2xlQWR2YW5jZWQoIHRydWUgKTtcblx0XHR9XG5cdFx0dGhpcy50cmlnZ2VyKCAncG9zdC1yZW5kZXInICk7XG5cdH0sXG5cblx0cmVzZXRGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCAnLmxpbmstdG8tY3VzdG9tJyApLmJsdXIoKTtcblx0XHR0aGlzLiQoICcuZW1iZWQtbWVkaWEtc2V0dGluZ3MnICkuc2Nyb2xsVG9wKCAwICk7XG5cdH0sXG5cblx0dXBkYXRlVXJsOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiQoICcuaW1hZ2UgaW1nJyApLmF0dHIoICdzcmMnLCB0aGlzLm1vZGVsLmdldCggJ3VybCcgKSApO1xuXHRcdHRoaXMuJCggJy51cmwnICkudmFsKCB0aGlzLm1vZGVsLmdldCggJ3VybCcgKSApO1xuXHR9LFxuXG5cdHRvZ2dsZUxpbmtTZXR0aW5nczogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLm1vZGVsLmdldCggJ2xpbmsnICkgPT09ICdub25lJyApIHtcblx0XHRcdHRoaXMuJCggJy5saW5rLXNldHRpbmdzJyApLmFkZENsYXNzKCdoaWRkZW4nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4kKCAnLmxpbmstc2V0dGluZ3MnICkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdH1cblx0fSxcblxuXHR0b2dnbGVDdXN0b21TaXplOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMubW9kZWwuZ2V0KCAnc2l6ZScgKSAhPT0gJ2N1c3RvbScgKSB7XG5cdFx0XHR0aGlzLiQoICcuY3VzdG9tLXNpemUnICkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLiQoICcuY3VzdG9tLXNpemUnICkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdH1cblx0fSxcblxuXHRvbkN1c3RvbVNpemU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgZGltZW5zaW9uID0gJCggZXZlbnQudGFyZ2V0ICkuZGF0YSgnc2V0dGluZycpLFxuXHRcdFx0bnVtID0gJCggZXZlbnQudGFyZ2V0ICkudmFsKCksXG5cdFx0XHR2YWx1ZTtcblxuXHRcdC8vIElnbm9yZSBib2d1cyBpbnB1dFxuXHRcdGlmICggISAvXlxcZCsvLnRlc3QoIG51bSApIHx8IHBhcnNlSW50KCBudW0sIDEwICkgPCAxICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGRpbWVuc2lvbiA9PT0gJ2N1c3RvbVdpZHRoJyApIHtcblx0XHRcdHZhbHVlID0gTWF0aC5yb3VuZCggMSAvIHRoaXMubW9kZWwuZ2V0KCAnYXNwZWN0UmF0aW8nICkgKiBudW0gKTtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCAnY3VzdG9tSGVpZ2h0JywgdmFsdWUsIHsgc2lsZW50OiB0cnVlIH0gKTtcblx0XHRcdHRoaXMuJCggJ1tkYXRhLXNldHRpbmc9XCJjdXN0b21IZWlnaHRcIl0nICkudmFsKCB2YWx1ZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQoIHRoaXMubW9kZWwuZ2V0KCAnYXNwZWN0UmF0aW8nICkgKiBudW0gKTtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCAnY3VzdG9tV2lkdGgnLCB2YWx1ZSwgeyBzaWxlbnQ6IHRydWUgIH0gKTtcblx0XHRcdHRoaXMuJCggJ1tkYXRhLXNldHRpbmc9XCJjdXN0b21XaWR0aFwiXScgKS52YWwoIHZhbHVlICk7XG5cdFx0fVxuXHR9LFxuXG5cdG9uVG9nZ2xlQWR2YW5jZWQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHRoaXMudG9nZ2xlQWR2YW5jZWQoKTtcblx0fSxcblxuXHR0b2dnbGVBZHZhbmNlZDogZnVuY3Rpb24oIHNob3cgKSB7XG5cdFx0dmFyICRhZHZhbmNlZCA9IHRoaXMuJGVsLmZpbmQoICcuYWR2YW5jZWQtc2VjdGlvbicgKSxcblx0XHRcdG1vZGU7XG5cblx0XHRpZiAoICRhZHZhbmNlZC5oYXNDbGFzcygnYWR2YW5jZWQtdmlzaWJsZScpIHx8IHNob3cgPT09IGZhbHNlICkge1xuXHRcdFx0JGFkdmFuY2VkLnJlbW92ZUNsYXNzKCdhZHZhbmNlZC12aXNpYmxlJyk7XG5cdFx0XHQkYWR2YW5jZWQuZmluZCgnLmFkdmFuY2VkLXNldHRpbmdzJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdFx0bW9kZSA9ICdoaWRlJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGFkdmFuY2VkLmFkZENsYXNzKCdhZHZhbmNlZC12aXNpYmxlJyk7XG5cdFx0XHQkYWR2YW5jZWQuZmluZCgnLmFkdmFuY2VkLXNldHRpbmdzJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXHRcdFx0bW9kZSA9ICdzaG93Jztcblx0XHR9XG5cblx0XHR3aW5kb3cuc2V0VXNlclNldHRpbmcoICdhZHZJbWdEZXRhaWxzJywgbW9kZSApO1xuXHR9LFxuXG5cdGVkaXRBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGVkaXRTdGF0ZSA9IHRoaXMuY29udHJvbGxlci5zdGF0ZXMuZ2V0KCAnZWRpdC1pbWFnZScgKTtcblxuXHRcdGlmICggd2luZG93LmltYWdlRWRpdCAmJiBlZGl0U3RhdGUgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0ZWRpdFN0YXRlLnNldCggJ2ltYWdlJywgdGhpcy5tb2RlbC5hdHRhY2htZW50ICk7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoICdlZGl0LWltYWdlJyApO1xuXHRcdH1cblx0fSxcblxuXHRyZXBsYWNlQXR0YWNobWVudDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCAncmVwbGFjZS1pbWFnZScgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSW1hZ2VEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkxhYmVsXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBMYWJlbCA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogJ2xhYmVsJyxcblx0Y2xhc3NOYW1lOiAnc2NyZWVuLXJlYWRlci10ZXh0JyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5vcHRpb25zLnZhbHVlO1xuXHR9LFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwuaHRtbCggdGhpcy52YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhYmVsO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqXG4gKiBUaGUgZnJhbWUgdXNlZCB0byBjcmVhdGUgdGhlIG1lZGlhIG1vZGFsLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqIEBtaXhlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuICovXG52YXIgRnJhbWUgPSB3cC5tZWRpYS52aWV3LkZyYW1lLFxuXHQkID0galF1ZXJ5LFxuXHRNZWRpYUZyYW1lO1xuXG5NZWRpYUZyYW1lID0gRnJhbWUuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnbWVkaWEtZnJhbWUnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdtZWRpYS1mcmFtZScpLFxuXHRyZWdpb25zOiAgIFsnbWVudScsJ3RpdGxlJywnY29udGVudCcsJ3Rvb2xiYXInLCdyb3V0ZXInXSxcblxuXHRldmVudHM6IHtcblx0XHQnY2xpY2sgZGl2Lm1lZGlhLWZyYW1lLXRpdGxlIGgxJzogJ3RvZ2dsZU1lbnUnXG5cdH0sXG5cblx0LyoqXG5cdCAqIEBnbG9iYWwgd3AuVXBsb2FkZXJcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdEZyYW1lLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0dGl0bGU6ICAgICcnLFxuXHRcdFx0bW9kYWw6ICAgIHRydWUsXG5cdFx0XHR1cGxvYWRlcjogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW5zdXJlIGNvcmUgVUkgaXMgZW5hYmxlZC5cblx0XHR0aGlzLiRlbC5hZGRDbGFzcygnd3AtY29yZS11aScpO1xuXG5cdFx0Ly8gSW5pdGlhbGl6ZSBtb2RhbCBjb250YWluZXIgdmlldy5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5tb2RhbCApIHtcblx0XHRcdHRoaXMubW9kYWwgPSBuZXcgd3AubWVkaWEudmlldy5Nb2RhbCh7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRcdHRpdGxlOiAgICAgIHRoaXMub3B0aW9ucy50aXRsZVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubW9kYWwuY29udGVudCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIHRoZSB1cGxvYWRlciBvZmYgaWYgdGhlIHVwbG9hZCBsaW1pdCBoYXMgYmVlbiBleGNlZWRlZCBvclxuXHRcdC8vIGlmIHRoZSBicm93c2VyIGlzbid0IHN1cHBvcnRlZC5cblx0XHRpZiAoIHdwLlVwbG9hZGVyLmxpbWl0RXhjZWVkZWQgfHwgISB3cC5VcGxvYWRlci5icm93c2VyLnN1cHBvcnRlZCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy51cGxvYWRlciA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgd2luZG93LXdpZGUgdXBsb2FkZXIuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMudXBsb2FkZXIgKSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyID0gbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJXaW5kb3coe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0XHR1cGxvYWRlcjoge1xuXHRcdFx0XHRcdGRyb3B6b25lOiAgdGhpcy5tb2RhbCA/IHRoaXMubW9kYWwuJGVsIDogdGhpcy4kZWwsXG5cdFx0XHRcdFx0Y29udGFpbmVyOiB0aGlzLiRlbFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudmlld3Muc2V0KCAnLm1lZGlhLWZyYW1lLXVwbG9hZGVyJywgdGhpcy51cGxvYWRlciApO1xuXHRcdH1cblxuXHRcdHRoaXMub24oICdhdHRhY2gnLCBfLmJpbmQoIHRoaXMudmlld3MucmVhZHksIHRoaXMudmlld3MgKSwgdGhpcyApO1xuXG5cdFx0Ly8gQmluZCBkZWZhdWx0IHRpdGxlIGNyZWF0aW9uLlxuXHRcdHRoaXMub24oICd0aXRsZTpjcmVhdGU6ZGVmYXVsdCcsIHRoaXMuY3JlYXRlVGl0bGUsIHRoaXMgKTtcblx0XHR0aGlzLnRpdGxlLm1vZGUoJ2RlZmF1bHQnKTtcblxuXHRcdHRoaXMub24oICd0aXRsZTpyZW5kZXInLCBmdW5jdGlvbiggdmlldyApIHtcblx0XHRcdHZpZXcuJGVsLmFwcGVuZCggJzxzcGFuIGNsYXNzPVwiZGFzaGljb25zIGRhc2hpY29ucy1hcnJvdy1kb3duXCI+PC9zcGFuPicgKTtcblx0XHR9KTtcblxuXHRcdC8vIEJpbmQgZGVmYXVsdCBtZW51LlxuXHRcdHRoaXMub24oICdtZW51OmNyZWF0ZTpkZWZhdWx0JywgdGhpcy5jcmVhdGVNZW51LCB0aGlzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5NZWRpYUZyYW1lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHQvLyBBY3RpdmF0ZSB0aGUgZGVmYXVsdCBzdGF0ZSBpZiBubyBhY3RpdmUgc3RhdGUgZXhpc3RzLlxuXHRcdGlmICggISB0aGlzLnN0YXRlKCkgJiYgdGhpcy5vcHRpb25zLnN0YXRlICkge1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggdGhpcy5vcHRpb25zLnN0YXRlICk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ3JlbmRlcicgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdHJldHVybiBGcmFtZS5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB0aXRsZVxuXHQgKiBAdGhpcyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuXHQgKi9cblx0Y3JlYXRlVGl0bGU6IGZ1bmN0aW9uKCB0aXRsZSApIHtcblx0XHR0aXRsZS52aWV3ID0gbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdHRhZ05hbWU6ICdoMSdcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBtZW51XG5cdCAqIEB0aGlzIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uXG5cdCAqL1xuXHRjcmVhdGVNZW51OiBmdW5jdGlvbiggbWVudSApIHtcblx0XHRtZW51LnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5NZW51KHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXNcblx0XHR9KTtcblx0fSxcblxuXHR0b2dnbGVNZW51OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5maW5kKCAnLm1lZGlhLW1lbnUnICkudG9nZ2xlQ2xhc3MoICd2aXNpYmxlJyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdG9vbGJhclxuXHQgKiBAdGhpcyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuXHQgKi9cblx0Y3JlYXRlVG9vbGJhcjogZnVuY3Rpb24oIHRvb2xiYXIgKSB7XG5cdFx0dG9vbGJhci52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzXG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcm91dGVyXG5cdCAqIEB0aGlzIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uXG5cdCAqL1xuXHRjcmVhdGVSb3V0ZXI6IGZ1bmN0aW9uKCByb3V0ZXIgKSB7XG5cdFx0cm91dGVyLnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5Sb3V0ZXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICovXG5cdGNyZWF0ZUlmcmFtZVN0YXRlczogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dmFyIHNldHRpbmdzID0gd3AubWVkaWEudmlldy5zZXR0aW5ncyxcblx0XHRcdHRhYnMgPSBzZXR0aW5ncy50YWJzLFxuXHRcdFx0dGFiVXJsID0gc2V0dGluZ3MudGFiVXJsLFxuXHRcdFx0JHBvc3RJZDtcblxuXHRcdGlmICggISB0YWJzIHx8ICEgdGFiVXJsICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcG9zdCBJRCB0byB0aGUgdGFiIFVSTCBpZiBpdCBleGlzdHMuXG5cdFx0JHBvc3RJZCA9ICQoJyNwb3N0X0lEJyk7XG5cdFx0aWYgKCAkcG9zdElkLmxlbmd0aCApIHtcblx0XHRcdHRhYlVybCArPSAnJnBvc3RfaWQ9JyArICRwb3N0SWQudmFsKCk7XG5cdFx0fVxuXG5cdFx0Ly8gR2VuZXJhdGUgdGhlIHRhYiBzdGF0ZXMuXG5cdFx0Xy5lYWNoKCB0YWJzLCBmdW5jdGlvbiggdGl0bGUsIGlkICkge1xuXHRcdFx0dGhpcy5zdGF0ZSggJ2lmcmFtZTonICsgaWQgKS5zZXQoIF8uZGVmYXVsdHMoe1xuXHRcdFx0XHR0YWI6ICAgICBpZCxcblx0XHRcdFx0c3JjOiAgICAgdGFiVXJsICsgJyZ0YWI9JyArIGlkLFxuXHRcdFx0XHR0aXRsZTogICB0aXRsZSxcblx0XHRcdFx0Y29udGVudDogJ2lmcmFtZScsXG5cdFx0XHRcdG1lbnU6ICAgICdkZWZhdWx0J1xuXHRcdFx0fSwgb3B0aW9ucyApICk7XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmlmcmFtZScsIHRoaXMuaWZyYW1lQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjb250ZW50OmRlYWN0aXZhdGU6aWZyYW1lJywgdGhpcy5pZnJhbWVDb250ZW50Q2xlYW51cCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdtZW51OnJlbmRlcjpkZWZhdWx0JywgdGhpcy5pZnJhbWVNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ29wZW4nLCB0aGlzLmhpamFja1RoaWNrYm94LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2Nsb3NlJywgdGhpcy5yZXN0b3JlVGhpY2tib3gsIHRoaXMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRlbnRcblx0ICogQHRoaXMgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cblx0ICovXG5cdGlmcmFtZUNvbnRlbnQ6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdHRoaXMuJGVsLmFkZENsYXNzKCdoaWRlLXRvb2xiYXInKTtcblx0XHRjb250ZW50LnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5JZnJhbWUoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdH0pO1xuXHR9LFxuXG5cdGlmcmFtZUNvbnRlbnRDbGVhbnVwOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcygnaGlkZS10b29sYmFyJyk7XG5cdH0sXG5cblx0aWZyYW1lTWVudTogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIHZpZXdzID0ge307XG5cblx0XHRpZiAoICEgdmlldyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRfLmVhY2goIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MudGFicywgZnVuY3Rpb24oIHRpdGxlLCBpZCApIHtcblx0XHRcdHZpZXdzWyAnaWZyYW1lOicgKyBpZCBdID0ge1xuXHRcdFx0XHR0ZXh0OiB0aGlzLnN0YXRlKCAnaWZyYW1lOicgKyBpZCApLmdldCgndGl0bGUnKSxcblx0XHRcdFx0cHJpb3JpdHk6IDIwMFxuXHRcdFx0fTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHR2aWV3LnNldCggdmlld3MgKTtcblx0fSxcblxuXHRoaWphY2tUaGlja2JveDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZyYW1lID0gdGhpcztcblxuXHRcdGlmICggISB3aW5kb3cudGJfcmVtb3ZlIHx8IHRoaXMuX3RiX3JlbW92ZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl90Yl9yZW1vdmUgPSB3aW5kb3cudGJfcmVtb3ZlO1xuXHRcdHdpbmRvdy50Yl9yZW1vdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRmcmFtZS5yZXNldCgpO1xuXHRcdFx0ZnJhbWUuc2V0U3RhdGUoIGZyYW1lLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdGZyYW1lLl90Yl9yZW1vdmUuY2FsbCggd2luZG93ICk7XG5cdFx0fTtcblx0fSxcblxuXHRyZXN0b3JlVGhpY2tib3g6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggISB0aGlzLl90Yl9yZW1vdmUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0d2luZG93LnRiX3JlbW92ZSA9IHRoaXMuX3RiX3JlbW92ZTtcblx0XHRkZWxldGUgdGhpcy5fdGJfcmVtb3ZlO1xuXHR9XG59KTtcblxuLy8gTWFwIHNvbWUgb2YgdGhlIG1vZGFsJ3MgbWV0aG9kcyB0byB0aGUgZnJhbWUuXG5fLmVhY2goWydvcGVuJywnY2xvc2UnLCdhdHRhY2gnLCdkZXRhY2gnLCdlc2NhcGUnXSwgZnVuY3Rpb24oIG1ldGhvZCApIHtcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRNZWRpYUZyYW1lLnByb3RvdHlwZVsgbWV0aG9kIF0gPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMubW9kYWwgKSB7XG5cdFx0XHR0aGlzLm1vZGFsWyBtZXRob2QgXS5hcHBseSggdGhpcy5tb2RhbCwgYXJndW1lbnRzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVkaWFGcmFtZTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZW51SXRlbVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgJCA9IGpRdWVyeSxcblx0TWVudUl0ZW07XG5cbk1lbnVJdGVtID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdhJyxcblx0Y2xhc3NOYW1lOiAnbWVkaWEtbWVudS1pdGVtJyxcblxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0aHJlZjogJyMnXG5cdH0sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrJzogJ19jbGljaydcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0X2NsaWNrOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGNsaWNrT3ZlcnJpZGUgPSB0aGlzLm9wdGlvbnMuY2xpY2s7XG5cblx0XHRpZiAoIGV2ZW50ICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblx0XHRpZiAoIGNsaWNrT3ZlcnJpZGUgKSB7XG5cdFx0XHRjbGlja092ZXJyaWRlLmNhbGwoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jbGljaygpO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gc2VsZWN0aW5nIGEgdGFiIGFsb25nIHRoZSBsZWZ0IHNpZGUsXG5cdFx0Ly8gZm9jdXMgc2hvdWxkIGJlIHRyYW5zZmVycmVkIGludG8gdGhlIG1haW4gcGFuZWxcblx0XHRpZiAoICEgd3AubWVkaWEuaXNUb3VjaERldmljZSApIHtcblx0XHRcdCQoJy5tZWRpYS1mcmFtZS1jb250ZW50IGlucHV0JykuZmlyc3QoKS5mb2N1cygpO1xuXHRcdH1cblx0fSxcblxuXHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5vcHRpb25zLnN0YXRlO1xuXG5cdFx0aWYgKCBzdGF0ZSApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSggc3RhdGUgKTtcblx0XHRcdHRoaXMudmlld3MucGFyZW50LiRlbC5yZW1vdmVDbGFzcyggJ3Zpc2libGUnICk7IC8vIFRPRE86IG9yIGhpZGUgb24gYW55IGNsaWNrLCBzZWUgYmVsb3dcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5NZW51SXRlbX0gcmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoIG9wdGlvbnMudGV4dCApIHtcblx0XHRcdHRoaXMuJGVsLnRleHQoIG9wdGlvbnMudGV4dCApO1xuXHRcdH0gZWxzZSBpZiAoIG9wdGlvbnMuaHRtbCApIHtcblx0XHRcdHRoaXMuJGVsLmh0bWwoIG9wdGlvbnMuaHRtbCApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBNZW51SXRlbTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZW51XG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIE1lbnVJdGVtID0gd3AubWVkaWEudmlldy5NZW51SXRlbSxcblx0UHJpb3JpdHlMaXN0ID0gd3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3QsXG5cdE1lbnU7XG5cbk1lbnUgPSBQcmlvcml0eUxpc3QuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAnbWVkaWEtbWVudScsXG5cdHByb3BlcnR5OiAgJ3N0YXRlJyxcblx0SXRlbVZpZXc6ICBNZW51SXRlbSxcblx0cmVnaW9uOiAgICAnbWVudScsXG5cblx0LyogVE9ETzogYWx0ZXJuYXRpdmVseSBoaWRlIG9uIGFueSBjbGljayBhbnl3aGVyZVxuXHRldmVudHM6IHtcblx0XHQnY2xpY2snOiAnY2xpY2snXG5cdH0sXG5cblx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAndmlzaWJsZScgKTtcblx0fSxcblx0Ki9cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fVxuXHQgKi9cblx0dG9WaWV3OiBmdW5jdGlvbiggb3B0aW9ucywgaWQgKSB7XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0b3B0aW9uc1sgdGhpcy5wcm9wZXJ0eSBdID0gb3B0aW9uc1sgdGhpcy5wcm9wZXJ0eSBdIHx8IGlkO1xuXHRcdHJldHVybiBuZXcgdGhpcy5JdGVtVmlldyggb3B0aW9ucyApLnJlbmRlcigpO1xuXHR9LFxuXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHQvKipcblx0XHQgKiBjYWxsICdyZWFkeScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFByaW9yaXR5TGlzdC5wcm90b3R5cGUucmVhZHkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMudmlzaWJpbGl0eSgpO1xuXHR9LFxuXG5cdHNldDogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnc2V0JyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0UHJpb3JpdHlMaXN0LnByb3RvdHlwZS5zZXQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMudmlzaWJpbGl0eSgpO1xuXHR9LFxuXG5cdHVuc2V0OiBmdW5jdGlvbigpIHtcblx0XHQvKipcblx0XHQgKiBjYWxsICd1bnNldCcgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFByaW9yaXR5TGlzdC5wcm90b3R5cGUudW5zZXQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMudmlzaWJpbGl0eSgpO1xuXHR9LFxuXG5cdHZpc2liaWxpdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciByZWdpb24gPSB0aGlzLnJlZ2lvbixcblx0XHRcdHZpZXcgPSB0aGlzLmNvbnRyb2xsZXJbIHJlZ2lvbiBdLmdldCgpLFxuXHRcdFx0dmlld3MgPSB0aGlzLnZpZXdzLmdldCgpLFxuXHRcdFx0aGlkZSA9ICEgdmlld3MgfHwgdmlld3MubGVuZ3RoIDwgMjtcblxuXHRcdGlmICggdGhpcyA9PT0gdmlldyApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci4kZWwudG9nZ2xlQ2xhc3MoICdoaWRlLScgKyByZWdpb24sIGhpZGUgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICovXG5cdHNlbGVjdDogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciB2aWV3ID0gdGhpcy5nZXQoIGlkICk7XG5cblx0XHRpZiAoICEgdmlldyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmRlc2VsZWN0KCk7XG5cdFx0dmlldy4kZWwuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXHR9LFxuXG5cdGRlc2VsZWN0OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcblx0fSxcblxuXHRoaWRlOiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLmdldCggaWQgKTtcblxuXHRcdGlmICggISB2aWV3ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZpZXcuJGVsLmFkZENsYXNzKCdoaWRkZW4nKTtcblx0fSxcblxuXHRzaG93OiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLmdldCggaWQgKTtcblxuXHRcdGlmICggISB2aWV3ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZpZXcuJGVsLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVudTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5Nb2RhbFxuICpcbiAqIEEgbW9kYWwgdmlldywgd2hpY2ggdGhlIG1lZGlhIG1vZGFsIHVzZXMgYXMgaXRzIGRlZmF1bHQgY29udGFpbmVyLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgJCA9IGpRdWVyeSxcblx0TW9kYWw7XG5cbk1vZGFsID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgJ2RpdicsXG5cdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSgnbWVkaWEtbW9kYWwnKSxcblxuXHRhdHRyaWJ1dGVzOiB7XG5cdFx0dGFiaW5kZXg6IDBcblx0fSxcblxuXHRldmVudHM6IHtcblx0XHQnY2xpY2sgLm1lZGlhLW1vZGFsLWJhY2tkcm9wLCAubWVkaWEtbW9kYWwtY2xvc2UnOiAnZXNjYXBlSGFuZGxlcicsXG5cdFx0J2tleWRvd24nOiAna2V5ZG93bidcblx0fSxcblxuXHRjbGlja2VkT3BlbmVyRWw6IG51bGwsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRjb250YWluZXI6IGRvY3VtZW50LmJvZHksXG5cdFx0XHR0aXRsZTogICAgICcnLFxuXHRcdFx0cHJvcGFnYXRlOiB0cnVlLFxuXHRcdFx0ZnJlZXplOiAgICB0cnVlXG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvY3VzTWFuYWdlciA9IG5ldyB3cC5tZWRpYS52aWV3LkZvY3VzTWFuYWdlcih7XG5cdFx0XHRlbDogdGhpcy5lbFxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGhpcy5vcHRpb25zLnRpdGxlXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRhdHRhY2g6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy52aWV3cy5hdHRhY2hlZCApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggISB0aGlzLnZpZXdzLnJlbmRlcmVkICkge1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5hcHBlbmRUbyggdGhpcy5vcHRpb25zLmNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTWFudWFsbHkgbWFyayB0aGUgdmlldyBhcyBhdHRhY2hlZCBhbmQgdHJpZ2dlciByZWFkeS5cblx0XHR0aGlzLnZpZXdzLmF0dGFjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLnZpZXdzLnJlYWR5KCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9wYWdhdGUoJ2F0dGFjaCcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5Nb2RhbH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdGRldGFjaDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLiRlbC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5kZXRhY2goKTtcblx0XHR0aGlzLnZpZXdzLmF0dGFjaGVkID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXMucHJvcGFnYXRlKCdkZXRhY2gnKTtcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRvcGVuOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGVsID0gdGhpcy4kZWwsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0bWNlRWRpdG9yO1xuXG5cdFx0aWYgKCAkZWwuaXMoJzp2aXNpYmxlJykgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrZWRPcGVuZXJFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cblx0XHRpZiAoICEgdGhpcy52aWV3cy5hdHRhY2hlZCApIHtcblx0XHRcdHRoaXMuYXR0YWNoKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGBmcmVlemVgIG9wdGlvbiBpcyBzZXQsIHJlY29yZCB0aGUgd2luZG93J3Mgc2Nyb2xsIHBvc2l0aW9uLlxuXHRcdGlmICggb3B0aW9ucy5mcmVlemUgKSB7XG5cdFx0XHR0aGlzLl9mcmVlemUgPSB7XG5cdFx0XHRcdHNjcm9sbFRvcDogJCggd2luZG93ICkuc2Nyb2xsVG9wKClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gRGlzYWJsZSBwYWdlIHNjcm9sbGluZy5cblx0XHQkKCAnYm9keScgKS5hZGRDbGFzcyggJ21vZGFsLW9wZW4nICk7XG5cblx0XHQkZWwuc2hvdygpO1xuXG5cdFx0Ly8gVHJ5IHRvIGNsb3NlIHRoZSBvbnNjcmVlbiBrZXlib2FyZFxuXHRcdGlmICggJ29udG91Y2hlbmQnIGluIGRvY3VtZW50ICkge1xuXHRcdFx0aWYgKCAoIG1jZUVkaXRvciA9IHdpbmRvdy50aW55bWNlICYmIHdpbmRvdy50aW55bWNlLmFjdGl2ZUVkaXRvciApICAmJiAhIG1jZUVkaXRvci5pc0hpZGRlbigpICYmIG1jZUVkaXRvci5pZnJhbWVFbGVtZW50ICkge1xuXHRcdFx0XHRtY2VFZGl0b3IuaWZyYW1lRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHRtY2VFZGl0b3IuaWZyYW1lRWxlbWVudC5ibHVyKCk7XG5cblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0bWNlRWRpdG9yLmlmcmFtZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0XHR9LCAxMDAgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLiRlbC5mb2N1cygpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvcGFnYXRlKCdvcGVuJyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1vZGFsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0Y2xvc2U6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBmcmVlemUgPSB0aGlzLl9mcmVlemU7XG5cblx0XHRpZiAoICEgdGhpcy52aWV3cy5hdHRhY2hlZCB8fCAhIHRoaXMuJGVsLmlzKCc6dmlzaWJsZScpICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gRW5hYmxlIHBhZ2Ugc2Nyb2xsaW5nLlxuXHRcdCQoICdib2R5JyApLnJlbW92ZUNsYXNzKCAnbW9kYWwtb3BlbicgKTtcblxuXHRcdC8vIEhpZGUgbW9kYWwgYW5kIHJlbW92ZSByZXN0cmljdGVkIG1lZGlhIG1vZGFsIHRhYiBmb2N1cyBvbmNlIGl0J3MgY2xvc2VkXG5cdFx0dGhpcy4kZWwuaGlkZSgpLnVuZGVsZWdhdGUoICdrZXlkb3duJyApO1xuXG5cdFx0Ly8gUHV0IGZvY3VzIGJhY2sgaW4gdXNlZnVsIGxvY2F0aW9uIG9uY2UgbW9kYWwgaXMgY2xvc2VkLlxuXHRcdGlmICggbnVsbCAhPT0gdGhpcy5jbGlja2VkT3BlbmVyRWwgKSB7XG5cdFx0XHR0aGlzLmNsaWNrZWRPcGVuZXJFbC5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkKCAnI3dwYm9keS1jb250ZW50JyApLmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5wcm9wYWdhdGUoJ2Nsb3NlJyk7XG5cblx0XHQvLyBJZiB0aGUgYGZyZWV6ZWAgb3B0aW9uIGlzIHNldCwgcmVzdG9yZSB0aGUgY29udGFpbmVyJ3Mgc2Nyb2xsIHBvc2l0aW9uLlxuXHRcdGlmICggZnJlZXplICkge1xuXHRcdFx0JCggd2luZG93ICkuc2Nyb2xsVG9wKCBmcmVlemUuc2Nyb2xsVG9wICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zICYmIG9wdGlvbnMuZXNjYXBlICkge1xuXHRcdFx0dGhpcy5wcm9wYWdhdGUoJ2VzY2FwZScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRlc2NhcGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNsb3NlKHsgZXNjYXBlOiB0cnVlIH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRlc2NhcGVIYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR0aGlzLmVzY2FwZSgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29udGVudCBWaWV3cyB0byByZWdpc3RlciB0byAnLm1lZGlhLW1vZGFsLWNvbnRlbnQnXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1vZGFsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0Y29udGVudDogZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG5cdFx0dGhpcy52aWV3cy5zZXQoICcubWVkaWEtbW9kYWwtY29udGVudCcsIGNvbnRlbnQgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYSBtb2RhbCBldmVudCBhbmQgaWYgdGhlIGBwcm9wYWdhdGVgIG9wdGlvbiBpcyBzZXQsXG5cdCAqIGZvcndhcmRzIGV2ZW50cyB0byB0aGUgbW9kYWwncyBjb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRwcm9wYWdhdGU6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHR0aGlzLnRyaWdnZXIoIGlkICk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5wcm9wYWdhdGUgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlciggaWQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0a2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdC8vIENsb3NlIHRoZSBtb2RhbCB3aGVuIGVzY2FwZSBpcyBwcmVzc2VkLlxuXHRcdGlmICggMjcgPT09IGV2ZW50LndoaWNoICYmIHRoaXMuJGVsLmlzKCc6dmlzaWJsZScpICkge1xuXHRcdFx0dGhpcy5lc2NhcGUoKTtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTW9kYWw7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0XG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBQcmlvcml0eUxpc3QgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5fdmlld3MgPSB7fTtcblxuXHRcdHRoaXMuc2V0KCBfLmV4dGVuZCgge30sIHRoaXMuX3ZpZXdzLCB0aGlzLm9wdGlvbnMudmlld3MgKSwgeyBzaWxlbnQ6IHRydWUgfSk7XG5cdFx0ZGVsZXRlIHRoaXMub3B0aW9ucy52aWV3cztcblxuXHRcdGlmICggISB0aGlzLm9wdGlvbnMuc2lsZW50ICkge1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5WaWV3fE9iamVjdH0gdmlld1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3R9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRzZXQ6IGZ1bmN0aW9uKCBpZCwgdmlldywgb3B0aW9ucyApIHtcblx0XHR2YXIgcHJpb3JpdHksIHZpZXdzLCBpbmRleDtcblxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0Ly8gQWNjZXB0IGFuIG9iamVjdCB3aXRoIGFuIGBpZGAgOiBgdmlld2AgbWFwcGluZy5cblx0XHRpZiAoIF8uaXNPYmplY3QoIGlkICkgKSB7XG5cdFx0XHRfLmVhY2goIGlkLCBmdW5jdGlvbiggdmlldywgaWQgKSB7XG5cdFx0XHRcdHRoaXMuc2V0KCBpZCwgdmlldyApO1xuXHRcdFx0fSwgdGhpcyApO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCAhICh2aWV3IGluc3RhbmNlb2YgQmFja2JvbmUuVmlldykgKSB7XG5cdFx0XHR2aWV3ID0gdGhpcy50b1ZpZXcoIHZpZXcsIGlkLCBvcHRpb25zICk7XG5cdFx0fVxuXHRcdHZpZXcuY29udHJvbGxlciA9IHZpZXcuY29udHJvbGxlciB8fCB0aGlzLmNvbnRyb2xsZXI7XG5cblx0XHR0aGlzLnVuc2V0KCBpZCApO1xuXG5cdFx0cHJpb3JpdHkgPSB2aWV3Lm9wdGlvbnMucHJpb3JpdHkgfHwgMTA7XG5cdFx0dmlld3MgPSB0aGlzLnZpZXdzLmdldCgpIHx8IFtdO1xuXG5cdFx0Xy5maW5kKCB2aWV3cywgZnVuY3Rpb24oIGV4aXN0aW5nLCBpICkge1xuXHRcdFx0aWYgKCBleGlzdGluZy5vcHRpb25zLnByaW9yaXR5ID4gcHJpb3JpdHkgKSB7XG5cdFx0XHRcdGluZGV4ID0gaTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLl92aWV3c1sgaWQgXSA9IHZpZXc7XG5cdFx0dGhpcy52aWV3cy5hZGQoIHZpZXcsIHtcblx0XHRcdGF0OiBfLmlzTnVtYmVyKCBpbmRleCApID8gaW5kZXggOiB2aWV3cy5sZW5ndGggfHwgMFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLlZpZXd9XG5cdCAqL1xuXHRnZXQ6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld3NbIGlkIF07XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0fVxuXHQgKi9cblx0dW5zZXQ6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHR2YXIgdmlldyA9IHRoaXMuZ2V0KCBpZCApO1xuXG5cdFx0aWYgKCB2aWV3ICkge1xuXHRcdFx0dmlldy5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRkZWxldGUgdGhpcy5fdmlld3NbIGlkIF07XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuVmlld31cblx0ICovXG5cdHRvVmlldzogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0cmV0dXJuIG5ldyB3cC5tZWRpYS5WaWV3KCBvcHRpb25zICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByaW9yaXR5TGlzdDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5Sb3V0ZXJJdGVtXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZW51SXRlbVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgUm91dGVySXRlbSA9IHdwLm1lZGlhLnZpZXcuTWVudUl0ZW0uZXh0ZW5kKHtcblx0LyoqXG5cdCAqIE9uIGNsaWNrIGhhbmRsZXIgdG8gYWN0aXZhdGUgdGhlIGNvbnRlbnQgcmVnaW9uJ3MgY29ycmVzcG9uZGluZyBtb2RlLlxuXHQgKi9cblx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjb250ZW50TW9kZSA9IHRoaXMub3B0aW9ucy5jb250ZW50TW9kZTtcblx0XHRpZiAoIGNvbnRlbnRNb2RlICkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSggY29udGVudE1vZGUgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJvdXRlckl0ZW07XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuUm91dGVyXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZW51XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIE1lbnUgPSB3cC5tZWRpYS52aWV3Lk1lbnUsXG5cdFJvdXRlcjtcblxuUm91dGVyID0gTWVudS5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICdtZWRpYS1yb3V0ZXInLFxuXHRwcm9wZXJ0eTogICdjb250ZW50TW9kZScsXG5cdEl0ZW1WaWV3OiAgd3AubWVkaWEudmlldy5Sb3V0ZXJJdGVtLFxuXHRyZWdpb246ICAgICdyb3V0ZXInLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ2NvbnRlbnQ6cmVuZGVyJywgdGhpcy51cGRhdGUsIHRoaXMgKTtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdE1lbnUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdHVwZGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1vZGUgPSB0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCk7XG5cdFx0aWYgKCBtb2RlICkge1xuXHRcdFx0dGhpcy5zZWxlY3QoIG1vZGUgKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJvdXRlcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5TZWFyY2hcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFNlYXJjaDtcblxuU2VhcmNoID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdpbnB1dCcsXG5cdGNsYXNzTmFtZTogJ3NlYXJjaCcsXG5cdGlkOiAgICAgICAgJ21lZGlhLXNlYXJjaC1pbnB1dCcsXG5cblx0YXR0cmlidXRlczoge1xuXHRcdHR5cGU6ICAgICAgICAnc2VhcmNoJyxcblx0XHRwbGFjZWhvbGRlcjogbDEwbi5zZWFyY2hcblx0fSxcblxuXHRldmVudHM6IHtcblx0XHQnaW5wdXQnOiAgJ3NlYXJjaCcsXG5cdFx0J2tleXVwJzogICdzZWFyY2gnLFxuXHRcdCdjaGFuZ2UnOiAnc2VhcmNoJyxcblx0XHQnc2VhcmNoJzogJ3NlYXJjaCdcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuU2VhcmNofSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsLnZhbHVlID0gdGhpcy5tb2RlbC5lc2NhcGUoJ3NlYXJjaCcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHNlYXJjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggZXZlbnQudGFyZ2V0LnZhbHVlICkge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoICdzZWFyY2gnLCBldmVudC50YXJnZXQudmFsdWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tb2RlbC51bnNldCgnc2VhcmNoJyk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWFyY2g7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2VsZWN0aW9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRTZWxlY3Rpb247XG5cblNlbGVjdGlvbiA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAnbWVkaWEtc2VsZWN0aW9uJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnbWVkaWEtc2VsZWN0aW9uJyksXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIC5lZGl0LXNlbGVjdGlvbic6ICAnZWRpdCcsXG5cdFx0J2NsaWNrIC5jbGVhci1zZWxlY3Rpb24nOiAnY2xlYXInXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRlZGl0YWJsZTogIGZhbHNlLFxuXHRcdFx0Y2xlYXJhYmxlOiB0cnVlXG5cdFx0fSk7XG5cblx0XHQvKipcblx0XHQgKiBAbWVtYmVyIHt3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzLlNlbGVjdGlvbn1cblx0XHQgKi9cblx0XHR0aGlzLmF0dGFjaG1lbnRzID0gbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHMuU2VsZWN0aW9uKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdGNvbGxlY3Rpb246IHRoaXMuY29sbGVjdGlvbixcblx0XHRcdHNlbGVjdGlvbjogIHRoaXMuY29sbGVjdGlvbixcblx0XHRcdG1vZGVsOiAgICAgIG5ldyBCYWNrYm9uZS5Nb2RlbCgpXG5cdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdzLnNldCggJy5zZWxlY3Rpb24tdmlldycsIHRoaXMuYXR0YWNobWVudHMgKTtcblx0XHR0aGlzLmNvbGxlY3Rpb24ub24oICdhZGQgcmVtb3ZlIHJlc2V0JywgdGhpcy5yZWZyZXNoLCB0aGlzICk7XG5cdFx0dGhpcy5jb250cm9sbGVyLm9uKCAnY29udGVudDphY3RpdmF0ZScsIHRoaXMucmVmcmVzaCwgdGhpcyApO1xuXHR9LFxuXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnJlZnJlc2goKTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHQvLyBJZiB0aGUgc2VsZWN0aW9uIGhhc24ndCBiZWVuIHJlbmRlcmVkLCBiYWlsLlxuXHRcdGlmICggISB0aGlzLiRlbC5jaGlsZHJlbigpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbixcblx0XHRcdGVkaXRpbmcgPSAnZWRpdC1zZWxlY3Rpb24nID09PSB0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCk7XG5cblx0XHQvLyBJZiBub3RoaW5nIGlzIHNlbGVjdGVkLCBkaXNwbGF5IG5vdGhpbmcuXG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICdlbXB0eScsICEgY29sbGVjdGlvbi5sZW5ndGggKTtcblx0XHR0aGlzLiRlbC50b2dnbGVDbGFzcyggJ29uZScsIDEgPT09IGNvbGxlY3Rpb24ubGVuZ3RoICk7XG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICdlZGl0aW5nJywgZWRpdGluZyApO1xuXG5cdFx0dGhpcy4kKCcuY291bnQnKS50ZXh0KCBsMTBuLnNlbGVjdGVkLnJlcGxhY2UoJyVkJywgY29sbGVjdGlvbi5sZW5ndGgpICk7XG5cdH0sXG5cblx0ZWRpdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZWRpdGFibGUgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZWRpdGFibGUuY2FsbCggdGhpcywgdGhpcy5jb2xsZWN0aW9uICk7XG5cdFx0fVxuXHR9LFxuXG5cdGNsZWFyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb24ucmVzZXQoKTtcblxuXHRcdC8vIEtlZXAgZm9jdXMgaW5zaWRlIG1lZGlhIG1vZGFsXG5cdFx0Ly8gYWZ0ZXIgY2xlYXIgbGluayBpcyBzZWxlY3RlZFxuXHRcdHRoaXMuY29udHJvbGxlci5tb2RhbC5mb2N1c01hbmFnZXIuZm9jdXMoKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0aW9uO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0JCA9IEJhY2tib25lLiQsXG5cdFNldHRpbmdzO1xuXG5TZXR0aW5ncyA9IFZpZXcuZXh0ZW5kKHtcblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIGJ1dHRvbic6ICAgICd1cGRhdGVIYW5kbGVyJyxcblx0XHQnY2hhbmdlIGlucHV0JzogICAgJ3VwZGF0ZUhhbmRsZXInLFxuXHRcdCdjaGFuZ2Ugc2VsZWN0JzogICAndXBkYXRlSGFuZGxlcicsXG5cdFx0J2NoYW5nZSB0ZXh0YXJlYSc6ICd1cGRhdGVIYW5kbGVyJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW9kZWwgPSB0aGlzLm1vZGVsIHx8IG5ldyBCYWNrYm9uZS5Nb2RlbCgpO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLnVwZGF0ZUNoYW5nZXMgKTtcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gXy5kZWZhdWx0cyh7XG5cdFx0XHRtb2RlbDogdGhpcy5tb2RlbC50b0pTT04oKVxuXHRcdH0sIHRoaXMub3B0aW9ucyApO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuU2V0dGluZ3N9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0Ly8gU2VsZWN0IHRoZSBjb3JyZWN0IHZhbHVlcy5cblx0XHRfKCB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMgKS5jaGFpbigpLmtleXMoKS5lYWNoKCB0aGlzLnVwZGF0ZSwgdGhpcyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKi9cblx0dXBkYXRlOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMubW9kZWwuZ2V0KCBrZXkgKSxcblx0XHRcdCRzZXR0aW5nID0gdGhpcy4kKCdbZGF0YS1zZXR0aW5nPVwiJyArIGtleSArICdcIl0nKSxcblx0XHRcdCRidXR0b25zLCAkdmFsdWU7XG5cblx0XHQvLyBCYWlsIGlmIHdlIGRpZG4ndCBmaW5kIGEgbWF0Y2hpbmcgc2V0dGluZy5cblx0XHRpZiAoICEgJHNldHRpbmcubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEF0dGVtcHQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgc2V0dGluZyBpcyByZW5kZXJlZCBhbmQgdXBkYXRlXG5cdFx0Ly8gdGhlIHNlbGVjdGVkIHZhbHVlLlxuXG5cdFx0Ly8gSGFuZGxlIGRyb3Bkb3ducy5cblx0XHRpZiAoICRzZXR0aW5nLmlzKCdzZWxlY3QnKSApIHtcblx0XHRcdCR2YWx1ZSA9ICRzZXR0aW5nLmZpbmQoJ1t2YWx1ZT1cIicgKyB2YWx1ZSArICdcIl0nKTtcblxuXHRcdFx0aWYgKCAkdmFsdWUubGVuZ3RoICkge1xuXHRcdFx0XHQkc2V0dGluZy5maW5kKCdvcHRpb24nKS5wcm9wKCAnc2VsZWN0ZWQnLCBmYWxzZSApO1xuXHRcdFx0XHQkdmFsdWUucHJvcCggJ3NlbGVjdGVkJywgdHJ1ZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSWYgd2UgY2FuJ3QgZmluZCB0aGUgZGVzaXJlZCB2YWx1ZSwgcmVjb3JkIHdoYXQgKmlzKiBzZWxlY3RlZC5cblx0XHRcdFx0dGhpcy5tb2RlbC5zZXQoIGtleSwgJHNldHRpbmcuZmluZCgnOnNlbGVjdGVkJykudmFsKCkgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhhbmRsZSBidXR0b24gZ3JvdXBzLlxuXHRcdH0gZWxzZSBpZiAoICRzZXR0aW5nLmhhc0NsYXNzKCdidXR0b24tZ3JvdXAnKSApIHtcblx0XHRcdCRidXR0b25zID0gJHNldHRpbmcuZmluZCgnYnV0dG9uJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuXHRcdFx0JGJ1dHRvbnMuZmlsdGVyKCAnW3ZhbHVlPVwiJyArIHZhbHVlICsgJ1wiXScgKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cblx0XHQvLyBIYW5kbGUgdGV4dCBpbnB1dHMgYW5kIHRleHRhcmVhcy5cblx0XHR9IGVsc2UgaWYgKCAkc2V0dGluZy5pcygnaW5wdXRbdHlwZT1cInRleHRcIl0sIHRleHRhcmVhJykgKSB7XG5cdFx0XHRpZiAoICEgJHNldHRpbmcuaXMoJzpmb2N1cycpICkge1xuXHRcdFx0XHQkc2V0dGluZy52YWwoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0Ly8gSGFuZGxlIGNoZWNrYm94ZXMuXG5cdFx0fSBlbHNlIGlmICggJHNldHRpbmcuaXMoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpICkge1xuXHRcdFx0JHNldHRpbmcucHJvcCggJ2NoZWNrZWQnLCAhISB2YWx1ZSAmJiAnZmFsc2UnICE9PSB2YWx1ZSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dXBkYXRlSGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciAkc2V0dGluZyA9ICQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoJ1tkYXRhLXNldHRpbmddJyksXG5cdFx0XHR2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZSxcblx0XHRcdHVzZXJTZXR0aW5nO1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmICggISAkc2V0dGluZy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBjaGVja2JveGVzLlxuXHRcdGlmICggJHNldHRpbmcuaXMoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpICkge1xuXHRcdFx0dmFsdWUgPSAkc2V0dGluZ1swXS5jaGVja2VkO1xuXHRcdH1cblxuXHRcdC8vIFVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBzZXR0aW5nLlxuXHRcdHRoaXMubW9kZWwuc2V0KCAkc2V0dGluZy5kYXRhKCdzZXR0aW5nJyksIHZhbHVlICk7XG5cblx0XHQvLyBJZiB0aGUgc2V0dGluZyBoYXMgYSBjb3JyZXNwb25kaW5nIHVzZXIgc2V0dGluZyxcblx0XHQvLyB1cGRhdGUgdGhhdCBhcyB3ZWxsLlxuXHRcdGlmICggdXNlclNldHRpbmcgPSAkc2V0dGluZy5kYXRhKCd1c2VyU2V0dGluZycpICkge1xuXHRcdFx0d2luZG93LnNldFVzZXJTZXR0aW5nKCB1c2VyU2V0dGluZywgdmFsdWUgKTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlQ2hhbmdlczogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdGlmICggbW9kZWwuaGFzQ2hhbmdlZCgpICkge1xuXHRcdFx0XyggbW9kZWwuY2hhbmdlZCApLmNoYWluKCkua2V5cygpLmVhY2goIHRoaXMudXBkYXRlLCB0aGlzICk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXR0aW5ncztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFNldHRpbmdzID0gd3AubWVkaWEudmlldy5TZXR0aW5ncyxcblx0QXR0YWNobWVudERpc3BsYXk7XG5cbkF0dGFjaG1lbnREaXNwbGF5ID0gU2V0dGluZ3MuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnYXR0YWNobWVudC1kaXNwbGF5LXNldHRpbmdzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnYXR0YWNobWVudC1kaXNwbGF5LXNldHRpbmdzJyksXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGF0dGFjaG1lbnQgPSB0aGlzLm9wdGlvbnMuYXR0YWNobWVudDtcblxuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0dXNlclNldHRpbmdzOiBmYWxzZVxuXHRcdH0pO1xuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0U2V0dGluZ3MucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6bGluaycsIHRoaXMudXBkYXRlTGlua1RvICk7XG5cblx0XHRpZiAoIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHRhdHRhY2htZW50Lm9uKCAnY2hhbmdlOnVwbG9hZGluZycsIHRoaXMucmVuZGVyLCB0aGlzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhdHRhY2htZW50ID0gdGhpcy5vcHRpb25zLmF0dGFjaG1lbnQ7XG5cdFx0aWYgKCBhdHRhY2htZW50ICkge1xuXHRcdFx0YXR0YWNobWVudC5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFNldHRpbmdzLnByb3RvdHlwZS5kaXNwb3NlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnREaXNwbGF5fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXR0YWNobWVudCA9IHRoaXMub3B0aW9ucy5hdHRhY2htZW50O1xuXHRcdGlmICggYXR0YWNobWVudCApIHtcblx0XHRcdF8uZXh0ZW5kKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdFx0c2l6ZXM6IGF0dGFjaG1lbnQuZ2V0KCdzaXplcycpLFxuXHRcdFx0XHR0eXBlOiAgYXR0YWNobWVudC5nZXQoJ3R5cGUnKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ3JlbmRlcicgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFNldHRpbmdzLnByb3RvdHlwZS5yZW5kZXIuY2FsbCggdGhpcyApO1xuXHRcdHRoaXMudXBkYXRlTGlua1RvKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dXBkYXRlTGlua1RvOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGlua1RvID0gdGhpcy5tb2RlbC5nZXQoJ2xpbmsnKSxcblx0XHRcdCRpbnB1dCA9IHRoaXMuJCgnLmxpbmstdG8tY3VzdG9tJyksXG5cdFx0XHRhdHRhY2htZW50ID0gdGhpcy5vcHRpb25zLmF0dGFjaG1lbnQ7XG5cblx0XHRpZiAoICdub25lJyA9PT0gbGlua1RvIHx8ICdlbWJlZCcgPT09IGxpbmtUbyB8fCAoICEgYXR0YWNobWVudCAmJiAnY3VzdG9tJyAhPT0gbGlua1RvICkgKSB7XG5cdFx0XHQkaW5wdXQuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBhdHRhY2htZW50ICkge1xuXHRcdFx0aWYgKCAncG9zdCcgPT09IGxpbmtUbyApIHtcblx0XHRcdFx0JGlucHV0LnZhbCggYXR0YWNobWVudC5nZXQoJ2xpbmsnKSApO1xuXHRcdFx0fSBlbHNlIGlmICggJ2ZpbGUnID09PSBsaW5rVG8gKSB7XG5cdFx0XHRcdCRpbnB1dC52YWwoIGF0dGFjaG1lbnQuZ2V0KCd1cmwnKSApO1xuXHRcdFx0fSBlbHNlIGlmICggISB0aGlzLm1vZGVsLmdldCgnbGlua1VybCcpICkge1xuXHRcdFx0XHQkaW5wdXQudmFsKCdodHRwOi8vJyk7XG5cdFx0XHR9XG5cblx0XHRcdCRpbnB1dC5wcm9wKCAncmVhZG9ubHknLCAnY3VzdG9tJyAhPT0gbGlua1RvICk7XG5cdFx0fVxuXG5cdFx0JGlucHV0LnJlbW92ZUNsYXNzKCAnaGlkZGVuJyApO1xuXG5cdFx0Ly8gSWYgdGhlIGlucHV0IGlzIHZpc2libGUsIGZvY3VzIGFuZCBzZWxlY3QgaXRzIGNvbnRlbnRzLlxuXHRcdGlmICggISB3cC5tZWRpYS5pc1RvdWNoRGV2aWNlICYmICRpbnB1dC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdCRpbnB1dC5mb2N1cygpWzBdLnNlbGVjdCgpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXR0YWNobWVudERpc3BsYXk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuR2FsbGVyeVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEdhbGxlcnkgPSB3cC5tZWRpYS52aWV3LlNldHRpbmdzLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2NvbGxlY3Rpb24tc2V0dGluZ3MgZ2FsbGVyeS1zZXR0aW5ncycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ2dhbGxlcnktc2V0dGluZ3MnKVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gR2FsbGVyeTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5TZXR0aW5ncy5QbGF5bGlzdFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFBsYXlsaXN0ID0gd3AubWVkaWEudmlldy5TZXR0aW5ncy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdjb2xsZWN0aW9uLXNldHRpbmdzIHBsYXlsaXN0LXNldHRpbmdzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgncGxheWxpc3Qtc2V0dGluZ3MnKVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUGxheWxpc3Q7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2lkZWJhclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBTaWRlYmFyID0gd3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3QuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnbWVkaWEtc2lkZWJhcidcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZGViYXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2l0ZUljb25Dcm9wcGVyXG4gKlxuICogVXNlcyB0aGUgaW1nQXJlYVNlbGVjdCBwbHVnaW4gdG8gYWxsb3cgYSB1c2VyIHRvIGNyb3AgYSBTaXRlIEljb24uXG4gKlxuICogVGFrZXMgaW1nQXJlYVNlbGVjdCBvcHRpb25zIGZyb21cbiAqIHdwLmN1c3RvbWl6ZS5TaXRlSWNvbkNvbnRyb2wuY2FsY3VsYXRlSW1hZ2VTZWxlY3RPcHRpb25zLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQ3JvcHBlclxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLnZpZXcsXG5cdFNpdGVJY29uQ3JvcHBlcjtcblxuU2l0ZUljb25Dcm9wcGVyID0gVmlldy5Dcm9wcGVyLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2Nyb3AtY29udGVudCBzaXRlLWljb24nLFxuXG5cdHJlYWR5OiBmdW5jdGlvbiAoKSB7XG5cdFx0Vmlldy5Dcm9wcGVyLnByb3RvdHlwZS5yZWFkeS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLiQoICcuY3JvcC1pbWFnZScgKS5vbiggJ2xvYWQnLCBfLmJpbmQoIHRoaXMuYWRkU2lkZWJhciwgdGhpcyApICk7XG5cdH0sXG5cblx0YWRkU2lkZWJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zaWRlYmFyID0gbmV3IHdwLm1lZGlhLnZpZXcuU2lkZWJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXJcblx0XHR9KTtcblxuXHRcdHRoaXMuc2lkZWJhci5zZXQoICdwcmV2aWV3JywgbmV3IHdwLm1lZGlhLnZpZXcuU2l0ZUljb25QcmV2aWV3KHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdGF0dGFjaG1lbnQ6IHRoaXMub3B0aW9ucy5hdHRhY2htZW50XG5cdFx0fSkgKTtcblxuXHRcdHRoaXMuY29udHJvbGxlci5jcm9wcGVyVmlldy52aWV3cy5hZGQoIHRoaXMuc2lkZWJhciApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlSWNvbkNyb3BwZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2l0ZUljb25QcmV2aWV3XG4gKlxuICogU2hvd3MgYSBwcmV2aWV3IG9mIHRoZSBTaXRlIEljb24gYXMgYSBmYXZpY29uIGFuZCBhcHAgaWNvbiB3aGlsZSBjcm9wcGluZy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHQkID0galF1ZXJ5LFxuXHRTaXRlSWNvblByZXZpZXc7XG5cblNpdGVJY29uUHJldmlldyA9IFZpZXcuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnc2l0ZS1pY29uLXByZXZpZXcnLFxuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoICdzaXRlLWljb24tcHJldmlldycgKSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb250cm9sbGVyLmltZ1NlbGVjdC5zZXRPcHRpb25zKHtcblx0XHRcdG9uSW5pdDogdGhpcy51cGRhdGVQcmV2aWV3LFxuXHRcdFx0b25TZWxlY3RDaGFuZ2U6IHRoaXMudXBkYXRlUHJldmlld1xuXHRcdH0pO1xuXHR9LFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR1cmw6IHRoaXMub3B0aW9ucy5hdHRhY2htZW50LmdldCggJ3VybCcgKVxuXHRcdH07XG5cdH0sXG5cblx0dXBkYXRlUHJldmlldzogZnVuY3Rpb24oIGltZywgY29vcmRzICkge1xuXHRcdHZhciByeCA9IDY0IC8gY29vcmRzLndpZHRoLFxuXHRcdFx0cnkgPSA2NCAvIGNvb3Jkcy5oZWlnaHQsXG5cdFx0XHRwcmV2aWV3X3J4ID0gMTYgLyBjb29yZHMud2lkdGgsXG5cdFx0XHRwcmV2aWV3X3J5ID0gMTYgLyBjb29yZHMuaGVpZ2h0O1xuXG5cdFx0JCggJyNwcmV2aWV3LWFwcC1pY29uJyApLmNzcyh7XG5cdFx0XHR3aWR0aDogTWF0aC5yb3VuZChyeCAqIHRoaXMuaW1hZ2VXaWR0aCApICsgJ3B4Jyxcblx0XHRcdGhlaWdodDogTWF0aC5yb3VuZChyeSAqIHRoaXMuaW1hZ2VIZWlnaHQgKSArICdweCcsXG5cdFx0XHRtYXJnaW5MZWZ0OiAnLScgKyBNYXRoLnJvdW5kKHJ4ICogY29vcmRzLngxKSArICdweCcsXG5cdFx0XHRtYXJnaW5Ub3A6ICctJyArIE1hdGgucm91bmQocnkgKiBjb29yZHMueTEpICsgJ3B4J1xuXHRcdH0pO1xuXG5cdFx0JCggJyNwcmV2aWV3LWZhdmljb24nICkuY3NzKHtcblx0XHRcdHdpZHRoOiBNYXRoLnJvdW5kKCBwcmV2aWV3X3J4ICogdGhpcy5pbWFnZVdpZHRoICkgKyAncHgnLFxuXHRcdFx0aGVpZ2h0OiBNYXRoLnJvdW5kKCBwcmV2aWV3X3J5ICogdGhpcy5pbWFnZUhlaWdodCApICsgJ3B4Jyxcblx0XHRcdG1hcmdpbkxlZnQ6ICctJyArIE1hdGgucm91bmQoIHByZXZpZXdfcnggKiBjb29yZHMueDEgKSArICdweCcsXG5cdFx0XHRtYXJnaW5Ub3A6ICctJyArIE1hdGguZmxvb3IoIHByZXZpZXdfcnkqIGNvb3Jkcy55MSApICsgJ3B4J1xuXHRcdH0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlSWNvblByZXZpZXc7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU3Bpbm5lclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgU3Bpbm5lciA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnc3BhbicsXG5cdGNsYXNzTmFtZTogJ3NwaW5uZXInLFxuXHRzcGlubmVyVGltZW91dDogZmFsc2UsXG5cdGRlbGF5OiA0MDAsXG5cblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHRoaXMuc3Bpbm5lclRpbWVvdXQgKSB7XG5cdFx0XHR0aGlzLnNwaW5uZXJUaW1lb3V0ID0gXy5kZWxheShmdW5jdGlvbiggJGVsICkge1xuXHRcdFx0XHQkZWwuYWRkQ2xhc3MoICdpcy1hY3RpdmUnICk7XG5cdFx0XHR9LCB0aGlzLmRlbGF5LCB0aGlzLiRlbCApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdHRoaXMuc3Bpbm5lclRpbWVvdXQgPSBjbGVhclRpbWVvdXQoIHRoaXMuc3Bpbm5lclRpbWVvdXQgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTcGlubmVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlRvb2xiYXJcbiAqXG4gKiBBIHRvb2xiYXIgd2hpY2ggY29uc2lzdHMgb2YgYSBwcmltYXJ5IGFuZCBhIHNlY29uZGFyeSBzZWN0aW9uLiBFYWNoIHNlY3Rpb25zXG4gKiBjYW4gYmUgZmlsbGVkIHdpdGggdmlld3MuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0VG9vbGJhcjtcblxuVG9vbGJhciA9IFZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAnbWVkaWEtdG9vbGJhcicsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5jb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiA9IHN0YXRlLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRsaWJyYXJ5ID0gdGhpcy5saWJyYXJ5ID0gc3RhdGUuZ2V0KCdsaWJyYXJ5Jyk7XG5cblx0XHR0aGlzLl92aWV3cyA9IHt9O1xuXG5cdFx0Ly8gVGhlIHRvb2xiYXIgaXMgY29tcG9zZWQgb2YgdHdvIGBQcmlvcml0eUxpc3RgIHZpZXdzLlxuXHRcdHRoaXMucHJpbWFyeSAgID0gbmV3IHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0KCk7XG5cdFx0dGhpcy5zZWNvbmRhcnkgPSBuZXcgd3AubWVkaWEudmlldy5Qcmlvcml0eUxpc3QoKTtcblx0XHR0aGlzLnByaW1hcnkuJGVsLmFkZENsYXNzKCdtZWRpYS10b29sYmFyLXByaW1hcnkgc2VhcmNoLWZvcm0nKTtcblx0XHR0aGlzLnNlY29uZGFyeS4kZWwuYWRkQ2xhc3MoJ21lZGlhLXRvb2xiYXItc2Vjb25kYXJ5Jyk7XG5cblx0XHR0aGlzLnZpZXdzLnNldChbIHRoaXMuc2Vjb25kYXJ5LCB0aGlzLnByaW1hcnkgXSk7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5pdGVtcyApIHtcblx0XHRcdHRoaXMuc2V0KCB0aGlzLm9wdGlvbnMuaXRlbXMsIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdH1cblxuXHRcdGlmICggISB0aGlzLm9wdGlvbnMuc2lsZW50ICkge1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdGlvbiApIHtcblx0XHRcdHNlbGVjdGlvbi5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnJlZnJlc2gsIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGxpYnJhcnkgKSB7XG5cdFx0XHRsaWJyYXJ5Lm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIHRoaXMucmVmcmVzaCwgdGhpcyApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlRvb2xiYXJ9IFJldHVybnMgaXRzZWYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5zZWxlY3Rpb24gKSB7XG5cdFx0XHR0aGlzLnNlbGVjdGlvbi5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGlicmFyeSApIHtcblx0XHRcdHRoaXMubGlicmFyeS5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdHJldHVybiBWaWV3LnByb3RvdHlwZS5kaXNwb3NlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcGFyYW0ge0JhY2tib25lLlZpZXd8T2JqZWN0fSB2aWV3XG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVG9vbGJhcn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHNldDogZnVuY3Rpb24oIGlkLCB2aWV3LCBvcHRpb25zICkge1xuXHRcdHZhciBsaXN0O1xuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0Ly8gQWNjZXB0IGFuIG9iamVjdCB3aXRoIGFuIGBpZGAgOiBgdmlld2AgbWFwcGluZy5cblx0XHRpZiAoIF8uaXNPYmplY3QoIGlkICkgKSB7XG5cdFx0XHRfLmVhY2goIGlkLCBmdW5jdGlvbiggdmlldywgaWQgKSB7XG5cdFx0XHRcdHRoaXMuc2V0KCBpZCwgdmlldywgeyBzaWxlbnQ6IHRydWUgfSk7XG5cdFx0XHR9LCB0aGlzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCAhICggdmlldyBpbnN0YW5jZW9mIEJhY2tib25lLlZpZXcgKSApIHtcblx0XHRcdFx0dmlldy5jbGFzc2VzID0gWyAnbWVkaWEtYnV0dG9uLScgKyBpZCBdLmNvbmNhdCggdmlldy5jbGFzc2VzIHx8IFtdICk7XG5cdFx0XHRcdHZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5CdXR0b24oIHZpZXcgKS5yZW5kZXIoKTtcblx0XHRcdH1cblxuXHRcdFx0dmlldy5jb250cm9sbGVyID0gdmlldy5jb250cm9sbGVyIHx8IHRoaXMuY29udHJvbGxlcjtcblxuXHRcdFx0dGhpcy5fdmlld3NbIGlkIF0gPSB2aWV3O1xuXG5cdFx0XHRsaXN0ID0gdmlldy5vcHRpb25zLnByaW9yaXR5IDwgMCA/ICdzZWNvbmRhcnknIDogJ3ByaW1hcnknO1xuXHRcdFx0dGhpc1sgbGlzdCBdLnNldCggaWQsIHZpZXcsIG9wdGlvbnMgKTtcblx0XHR9XG5cblx0XHRpZiAoICEgb3B0aW9ucy5zaWxlbnQgKSB7XG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5CdXR0b259XG5cdCAqL1xuXHRnZXQ6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlld3NbIGlkIF07XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVG9vbGJhcn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHVuc2V0OiBmdW5jdGlvbiggaWQsIG9wdGlvbnMgKSB7XG5cdFx0ZGVsZXRlIHRoaXMuX3ZpZXdzWyBpZCBdO1xuXHRcdHRoaXMucHJpbWFyeS51bnNldCggaWQsIG9wdGlvbnMgKTtcblx0XHR0aGlzLnNlY29uZGFyeS51bnNldCggaWQsIG9wdGlvbnMgKTtcblxuXHRcdGlmICggISBvcHRpb25zIHx8ICEgb3B0aW9ucy5zaWxlbnQgKSB7XG5cdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN0YXRlID0gdGhpcy5jb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRsaWJyYXJ5ID0gc3RhdGUuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRzZWxlY3Rpb24gPSBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpO1xuXG5cdFx0Xy5lYWNoKCB0aGlzLl92aWV3cywgZnVuY3Rpb24oIGJ1dHRvbiApIHtcblx0XHRcdGlmICggISBidXR0b24ubW9kZWwgfHwgISBidXR0b24ub3B0aW9ucyB8fCAhIGJ1dHRvbi5vcHRpb25zLnJlcXVpcmVzICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciByZXF1aXJlcyA9IGJ1dHRvbi5vcHRpb25zLnJlcXVpcmVzLFxuXHRcdFx0XHRkaXNhYmxlZCA9IGZhbHNlO1xuXG5cdFx0XHQvLyBQcmV2ZW50IGluc2VydGlvbiBvZiBhdHRhY2htZW50cyBpZiBhbnkgb2YgdGhlbSBhcmUgc3RpbGwgdXBsb2FkaW5nXG5cdFx0XHRkaXNhYmxlZCA9IF8uc29tZSggc2VsZWN0aW9uLm1vZGVscywgZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHRcdHJldHVybiBhdHRhY2htZW50LmdldCgndXBsb2FkaW5nJykgPT09IHRydWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCByZXF1aXJlcy5zZWxlY3Rpb24gJiYgc2VsZWN0aW9uICYmICEgc2VsZWN0aW9uLmxlbmd0aCApIHtcblx0XHRcdFx0ZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmICggcmVxdWlyZXMubGlicmFyeSAmJiBsaWJyYXJ5ICYmICEgbGlicmFyeS5sZW5ndGggKSB7XG5cdFx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGJ1dHRvbi5tb2RlbC5zZXQoICdkaXNhYmxlZCcsIGRpc2FibGVkICk7XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2xiYXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuVG9vbGJhci5FbWJlZFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuVG9vbGJhci5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlRvb2xiYXJcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFNlbGVjdCA9IHdwLm1lZGlhLnZpZXcuVG9vbGJhci5TZWxlY3QsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEVtYmVkO1xuXG5FbWJlZCA9IFNlbGVjdC5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHRleHQ6IGwxMG4uaW5zZXJ0SW50b1Bvc3QsXG5cdFx0XHRyZXF1aXJlczogZmFsc2Vcblx0XHR9KTtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdFNlbGVjdC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVybCA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLnByb3BzLmdldCgndXJsJyk7XG5cdFx0dGhpcy5nZXQoJ3NlbGVjdCcpLm1vZGVsLnNldCggJ2Rpc2FibGVkJywgISB1cmwgfHwgdXJsID09PSAnaHR0cDovLycgKTtcblx0XHQvKipcblx0XHQgKiBjYWxsICdyZWZyZXNoJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0U2VsZWN0LnByb3RvdHlwZS5yZWZyZXNoLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRW1iZWQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuVG9vbGJhci5TZWxlY3RcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlRvb2xiYXJcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFRvb2xiYXIgPSB3cC5tZWRpYS52aWV3LlRvb2xiYXIsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFNlbGVjdDtcblxuU2VsZWN0ID0gVG9vbGJhci5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuXHRcdF8uYmluZEFsbCggdGhpcywgJ2NsaWNrU2VsZWN0JyApO1xuXG5cdFx0Xy5kZWZhdWx0cyggb3B0aW9ucywge1xuXHRcdFx0ZXZlbnQ6ICdzZWxlY3QnLFxuXHRcdFx0c3RhdGU6IGZhbHNlLFxuXHRcdFx0cmVzZXQ6IHRydWUsXG5cdFx0XHRjbG9zZTogdHJ1ZSxcblx0XHRcdHRleHQ6ICBsMTBuLnNlbGVjdCxcblxuXHRcdFx0Ly8gRG9lcyB0aGUgYnV0dG9uIHJlbHkgb24gdGhlIHNlbGVjdGlvbj9cblx0XHRcdHJlcXVpcmVzOiB7XG5cdFx0XHRcdHNlbGVjdGlvbjogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0b3B0aW9ucy5pdGVtcyA9IF8uZGVmYXVsdHMoIG9wdGlvbnMuaXRlbXMgfHwge30sIHtcblx0XHRcdHNlbGVjdDoge1xuXHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHR0ZXh0OiAgICAgb3B0aW9ucy50ZXh0LFxuXHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdGNsaWNrOiAgICB0aGlzLmNsaWNrU2VsZWN0LFxuXHRcdFx0XHRyZXF1aXJlczogb3B0aW9ucy5yZXF1aXJlc1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0VG9vbGJhci5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0Y2xpY2tTZWxlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0Y29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcjtcblxuXHRcdGlmICggb3B0aW9ucy5jbG9zZSApIHtcblx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMuZXZlbnQgKSB7XG5cdFx0XHRjb250cm9sbGVyLnN0YXRlKCkudHJpZ2dlciggb3B0aW9ucy5ldmVudCApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy5zdGF0ZSApIHtcblx0XHRcdGNvbnRyb2xsZXIuc2V0U3RhdGUoIG9wdGlvbnMuc3RhdGUgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMucmVzZXQgKSB7XG5cdFx0XHRjb250cm9sbGVyLnJlc2V0KCk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Q7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBkcm9wem9uZSBvbiBXUCBlZGl0b3IgaW5zdGFuY2VzIChlbGVtZW50cyB3aXRoIC53cC1lZGl0b3Itd3JhcClcbiAqIGFuZCByZWxheXMgZHJhZyduJ2Ryb3BwZWQgZmlsZXMgdG8gYSBtZWRpYSB3b3JrZmxvdy5cbiAqXG4gKiB3cC5tZWRpYS52aWV3LkVkaXRvclVwbG9hZGVyXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0JCA9IGpRdWVyeSxcblx0RWRpdG9yVXBsb2FkZXI7XG5cbkVkaXRvclVwbG9hZGVyID0gVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICd1cGxvYWRlci1lZGl0b3InLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCAndXBsb2FkZXItZWRpdG9yJyApLFxuXG5cdGxvY2FsRHJhZzogZmFsc2UsXG5cdG92ZXJDb250YWluZXI6IGZhbHNlLFxuXHRvdmVyRHJvcHpvbmU6IGZhbHNlLFxuXHRkcmFnZ2luZ0ZpbGU6IG51bGwsXG5cblx0LyoqXG5cdCAqIEJpbmQgZHJhZyduJ2Ryb3AgZXZlbnRzIHRvIGNhbGxiYWNrcy5cblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuXHRcdC8vIEJhaWwgaWYgbm90IGVuYWJsZWQgb3IgVUEgZG9lcyBub3Qgc3VwcG9ydCBkcmFnJ24nZHJvcCBvciBGaWxlIEFQSS5cblx0XHRpZiAoICEgd2luZG93LnRpbnlNQ0VQcmVJbml0IHx8ICEgd2luZG93LnRpbnlNQ0VQcmVJbml0LmRyYWdEcm9wVXBsb2FkIHx8ICEgdGhpcy5icm93c2VyU3VwcG9ydCgpICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhpcy4kZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcblx0XHR0aGlzLmRyb3B6b25lcyA9IFtdO1xuXHRcdHRoaXMuZmlsZXMgPSBbXTtcblxuXHRcdHRoaXMuJGRvY3VtZW50Lm9uKCAnZHJvcCcsICcudXBsb2FkZXItZWRpdG9yJywgXy5iaW5kKCB0aGlzLmRyb3AsIHRoaXMgKSApO1xuXHRcdHRoaXMuJGRvY3VtZW50Lm9uKCAnZHJhZ292ZXInLCAnLnVwbG9hZGVyLWVkaXRvcicsIF8uYmluZCggdGhpcy5kcm9wem9uZURyYWdvdmVyLCB0aGlzICkgKTtcblx0XHR0aGlzLiRkb2N1bWVudC5vbiggJ2RyYWdsZWF2ZScsICcudXBsb2FkZXItZWRpdG9yJywgXy5iaW5kKCB0aGlzLmRyb3B6b25lRHJhZ2xlYXZlLCB0aGlzICkgKTtcblx0XHR0aGlzLiRkb2N1bWVudC5vbiggJ2NsaWNrJywgJy51cGxvYWRlci1lZGl0b3InLCBfLmJpbmQoIHRoaXMuY2xpY2ssIHRoaXMgKSApO1xuXG5cdFx0dGhpcy4kZG9jdW1lbnQub24oICdkcmFnb3ZlcicsIF8uYmluZCggdGhpcy5jb250YWluZXJEcmFnb3ZlciwgdGhpcyApICk7XG5cdFx0dGhpcy4kZG9jdW1lbnQub24oICdkcmFnbGVhdmUnLCBfLmJpbmQoIHRoaXMuY29udGFpbmVyRHJhZ2xlYXZlLCB0aGlzICkgKTtcblxuXHRcdHRoaXMuJGRvY3VtZW50Lm9uKCAnZHJhZ3N0YXJ0IGRyYWdlbmQgZHJvcCcsIF8uYmluZCggZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dGhpcy5sb2NhbERyYWcgPSBldmVudC50eXBlID09PSAnZHJhZ3N0YXJ0JztcblxuXHRcdFx0aWYgKCBldmVudC50eXBlID09PSAnZHJvcCcgKSB7XG5cdFx0XHRcdHRoaXMuY29udGFpbmVyRHJhZ2xlYXZlKCk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcyApICk7XG5cblx0XHR0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2sgYnJvd3NlciBzdXBwb3J0IGZvciBkcmFnJ24nZHJvcC5cblx0ICpcblx0ICogQHJldHVybiBCb29sZWFuXG5cdCAqL1xuXHRicm93c2VyU3VwcG9ydDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN1cHBvcnRzID0gZmFsc2UsIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdFx0c3VwcG9ydHMgPSAoICdkcmFnZ2FibGUnIGluIGRpdiApIHx8ICggJ29uZHJhZ3N0YXJ0JyBpbiBkaXYgJiYgJ29uZHJvcCcgaW4gZGl2ICk7XG5cdFx0c3VwcG9ydHMgPSBzdXBwb3J0cyAmJiAhISAoIHdpbmRvdy5GaWxlICYmIHdpbmRvdy5GaWxlTGlzdCAmJiB3aW5kb3cuRmlsZVJlYWRlciApO1xuXHRcdHJldHVybiBzdXBwb3J0cztcblx0fSxcblxuXHRpc0RyYWdnaW5nRmlsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggdGhpcy5kcmFnZ2luZ0ZpbGUgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kcmFnZ2luZ0ZpbGU7XG5cdFx0fVxuXG5cdFx0aWYgKCBfLmlzVW5kZWZpbmVkKCBldmVudC5vcmlnaW5hbEV2ZW50ICkgfHwgXy5pc1VuZGVmaW5lZCggZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIgKSApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmRyYWdnaW5nRmlsZSA9IF8uaW5kZXhPZiggZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIudHlwZXMsICdGaWxlcycgKSA+IC0xICYmXG5cdFx0XHRfLmluZGV4T2YoIGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLCAndGV4dC9wbGFpbicgKSA9PT0gLTE7XG5cblx0XHRyZXR1cm4gdGhpcy5kcmFnZ2luZ0ZpbGU7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oIGUgKSB7XG5cdFx0dmFyIGRyb3B6b25lX2lkO1xuXHRcdGZvciAoIGRyb3B6b25lX2lkIGluIHRoaXMuZHJvcHpvbmVzICkge1xuXHRcdFx0Ly8gSGlkZSB0aGUgZHJvcHpvbmVzIG9ubHkgaWYgZHJhZ2dpbmcgaGFzIGxlZnQgdGhlIHNjcmVlbi5cblx0XHRcdHRoaXMuZHJvcHpvbmVzWyBkcm9wem9uZV9pZCBdLnRvZ2dsZSggdGhpcy5vdmVyQ29udGFpbmVyIHx8IHRoaXMub3ZlckRyb3B6b25lICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIF8uaXNVbmRlZmluZWQoIGUgKSApIHtcblx0XHRcdCQoIGUudGFyZ2V0ICkuY2xvc2VzdCggJy51cGxvYWRlci1lZGl0b3InICkudG9nZ2xlQ2xhc3MoICdkcm9wcGFibGUnLCB0aGlzLm92ZXJEcm9wem9uZSApO1xuXHRcdH1cblxuXHRcdGlmICggISB0aGlzLm92ZXJDb250YWluZXIgJiYgISB0aGlzLm92ZXJEcm9wem9uZSApIHtcblx0XHRcdHRoaXMuZHJhZ2dpbmdGaWxlID0gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggISB0aGlzLmluaXRpYWxpemVkICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Vmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHQkKCAnLndwLWVkaXRvci13cmFwJyApLmVhY2goIF8uYmluZCggdGhpcy5hdHRhY2gsIHRoaXMgKSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGF0dGFjaDogZnVuY3Rpb24oIGluZGV4LCBlZGl0b3IgKSB7XG5cdFx0Ly8gQXR0YWNoIGEgZHJvcHpvbmUgdG8gYW4gZWRpdG9yLlxuXHRcdHZhciBkcm9wem9uZSA9IHRoaXMuJGVsLmNsb25lKCk7XG5cdFx0dGhpcy5kcm9wem9uZXMucHVzaCggZHJvcHpvbmUgKTtcblx0XHQkKCBlZGl0b3IgKS5hcHBlbmQoIGRyb3B6b25lICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZW4gYSBmaWxlIGlzIGRyb3BwZWQgb24gdGhlIGVkaXRvciB1cGxvYWRlciwgb3BlbiB1cCBhbiBlZGl0b3IgbWVkaWEgd29ya2Zsb3dcblx0ICogYW5kIHVwbG9hZCB0aGUgZmlsZSBpbW1lZGlhdGVseS5cblx0ICpcblx0ICogQHBhcmFtICB7alF1ZXJ5LkV2ZW50fSBldmVudCBUaGUgJ2Ryb3AnIGV2ZW50LlxuXHQgKi9cblx0ZHJvcDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciAkd3JhcCwgdXBsb2FkVmlldztcblxuXHRcdHRoaXMuY29udGFpbmVyRHJhZ2xlYXZlKCBldmVudCApO1xuXHRcdHRoaXMuZHJvcHpvbmVEcmFnbGVhdmUoIGV2ZW50ICk7XG5cblx0XHR0aGlzLmZpbGVzID0gZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuZmlsZXM7XG5cdFx0aWYgKCB0aGlzLmZpbGVzLmxlbmd0aCA8IDEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZWRpdG9yIHRvIHRoZSBkcm9wIHRhcmdldC5cblx0XHQkd3JhcCA9ICQoIGV2ZW50LnRhcmdldCApLnBhcmVudHMoICcud3AtZWRpdG9yLXdyYXAnICk7XG5cdFx0aWYgKCAkd3JhcC5sZW5ndGggPiAwICYmICR3cmFwWzBdLmlkICkge1xuXHRcdFx0d2luZG93LndwQWN0aXZlRWRpdG9yID0gJHdyYXBbMF0uaWQuc2xpY2UoIDMsIC01ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHRoaXMud29ya2Zsb3cgKSB7XG5cdFx0XHR0aGlzLndvcmtmbG93ID0gd3AubWVkaWEuZWRpdG9yLm9wZW4oIHdpbmRvdy53cEFjdGl2ZUVkaXRvciwge1xuXHRcdFx0XHRmcmFtZTogICAgJ3Bvc3QnLFxuXHRcdFx0XHRzdGF0ZTogICAgJ2luc2VydCcsXG5cdFx0XHRcdHRpdGxlOiAgICBsMTBuLmFkZE1lZGlhLFxuXHRcdFx0XHRtdWx0aXBsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHRcdHVwbG9hZFZpZXcgPSB0aGlzLndvcmtmbG93LnVwbG9hZGVyO1xuXG5cdFx0XHRpZiAoIHVwbG9hZFZpZXcudXBsb2FkZXIgJiYgdXBsb2FkVmlldy51cGxvYWRlci5yZWFkeSApIHtcblx0XHRcdFx0dGhpcy5hZGRGaWxlcy5hcHBseSggdGhpcyApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy53b3JrZmxvdy5vbiggJ3VwbG9hZGVyOnJlYWR5JywgdGhpcy5hZGRGaWxlcywgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLndvcmtmbG93LnN0YXRlKCkucmVzZXQoKTtcblx0XHRcdHRoaXMuYWRkRmlsZXMuYXBwbHkoIHRoaXMgKTtcblx0XHRcdHRoaXMud29ya2Zsb3cub3BlbigpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fSxcblxuXHQvKipcblx0ICogQWRkIHRoZSBmaWxlcyB0byB0aGUgdXBsb2FkZXIuXG5cdCAqL1xuXHRhZGRGaWxlczogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLmZpbGVzLmxlbmd0aCApIHtcblx0XHRcdHRoaXMud29ya2Zsb3cudXBsb2FkZXIudXBsb2FkZXIudXBsb2FkZXIuYWRkRmlsZSggXy50b0FycmF5KCB0aGlzLmZpbGVzICkgKTtcblx0XHRcdHRoaXMuZmlsZXMgPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y29udGFpbmVyRHJhZ292ZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIHRoaXMubG9jYWxEcmFnIHx8ICEgdGhpcy5pc0RyYWdnaW5nRmlsZSggZXZlbnQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm92ZXJDb250YWluZXIgPSB0cnVlO1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXHR9LFxuXG5cdGNvbnRhaW5lckRyYWdsZWF2ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vdmVyQ29udGFpbmVyID0gZmFsc2U7XG5cblx0XHQvLyBUaHJvdHRsZSBkcmFnbGVhdmUgYmVjYXVzZSBpdCdzIGNhbGxlZCB3aGVuIGJvdW5jaW5nIGZyb20gc29tZSBlbGVtZW50cyB0byBvdGhlcnMuXG5cdFx0Xy5kZWxheSggXy5iaW5kKCB0aGlzLnJlZnJlc2gsIHRoaXMgKSwgNTAgKTtcblx0fSxcblxuXHRkcm9wem9uZURyYWdvdmVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLmxvY2FsRHJhZyB8fCAhIHRoaXMuaXNEcmFnZ2luZ0ZpbGUoIGV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5vdmVyRHJvcHpvbmUgPSB0cnVlO1xuXHRcdHRoaXMucmVmcmVzaCggZXZlbnQgKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0ZHJvcHpvbmVEcmFnbGVhdmU6IGZ1bmN0aW9uKCBlICkge1xuXHRcdHRoaXMub3ZlckRyb3B6b25lID0gZmFsc2U7XG5cdFx0Xy5kZWxheSggXy5iaW5kKCB0aGlzLnJlZnJlc2gsIHRoaXMsIGUgKSwgNTAgKTtcblx0fSxcblxuXHRjbGljazogZnVuY3Rpb24oIGUgKSB7XG5cdFx0Ly8gSW4gdGhlIHJhcmUgY2FzZSB3aGVyZSB0aGUgZHJvcHpvbmUgZ2V0cyBzdHVjaywgaGlkZSBpdCBvbiBjbGljay5cblx0XHR0aGlzLmNvbnRhaW5lckRyYWdsZWF2ZSggZSApO1xuXHRcdHRoaXMuZHJvcHpvbmVEcmFnbGVhdmUoIGUgKTtcblx0XHR0aGlzLmxvY2FsRHJhZyA9IGZhbHNlO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3JVcGxvYWRlcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5VcGxvYWRlcklubGluZVxuICpcbiAqIFRoZSBpbmxpbmUgdXBsb2FkZXIgdGhhdCBzaG93cyB1cCBpbiB0aGUgJ1VwbG9hZCBGaWxlcycgdGFiLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdFVwbG9hZGVySW5saW5lO1xuXG5VcGxvYWRlcklubGluZSA9IFZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAndXBsb2FkZXItaW5saW5lJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgndXBsb2FkZXItaW5saW5lJyksXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIC5jbG9zZSc6ICdoaWRlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0bWVzc2FnZTogJycsXG5cdFx0XHRzdGF0dXM6ICB0cnVlLFxuXHRcdFx0Y2FuQ2xvc2U6IGZhbHNlXG5cdFx0fSk7XG5cblx0XHRpZiAoICEgdGhpcy5vcHRpb25zLiRicm93c2VyICYmIHRoaXMuY29udHJvbGxlci51cGxvYWRlciApIHtcblx0XHRcdHRoaXMub3B0aW9ucy4kYnJvd3NlciA9IHRoaXMuY29udHJvbGxlci51cGxvYWRlci4kYnJvd3Nlcjtcblx0XHR9XG5cblx0XHRpZiAoIF8uaXNVbmRlZmluZWQoIHRoaXMub3B0aW9ucy5wb3N0SWQgKSApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5wb3N0SWQgPSB3cC5tZWRpYS52aWV3LnNldHRpbmdzLnBvc3QuaWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RhdHVzICkge1xuXHRcdFx0dGhpcy52aWV3cy5zZXQoICcudXBsb2FkLWlubGluZS1zdGF0dXMnLCBuZXcgd3AubWVkaWEudmlldy5VcGxvYWRlclN0YXR1cyh7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlclxuXHRcdFx0fSkgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlcGFyZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHN1Z2dlc3RlZFdpZHRoID0gdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzdWdnZXN0ZWRXaWR0aCcpLFxuXHRcdFx0c3VnZ2VzdGVkSGVpZ2h0ID0gdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdzdWdnZXN0ZWRIZWlnaHQnKSxcblx0XHRcdGRhdGEgPSB7fTtcblxuXHRcdGRhdGEubWVzc2FnZSA9IHRoaXMub3B0aW9ucy5tZXNzYWdlO1xuXHRcdGRhdGEuY2FuQ2xvc2UgPSB0aGlzLm9wdGlvbnMuY2FuQ2xvc2U7XG5cblx0XHRpZiAoIHN1Z2dlc3RlZFdpZHRoICYmIHN1Z2dlc3RlZEhlaWdodCApIHtcblx0XHRcdGRhdGEuc3VnZ2VzdGVkV2lkdGggPSBzdWdnZXN0ZWRXaWR0aDtcblx0XHRcdGRhdGEuc3VnZ2VzdGVkSGVpZ2h0ID0gc3VnZ2VzdGVkSGVpZ2h0O1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuZGlzcG9zaW5nICkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBjYWxsICdkaXNwb3NlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0XHQgKi9cblx0XHRcdHJldHVybiBWaWV3LnByb3RvdHlwZS5kaXNwb3NlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cblx0XHQvLyBSdW4gcmVtb3ZlIG9uIGBkaXNwb3NlYCwgc28gd2UgY2FuIGJlIHN1cmUgdG8gcmVmcmVzaCB0aGVcblx0XHQvLyB1cGxvYWRlciB3aXRoIGEgdmlldy1sZXNzIERPTS4gVHJhY2sgd2hldGhlciB3ZSdyZSBkaXNwb3Npbmdcblx0XHQvLyBzbyB3ZSBkb24ndCB0cmlnZ2VyIGFuIGluZmluaXRlIGxvb3AuXG5cdFx0dGhpcy5kaXNwb3NpbmcgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzLnJlbW92ZSgpO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ3JlbW92ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdHZhciByZXN1bHQgPSBWaWV3LnByb3RvdHlwZS5yZW1vdmUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0Xy5kZWZlciggXy5iaW5kKCB0aGlzLnJlZnJlc2gsIHRoaXMgKSApO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHVwbG9hZGVyID0gdGhpcy5jb250cm9sbGVyLnVwbG9hZGVyO1xuXG5cdFx0aWYgKCB1cGxvYWRlciApIHtcblx0XHRcdHVwbG9hZGVyLnJlZnJlc2goKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5VcGxvYWRlcklubGluZX1cblx0ICovXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGJyb3dzZXIgPSB0aGlzLm9wdGlvbnMuJGJyb3dzZXIsXG5cdFx0XHQkcGxhY2Vob2xkZXI7XG5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci51cGxvYWRlciApIHtcblx0XHRcdCRwbGFjZWhvbGRlciA9IHRoaXMuJCgnLmJyb3dzZXInKTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2UndmUgYWxyZWFkeSByZXBsYWNlZCB0aGUgcGxhY2Vob2xkZXIuXG5cdFx0XHRpZiAoICRwbGFjZWhvbGRlclswXSA9PT0gJGJyb3dzZXJbMF0gKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0JGJyb3dzZXIuZGV0YWNoKCkudGV4dCggJHBsYWNlaG9sZGVyLnRleHQoKSApO1xuXHRcdFx0JGJyb3dzZXJbMF0uY2xhc3NOYW1lID0gJHBsYWNlaG9sZGVyWzBdLmNsYXNzTmFtZTtcblx0XHRcdCRwbGFjZWhvbGRlci5yZXBsYWNlV2l0aCggJGJyb3dzZXIuc2hvdygpICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAnaGlkZGVuJyApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ2hpZGRlbicgKTtcblx0fVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBVcGxvYWRlcklubGluZTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5VcGxvYWRlclN0YXR1c0Vycm9yXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBVcGxvYWRlclN0YXR1c0Vycm9yID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICd1cGxvYWQtZXJyb3InLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCd1cGxvYWRlci1zdGF0dXMtZXJyb3InKVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVXBsb2FkZXJTdGF0dXNFcnJvcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5VcGxvYWRlclN0YXR1c1xuICpcbiAqIEFuIHVwbG9hZGVyIHN0YXR1cyBmb3Igb24tZ29pbmcgdXBsb2Fkcy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHRVcGxvYWRlclN0YXR1cztcblxuVXBsb2FkZXJTdGF0dXMgPSBWaWV3LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ21lZGlhLXVwbG9hZGVyLXN0YXR1cycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ3VwbG9hZGVyLXN0YXR1cycpLFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayAudXBsb2FkLWRpc21pc3MtZXJyb3JzJzogJ2Rpc21pc3MnXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5xdWV1ZSA9IHdwLlVwbG9hZGVyLnF1ZXVlO1xuXHRcdHRoaXMucXVldWUub24oICdhZGQgcmVtb3ZlIHJlc2V0JywgdGhpcy52aXNpYmlsaXR5LCB0aGlzICk7XG5cdFx0dGhpcy5xdWV1ZS5vbiggJ2FkZCByZW1vdmUgcmVzZXQgY2hhbmdlOnBlcmNlbnQnLCB0aGlzLnByb2dyZXNzLCB0aGlzICk7XG5cdFx0dGhpcy5xdWV1ZS5vbiggJ2FkZCByZW1vdmUgcmVzZXQgY2hhbmdlOnVwbG9hZGluZycsIHRoaXMuaW5mbywgdGhpcyApO1xuXG5cdFx0dGhpcy5lcnJvcnMgPSB3cC5VcGxvYWRlci5lcnJvcnM7XG5cdFx0dGhpcy5lcnJvcnMucmVzZXQoKTtcblx0XHR0aGlzLmVycm9ycy5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnZpc2liaWxpdHksIHRoaXMgKTtcblx0XHR0aGlzLmVycm9ycy5vbiggJ2FkZCcsIHRoaXMuZXJyb3IsIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBnbG9iYWwgd3AuVXBsb2FkZXJcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXN9XG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHR3cC5VcGxvYWRlci5xdWV1ZS5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHQvKipcblx0XHQgKiBjYWxsICdkaXNwb3NlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0Vmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dmlzaWJpbGl0eTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICd1cGxvYWRpbmcnLCAhISB0aGlzLnF1ZXVlLmxlbmd0aCApO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnZXJyb3JzJywgISEgdGhpcy5lcnJvcnMubGVuZ3RoICk7XG5cdFx0dGhpcy4kZWwudG9nZ2xlKCAhISB0aGlzLnF1ZXVlLmxlbmd0aCB8fCAhISB0aGlzLmVycm9ycy5sZW5ndGggKTtcblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5lYWNoKHtcblx0XHRcdCckYmFyJzogICAgICAnLm1lZGlhLXByb2dyZXNzLWJhciBkaXYnLFxuXHRcdFx0JyRpbmRleCc6ICAgICcudXBsb2FkLWluZGV4Jyxcblx0XHRcdCckdG90YWwnOiAgICAnLnVwbG9hZC10b3RhbCcsXG5cdFx0XHQnJGZpbGVuYW1lJzogJy51cGxvYWQtZmlsZW5hbWUnXG5cdFx0fSwgZnVuY3Rpb24oIHNlbGVjdG9yLCBrZXkgKSB7XG5cdFx0XHR0aGlzWyBrZXkgXSA9IHRoaXMuJCggc2VsZWN0b3IgKTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHR0aGlzLnZpc2liaWxpdHkoKTtcblx0XHR0aGlzLnByb2dyZXNzKCk7XG5cdFx0dGhpcy5pbmZvKCk7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBxdWV1ZSA9IHRoaXMucXVldWUsXG5cdFx0XHQkYmFyID0gdGhpcy4kYmFyO1xuXG5cdFx0aWYgKCAhICRiYXIgfHwgISBxdWV1ZS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0JGJhci53aWR0aCggKCBxdWV1ZS5yZWR1Y2UoIGZ1bmN0aW9uKCBtZW1vLCBhdHRhY2htZW50ICkge1xuXHRcdFx0aWYgKCAhIGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRpbmcnKSApIHtcblx0XHRcdFx0cmV0dXJuIG1lbW8gKyAxMDA7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBwZXJjZW50ID0gYXR0YWNobWVudC5nZXQoJ3BlcmNlbnQnKTtcblx0XHRcdHJldHVybiBtZW1vICsgKCBfLmlzTnVtYmVyKCBwZXJjZW50ICkgPyBwZXJjZW50IDogMTAwICk7XG5cdFx0fSwgMCApIC8gcXVldWUubGVuZ3RoICkgKyAnJScgKTtcblx0fSxcblxuXHRpbmZvOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcXVldWUgPSB0aGlzLnF1ZXVlLFxuXHRcdFx0aW5kZXggPSAwLCBhY3RpdmU7XG5cblx0XHRpZiAoICEgcXVldWUubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGFjdGl2ZSA9IHRoaXMucXVldWUuZmluZCggZnVuY3Rpb24oIGF0dGFjaG1lbnQsIGkgKSB7XG5cdFx0XHRpbmRleCA9IGk7XG5cdFx0XHRyZXR1cm4gYXR0YWNobWVudC5nZXQoJ3VwbG9hZGluZycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy4kaW5kZXgudGV4dCggaW5kZXggKyAxICk7XG5cdFx0dGhpcy4kdG90YWwudGV4dCggcXVldWUubGVuZ3RoICk7XG5cdFx0dGhpcy4kZmlsZW5hbWUuaHRtbCggYWN0aXZlID8gdGhpcy5maWxlbmFtZSggYWN0aXZlLmdldCgnZmlsZW5hbWUnKSApIDogJycgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZmlsZW5hbWU6IGZ1bmN0aW9uKCBmaWxlbmFtZSApIHtcblx0XHRyZXR1cm4gXy5lc2NhcGUoIGZpbGVuYW1lICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBlcnJvclxuXHQgKi9cblx0ZXJyb3I6IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHR0aGlzLnZpZXdzLmFkZCggJy51cGxvYWQtZXJyb3JzJywgbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXNFcnJvcih7XG5cdFx0XHRmaWxlbmFtZTogdGhpcy5maWxlbmFtZSggZXJyb3IuZ2V0KCdmaWxlJykubmFtZSApLFxuXHRcdFx0bWVzc2FnZTogIGVycm9yLmdldCgnbWVzc2FnZScpXG5cdFx0fSksIHsgYXQ6IDAgfSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBnbG9iYWwgd3AuVXBsb2FkZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRkaXNtaXNzOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGVycm9ycyA9IHRoaXMudmlld3MuZ2V0KCcudXBsb2FkLWVycm9ycycpO1xuXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdGlmICggZXJyb3JzICkge1xuXHRcdFx0Xy5pbnZva2UoIGVycm9ycywgJ3JlbW92ZScgKTtcblx0XHR9XG5cdFx0d3AuVXBsb2FkZXIuZXJyb3JzLnJlc2V0KCk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwbG9hZGVyU3RhdHVzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlVwbG9hZGVyV2luZG93XG4gKlxuICogQW4gdXBsb2FkZXIgd2luZG93IHRoYXQgYWxsb3dzIGZvciBkcmFnZ2luZyBhbmQgZHJvcHBpbmcgbWVkaWEuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAgICAgICAgICAgICAgICAgICBPcHRpb25zIGhhc2ggcGFzc2VkIHRvIHRoZSB2aWV3LlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLnVwbG9hZGVyXSAgICAgICAgICBVcGxvYWRlciBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtqUXVlcnl9IFtvcHRpb25zLnVwbG9hZGVyLmJyb3dzZXJdXG4gKiBAcGFyYW0ge2pRdWVyeX0gW29wdGlvbnMudXBsb2FkZXIuZHJvcHpvbmVdIGpRdWVyeSBjb2xsZWN0aW9uIG9mIHRoZSBkcm9wem9uZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy51cGxvYWRlci5wYXJhbXNdXG4gKi9cbnZhciAkID0galF1ZXJ5LFxuXHRVcGxvYWRlcldpbmRvdztcblxuVXBsb2FkZXJXaW5kb3cgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ3VwbG9hZGVyLXdpbmRvdycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ3VwbG9hZGVyLXdpbmRvdycpLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cGxvYWRlcjtcblxuXHRcdHRoaXMuJGJyb3dzZXIgPSAkKCc8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnJvd3NlclwiIC8+JykuaGlkZSgpLmFwcGVuZFRvKCdib2R5Jyk7XG5cblx0XHR1cGxvYWRlciA9IHRoaXMub3B0aW9ucy51cGxvYWRlciA9IF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucy51cGxvYWRlciB8fCB7fSwge1xuXHRcdFx0ZHJvcHpvbmU6ICB0aGlzLiRlbCxcblx0XHRcdGJyb3dzZXI6ICAgdGhpcy4kYnJvd3Nlcixcblx0XHRcdHBhcmFtczogICAge31cblx0XHR9KTtcblxuXHRcdC8vIEVuc3VyZSB0aGUgZHJvcHpvbmUgaXMgYSBqUXVlcnkgY29sbGVjdGlvbi5cblx0XHRpZiAoIHVwbG9hZGVyLmRyb3B6b25lICYmICEgKHVwbG9hZGVyLmRyb3B6b25lIGluc3RhbmNlb2YgJCkgKSB7XG5cdFx0XHR1cGxvYWRlci5kcm9wem9uZSA9ICQoIHVwbG9hZGVyLmRyb3B6b25lICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb250cm9sbGVyLm9uKCAnYWN0aXZhdGUnLCB0aGlzLnJlZnJlc2gsIHRoaXMgKTtcblxuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ2RldGFjaCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy4kYnJvd3Nlci5yZW1vdmUoKTtcblx0XHR9LCB0aGlzICk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLnVwbG9hZGVyICkge1xuXHRcdFx0dGhpcy51cGxvYWRlci5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcG9zdElkID0gd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdFx0ZHJvcHpvbmU7XG5cblx0XHQvLyBJZiB0aGUgdXBsb2FkZXIgYWxyZWFkeSBleGlzdHMsIGJhaWwuXG5cdFx0aWYgKCB0aGlzLnVwbG9hZGVyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggcG9zdElkICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnVwbG9hZGVyLnBhcmFtcy5wb3N0X2lkID0gcG9zdElkO1xuXHRcdH1cblx0XHR0aGlzLnVwbG9hZGVyID0gbmV3IHdwLlVwbG9hZGVyKCB0aGlzLm9wdGlvbnMudXBsb2FkZXIgKTtcblxuXHRcdGRyb3B6b25lID0gdGhpcy51cGxvYWRlci5kcm9wem9uZTtcblx0XHRkcm9wem9uZS5vbiggJ2Ryb3B6b25lOmVudGVyJywgXy5iaW5kKCB0aGlzLnNob3csIHRoaXMgKSApO1xuXHRcdGRyb3B6b25lLm9uKCAnZHJvcHpvbmU6bGVhdmUnLCBfLmJpbmQoIHRoaXMuaGlkZSwgdGhpcyApICk7XG5cblx0XHQkKCB0aGlzLnVwbG9hZGVyICkub24oICd1cGxvYWRlcjpyZWFkeScsIF8uYmluZCggdGhpcy5fcmVhZHksIHRoaXMgKSApO1xuXHR9LFxuXG5cdF9yZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICd1cGxvYWRlcjpyZWFkeScgKTtcblx0fSxcblxuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGVsID0gdGhpcy4kZWwuc2hvdygpO1xuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgYnkgd2FpdGluZyB1bnRpbFxuXHRcdC8vIHRoZSB0cmFuc3BhcmVudCBlbGVtZW50IGlzIHBhaW50ZWQgaW50byB0aGUgRE9NLlxuXHRcdF8uZGVmZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0JGVsLmNzcyh7IG9wYWNpdHk6IDEgfSk7XG5cdFx0fSk7XG5cdH0sXG5cblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyICRlbCA9IHRoaXMuJGVsLmNzcyh7IG9wYWNpdHk6IDAgfSk7XG5cblx0XHR3cC5tZWRpYS50cmFuc2l0aW9uKCAkZWwgKS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIFRyYW5zaXRpb24gZW5kIGV2ZW50cyBhcmUgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWUgaXMgc2V0IGFzIGludGVuZGVkLlxuXHRcdFx0aWYgKCAnMCcgPT09ICRlbC5jc3MoJ29wYWNpdHknKSApIHtcblx0XHRcdFx0JGVsLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIGh0dHBzOi8vY29yZS50cmFjLndvcmRwcmVzcy5vcmcvdGlja2V0LzI3MzQxXG5cdFx0Xy5kZWxheSggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICcwJyA9PT0gJGVsLmNzcygnb3BhY2l0eScpICYmICRlbC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdFx0JGVsLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9LCA1MDAgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVXBsb2FkZXJXaW5kb3c7XG4iLCIvKipcbiAqIHdwLm1lZGlhLlZpZXdcbiAqXG4gKiBUaGUgYmFzZSB2aWV3IGNsYXNzIGZvciBtZWRpYS5cbiAqXG4gKiBVbmRlbGVnYXRpbmcgZXZlbnRzLCByZW1vdmluZyBldmVudHMgZnJvbSB0aGUgbW9kZWwsIGFuZFxuICogcmVtb3ZpbmcgZXZlbnRzIGZyb20gdGhlIGNvbnRyb2xsZXIgbWlycm9yIHRoZSBjb2RlIGZvclxuICogYEJhY2tib25lLlZpZXcuZGlzcG9zZWAgaW4gQmFja2JvbmUgMC45LjggZGV2ZWxvcG1lbnQuXG4gKlxuICogVGhpcyBiZWhhdmlvciBoYXMgc2luY2UgYmVlbiByZW1vdmVkLCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkXG4gKiBvdXRzaWRlIG9mIHRoZSBtZWRpYSBtYW5hZ2VyLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AuQmFja2JvbmUuVmlldy5leHRlbmQoe1xuXHRjb25zdHJ1Y3RvcjogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0aWYgKCBvcHRpb25zICYmIG9wdGlvbnMuY29udHJvbGxlciApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlciA9IG9wdGlvbnMuY29udHJvbGxlcjtcblx0XHR9XG5cdFx0d3AuQmFja2JvbmUuVmlldy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAdG9kbyBUaGUgaW50ZXJuYWwgY29tbWVudCBtZW50aW9ucyB0aGlzIG1pZ2h0IGhhdmUgYmVlbiBhIHN0b3AtZ2FwXG5cdCAqICAgICAgIGJlZm9yZSBCYWNrYm9uZSAwLjkuOCBjYW1lIG91dC4gRmlndXJlIG91dCBpZiBCYWNrYm9uZSBjb3JlIHRha2VzXG5cdCAqICAgICAgIGNhcmUgb2YgdGhpcyBpbiBCYWNrYm9uZS5WaWV3IG5vdy5cblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLlZpZXd9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBVbmRlbGVnYXRpbmcgZXZlbnRzLCByZW1vdmluZyBldmVudHMgZnJvbSB0aGUgbW9kZWwsIGFuZFxuXHRcdC8vIHJlbW92aW5nIGV2ZW50cyBmcm9tIHRoZSBjb250cm9sbGVyIG1pcnJvciB0aGUgY29kZSBmb3Jcblx0XHQvLyBgQmFja2JvbmUuVmlldy5kaXNwb3NlYCBpbiBCYWNrYm9uZSAwLjkuOCBkZXZlbG9wbWVudC5cblx0XHR0aGlzLnVuZGVsZWdhdGVFdmVudHMoKTtcblxuXHRcdGlmICggdGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLm9mZiApIHtcblx0XHRcdHRoaXMubW9kZWwub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmNvbGxlY3Rpb24gJiYgdGhpcy5jb2xsZWN0aW9uLm9mZiApIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbi5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBVbmJpbmQgY29udHJvbGxlciBldmVudHMuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIgJiYgdGhpcy5jb250cm9sbGVyLm9mZiApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmRpc3Bvc2UoKTtcblx0XHQvKipcblx0XHQgKiBjYWxsICdyZW1vdmUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gd3AuQmFja2JvbmUuVmlldy5wcm90b3R5cGUucmVtb3ZlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlldztcbiJdfQ==