冲突解决

dianlixunjian
徐景良 2024-11-24 09:54:34 +08:00
commit 94e5911303
3 changed files with 1244 additions and 1123 deletions

View File

@ -1,274 +1,316 @@
<template>
<div class="statistical" id="bg-pan">
<Map
@onload="handlerOnMapLoad"
@handlerGetDetails="handlerGetDetails"
style="position: absolute; top: 0px; left: 0px;height: calc( 100vh - 80px);width:100%;z-index:0;"
<template>
<div class="statistical" id="bg-pan">
<Map
@onload="handlerOnMapLoad"
@handlerGetDetails="handlerGetDetails"
style="
position: absolute;
top: 0px;
left: 0px;
height: calc(100vh - 80px);
width: 100%;
z-index: 0;
"
ref="MapboxComponent"
@showMonitor="showMonitor"
@handlerQueryIntersectTif="handlerQueryIntersectTif"
></Map>
<div style="position: absolute; left:60px; bottom: 20px; z-index:1;">
<div :class="`button-item ${buttonSelect == 1? 'button-select': ''}`" style="margin-bottom: 10px" @click="changeLayer(1)"></div>
<div :class="`button-item ${buttonSelect == 2? 'button-select': ''}`" style="margin-bottom: 10px" @click="changeLayer(2)"></div>
<div :class="`button-item ${buttonSelect == 3? 'button-select': ''}`" @click="changeLayer(3)"></div>
</div>
<div class="legend">
<div class="legend-item" v-for="(item,index) in legends" :key="index">
<div class="legend-dot" :style="{background:item.color}"></div>
<div class="legend-label">{{item.label}}</div>
</div>
</div>
<a-modal
style="width: 100vw; top: 0px; left: 0px; margin: 0px; padding: 0px"
wrap-class-name="full-modal"
v-model:open="showInfoOpen"
title="详情"
:footer="null"
:maskClosable="true"
:destroyOnClose="true"
@cancel="showInfoOpen = false"
>
<div class="modal-content">
<ShowInfoModal v-if="showInfoOpen" :showInfoData="showInfoData" />
</div>
</a-modal>
<!-- 图层控制 视频监控-->
<div class="layer-center-container">
<LayerCenter
@drawPolygon="drawPolygon"
@cancleDrawPolygon="cancleDrawPolygon"
@changeTifLayer="changeTifLayer"
ref="LayerCenterComponent"></LayerCenter>
</div>
<div class="TC-videoi-container" v-if="showTCLPlayer" v-drag>
<div class="close-button" @click="showTCLPlayer = false;">
<CloseOutlined></CloseOutlined>
</div>
<Monitor v-if="showTCLPlayer" :play-url="playUrl"></Monitor>
</div>
:layer="layerSettings"
/>
<div style="position: absolute; left: 60px; bottom: 20px; z-index: 1">
<div
:class="`button-item ${buttonSelect == 1 ? 'button-select' : ''}`"
style="margin-bottom: 10px"
@click="changeLayer(1)"
>导航地图</div
>
<div
:class="`button-item ${buttonSelect == 2 ? 'button-select' : ''}`"
style="margin-bottom: 10px"
@click="changeLayer(2)"
>卫星地图</div
>
<div
:class="`button-item ${buttonSelect == 3 ? 'button-select' : ''}`"
@click="changeLayer(3)"
>白板地图</div
>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import Map from './Converge/index.vue';
import layerButton from './mapComponent/left_layerButton.vue';
import statisticalType from './mapComponent/left_statisticalType.vue';
import county from './mapComponent/left_county.vue';
import DataScreen from './dataScreen/index.vue'
import Header from './mapComponent/top_title.vue'
import ShowInfoModal from '@/views/demo/tiankongdi/curbspotcity/MapList/ShowInfoModal/index.vue';
import { getLoadDroneCaseInfoDetail, getCaseInfoById } from '@/api/tiankongdi/index';
// details
const showInfoOpen = ref<Boolean>(false);
const showInfoData = ref();
const buttonSelect = ref(2)
const getInfoList = (id) => {
getCaseInfoById({id:id}).then(res => {
if(res){
showInfoData.value = res
showInfoOpen.value = true;
}else{
}
})
};
const MapboxComponent = ref();
const countyId = ref();
const legends = ref([
{
label:"违法",
color:"#F70303",
},{
label:"合法",
color:"#0AF703",
},{
label:"其他",
color:"#0382F7",
},{
label:"补办手续",
color:"#AD04F4",
},{
label:"拆除复耕",
color:"#F4E004",
},
])
function handlerOnMapLoad(){
}
function handlerGetDetails(e){
getInfoList(e.Id);
}
//
const currentCounty = ref({ name: '', code: '' });
function countyClick(data) {
countyId.value = data.id;
currentCounty.value = { name: data['name'], code: data['id'] };
MapboxComponent.value.handlerChangeCounty(currentCounty.value);
}
//
function handlerChangePolygonType(data) {
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], data);
}
//
function changeLandType(type):void{
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], "",type);
}
const changeLayer = (value) => {
buttonSelect.value = value
switch(value){
case 1:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',true)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',false)
break;
case 2:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',true)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',false)
break;
case 3:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles',false)
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer',true)
break;
<div class="legend">
<div class="legend-item" v-for="(item, index) in legends" :key="index">
<div class="legend-dot" :style="{ background: item.color }"></div>
<div class="legend-label">{{ item.label }}</div>
</div>
</div>
<a-modal
style="width: 100vw; top: 0px; left: 0px; margin: 0px; padding: 0px"
wrap-class-name="full-modal"
v-model:open="showInfoOpen"
title="详情"
:footer="null"
:maskClosable="true"
:destroyOnClose="true"
@cancel="showInfoOpen = false"
>
<div class="modal-content">
<ShowInfoModal v-if="showInfoOpen" :showInfoData="showInfoData" />
</div>
</a-modal>
<!-- 图层控制 视频监控-->
<div class="layer-center-container">
<LayerCenter
@drawPolygon="drawPolygon"
@cancleDrawPolygon="cancleDrawPolygon"
@changeTifLayer="changeTifLayer"
ref="LayerCenterComponent"
></LayerCenter>
</div>
<div class="TC-videoi-container" v-if="showTCLPlayer" v-drag>
<div class="close-button" @click="showTCLPlayer = false">
<CloseOutlined></CloseOutlined>
</div>
<Monitor v-if="showTCLPlayer" :play-url="playUrl"></Monitor>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, onUnmounted, computed } from 'vue';
import Map from './Converge/index.vue';
import layerButton from './mapComponent/left_layerButton.vue';
import statisticalType from './mapComponent/left_statisticalType.vue';
import county from './mapComponent/left_county.vue';
import DataScreen from './dataScreen/index.vue';
import Header from './mapComponent/top_title.vue';
import ShowInfoModal from '@/views/demo/tiankongdi/curbspotcity/MapList/ShowInfoModal/index.vue';
import { getLoadDroneCaseInfoDetail, getCaseInfoById } from '@/api/tiankongdi/index';
import { useRoute } from 'vue-router';
import { getConfig } from '@/api/sys/layerManagement';
const route: any = useRoute();
const subject = ref(route.params.id);
const legends: any = ref([]);
const layerSettings = ref();
// details
const showInfoOpen = ref<Boolean>(false);
const showInfoData = ref();
const buttonSelect = ref(2);
const getInfoList = (id) => {
getCaseInfoById({ id: id }).then((res) => {
if (res) {
showInfoData.value = res;
showInfoOpen.value = true;
} else {
}
}
});
};
const MapboxComponent = ref();
const countyId = ref();
/*图层控制 视频监控*/
import LayerCenter from './mapComponent/layers/index.vue';
function getLayerSettings() {
let title = '';
switch (subject.value) {
case '违法用地':
title = 'Subject_WFYD';
break;
case '非法采矿':
title = 'Subject_FFCK';
break;
case '耕地非粮化':
title = 'Subject_GDFLH';
break;
case '重点问题':
title = 'Subject_ZDWT';
break;
case '巡察审计':
title = 'Subject_XCSJ';
break;
case '生态保护红线监管':
title = 'Subject_STBHHXJG';
break;
case '生态修复':
title = 'Subject_STXF';
break;
}
getConfig({
code: title,
}).then((res) => {
let obj = JSON.parse(res.codeValue);
layerSettings.value = obj[0];
let legend = layerSettings.value.legend[0];
for (const key in legend) {
legends.value.push({
label: key,
color: legend[key].colour,
});
}
});
}
function handlerOnMapLoad() {}
//
import Monitor from './mapComponent/monitor/index.vue';
import {CloseOutlined} from "@ant-design/icons-vue"
function handlerGetDetails(e) {
getInfoList(e.Id);
}
const showTCLPlayer = ref(false);
const playUrl = ref("");
function showMonitor(info){
playUrl.value = info.playUrl
showTCLPlayer.value = true;
}
//
//
const currentCounty = ref({ name: '', code: '' });
function countyClick(data) {
countyId.value = data.id;
currentCounty.value = { name: data['name'], code: data['id'] };
MapboxComponent.value.handlerChangeCounty(currentCounty.value);
}
function drawPolygon(state){
// Map
MapboxComponent.value.handlerDrawPolygon();
}
//
function handlerChangePolygonType(data) {
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], data);
}
function cancleDrawPolygon(){
MapboxComponent.value.handlerDeletePolygon();
//
function changeLandType(type): void {
MapboxComponent.value.handlerLoadPolygon(currentCounty.value['code'], '', type);
}
const changeLayer = (value) => {
buttonSelect.value = value;
switch (value) {
case 1:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', true);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', false);
break;
case 2:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', true);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', false);
break;
case 3:
MapboxComponent.value.handlerChangeLayerVisible('tdt-img-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('tdt-vec-tiles', false);
MapboxComponent.value.handlerChangeLayerVisible('countyPanelLayer', true);
break;
}
};
const LayerCenterComponent = ref();
function handlerQueryIntersectTif(wktStr){
LayerCenterComponent.value.handlerQueryIntersectTif(wktStr);
}
/*图层控制 视频监控*/
import LayerCenter from './mapComponent/layers/index.vue';
function changeTifLayer(layer){
console.log("layer",layer);
//
import Monitor from './mapComponent/monitor/index.vue';
import { CloseOutlined } from '@ant-design/icons-vue';
MapboxComponent.value.handlerChangeTifLayer(layer);
}
</script>
<style lang="less" scoped>
.button-item{
width: 96px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 11px;
color: #7EBBFF;
background: url('@/assets/statistical/blue_bg.png') no-repeat;
background-size: cover;
}
.button-select{
color: #06EBB7;
background: url('@/assets/statistical/green_bg.png') no-repeat;
background-size: cover;
}
.statistical {
// position: relative;
//
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE/Edge */
user-select: none;
}
#bg-pan{
}
#alertOverlay::before,#alertOverlay::after {
content: "";
const showTCLPlayer = ref(false);
const playUrl = ref('');
function showMonitor(info) {
playUrl.value = info.playUrl;
showTCLPlayer.value = true;
}
//
function drawPolygon(state) {
// Map
MapboxComponent.value.handlerDrawPolygon();
}
function cancleDrawPolygon() {
MapboxComponent.value.handlerDeletePolygon();
}
const LayerCenterComponent = ref();
function handlerQueryIntersectTif(wktStr) {
LayerCenterComponent.value.handlerQueryIntersectTif(wktStr);
}
function changeTifLayer(layer) {
console.log('layer', layer);
MapboxComponent.value.handlerChangeTifLayer(layer);
}
onMounted(() => {
getLayerSettings();
});
</script>
<style lang="less" scoped>
.button-item {
width: 96px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 11px;
color: #7ebbff;
background: url('@/assets/statistical/blue_bg.png') no-repeat;
background-size: cover;
}
.button-select {
color: #06ebb7;
background: url('@/assets/statistical/green_bg.png') no-repeat;
background-size: cover;
}
.statistical {
// position: relative;
//
-webkit-user-select: none; /* Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE/Edge */
user-select: none;
}
#bg-pan {
}
#alertOverlay::before,
#alertOverlay::after {
content: '';
position: absolute;
width: 50px;
height: 100%;
}
#alertOverlay div::before,#alertOverlay div::after {
content: "";
#alertOverlay div::before,
#alertOverlay div::after {
content: '';
position: absolute;
width: 100%;
height: 50px;
}
#alertOverlay::before {
background: linear-gradient(to right, rgba(0, 0, 0,0.8), transparent);
background: linear-gradient(to right, rgba(0, 0, 0, 0.8), transparent);
top: 0;
left: 0;
transform: rotate(0deg);
}
#alertOverlay::after {
background: linear-gradient(to left, rgba(0, 0, 0,0.8), transparent);
background: linear-gradient(to left, rgba(0, 0, 0, 0.8), transparent);
top: 0%;
left: 100%;
transform: rotate(0deg) translate(calc(-1 * 50px), 0px);
}
#alertOverlay div::before {
background: linear-gradient(to top, rgba(0, 0, 0,0.8), transparent);
background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
top: 0;
left: 0;
transform: rotate(180deg);
}
#alertOverlay div::after {
background: linear-gradient(to top, rgba(0, 0, 0,0.8), transparent);
background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
top: 100%;
left: 0;
transform: rotate(0deg) translate(0px, calc(-1 * 50px));
}
#alertOverlay {
position: absolute;
top: 0;
@ -281,11 +323,11 @@
pointer-events: none;
z-index: 1;
}
.alert-active{
.alert-active {
animation: blink 0s infinite;
}
@keyframes blink {
0% {
opacity: 0;
@ -297,83 +339,79 @@
opacity: 0;
}
}
.legend{
width:200px;
padding:10px;
position:absolute;
bottom:20px;
right:20px;
display:flex;
.legend {
width: 200px;
padding: 10px;
position: absolute;
bottom: 20px;
right: 20px;
display: flex;
flex-wrap: wrap;
column-gap: 30px;
border-radius: 8px;
background-image:url("/statistical/left_statistical.png");
background-size:100% 100%;
.legend-item{
padding:5px 0px;
font-size:14px;
color:#666666;
display:flex;
background-image: url('/statistical/left_statistical.png');
background-size: 100% 100%;
.legend-item {
padding: 5px 0px;
font-size: 14px;
color: #666666;
display: flex;
flex: 48% 48%;
color:#7ebbff;
.legend-dot{
width:14px;
height:14px;
color: #7ebbff;
.legend-dot {
width: 14px;
height: 14px;
}
.legend-label{
margin-left:12px;
.legend-label {
margin-left: 12px;
}
}
}
/**图层控制 视频监控**/
.layer-center-container{
width:208px;
position:absolute;
bottom:0px;
left:20px;
z-index:99999;
}
.TC-videoi-container{
/**图层控制 视频监控**/
.layer-center-container {
width: 208px;
position: absolute;
bottom:48px;
right:38px;
width:418px;
height:300px;
.close-button{
width:28px;
height:28px;
background:rgba(0, 0, 0, 0.6);
bottom: 0px;
left: 20px;
z-index: 99999;
}
.TC-videoi-container {
position: absolute;
bottom: 48px;
right: 38px;
width: 418px;
height: 300px;
.close-button {
width: 28px;
height: 28px;
background: rgba(0, 0, 0, 0.6);
text-align: center;
line-height:28px;
position:absolute;
top:4px;
right:4px;
z-index:999999;
color:#fff;
cursor:pointer;
line-height: 28px;
position: absolute;
top: 4px;
right: 4px;
z-index: 999999;
color: #fff;
cursor: pointer;
}
}
.selection-button{
position:absolute;
cursor:pointer;
top:20px;
left:220px;
width:140px;
height:40px;
margin-left:20px;
.selection-button {
position: absolute;
cursor: pointer;
top: 20px;
left: 220px;
width: 140px;
height: 40px;
margin-left: 20px;
background-image: url(/map/change-view-btn.png);
background-size:100% 100%;
color:#efefef;
background-size: 100% 100%;
color: #efefef;
text-align: center;
line-height:46px;
font-size:14px;
}
</style>
line-height: 46px;
font-size: 14px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,66 @@
// vite.config.ts
import { defineApplicationConfig } from "file:///F:/%E9%A1%B9%E7%9B%AE/%E8%B4%A2%E6%BA%90%E4%B8%80%E4%BD%93%E5%8C%96/CaiYuanYiTiHua/internal/vite-config/dist/index.mjs";
var vite_config_default = defineApplicationConfig({
overrides: {
optimizeDeps: {
include: [
"echarts/core",
"echarts/charts",
"echarts/components",
"echarts/renderers",
"qrcode",
"@iconify/iconify",
"ant-design-vue/es/locale/zh_CN",
"ant-design-vue/es/locale/en_US",
"@/../lib/vform/designer.umd.js"
]
},
build: {
/* 其他build生产打包配置省略 */
//...
target: "esnext",
commonjsOptions: {
include: /node_modules|lib/
//这里记得把lib目录加进来否则生产打包会报错
}
},
server: {
proxy: {
"/basic-api": {
target: "http://localhost:3000",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/basic-api`), "")
// only https
// secure: false
},
"/upload": {
target: "http://localhost:3300/upload",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/upload`), "")
}
},
warmup: {
clientFiles: ["./index.html", "./src/{views,components}/*"]
}
},
define: {
"process.env": {
BASE_URL: "/"
}
},
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true
}
}
},
plugins: []
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU4RDIyXHU2RTkwXHU0RTAwXHU0RjUzXHU1MzE2XFxcXENhaVl1YW5ZaVRpSHVhXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU4RDIyXHU2RTkwXHU0RTAwXHU0RjUzXHU1MzE2XFxcXENhaVl1YW5ZaVRpSHVhXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTklQTElQjklRTclOUIlQUUvJUU4JUI0JUEyJUU2JUJBJTkwJUU0JUI4JTgwJUU0JUJEJTkzJUU1JThDJTk2L0NhaVl1YW5ZaVRpSHVhL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUFwcGxpY2F0aW9uQ29uZmlnKHtcbiAgb3ZlcnJpZGVzOiB7XG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBpbmNsdWRlOiBbXG4gICAgICAgICdlY2hhcnRzL2NvcmUnLFxuICAgICAgICAnZWNoYXJ0cy9jaGFydHMnLFxuICAgICAgICAnZWNoYXJ0cy9jb21wb25lbnRzJyxcbiAgICAgICAgJ2VjaGFydHMvcmVuZGVyZXJzJyxcbiAgICAgICAgJ3FyY29kZScsXG4gICAgICAgICdAaWNvbmlmeS9pY29uaWZ5JyxcbiAgICAgICAgJ2FudC1kZXNpZ24tdnVlL2VzL2xvY2FsZS96aF9DTicsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvZW5fVVMnLFxuICAgICAgICAnQC8uLi9saWIvdmZvcm0vZGVzaWduZXIudW1kLmpzJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgLyogXHU1MTc2XHU0RUQ2YnVpbGRcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTkxNERcdTdGNkVcdTc3MDFcdTc1NjUgKi9cbiAgICAgIC8vLi4uXG4gICAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgICAgY29tbW9uanNPcHRpb25zOiB7XG4gICAgICAgIGluY2x1ZGU6IC9ub2RlX21vZHVsZXN8bGliLywgLy9cdThGRDlcdTkxQ0NcdThCQjBcdTVGOTdcdTYyOEFsaWJcdTc2RUVcdTVGNTVcdTUyQTBcdThGREJcdTY3NjVcdUZGMENcdTU0MjZcdTUyMTlcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTRGMUFcdTYyQTVcdTk1MTlcdUZGMDFcdUZGMDFcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIHByb3h5OiB7XG4gICAgICAgICcvYmFzaWMtYXBpJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXi9iYXNpYy1hcGlgKSwgJycpLFxuICAgICAgICAgIC8vIG9ubHkgaHR0cHNcbiAgICAgICAgICAvLyBzZWN1cmU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgICcvdXBsb2FkJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzMwMC91cGxvYWQnLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vdXBsb2FkYCksICcnKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3YXJtdXA6IHtcbiAgICAgICAgY2xpZW50RmlsZXM6IFsnLi9pbmRleC5odG1sJywgJy4vc3JjL3t2aWV3cyxjb21wb25lbnRzfS8qJ10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmaW5lOiB7XG4gICAgICAncHJvY2Vzcy5lbnYnOiB7XG4gICAgICAgIEJBU0VfVVJMOiAnLycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3NzOiB7XG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICAgIGxlc3M6IHtcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwbHVnaW5zOiBbXSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFnVSxTQUFTLCtCQUErQjtBQUV4VyxJQUFPLHNCQUFRLHdCQUF3QjtBQUFBLEVBQ3JDLFdBQVc7QUFBQSxJQUNULGNBQWM7QUFBQSxNQUNaLFNBQVM7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUE7QUFBQSxNQUdMLFFBQVE7QUFBQSxNQUNSLGlCQUFpQjtBQUFBLFFBQ2YsU0FBUztBQUFBO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLGNBQWM7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxHQUFHLEVBQUU7QUFBQTtBQUFBO0FBQUEsUUFHL0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxHQUFHLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVMsQ0FBQztBQUFBLEVBQ1o7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=