@charset "UTF-8";
/*
Also please follow this
Do your project have diferent charset languages to account with?
      - Yes -> follow https://projects.netcentric.biz/wiki/display/FRONTEND/CSS+-+Font+Normalization
      - No -> You can still use it, there are tons of advantages, but its create some extra css and layout rendering
*/
/*
  * Design spec:
  * https://www.figma.com/file/SR4rvQlNnCmPMrQ9WYaIqv/branch/TJqkFymq09wf8KwmY1WNcj/Volvo-AEM-Design-system?type=design&node-id=7-26&t=pAm916VRiqCOD2I1-0
*/
/**
 * z-indexes from lower to -> higher
 */
:root {
  --v-icon-size: 24px;
}

@media (min-width: 960px) {
  :root {
    --v-icon-size: 16px;
  }
}

.v-icon {
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}

.v-icon svg path {
  fill: currentColor;
}

.v-icon-sprite {
  pointer-events: none;
  position: absolute;
  max-height: 0;
  max-width: 0;
  overflow: hidden;
}

.v-icon--16 {
  display: none;
}

@media (min-width: 960px) {
  .v-icon--16 {
    display: inline;
  }
}

.v-icon--24 {
  display: inline;
  y: 0;
  /* stylelint-disable */
  /* stylelint-enable */
}

@media not all and (min-resolution: 0.001dpcm) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@supports (-webkit-touch-callout: none) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@media (min-width: 960px) {
  .v-icon--24 {
    display: none;
  }
}

/*doc
---
title: Pixel to em
name: nn-px-to-em
category: functions
---

Calculate the em with a given pixel with the given base font size
If you don't set a $base the $base-font-size is used as the context


## Live Template abbreviations
---
-ptu


## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---
nn-strip-unit


## Example
---
```html_example
nn-px-to-em(5) // Output: 0.3125em
nn-px-to-em(5, 10) // Output: 0.5em
nn-px-to-em(5, 20) // Output: 0.25em
```
*/
/*doc
---
title: Pixel to rem
name: nn-px-to-rem
category: functions
---

Calculate the rem with a given pixel with the given base font size

In:  5px
Out: 0.3125rem


## Live Template abbreviations
---
-rem


## Parameters
---
@parameter $value = pixel based number (without unit)


## Dependencies
---
nn-strip-unit

## Example
---
```html_example
nn-px-to-rem(5) // Output 0.3125rem
```

*/
/*doc
---
title: Pixel to unit
name: px-to-unit
category: mixins
---

Set a property and value (pixel based without unit)

Calculates rem / em / % from given pixel and base (default base is the
base-font-size, 16px)
If rtl is true, this mixin handles all the direction stuff:
- Switching the values, when we have exactly 4 values
- Switching left and right in properties (padding and margin)


## Live Template abbreviations
---
-ptu (for em or % to pixel - with base parameter)
-rem (for rem to pixel - without base parameter)


## Parameters
---
@parameter $property = padding | margin | font-size | width | height
@parameter $value = Pixel based number - add px to keep the px for a value
@parameter $base = px based number, Default: 16px
@parameter $unit = Set unit: px | em | rem | percent


## Dependencies
---
abstract/functions/swap-left-right
abstract/functions/strip-unit


## Example
---

```html_example
@include nn-px-to-unit(padding, 0 10px 20 0); => padding: 0 10px 1.25rem 0;
@include nn-px-to-unit(padding, 0 10 20 0); => padding: 0 0.625rem 1.25rem 0;
@include nn-px-to-unit(padding-left, 10);
@include nn-px-to-unit(padding-right, 10);
@include nn-px-to-unit(margin, 0 10 20 0);
@include nn-px-to-unit(margin-left, 10);
@include nn-px-to-unit(margin-right, 10);
@include nn-px-to-unit(font-size, 20);
@include nn-px-to-unit(width, 100);
@include nn-px-to-unit(min-width, 100);
@include nn-px-to-unit(mann-width, 100);
@include nn-px-to-unit(height, 100);
@include nn-px-to-unit(min-height, 100);
@include nn-px-to-unit(mann-height, 100);
```


## Source
---
http://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/

*/
/*doc
---
title: Pixel to unitless
name: nn-px-to-unitless
category: functions
---

This makes the same calculation as px to em. But it don't print out the unit.

Use this for line-heights.


## Live Template abbreviations
---



## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---



## Example
---

```html_example
line-height: nn-px-to-unitless(5) // Output: 0.3125
```


## Source
---


*/
/*doc
---
title: Strip unit
name: nn-strip-unit
category: functions
---

Strips of the unit of a number


## Parameters
---
@parameter $num = number with unit (5px, 5em, 5rem)


## Example
---

```html_example
nn-strip-unit(5px) //Output: 5
nn-strip-unit(10em) // Output: 10
nn-strip-unit(15rem) // Output: 15
```

*/
/*doc
---
title: z-index
name: nn-z-index
category: functions
---
 
Because z-indices can get tricky we manage them in the theme.scss globally.

Always use this mixin to set set a z-index.
  
Read the Best Practice to get an full documentation:
https://projects.netcentric.biz/wiki/display/FRONTEND/How+to+set+a+z-index
 
 
## Live Template abbreviations
---
-z
 
 
## Parameters
---
@parameter $element = Name of the element (normally this will be the module name for the main stack)
@parameter $list = Name of the list (default $z-indices). Must be only set for stack context
@parameter $min = Set a minimum z-index which will be added to the list.

 
## Dependencies
---
$z-indices variable in the theme.scss


## Example
---
  
```html_example

// In the SASS theme file

$z-indices: slider, modal, dialog, navigation;


// In the SASS module file

.modal {
    &__base {
        position: absolute;
        z-index: nn-z-index(modal);
    }
}
```
 

## Source
---
http://www.smashingmagazine.com/2014/06/12/sassy-z-index-management-for-complex-layouts/

*/
/* doc
---
title: remove every unit
name: strip-unit
category: functions
---
remove all units

## Parameters
---
@parameter $number = number with unit

## Example
---
```html_example
strip-unit(5px) // Output: 5
```
*/
/*doc
---
title: Swap left right values
name: nn-rtl
category: functions
---

Swap the names right and left when $rtl is set to true.
If the value is not right or left it returns the original value.

In:  right
Out: left (in rtl), right (in ltr)


## Live Template abbreviations
---



## Parameters
---
@parameter $origin = right | left


## Example
---

```html_example
nn-rtl(left): 10px;
nn-rtl(padding-right): 30px;
nn-rtl(0 1px 8px 12px) // 0 12px 8px 1px
```


*/
/*doc
---
title: Clearfix
name: clearfix
category: mixins
---

Clears after floating element

Use this mixin only inside media queries where you can't use the
abstract/extends/utils/_clearfix version, which adds less code to css


## Live Template abbreviations
---



## Example
---

```html_example
@include clearfix;
```


## Source
---
https://css-tricks.com/snippets/css/clear-fix/
*/
.icon {
  display: inline-block;
  width: 32px;
  height: 32px;
}

/* doc
---
title: focus color
name: focus color
category: mixins
---

Add a focus color when keyboard-focus is activated
## Parameters
---
@param $number

*/
/* doc
---
title: ignore-container
name: ignore-container
category: mixins
---

Set full page width for something inside a container

## Parameters
---
@param $container-size
@param $gutter

*/
/* Generates all the rules for the grid columns up to the given amount of column */
/* Generates all the rules for the grid column offset up to the given amount of column */
/* Generates all the rules for the grid and columns for the given break point and total of columns */
/* API function to be called to generate a grid config */
/*doc
---
type: button type
state: state button
---

Button styles

Use this mixin for button styles: color text, background, border


## Example
---

```html_example
@include button(primary);
```
*/
/*doc
---
lineLimit: This value specifies the number of lines after which the content will be clamped. It must be greater than 0.
---

Truncates text at a specific number of lines.

Use this mixin to hide long text.

## Example
---

```html_example
@include line-clamp($lineLimit: 4);
```
*/
/* typography
---
title: typography
name: Typography
category: mixins
---

Adds font CSS properties by a map provided

## Parameters
---
@param $t-style
@param $is-important: false

* $t-style is expected to be a map with 'default' and 'breakpoint[s]' submaps with a property
for every css property to be set.
* $is-important parameter allows to force typography properties to be set as !important
Try to avoid its use, but it might be needed for situations where styles for a component
are very specific and to overwrite the generic ones is too complex (if they have a lot of specificity)

*/
/* doc
---
title: hidden
name: hidden
category: mixins
---

Hide from both screenreaders and browsers: h5bp.com/u
## Parameters
---

*/
/* doc
---
title: overlay
name: overlay
category: mixins
---

Creates an overlay with the provided background color
## Parameters
---
@param $bgColor

*/
/*
Also please follow this
Do your project have diferent charset languages to account with?
      - Yes -> follow https://projects.netcentric.biz/wiki/display/FRONTEND/CSS+-+Font+Normalization
      - No -> You can still use it, there are tons of advantages, but its create some extra css and layout rendering
*/
/*
  * Design spec:
  * https://www.figma.com/file/SR4rvQlNnCmPMrQ9WYaIqv/branch/TJqkFymq09wf8KwmY1WNcj/Volvo-AEM-Design-system?type=design&node-id=7-26&t=pAm916VRiqCOD2I1-0
*/
/**
 * z-indexes from lower to -> higher
 */
:root {
  --v-icon-size: 24px;
}

@media (min-width: 960px) {
  :root {
    --v-icon-size: 16px;
  }
}

.v-icon {
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}

.v-icon svg path {
  fill: currentColor;
}

.v-icon-sprite {
  pointer-events: none;
  position: absolute;
  max-height: 0;
  max-width: 0;
  overflow: hidden;
}

.v-icon--16 {
  display: none;
}

@media (min-width: 960px) {
  .v-icon--16 {
    display: inline;
  }
}

.v-icon--24 {
  display: inline;
  y: 0;
  /* stylelint-disable */
  /* stylelint-enable */
}

@media not all and (min-resolution: 0.001dpcm) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@supports (-webkit-touch-callout: none) {
  .v-icon--24 {
    -webkit-transform: translateY(-16px);
            transform: translateY(-16px);
  }
}

@media (min-width: 960px) {
  .v-icon--24 {
    display: none;
  }
}

/*doc
---
title: Pixel to em
name: nn-px-to-em
category: functions
---

Calculate the em with a given pixel with the given base font size
If you don't set a $base the $base-font-size is used as the context


## Live Template abbreviations
---
-ptu


## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---
nn-strip-unit


## Example
---
```html_example
nn-px-to-em(5) // Output: 0.3125em
nn-px-to-em(5, 10) // Output: 0.5em
nn-px-to-em(5, 20) // Output: 0.25em
```
*/
/*doc
---
title: Pixel to rem
name: nn-px-to-rem
category: functions
---

Calculate the rem with a given pixel with the given base font size

In:  5px
Out: 0.3125rem


## Live Template abbreviations
---
-rem


## Parameters
---
@parameter $value = pixel based number (without unit)


## Dependencies
---
nn-strip-unit

## Example
---
```html_example
nn-px-to-rem(5) // Output 0.3125rem
```

*/
/*doc
---
title: Pixel to unit
name: px-to-unit
category: mixins
---

Set a property and value (pixel based without unit)

Calculates rem / em / % from given pixel and base (default base is the
base-font-size, 16px)
If rtl is true, this mixin handles all the direction stuff:
- Switching the values, when we have exactly 4 values
- Switching left and right in properties (padding and margin)


## Live Template abbreviations
---
-ptu (for em or % to pixel - with base parameter)
-rem (for rem to pixel - without base parameter)


## Parameters
---
@parameter $property = padding | margin | font-size | width | height
@parameter $value = Pixel based number - add px to keep the px for a value
@parameter $base = px based number, Default: 16px
@parameter $unit = Set unit: px | em | rem | percent


## Dependencies
---
abstract/functions/swap-left-right
abstract/functions/strip-unit


## Example
---

```html_example
@include nn-px-to-unit(padding, 0 10px 20 0); => padding: 0 10px 1.25rem 0;
@include nn-px-to-unit(padding, 0 10 20 0); => padding: 0 0.625rem 1.25rem 0;
@include nn-px-to-unit(padding-left, 10);
@include nn-px-to-unit(padding-right, 10);
@include nn-px-to-unit(margin, 0 10 20 0);
@include nn-px-to-unit(margin-left, 10);
@include nn-px-to-unit(margin-right, 10);
@include nn-px-to-unit(font-size, 20);
@include nn-px-to-unit(width, 100);
@include nn-px-to-unit(min-width, 100);
@include nn-px-to-unit(mann-width, 100);
@include nn-px-to-unit(height, 100);
@include nn-px-to-unit(min-height, 100);
@include nn-px-to-unit(mann-height, 100);
```


## Source
---
http://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/

*/
/*doc
---
title: Pixel to unitless
name: nn-px-to-unitless
category: functions
---

This makes the same calculation as px to em. But it don't print out the unit.

Use this for line-heights.


## Live Template abbreviations
---



## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)


## Dependencies
---



## Example
---

```html_example
line-height: nn-px-to-unitless(5) // Output: 0.3125
```


## Source
---


*/
/*doc
---
title: Strip unit
name: nn-strip-unit
category: functions
---

Strips of the unit of a number


## Parameters
---
@parameter $num = number with unit (5px, 5em, 5rem)


## Example
---

```html_example
nn-strip-unit(5px) //Output: 5
nn-strip-unit(10em) // Output: 10
nn-strip-unit(15rem) // Output: 15
```

*/
/*doc
---
title: z-index
name: nn-z-index
category: functions
---
 
Because z-indices can get tricky we manage them in the theme.scss globally.

Always use this mixin to set set a z-index.
  
Read the Best Practice to get an full documentation:
https://projects.netcentric.biz/wiki/display/FRONTEND/How+to+set+a+z-index
 
 
## Live Template abbreviations
---
-z
 
 
## Parameters
---
@parameter $element = Name of the element (normally this will be the module name for the main stack)
@parameter $list = Name of the list (default $z-indices). Must be only set for stack context
@parameter $min = Set a minimum z-index which will be added to the list.

 
## Dependencies
---
$z-indices variable in the theme.scss


## Example
---
  
```html_example

// In the SASS theme file

$z-indices: slider, modal, dialog, navigation;


// In the SASS module file

.modal {
    &__base {
        position: absolute;
        z-index: nn-z-index(modal);
    }
}
```
 

## Source
---
http://www.smashingmagazine.com/2014/06/12/sassy-z-index-management-for-complex-layouts/

*/
/* doc
---
title: remove every unit
name: strip-unit
category: functions
---
remove all units

## Parameters
---
@parameter $number = number with unit

## Example
---
```html_example
strip-unit(5px) // Output: 5
```
*/
/*doc
---
title: Swap left right values
name: nn-rtl
category: functions
---

Swap the names right and left when $rtl is set to true.
If the value is not right or left it returns the original value.

In:  right
Out: left (in rtl), right (in ltr)


## Live Template abbreviations
---



## Parameters
---
@parameter $origin = right | left


## Example
---

```html_example
left: 10px;
padding-right: 30px;
nn-rtl(0 1px 8px 12px) // 0 12px 8px 1px
```


*/
/*doc
---
title: Clearfix
name: clearfix
category: mixins
---

Clears after floating element

Use this mixin only inside media queries where you can't use the
abstract/extends/utils/_clearfix version, which adds less code to css


## Live Template abbreviations
---



## Example
---

```html_example
@include clearfix;
```


## Source
---
https://css-tricks.com/snippets/css/clear-fix/
*/
.icon {
  display: inline-block;
  width: 32px;
  height: 32px;
}

/* doc
---
title: focus color
name: focus color
category: mixins
---

Add a focus color when keyboard-focus is activated
## Parameters
---
@param $number

*/
/* doc
---
title: ignore-container
name: ignore-container
category: mixins
---

Set full page width for something inside a container

## Parameters
---
@param $container-size
@param $gutter

*/
/* Generates all the rules for the grid columns up to the given amount of column */
/* Generates all the rules for the grid column offset up to the given amount of column */
/* Generates all the rules for the grid and columns for the given break point and total of columns */
/* API function to be called to generate a grid config */
/*doc
---
type: button type
state: state button
---

Button styles

Use this mixin for button styles: color text, background, border


## Example
---

```html_example
@include button(primary);
```
*/
/*doc
---
lineLimit: This value specifies the number of lines after which the content will be clamped. It must be greater than 0.
---

Truncates text at a specific number of lines.

Use this mixin to hide long text.

## Example
---

```html_example
@include line-clamp($lineLimit: 4);
```
*/
/* typography
---
title: typography
name: Typography
category: mixins
---

Adds font CSS properties by a map provided

## Parameters
---
@param $t-style
@param $is-important: false

* $t-style is expected to be a map with 'default' and 'breakpoint[s]' submaps with a property
for every css property to be set.
* $is-important parameter allows to force typography properties to be set as !important
Try to avoid its use, but it might be needed for situations where styles for a component
are very specific and to overwrite the generic ones is too complex (if they have a lot of specificity)

*/
/* doc
---
title: hidden
name: hidden
category: mixins
---

Hide from both screenreaders and browsers: h5bp.com/u
## Parameters
---

*/
/* doc
---
title: overlay
name: overlay
category: mixins
---

Creates an overlay with the provided background color
## Parameters
---
@param $bgColor

*/
.video__overlay {
  position: fixed;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  color: #a7a8a9;
  background-color: rgba(225, 223, 221, 0.9);
  z-index: 4;
  text-align: center;
}

.video__overlay__close {
  top: 10px;
  right: 0;
  cursor: pointer;
  box-sizing: border-box;
  position: fixed;
  padding: 20px;
}

.video__overlay__close:before {
  content: '';
  display: inline-block;
  background: url("../../../../../../../content/dam/volvo-media/service-contract-icons/close.svg#close-icon-w24-view");
  width: var(--v-icon-size);
  height: var(--v-icon-size);
  -webkit-filter: saturate(0%) brightness(0%) invert(33.92157%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(33.92157%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 0.32549         0 0 0 0 0.33725         0 0 0 0 0.35294         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .video__overlay__close:before {
    background: url("../../../../../../../content/dam/volvo-media/service-contract-icons/close.svg#close-icon-w16-view");
  }
}

.video__overlay__button {
  width: 80px;
  height: 80px;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  cursor: pointer;
}

.video__overlay__body {
  padding: 50px 0;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}

.video__overlay__container {
  width: 100%;
  height: 100%;
  position: relative;
}

.video__overlay__container > .s7dm-dynamic-media .s7container {
  z-index: -1;
}

.video__overlay__container > .s7dm-dynamic-media .s7controlbar,
.video__overlay__container > .s7dm-dynamic-media .s7socialshare {
  visibility: hidden;
}

@-webkit-keyframes anim_circle {
  to {
    stroke-dashoffset: calc(155 - (155 * var(--playindicator-percentage)) / 100);
  }
}

@keyframes anim_circle {
  to {
    stroke-dashoffset: calc(155 - (155 * var(--playindicator-percentage)) / 100);
  }
}

.playindicator {
  --playindicator-percentage: 0;
  --playindicator-stroke-color: #fff;
  position: absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  bottom: 0;
  right: 0;
  width: 56px;
  height: 56px;
  margin: 15px;
  z-index: 1;
  cursor: pointer;
}

.playindicator__svg {
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  -webkit-transform: rotate(270deg);
          transform: rotate(270deg);
}

.playindicator__svg-circle {
  width: 100%;
  height: 100%;
  fill: rgba(0, 0, 0, 0.3);
  stroke-width: 2;
  stroke-dasharray: 155;
  stroke-dashoffset: 155;
  stroke: var(--playindicator-stroke-color);
  stroke-linecap: round;
  -webkit-transform: translate(1px, 1px);
          transform: translate(1px, 1px);
  transition: all 0.3s ease;
  -webkit-animation: anim_circle 1s ease-in-out forwards;
          animation: anim_circle 1s ease-in-out forwards;
  pointer-events: none;
}

.playindicator::before {
  z-index: 2;
}

.playindicator[data-play-state='paused']:before {
  content: '';
  display: inline-block;
  background: url("../../../../../../../content/dam/volvo-media/list-icons/play.svg#play-icon-w24-view");
  width: 24px;
  height: 24px;
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .playindicator[data-play-state='paused']:before {
    background: url("../../../../../../../content/dam/volvo-media/list-icons/play.svg#play-icon-w16-view");
  }
}

.playindicator[data-play-state='playing']:before {
  content: '';
  display: inline-block;
  background: url("../../../../../../../content/dam/volvo-media/list-icons/pause.svg#pause-icon-w24-view");
  width: 24px;
  height: 24px;
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .playindicator[data-play-state='playing']:before {
    background: url("../../../../../../../content/dam/volvo-media/list-icons/pause.svg#pause-icon-w16-view");
  }
}

.mute-controller {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  background-color: rgba(20, 20, 20, 0.3);
  position: absolute;
  right: 0;
  bottom: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;
  z-index: 9999;
}

.mute-controller:before {
  content: '';
  display: inline-block;
  background: url("../../../../../../../content/dam/volvo-media/list-icons/unmute.svg#unmute-icon-w24-view");
  width: 24px;
  height: 24px;
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .mute-controller:before {
    background: url("../../../../../../../content/dam/volvo-media/list-icons/unmute.svg#unmute-icon-w16-view");
  }
}

.mute-controller--muted:before {
  content: '';
  display: inline-block;
  background: url("../../../../../../../content/dam/volvo-media/list-icons/mute.svg#mute-icon-w24-view");
  width: 24px;
  height: 24px;
  -webkit-filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
          filter: saturate(0%) brightness(0%) invert(100%) opacity(1);
  filter: url('data:image/svg+xml;utf8,    <svg xmlns="http://www.w3.org/2000/svg">    <filter id="recolor" color-interpolation-filters="sRGB">        <feColorMatrix type="matrix" values="         0 0 0 0 1         0 0 0 0 1         0 0 0 0 1         0 0 0 1 0         "/>    </filter>    </svg>    #recolor');
  pointer-events: none;
}

@media (min-width: 1200px) {
  .mute-controller--muted:before {
    background: url("../../../../../../../content/dam/volvo-media/list-icons/mute.svg#mute-icon-w16-view");
  }
}

.img__asset .s7container {
  z-index: 1;
}

.img__asset .s7videoplayer,
.img__asset .s7smartcropvideoplayer {
  position: relative;
}

.img__asset .s7videoplayer [mode='normal'],
.img__asset .s7smartcropvideoplayer [mode='normal'] {
  background-color: rgba(0, 0, 0, 0);
}

.img__asset .s7videoviewer .hidden,
.img__asset .s7videoviewer .s7socialshare,
.img__asset .s7smartcropvideoviewer .hidden,
.img__asset .s7smartcropvideoviewer .s7socialshare {
  display: none;
}

.img__asset .s7dm-smartcropvideo-media {
  height: 100% !important;
}

.img__asset .s7dm-smartcropvideo-media,
.img__asset .s7dm-dynamic-media {
  cursor: pointer;
}

.img__asset .s7videoviewer.s7mouseinput .s7videoplayer .s7iconeffect[state='play'],
.img__asset .s7videoviewer.s7mouseinput .s7smartcropvideoplayer .s7iconeffect[state='play'],
.img__asset .s7videoviewer.s7touchinput .s7videoplayer .s7iconeffect[state='play'],
.img__asset .s7videoviewer.s7touchinput .s7smartcropvideoplayer .s7iconeffect[state='play'],
.img__asset .s7smartcropvideoviewer.s7mouseinput .s7videoplayer .s7iconeffect[state='play'],
.img__asset .s7smartcropvideoviewer.s7mouseinput .s7smartcropvideoplayer .s7iconeffect[state='play'],
.img__asset .s7smartcropvideoviewer.s7touchinput .s7videoplayer .s7iconeffect[state='play'],
.img__asset .s7smartcropvideoviewer.s7touchinput .s7smartcropvideoplayer .s7iconeffect[state='play'] {
  z-index: 9999;
  pointer-events: all !important;
}

.img__asset__smart-crop-video [mode='normal'] .s7smartcropvideoplayer {
  background-color: rgba(0, 0, 0, 0);
}

.img__asset__smart-crop-video [mode='normal'] .s7smartcropvideoplayer video.poster--active {
  object-fit: cover;
  min-width: 100%;
  min-height: 100%;
  top: 0 !important;
  left: 0 !important;
}

.img__asset__smart-crop-video .video__overlay [mode='normal'] video.poster--active {
  -webkit-transform: translate(0, 0) !important;
          transform: translate(0, 0) !important;
}

.img__asset__smart-crop-video [mode='normal'] video.fix--alignment {
  top: 0 !important;
  left: 0 !important;
  -webkit-transform: translate(0, 0) !important;
          transform: translate(0, 0) !important;
}

@media (max-width: 959px) {
  .img__asset__smart-crop-video [mode='normal'] video:not(.fix--alignment) {
    top: 0 !important;
    left: 0 !important;
  }
}

@media (max-width: 959px) and (orientation: landscape) {
  .img__asset__smart-crop-video [mode='normal'] video:not(.fix--alignment) {
    -webkit-transform: translate(0, 0) !important;
            transform: translate(0, 0) !important;
  }
}

@media (max-width: 959px) {
  .img__asset__smart-crop-video [mode='fullscreen'] video {
    min-height: -webkit-fit-content !important;
    min-height: -moz-fit-content !important;
    min-height: fit-content !important;
  }
}

@media (max-width: 959px) and (orientation: landscape) {
  .img__asset__smart-crop-video [mode='fullscreen'] video {
    -webkit-transform: translate(0, 0) !important;
            transform: translate(0, 0) !important;
    top: 0 !important;
    left: 0 !important;
    object-fit: cover !important;
    min-width: 100%;
  }
}

@media (max-width: 959px) {
  .teaser .img__asset__smart-crop-video [mode='fullscreen'] video.fix--alignment {
    min-height: -webkit-fit-content;
    min-height: -moz-fit-content;
    min-height: fit-content;
  }
}

.img__asset__smart-crop-video .video__overlay__button {
  z-index: 10;
}

.img__asset .s7videoplayer video {
  width: inherit !important;
  height: inherit !important;
  top: 0 !important;
  left: 0 !important;
}

.img__asset .s7subtitle .s7innercontrolbarcontainer > .s7videotime {
  right: 132px !important;
}

.img__asset .s7subtitle .s7innercontrolbarcontainer > .s7videotime.no-s7caption {
  right: 100px !important;
}

.img__asset .s7subtitle .s7videoscrubber {
  max-width: calc(100% - 230px);
}

.img__asset .s7subtitle .s7videoscrubber.no-s7caption {
  max-width: calc(100% - 200px);
}

.img__asset .s7subtitle .s7closedcaptionbutton {
  left: calc(100% - 4 * 32px);
}

.img__asset .s7subtitle .s7languageswitchbutton {
  width: 28px;
  height: 28px;
  position: absolute;
  top: 4px;
  left: calc(100% - 3 * 32px);
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button {
  height: 100%;
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button:before {
  font-family: "VolvoIcons";
  content: "";
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  vertical-align: baseline;
  color: #e1dfdd;
  display: inline-block;
  line-height: 0;
  /* Better Font Rendering =========== */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button:hover {
  background-color: #53565a;
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button::before {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
  -webkit-filter: drop-shadow(1px 1px 1px rgba(0, 0, 0, 0.5));
          filter: drop-shadow(1px 1px 1px rgba(0, 0, 0, 0.5));
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button.s7button-disabled:hover {
  background-color: rgba(0, 0, 0, 0);
  cursor: default;
}

.img__asset .s7subtitle .s7languageswitchbutton .s7button.s7button-disabled::before {
  color: #53565a;
}

.img__asset .s7subtitle .s7languageswitchbutton ul {
  display: none;
}

.img__asset .s7subtitle .s7languageswitchbutton li::first-letter {
  text-transform: capitalize;
}

.img__asset .s7subtitle .s7languageswitchbutton li:hover {
  color: #000;
}

.img__asset .s7subtitle .s7languageswitchbutton:hover ul {
  display: block;
  position: absolute;
  bottom: 100%;
  background-color: #e1dfdd;
  padding: 15px 20px;
  right: 50%;
  text-align: center;
  -webkit-transform: translateX(50%);
          transform: translateX(50%);
}

.img__asset .s7subtitle video {
  z-index: 0 !important;
}

.img__asset .s7subtitle.s7controlbar__portable .s7languageswitchbutton {
  width: auto;
  height: 76%;
  top: 12%;
  right: calc(2 * 32px);
  left: initial;
  aspect-ratio: 3/4;
}

.img__asset .s7subtitle.s7controlbar__portable .s7languageswitchbutton .s7button::before {
  font-size: xx-large;
}

.img__asset .s7subtitle.s7controlbar__portable .s7videoscrubber {
  max-width: calc(100% - 56px * 6);
}

.img__asset .s7subtitle.s7controlbar__portable .s7videoscrubber.no-s7caption {
  max-width: calc(100% - 56px * 5);
}

.image__slimHeight .img__asset__video, .image__slimHeight .img__asset__smart-crop-video,
.image__standardHeight .img__asset__video,
.image__standardHeight .img__asset__smart-crop-video,
.background__video .img__asset__video,
.background__video .img__asset__smart-crop-video {
  position: relative;
  /*
             * this is overriding the calculated sizes and positions which are switching back to a visible box according to the
             * aspect ratio of the video, we need a filled box with a centered video cropped by the visible box of the container
             */
}

.image__slimHeight .img__asset__video .cq-dd-image, .image__slimHeight .img__asset__smart-crop-video .cq-dd-image,
.image__standardHeight .img__asset__video .cq-dd-image,
.image__standardHeight .img__asset__smart-crop-video .cq-dd-image,
.background__video .img__asset__video .cq-dd-image,
.background__video .img__asset__smart-crop-video .cq-dd-image {
  width: 100%;
  height: 100%;
}

.image__slimHeight .img__asset__video .s7videoviewer,
.image__slimHeight .img__asset__video .s7responsiveViewer, .image__slimHeight .img__asset__smart-crop-video .s7videoviewer,
.image__slimHeight .img__asset__smart-crop-video .s7responsiveViewer,
.image__standardHeight .img__asset__video .s7videoviewer,
.image__standardHeight .img__asset__video .s7responsiveViewer,
.image__standardHeight .img__asset__smart-crop-video .s7videoviewer,
.image__standardHeight .img__asset__smart-crop-video .s7responsiveViewer,
.background__video .img__asset__video .s7videoviewer,
.background__video .img__asset__video .s7responsiveViewer,
.background__video .img__asset__smart-crop-video .s7videoviewer,
.background__video .img__asset__smart-crop-video .s7responsiveViewer {
  overflow: hidden;
}

.image__slimHeight .img__asset__video .s7videoplayer,
.image__slimHeight .img__asset__video .s7smartcropvideoplayer, .image__slimHeight .img__asset__smart-crop-video .s7videoplayer,
.image__slimHeight .img__asset__smart-crop-video .s7smartcropvideoplayer,
.image__standardHeight .img__asset__video .s7videoplayer,
.image__standardHeight .img__asset__video .s7smartcropvideoplayer,
.image__standardHeight .img__asset__smart-crop-video .s7videoplayer,
.image__standardHeight .img__asset__smart-crop-video .s7smartcropvideoplayer,
.background__video .img__asset__video .s7videoplayer,
.background__video .img__asset__video .s7smartcropvideoplayer,
.background__video .img__asset__smart-crop-video .s7videoplayer,
.background__video .img__asset__smart-crop-video .s7smartcropvideoplayer {
  position: absolute;
  width: 100% !important;
  height: 100% !important;
}

.image__slimHeight .img__asset__video [mode='normal'] video, .image__slimHeight .img__asset__smart-crop-video [mode='normal'] video,
.image__standardHeight .img__asset__video [mode='normal'] video,
.image__standardHeight .img__asset__smart-crop-video [mode='normal'] video,
.background__video .img__asset__video [mode='normal'] video,
.background__video .img__asset__smart-crop-video [mode='normal'] video {
  position: absolute;
  min-width: 100%;
  min-height: 100%;
  object-fit: cover !important;
}

@media (min-width: 768px) {
  .image__slimHeight .img__asset__video [mode='normal'] video, .image__slimHeight .img__asset__smart-crop-video [mode='normal'] video,
  .image__standardHeight .img__asset__video [mode='normal'] video,
  .image__standardHeight .img__asset__smart-crop-video [mode='normal'] video,
  .background__video .img__asset__video [mode='normal'] video,
  .background__video .img__asset__smart-crop-video [mode='normal'] video {
    -webkit-transform: translate(0, 0) !important;
            transform: translate(0, 0) !important;
    top: 0 !important;
    left: 0 !important;
  }
}

.image__slimHeight .img__asset__video [mode='normal'] video.fix--alignment, .image__slimHeight .img__asset__smart-crop-video [mode='normal'] video.fix--alignment,
.image__standardHeight .img__asset__video [mode='normal'] video.fix--alignment,
.image__standardHeight .img__asset__smart-crop-video [mode='normal'] video.fix--alignment,
.background__video .img__asset__video [mode='normal'] video.fix--alignment,
.background__video .img__asset__smart-crop-video [mode='normal'] video.fix--alignment {
  -webkit-transform: translate(0, 0) !important;
          transform: translate(0, 0) !important;
  top: 0 !important;
  left: 0 !important;
}

.background__video .img__asset__video .s7controlbar,
.background__video .img__asset__video .s7iconeffect, .background__video .img__asset__smart-crop-video .s7controlbar,
.background__video .img__asset__smart-crop-video .s7iconeffect {
  display: none;
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3RhcmdldC92YXVsdC13b3JrL2pjcl9yb290L2FwcHMvdm9sdm8vY2xpZW50bGlicy9zaGFyZWQvY29tcG9uZW50cy9jb250ZW50L2ltYWdlL3ZpZGVvL3ZpZGVvLmJ1bmRsZS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCO0FBQ2pCOzs7OztFQUtFO0FBQ0Y7OztFQUdFO0FBQ0Y7O0dBRUc7QUFDSDtFQUNFLG9CQUFvQjtDQUNyQjs7QUFFRDtFQUNFO0lBQ0Usb0JBQW9CO0dBQ3JCO0NBQ0Y7O0FBRUQ7RUFDRSwwQkFBMEI7RUFDMUIsMkJBQTJCO0NBQzVCOztBQUVEO0VBQ0UsbUJBQW1CO0NBQ3BCOztBQUVEO0VBQ0UscUJBQXFCO0VBQ3JCLG1CQUFtQjtFQUNuQixjQUFjO0VBQ2QsYUFBYTtFQUNiLGlCQUFpQjtDQUNsQjs7QUFFRDtFQUNFLGNBQWM7Q0FDZjs7QUFFRDtFQUNFO0lBQ0UsZ0JBQWdCO0dBQ2pCO0NBQ0Y7O0FBRUQ7RUFDRSxnQkFBZ0I7RUFDaEIsS0FBSztFQUNMLHVCQUF1QjtFQUN2QixzQkFBc0I7Q0FDdkI7O0FBRUQ7RUFDRTtJQUNFLHFDQUE2QjtZQUE3Qiw2QkFBNkI7R0FDOUI7Q0FDRjs7QUFFRDtFQUNFO0lBQ0UscUNBQTZCO1lBQTdCLDZCQUE2QjtHQUM5QjtDQUNGOztBQUVEO0VBQ0U7SUFDRSxjQUFjO0dBQ2Y7Q0FDRjs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtDRTtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ0U7QUFDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZERTtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0NFO0FBQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdCRTtBQUNGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLDZCQUE2QjtDQUM5Qjs7QUFFRDtFQUNFOzs7OztJQUtFLDhDQUFzQztZQUF0QyxzQ0FBc0M7SUFDdEMsa0JBQWtCO0lBQ2xCLG1CQUFtQjtHQUNwQjtDQUNGOztBQUVEOzs7OztFQUtFLDhDQUFzQztVQUF0QyxzQ0FBc0M7RUFDdEMsa0JBQWtCO0VBQ2xCLG1CQUFtQjtDQUNwQjs7QUFFRDs7O0VBR0UsY0FBYztDQUNmIiwiZmlsZSI6Ii4uL3RhcmdldC92YXVsdC13b3JrL2pjcl9yb290L2FwcHMvdm9sdm8vY2xpZW50bGlicy9zaGFyZWQvY29tcG9uZW50cy9jb250ZW50L2ltYWdlL3ZpZGVvL3ZpZGVvLmJ1bmRsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG4vKlxuQWxzbyBwbGVhc2UgZm9sbG93IHRoaXNcbkRvIHlvdXIgcHJvamVjdCBoYXZlIGRpZmVyZW50IGNoYXJzZXQgbGFuZ3VhZ2VzIHRvIGFjY291bnQgd2l0aD9cbiAgICAgIC0gWWVzIC0+IGZvbGxvdyBodHRwczovL3Byb2plY3RzLm5ldGNlbnRyaWMuYml6L3dpa2kvZGlzcGxheS9GUk9OVEVORC9DU1MrLStGb250K05vcm1hbGl6YXRpb25cbiAgICAgIC0gTm8gLT4gWW91IGNhbiBzdGlsbCB1c2UgaXQsIHRoZXJlIGFyZSB0b25zIG9mIGFkdmFudGFnZXMsIGJ1dCBpdHMgY3JlYXRlIHNvbWUgZXh0cmEgY3NzIGFuZCBsYXlvdXQgcmVuZGVyaW5nXG4qL1xuLypcbiAgKiBEZXNpZ24gc3BlYzpcbiAgKiBodHRwczovL3d3dy5maWdtYS5jb20vZmlsZS9TUjRydlFsTm5DbVBNclE5V1lhSXF2L2JyYW5jaC9USnFrRnltcTA5d2Y4S3dtWTFXTmNqL1ZvbHZvLUFFTS1EZXNpZ24tc3lzdGVtP3R5cGU9ZGVzaWduJm5vZGUtaWQ9Ny0yNiZ0PXBBbTkxNlZSaXFDT0QySTEtMFxuKi9cbi8qKlxuICogei1pbmRleGVzIGZyb20gbG93ZXIgdG8gLT4gaGlnaGVyXG4gKi9cbjpyb290IHtcbiAgLS12LWljb24tc2l6ZTogMjRweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIDpyb290IHtcbiAgICAtLXYtaWNvbi1zaXplOiAxNnB4O1xuICB9XG59XG5cbi52LWljb24ge1xuICB3aWR0aDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLXYtaWNvbi1zaXplKTtcbn1cblxuLnYtaWNvbiBzdmcgcGF0aCB7XG4gIGZpbGw6IGN1cnJlbnRDb2xvcjtcbn1cblxuLnYtaWNvbi1zcHJpdGUge1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXgtaGVpZ2h0OiAwO1xuICBtYXgtd2lkdGg6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi52LWljb24tLTE2IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC52LWljb24tLTE2IHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cbn1cblxuLnYtaWNvbi0tMjQge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIHk6IDA7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlICovXG4gIC8qIHN0eWxlbGludC1lbmFibGUgKi9cbn1cblxuQG1lZGlhIG5vdCBhbGwgYW5kIChtaW4tcmVzb2x1dGlvbjogMC4wMDFkcGNtKSB7XG4gIC52LWljb24tLTI0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE2cHgpO1xuICB9XG59XG5cbkBzdXBwb3J0cyAoLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lKSB7XG4gIC52LWljb24tLTI0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE2cHgpO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkge1xuICAudi1pY29uLS0yNCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4vKmRvY1xuLS0tXG50aXRsZTogUGl4ZWwgdG8gZW1cbm5hbWU6IG5uLXB4LXRvLWVtXG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cblxuQ2FsY3VsYXRlIHRoZSBlbSB3aXRoIGEgZ2l2ZW4gcGl4ZWwgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBmb250IHNpemVcbklmIHlvdSBkb24ndCBzZXQgYSAkYmFzZSB0aGUgJGJhc2UtZm9udC1zaXplIGlzIHVzZWQgYXMgdGhlIGNvbnRleHRcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXB0dVxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcbkBwYXJhbWV0ZXIgJGJhc2UgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxubm4tc3RyaXAtdW5pdFxuXG5cbiMjIEV4YW1wbGVcbi0tLVxuYGBgaHRtbF9leGFtcGxlXG5ubi1weC10by1lbSg1KSAvLyBPdXRwdXQ6IDAuMzEyNWVtXG5ubi1weC10by1lbSg1LCAxMCkgLy8gT3V0cHV0OiAwLjVlbVxubm4tcHgtdG8tZW0oNSwgMjApIC8vIE91dHB1dDogMC4yNWVtXG5gYGBcbiovXG4vKmRvY1xuLS0tXG50aXRsZTogUGl4ZWwgdG8gcmVtXG5uYW1lOiBubi1weC10by1yZW1cbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5DYWxjdWxhdGUgdGhlIHJlbSB3aXRoIGEgZ2l2ZW4gcGl4ZWwgd2l0aCB0aGUgZ2l2ZW4gYmFzZSBmb250IHNpemVcblxuSW46ICA1cHhcbk91dDogMC4zMTI1cmVtXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cbi1yZW1cblxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHZhbHVlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5cblxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cbm5uLXN0cmlwLXVuaXRcblxuIyMgRXhhbXBsZVxuLS0tXG5gYGBodG1sX2V4YW1wbGVcbm5uLXB4LXRvLXJlbSg1KSAvLyBPdXRwdXQgMC4zMTI1cmVtXG5gYGBcblxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byB1bml0XG5uYW1lOiBweC10by11bml0XG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuU2V0IGEgcHJvcGVydHkgYW5kIHZhbHVlIChwaXhlbCBiYXNlZCB3aXRob3V0IHVuaXQpXG5cbkNhbGN1bGF0ZXMgcmVtIC8gZW0gLyAlIGZyb20gZ2l2ZW4gcGl4ZWwgYW5kIGJhc2UgKGRlZmF1bHQgYmFzZSBpcyB0aGVcbmJhc2UtZm9udC1zaXplLCAxNnB4KVxuSWYgcnRsIGlzIHRydWUsIHRoaXMgbWl4aW4gaGFuZGxlcyBhbGwgdGhlIGRpcmVjdGlvbiBzdHVmZjpcbi0gU3dpdGNoaW5nIHRoZSB2YWx1ZXMsIHdoZW4gd2UgaGF2ZSBleGFjdGx5IDQgdmFsdWVzXG4tIFN3aXRjaGluZyBsZWZ0IGFuZCByaWdodCBpbiBwcm9wZXJ0aWVzIChwYWRkaW5nIGFuZCBtYXJnaW4pXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cbi1wdHUgKGZvciBlbSBvciAlIHRvIHBpeGVsIC0gd2l0aCBiYXNlIHBhcmFtZXRlcilcbi1yZW0gKGZvciByZW0gdG8gcGl4ZWwgLSB3aXRob3V0IGJhc2UgcGFyYW1ldGVyKVxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkcHJvcGVydHkgPSBwYWRkaW5nIHwgbWFyZ2luIHwgZm9udC1zaXplIHwgd2lkdGggfCBoZWlnaHRcbkBwYXJhbWV0ZXIgJHZhbHVlID0gUGl4ZWwgYmFzZWQgbnVtYmVyIC0gYWRkIHB4IHRvIGtlZXAgdGhlIHB4IGZvciBhIHZhbHVlXG5AcGFyYW1ldGVyICRiYXNlID0gcHggYmFzZWQgbnVtYmVyLCBEZWZhdWx0OiAxNnB4XG5AcGFyYW1ldGVyICR1bml0ID0gU2V0IHVuaXQ6IHB4IHwgZW0gfCByZW0gfCBwZXJjZW50XG5cblxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cbmFic3RyYWN0L2Z1bmN0aW9ucy9zd2FwLWxlZnQtcmlnaHRcbmFic3RyYWN0L2Z1bmN0aW9ucy9zdHJpcC11bml0XG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLCAwIDEwcHggMjAgMCk7ID0+IHBhZGRpbmc6IDAgMTBweCAxLjI1cmVtIDA7XG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmcsIDAgMTAgMjAgMCk7ID0+IHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbSAwO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLWxlZnQsIDEwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQocGFkZGluZy1yaWdodCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYXJnaW4sIDAgMTAgMjAgMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbi1sZWZ0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbi1yaWdodCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChmb250LXNpemUsIDIwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQod2lkdGgsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1pbi13aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFubi13aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQoaGVpZ2h0LCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtaW4taGVpZ2h0LCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYW5uLWhlaWdodCwgMTAwKTtcbmBgYFxuXG5cbiMjIFNvdXJjZVxuLS0tXG5odHRwOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2xlc3MtbWl4aW4tZm9yLXJlbS1mb250LXNpemluZy9cblxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byB1bml0bGVzc1xubmFtZTogbm4tcHgtdG8tdW5pdGxlc3NcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5UaGlzIG1ha2VzIHRoZSBzYW1lIGNhbGN1bGF0aW9uIGFzIHB4IHRvIGVtLiBCdXQgaXQgZG9uJ3QgcHJpbnQgb3V0IHRoZSB1bml0LlxuXG5Vc2UgdGhpcyBmb3IgbGluZS1oZWlnaHRzLlxuXG5cbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG5cblxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHZhbHVlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5AcGFyYW1ldGVyICRiYXNlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5cblxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cblxuXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbmxpbmUtaGVpZ2h0OiBubi1weC10by11bml0bGVzcyg1KSAvLyBPdXRwdXQ6IDAuMzEyNVxuYGBgXG5cblxuIyMgU291cmNlXG4tLS1cblxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IFN0cmlwIHVuaXRcbm5hbWU6IG5uLXN0cmlwLXVuaXRcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5TdHJpcHMgb2YgdGhlIHVuaXQgb2YgYSBudW1iZXJcblxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG51bSA9IG51bWJlciB3aXRoIHVuaXQgKDVweCwgNWVtLCA1cmVtKVxuXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbm5uLXN0cmlwLXVuaXQoNXB4KSAvL091dHB1dDogNVxubm4tc3RyaXAtdW5pdCgxMGVtKSAvLyBPdXRwdXQ6IDEwXG5ubi1zdHJpcC11bml0KDE1cmVtKSAvLyBPdXRwdXQ6IDE1XG5gYGBcblxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiB6LWluZGV4XG5uYW1lOiBubi16LWluZGV4XG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cbiBcbkJlY2F1c2Ugei1pbmRpY2VzIGNhbiBnZXQgdHJpY2t5IHdlIG1hbmFnZSB0aGVtIGluIHRoZSB0aGVtZS5zY3NzIGdsb2JhbGx5LlxuXG5BbHdheXMgdXNlIHRoaXMgbWl4aW4gdG8gc2V0IHNldCBhIHotaW5kZXguXG4gIFxuUmVhZCB0aGUgQmVzdCBQcmFjdGljZSB0byBnZXQgYW4gZnVsbCBkb2N1bWVudGF0aW9uOlxuaHR0cHM6Ly9wcm9qZWN0cy5uZXRjZW50cmljLmJpei93aWtpL2Rpc3BsYXkvRlJPTlRFTkQvSG93K3RvK3NldCthK3otaW5kZXhcbiBcbiBcbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG4telxuIFxuIFxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRlbGVtZW50ID0gTmFtZSBvZiB0aGUgZWxlbWVudCAobm9ybWFsbHkgdGhpcyB3aWxsIGJlIHRoZSBtb2R1bGUgbmFtZSBmb3IgdGhlIG1haW4gc3RhY2spXG5AcGFyYW1ldGVyICRsaXN0ID0gTmFtZSBvZiB0aGUgbGlzdCAoZGVmYXVsdCAkei1pbmRpY2VzKS4gTXVzdCBiZSBvbmx5IHNldCBmb3Igc3RhY2sgY29udGV4dFxuQHBhcmFtZXRlciAkbWluID0gU2V0IGEgbWluaW11bSB6LWluZGV4IHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3QuXG5cbiBcbiMjIERlcGVuZGVuY2llc1xuLS0tXG4kei1pbmRpY2VzIHZhcmlhYmxlIGluIHRoZSB0aGVtZS5zY3NzXG5cblxuIyMgRXhhbXBsZVxuLS0tXG4gIFxuYGBgaHRtbF9leGFtcGxlXG5cbi8vIEluIHRoZSBTQVNTIHRoZW1lIGZpbGVcblxuJHotaW5kaWNlczogc2xpZGVyLCBtb2RhbCwgZGlhbG9nLCBuYXZpZ2F0aW9uO1xuXG5cbi8vIEluIHRoZSBTQVNTIG1vZHVsZSBmaWxlXG5cbi5tb2RhbCB7XG4gICAgJl9fYmFzZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogbm4tei1pbmRleChtb2RhbCk7XG4gICAgfVxufVxuYGBgXG4gXG5cbiMjIFNvdXJjZVxuLS0tXG5odHRwOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTQvMDYvMTIvc2Fzc3ktei1pbmRleC1tYW5hZ2VtZW50LWZvci1jb21wbGV4LWxheW91dHMvXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IHJlbW92ZSBldmVyeSB1bml0XG5uYW1lOiBzdHJpcC11bml0XG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cbnJlbW92ZSBhbGwgdW5pdHNcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRudW1iZXIgPSBudW1iZXIgd2l0aCB1bml0XG5cbiMjIEV4YW1wbGVcbi0tLVxuYGBgaHRtbF9leGFtcGxlXG5zdHJpcC11bml0KDVweCkgLy8gT3V0cHV0OiA1XG5gYGBcbiovXG4vKmRvY1xuLS0tXG50aXRsZTogU3dhcCBsZWZ0IHJpZ2h0IHZhbHVlc1xubmFtZTogbm4tcnRsXG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cblxuU3dhcCB0aGUgbmFtZXMgcmlnaHQgYW5kIGxlZnQgd2hlbiAkcnRsIGlzIHNldCB0byB0cnVlLlxuSWYgdGhlIHZhbHVlIGlzIG5vdCByaWdodCBvciBsZWZ0IGl0IHJldHVybnMgdGhlIG9yaWdpbmFsIHZhbHVlLlxuXG5JbjogIHJpZ2h0XG5PdXQ6IGxlZnQgKGluIHJ0bCksIHJpZ2h0IChpbiBsdHIpXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cblxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkb3JpZ2luID0gcmlnaHQgfCBsZWZ0XG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubm4tcnRsKGxlZnQpOiAxMHB4O1xubm4tcnRsKHBhZGRpbmctcmlnaHQpOiAzMHB4O1xubm4tcnRsKDAgMXB4IDhweCAxMnB4KSAvLyAwIDEycHggOHB4IDFweFxuYGBgXG5cblxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBDbGVhcmZpeFxubmFtZTogY2xlYXJmaXhcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5DbGVhcnMgYWZ0ZXIgZmxvYXRpbmcgZWxlbWVudFxuXG5Vc2UgdGhpcyBtaXhpbiBvbmx5IGluc2lkZSBtZWRpYSBxdWVyaWVzIHdoZXJlIHlvdSBjYW4ndCB1c2UgdGhlXG5hYnN0cmFjdC9leHRlbmRzL3V0aWxzL19jbGVhcmZpeCB2ZXJzaW9uLCB3aGljaCBhZGRzIGxlc3MgY29kZSB0byBjc3NcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgY2xlYXJmaXg7XG5gYGBcblxuXG4jIyBTb3VyY2Vcbi0tLVxuaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvY2xlYXItZml4L1xuKi9cbi5pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMzJweDtcbiAgaGVpZ2h0OiAzMnB4O1xufVxuXG4vKiBkb2Ncbi0tLVxudGl0bGU6IGZvY3VzIGNvbG9yXG5uYW1lOiBmb2N1cyBjb2xvclxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkFkZCBhIGZvY3VzIGNvbG9yIHdoZW4ga2V5Ym9hcmQtZm9jdXMgaXMgYWN0aXZhdGVkXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbSAkbnVtYmVyXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IGlnbm9yZS1jb250YWluZXJcbm5hbWU6IGlnbm9yZS1jb250YWluZXJcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5TZXQgZnVsbCBwYWdlIHdpZHRoIGZvciBzb21ldGhpbmcgaW5zaWRlIGEgY29udGFpbmVyXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtICRjb250YWluZXItc2l6ZVxuQHBhcmFtICRndXR0ZXJcblxuKi9cbi8qIEdlbmVyYXRlcyBhbGwgdGhlIHJ1bGVzIGZvciB0aGUgZ3JpZCBjb2x1bW5zIHVwIHRvIHRoZSBnaXZlbiBhbW91bnQgb2YgY29sdW1uICovXG4vKiBHZW5lcmF0ZXMgYWxsIHRoZSBydWxlcyBmb3IgdGhlIGdyaWQgY29sdW1uIG9mZnNldCB1cCB0byB0aGUgZ2l2ZW4gYW1vdW50IG9mIGNvbHVtbiAqL1xuLyogR2VuZXJhdGVzIGFsbCB0aGUgcnVsZXMgZm9yIHRoZSBncmlkIGFuZCBjb2x1bW5zIGZvciB0aGUgZ2l2ZW4gYnJlYWsgcG9pbnQgYW5kIHRvdGFsIG9mIGNvbHVtbnMgKi9cbi8qIEFQSSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gZ2VuZXJhdGUgYSBncmlkIGNvbmZpZyAqL1xuLypkb2Ncbi0tLVxudHlwZTogYnV0dG9uIHR5cGVcbnN0YXRlOiBzdGF0ZSBidXR0b25cbi0tLVxuXG5CdXR0b24gc3R5bGVzXG5cblVzZSB0aGlzIG1peGluIGZvciBidXR0b24gc3R5bGVzOiBjb2xvciB0ZXh0LCBiYWNrZ3JvdW5kLCBib3JkZXJcblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBidXR0b24ocHJpbWFyeSk7XG5gYGBcbiovXG4vKmRvY1xuLS0tXG5saW5lTGltaXQ6IFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbGluZXMgYWZ0ZXIgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBjbGFtcGVkLiBJdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuLS0tXG5cblRydW5jYXRlcyB0ZXh0IGF0IGEgc3BlY2lmaWMgbnVtYmVyIG9mIGxpbmVzLlxuXG5Vc2UgdGhpcyBtaXhpbiB0byBoaWRlIGxvbmcgdGV4dC5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgbGluZS1jbGFtcCgkbGluZUxpbWl0OiA0KTtcbmBgYFxuKi9cbi8qIHR5cG9ncmFwaHlcbi0tLVxudGl0bGU6IHR5cG9ncmFwaHlcbm5hbWU6IFR5cG9ncmFwaHlcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5BZGRzIGZvbnQgQ1NTIHByb3BlcnRpZXMgYnkgYSBtYXAgcHJvdmlkZWRcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJHQtc3R5bGVcbkBwYXJhbSAkaXMtaW1wb3J0YW50OiBmYWxzZVxuXG4qICR0LXN0eWxlIGlzIGV4cGVjdGVkIHRvIGJlIGEgbWFwIHdpdGggJ2RlZmF1bHQnIGFuZCAnYnJlYWtwb2ludFtzXScgc3VibWFwcyB3aXRoIGEgcHJvcGVydHlcbmZvciBldmVyeSBjc3MgcHJvcGVydHkgdG8gYmUgc2V0LlxuKiAkaXMtaW1wb3J0YW50IHBhcmFtZXRlciBhbGxvd3MgdG8gZm9yY2UgdHlwb2dyYXBoeSBwcm9wZXJ0aWVzIHRvIGJlIHNldCBhcyAhaW1wb3J0YW50XG5UcnkgdG8gYXZvaWQgaXRzIHVzZSwgYnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCBmb3Igc2l0dWF0aW9ucyB3aGVyZSBzdHlsZXMgZm9yIGEgY29tcG9uZW50XG5hcmUgdmVyeSBzcGVjaWZpYyBhbmQgdG8gb3ZlcndyaXRlIHRoZSBnZW5lcmljIG9uZXMgaXMgdG9vIGNvbXBsZXggKGlmIHRoZXkgaGF2ZSBhIGxvdCBvZiBzcGVjaWZpY2l0eSlcblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogaGlkZGVuXG5uYW1lOiBoaWRkZW5cbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5IaWRlIGZyb20gYm90aCBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2VyczogaDVicC5jb20vdVxuIyMgUGFyYW1ldGVyc1xuLS0tXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IG92ZXJsYXlcbm5hbWU6IG92ZXJsYXlcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5DcmVhdGVzIGFuIG92ZXJsYXkgd2l0aCB0aGUgcHJvdmlkZWQgYmFja2dyb3VuZCBjb2xvclxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJGJnQ29sb3JcblxuKi9cbi8qXG5BbHNvIHBsZWFzZSBmb2xsb3cgdGhpc1xuRG8geW91ciBwcm9qZWN0IGhhdmUgZGlmZXJlbnQgY2hhcnNldCBsYW5ndWFnZXMgdG8gYWNjb3VudCB3aXRoP1xuICAgICAgLSBZZXMgLT4gZm9sbG93IGh0dHBzOi8vcHJvamVjdHMubmV0Y2VudHJpYy5iaXovd2lraS9kaXNwbGF5L0ZST05URU5EL0NTUystK0ZvbnQrTm9ybWFsaXphdGlvblxuICAgICAgLSBObyAtPiBZb3UgY2FuIHN0aWxsIHVzZSBpdCwgdGhlcmUgYXJlIHRvbnMgb2YgYWR2YW50YWdlcywgYnV0IGl0cyBjcmVhdGUgc29tZSBleHRyYSBjc3MgYW5kIGxheW91dCByZW5kZXJpbmdcbiovXG4vKlxuICAqIERlc2lnbiBzcGVjOlxuICAqIGh0dHBzOi8vd3d3LmZpZ21hLmNvbS9maWxlL1NSNHJ2UWxObkNtUE1yUTlXWWFJcXYvYnJhbmNoL1RKcWtGeW1xMDl3ZjhLd21ZMVdOY2ovVm9sdm8tQUVNLURlc2lnbi1zeXN0ZW0/dHlwZT1kZXNpZ24mbm9kZS1pZD03LTI2JnQ9cEFtOTE2VlJpcUNPRDJJMS0wXG4qL1xuLyoqXG4gKiB6LWluZGV4ZXMgZnJvbSBsb3dlciB0byAtPiBoaWdoZXJcbiAqL1xuOnJvb3Qge1xuICAtLXYtaWNvbi1zaXplOiAyNHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgOnJvb3Qge1xuICAgIC0tdi1pY29uLXNpemU6IDE2cHg7XG4gIH1cbn1cblxuLnYtaWNvbiB7XG4gIHdpZHRoOiB2YXIoLS12LWljb24tc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tdi1pY29uLXNpemUpO1xufVxuXG4udi1pY29uIHN2ZyBwYXRoIHtcbiAgZmlsbDogY3VycmVudENvbG9yO1xufVxuXG4udi1pY29uLXNwcml0ZSB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1heC1oZWlnaHQ6IDA7XG4gIG1heC13aWR0aDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnYtaWNvbi0tMTYge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHtcbiAgLnYtaWNvbi0tMTYge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgfVxufVxuXG4udi1pY29uLS0yNCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgeTogMDtcbiAgLyogc3R5bGVsaW50LWRpc2FibGUgKi9cbiAgLyogc3R5bGVsaW50LWVuYWJsZSAqL1xufVxuXG5AbWVkaWEgbm90IGFsbCBhbmQgKG1pbi1yZXNvbHV0aW9uOiAwLjAwMWRwY20pIHtcbiAgLnYtaWNvbi0tMjQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7XG4gIH1cbn1cblxuQHN1cHBvcnRzICgtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmUpIHtcbiAgLnYtaWNvbi0tMjQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC52LWljb24tLTI0IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byBlbVxubmFtZTogbm4tcHgtdG8tZW1cbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5DYWxjdWxhdGUgdGhlIGVtIHdpdGggYSBnaXZlbiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBiYXNlIGZvbnQgc2l6ZVxuSWYgeW91IGRvbid0IHNldCBhICRiYXNlIHRoZSAkYmFzZS1mb250LXNpemUgaXMgdXNlZCBhcyB0aGUgY29udGV4dFxuXG5cbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG4tcHR1XG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICR2YWx1ZSA9IHBpeGVsIGJhc2VkIG51bWJlciAod2l0aG91dCB1bml0KVxuQHBhcmFtZXRlciAkYmFzZSA9IHBpeGVsIGJhc2VkIG51bWJlciAod2l0aG91dCB1bml0KVxuXG5cbiMjIERlcGVuZGVuY2llc1xuLS0tXG5ubi1zdHJpcC11bml0XG5cblxuIyMgRXhhbXBsZVxuLS0tXG5gYGBodG1sX2V4YW1wbGVcbm5uLXB4LXRvLWVtKDUpIC8vIE91dHB1dDogMC4zMTI1ZW1cbm5uLXB4LXRvLWVtKDUsIDEwKSAvLyBPdXRwdXQ6IDAuNWVtXG5ubi1weC10by1lbSg1LCAyMCkgLy8gT3V0cHV0OiAwLjI1ZW1cbmBgYFxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byByZW1cbm5hbWU6IG5uLXB4LXRvLXJlbVxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cbkNhbGN1bGF0ZSB0aGUgcmVtIHdpdGggYSBnaXZlbiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBiYXNlIGZvbnQgc2l6ZVxuXG5JbjogIDVweFxuT3V0OiAwLjMxMjVyZW1cblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXJlbVxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxubm4tc3RyaXAtdW5pdFxuXG4jIyBFeGFtcGxlXG4tLS1cbmBgYGh0bWxfZXhhbXBsZVxubm4tcHgtdG8tcmVtKDUpIC8vIE91dHB1dCAwLjMxMjVyZW1cbmBgYFxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRcbm5hbWU6IHB4LXRvLXVuaXRcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5TZXQgYSBwcm9wZXJ0eSBhbmQgdmFsdWUgKHBpeGVsIGJhc2VkIHdpdGhvdXQgdW5pdClcblxuQ2FsY3VsYXRlcyByZW0gLyBlbSAvICUgZnJvbSBnaXZlbiBwaXhlbCBhbmQgYmFzZSAoZGVmYXVsdCBiYXNlIGlzIHRoZVxuYmFzZS1mb250LXNpemUsIDE2cHgpXG5JZiBydGwgaXMgdHJ1ZSwgdGhpcyBtaXhpbiBoYW5kbGVzIGFsbCB0aGUgZGlyZWN0aW9uIHN0dWZmOlxuLSBTd2l0Y2hpbmcgdGhlIHZhbHVlcywgd2hlbiB3ZSBoYXZlIGV4YWN0bHkgNCB2YWx1ZXNcbi0gU3dpdGNoaW5nIGxlZnQgYW5kIHJpZ2h0IGluIHByb3BlcnRpZXMgKHBhZGRpbmcgYW5kIG1hcmdpbilcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXB0dSAoZm9yIGVtIG9yICUgdG8gcGl4ZWwgLSB3aXRoIGJhc2UgcGFyYW1ldGVyKVxuLXJlbSAoZm9yIHJlbSB0byBwaXhlbCAtIHdpdGhvdXQgYmFzZSBwYXJhbWV0ZXIpXG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRwcm9wZXJ0eSA9IHBhZGRpbmcgfCBtYXJnaW4gfCBmb250LXNpemUgfCB3aWR0aCB8IGhlaWdodFxuQHBhcmFtZXRlciAkdmFsdWUgPSBQaXhlbCBiYXNlZCBudW1iZXIgLSBhZGQgcHggdG8ga2VlcCB0aGUgcHggZm9yIGEgdmFsdWVcbkBwYXJhbWV0ZXIgJGJhc2UgPSBweCBiYXNlZCBudW1iZXIsIERlZmF1bHQ6IDE2cHhcbkBwYXJhbWV0ZXIgJHVuaXQgPSBTZXQgdW5pdDogcHggfCBlbSB8IHJlbSB8IHBlcmNlbnRcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxuYWJzdHJhY3QvZnVuY3Rpb25zL3N3YXAtbGVmdC1yaWdodFxuYWJzdHJhY3QvZnVuY3Rpb25zL3N0cmlwLXVuaXRcblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmcsIDAgMTBweCAyMCAwKTsgPT4gcGFkZGluZzogMCAxMHB4IDEuMjVyZW0gMDtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQocGFkZGluZywgMCAxMCAyMCAwKTsgPT4gcGFkZGluZzogMCAwLjYyNXJlbSAxLjI1cmVtIDA7XG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmctbGVmdCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLXJpZ2h0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbiwgMCAxMCAyMCAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFyZ2luLWxlZnQsIDEwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFyZ2luLXJpZ2h0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KGZvbnQtc2l6ZSwgMjApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdCh3aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWluLXdpZHRoLCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYW5uLXdpZHRoLCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChoZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1pbi1oZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hbm4taGVpZ2h0LCAxMDApO1xuYGBgXG5cblxuIyMgU291cmNlXG4tLS1cbmh0dHA6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvbGVzcy1taXhpbi1mb3ItcmVtLWZvbnQtc2l6aW5nL1xuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRsZXNzXG5uYW1lOiBubi1weC10by11bml0bGVzc1xuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblRoaXMgbWFrZXMgdGhlIHNhbWUgY2FsY3VsYXRpb24gYXMgcHggdG8gZW0uIEJ1dCBpdCBkb24ndCBwcmludCBvdXQgdGhlIHVuaXQuXG5cblVzZSB0aGlzIGZvciBsaW5lLWhlaWdodHMuXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cblxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcbkBwYXJhbWV0ZXIgJGJhc2UgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxuXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubGluZS1oZWlnaHQ6IG5uLXB4LXRvLXVuaXRsZXNzKDUpIC8vIE91dHB1dDogMC4zMTI1XG5gYGBcblxuXG4jIyBTb3VyY2Vcbi0tLVxuXG5cbiovXG4vKmRvY1xuLS0tXG50aXRsZTogU3RyaXAgdW5pdFxubmFtZTogbm4tc3RyaXAtdW5pdFxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblN0cmlwcyBvZiB0aGUgdW5pdCBvZiBhIG51bWJlclxuXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkbnVtID0gbnVtYmVyIHdpdGggdW5pdCAoNXB4LCA1ZW0sIDVyZW0pXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubm4tc3RyaXAtdW5pdCg1cHgpIC8vT3V0cHV0OiA1XG5ubi1zdHJpcC11bml0KDEwZW0pIC8vIE91dHB1dDogMTBcbm5uLXN0cmlwLXVuaXQoMTVyZW0pIC8vIE91dHB1dDogMTVcbmBgYFxuXG4qL1xuLypkb2Ncbi0tLVxudGl0bGU6IHotaW5kZXhcbm5hbWU6IG5uLXotaW5kZXhcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuIFxuQmVjYXVzZSB6LWluZGljZXMgY2FuIGdldCB0cmlja3kgd2UgbWFuYWdlIHRoZW0gaW4gdGhlIHRoZW1lLnNjc3MgZ2xvYmFsbHkuXG5cbkFsd2F5cyB1c2UgdGhpcyBtaXhpbiB0byBzZXQgc2V0IGEgei1pbmRleC5cbiAgXG5SZWFkIHRoZSBCZXN0IFByYWN0aWNlIHRvIGdldCBhbiBmdWxsIGRvY3VtZW50YXRpb246XG5odHRwczovL3Byb2plY3RzLm5ldGNlbnRyaWMuYml6L3dpa2kvZGlzcGxheS9GUk9OVEVORC9Ib3crdG8rc2V0K2Erei1pbmRleFxuIFxuIFxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cbi16XG4gXG4gXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJGVsZW1lbnQgPSBOYW1lIG9mIHRoZSBlbGVtZW50IChub3JtYWxseSB0aGlzIHdpbGwgYmUgdGhlIG1vZHVsZSBuYW1lIGZvciB0aGUgbWFpbiBzdGFjaylcbkBwYXJhbWV0ZXIgJGxpc3QgPSBOYW1lIG9mIHRoZSBsaXN0IChkZWZhdWx0ICR6LWluZGljZXMpLiBNdXN0IGJlIG9ubHkgc2V0IGZvciBzdGFjayBjb250ZXh0XG5AcGFyYW1ldGVyICRtaW4gPSBTZXQgYSBtaW5pbXVtIHotaW5kZXggd2hpY2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgbGlzdC5cblxuIFxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cbiR6LWluZGljZXMgdmFyaWFibGUgaW4gdGhlIHRoZW1lLnNjc3NcblxuXG4jIyBFeGFtcGxlXG4tLS1cbiAgXG5gYGBodG1sX2V4YW1wbGVcblxuLy8gSW4gdGhlIFNBU1MgdGhlbWUgZmlsZVxuXG4kei1pbmRpY2VzOiBzbGlkZXIsIG1vZGFsLCBkaWFsb2csIG5hdmlnYXRpb247XG5cblxuLy8gSW4gdGhlIFNBU1MgbW9kdWxlIGZpbGVcblxuLm1vZGFsIHtcbiAgICAmX19iYXNlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB6LWluZGV4OiBubi16LWluZGV4KG1vZGFsKTtcbiAgICB9XG59XG5gYGBcbiBcblxuIyMgU291cmNlXG4tLS1cbmh0dHA6Ly93d3cuc21hc2hpbmdtYWdhemluZS5jb20vMjAxNC8wNi8xMi9zYXNzeS16LWluZGV4LW1hbmFnZW1lbnQtZm9yLWNvbXBsZXgtbGF5b3V0cy9cblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogcmVtb3ZlIGV2ZXJ5IHVuaXRcbm5hbWU6IHN0cmlwLXVuaXRcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxucmVtb3ZlIGFsbCB1bml0c1xuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG51bWJlciA9IG51bWJlciB3aXRoIHVuaXRcblxuIyMgRXhhbXBsZVxuLS0tXG5gYGBodG1sX2V4YW1wbGVcbnN0cmlwLXVuaXQoNXB4KSAvLyBPdXRwdXQ6IDVcbmBgYFxuKi9cbi8qZG9jXG4tLS1cbnRpdGxlOiBTd2FwIGxlZnQgcmlnaHQgdmFsdWVzXG5uYW1lOiBubi1ydGxcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5Td2FwIHRoZSBuYW1lcyByaWdodCBhbmQgbGVmdCB3aGVuICRydGwgaXMgc2V0IHRvIHRydWUuXG5JZiB0aGUgdmFsdWUgaXMgbm90IHJpZ2h0IG9yIGxlZnQgaXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgdmFsdWUuXG5cbkluOiAgcmlnaHRcbk91dDogbGVmdCAoaW4gcnRsKSwgcmlnaHQgKGluIGx0cilcblxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG5cblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRvcmlnaW4gPSByaWdodCB8IGxlZnRcblxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5sZWZ0OiAxMHB4O1xucGFkZGluZy1yaWdodDogMzBweDtcbm5uLXJ0bCgwIDFweCA4cHggMTJweCkgLy8gMCAxMnB4IDhweCAxcHhcbmBgYFxuXG5cbiovXG4vKmRvY1xuLS0tXG50aXRsZTogQ2xlYXJmaXhcbm5hbWU6IGNsZWFyZml4XG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuQ2xlYXJzIGFmdGVyIGZsb2F0aW5nIGVsZW1lbnRcblxuVXNlIHRoaXMgbWl4aW4gb25seSBpbnNpZGUgbWVkaWEgcXVlcmllcyB3aGVyZSB5b3UgY2FuJ3QgdXNlIHRoZVxuYWJzdHJhY3QvZXh0ZW5kcy91dGlscy9fY2xlYXJmaXggdmVyc2lvbiwgd2hpY2ggYWRkcyBsZXNzIGNvZGUgdG8gY3NzXG5cblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cblxuXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbkBpbmNsdWRlIGNsZWFyZml4O1xuYGBgXG5cblxuIyMgU291cmNlXG4tLS1cbmh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2NsZWFyLWZpeC9cbiovXG4uaWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbn1cblxuLyogZG9jXG4tLS1cbnRpdGxlOiBmb2N1cyBjb2xvclxubmFtZTogZm9jdXMgY29sb3JcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5BZGQgYSBmb2N1cyBjb2xvciB3aGVuIGtleWJvYXJkLWZvY3VzIGlzIGFjdGl2YXRlZFxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJG51bWJlclxuXG4qL1xuLyogZG9jXG4tLS1cbnRpdGxlOiBpZ25vcmUtY29udGFpbmVyXG5uYW1lOiBpZ25vcmUtY29udGFpbmVyXG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuU2V0IGZ1bGwgcGFnZSB3aWR0aCBmb3Igc29tZXRoaW5nIGluc2lkZSBhIGNvbnRhaW5lclxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbSAkY29udGFpbmVyLXNpemVcbkBwYXJhbSAkZ3V0dGVyXG5cbiovXG4vKiBHZW5lcmF0ZXMgYWxsIHRoZSBydWxlcyBmb3IgdGhlIGdyaWQgY29sdW1ucyB1cCB0byB0aGUgZ2l2ZW4gYW1vdW50IG9mIGNvbHVtbiAqL1xuLyogR2VuZXJhdGVzIGFsbCB0aGUgcnVsZXMgZm9yIHRoZSBncmlkIGNvbHVtbiBvZmZzZXQgdXAgdG8gdGhlIGdpdmVuIGFtb3VudCBvZiBjb2x1bW4gKi9cbi8qIEdlbmVyYXRlcyBhbGwgdGhlIHJ1bGVzIGZvciB0aGUgZ3JpZCBhbmQgY29sdW1ucyBmb3IgdGhlIGdpdmVuIGJyZWFrIHBvaW50IGFuZCB0b3RhbCBvZiBjb2x1bW5zICovXG4vKiBBUEkgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHRvIGdlbmVyYXRlIGEgZ3JpZCBjb25maWcgKi9cbi8qZG9jXG4tLS1cbnR5cGU6IGJ1dHRvbiB0eXBlXG5zdGF0ZTogc3RhdGUgYnV0dG9uXG4tLS1cblxuQnV0dG9uIHN0eWxlc1xuXG5Vc2UgdGhpcyBtaXhpbiBmb3IgYnV0dG9uIHN0eWxlczogY29sb3IgdGV4dCwgYmFja2dyb3VuZCwgYm9yZGVyXG5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgYnV0dG9uKHByaW1hcnkpO1xuYGBgXG4qL1xuLypkb2Ncbi0tLVxubGluZUxpbWl0OiBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGFmdGVyIHdoaWNoIHRoZSBjb250ZW50IHdpbGwgYmUgY2xhbXBlZC4gSXQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC5cbi0tLVxuXG5UcnVuY2F0ZXMgdGV4dCBhdCBhIHNwZWNpZmljIG51bWJlciBvZiBsaW5lcy5cblxuVXNlIHRoaXMgbWl4aW4gdG8gaGlkZSBsb25nIHRleHQuXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbkBpbmNsdWRlIGxpbmUtY2xhbXAoJGxpbmVMaW1pdDogNCk7XG5gYGBcbiovXG4vKiB0eXBvZ3JhcGh5XG4tLS1cbnRpdGxlOiB0eXBvZ3JhcGh5XG5uYW1lOiBUeXBvZ3JhcGh5XG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuQWRkcyBmb250IENTUyBwcm9wZXJ0aWVzIGJ5IGEgbWFwIHByb3ZpZGVkXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtICR0LXN0eWxlXG5AcGFyYW0gJGlzLWltcG9ydGFudDogZmFsc2VcblxuKiAkdC1zdHlsZSBpcyBleHBlY3RlZCB0byBiZSBhIG1hcCB3aXRoICdkZWZhdWx0JyBhbmQgJ2JyZWFrcG9pbnRbc10nIHN1Ym1hcHMgd2l0aCBhIHByb3BlcnR5XG5mb3IgZXZlcnkgY3NzIHByb3BlcnR5IHRvIGJlIHNldC5cbiogJGlzLWltcG9ydGFudCBwYXJhbWV0ZXIgYWxsb3dzIHRvIGZvcmNlIHR5cG9ncmFwaHkgcHJvcGVydGllcyB0byBiZSBzZXQgYXMgIWltcG9ydGFudFxuVHJ5IHRvIGF2b2lkIGl0cyB1c2UsIGJ1dCBpdCBtaWdodCBiZSBuZWVkZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgc3R5bGVzIGZvciBhIGNvbXBvbmVudFxuYXJlIHZlcnkgc3BlY2lmaWMgYW5kIHRvIG92ZXJ3cml0ZSB0aGUgZ2VuZXJpYyBvbmVzIGlzIHRvbyBjb21wbGV4IChpZiB0aGV5IGhhdmUgYSBsb3Qgb2Ygc3BlY2lmaWNpdHkpXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IGhpZGRlblxubmFtZTogaGlkZGVuXG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuSGlkZSBmcm9tIGJvdGggc2NyZWVucmVhZGVycyBhbmQgYnJvd3NlcnM6IGg1YnAuY29tL3VcbiMjIFBhcmFtZXRlcnNcbi0tLVxuXG4qL1xuLyogZG9jXG4tLS1cbnRpdGxlOiBvdmVybGF5XG5uYW1lOiBvdmVybGF5XG5jYXRlZ29yeTogbWl4aW5zXG4tLS1cblxuQ3JlYXRlcyBhbiBvdmVybGF5IHdpdGggdGhlIHByb3ZpZGVkIGJhY2tncm91bmQgY29sb3JcbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtICRiZ0NvbG9yXG5cbiovXG4udmlkZW9fX292ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgY29sb3I6ICNhN2E4YTk7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjI1LCAyMjMsIDIyMSwgMC45KTtcbiAgei1pbmRleDogNDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udmlkZW9fX292ZXJsYXlfX2Nsb3NlIHtcbiAgdG9wOiAxMHB4O1xuICByaWdodDogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHBhZGRpbmc6IDIwcHg7XG59XG5cbi52aWRlb19fb3ZlcmxheV9fY2xvc2U6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL3NlcnZpY2UtY29udHJhY3QtaWNvbnMvY2xvc2Uuc3ZnI2Nsb3NlLWljb24tdzI0LXZpZXdcIik7XG4gIHdpZHRoOiB2YXIoLS12LWljb24tc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBmaWx0ZXI6IHNhdHVyYXRlKDAlKSBicmlnaHRuZXNzKDAlKSBpbnZlcnQoMzMuOTIxNTclKSBvcGFjaXR5KDEpO1xuICBmaWx0ZXI6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPiAgICA8ZmlsdGVyIGlkPVwicmVjb2xvclwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj4gICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIgICAgICAgICAwIDAgMCAwIDAuMzI1NDkgICAgICAgICAwIDAgMCAwIDAuMzM3MjUgICAgICAgICAwIDAgMCAwIDAuMzUyOTQgICAgICAgICAwIDAgMCAxIDAgICAgICAgICBcIi8+ICAgIDwvZmlsdGVyPiAgICA8L3N2Zz4gICAgI3JlY29sb3InKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnZpZGVvX19vdmVybGF5X19jbG9zZTpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9zZXJ2aWNlLWNvbnRyYWN0LWljb25zL2Nsb3NlLnN2ZyNjbG9zZS1pY29uLXcxNi12aWV3XCIpO1xuICB9XG59XG5cbi52aWRlb19fb3ZlcmxheV9fYnV0dG9uIHtcbiAgd2lkdGg6IDgwcHg7XG4gIGhlaWdodDogODBweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udmlkZW9fX292ZXJsYXlfX2JvZHkge1xuICBwYWRkaW5nOiA1MHB4IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi52aWRlb19fb3ZlcmxheV9fY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4udmlkZW9fX292ZXJsYXlfX2NvbnRhaW5lciA+IC5zN2RtLWR5bmFtaWMtbWVkaWEgLnM3Y29udGFpbmVyIHtcbiAgei1pbmRleDogLTE7XG59XG5cbi52aWRlb19fb3ZlcmxheV9fY29udGFpbmVyID4gLnM3ZG0tZHluYW1pYy1tZWRpYSAuczdjb250cm9sYmFyLFxuLnZpZGVvX19vdmVybGF5X19jb250YWluZXIgPiAuczdkbS1keW5hbWljLW1lZGlhIC5zN3NvY2lhbHNoYXJlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG5Aa2V5ZnJhbWVzIGFuaW1fY2lyY2xlIHtcbiAgdG8ge1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiBjYWxjKDE1NSAtICgxNTUgKiB2YXIoLS1wbGF5aW5kaWNhdG9yLXBlcmNlbnRhZ2UpKSAvIDEwMCk7XG4gIH1cbn1cblxuLnBsYXlpbmRpY2F0b3Ige1xuICAtLXBsYXlpbmRpY2F0b3ItcGVyY2VudGFnZTogMDtcbiAgLS1wbGF5aW5kaWNhdG9yLXN0cm9rZS1jb2xvcjogI2ZmZjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgd2lkdGg6IDU2cHg7XG4gIGhlaWdodDogNTZweDtcbiAgbWFyZ2luOiAxNXB4O1xuICB6LWluZGV4OiAxO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5wbGF5aW5kaWNhdG9yX19zdmcge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG59XG5cbi5wbGF5aW5kaWNhdG9yX19zdmctY2lyY2xlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZmlsbDogcmdiYSgwLCAwLCAwLCAwLjMpO1xuICBzdHJva2Utd2lkdGg6IDI7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDE1NTtcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDE1NTtcbiAgc3Ryb2tlOiB2YXIoLS1wbGF5aW5kaWNhdG9yLXN0cm9rZS1jb2xvcik7XG4gIHN0cm9rZS1saW5lY2FwOiByb3VuZDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMXB4LCAxcHgpO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICBhbmltYXRpb246IGFuaW1fY2lyY2xlIDFzIGVhc2UtaW4tb3V0IGZvcndhcmRzO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnBsYXlpbmRpY2F0b3I6OmJlZm9yZSB7XG4gIHotaW5kZXg6IDI7XG59XG5cbi5wbGF5aW5kaWNhdG9yW2RhdGEtcGxheS1zdGF0ZT0ncGF1c2VkJ106YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL2xpc3QtaWNvbnMvcGxheS5zdmcjcGxheS1pY29uLXcyNC12aWV3XCIpO1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBmaWx0ZXI6IHNhdHVyYXRlKDAlKSBicmlnaHRuZXNzKDAlKSBpbnZlcnQoMTAwJSkgb3BhY2l0eSgxKTtcbiAgZmlsdGVyOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj4gICAgPGZpbHRlciBpZD1cInJlY29sb3JcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+ICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMSAwICAgICAgICAgXCIvPiAgICA8L2ZpbHRlcj4gICAgPC9zdmc+ICAgICNyZWNvbG9yJyk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5wbGF5aW5kaWNhdG9yW2RhdGEtcGxheS1zdGF0ZT0ncGF1c2VkJ106YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy9wbGF5LnN2ZyNwbGF5LWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cblxuLnBsYXlpbmRpY2F0b3JbZGF0YS1wbGF5LXN0YXRlPSdwbGF5aW5nJ106YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYmFja2dyb3VuZDogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL2xpc3QtaWNvbnMvcGF1c2Uuc3ZnI3BhdXNlLWljb24tdzI0LXZpZXdcIik7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGZpbHRlcjogc2F0dXJhdGUoMCUpIGJyaWdodG5lc3MoMCUpIGludmVydCgxMDAlKSBvcGFjaXR5KDEpO1xuICBmaWx0ZXI6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPiAgICA8ZmlsdGVyIGlkPVwicmVjb2xvclwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj4gICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIgICAgICAgICAwIDAgMCAwIDEgICAgICAgICAwIDAgMCAwIDEgICAgICAgICAwIDAgMCAwIDEgICAgICAgICAwIDAgMCAxIDAgICAgICAgICBcIi8+ICAgIDwvZmlsdGVyPiAgICA8L3N2Zz4gICAgI3JlY29sb3InKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnBsYXlpbmRpY2F0b3JbZGF0YS1wbGF5LXN0YXRlPSdwbGF5aW5nJ106YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy9wYXVzZS5zdmcjcGF1c2UtaWNvbi13MTYtdmlld1wiKTtcbiAgfVxufVxuXG4ubXV0ZS1jb250cm9sbGVyIHtcbiAgd2lkdGg6IDUwcHg7XG4gIGhlaWdodDogNTBweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIwLCAyMCwgMjAsIDAuMyk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgei1pbmRleDogOTk5OTtcbn1cblxuLm11dGUtY29udHJvbGxlcjpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy91bm11dGUuc3ZnI3VubXV0ZS1pY29uLXcyNC12aWV3XCIpO1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBmaWx0ZXI6IHNhdHVyYXRlKDAlKSBicmlnaHRuZXNzKDAlKSBpbnZlcnQoMTAwJSkgb3BhY2l0eSgxKTtcbiAgZmlsdGVyOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj4gICAgPGZpbHRlciBpZD1cInJlY29sb3JcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+ICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMCAxICAgICAgICAgMCAwIDAgMSAwICAgICAgICAgXCIvPiAgICA8L2ZpbHRlcj4gICAgPC9zdmc+ICAgICNyZWNvbG9yJyk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5tdXRlLWNvbnRyb2xsZXI6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy91bm11dGUuc3ZnI3VubXV0ZS1pY29uLXcxNi12aWV3XCIpO1xuICB9XG59XG5cbi5tdXRlLWNvbnRyb2xsZXItLW11dGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQ6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL211dGUuc3ZnI211dGUtaWNvbi13MjQtdmlld1wiKTtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgZmlsdGVyOiBzYXR1cmF0ZSgwJSkgYnJpZ2h0bmVzcygwJSkgaW52ZXJ0KDEwMCUpIG9wYWNpdHkoMSk7XG4gIGZpbHRlcjogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+ICAgIDxmaWx0ZXIgaWQ9XCJyZWNvbG9yXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPiAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIiAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDAgMSAgICAgICAgIDAgMCAwIDEgMCAgICAgICAgIFwiLz4gICAgPC9maWx0ZXI+ICAgIDwvc3ZnPiAgICAjcmVjb2xvcicpO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAubXV0ZS1jb250cm9sbGVyLS1tdXRlZDpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL211dGUuc3ZnI211dGUtaWNvbi13MTYtdmlld1wiKTtcbiAgfVxufVxuXG4uaW1nX19hc3NldCAuczdjb250YWluZXIge1xuICB6LWluZGV4OiAxO1xufVxuXG4uaW1nX19hc3NldCAuczd2aWRlb3BsYXllcixcbi5pbWdfX2Fzc2V0IC5zN3NtYXJ0Y3JvcHZpZGVvcGxheWVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uaW1nX19hc3NldCAuczd2aWRlb3BsYXllciBbbW9kZT0nbm9ybWFsJ10sXG4uaW1nX19hc3NldCAuczdzbWFydGNyb3B2aWRlb3BsYXllciBbbW9kZT0nbm9ybWFsJ10ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuXG4uaW1nX19hc3NldCAuczd2aWRlb3ZpZXdlciAuaGlkZGVuLFxuLmltZ19fYXNzZXQgLnM3dmlkZW92aWV3ZXIgLnM3c29jaWFsc2hhcmUsXG4uaW1nX19hc3NldCAuczdzbWFydGNyb3B2aWRlb3ZpZXdlciAuaGlkZGVuLFxuLmltZ19fYXNzZXQgLnM3c21hcnRjcm9wdmlkZW92aWV3ZXIgLnM3c29jaWFsc2hhcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uaW1nX19hc3NldCAuczdkbS1zbWFydGNyb3B2aWRlby1tZWRpYSB7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xufVxuXG4uaW1nX19hc3NldCAuczdkbS1zbWFydGNyb3B2aWRlby1tZWRpYSxcbi5pbWdfX2Fzc2V0IC5zN2RtLWR5bmFtaWMtbWVkaWEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3ZpZGVvdmlld2VyLnM3bW91c2VpbnB1dCAuczd2aWRlb3BsYXllciAuczdpY29uZWZmZWN0W3N0YXRlPSdwbGF5J10sXG4uaW1nX19hc3NldCAuczd2aWRlb3ZpZXdlci5zN21vdXNlaW5wdXQgLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIgLnM3aWNvbmVmZmVjdFtzdGF0ZT0ncGxheSddLFxuLmltZ19fYXNzZXQgLnM3dmlkZW92aWV3ZXIuczd0b3VjaGlucHV0IC5zN3ZpZGVvcGxheWVyIC5zN2ljb25lZmZlY3Rbc3RhdGU9J3BsYXknXSxcbi5pbWdfX2Fzc2V0IC5zN3ZpZGVvdmlld2VyLnM3dG91Y2hpbnB1dCAuczdzbWFydGNyb3B2aWRlb3BsYXllciAuczdpY29uZWZmZWN0W3N0YXRlPSdwbGF5J10sXG4uaW1nX19hc3NldCAuczdzbWFydGNyb3B2aWRlb3ZpZXdlci5zN21vdXNlaW5wdXQgLnM3dmlkZW9wbGF5ZXIgLnM3aWNvbmVmZmVjdFtzdGF0ZT0ncGxheSddLFxuLmltZ19fYXNzZXQgLnM3c21hcnRjcm9wdmlkZW92aWV3ZXIuczdtb3VzZWlucHV0IC5zN3NtYXJ0Y3JvcHZpZGVvcGxheWVyIC5zN2ljb25lZmZlY3Rbc3RhdGU9J3BsYXknXSxcbi5pbWdfX2Fzc2V0IC5zN3NtYXJ0Y3JvcHZpZGVvdmlld2VyLnM3dG91Y2hpbnB1dCAuczd2aWRlb3BsYXllciAuczdpY29uZWZmZWN0W3N0YXRlPSdwbGF5J10sXG4uaW1nX19hc3NldCAuczdzbWFydGNyb3B2aWRlb3ZpZXdlci5zN3RvdWNoaW5wdXQgLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIgLnM3aWNvbmVmZmVjdFtzdGF0ZT0ncGxheSddIHtcbiAgei1pbmRleDogOTk5OTtcbiAgcG9pbnRlci1ldmVudHM6IGFsbCAhaW1wb3J0YW50O1xufVxuXG4uaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nbm9ybWFsJ10gLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuXG4uaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nbm9ybWFsJ10gLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIgdmlkZW8ucG9zdGVyLS1hY3RpdmUge1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgbWluLXdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4uaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAudmlkZW9fX292ZXJsYXkgW21vZGU9J25vcm1hbCddIHZpZGVvLnBvc3Rlci0tYWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgIWltcG9ydGFudDtcbn1cblxuLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLmZpeC0tYWxpZ25tZW50IHtcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk1OXB4KSB7XG4gIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlbzpub3QoLmZpeC0tYWxpZ25tZW50KSB7XG4gICAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gICAgbGVmdDogMCAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlbzpub3QoLmZpeC0tYWxpZ25tZW50KSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHtcbiAgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gW21vZGU9J2Z1bGxzY3JlZW4nXSB2aWRlbyB7XG4gICAgbWluLWhlaWdodDogZml0LWNvbnRlbnQgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nZnVsbHNjcmVlbiddIHZpZGVvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSAhaW1wb3J0YW50O1xuICAgIHRvcDogMCAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgICBvYmplY3QtZml0OiBjb3ZlciAhaW1wb3J0YW50O1xuICAgIG1pbi13aWR0aDogMTAwJTtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHtcbiAgLnRlYXNlciAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nZnVsbHNjcmVlbiddIHZpZGVvLmZpeC0tYWxpZ25tZW50IHtcbiAgICBtaW4taGVpZ2h0OiBmaXQtY29udGVudDtcbiAgfVxufVxuXG4uaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAudmlkZW9fX292ZXJsYXlfX2J1dHRvbiB7XG4gIHotaW5kZXg6IDEwO1xufVxuXG4uaW1nX19hc3NldCAuczd2aWRlb3BsYXllciB2aWRlbyB7XG4gIHdpZHRoOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICB0b3A6IDAgIWltcG9ydGFudDtcbiAgbGVmdDogMCAhaW1wb3J0YW50O1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdpbm5lcmNvbnRyb2xiYXJjb250YWluZXIgPiAuczd2aWRlb3RpbWUge1xuICByaWdodDogMTMycHggIWltcG9ydGFudDtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUgLnM3aW5uZXJjb250cm9sYmFyY29udGFpbmVyID4gLnM3dmlkZW90aW1lLm5vLXM3Y2FwdGlvbiB7XG4gIHJpZ2h0OiAxMDBweCAhaW1wb3J0YW50O1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczd2aWRlb3NjcnViYmVyIHtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMzBweCk7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlIC5zN3ZpZGVvc2NydWJiZXIubm8tczdjYXB0aW9uIHtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMDBweCk7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlIC5zN2Nsb3NlZGNhcHRpb25idXR0b24ge1xuICBsZWZ0OiBjYWxjKDEwMCUgLSA0ICogMzJweCk7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlIC5zN2xhbmd1YWdlc3dpdGNoYnV0dG9uIHtcbiAgd2lkdGg6IDI4cHg7XG4gIGhlaWdodDogMjhweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDRweDtcbiAgbGVmdDogY2FsYygxMDAlIC0gMyAqIDMycHgpO1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdsYW5ndWFnZXN3aXRjaGJ1dHRvbiAuczdidXR0b24ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlIC5zN2xhbmd1YWdlc3dpdGNoYnV0dG9uIC5zN2J1dHRvbjpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJWb2x2b0ljb25zXCI7XG4gIGNvbnRlbnQ6IFwi7qS6XCI7XG4gIHNwZWFrOiBub25lO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBjb2xvcjogI2UxZGZkZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBsaW5lLWhlaWdodDogMDtcbiAgLyogQmV0dGVyIEZvbnQgUmVuZGVyaW5nID09PT09PT09PT09ICovXG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdsYW5ndWFnZXN3aXRjaGJ1dHRvbiAuczdidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM1NjVhO1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdsYW5ndWFnZXN3aXRjaGJ1dHRvbiAuczdidXR0b246OmJlZm9yZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMXB4IDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjUpKTtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUgLnM3bGFuZ3VhZ2Vzd2l0Y2hidXR0b24gLnM3YnV0dG9uLnM3YnV0dG9uLWRpc2FibGVkOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdsYW5ndWFnZXN3aXRjaGJ1dHRvbiAuczdidXR0b24uczdidXR0b24tZGlzYWJsZWQ6OmJlZm9yZSB7XG4gIGNvbG9yOiAjNTM1NjVhO1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZSAuczdsYW5ndWFnZXN3aXRjaGJ1dHRvbiB1bCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlIC5zN2xhbmd1YWdlc3dpdGNoYnV0dG9uIGxpOjpmaXJzdC1sZXR0ZXIge1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUgLnM3bGFuZ3VhZ2Vzd2l0Y2hidXR0b24gbGk6aG92ZXIge1xuICBjb2xvcjogIzAwMDtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUgLnM3bGFuZ3VhZ2Vzd2l0Y2hidXR0b246aG92ZXIgdWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWRmZGQ7XG4gIHBhZGRpbmc6IDE1cHggMjBweDtcbiAgcmlnaHQ6IDUwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUgdmlkZW8ge1xuICB6LWluZGV4OiAwICFpbXBvcnRhbnQ7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlLnM3Y29udHJvbGJhcl9fcG9ydGFibGUgLnM3bGFuZ3VhZ2Vzd2l0Y2hidXR0b24ge1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiA3NiU7XG4gIHRvcDogMTIlO1xuICByaWdodDogY2FsYygyICogMzJweCk7XG4gIGxlZnQ6IGluaXRpYWw7XG4gIGFzcGVjdC1yYXRpbzogMy80O1xufVxuXG4uaW1nX19hc3NldCAuczdzdWJ0aXRsZS5zN2NvbnRyb2xiYXJfX3BvcnRhYmxlIC5zN2xhbmd1YWdlc3dpdGNoYnV0dG9uIC5zN2J1dHRvbjo6YmVmb3JlIHtcbiAgZm9udC1zaXplOiB4eC1sYXJnZTtcbn1cblxuLmltZ19fYXNzZXQgLnM3c3VidGl0bGUuczdjb250cm9sYmFyX19wb3J0YWJsZSAuczd2aWRlb3NjcnViYmVyIHtcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA1NnB4ICogNik7XG59XG5cbi5pbWdfX2Fzc2V0IC5zN3N1YnRpdGxlLnM3Y29udHJvbGJhcl9fcG9ydGFibGUgLnM3dmlkZW9zY3J1YmJlci5uby1zN2NhcHRpb24ge1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHggKiA1KTtcbn1cblxuLmltYWdlX19zbGltSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbywgLmltYWdlX19zbGltSGVpZ2h0IC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8sXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvLFxuLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X192aWRlbyxcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLypcbiAgICAgICAgICAgICAqIHRoaXMgaXMgb3ZlcnJpZGluZyB0aGUgY2FsY3VsYXRlZCBzaXplcyBhbmQgcG9zaXRpb25zIHdoaWNoIGFyZSBzd2l0Y2hpbmcgYmFjayB0byBhIHZpc2libGUgYm94IGFjY29yZGluZyB0byB0aGVcbiAgICAgICAgICAgICAqIGFzcGVjdCByYXRpbyBvZiB0aGUgdmlkZW8sIHdlIG5lZWQgYSBmaWxsZWQgYm94IHdpdGggYSBjZW50ZXJlZCB2aWRlbyBjcm9wcGVkIGJ5IHRoZSB2aXNpYmxlIGJveCBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICAgKi9cbn1cblxuLmltYWdlX19zbGltSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyAuY3EtZGQtaW1hZ2UsIC5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuY3EtZGQtaW1hZ2UsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyAuY3EtZGQtaW1hZ2UsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIC5jcS1kZC1pbWFnZSxcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fdmlkZW8gLmNxLWRkLWltYWdlLFxuLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIC5jcS1kZC1pbWFnZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gLnM3dmlkZW92aWV3ZXIsXG4uaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3ZpZGVvIC5zN3Jlc3BvbnNpdmVWaWV3ZXIsIC5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczd2aWRlb3ZpZXdlcixcbi5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczdyZXNwb25zaXZlVmlld2VyLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gLnM3dmlkZW92aWV3ZXIsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyAuczdyZXNwb25zaXZlVmlld2VyLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczd2aWRlb3ZpZXdlcixcbi5pbWFnZV9fc3RhbmRhcmRIZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3cmVzcG9uc2l2ZVZpZXdlcixcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fdmlkZW8gLnM3dmlkZW92aWV3ZXIsXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3ZpZGVvIC5zN3Jlc3BvbnNpdmVWaWV3ZXIsXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3dmlkZW92aWV3ZXIsXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3cmVzcG9uc2l2ZVZpZXdlciB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gLnM3dmlkZW9wbGF5ZXIsXG4uaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3ZpZGVvIC5zN3NtYXJ0Y3JvcHZpZGVvcGxheWVyLCAuaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3dmlkZW9wbGF5ZXIsXG4uaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyAuczd2aWRlb3BsYXllcixcbi5pbWFnZV9fc3RhbmRhcmRIZWlnaHQgLmltZ19fYXNzZXRfX3ZpZGVvIC5zN3NtYXJ0Y3JvcHZpZGVvcGxheWVyLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczd2aWRlb3BsYXllcixcbi5pbWFnZV9fc3RhbmRhcmRIZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3c21hcnRjcm9wdmlkZW9wbGF5ZXIsXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3ZpZGVvIC5zN3ZpZGVvcGxheWVyLFxuLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X192aWRlbyAuczdzbWFydGNyb3B2aWRlb3BsYXllcixcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczd2aWRlb3BsYXllcixcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyAuczdzbWFydGNyb3B2aWRlb3BsYXllciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG59XG5cbi5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLCAuaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLFxuLmltYWdlX19zdGFuZGFyZEhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8sXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3ZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlbyxcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIG1pbi13aWR0aDogMTAwJTtcbiAgbWluLWhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLCAuaW1hZ2VfX3NsaW1IZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLFxuICAuaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8sXG4gIC5pbWFnZV9fc3RhbmRhcmRIZWlnaHQgLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLFxuICAuYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3ZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlbyxcbiAgLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlbyB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCkgIWltcG9ydGFudDtcbiAgICB0b3A6IDAgIWltcG9ydGFudDtcbiAgICBsZWZ0OiAwICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLmltYWdlX19zbGltSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8uZml4LS1hbGlnbm1lbnQsIC5pbWFnZV9fc2xpbUhlaWdodCAuaW1nX19hc3NldF9fc21hcnQtY3JvcC12aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8uZml4LS1hbGlnbm1lbnQsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X192aWRlbyBbbW9kZT0nbm9ybWFsJ10gdmlkZW8uZml4LS1hbGlnbm1lbnQsXG4uaW1hZ2VfX3N0YW5kYXJkSGVpZ2h0IC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlby5maXgtLWFsaWdubWVudCxcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fdmlkZW8gW21vZGU9J25vcm1hbCddIHZpZGVvLmZpeC0tYWxpZ25tZW50LFxuLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIFttb2RlPSdub3JtYWwnXSB2aWRlby5maXgtLWFsaWdubWVudCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApICFpbXBvcnRhbnQ7XG4gIHRvcDogMCAhaW1wb3J0YW50O1xuICBsZWZ0OiAwICFpbXBvcnRhbnQ7XG59XG5cbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fdmlkZW8gLnM3Y29udHJvbGJhcixcbi5iYWNrZ3JvdW5kX192aWRlbyAuaW1nX19hc3NldF9fdmlkZW8gLnM3aWNvbmVmZmVjdCwgLmJhY2tncm91bmRfX3ZpZGVvIC5pbWdfX2Fzc2V0X19zbWFydC1jcm9wLXZpZGVvIC5zN2NvbnRyb2xiYXIsXG4uYmFja2dyb3VuZF9fdmlkZW8gLmltZ19fYXNzZXRfX3NtYXJ0LWNyb3AtdmlkZW8gLnM3aWNvbmVmZmVjdCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPXZpZGVvLmJ1bmRsZS5jc3MubWFwICovIl19 */