diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 00000000..df9ef3fb Binary files /dev/null and b/.DS_Store differ diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..0cb5218d --- /dev/null +++ b/.babelrc @@ -0,0 +1,10 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/react" + ], + "plugins": [ + "@babel/plugin-transform-destructuring", + "@babel/plugin-proposal-object-rest-spread" + ] +} diff --git a/.eslintrc.js b/.eslintrc.js index 711f75d5..e98aa2ac 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,15 +1,27 @@ module.exports = { - env: { + "env": { "browser": true, - //"node": true, - "commonjs": true + "commonjs": true, + "es6": true }, - extends: "eslint:recommended", - rules: { + "extends": "eslint:recommended", + "rules": { "linebreak-style": ["error", "unix"], - "no-console": ["error", { allow: ["info","warn", "error"] }], - //quotes: ["error", "double"], - "no-unused-vars": ["error", { "vars": "all", "args": "none"}], - semi: ["error", "always"] - } + "no-console": ["error", { "allow": ["info", "warn", "error"] }], + "no-unused-vars": ["error", { "vars": "all", "args": "none" }], + "semi": ["error", "always"] + }, + "parser": "@babel/eslint-parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "modules": true, + "experimentalObjectRestSpread": true + } + }, + "plugins": [ + "react" + ] }; diff --git a/.gitignore b/.gitignore index 40ca8767..fed907be 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ node_modules/ dev/ examples/slf-cesium/cesium/ + +.editorconfig + +.eslintrc.js.DS_Store +.idea diff --git a/dist/milgraphics.js b/dist/milgraphics.js index cb0728ee..9543e6b1 100644 --- a/dist/milgraphics.js +++ b/dist/milgraphics.js @@ -1,5127 +1,2 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define("milgraphics", [], factory); - else if(typeof exports === 'object') - exports["milgraphics"] = factory(); - else - root["ms"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 60); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -!function(I,E){ true?module.exports=E():"function"==typeof define&&define.amd?define("milsymbol",[],E):"object"==typeof exports?exports.milsymbol=E():I.ms=E()}(this,function(){return function(I){function E(R){if(t[R])return t[R].exports;var C=t[R]={i:R,l:!1,exports:{}};return I[R].call(C.exports,C,C.exports,E),C.l=!0,C.exports}var t={};return E.m=I,E.c=t,E.i=function(I){return I},E.d=function(I,t,R){E.o(I,t)||Object.defineProperty(I,t,{configurable:!1,enumerable:!0,get:R})},E.n=function(I){var t=I&&I.__esModule?function(){return I.default}:function(){return I};return E.d(t,"a",t),t},E.o=function(I,E){return Object.prototype.hasOwnProperty.call(I,E)},E.p="",E(E.s=58)}([function(I,E,t){"use strict";/*! -========================================================================================== - -The MIT License (MIT) - -Copyright (c) 2017 Måns Beckman - www.spatialillusions.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - ------------------------------------------------------------------------------------------- - -For updates and more information go to http://www.spatialillusions.com - -========================================================================================== -*/ -var R=new function(){this._colorModes={},this._dashArrays={pending:"4,4",anticipated:"8,12",feintDummy:"8,8"},this._hqStafLength=100,this._iconCache={},this._iconParts=[],this._labelCache={},this._labelOverrides={},this._letterSIDCicons=[],this._numberSIDCicons=[],this._STD2525=!0,this._svgNS="http://www.w3.org/2000/svg",this._symbolParts=[],this.autoSVG=!1,this.version="1.1.0","object"==typeof console&&console.info("milsymbol.js "+this.version+" - Copyright (c) 2017 Måns Beckman http://www.spatialillusions.com"),"undefined"==typeof parseXML&&(window.parseXML=function(I,E){E=E||document;var t=(new DOMParser).parseFromString(I,"text/xml");return E.adoptNode(t.documentElement)})};R._scale=function(I,E){return{type:"translate",x:100-100*I,y:100-100*I,draw:[{type:"scale",factor:I,draw:[E]}]}},R._translate=function(I,E,t){return{type:"translate",x:I,y:E,draw:[t]}},R.addIconParts=function(I){return"function"==typeof I&&(this._iconParts=this._iconParts.concat(I)),R},R.addLabelOverrides=function(I,E){return"function"==typeof I&&(this._labelOverrides.hasOwnProperty(E)||(this._labelOverrides[E]=[]),this._labelOverrides[E]=this._labelOverrides[E].concat(I)),R},R.addSIDCicons=function(I,E){return"function"==typeof I&&(this["_"+E+"SIDCicons"]=this["_"+E+"SIDCicons"].concat(I)),R},R.addSymbolPart=function(I){return"function"==typeof I&&R.setSymbolParts(R.getSymbolParts().concat(I)),R},R.BBox=t(59),R.ColorMode=function(I,E,t,R,C){var A={};return A.Civilian=I,A.Friend=E,A.Hostile=t,A.Neutral=R,A.Unknown=C,A},R.getColorMode=function(I){var E=this._colorModes[I];return new R.ColorMode(E.Civilian,E.Friend,E.Hostile,E.Neutral,E.Unknown)},R.getDashArrays=function(){return this._dashArrays},R.getHqStafLength=function(){return this._hqStafLength},R.getSymbolParts=function(){return this._symbolParts.slice(0)},R.getVersion=function(){return this.version},R.outline=function(I,E,t,C){var A;if(Array.isArray(I)){A=[];for(var e in I)A.push(R.outline(I[e],E,t,C))}else{A={};for(var S in I)-1==["fill","fillopacity"].indexOf(S)&&(A[S]=I[S]);if("translate"==I.type||"rotate"==I.type||"scale"==I.type){A.draw=[];for(var T in I.draw)A.draw.push(R.outline(I.draw[T],E,t,C))}else A.strokewidth=0!=A.stroke?Number(A.strokewidth||t)+2*E:2*E,A.stroke=C,A.fill=!1,A.linecap="round"}return A},R.setAutoSVG=function(I){return this.autoSVG=I,this.autoSVG},R.setColorMode=function(I,E){return this._colorModes[I]={},this._colorModes[I].Hostile=E.Hostile,this._colorModes[I].Friend=E.Friend,this._colorModes[I].Neutral=E.Neutral,this._colorModes[I].Unknown=E.Unknown,this._colorModes[I].Civilian=E.Civilian,this._colorModes[I]},R.setDashArrays=function(I,E,t){return this._dashArrays.pending=I,this._dashArrays.anticipated=E,this._dashArrays.feintDummy=t,this._dashArrays},R.setHqStafLength=function(I){return this._hqStafLength=I,this._hqStafLength},R.setSymbolParts=function(I){return this._symbolParts=I,R},R.setStandard=t(60),R.addMarkerParts=function(I){console.warn("addMarkerParts() is deprecated and should not be used, use addSymbolPart() instead."),R.addSymbolPart(I)},R.bboxMax=function(I,E){return console.warn("bboxMax() is deprecated and should not be used, use BBox.merge() instead."),I.merge(E)},R.buildingBlock=function(I,E,t){return console.warn("buildingBlock() is deprecated and should not be used."),1==I.length&&Array.isArray(I[0])&&(I=I[0]),1==E.length&&Array.isArray(E[0])&&(E=E[0]),{pre:I,post:E,bbox:t}},R.addLetterLabelOverrides=function(I){console.warn("addLetterLabelOverrides() is deprecated and should not be used, use addLabelOverrides() instead."),"function"==typeof I&&(this._labelOverrides.hasOwnProperty("letter")||(this._labelOverrides.letter=[]),this._labelOverrides.letter=this._labelOverrides.letter.concat(I))},R.addLetterSIDCicons=function(I){console.warn("addLetterSIDCicons() is deprecated and should not be used, use addSIDCicons() instead."),"function"==typeof I&&(this._letterSIDCicons=this._letterSIDCicons.concat(I))},R.addNumberLabelOverrides=function(I){console.warn("addNumberLabelOverrides() is deprecated and should not be used, use addLabelOverrides() instead."),"function"==typeof I&&(this._labelOverrides.hasOwnProperty("number")||(this._labelOverrides.number=[]),this._labelOverrides.number=this._labelOverrides.number.concat(I))},R.addNumberSIDCicons=function(I){console.warn("addNumberSIDCicons() is deprecated and should not be used, use addSIDCicons() instead."),"function"==typeof I&&(this._numberSIDCicons=this._numberSIDCicons.concat(I))},R.bbox=function(I){return console.warn("bbox() is deprecated and should not be used, use BBox() instead."),R.BBox(I)},R.colorMode=function(I,E,t,C,A){return console.warn("colorMode() is deprecated and should not be used, use ColorMode() instead."),R.ColorMode(I,E,t,C,A)},R.getMarkerParts=function(){return console.warn("getMarkerParts() is deprecated and should not be used, use getSymbolParts() instead."),R.getSymbolParts()},R.setMarkerParts=function(I){return console.warn("setMarkerParts() is deprecated and should not be used, use setSymbolParts() instead."),R.setSymbolParts(I),R},I.exports=R},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("black","black","black","black","black")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(80,0,80)","rgb(0,107,140)","rgb(200,0,0)","rgb(0,160,0)","rgb(225,220,0)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(255,0,255)","rgb(0, 255, 255)","rgb(255, 0, 0)","rgb(0, 255, 0)","rgb(255, 255, 0)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(255,0,255)","rgb(0, 255, 255)","rgb(255, 0, 0)","rgb(0, 255, 0)","rgb(255, 255, 0)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(255,161,255)","rgb(128,224,255)","rgb(255,128,128)","rgb(170,255,170)","rgb(255,255,128)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(128,0,128)","rgb(0,168,220)","rgb(255,48,49)","rgb(0,226,110)","rgb(255,255,0)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode(!1,!1,!1,!1,!1)},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("rgb(239, 239, 239)","rgb(239, 239, 239)","rgb(239, 239, 239)","rgb(239, 239, 239)","rgb(239, 239, 239)")},function(I,E,t){var R=t(0);I.exports=new R.ColorMode("white","white","white","white","white")},function(I,E){I.exports=function(I,E,t,R,C,A){function e(I){if("object"==typeof I){if(Array.isArray(I)){for(var E=0;E':"",t["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AHH---"]=[t["GR.IC.AVIATION ROTARY WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["SOF.M2.COMBAT SEARCH AND RESCUE"]],I["S-F-AHA---"]=[t["AR.I.MILITARY FIXED WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["SOF.M2.ATTACK"]],I["S-F-AHU---"]=[t["AR.I.MILITARY FIXED WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["SOF.M2.UTILITY"]],I["S-F-AHUL--"]=[t["AR.I.MILITARY FIXED WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["AIR.M2.LIGHT"]],I["S-F-AHUM--"]=[t["AR.I.MILITARY FIXED WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["AIR.M2.MEDIUM"]],I["S-F-AHUH--"]=[t["AR.I.MILITARY FIXED WING"],t["AIR.M1.SPECIAL OPERATIONS FORCES"],t["AIR.M2.HEAVY"]],I["S-F-SN----"]=I["S-F-N-----"]=[t["GR.IC.NAVAL"],t["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNS---"]=I["S-F-NS----"]=[t["GR.IC.SEA-AIR-LAND"]],I["S-F-SNU---"]=I["S-F-NU----"]=[t["SOF.IC.UNDERWATER DEMOLITION TEAM"]],I["S-F-SNB---"]=I["S-F-NB----"]=[t["SE.IC.COMBATANT"],t["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNN---"]=I["S-F-NN----"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"],t["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-G-----"]=[t["GR.IC.FF.INFANTRY"],t["AR.I.SPECIAL OPERATIONS FORCES"]],I["S-F-GS----"]=[t["GR.IC.SPECIAL FORCES"]],I["S-F-GR----"]=I["S-F-GSR---"]=[t["GR.IC.FF.INFANTRY"],t["AIR.M1.RECONNAISSANCE"],t["GR.M2.AIRBORNE"]],I["S-F-GP----"]=I["S-F-GSP---"]=[t["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]],I["S-F-GPA---"]=I["S-F-GSPA--"]=[t["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"],R._translate(0,-30,R._scale(.7,t["AR.I.MILITARY FIXED WING"]))],I["S-F-GC----"]=I["S-F-GCA---"]=[t["GR.IC.CIVIL AFFAIRS"]],I["S-F-GB----"]=I["S-F-B-----"]=[t["AR.I.SPECIAL OPERATIONS FORCES"],t["GR.M2.SUPPORT"]]}},function(I,E,t){t(0);I.exports=function(I,E,t,R){I["S-P-------"]=[],I["S-P-S-----"]=[t["SP.I.FF.SATELLITE"]],I["S-P-V-----"]=[t["SP.I.FF.CREWED SPACE VEHICLE"]],I["S-P-T-----"]=[t["SP.I.FF.SPACE STATION"]],I["S-P-L-----"]=[t["SP.I.SPACE LAUNCH VEHICLE"]]}},function(I,E,t){t(0);I.exports=function(I,E,t,R){I["O-V-A-----"]=[t["ST.IC.ARSON/FIRE"]],I["O-V-M-----"]=[t["ST.IC.KILLING VICTIM"]],I["O-V-MA----"]=[t["ST.IC.KILLING VICTIM"],t["ST.M1.MURDER"]],I["O-V-MB----"]=[t["ST.IC.KILLING VICTIM"],t["ST.M1.EXECUTION (WRONGFUL KILLING)"]],I["O-V-MC----"]=[t["ST.IC.KILLING VICTIM"],t["ST.M1.ASSASSINATION"]],I["O-V-B-----"]=[t["ST.IC.BOMB"]],I["O-V-Y-----"]=[t["ST.IC.BOOBY TRAP"]],I["O-V-D-----"]=[t["ST.IC.DRIVE-BY SHOOTING"]],I["O-V-S-----"]=[t["ST.IC.SNIPING"]],I["O-V-P-----"]=[t["ST.IC.POISONING"]],I["O-V-E-----"]=[t["ST.IC.EXPLOSION"]],I["O-V-EI----"]=[t["ST.IC.EXPLOSION"],t["ST.IC.IED"]],I["O-L-B-----"]=[t["ST.IC.BLACK LIST LOCATION"]],I["O-L-G-----"]=[t["ST.IC.GRAY LIST LOCATION"]],I["O-L-W-----"]=[t["ST.IC.WHITE LIST LOCATION"]],I["O-L-M-----"]=[t["ST.IC.MASS GRAVE LOCATION"]],I["O-O-P-----"]=[t["ST.IC.PATROLLING"]],I["O-O-RW----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.WILLING"]],I["O-O-RC----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.COERCED/IMPRESSED"]],I["O-O-D-----"]=[t["ST.IC.DEMONSTRATION"]],I["O-O-M-----"]=[t["ST.IC.MINE LAYING"]],I["O-O-Y-----"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"]],I["O-O-YT----"]=[t["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]],I["O-O-YW----"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"],t["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["O-O-YH----"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"],t["ST.M1.HOUSE-TO-HOUSE"]],I["O-O-F-----"]=[t["ST.IC.SEARCHING"]],I["O-O-S-----"]=[t["ST.IC.SPY"]],I["O-O-O-----"]=[t["ST.IC.FOOD DISTRIBUTION"]],I["O-O-E-----"]=[t["ST.IC.EXTORTION"]],I["O-O-HT----"]=[t["ST.IC.KNOWN INSURGENT VEHICLE"],t["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HA----"]=[t["ST.IC.HIJACKING (AIRPLANE)"],t["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HV----"]=[t["ST.IC.HIJACKING (BOAT)"],t["ST.M1.HIJACKING/HIJACKED"]],I["O-O-K-----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.KIDNAPPING"]],I["O-O-KA----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.KIDNAPPING"],t["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I["O-O-A-----"]=[t["ST.IC.ARREST"]],I["O-O-U-----"]=[t["ST.IC.DRUG RELATED ACTIVITIES"]],I["O-O-C-----"]=[t["ST.IC.COMPOSITE LOSS"]],I["O-O-CA----"]=[t["ST.IC.COMPOSITE LOSS"],t["ST.M1.COMBAT"]],I["O-O-CB----"]=[t["ST.IC.COMPOSITE LOSS"],t["ST.M1.ACCIDENT"]],I["O-O-CC----"]=[t["ST.IC.COMPOSITE LOSS"],t["ST.M1.OTHER"]],I["O-I-R-----"]=[t["ST.IC.GROUP"]],I["O-I-S-----"]=[t["ST.IC.SAFE HOUSE"]],I["O-I-G-----"]=[t["ST.IC.GRAFFITI"]],I["O-I-V-----"]=[t["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]],I["O-I-I-----"]=[t["ST.IC.KNOWN INSURGENT VEHICLE"]],I["O-I-D-----"]=[t["ST.IC.KNOWN INSURGENT VEHICLE"],t["ST.M1.DRUG"]],I["O-I-F-----"]=[t["ST.IC.INTERNAL SECURITY FORCE"]],I["O-P-------"]=[t["ST.IC.INDIVIDUAL"]],I["O-P-A-----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.LEADER"]],I["O-P-B-----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.TARGETED"]],I["O-P-C-----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.TERRORIST"]],I["O-G-------"]=[t["ST.IC.GROUP"]],I["O-G-A-----"]=[t["ST.IC.GROUP"],t["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],I["O-G-B-----"]=[t["ST.IC.GROUP"],t["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],I["O-G-C-----"]=[t["ST.IC.GROUP"],t["ST.M1.TERRORIST"]],I["O-G-D-----"]=[t["ST.IC.GROUP"],t["ST.M1.RELIGIOUS"]],I["O-G-E-----"]=[t["ST.IC.GROUP"],t["ST.M1.FOREIGN FIGHTERS"]],I["O-G-F-----"]=[t["ST.IC.GROUP"],t["ST.M1.GANG"]],I["O-R-------"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.RAPE"]],I["O-R-A-----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.RAPE"],t["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]]}},function(I,E,t){t(0);I.exports=function(I,E,t,R){I["S-U-------"]=[],I["S-U-S-----"]=[t["SU.IC.SUBMARINE"]],I["S-U-SF----"]=[t["SU.IC.SUBMARINE, SURFACED"]],I["S-U-SB----"]=[t["SU.IC.SUBMARINE, BOTTOMED"]],I["S-U-SR----"]=[t["SU.IC.SUBMARINE"],t["SU.M2.CERTSUB"]],I["S-U-SX----"]=[t["SU.IC.NON-SUBMARINE"]],I["S-U-SN----"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"]],I["S-U-SNF---"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]],I["S-U-SNA---"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"],t["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SNM---"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"],t["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SNG---"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"],t["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SNB---"]=[t["SU.IC.SUBMARINE NUCLEAR PROPULSION"],t["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SC----"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]],I["S-U-SCF---"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]],I["S-U-SCA---"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],t["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SCM---"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],t["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SCG---"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],t["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SCB---"]=[t["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],t["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SO----"]=[t["SU.IC.OTHER SUBMERSIBLE"]],I["S-U-SOF---"]=[t["SU.IC.OTHER SUBMERSIBLE, SURFACED"]],I["S-U-SU----"]=[t["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-SUM---"]=[t["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],t["SU.M1.MINE COUNTERMEASURES"]],I["S-U-SUS---"]=[t["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],t["SU.M1.ANTISUBMARINE WARFARE"]],I["S-U-SUN---"]=[t["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],t["SU.M1.SURFACE WARFARE"]],I["S-U-S1----"]=[t["SU.IC.SUBMARINE"],t["SU.M1.POSSIBLE SUBMARINE - LOW 1"]],I["S-U-S2----"]=[t["SU.IC.SUBMARINE"],t["SU.M1.POSSIBLE SUBMARINE - LOW 2"]],I["S-U-S3----"]=[t["SU.IC.SUBMARINE"],t["SU.M1.POSSIBLE SUBMARINE - HIGH 3"]],I["S-U-S4----"]=[t["SU.IC.SUBMARINE"],t["SU.M1.POSSIBLE SUBMARINE - HIGH 4"]],I["S-U-SL----"]=[t["SU.IC.SUBMARINE"],t["SU.M1.PROBABLE SUBMARINE"]],I["S-U-SK----"]=[t["SU.IC.SUBMARINE, SNORKELING"]],I["S-U-W-----"]=[t["SU.IC.UNDERWATER WEAPON"]],I["S-U-WT----"]=[t["SU.IC.TORPEDO"]],I["S-U-WM----"]=[t["SU.IC.SEA MINE"]],I["S-U-WMD---"]=[t["SU.IC.SEA MINE NEUTRALIZED"]],I["S-U-WMG---"]=[t["SU.IC.SEA MINE - BOTTOM"]],I["S-U-WMGD--"]=[t["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]],I["S-U-WMGX--"]=[t["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]],I["S-U-WMGE--"]=[t["SU.IC.SEA MINE MILEC - BOTTOM"]],I["S-U-WMGC--"]=[t["SU.IC.SEA MINE MILCO - BOTTOM"]],I["S-U-WMGR--"]=[t["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]],I["S-U-WMGO--"]=[t["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]],I["S-U-WMM---"]=[t["SU.IC.SEA MINE - MOORED"]],I["S-U-WMMD--"]=[t["SU.IC.SEA MINE NEUTRALIZED - MOORED"]],I["S-U-WMMX--"]=[t["SU.IC.SEA MINE EXERCISE MINE - MOORED"]],I["S-U-WMME--"]=[t["SU.IC.SEA MINE MILEC - MOORED"]],I["S-U-WMMC--"]=[t["SU.IC.SEA MINE MILCO - MOORED"]],I["S-U-WMMR--"]=[t["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]],I["S-U-WMMO--"]=[t["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]],I["S-U-WMF---"]=[t["SU.IC.SEA MINE - FLOATING"]],I["S-U-WMFD--"]=[t["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]],I["S-U-WMFX--"]=[t["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]],I["S-U-WMFE--"]=[t["SU.IC.SEA MINE MILEC - FLOATING"]],I["S-U-WMFC--"]=[t["SU.IC.SEA MINE MILCO - FLOATING"]],I["S-U-WMFR--"]=[t["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]],I["S-U-WMFO--"]=[t["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]],I["S-U-WMO---"]=[t["SU.IC.SEA MINE (IN OTHER POSITION)"]],I["S-U-WMOD--"]=[t["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]],I["S-U-WMX---"]=[t["SU.IC.SEA MINE EXERCISE MINE"]],I["S-U-WME---"]=[t["SU.IC.SEA MINE MILEC"]],I["S-U-WMA---"]=[t["SU.IC.SEA MINE MINE ANCHOR"]],I["S-U-WMC---"]=[t["SU.IC.SEA MINE MILCO"]],I["S-U-WMR---"]=[t["SU.IC.SEA MINE NEGATIVE REACQUISITION"]],I["S-U-WMB---"]=[t["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]],I["S-U-WMBD--"]=[t["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]],I["S-U-WMN---"]=[t["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]],I["S-U-WMS---"]=[t["SU.IC.SEA MINE - RISING"]],I["S-U-WMSX--"]=[t["SU.IC.SEA MINE EXERCISE MINE - RISING"]],I["S-U-WMSD--"]=[t["SU.IC.SEA MINE NEUTRALIZED - RISING"]],I["S-U-WV----"]=[t["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-WD----"]=[t["SU.IC.UNDERWATER DECOY"]],I["S-U-WDM---"]=[t["SU.IC.SEA MINE DECOY"]],I["S-U-WDMG--"]=[t["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]],I["S-U-WDMM--"]=[t["SU.IC.SEA MINE DECOY, MOORED"]],I["S-U-N-----"]=[t["SU.IC.NON-SUBMARINE"]],I["S-U-ND----"]=[t["SU.IC.DIVER, CIVILIAN"]],I["S-U-E-----"]=[t["SU.IC.ENVIRONMENTAL REPORT LOCATION"]],I["S-U-V-----"]=[t["SU.IC.DIVE REPORT LOCATION"]],I["S-U-X-----"]=[t["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]],I["S-U-NBS---"]=[t["SU.IC.SEABED INSTALLATION/MANMADE"]],I["S-U-NBR---"]=[t["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]],I["S-U-NBW---"]=[t["SU.IC.WRECK"]],I["S-U-NM----"]=[t["SU.IC.MARINE LIFE"]],I["S-U-NA----"]=[t["SU.IC.SEA ANOMALY"]]}},function(I,E){I.exports=function(I,E,t,R){I["G-T-D-----"]=t["TP.DESTROY"],E["G-T-D-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-I-----"]=t["TP.INTERDICT"],E["G-T-I-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-N-----"]=t["TP.NEUTRALIZE"],E["G-T-N-----"]={x1:0,x2:200,y1:40,y2:160},I["G-G-GPUUD-"]=t["TP.DATUM"],E["G-G-GPUUD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUUB-"]=t["TP.BRIEF CONTACT"],E["G-G-GPUUB-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUL-"]=t["TP.LOST CONTACT"],E["G-G-GPUUL-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUS-"]=t["TP.SINKER"],E["G-G-GPUUS-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUY--"]=t["TP.SONOBUOY"],E["G-G-GPUY--"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYP-"]=t["TP.SONOBUOY PATTERN CENTER"],E["G-G-GPUYP-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYD-"]=t["TP.SONOBUOY DIFAR"],E["G-G-GPUYD-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYL-"]=t["TP.SONOBUOY LOFAR"],E["G-G-GPUYL-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYC-"]=t["TP.SONOBUOY CASS"],E["G-G-GPUYC-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYS-"]=t["TP.SONOBUOY DICASS"],E["G-G-GPUYS-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYB-"]=t["TP.SONOBUOY BT"],E["G-G-GPUYB-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYA-"]=t["TP.SONOBUOY ANM"],E["G-G-GPUYA-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYV-"]=t["TP.SONOBUOY VLAD"],E["G-G-GPUYV-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYT-"]=t["TP.SONOBUOY ATAC"],E["G-G-GPUYT-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYR-"]=t["TP.SONOBUOY RO"],E["G-G-GPUYR-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYK-"]=t["TP.SONOBUOY KINGPIN"],E["G-G-GPUYK-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYX-"]=t["TP.SONOBUOY EXPIRED"],E["G-G-GPUYX-"]={x1:40,x2:160,y1:-10,y2:160},I["G-G-GPUS--"]=t["TP.SEARCH"],E["G-G-GPUS--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSA-"]=t["TP.SEARCH AREA"],E["G-G-GPUSA-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSD-"]=t["TP.DIP POSITION"],E["G-G-GPUSD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSC-"]=t["TP.SEARCH CENTER"],E["G-G-GPUSC-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPR---"]=t["TP.REFERENCE POINT"],E["G-G-GPR---"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRN--"]=t["TP.NAVIGATIONAL REFERENCE"],E["G-G-GPRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRS--"]=t["TP.SPECIAL POINT"],E["G-G-GPRS--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRD--"]=t["TP.DLRP"],E["G-G-GPRD--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRP--"]=t["TP.POINT OF INTENDED MOVEMENT"],E["G-G-GPRP--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRM--"]=t["TP.MARSHALL POINT"],E["G-G-GPRM--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRW--"]=t["TP.REFERENCE POINT WAYPOINT"],E["G-G-GPRW--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRC--"]=t["TP.CORRIDOR TAB"],E["G-G-GPRC--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRI--"]=t["TP.POINT OF INTEREST"],E["G-G-GPRI--"]={x1:50,x2:150,y1:-25},I["G-G-GPWA--"]=t["TP.AIM POINT"],E["G-G-GPWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWD--"]=t["TP.DROP POINT"],E["G-G-GPWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-G-GPWE--"]=t["TP.ENTRY POINT"],E["G-G-GPWE--"]={x1:50,x2:150,y1:50},I["G-G-GPWG--"]=t["TP.GROUND ZERO"],E["G-G-GPWG--"]={x1:50,x2:150,y1:30},I["G-G-GPWM--"]=t["TP.MSL DETECT POINT"],E["G-G-GPWM--"]={x1:50,x2:150,y1:30},I["G-G-GPWI--"]=t["TP.IMPACT POINT"],E["G-G-GPWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWP--"]=t["TP.PREDICTED IMPACT POINT"],E["G-G-GPWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPF---"]=t["TP.FORMATION"],E["G-G-GPF---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPH---"]=t["TP.HARBOR"],E["G-G-GPH---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHQ--"]=t["TP.HARBOR POINT Q"],E["G-G-GPHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHA--"]=t["TP.HARBOR POINT A"],E["G-G-GPHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHY--"]=t["TP.HARBOR POINT Y"],E["G-G-GPHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHX--"]=t["TP.HARBOR POINT X"],E["G-G-GPHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPO---"]=t["TP.ROUTE"],E["G-G-GPO---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPOZ--"]=t["TP.ROUTE RENDEZVOUS"],E["G-G-GPOZ--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOD--"]=t["TP.ROUTE DIVERSIONS"],E["G-G-GPOD--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOW--"]=t["TP.ROUTE WAYPOINT"],E["G-G-GPOW--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOP--"]=t["TP.ROUTE PIM"],E["G-G-GPOP--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOR--"]=t["TP.ROUTE POINT R"],E["G-G-GPOR--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPA---"]=t["TP.AIR CONTROL POINT"],E["G-G-GPA---"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAP--"]=t["TP.COMBAT AIR PATROL (CAP)"],E["G-G-GPAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAW--"]=t["TP.AIRBORNE EARLY WARNING (AEW)"],E["G-G-GPAW--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAK--"]=t["TP.TANKING"],E["G-G-GPAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAA--"]=t["TP.FIXED WING"],E["G-G-GPAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAH--"]=t["TP.ROTARY WING"],E["G-G-GPAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAB--"]=t["TP.SUCAP - FIXED WING"],E["G-G-GPAB--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAC--"]=t["TP.SUCAP - ROTARY WING"],E["G-G-GPAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAD--"]=t["TP.MIW - FIXED WING"],E["G-G-GPAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAE--"]=t["TP.MIW - ROTARY WING"],E["G-G-GPAE--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAS--"]=t["TP.STRIKE IP"],E["G-G-GPAS--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAT--"]=t["TP.TACAN"],E["G-G-GPAT--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAO--"]=t["TP.TOMCAT"],E["G-G-GPAO--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAR--"]=t["TP.RESCUE"],E["G-G-GPAR--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAL--"]=t["TP.REPLENISH"],E["G-G-GPAL--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAF--"]=t["TP.UNMANNED AERIAL SYSTEM"],E["G-G-GPAF--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAG--"]=t["TP.VTUA"],E["G-G-GPAG--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAI--"]=t["TP.ORBIT"],E["G-G-GPAI--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAJ--"]=t["TP.ORBIT - FIGURE EIGHT"],E["G-G-GPAJ--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAM--"]=t["TP.ORBIT - RACE TRACK"],E["G-G-GPAM--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAN--"]=t["TP.ORBIT - RANDOM, CLOSED"],E["G-G-GPAN--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPP---"]=t["TP.ACTION POINT"],E["G-G-GPP---"]={x1:60,x2:140,y1:-60},I["G-G-GPPK--"]=t["TP.ACTION CHECK POINT"],E["G-G-GPPK--"]={x1:60,x2:140,y1:-60},I["G-G-GPPC--"]=t["TP.CONTACT POINT"],E["G-G-GPPC--"]={x1:55,x2:145,y1:-10},I["G-G-GPPO--"]=t["TP.COORDINATION POINT"],E["G-G-GPPO--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPPD--"]=t["TP.DECISION POINT"],E["G-G-GPPD--"]={x1:30,x2:170,y1:25,y2:160},I["G-G-GPPL--"]=t["TP.ACTION LINKUP POINT"],E["G-G-GPPL--"]={x1:60,x2:140,y1:-60},I["G-G-GPPP--"]=t["TP.ACTION PASSAGE POINT"],E["G-G-GPPP--"]={x1:60,x2:140,y1:-60},I["G-G-GPPR--"]=t["TP.ACTION RALLY POINT"],E["G-G-GPPR--"]={x1:60,x2:140,y1:-60},I["G-G-GPPE--"]=t["TP.ACTION RELEASE POINT"],E["G-G-GPPE--"]={x1:60,x2:140,y1:-60},I["G-G-GPPS--"]=t["TP.ACTION START POINT"],E["G-G-GPPS--"]={x1:60,x2:140,y1:-60},I["G-G-GPPA--"]=t["TP.ACTION AMNESTY POINT"],E["G-G-GPPA--"]={x1:60,x2:140,y1:-60},I["G-G-GPPW--"]=t["TP.WAYPOINT"],E["G-G-GPPW--"]={x1:60,x2:140,y1:60,y2:140},I["G-G-GPC---"]=t["TP.SEA SURFACE CONTROL STATION"],E["G-G-GPC---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCU--"]=t["TP.(USV) CONTROL STATION"],E["G-G-GPCU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUR-"]=t["TP.(RMV) USV CONTROL STATION"],E["G-G-GPCUR-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUA-"]=t["TP.USV - ASW CONTROL STATION"],E["G-G-GPCUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUS-"]=t["TP.USV - SUW CONTROL STATION"],E["G-G-GPCUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUM-"]=t["TP.USV - MIW CONTROL STATION"],E["G-G-GPCUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCA--"]=t["TP.ASW CONTROL STATION"],E["G-G-GPCA--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCS--"]=t["TP.SUW CONTROL STATION"],E["G-G-GPCS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCM--"]=t["TP.MIW CONTROL STATION"],E["G-G-GPCM--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCP--"]=t["TP.PICKET CONTROL STATION"],E["G-G-GPCP--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCR--"]=t["TP.RENDEZVOUS CONTROL POINT"],E["G-G-GPCR--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCC--"]=t["TP.RESCUE CONTROL POINT"],E["G-G-GPCC--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCE--"]=t["TP.REPLENISHMENT CONTROL POINT"],E["G-G-GPCE--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCN--"]=t["TP.NONCOMBATANT CONTROL STATION"],E["G-G-GPCN--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPB---"]=t["TP.SUB SURFACE CONTROL STATION"],E["G-G-GPB---"]={x1:30,x2:170,y1:60,y2:140};I["G-G-GPBU--"]=t["TP.(UUV) CONTROL STATION"],E["G-G-GPBU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUA-"]=t["TP.UUV - ASW CONTROL STATION"],E["G-G-GPBUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUS-"]=t["TP.UUV - SUW CONTROL STATION"],E["G-G-GPBUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUM-"]=t["TP.UUV - MIW CONTROL STATION"],E["G-G-GPBUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBS--"]=t["TP.SUBMARINE CONTROL STATION"],E["G-G-GPBS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBSA-"]=t["TP.ASW SUBMARINE CONTROL STATION"],E["G-G-GPBSA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-APP---"]=t["TP.AIR CONTROL POINT (ACP)"],E["G-G-APP---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APC---"]=t["TP.COMMUNICATIONS CHECKPOINT"],E["G-G-APC---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APU---"]=t["TP.PULL-UP POINT"],E["G-G-APU---"]={x1:50,x2:240,y1:50,y2:150},I["G-G-APD---"]=t["TP.DOWNED AIRCREW PICKUP POINT"],E["G-G-APD---"]={x1:60,x2:140,y1:-60},I["G-G-PN----"]=t["TP.DUMMY MINEFIELD"],E["G-G-PN----"]={x1:40,x2:160,y1:-10,y2:140},I["G-G-DPT---"]=t["TP.TARGET REFERENCE"],I["G-G-DPO---"]=t["TP.OBSERVATION POST/OUTPOST"],E["G-G-DPO---"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOC--"]=t["TP.COMBAT OUTPOST"],E["G-G-DPOC--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOR--"]=t["TP.OBSERVATION POST/RECONNAISSANCE"],E["G-G-DPOR--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOF--"]=t["TP.FORWARD OBSERVER POSITION"],E["G-G-DPOF--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOS--"]=t["TP.SENSOR OUTPOST"],E["G-G-DPOS--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPON--"]=t["TP.CBRN OBSERVATION POST"],E["G-G-DPON--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-OPP---"]=t["TP.POINT OF DEPARTURE"],E["G-G-OPP---"]={x1:60,x2:140,y1:-60},I["G-M-OAOF--"]=t["TP.FIXED AND PREFABRICATED"],E["G-M-OAOF--"]={x1:60,x2:140,y1:30},I["G-M-OAOM--"]=t["TP.TETRAHEDRONS"],E["G-M-OAOM--"]={x1:60,x2:140,y1:30},I["G-M-OAOP--"]=t["TP.TETRAHEDRONS MOVABLE"],E["G-M-OAOP--"]={x1:60,x2:140,y1:30},I["G-M-OB----"]=t["TP.BOOBY TRAP"],I["G-M-OMU---"]=t["TP.UNSPECIFIED MINE"],I["G-M-OMT---"]=t["TP.ANTITANK MINE (AT)"],I["G-M-OMD---"]=t["TP.(AT) ANTIHANDLING DEVICE"],E["G-M-OMD---"]={x1:60,x2:140,y1:40,y2:195},I["G-M-OME---"]=t["TP.(AT) DIRECTIONAL"],E["G-M-OME---"]={x1:60,x2:140,y1:10,y2:140},I["G-M-OMP---"]=t["TP.ANTIPERSONNEL (AP) MINES"],I["G-M-OMW---"]=t["TP.WIDE AREA MINES"],I["G-M-OFS---"]=t["TP.MINEFIELDS STATIC"],E["G-M-OFS---"]={x1:40,x2:160,y1:60,y2:140},I["G-M-OHTL--"]=t["TP.TOWER LOW"],E["G-M-OHTL--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-OHTH--"]=t["TP.TOWER HIGH"],E["G-M-OHTH--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-BCP---"]=t["TP.ENGINEER REGULATING POINT"],E["G-M-BCP---"]={x1:60,x2:140,y1:-60},I["G-M-SE----"]=t["TP.EARTHWORK/FORTIFICATION"],I["G-M-SF----"]=t["TP.FORT"],I["G-M-SS----"]=t["TP.SURFACE SHELTER"],I["G-M-SU----"]=t["TP.UNDERGROUND SHELTER"],I["G-M-NZ----"]=t["TP.NUCLEAR DETONATIONS GROUND ZERO"],E["G-M-NZ----"]={x1:60,x2:140,y1:-20},I["G-M-NF----"]=t["TP.NUCLEAR FALLOUT PRODUCING"],E["G-M-NF----"]={x1:50,x2:150,y1:-20},I["G-M-NEB---"]=t["TP.RELEASE EVENTS BIOLOGICAL"],E["G-M-NEB---"]={x1:-10,x2:140,y1:-20},I["G-M-NEC---"]=t["TP.RELEASE EVENTS CHEMICAL"],E["G-M-NEC---"]={x1:-20,x2:140,y1:-20},I["G-M-NDP---"]=t["TP.DECON SITE/POINT"],E["G-M-NDP---"]={x1:60,x2:140,y1:-60},I["G-M-NDA---"]=t["TP.ALTERNATE DECON SITE/POINT"],E["G-M-NDA---"]={x1:60,x2:140,y1:-60},I["G-M-NDT---"]=t["TP.DECON SITE/POINT (TROOPS)"],E["G-M-NDT---"]={x1:60,x2:140,y1:-60},I["G-M-NDE---"]=t["TP.DECON SITE/POINT (EQUIPMENT)"],E["G-M-NDE---"]={x1:60,x2:140,y1:-60},I["G-M-NDB---"]=t["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],E["G-M-NDB---"]={x1:60,x2:140,y1:-60},I["G-M-NDO---"]=t["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],E["G-M-NDO---"]={x1:60,x2:140,y1:-60},I["G-M-NDD---"]=t["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],E["G-M-NDD---"]={x1:60,x2:140,y1:-60},I["G-F-PTS---"]=t["TP.POINT/SINGLE TARGET"],I["G-F-PTN---"]=t["TP.NUCLEAR TARGET"],I["G-F-PCF---"]=t["TP.FIRE SUPPORT STATION"],I["G-F-PCS---"]=t["TP.SURVEY CONTROL POINT"],E["G-F-PCS---"]={x1:60,x2:140,y1:-60},I["G-F-PCB---"]=t["TP.FIRING POINT"],E["G-F-PCB---"]={x1:60,x2:140,y1:-60},I["G-F-PCR---"]=t["TP.RELOAD POINT"],E["G-F-PCR---"]={x1:60,x2:140,y1:-60},I["G-F-PCH---"]=t["TP.HIDE POINT"],E["G-F-PCH---"]={x1:60,x2:140,y1:-60},I["G-F-PCL---"]=t["TP.LAUNCH POINT"],E["G-F-PCL---"]={x1:60,x2:140,y1:-60},I["G-S-PX----"]=t["TP.AMBULANCE EXCHANGE POINT"],E["G-S-PX----"]={x1:60,x2:140,y1:-60},I["G-S-PC----"]=t["TP.CANNIBALIZATION POINT"],E["G-S-PC----"]={x1:60,x2:140,y1:-60},I["G-S-PY----"]=t["TP.CASUALTY COLLECTION POINT"],E["G-S-PY----"]={x1:60,x2:140,y1:-60},I["G-S-PT----"]=t["TP.CIVILIAN COLLECTION POINT"],E["G-S-PT----"]={x1:60,x2:140,y1:-60},I["G-S-PD----"]=t["TP.DETAINEE COLLECTION POINT"],E["G-S-PD----"]={x1:60,x2:140,y1:-60},I["G-S-PE----"]=t["TP.EPW COLLECTION POINT"],E["G-S-PE----"]={x1:60,x2:140,y1:-60},I["G-S-PL----"]=t["TP.LOGISTICS RELEASE POINT"],E["G-S-PL----"]={x1:60,x2:140,y1:-60},I["G-S-PM----"]=t["TP.MAINTENANCE COLLECTION POINT"],E["G-S-PM----"]={x1:60,x2:140,y1:-60},I["G-S-PR----"]=t["TP.REARM, REFUEL AND RESUPPLY POINT"],E["G-S-PR----"]={x1:60,x2:140,y1:-60},I["G-S-PU----"]=t["TP.REFUEL ON THE MOVE POINT"],E["G-S-PU----"]={x1:60,x2:140,y1:-60},I["G-S-PO----"]=t["TP.TRAFFIC CONTROL POST"],E["G-S-PO----"]={x1:60,x2:140,y1:-60},I["G-S-PI----"]=t["TP.TRAILER TRANSFER POINT"],E["G-S-PI----"]={x1:60,x2:140,y1:-60},I["G-S-PN----"]=t["TP.UNIT MAINTENANCE COLLECTION POINT"],E["G-S-PN----"]={x1:60,x2:140,y1:-60},I["G-S-PSZ---"]=t["TP.SUPPLY POINT"],E["G-S-PSZ---"]={x1:60,x2:140,y1:-60},I["G-S-PSA---"]=t["TP.SP CLASS I"],E["G-S-PSA---"]={x1:60,x2:140,y1:-60},I["G-S-PSB---"]=t["TP.SP CLASS II"],E["G-S-PSB---"]={x1:60,x2:140,y1:-60},I["G-S-PSC---"]=t["TP.SP CLASS III"],E["G-S-PSC---"]={x1:60,x2:140,y1:-60},I["G-S-PSD---"]=t["TP.SP CLASS IV"],E["G-S-PSD---"]={x1:60,x2:140,y1:-60},I["G-S-PSE---"]=t["TP.SP CLASS V"],E["G-S-PSE---"]={x1:60,x2:140,y1:-60},I["G-S-PSF---"]=t["TP.SP CLASS VI"],E["G-S-PSF---"]={x1:60,x2:140,y1:-60},I["G-S-PSG---"]=t["TP.SP CLASS VII"],E["G-S-PSG---"]={x1:60,x2:140,y1:-60},I["G-S-PSH---"]=t["TP.SP CLASS VIII"],E["G-S-PSH---"]={x1:60,x2:140,y1:-60},I["G-S-PSI---"]=t["TP.SP CLASS IX"],E["G-S-PSI---"]={x1:60,x2:140,y1:-60},I["G-S-PSJ---"]=t["TP.SP CLASS X"],E["G-S-PSJ---"]={x1:60,x2:140,y1:-60},I["G-S-PAS---"]=t["TP.AMMUNITION SUPPLY POINT (ASP)"],E["G-S-PAS---"]={x1:60,x2:140,y1:-60},I["G-S-PAT---"]=t["TP.AMMUNITION TRANSFER POINT (ATP)"],E["G-S-PAT---"]={x1:60,x2:140,y1:-60},I["G-O-ED----"]=t["TP.DITCHED AIRCRAFT"],I["G-O-EP----"]=t["TP.PERSON IN WATER"],I["G-O-EV----"]=t["TP.DISTRESSED VESSEL"],I["G-O-HM----"]=t["TP.SEA MINELIKE"],E["G-O-HM----"]={x1:40,x2:160,y1:40,y2:150},I["G-O-HI----"]=t["TP.ICEBERG"],E["G-O-HI----"]={x1:50,x2:150,y1:50,y2:150},I["G-O-HO----"]=t["TP.OIL RIG/PLATFORM"],E["G-O-HO----"]={x1:30,x2:170,y1:60,y2:140},I["G-O-SB----"]=t["TP.BOTTOM RETURN"],E["G-O-SB----"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBM---"]=t["TP.INSTALLATION/MANMADE"],E["G-O-SBM---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBN---"]=t["TP.BOTTOM RETURN"],E["G-O-SBN---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBW---"]=t["TP.WRECK, NON DANGEROUS"],E["G-O-SBW---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SBX---"]=t["TP.WRECK, DANGEROUS"],E["G-O-SBX---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SM----"]=t["TP.MARINE LIFE"],E["G-O-SM----"]={x1:100,x2:220,y1:70,y2:130},I["G-O-SS----"]=t["TP.SEA ANOMALY"],E["G-O-SS----"]={x1:50,x2:150,y1:30,y2:120},I["G-O-FA----"]=t["TP.FIX ACOUSTIC"],I["G-O-FE----"]=t["TP.FIX ELECTRO-MAGNETIC"],I["G-O-FO----"]=t["TP.FIX ELECTRO-OPTICAL"]}},function(I,E){I.exports=function(I,E,t,R){I["G-T-GD----"]=t["TP.DESTROY"],E["G-T-GD----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GI----"]=t["TP.INTERDICT"],E["G-T-GI----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GN----"]=t["TP.NEUTRALIZE"],E["G-T-GN----"]={x1:0,x2:200,y1:40,y2:160},I["G-C-MGPFE-"]=t["TP.FIX ELECTRO-MAGNETIC"],I["G-C-MGPFA-"]=t["TP.FIX ACOUSTIC"],I["G-C-MGPFO-"]=t["TP.FIX ELECTRO-OPTICAL"],I["G-C-MGPI--"]=t["TP.POINT OF INTEREST"],E["G-C-MGPI--"]={x1:50,x2:150,y1:-25},I["G-C-MAAP--"]=t["TP.AIR CONTROL POINT (ACP)"],E["G-C-MAAP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAC--"]=t["TP.COMMUNICATIONS CHECKPOINT"],E["G-C-MAAC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAU--"]=t["TP.PULL-UP POINT"],E["G-C-MAAU--"]={x1:50,x2:240,y1:50,y2:150},I["G-C-MAAD--"]=t["TP.DOWNED AIRCREW PICKUP POINT"],E["G-C-MAAD--"]={x1:60,x2:140,y1:-60},I["G-C-MDN---"]=t["TP.DUMMY MINEFIELD"],E["G-C-MDN---"]={x1:40,x2:160,y1:-10,y2:140},I["G-C-MMPT--"]=t["TP.TARGET REFERENCE"],I["G-C-MMPO--"]=t["TP.OBSERVATION POST/OUTPOST"],E["G-C-MMPO--"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOC-"]=t["TP.COMBAT OUTPOST"],E["G-C-MMPOC-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOR-"]=t["TP.OBSERVATION POST/RECONNAISSANCE"],E["G-C-MMPOR-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOF-"]=t["TP.FORWARD OBSERVER POSITION"],E["G-C-MMPOF-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOS-"]=t["TP.SENSOR OUTPOST"],E["G-C-MMPOS-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPON-"]=t["TP.CBRN OBSERVATION POST"],E["G-C-MMPON-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MOPD--"]=t["TP.POINT OF DEPARTURE"],E["G-C-MOPD--"]={x1:60,x2:140,y1:-60},I["G-C-BOATD-"]=t["TP.FIXED AND PREFABRICATED"],E["G-C-BOATD-"]={x1:60,x2:140,y1:30},I["G-C-BOAB--"]=t["TP.BOOBY TRAP"],I["G-C-BOAMA-"]=t["TP.ANTIPERSONNEL (AP) MINES"],I["G-C-BOAMT-"]=t["TP.ANTITANK MINE (AT)"],I["G-C-BOAMD-"]=t["TP.(AT) ANTIHANDLING DEVICE"],E["G-C-BOAMD-"]={x1:60,x2:140,y1:40,y2:195},I["G-C-BOAMC-"]=t["TP.(AT) DIRECTIONAL"],E["G-C-BOAMC-"]={x1:60,x2:140,y1:10,y2:140},I["G-C-BOAMU-"]=t["TP.UNSPECIFIED MINE"],I["G-C-BOAMW-"]=t["TP.WIDE AREA MINES"],I["G-C-BOAIP-"]=t["TP.PLANNED MINEFIELD"],E["G-C-BOAIP-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIC-"]=t["TP.MINEFIELDS STATIC"],E["G-C-BOAIC-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIN-"]=t["TP.ANTITANK (AT) MINEFIELD"],E["G-C-BOAIN-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIS-"]=t["TP.SCATTERABLE MINES"],E["G-C-BOAIS-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAIH-"]=t["TP.ANTIPERSONNEL (AP) MINEFIELD"],E["G-C-BOAIH-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAID-"]=t["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"],E["G-C-BOAID-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAV--"]=t["TP.VOLCANO MINEFIELD"],E["G-C-BOAV--"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BYCG--"]=t["TP.ENGINEER REGULATING POINT"],E["G-C-BYCG--"]={x1:60,x2:140,y1:-60},I["G-C-BSE---"]=t["TP.EARTHWORK/FORTIFICATION"],I["G-C-BSF---"]=t["TP.FORT"],I["G-C-BSH---"]=t["TP.SURFACE SHELTER"],I["G-C-BSU---"]=t["TP.UNDERGROUND SHELTER"],I["G-C-BWN---"]=t["TP.NUCLEAR DETONATIONS GROUND ZERO"],E["G-C-BWN---"]={x1:60,x2:140,y1:-20},I["G-C-BWE---"]=t["TP.NUCLEAR DETONATIONS GROUND ZERO"],E["G-C-BWE---"]={x1:60,x2:140,y1:-20},I["G-C-BWI---"]=t["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],E["G-C-BWI---"]={x1:60,x2:140,y1:-20},I["G-C-BWF---"]=t["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],E["G-C-BWF---"]={x1:60,x2:140,y1:-20},I["G-C-BWP---"]=t["TP.NUCLEAR FALLOUT PRODUCING"],E["G-C-BWP---"]={x1:50,x2:150,y1:-20},I["G-C-BWDP--"]=t["TP.DECON SITE/POINT"],E["G-C-BWDP--"]={x1:60,x2:140,y1:-60},I["G-C-BWDA--"]=t["TP.ALTERNATE DECON SITE/POINT"],E["G-C-BWDA--"]={x1:60,x2:140,y1:-60},I["G-C-BWDT--"]=t["TP.DECON SITE/POINT (TROOPS)"],E["G-C-BWDT--"]={x1:60,x2:140,y1:-60},I["G-C-BWDE--"]=t["TP.DECON SITE/POINT (EQUIPMENT)"],E["G-C-BWDE--"]={x1:60,x2:140,y1:-60},I["G-C-BWDS--"]=t["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],E["G-C-BWDS--"]={x1:60,x2:140,y1:-60},I["G-C-BWDO--"]=t["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],E["G-C-BWDO--"]={x1:60,x2:140,y1:-60},I["G-C-BWDG--"]=t["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],E["G-C-BWDG--"]={x1:60,x2:140,y1:-60},I["G-C-BWDEM-"]=t["TP.DECON POINT (MAIN) EQUIPMENT"],E["G-C-BWDEM-"]={x1:60,x2:140,y1:-60},I["G-C-BWDTF-"]=t["TP.DECON POINT (FORWARD) TROOPS"],E["G-C-BWDTF-"]={x1:60,x2:140,y1:-60},I["G-C-FSTP--"]=t["TP.POINT/SINGLE TARGET"],I["G-C-FSS---"]=t["TP.FIRE SUPPORT STATION"],I["G-C-FAU---"]=t["TP.NUCLEAR TARGET"],I["G-C-SPA---"]=t["TP.AMBULANCE EXCHANGE POINT"],E["G-C-SPA---"]={x1:60,x2:140,y1:-60},I["G-C-SPC---"]=t["TP.CANNIBALIZATION POINT"],E["G-C-SPC---"]={x1:60,x2:140,y1:-60},I["G-C-SPY---"]=t["TP.CASUALTY COLLECTION POINT"],E["G-C-SPY---"]={x1:60,x2:140,y1:-60},I["G-C-SPT---"]=t["TP.CIVILIAN COLLECTION POINT"],E["G-C-SPT---"]={x1:60,x2:140,y1:-60},I["G-C-SPD---"]=t["TP.DETAINEE COLLECTION POINT"],E["G-C-SPD---"]={x1:60,x2:140,y1:-60},I["G-C-SPE---"]=t["TP.EPW COLLECTION POINT"],E["G-C-SPE---"]={x1:60,x2:140,y1:-60},I["G-C-SPL---"]=t["TP.LOGISTICS RELEASE POINT"],E["G-C-SPL---"]={x1:60,x2:140,y1:-60},I["G-C-SPM---"]=t["TP.MAINTENANCE COLLECTION POINT"],E["G-C-SPM---"]={x1:60,x2:140,y1:-60},I["G-C-SPR---"]=t["TP.REARM, REFUEL AND RESUPPLY POINT"],E["G-C-SPR---"]={x1:60,x2:140,y1:-60},I["G-C-SPU---"]=t["TP.REFUEL ON THE MOVE POINT"],E["G-C-SPU---"]={x1:60,x2:140,y1:-60},I["G-C-SPO---"]=t["TP.TRAFFIC CONTROL POST"],E["G-C-SPO---"]={x1:60,x2:140,y1:-60},I["G-C-SPI---"]=t["TP.TRAILER TRANSFER POINT"],E["G-C-SPI---"]={x1:60,x2:140,y1:-60},I["G-C-SPN---"]=t["TP.UNIT MAINTENANCE COLLECTION POINT"],E["G-C-SPN---"]={x1:60,x2:140,y1:-60},I["G-C-SPQT--"]=t["TP.SUPPLY POINT"],E["G-C-SPQT--"]={x1:60,x2:140,y1:-60},I["G-C-SPQA--"]=t["TP.SP CLASS I"],E["G-C-SPQA--"]={x1:60,x2:140,y1:-60},I["G-C-SPQB--"]=t["TP.SP CLASS II"],E["G-C-SPQB--"]={x1:60,x2:140,y1:-60},I["G-C-SPQC--"]=t["TP.SP CLASS III"],E["G-C-SPQC--"]={x1:60,x2:140,y1:-60},I["G-C-SPQD--"]=t["TP.SP CLASS IV"],E["G-C-SPQD--"]={x1:60,x2:140,y1:-60},I["G-C-SPQE--"]=t["TP.SP CLASS V"],E["G-C-SPQE--"]={x1:60,x2:140,y1:-60},I["G-C-SPQF--"]=t["TP.SP CLASS VI"],E["G-C-SPQF--"]={x1:60,x2:140,y1:-60},I["G-C-SPQG--"]=t["TP.SP CLASS VII"],E["G-C-SPQG--"]={x1:60,x2:140,y1:-60},I["G-C-SPQH--"]=t["TP.SP CLASS VIII"],E["G-C-SPQH--"]={x1:60,x2:140,y1:-60},I["G-C-SPQI--"]=t["TP.SP CLASS IX"],E["G-C-SPQI--"]={x1:60,x2:140,y1:-60},I["G-C-SPQJ--"]=t["TP.SP CLASS X"],E["G-C-SPQJ--"]={x1:60,x2:140,y1:-60},I["G-C-SPMA--"]=t["TP.AMMUNITION SUPPLY POINT (ASP)"],E["G-C-SPMA--"]={x1:60,x2:140,y1:-60},I["G-C-SPMT--"]=t["TP.AMMUNITION TRANSFER POINT (ATP)"],E["G-C-SPMT--"]={x1:60,x2:140,y1:-60},I["G-C-OX----"]=t["TP.SPECIAL POINT"],E["G-C-OX----"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXRN--"]=t["TP.NAVIGATIONAL REFERENCE"],E["G-C-OXRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXUD--"]=t["TP.DATUM"],E["G-C-OXUD--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXUB--"]=t["TP.BRIEF CONTACT"],E["G-C-OXUB--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUL--"]=t["TP.LOST CONTACT"],E["G-C-OXUL--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUS--"]=t["TP.SINKER"],E["G-C-OXUS--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXWA--"]=t["TP.AIM POINT"],E["G-C-OXWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWD--"]=t["TP.DROP POINT"],E["G-C-OXWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-C-OXWE--"]=t["TP.ENTRY POINT"],E["G-C-OXWE--"]={x1:50,x2:150,y1:50},I["G-C-OXWG--"]=t["TP.GROUND ZERO"],E["G-C-OXWG--"]={x1:50,x2:150,y1:30},I["G-C-OXWM--"]=t["TP.MSL DETECT POINT"],E["G-C-OXWM--"]={x1:50,x2:150,y1:30},I["G-C-OXWI--"]=t["TP.IMPACT POINT"],E["G-C-OXWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWP--"]=t["TP.PREDICTED IMPACT POINT"],E["G-C-OXWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXY---"]=t["TP.SONOBUOY"],E["G-C-OXY---"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYP--"]=t["TP.SONOBUOY PATTERN CENTER"],E["G-C-OXYP--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYD--"]=t["TP.SONOBUOY DIFAR"],E["G-C-OXYD--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYL--"]=t["TP.SONOBUOY LOFAR"],E["G-C-OXYL--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYC--"]=t["TP.SONOBUOY CASS"],E["G-C-OXYC--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYS--"]=t["TP.SONOBUOY DICASS"],E["G-C-OXYS--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYB--"]=t["TP.SONOBUOY BT"],E["G-C-OXYB--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYA--"]=t["TP.SONOBUOY ANM"],E["G-C-OXYA--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYV--"]=t["TP.SONOBUOY VLAD"],E["G-C-OXYV--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYT--"]=t["TP.SONOBUOY ATAC"],E["G-C-OXYT--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYR--"]=t["TP.SONOBUOY RO"],E["G-C-OXYR--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYK--"]=t["TP.SONOBUOY KINGPIN"],E["G-C-OXYK--"]={x1:60,x2:140,y1:-10,y2:160};I["G-C-OXN---"]=t["TP.FORMATION"],E["G-C-OXN---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXH---"]=t["TP.HARBOR"],E["G-C-OXH---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHQ--"]=t["TP.HARBOR POINT Q"],E["G-C-OXHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHA--"]=t["TP.HARBOR POINT A"],E["G-C-OXHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHY--"]=t["TP.HARBOR POINT Y"],E["G-C-OXHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHX--"]=t["TP.HARBOR POINT X"],E["G-C-OXHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXR---"]=t["TP.ROUTE"],E["G-C-OXR---"]={x1:30,x2:170,y1:60,y2:140},I["G-C-OXRR--"]=t["TP.ROUTE RENDEZVOUS"],E["G-C-OXRR--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRD--"]=t["TP.ROUTE DIVERSIONS"],E["G-C-OXRD--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRW--"]=t["TP.ROUTE WAYPOINT"],E["G-C-OXRW--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRP--"]=t["TP.ROUTE PIM"],E["G-C-OXRP--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRT--"]=t["TP.ROUTE POINT R"],E["G-C-OXRT--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXSTC-"]=t["TP.COMBATANT STATION"],E["G-C-OXSTC-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCP"]=t["TP.PICKET STATION"],E["G-C-OXSTCP"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCA"]=t["TP.ASW SHIP STATION"],E["G-C-OXSTCA"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTR-"]=t["TP.REPLENISHMENT AT SEA (RAS) STATION"],E["G-C-OXSTR-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTH-"]=t["TP.RESCUE STATION"],E["G-C-OXSTH-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTS-"]=t["TP.SUBMARINE STATION"],E["G-C-OXSTS-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTSA"]=t["TP.ASW SUBMARINE STATION"],E["G-C-OXSTSA"]={x1:-115,x2:140,y1:60,y2:140},I["G-C-OXS---"]=t["TP.SEARCH"],E["G-C-OXS---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXSA--"]=t["TP.SEARCH AREA"],E["G-C-OXSA--"]={x1:20,x2:150,y1:50,y2:150},I["G-C-OXSD--"]=t["TP.DIP POSITION"],E["G-C-OXSD--"]={x1:10,x2:150,y1:50,y2:150},I["G-C-OXSC--"]=t["TP.SEARCH CENTER"],E["G-C-OXSC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXAC--"]=t["TP.COMBAT AIR PATROL (CAP)"],E["G-C-OXAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAA--"]=t["TP.AIRBORNE EARLY WARNING (AEW)"],E["G-C-OXAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAT--"]=t["TP.TACAN"],E["G-C-OXAT--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAK--"]=t["TP.TANKING"],E["G-C-OXAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAF--"]=t["TP.FIXED WING"],E["G-C-OXAF--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAH--"]=t["TP.ROTARY WING"],E["G-C-OXAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAO--"]=t["TP.TOMCAT"],E["G-C-OXAO--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAR--"]=t["TP.RESCUE"],E["G-C-OXAR--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAP--"]=t["TP.REPLENISH"],E["G-C-OXAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAM--"]=t["TP.MARSHALL"],E["G-C-OXAM--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAS--"]=t["TP.STRIKE IP"],E["G-C-OXAS--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAD--"]=t["TP.CORRIDOR TAB POINT"],E["G-C-OXAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OG----"]=t["TP.ACTION POINT"],E["G-C-OG----"]={x1:60,x2:140,y1:-60},I["G-C-OGC---"]=t["TP.ACTION POINT"],E["G-C-OGC---"]={x1:60,x2:140,y1:-60},I["G-C-OGP---"]=t["TP.CONTACT POINT"],E["G-C-OGP---"]={x1:55,x2:145,y1:-10},I["G-C-OGT---"]=t["TP.COORDINATION POINT"],E["G-C-OGT---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OGD---"]=t["TP.DECISION POINT"],E["G-C-OGD---"]={x1:30,x2:170,y1:25,y2:160},I["G-C-OGL---"]=t["TP.ACTION LINKUP POINT"],E["G-C-OGL---"]={x1:60,x2:140,y1:-60},I["G-C-OGN---"]=t["TP.ACTION PASSAGE POINT"],E["G-C-OGN---"]={x1:60,x2:140,y1:-60},I["G-C-OGR---"]=t["TP.ACTION RALLY POINT"],E["G-C-OGR---"]={x1:60,x2:140,y1:-60},I["G-C-OGS---"]=t["TP.ACTION RELEASE POINT"],E["G-C-OGS---"]={x1:60,x2:140,y1:-60},I["G-C-OGI---"]=t["TP.ACTION START POINT"],E["G-C-OGI---"]={x1:60,x2:140,y1:-60},I["G-C-OGW---"]=t["TP.WAYPOINT"],E["G-C-OGW---"]={x1:60,x2:140,y1:60,y2:140},I["G-O-VA----"]=t["TP.FIRE"],I["G-O-VR----"]=t["GR.EQ.HOWITZER"],I["G-O-VE----"]=t["ST.IC.KILLING VICTIM"],I["G-O-VB----"]=t["AIR.MISSILE.IC.BOMB"],I["G-O-VY----"]=t["ST.IC.BOOBY TRAP"],I["G-O-VD----"]=t["ST.IC.DRIVE-BY SHOOTING"],I["G-O-VI----"]=t["TP.INDIRECT FIRE"],I["G-O-VM----"]=t["GR.EQ.MORTAR"],I["G-O-VK----"]=t["GR.EQ.MULTIPLE ROCKET LAUNCHER"],I["G-O-VS----"]=t["ST.IC.SNIPING"],I["G-O-VP----"]=t["ST.IC.POISONING"],I["G-O-VU----"]=t["TP.AMBUSH"],I["G-O-VC----"]=t["GR.IC.FF.CLASS V"],I["G-O-VH----"]=t["AR.I.FF.CIVILIAN ROTARY WING"],I["G-O-VF----"]=[t["GR.IC.FF.INFANTRY"],t["GR.IC.FF.MOTORIZED"]],I["G-O-VO----"]=t["GR.IC.FF.INFANTRY"],I["G-O-VL----"]=t["GR.IC.FF.RECONNAISSANCE"],I["G-O-VX----"]=t["GR.IC.FF.SIGNAL"],I["G-O-VZ----"]=t["GR.IC.FF.SUPPLY"],I["G-O-LB----"]=t["ST.IC.BLACK LIST LOCATION"],I["G-O-LG----"]=t["ST.IC.GRAY LIST LOCATION"],I["G-O-LW----"]=t["ST.IC.WHITE LIST LOCATION"],I["G-O-PR----"]=t["TP.ROAD BLOCK"],I["G-O-PRB---"]=t["TP.ROAD BLOCK (UNDER CONSTRUCTION)"],I["G-O-PT----"]=t["ST.IC.PATROLLING"],I["G-O-PC----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.WILLING"]],I["G-O-PCU---"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.COERCED/IMPRESSED"]],I["G-O-PD----"]=t["ST.IC.DEMONSTRATION"],I["G-O-PM----"]=t["ST.IC.MINE LAYING"],I["G-O-PH----"]=t["ST.IC.PSYCHOLOGICAL OPERATIONS"],I["G-O-PHY---"]=t["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"],I["G-O-PHW---"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"],t["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHG---"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"],t["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHT---"]=[t["ST.IC.PSYCHOLOGICAL OPERATIONS"],t["ST.M1.HOUSE-TO-HOUSE"]],I["G-O-PG----"]=t["ST.IC.SEARCHING"],I["G-O-PS----"]=t["ST.IC.SPY"],I["G-O-PF----"]=t["ST.IC.FOOD DISTRIBUTION"],I["G-O-PI----"]=t["GR.IC.FF.MEDICAL TREATMENT FACILITY"],I["G-O-PE----"]=[t["GR.IC.ELECTRONIC WARFARE"],t["GR.IC.FF.INTERCEPT"]],I["G-O-PX----"]=t["ST.IC.EXTORTION"],I["G-O-PJV---"]=[t["ST.IC.KNOWN INSURGENT VEHICLE"],t["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJA---"]=[t["ST.IC.HIJACKING (AIRPLANE)"],t["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJB---"]=[t["ST.IC.HIJACKING (BOAT)"],t["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PK----"]=[t["ST.IC.INDIVIDUAL"],t["ST.M1.KIDNAPPING"]],I["G-O-PA----"]=t["ST.IC.ARREST"],I["G-O-PO----"]=t["ST.IC.DRUG RELATED ACTIVITIES"],I["G-O-IR----"]=t["ST.IC.GROUP"],I["G-O-IS----"]=t["ST.IC.SAFE HOUSE"],I["G-O-IG----"]=t["ST.IC.GRAFFITI"],I["G-O-IV----"]=t["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"],I["G-O-IK----"]=t["ST.IC.KNOWN INSURGENT VEHICLE"],I["G-O-ID----"]=[t["ST.IC.KNOWN INSURGENT VEHICLE"],t["ST.M1.DRUG"]],I["G-O-IF----"]=t["ST.IC.INTERNAL SECURITY FORCE"]}},function(I,E,t){var R=t(0);I.exports=function(I,E){this.SIDC=this.SIDC.toUpperCase();var t=""!=this.SIDC.charAt(0)?this.SIDC.charAt(0):"-",C=""!=this.SIDC.charAt(1)?this.SIDC.charAt(1):"-",A=""!=this.SIDC.charAt(2)?this.SIDC.charAt(2):"-",e=""!=this.SIDC.charAt(3)?this.SIDC.charAt(3):"-",S=I.functionid=""!=this.SIDC.substr(4,6)?this.SIDC.substr(4,6):"------",T=""!=this.SIDC.charAt(10)?this.SIDC.charAt(10):"-",N=""!=this.SIDC.charAt(11)?this.SIDC.charAt(11):"-";""!=this.SIDC.substr(12,2)&&this.SIDC.substr(12,2),""!=this.SIDC.charAt(14)&&this.SIDC.charAt(14);return["H","S","J","K"].indexOf(C)>-1&&(I.affiliation=E.affiliation[0]),["F","A","D","M"].indexOf(C)>-1&&(I.affiliation=E.affiliation[1]),["N","L"].indexOf(C)>-1&&(I.affiliation=E.affiliation[2]),["P","U","G","W","O"].indexOf(C)>-1&&(I.affiliation=E.affiliation[3]),["P","A"].indexOf(A)>-1&&(I.dimension=E.dimension[0]),["G","Z","F","X"].indexOf(A)>-1&&(I.dimension=E.dimension[1]),["S"].indexOf(A)>-1&&(I.dimension=E.dimension[2]),["U"].indexOf(A)>-1&&(I.dimension=E.dimension[3]),"P"==A&&"O"!=t&&(I.space=!0),"O"==t&&["V","O","R"].indexOf(A)>-1&&(I.activity=!0),"H"==T&&(I.installation=!0),this.frame&&"A"==e&&(I.notpresent=R._dashArrays.anticipated),this.frame&&["P","A","S","G","M"].indexOf(C)>-1&&(I.notpresent=R._dashArrays.pending),"C"==e&&(I.condition=E.status[2]),"D"==e&&(I.condition=E.status[3]),"X"==e&&(I.condition=E.status[4]),"F"==e&&(I.condition=E.status[5]),["G","W","D","L","M","J","K"].indexOf(C)>-1&&(I.context=E.context[1]),"O"==t&&(I.dimension=E.dimension[1]),"E"==t&&(I.dimension=E.dimension[1]),I.baseDimension=I.dimension,I.baseAffilation=I.affiliation,"J"==C&&(I.joker=!0),"K"==C&&(I.faker=!0),(I.joker||I.faker)&&(I.affiliation=E.affiliation[1]),"S"==t&&"G"==A&&"E"==S.charAt(0)&&(I.dimension=E.dimension[2]),"I"==t&&"G"==A&&(I.dimension=E.dimension[2]),"E"==t&&("O"==A&&["AB----","AE----","AF----","BB----","CB----","CC----","DB----","DDB---","DEB---","DFB---","DGB---","DHB---","DIB---","DJB---","DLB---","DMB---","DOB---","EA----","EB----","EC----","ED----","EE----"].indexOf(S)>-1||"F"==A&&["BA----","MA----","MC----"].indexOf(S)>-1)&&(I.dimension=E.dimension[2]),(["F","G","C","D"].indexOf(T)>-1||"H"==T&&"B"==N)&&(I.feintDummy=!0),["A","B","C","D"].indexOf(T)>-1&&(I.headquarters=!0),["E","B","G","D"].indexOf(T)>-1&&(I.taskForce=!0),"A"==N&&(I.echelon=E.echelonMobility[11]),"B"==N&&"H"!=T&&(I.echelon=E.echelonMobility[12]),"C"==N&&(I.echelon=E.echelonMobility[13]),"D"==N&&(I.echelon=E.echelonMobility[14]),"E"==N&&(I.echelon=E.echelonMobility[15]),"F"==N&&(I.echelon=E.echelonMobility[16]),"G"==N&&(I.echelon=E.echelonMobility[17]),"H"==N&&(I.echelon=E.echelonMobility[18]),"I"==N&&(I.echelon=E.echelonMobility[21]),"J"==N&&(I.echelon=E.echelonMobility[22]),"K"==N&&(I.echelon=E.echelonMobility[23]),"L"==N&&"N"!=T&&(I.echelon=E.echelonMobility[24]),"M"==N&&(I.echelon=E.echelonMobility[25]),"N"==N&&(I.echelon=E.echelonMobility[26]),"M"==T&&("O"==N&&(I.mobility=E.echelonMobility[31]),"P"==N&&(I.mobility=E.echelonMobility[32]),"Q"==N&&(I.mobility=E.echelonMobility[33]),"R"==N&&(I.mobility=E.echelonMobility[34]),"S"==N&&(I.mobility=E.echelonMobility[35]),"T"==N&&(I.mobility=E.echelonMobility[36]),"U"==N&&(I.mobility=E.echelonMobility[41]),"V"==N&&(I.mobility=E.echelonMobility[42]),"W"==N&&(I.mobility=E.echelonMobility[37]),"Y"==N&&(I.mobility=E.echelonMobility[51]),"Z"==N&&(I.mobility=E.echelonMobility[52])),"N"==T&&("S"==N&&(I.mobility=E.echelonMobility[61]),"L"==N&&(I.mobility=E.echelonMobility[62])),("A"==A&&"C"==S.charAt(0)||"G"==A&&"EVC"==S.substring(0,3)||"S"==A&&"X"==S.charAt(0))&&(I.civilian=!0),"Z"!=A&&"X"!=A||(["P","U","F","N","H","A","S","G","W"].indexOf(C)>-1&&(I.dimensionUnknown=!0),["F","A"].indexOf(C)>-1&&(I.dimension="Sea"),["D","L","M","J","K"].indexOf(C)>-1&&(I.affiliation="none")),"S"==A&&["O-----","ED----","EP----","EV----","ZM----","ZN----","ZI----"].indexOf(S)>-1&&(I.frame=!1),"E"==t&&"N"==A&&["AA----","AB----","AC----","AD----","AE----","AG----","BB----","BC----","BF----","BM----","-C-----","CA----","CB----","CC----","CD----","CE----"].indexOf(S)>-1&&(I.frame=!1),"U"==A&&["WM----","WMD---","WMG---","WMGD--","WMGX--","WMGE--","WMGC--","WMGR--","WMGO--","WMM---","WMMD--","WMMX--","WMME--","WMMC--","WMMR--","WMMO--","WMF---","WMFD--","WMFX--","WMFE--","WMFC--","WMFR--","WMFO--","WMO---","WMOD--","WMX---","WME---","WMA---","WMC---","WMR---","WMB---","WMBD--","WMN---","WMS---","WMSX--","WMSD--","WD----","WDM---","WDMG--","WDMM--","ND----","E-----","V-----","X-----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(S)>-1&&(R._STD2525?(I.fill=!1,"WD----"==I.functionid&&(I.fill=!0),["ND----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(S)>-1&&(I.fill=!0,I.frame=!1)):(I.frame=!1,["E-----","V-----","X-----"].indexOf(S)>-1&&(I.fill=!1,I.frame=!1))),"WAS"!=this.SIDC.substr(0,3)&&"WOS"!=this.SIDC.substr(0,3)&&"G"!=t||(I.frame=!1),"G"==t&&"O"==A&&["V","L","P","I"].indexOf(S.charAt(0))>-1&&(I.frame=!0,I.dimension=E.dimension[1]),I}},function(I,E,t){t(0),I.exports=function(I,E){I.beginPath();var t,R,C,A,e,S,T,N=E.match(/([MCLHV][^MCLHV]*)/gi);for(C=0;C=4&&(E=32,t=110),{type:"text",stroke:!1,textanchor:"middle",x:100,y:t,fontsize:E,text:I}}function S(I){var E=30;return 3==I.length&&(E=25),I.length>=4&&(E=22),{type:"text",stroke:!1,textanchor:"middle",x:100,y:77,fontsize:E,text:I}}function T(I){var E=30,t=145;return 3==I.length&&(E=25,t=140),I.length>=4&&(E=20,t=135),{type:"text",stroke:!1,textanchor:"middle",x:100,y:t,fontsize:E,text:I}}function N(I){if("object"==typeof I){if(Array.isArray(I)){for(var E=0;E-1&&(I.feintDummy=!0),["2","3","6","7"].indexOf(S)>-1&&(I.headquarters=!0),["4","5","6","7"].indexOf(S)>-1&&(I.taskForce=!0),T<=30&&(I.echelon=E.echelonMobility[T]),T>=30&&T<70&&(I.mobility=E.echelonMobility[T]),T>=70&&T<80&&(I.leadership=E.echelonMobility[T]),("01"==A&&"12"==O.substring(0,2)||"05"==A&&"12"==O.substring(0,2)||"11"==A||"12"==A&&"12"==O.substring(0,2)||"15"==A&&"16"==O.substring(0,2)||"30"==A&&"14"==O.substring(0,2)||"35"==A&&"12"==O.substring(0,2))&&(I.civilian=!0),I}},function(I,E,t){var R=t(0);I.exports=function(){var I=[],E=[],t=this.properties.baseGeometry.bbox,C=this.colors.frameColor[this.properties.affiliation];if(this.properties.dimensionUnknown&&C&&E.push({type:"text",text:"?",x:100,y:127,fill:C,fontfamily:"Arial",fontsize:80,fontweight:"bold",textanchor:"middle"}),this.properties.baseGeometry.g&&C){var A=10;("Unknown"==this.properties.affiliation||"Hostile"==this.properties.affiliation&&"Subsurface"!=this.properties.dimension)&&(A=-10),"Exercise"==this.properties.context&&(this.properties.joker||this.properties.faker||E.push({type:"text",text:"X",x:t.x2+A,y:60,fill:C,fontfamily:"Arial",fontsize:35,fontweight:"bold",textanchor:"start"}),this.properties.joker&&E.push({type:"text",text:"J",x:t.x2+A,y:60,fill:C,fontfamily:"Arial",fontsize:35,fontweight:"bold",textanchor:"start"}),this.properties.faker&&E.push({type:"text",text:"K",x:t.x2+A,y:60,fill:C,fontfamily:"Arial",fontsize:35,fontweight:"bold",textanchor:"start"}),t={x2:t.x2+A+22,y1:35}),"Simulation"==this.properties.context&&(E.push({type:"text",text:"S",x:t.x2+A,y:60,fill:C,fontfamily:"Arial",fontsize:35,fontweight:"bold",textanchor:"start"}),t=new R.BBox({x2:t.x2+A+22,y1:35}))}return this.outlineWidth>0&&I.push(R.outline(E,this.outlineWidth,this.strokeWidth,this.outlineColor)),{pre:I,post:E,bbox:t}}},function(I,E,t){var R=t(0);I.exports=function(){var I,E=[],t=[],C=this.colors.frameColor[this.properties.affiliation];if(!this.properties.frame&&this.icon)return[];var A={type:this.properties.baseGeometry.g.type};switch(A.type){case"path":A.d=this.properties.baseGeometry.g.d;break;case"circle":A.cx=this.properties.baseGeometry.g.cx,A.cy=this.properties.baseGeometry.g.cy,A.r=this.properties.baseGeometry.g.r}if(A.fill=this.colors.fillColor[this.properties.affiliation],A.fillopacity=this.fillOpacity,A.stroke=C,A.strokewidth=this.size>=10?this.strokeWidth:10,this.frame&&this.outlineWidth>0&&("path"==A.type&&this.fill&&!this.monoColor?(outline={type:this.properties.baseGeometry.g.type},outline.d=this.properties.baseGeometry.g.d+" Z",outline.strokewidth=this.size>=10?this.strokeWidth:10):outline=A,E.push(R.outline(outline,this.outlineWidth,this.strokeWidth,this.outlineColor))),""==this.monoColor&&this.fill||!this.properties.notpresent||(A.strokedasharray=this.properties.notpresent),t.push(A),this.properties.dismounted&&(I={Neutral:{type:"path",stroke:!1,fill:C,d:"M 92.6 140.1 L 92.6 151.6 L 100 155 L 108 151.3 L 108 140.1 L 92.6 140.1 z "},Unknown:{type:"path",stroke:!1,fill:C,d:"M 92.5 147.1 L 92.5 156.5 L 99.8 162 L 107.5 156.3 L 107.5 147.1 L 92.5 147.1 z "}},I.hasOwnProperty(this.properties.affiliation)&&t.push(I[this.properties.affiliation])),this.properties.space&&(I={Friend:{type:"path",stroke:!1,fill:C,d:"M 100,30 C 90,30 80,35 68.65625,50 l 62.6875,0 C 120,35 110,30 100,30"},Hostile:{type:"path",stroke:!1,fill:C,d:"M67,50 L100,20 133,50 z"},Neutral:{type:"path",stroke:!1,fill:C,d:"M45,50 l0,-20 110,0 0,20 z"},Unknown:{type:"path",stroke:!1,fill:C,d:"M 100 22.5 C 85 22.5 70 31.669211 66 50 L 134 50 C 130 31.669204 115 22.5 100 22.5 z"}},t.push(I[this.properties.affiliation])),this.properties.activity&&(I={Friend:{type:"path",stroke:!1,fill:C,d:"m 160,135 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z m 135,-85 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z"},Hostile:{type:"path",stroke:!1,fill:C,d:"M 100 28 L 89.40625 38.59375 L 100 49.21875 L 110.59375 38.59375 L 100 28 z M 38.6875 89.3125 L 28.0625 99.9375 L 38.6875 110.53125 L 49.28125 99.9375 L 38.6875 89.3125 z M 161.40625 89.40625 L 150.78125 100 L 161.40625 110.59375 L 172 100 L 161.40625 89.40625 z M 99.9375 150.71875 L 89.3125 161.3125 L 99.9375 171.9375 L 110.53125 161.3125 L 99.9375 150.71875"},Neutral:{type:"path",stroke:!1,fill:C,d:"m 140,140 15,0 0,15 -15,0 z m -80,0 0,15 -15,0 0,-15 z m 80,-80 0,-15 15,0 0,15 z m -80,0 -15,0 0,-15 15,0 z"},Unknown:{type:"path",stroke:!1,fill:C,d:"M 107.96875 31.46875 L 92.03125 31.71875 L 92.03125 46.4375 L 107.71875 46.4375 L 107.96875 31.46875 z M 47.03125 92.5 L 31.09375 92.75 L 31.09375 107.5 L 46.78125 107.5 L 47.03125 92.5 z M 168.4375 92.5 L 152.5 92.75 L 152.5 107.5 L 168.1875 107.5 L 168.4375 92.5 z M 107.96875 153.5625 L 92.03125 153.8125 L 92.03125 168.53125 L 107.71875 168.53125 L 107.96875 153.5625 z"}},t.push(I[this.properties.affiliation])),this.fill&&this.frame&&this.properties.notpresent&&!this.properties.unframed){switch(A={type:this.properties.baseGeometry.g.type},A.type){case"path":A.d=this.properties.baseGeometry.g.d;break;case"circle":A.cx=this.properties.baseGeometry.g.cx,A.cy=this.properties.baseGeometry.g.cy,A.r=this.properties.baseGeometry.g.r}A.fill=!1,A.stroke=this.colors.white[this.properties.affiliation],A.strokewidth=parseFloat(this.strokeWidth)+1,A.strokedasharray=this.properties.notpresent,t.push(A)}return{pre:E,post:t,bbox:this.properties.baseGeometry.bbox}}},function(I,E,t){var R=t(0);I.exports=function(){var I=[],E=[],t=this.properties.baseGeometry.bbox;""==this.properties.baseGeometry.g&&(t=this.bbox);var C=new R.BBox,A=this.colors.iconColor[this.properties.affiliation]||this.colors.iconColor.Friend;if(this.infoFields&&this.direction&&""!=this.direction){var e=[{type:"rotate",degree:this.direction,x:100,y:100,draw:[{type:"path",fill:A,stroke:A,strokewidth:this.strokeWidth,d:"M100,100 l0,-75 -5,3 5,-15 5,15 -5,-3"}]}];C.y1=Math.min(100-95*Math.cos(this.direction/360*Math.PI*2),100),C.y2=Math.max(100-95*Math.cos(this.direction/360*Math.PI*2),100),C.x1=Math.min(100+95*Math.sin(this.direction/360*Math.PI*2),100),C.x2=Math.max(100+95*Math.sin(this.direction/360*Math.PI*2),100),"Ground"!=this.properties.baseDimension&&""!=this.properties.baseDimension||(e=[{type:"translate",x:0,y:t.y2,draw:e},{type:"path",fill:A,stroke:A,strokewidth:this.strokeWidth,d:"M 100,"+t.y2+"l0,100"}],C.y2+=t.y2+parseFloat(this.strokeWidth)),this.outlineWidth>0&&I.push(R.outline(e,this.outlineWidth,this.strokeWidth,this.outlineColor)),E.push(e)}return{pre:I,post:E,bbox:C}}},function(I,E,t){var R=t(0);I.exports=function(){var I,E,t=[],C=[],A=new R.BBox({x1:50,x2:150,y1:50,y2:150}),e=[],S=[],T=[],N=[];if(this.icon){var G=this.colors.fillColor[this.properties.affiliation],O=this.colors.fillColor.Neutral;E=this.colors.iconColor[this.properties.affiliation];var M=this.colors.iconFillColor[this.properties.affiliation],o=this.colors.none[this.properties.affiliation],L=this.colors.black[this.properties.affiliation],i=this.colors.white[this.properties.affiliation],s=(R._STD2525?"2525":"APP6")+","+this.properties.dimension+this.properties.affiliation+this.properties.notpresent+",frame:"+this.frame+",alternateMedal:"+this.alternateMedal+",colors:{fillcolor:"+G+",neutralColor"+O+",iconColor:"+E+",iconFillColor:"+M+",none:"+o+",black:"+L+",white:"+i+"}";if(R._iconCache.hasOwnProperty(s)?e=R._iconCache[s].iconParts:(R._iconCache[s]={},e=R._iconCache[s].iconParts=R._geticnParts(this.properties,this.colors,R._STD2525,this.monoColor,this.alternateMedal)),this.properties.numberSIDC||(-1!=["WMGX--","WMMX--","WMFX--","WMX---","WMSX--"].indexOf(this.properties.functionid)&&(A.y1=10,"Unknown"!=this.properties.affiliation&&(A.x2=this.properties.baseGeometry.bbox.x2+20)),R._iconCache[s].hasOwnProperty("letterSIDC")?(I=R._iconCache[s].letterSIDC.icons,N=R._iconCache[s].letterSIDC.bbox):"function"==typeof R._getLetterSIDCicn?(R._iconCache[s].letterSIDC=R._getLetterSIDCicn(e,R._STD2525),I=R._iconCache[s].letterSIDC.icons,N=R._iconCache[s].letterSIDC.bbox):console.warn("ms._getLetterSIDCicn() is not present, you will need to load functionality for letter based SIDCs")),this.properties.numberSIDC){var r=String(this.SIDC).substr(4,2);R._iconCache[s].hasOwnProperty("numberSIDC")?R._iconCache[s].numberSIDC.symbolSet.hasOwnProperty(r)?(I=R._iconCache[s].numberSIDC.symbolSet[r].icons,S=R._iconCache[s].numberSIDC.symbolSet[r].m1,T=R._iconCache[s].numberSIDC.symbolSet[r].m2,N=R._iconCache[s].numberSIDC.symbolSet[r].bbox):"function"==typeof R._getNumberSIDCicn?(R._iconCache[s].numberSIDC.symbolSet[r]=R._getNumberSIDCicn(r,e,R._STD2525),I=R._iconCache[s].numberSIDC.symbolSet[r].icons,S=R._iconCache[s].numberSIDC.symbolSet[r].m1,T=R._iconCache[s].numberSIDC.symbolSet[r].m2,N=R._iconCache[s].numberSIDC.symbolSet[r].bbox):console.warn("ms._getNumberSIDCicn() is not present, you will need to load functionality for number based SIDCs"):(R._iconCache[s].numberSIDC={},R._iconCache[s].numberSIDC.symbolSet={},"function"==typeof R._getNumberSIDCicn?(R._iconCache[s].numberSIDC.symbolSet[r]=R._getNumberSIDCicn(r,e,R._STD2525),I=R._iconCache[s].numberSIDC.symbolSet[r].icons,S=R._iconCache[s].numberSIDC.symbolSet[r].m1,T=R._iconCache[s].numberSIDC.symbolSet[r].m2,N=R._iconCache[s].numberSIDC.symbolSet[r].bbox):console.warn("ms._getNumberSIDCicn() is not present, you will need to load functionality for number based SIDCs"))}E=this.colors.iconColor[this.properties.affiliation];var n=[{type:"path",stroke:!1,fill:E,d:"m 94.8206,78.1372 c -0.4542,6.8983 0.6532,14.323 5.3424,19.6985 4.509,5.6933 11.309,9.3573 14.98,15.7283 3.164,6.353 -0.09,14.245 -5.903,17.822 -7.268,4.817 -18.6219,2.785 -22.7328,-5.249 -1.5511,-2.796 -2.3828,-5.931 -2.8815,-9.071 -3.5048,0.416 -7.0093,0.835 -10.5142,1.252 0.8239,8.555 5.2263,17.287 13.2544,21.111 7.8232,3.736 17.1891,3.783 25.3291,1.052 8.846,-3.103 15.737,-11.958 15.171,-21.537 0.05,-6.951 -4.272,-12.85 -9.134,-17.403 -4.526,-4.6949 -11.048,-8.3862 -12.401,-15.2748 -1.215,-2.3639 -0.889,-8.129 -0.889,-8.129 z m -0.6253,-20.5177 0,11.6509 11.6527,0 0,-11.6509 z"}];if(this.properties.numberSIDC){var l=I[this.properties.functionid.substr(0,6)];void 0===l&&(l=I[this.properties.functionid.substr(0,4)+"00"]),void 0===l?"000000"!=this.properties.functionid.substr(0,6)&&""!=this.properties.functionid.substr(0,6)&&(C.push(n),this._validIcon=!1):C.push(l),N.hasOwnProperty(this.properties.functionid.substr(0,6))&&(A=new R.BBox(N[this.properties.functionid.substr(0,6)])),"95"==this.properties.functionid.substr(4,2)&&C.push(e["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]),"96"==this.properties.functionid.substr(4,2)&&C.push(e["GR.IC.FF.DIVISION AND BELOW SUPPORT"]),"97"==this.properties.functionid.substr(4,2)&&C.push(e["GR.IC.FF.CORPS SUPPORT"]),"98"==this.properties.functionid.substr(4,2)&&C.push(e["GR.IC.FF.THEATRE SUPPORT"]),C.push("00"!=this.properties.functionid.substr(6,2)?S[this.properties.functionid.substr(6,2)]:[]),C.push("00"!=this.properties.functionid.substr(8,2)?T[this.properties.functionid.substr(8,2)]:[])}else{var c=this.SIDC.substr(0,1)+"-"+this.SIDC.substr(2,1)+"-"+this.SIDC.substr(4,6);I[c]?C.push(I[c]):"------"!=this.SIDC.substr(4,6)&&""!=this.SIDC.substr(4,6)&&(C.push(n),this._validIcon=!1),N[c]&&(A=new R.BBox(N[c]))}}return this.frame&&this.fill&&!this.monoColor||this.outlineWidth>0&&t.push(R.outline(C,this.outlineWidth,this.strokeWidth,this.outlineColor)),{pre:t,post:C,bbox:A}}},function(I,E,t){var R=t(0);I.exports=function(){var I,E=[],t=[],C=new R.BBox(this.properties.baseGeometry.bbox),A=new R.BBox;if(this.properties.headquarters){var e=100,S=this.hqStafLength||R._hqStafLength;["AirFriend","AirNeutral","GroundFriend","GroundNeutral","SeaNeutral","SubsurfaceNeutral"].indexOf(this.properties.dimension+this.properties.affiliation)>-1&&(e=C.y2),this.properties.dimensionType+this.properties.affiliationType=="SubsurfaceFriend"&&(e=C.y1),I={type:"path",d:"M"+C.x1+","+e+" L"+C.x1+","+(C.y2+S)},this.outlineWidth>0&&E.push(R.outline(I,this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push(I),A.y2=C.y2+S}if(this.properties.taskForce&&(I={type:"path",d:"M55,"+C.y1+" L55,"+(C.y1-40)+" 145,"+(C.y1-40)+" 145,"+C.y1},this.outlineWidth>0&&E.push(R.outline(I,this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push(I),A.y1=C.y1-40),this.properties.installation){var T=0;["AirHostile","GroundHostile","SeaHostile"].indexOf(this.properties.dimension+this.properties.affiliation)>-1&&(T=14),["AirUnknown","GroundUnknown","SeaUnknown","AirFriend","SeaFriend"].indexOf(this.properties.dimension+this.properties.affiliation)>-1&&(T=2),I={type:"path",fill:this.colors.frameColor[this.properties.affiliation],d:"M85,"+(C.y1+T-this.strokeWidth/2)+" 85,"+(C.y1-10)+" 115,"+(C.y1-10)+" 115,"+(C.y1+T-this.strokeWidth/2)+" 100,"+(C.y1-this.strokeWidth)+" Z"},this.outlineWidth>0&&E.push(R.outline(I,this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push(I),A.merge({y1:C.y1-10})}if(this.properties.feintDummy){var N=C.y1-40-C.width()/2;I={type:"path",strokedasharray:R._dashArrays.feintDummy,d:"M100,"+N+" L"+C.x1+","+(C.y1-40)+" M100,"+N+" L"+C.x2+","+(C.y1-40)},this.outlineWidth>0&&E.push(R.outline(I,this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push(I),A.merge({y1:N})}if(this.properties.echelon){var G=this.properties.installation?15:0,O={"Team/Crew":{g:[{type:"circle",cx:100,cy:C.y1-20,r:15},{type:"path",d:"M80,"+(C.y1-10)+"L120,"+(C.y1-30)}],bbox:{y1:C.y1-40-G}},Squad:{g:[{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:100,cy:C.y1-20,r:7.5}],bbox:{y1:C.y1-20-7.5-G}},Section:{g:[{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:115,cy:C.y1-20,r:7.5},{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:85,cy:C.y1-20,r:7.5}],bbox:{y1:C.y1-20-7.5-G}},"Platoon/detachment":{g:[{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:100,cy:C.y1-20,r:7.5},{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:70,cy:C.y1-20,r:7.5},{type:"circle",fill:this.colors.frameColor[this.properties.affiliation],cx:130,cy:C.y1-20,r:7.5}],bbox:{y1:C.y1-20-7.5-G}},"Company/battery/troop":{g:[{type:"path",d:"M100,"+(C.y1-10)+"L100,"+(C.y1-35)}],bbox:{y1:C.y1-40-G}},"Battalion/squadron":{g:[{type:"path",d:"M90,"+(C.y1-10)+"L90,"+(C.y1-35)},{type:"path",d:"M110,"+(C.y1-10)+"L110,"+(C.y1-35)}],bbox:{y1:C.y1-40-G}},"Regiment/group":{g:[{type:"path",d:"M100,"+(C.y1-10)+"L100,"+(C.y1-35)},{type:"path",d:"M120,"+(C.y1-10)+"L120,"+(C.y1-35)},{type:"path",d:"M80,"+(C.y1-10)+"L80,"+(C.y1-35)}],bbox:{y1:C.y1-40-G}},Brigade:{g:[{type:"path",d:"M87.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G}},Division:{g:[{type:"path",d:"M70,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G,x1:70,x2:130}},"Corps/MEF":{g:[{type:"path",d:"M52.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G,x1:52.5,x2:147.5}},Army:{g:[{type:"path",d:"M35,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G,x1:35,x2:165}},"Army Group/front":{g:[{type:"path",d:"M17.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M52.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M157.5,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G,x1:17.5,x2:182.5}},"Region/Theater":{g:[{type:"path",d:"M0,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M35,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25 M175,"+(C.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:C.y1-15-25-G,x1:0,x2:200}},Command:{g:[{type:"path",d:"M70,"+(C.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25 M105,"+(C.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25"}],bbox:{y1:C.y1-15-25-G,x1:70,x2:130}}};O.hasOwnProperty(this.properties.echelon)&&(I=O[this.properties.echelon].g,this.outlineWidth>0&&E.push(R.outline({type:"translate",x:0,y:-G,draw:I},this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push({type:"translate",x:0,y:-G,draw:I}),A.merge(O[this.properties.echelon].bbox))}if(this.properties.mobility){this.frame||(C.y2=this.bbox.y2),"Neutral"==this.properties.affiliation&&("Towed"!=this.properties.mobility&&"Short towed array"!=this.properties.mobility&&"Long towed Array"!=this.properties.mobility||(C.y2+=8),"Over snow (prime mover)"!=this.properties.mobility&&"Sled"!=this.properties.mobility||(C.y2+=13));var M={"Wheeled limited cross country":{g:[{type:"path",d:"M 50,1 l 100,0"},{type:"circle",cx:55,cy:8,r:8},{type:"circle",cx:145,cy:8,r:8}],bbox:{y2:C.y2+16}},"Wheeled cross country":{g:[{type:"path",d:"M 50,1 l 100,0"},{type:"circle",cx:55,cy:8,r:8},{type:"circle",cx:145,cy:8,r:8},{type:"circle",cx:100,cy:8,r:8}],bbox:{y2:C.y2+16}},Tracked:{g:[{type:"path",d:"M 50,1 l 100,0 c15,0 15,15 0,15 l -100,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:C.y2+18,x1:42,x2:168}},"Wheeled and tracked combination":{g:[{type:"circle",cx:55,cy:8,r:8},{type:"path",d:"M 80,1 l 70,0 c15,0 15,15 0,15 l -70,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:C.y2+16,x2:168}},Towed:{g:[{type:"path",d:"M 60,1 l 80,0"},{type:"circle",cx:55,cy:3,r:8},{type:"circle",cx:145,cy:3,r:8}],bbox:{y2:C.y2+10}},Rail:{g:[{type:"path",d:"M 50,1 l 100,0"},{type:"circle",cx:55,cy:8,r:8},{type:"circle",cx:70,cy:8,r:8},{type:"circle",cx:130,cy:8,r:8},{type:"circle",cx:145,cy:8,r:8}],bbox:{y2:C.y2+16}},"Over snow (prime mover)":{g:[{type:"path",d:"M 50,-9 l10,10 90,0"}],bbox:{y2:C.y2+9}},Sled:{g:[{type:"path",d:"M 145,-12 c15,0 15,15 0,15 l -90,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:C.y2+15,x1:42,x2:168}},"Pack animals":{g:[{type:"path",d:"M 80,20 l 10,-20 10,20 10,-20 10,20"}],bbox:{y2:C.y2+20}},Barge:{g:[{type:"path",d:"M 50,1 l 100,0 c0,10 -100,10 -100,0"}],bbox:{y2:C.y2+10}},Amphibious:{g:[{type:"path",d:"M 65,10 c 0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0"}],bbox:{y2:C.y2+20}},"Short towed array":{g:[{type:"path",fill:this.colors.frameColor[this.properties.affiliation],d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M100,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:C.y2+10}},"Long towed Array":{g:[{type:"path",fill:this.colors.frameColor[this.properties.affiliation],d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M105,0 l-10,0 0,10 10,0 z M75,0 l5,5 -5,5 -5,-5 z M125,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:C.y2+10}}};M.hasOwnProperty(this.properties.mobility)&&(I=M[this.properties.mobility].g,this.outlineWidth>0&&E.push(R.outline({type:"translate",x:0,y:C.y2,draw:I},this.outlineWidth,this.strokeWidth,this.outlineColor)),t.push({type:"translate",x:0,y:C.y2,draw:I}),A.merge(M[this.properties.mobility].bbox))}if(this.properties.leadership){var o={Friend:{type:"path",d:"m 45,60 55,-25 55,25"},Neutral:{type:"path",d:"m 45,60 55,-25 55,25"},Hostile:{type:"path",d:"m 42,71 57.8,-43.3 58.2,42.8"},Unknown:{type:"path",d:"m 50,60 10,-20 80,0 10,20"}}[this.properties.affiliation];"Deputy Individual"==this.properties.leadership&&(o.strokedasharray=R._dashArrays.feintDummy),E.push(o),A.merge({y1:A.y1-20})}for(var L=0;L0&&I.push(R.outline(E,this.outlineWidth,this.strokeWidth,this.outlineColor))}else"Damaged"!=this.properties.condition&&"Destroyed"!=this.properties.condition||(E.push({type:"path",d:"M150,20 L50,180",strokewidth:2*this.strokeWidth,stroke:this.colors.frameColor[this.properties.affiliation]}),C=20,A=180),"Destroyed"==this.properties.condition&&E.push({type:"path",d:"M50,20 L150,180",strokewidth:2*this.strokeWidth,stroke:this.colors.frameColor[this.properties.affiliation]}),this.outlineWidth>0&&I.push(R.outline(E,this.outlineWidth,this.strokeWidth,this.outlineColor));return{pre:I,post:E,bbox:{y1:C,y2:A}}}},function(I,E,t){var R=t(0);I.exports=function(){function I(I){if(0==I.length)return 0;for(var E={" ":9,"!":10,'"':15,"#":17,$:17,"%":27,"&":22,"'":8,"(":10,")":10,"*":12,"+":18,",":9,"-":10,".":9,"/":9,0:17,1:17,2:17,3:17,4:17,5:17,6:17,7:17,8:17,9:17,":":10,";":10,"<":18,"=":18,">":18,"?":19,"@":30,A:22,B:22,C:22,D:22,E:21,F:19,G:24,H:22,I:9,J:17,K:22,L:19,M:25,N:22,O:24,P:21,Q:24,R:22,S:21,T:19,U:22,V:21,W:29,X:21,Y:21,Z:19,"[":10,"]":10,"^":18,_:17,"`":10,a:17,b:19,c:17,d:19,e:17,f:10,g:19,h:19,i:9,j:9,k:17,l:9,m:27,n:19,o:19,p:19,q:19,r:12,s:17,t:10,u:19,v:17,w:24,x:17,y:17,z:15,"{":12,"|":9,"}":12,"~":18},t=0,R=0;R0&&t.push(R.outline(C,this.outlineWidth,this.strokeWidth,this.outlineColor)),{pre:t,post:C,bbox:N}}var o=this.quantity||this.reinforcedReduced||this.staffComments||this.additionalInformation||this.evaluationRating||this.combatEffectiveness||this.signatureEquipment||this.higherFormation||this.hostile||this.iffSif||this.sigint||this.uniqueDesignation||this.type||this.dtg||this.altitudeDepth||this.location||this.speed||this.specialHeadquarters||this.platformType||this.equipmentTeardownTime||this.commonIdentifier||this.auxiliaryEquipmentIndicator||this.headquartersElement;if(this.infoFields&&o){this.specialHeadquarters&&C.push(function(I){var E=42,t=115;return 1==I.length&&(E=45,t=115),3==I.length&&(E=35,t=110),I.length>=4&&(E=32,t=110),{type:"text",text:I,x:100,y:t,textanchor:"middle",fontsize:E,fontfamily:S,fill:e,stroke:!1,fontweight:"bold"}}(this.specialHeadquarters)),this.quantity&&(C.push({type:"text",text:this.quantity,x:100,y:A.y1-10,textanchor:"middle",fontsize:T,fontfamily:S,fill:e,stroke:!1}),N.y1=A.y1-10-T),this.headquartersElement&&(this.properties.condition&&this.properties.fill&&""==this.monoColor&&(A.y2+=15),C.push({type:"text",text:this.headquartersElement,x:100,y:A.y2+35,textanchor:"middle",fontsize:35,fontfamily:S,fontweight:"bold",fill:e,stroke:!1}),N.y2=A.y2+35);var L,i={L1:"",L2:"",L3:"",L4:"",L5:"",R1:"",R2:"",R3:"",R4:"",R5:""};isNaN(this.SIDC)||"Air"!=this.properties.dimension||(i.R1=this.uniqueDesignation,i.R2=this.iffSif,i.R3=this.type,(this.speed||this.altitudeDepth)&&(L=[],this.speed&&L.push(this.speed),this.location&&L.push(this.altitudeDepth),i.R4=L.join(" ")),(this.staffComments||this.location)&&(L=[],this.staffComments&&L.push(this.staffComments),this.additionalInformation&&L.push(this.additionalInformation),i.R5=L.join(" "))),(isNaN(this.SIDC)||"Ground"==this.properties.baseDimension)&&(i.L1=this.dtg,(this.altitudeDepth||this.location)&&(L=[],this.altitudeDepth&&L.push(this.altitudeDepth),this.location&&L.push(this.location),i.L2=L.join(" ")),(this.type||this.platformType||this.commonIdentifier)&&(L=[],this.type&&L.push(this.type),this.platformType&&L.push(this.platformType),this.commonIdentifier&&L.push(this.commonIdentifier),i.L3=L.join(" ")),i.L4=this.uniqueDesignation,i.L5=this.speed,i.R1=this.reinforcedReduced,i.R2=this.staffComments,(this.additionalInformation||this.equipmentTeardownTime)&&(L=[],this.additionalInformation&&L.push(this.additionalInformation),this.equipmentTeardownTime&&L.push(this.equipmentTeardownTime),i.R3=L.join(" ")),i.R4=this.higherFormation,(this.evaluationRating||this.combatEffectiveness||this.signatureEquipment||this.hostile||this.iffSif)&&(L=[],this.evaluationRating&&L.push(this.evaluationRating),this.combatEffectiveness&&L.push(this.combatEffectiveness),this.signatureEquipment&&L.push(this.signatureEquipment),this.hostile&&L.push(this.hostile),this.iffSif&&L.push(this.iffSif),i.R5=L.join(" "))),isNaN(this.SIDC)||"Sea"!=this.properties.dimension||(i.R1=this.uniqueDesignation,i.R2=this.type,i.R3=this.iffSif,(this.staffComments||this.location)&&(L=[],this.staffComments&&L.push(this.staffComments),this.additionalInformation&&L.push(this.additionalInformation),i.R4=L.join(" ")),(this.location||this.speed)&&(L=[],this.location&&L.push(this.location),this.speed&&L.push(this.speed),i.R5=L.join(" "))),isNaN(this.SIDC)||"Subsurface"!=this.properties.dimension||(i.R1=this.uniqueDesignation,i.R2=this.type,i.R3=this.altitudeDepth,i.R4=this.staffComments,i.R5=this.additionalInformation),N.x1=A.x1-Math.max(this.specialHeadquarters?(I(this.specialHeadquarters)-this.properties.baseGeometry.bbox.width())/2:0,I(i.L1),I(i.L2),I(i.L3),I(i.L4),I(i.L5)),N.x2=A.x2+Math.max(this.specialHeadquarters?(I(this.specialHeadquarters)-this.properties.baseGeometry.bbox.width())/2:0,I(i.R1),I(i.R2),I(i.R3),I(i.R4),I(i.R5)),(i.L1||i.R1)&&(N.y1=Math.min(N.y1,100-2.5*T)),(i.L2||i.R2)&&(N.y1=Math.min(N.y1,100-1.5*T)),(i.L4||i.R4)&&(N.y2=Math.max(N.y2,100+1.7*T)),(i.L5||i.R5)&&(N.y2=Math.max(N.y2,100+2.7*T)),i.L1&&C.push({type:"text",text:i.L1,x:A.x1-G,y:100-1.5*T,textanchor:"end",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.L2&&C.push({type:"text",text:i.L2,x:A.x1-G,y:100-.5*T,textanchor:"end",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.L3&&C.push({type:"text",text:i.L3,x:A.x1-G,y:100+.5*T,textanchor:"end",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.L4&&C.push({type:"text",text:i.L4,x:A.x1-G,y:100+1.5*T,textanchor:"end",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.L5&&C.push({type:"text",text:i.L5,x:A.x1-G,y:100+2.5*T,textanchor:"end",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.R1&&C.push({type:"text",text:i.R1,x:A.x2+G,y:100-1.5*T,textanchor:"start",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.R2&&C.push({type:"text",text:i.R2,x:A.x2+G,y:100-.5*T,textanchor:"start",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.R3&&C.push({type:"text",text:i.R3,x:A.x2+G,y:100+.5*T,textanchor:"start",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.R4&&C.push({type:"text",text:i.R4,x:A.x2+G,y:100+1.5*T,textanchor:"start",fontsize:T,fontfamily:S,fill:e,stroke:!1}),i.R5&&C.push({type:"text",text:i.R5,x:A.x2+G,y:100+2.5*T,textanchor:"start",fontsize:T,fontfamily:S,fill:e,stroke:!1}),this.outlineWidth>0&&t.push(R.outline(C,this.outlineWidth,this.strokeWidth,this.outlineColor))}return{pre:t,post:C,bbox:N}}},function(I,E,t){var R=t(0);R._geticnParts=t(32),R._symbolGeometries=t(33),R.Symbol=t(31),R.symbol=R.Symbol,R.setColorMode("Light",t(5)),R.setColorMode("Medium",t(6)),R.setColorMode("Dark",t(2)),R.setColorMode("FrameColor",t(3)),R.setColorMode("IconColor",t(4)),R.setColorMode("Black",t(1)),R.setColorMode("White",t(9)),R.setColorMode("OffWhite",t(8)),R.setColorMode("None",t(7)),R._getLetterProperties=t(29),R._getLetterSIDCicn=t(14),R.addSIDCicons(t(24),"letter"),R.addSIDCicons(t(16),"letter"),R.addSIDCicons(t(19),"letter"),R.addSIDCicons(t(18),"letter"),R.addSIDCicons(t(20),"letter"),R.addSIDCicons(t(21),"letter"),R.addSIDCicons(t(26),"letter"),R.addSIDCicons(t(23),"letter"),R.addSIDCicons(t(22),"letter"),R.addSIDCicons(t(25),"letter"),R.addSIDCicons(t(17),"letter"),R.addIconParts(t(10)),R.addSIDCicons(t(15),"letter"),R.addIconParts(t(11)),R.addSIDCicons(t(27),"letter"),R.addLabelOverrides(t(12),"letter"),R.addSIDCicons(t(28),"letter"),R.addLabelOverrides(t(13),"letter"),R._getNumberProperties=t(50),R._getNumberSIDCicn=t(34),R.addSIDCicons(t(36),"number"),R.addSIDCicons(t(37),"number"),R.addSIDCicons(t(47),"number"),R.addSIDCicons(t(48),"number"),R.addSIDCicons(t(42),"number"),R.addSIDCicons(t(39),"number"),R.addSIDCicons(t(40),"number"),R.addSIDCicons(t(41),"number"),R.addSIDCicons(t(44),"number"),R.addSIDCicons(t(49),"number"),R.addSIDCicons(t(43),"number"),R.addSIDCicons(t(45),"number"),R.addSIDCicons(t(35),"number"),R.addSIDCicons(t(46),"number"),R.addSIDCicons(t(38),"number"),R.addSymbolPart(t(52)),R.addSymbolPart(t(54)),R.addSymbolPart(t(55)),R.addSymbolPart(t(56)),R.addSymbolPart(t(51)),R.addSymbolPart(t(57)),R.addSymbolPart(t(53)),R._Path2D=t(30),I.exports=R},function(I,E){I.exports=function(I){return void 0===I&&(I={}),{x1:void 0!==I.x1?I.x1:100,y1:void 0!==I.y1?I.y1:100,x2:void 0!==I.x2?I.x2:100,y2:void 0!==I.y2?I.y2:100,width:function(){return this.x2-this.x1},height:function(){return this.y2-this.y1},getSize:function(){return{height:this.y2-this.y1,width:this.x2-this.x1}},merge:function(I){return this.x1=I.x1<=this.x1?I.x1:this.x1,this.y1=I.y1<=this.y1?I.y1:this.y1,this.x2=I.x2>=this.x2?I.x2:this.x2,this.y2=I.y2>=this.y2?I.y2:this.y2,this}}}},function(I,E){I.exports=function(I){return"2525"==I?(this._STD2525=!0,!0):"APP6"==I&&(this._STD2525=!1,!0)}},function(I,E,t){var R=t(0);I.exports=function(I){function E(I,t){for(var C=0;C";break;case"translate":case"rotate":case"scale":C+=I.call(this,E[R].draw),C+=""}}t+=C}return t}for(var E='',t=0;t -1) - properties.affiliation = mapping.affiliation[0]; - if (["F", "A", "D", "M"].indexOf(affiliation) > -1) - properties.affiliation = mapping.affiliation[1]; - if (["N", "L"].indexOf(affiliation) > -1) - properties.affiliation = mapping.affiliation[2]; - if (["P", "U", "G", "W", "O"].indexOf(affiliation) > -1) - properties.affiliation = mapping.affiliation[3]; - - if (["P", "A"].indexOf(battledimension) > -1) - properties.dimension = mapping.dimension[0]; - if (["G", "Z", "F", "X"].indexOf(battledimension) > -1) - properties.dimension = mapping.dimension[1]; - if (["S"].indexOf(battledimension) > -1) - properties.dimension = mapping.dimension[2]; - if (["U"].indexOf(battledimension) > -1) - properties.dimension = mapping.dimension[3]; - - //Planned/Anticipated/Suspect symbols should have a dashed outline - if (status == "A") { - properties.notpresent = ms._dashArrays.anticipated; - } - if (["P", "A", "S", "G", "M"].indexOf(affiliation) > -1) { - properties.notpresent = ms._dashArrays.pending; - } - - if (orderofbattle == "X") { - properties.graphic = true; - } - - // Army XML compability - //sidc['CIRCLE----'] = ms.geometryConverter.circle; - - // Systematic SitaWare compatibility - var genericSIDC = - this.SIDC.substr(0, 1) + - "-" + - this.SIDC.substr(2, 1) + - "-" + - this.SIDC.substr(4, 6); - if (["X---C-----", "X---I-----", "X---A-----"].indexOf(genericSIDC) != -1) { - properties.graphic = true; - } - - return properties; -}; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Tactical graphics in 2525C + some extra -module.exports = function tacticalPoints(sidc, std2525) { - sidc["G-T-B-----"] = ms.geometryConverter["BLOCK"]; //TACGRP.TSK.BLK - sidc["G-T-H-----"] = ms.geometryConverter["BREACH"]; //TACGRP.TSK.BRH - sidc["G-T-Y-----"] = ms.geometryConverter["BYPASS"]; //TACGRP.TSK.BYS - sidc["G-T-C-----"] = ms.geometryConverter["CANALIZE"]; //TACGRP.TSK.CNZ - sidc["G-T-X-----"] = ms.geometryConverter["CLEAR"]; //TACGRP.TSK.CLR - //sidc['G-T-J-----'] = [];//TACGRP.TSK.CNT - //sidc['G-T-K-----'] = [];//TACGRP.TSK.CATK - //sidc['G-T-KF----'] = [];//TACGRP.TSK.CATK.CATKF - sidc["G-T-L-----"] = ms.geometryConverter["DELAY"]; //TACGRP.TSK.DLY - //sidc['G-T-T-----'] = [];//TACGRP.TSK.DRT - sidc["G-T-F-----"] = ms.geometryConverter["FIX"]; //TACGRP.TSK.FIX - //sidc['G-T-A-----'] = [];//TACGRP.TSK.FLWASS - //sidc['G-T-AS----'] = [];//TACGRP.TSK.FLWASS.FLWSUP - sidc["G-T-E-----"] = ms.geometryConverter["ISOLATE"]; //TACGRP.TSK.ISL - sidc["G-T-O-----"] = ms.geometryConverter.occupy; //TACGRP.TSK.OCC - //sidc['G-T-P-----'] = [];//TACGRP.TSK.PNE - //sidc['G-T-R-----'] = [];//TACGRP.TSK.RIP - //sidc['G-T-Q-----'] = [];//TACGRP.TSK.RTN - //sidc["G-T-M-----"] = ms.geometryConverter.delay; //TACGRP.TSK.RTM - //sidc['G-T-S-----'] = [];//TACGRP.TSK.SCE - //sidc['G-T-U-----'] = [];//TACGRP.TSK.SEC - //sidc['G-T-US----'] = [];//TACGRP.TSK.SEC.SCN - sidc["G-T-UG----"] = ms.geometryConverter.guard; //TACGRP.TSK.SEC.GUD - sidc["G-T-UC----"] = ms.geometryConverter.cover; //TACGRP.TSK.SEC.COV - //sidc['G-T-Z-----'] = [];//TACGRP.TSK.SZE - //sidc['G-T-W-----'] = [];//TACGRP.TSK.WDR - //sidc['G-T-WP----'] = [];//TACGRP.TSK.WDR.WDRUP - //sidc['G-G-------'] = [];//TACGRP.C2GM - //sidc['G-G-G-----'] = [];//TACGRP.C2GM.GNL - //sidc['G-G-GP----'] = [];//TACGRP.C2GM.GNL.PNT - //sidc['G-G-GPU---'] = [];//TACGRP.C2GM.GNL.PNT.USW - //sidc['G-G-GPUU--'] = [];//TACGRP.C2GM.GNL.PNT.USW.UH2 - //sidc['G-G-GPW---'] = [];//TACGRP.C2GM.GNL.PNT.WPN - //sidc['G-G-GL----'] = [];//TACGRP.C2GM.GNL.LNE - //sidc['G-G-GLB---'] = [];//TACGRP.C2GM.GNL.LNE.BNDS - //sidc['G-G-GLF---'] = [];//TACGRP.C2GM.GNL.LNE.FLOT - //sidc['G-G-GLC---'] = [];//TACGRP.C2GM.GNL.LNE.LOC - //sidc['G-G-GLP---'] = [];//TACGRP.C2GM.GNL.LNE.PHELNE - //sidc['G-G-GLL---'] = [];//TACGRP.C2GM.GNL.LNE.LITLNE - //sidc['G-G-GA----'] = [];//TACGRP.C2GM.GNL.ARS - //sidc['G-G-GAG---'] = [];//TACGRP.C2GM.GNL.ARS.GENARA - //sidc['G-G-GAA---'] = [];//TACGRP.C2GM.GNL.ARS.ABYARA - //sidc['G-G-GAE---'] = [];//TACGRP.C2GM.GNL.ARS.EMTARA - //sidc['G-G-GAF---'] = [];//TACGRP.C2GM.GNL.ARS.FTFDAR - //sidc['G-G-GAD---'] = [];//TACGRP.C2GM.GNL.ARS.DRPZ - //sidc['G-G-GAX---'] = [];//TACGRP.C2GM.GNL.ARS.EZ - //sidc['G-G-GAL---'] = [];//TACGRP.C2GM.GNL.ARS.LZ - //sidc['G-G-GAP---'] = [];//TACGRP.C2GM.GNL.ARS.PZ - //sidc['G-G-GAS---'] = [];//TACGRP.C2GM.GNL.ARS.SRHARA - //sidc['G-G-GAY---'] = [];//TACGRP.C2GM.GNL.ARS.LAARA - //sidc['G-G-GAZ---'] = [];//TACGRP.C2GM.GNL.ARS.AIRFZ - //sidc['G-G-A-----'] = [];//TACGRP.C2GM.AVN - //sidc['G-G-AP----'] = [];//TACGRP.C2GM.AVN.PNT - //sidc['G-G-AL----'] = [];//TACGRP.C2GM.AVN.LNE - //sidc['G-G-ALC---'] = [];//TACGRP.C2GM.AVN.LNE.ACDR - //sidc['G-G-ALM---'] = [];//TACGRP.C2GM.AVN.LNE.MRR - //sidc['G-G-ALS---'] = [];//TACGRP.C2GM.AVN.LNE.SAAFR - //sidc['G-G-ALU---'] = [];//TACGRP.C2GM.AVN.LNE.UAR - //sidc['G-G-ALL---'] = [];//TACGRP.C2GM.AVN.LNE.LLTR - //sidc['G-G-AA----'] = [];//TACGRP.C2GM.AVN.ARS - //sidc['G-G-AAR---'] = [];//TACGRP.C2GM.AVN.ARS.ROZ - //sidc['G-G-AAF---'] = [];//TACGRP.C2GM.AVN.ARS.SHRDEZ - //sidc['G-G-AAH---'] = [];//TACGRP.C2GM.AVN.ARS.HIDACZ - //sidc['G-G-AAM---'] = [];//TACGRP.C2GM.AVN.ARS.MEZ - //sidc['G-G-AAML--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.LAMEZ - //sidc['G-G-AAMH--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.HAMEZ - //sidc['G-G-AAW---'] = [];//TACGRP.C2GM.AVN.ARS.WFZ - //sidc['G-G-P-----'] = [];//TACGRP.C2GM.DCPN - //sidc['G-G-PD----'] = [];//TACGRP.C2GM.DCPN.DMY - //sidc['G-G-PA----'] = [];//TACGRP.C2GM.DCPN.AAFF - //sidc['G-G-PF----'] = [];//TACGRP.C2GM.DCPN.DAFF - //sidc['G-G-PM----'] = [];//TACGRP.C2GM.DCPN.DMA - //sidc['G-G-PY----'] = [];//TACGRP.C2GM.DCPN.DMAF - //sidc['G-G-PC----'] = [];//ACGRP.C2GM.DCPN.DMYMD - //sidc['G-G-D-----'] = [];//TACGRP.C2GM.DEF - //sidc['G-G-DP----'] = [];//TACGRP.C2GM.DEF.PNT - //sidc['G-G-DL----'] = [];//TACGRP.C2GM.DEF.LNE - //sidc['G-G-DLF---'] = [];//TACGRP.C2GM.DEF.LNE.FEBA - //sidc['G-G-DLP---'] = [];//TACGRP.C2GM.DEF.LNE.PDF - //sidc['G-G-DA----'] = [];//TACGRP.C2GM.DEF.ARS - //sidc['G-G-DAB---'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN - //sidc['G-G-DABP--'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN.PBNO - //sidc['G-G-DAE---'] = [];//TACGRP.C2GM.DEF.ARS.EMTARA - //sidc['G-G-O-----'] = [];//TACGRP.C2GM.OFF - //sidc['G-G-OP----'] = [];//TACGRP.C2GM.OFF.PNT - //sidc['G-G-OL----'] = [];//TACGRP.C2GM.OFF.LNE - //sidc['G-G-OLA---'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV - //sidc['G-G-OLAV--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.AVN - //sidc['G-G-OLAA--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ABN - //sidc['G-G-OLAR--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ATK - //sidc['G-G-OLAG--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.GRD - sidc["G-G-OLAGM-"] = ms.geometryConverter["MAIN ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.MANATK - sidc["G-G-OLAGS-"] = ms.geometryConverter["SUPPORTING ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.SUPATK - //sidc['G-G-OLK---'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK - //sidc['G-G-OLKA--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.AVN - //sidc['G-G-OLKG--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD - //sidc['G-G-OLKGM-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.MANATK - //sidc['G-G-OLKGS-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.SUPATK - //sidc['G-G-OLF---'] = [];//TACGRP.C2GM.OFF.LNE.FCL - //sidc['G-G-OLI---'] = [];//TACGRP.C2GM.OFF.LNE.INFNLE - //sidc['G-G-OLL---'] = [];//TACGRP.C2GM.OFF.LNE.LMTADV - //sidc['G-G-OLT---'] = [];//TACGRP.C2GM.OFF.LNE.LD - //sidc['G-G-OLC---'] = [];//TACGRP.C2GM.OFF.LNE.LDLC - //sidc['G-G-OLP---'] = [];//TACGRP.C2GM.OFF.LNE.PLD - //sidc['G-G-OA----'] = [];//TACGRP.C2GM.OFF.ARS - //sidc['G-G-OAA---'] = [];//TACGRP.C2GM.OFF.ARS.ASTPSN - //sidc['G-G-OAK---'] = [];//TACGRP.C2GM.OFF.ARS.ATKPSN - //sidc['G-G-OAF---'] = [];//TACGRP.C2GM.OFF.ARS.AFP - //sidc['G-G-OAS---'] = [];//TACGRP.C2GM.OFF.ARS.SFP - //sidc['G-G-OAO---'] = [];//TACGRP.C2GM.OFF.ARS.OBJ - //sidc['G-G-OAP---'] = [];//TACGRP.C2GM.OFF.ARS.PBX - //sidc['G-G-S-----'] = [];//TACGRP.C2GM.SPL - //sidc['G-G-SL----'] = [];//TACGRP.C2GM.SPL.LNE - sidc["G-G-SLA---"] = ms.geometryConverter["AMBUSH"]; //TACGRP.C2GM.SPL.LNE.AMB - //sidc['G-G-SLH---'] = [];//TACGRP.C2GM.SPL.LNE.HGL - //sidc['G-G-SLR---'] = [];//TACGRP.C2GM.SPL.LNE.REL - //sidc['G-G-SLB---'] = [];//TACGRP.C2GM.SPL.LNE.BRGH - //sidc['G-G-SA----'] = [];//TACGRP.C2GM.SPL.ARA - //sidc['G-G-SAO---'] = [];//TACGRP.C2GM.SPL.ARA.AOO - //sidc['G-G-SAA---'] = [];//TACGRP.C2GM.SPL.ARA.AHD - //sidc['G-G-SAE---'] = [];//TACGRP.C2GM.SPL.ARA.ENCMT - sidc["G-G-SAN---"] = ms.geometryConverter["NAMED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.NAI - sidc["G-G-SAT---"] = ms.geometryConverter["TARGETED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.TAIS - //sidc['G-M-------'] = [];//TACGRP.MOBSU - //sidc['G-M-O-----'] = [];//TACGRP.MOBSU.OBST - //sidc['G-M-OG----'] = [];//TACGRP.MOBSU.OBST.GNL - //sidc['G-M-OGB---'] = [];//TACGRP.MOBSU.OBST.GNL.BLT - //sidc['G-M-OGL---'] = [];//TACGRP.MOBSU.OBST.GNL.LNE - //sidc['G-M-OGZ---'] = [];//TACGRP.MOBSU.OBST.GNL.Z - //sidc['G-M-OGF---'] = [];//TACGRP.MOBSU.OBST.GNL.OFA - //sidc['G-M-OGR---'] = [];//TACGRP.MOBSU.OBST.GNL.ORA - //sidc['G-M-OS----'] = [];//TACGRP.MOBSU.OBST.ABS - //sidc['G-M-OA----'] = [];//TACGRP.MOBSU.OBST.ATO - //sidc['G-M-OAD---'] = [];//TACGRP.MOBSU.OBST.ATO.ATD - //sidc['G-M-OADU--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDUC - //sidc['G-M-OADC--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDC - //sidc['G-M-OAR---'] = [];//TACGRP.MOBSU.OBST.ATO.ATDATM - //sidc['G-M-OAO---'] = [];//TACGRP.MOBSU.OBST.ATO.TDTSM - //sidc['G-M-OAW---'] = [];//TACGRP.MOBSU.OBST.ATO.ATW - //sidc['G-M-OM----'] = [];//TACGRP.MOBSU.OBST.MNE - //sidc['G-M-OMC---'] = [];//TACGRP.MOBSU.OBST.MNE.MCLST - //sidc['G-M-OF----'] = [];//TACGRP.MOBSU.OBST.MNEFLD - //sidc['G-M-OFD---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.DYN - //sidc['G-M-OFG---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.GAP - //sidc['G-M-OFA---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.MNDARA - //sidc['G-M-OE----'] = [];//TACGRP.MOBSU.OBST.OBSEFT - //sidc['G-M-OEB---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.BLK - //sidc['G-M-OEF---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.FIX - //sidc['G-M-OET---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.TUR - //sidc['G-M-OED---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.DRT - //sidc['G-M-OU----'] = [];//TACGRP.MOBSU.OBST.UXO - //sidc['G-M-OR----'] = [];//TACGRP.MOBSU.OBST.RCBB - //sidc['G-M-ORP---'] = [];//TACGRP.MOBSU.OBST.RCBB.PLND - //sidc['G-M-ORS---'] = [];//TACGRP.MOBSU.OBST.RCBB.SAFE - //sidc['G-M-ORA---'] = [];//TACGRP.MOBSU.OBST.RCBB.ABP - //sidc['G-M-ORC---'] = [];//TACGRP.MOBSU.OBST.RCBB.EXCD - //sidc['G-M-OT----'] = [];//TACGRP.MOBSU.OBST.TRIPWR - //sidc['G-M-OW----'] = [];//TACGRP.MOBSU.OBST.WREOBS - //sidc['G-M-OWU---'] = [];//TACGRP.MOBSU.OBST.WREOBS.USP - //sidc['G-M-OWS---'] = [];//TACGRP.MOBSU.OBST.WREOBS.SNGFNC - //sidc['G-M-OWD---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DBLFNC - //sidc['G-M-OWA---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DAFNC - //sidc['G-M-OWL---'] = [];//TACGRP.MOBSU.OBST.WREOBS.LWFNC - //sidc['G-M-OWH---'] = [];//TACGRP.MOBSU.OBST.WREOBS.HWFNC - //sidc['G-M-OWC---'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA - //sidc['G-M-OWCS--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.SNG - //sidc['G-M-OWCD--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.DBLSTD - //sidc['G-M-OWCT--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.TRISTD - //sidc['G-M-OH----'] = [];//TACGRP.MOBSU.OBST.AVN - //sidc['G-M-OHT---'] = [];//TACGRP.MOBSU.OBST.AVN.TWR - //sidc['G-M-OHO---'] = [];//TACGRP.MOBSU.OBST.AVN.OHWIRE - //sidc['G-M-B-----'] = [];//TACGRP.MOBSU.OBSTBP - //sidc['G-M-BD----'] = [];//TACGRP.MOBSU.OBSTBP.DFTY - //sidc['G-M-BDE---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.ESY - //sidc['G-M-BDD---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.DFT - //sidc['G-M-BDI---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.IMP - //sidc['G-M-BC----'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE - //sidc['G-M-BCA---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.ASTCA - //sidc['G-M-BCB---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.BRG - //sidc['G-M-BCF---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRY - //sidc['G-M-BCE---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDESY - //sidc['G-M-BCD---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDDFT - //sidc['G-M-BCL---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.LANE - //sidc['G-M-BCR---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.RFT - //sidc['G-M-S-----'] = [];//TACGRP.MOBSU.SU - //sidc['G-M-SL----'] = [];//TACGRP.MOBSU.SU.FTFDLN - //sidc['G-M-SW----'] = [];//TACGRP.MOBSU.SU.FEWS - //sidc['G-M-SP----'] = [];//TACGRP.MOBSU.SU.STRGPT - //sidc['G-M-N-----'] = [];//TACGRP.MOBSU.CBRN - //sidc['G-M-NM----'] = [];//TACGRP.MOBSU.CBRN.MSDZ - //sidc['G-M-NR----'] = [];//TACGRP.MOBSU.CBRN.RADA - //sidc['G-M-NB----'] = [];//TACGRP.MOBSU.CBRN.BIOCA - //sidc['G-M-NC----'] = [];//TACGRP.MOBSU.CBRN.CMLCA - //sidc['G-M-NE----'] = [];//TACGRP.MOBSU.CBRN.REEVNT - //sidc['G-M-ND----'] = [];//TACGRP.MOBSU.CBRN.DECONP - //sidc['G-M-NL----'] = [];//TACGRP.MOBSU.CBRN.DRCL - //sidc['G-F-------'] = [];//TACGRP.FSUPP - //sidc['G-F-P-----'] = [];//TACGRP.FSUPP.PNT - //sidc['G-F-PT----'] = [];//TACGRP.FSUPP.PNT.TGT - //sidc['G-F-PC----'] = [];//TACGRP.FSUPP.PNT.C2PNT - //sidc['G-F-L-----'] = [];//TACGRP.FSUPP.LNE - //sidc['G-F-LT----'] = [];//TACGRP.FSUPP.LNE.LNRTGT - //sidc['G-F-LTS---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.LSTGT - //sidc['G-F-LTF---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.FPF - //sidc['G-F-LC----'] = [];//TACGRP.FSUPP.LNE.C2LNE - //sidc['G-F-LCF---'] = [];//TACGRP.FSUPP.LNE.C2LNE.FSCL - //sidc['G-F-LCC---'] = [];//TACGRP.FSUPP.LNE.C2LNE.CFL - //sidc['G-F-LCN---'] = [];//TACGRP.FSUPP.LNE.C2LNE.NFL - //sidc['G-F-LCR---'] = [];//TACGRP.FSUPP.LNE.C2LNE.RFL - //sidc['G-F-LCM---'] = [];//TACGRP.FSUPP.LNE.C2LNE.MFP - //sidc['G-F-A-----'] = [];//TACGRP.FSUPP.ARS - //sidc['G-F-AT----'] = [];//TACGRP.FSUPP.ARS.ARATGT - //sidc['G-F-ATG---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SGTGT - //sidc['G-F-ATS---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SMK - //sidc['G-F-ATB---'] = [];//TACGRP.FSUPP.ARS.ARATGT.BMARA - //sidc['G-F-AC----'] = [];//TACGRP.FSUPP.ARS.C2ARS - //TACGRP.FSUPP.ARS.C2ARS.FSA - sidc["G-F-ACSI--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.IRR - sidc["G-F-ACSR--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.RTG - sidc["G-F-ACSC--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.CIRCLR - //sidc['G-F-ACA---'] = [];//TACGRP.FSUPP.ARS.C2ARS.ACA - sidc["G-F-ACAI--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.IRR - sidc["G-F-ACAR--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.RTG - sidc["G-F-ACAC--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.FFA - sidc["G-F-ACFI--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.IRR - sidc["G-F-ACFR--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.RTG - sidc["G-F-ACFC--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.CIRCLR - //sidc['G-F-ACN---'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA - //sidc['G-F-ACNI--'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA.IRR - //sidc['G-F-ACNR--'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA.RTG - //sidc["G-F-ACNC--"] = []; //TACGRP.FSUPP.ARS.C2ARS.NFA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.RFA - sidc["G-F-ACRI--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.IRR - sidc["G-F-ACRR--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.RTG - sidc["G-F-ACRC--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.CIRCLR - //sidc['G-F-ACP---'] = [];//TACGRP.FSUPP.ARS.C2ARS.PAA - //sidc['G-F-ACPR--'] = [];//TACGRP.FSUPP.ARS.C2ARS.PAA.RTG - //sidc["G-F-ACPC--"] = []; //TACGRP.FSUPP.ARS.C2ARS.PAA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.SNSZ - sidc["G-F-ACEI--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.IRR - sidc["G-F-ACER--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.RTG - sidc["G-F-ACEC--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.DA - sidc["G-F-ACDI--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.IRR - sidc["G-F-ACDR--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.RTG - sidc["G-F-ACDC--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.ZOR - sidc["G-F-ACZI--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.IRR - sidc["G-F-ACZR--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.RTG - sidc["G-F-ACZC--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.TBA - sidc["G-F-ACBI--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.IRR - sidc["G-F-ACBR--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.RTG - sidc["G-F-ACBC--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.TVAR - sidc["G-F-ACVI--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.IRR - sidc["G-F-ACVR--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.RTG - sidc["G-F-ACVC--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.CIRCLR - sidc["G-F-ACT---"] = - ms.geometryConverter["TERMINALLY GUIDED MUNITION FOOTPRINT"]; //TACGRP.FSUPP.ARS.C2ARS.TGMF - //sidc['G-F-AZ----'] = [];//TACGRP.FSUPP.ARS.TGTAQZ - //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ - sidc["G-F-AZII--"] = - ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.IRR - sidc["G-F-AZIR--"] = - ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ - sidc["G-F-AZXI--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.IRR - sidc["G-F-AZXR--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CNS - sidc["G-F-AZCI--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.IRR - sidc["G-F-AZCR--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CFZ - sidc["G-F-AZFI--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.IRR - sidc["G-F-AZFR--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.RTG - //sidc['G-F-AX----'] = [];//TACGRP.FSUPP.ARS.WPNRF - //sidc["G-F-AXC---"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.WPNRF.CIRCLR - //sidc['G-F-AXS---'] = [];//TACGRP.FSUPP.ARS.WPNRF.SCR - //sidc['G-F-AK----'] = [];//TACGRP.FSUPP.ARS.KLBOX - //sidc['G-F-AKB---'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE - //sidc["G-F-AKBC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.BLUE.CIRCLR - //sidc['G-F-AKBI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.IRR - //sidc['G-F-AKBR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.RTG - //sidc['G-F-AKP---'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE - //sidc["G-F-AKPC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.PURPLE.CIRCLR - //sidc['G-F-AKPI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.IRR - //sidc['G-F-AKPR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.RTG - //sidc['G-S-------'] = [];//TACGRP.CSS - //sidc['G-S-P-----'] = [];//TACGRP.CSS.PNT - //sidc['G-S-L-----'] = [];//TACGRP.CSS.LNE - //sidc['G-S-LC----'] = [];//TACGRP.CSS.LNE.CNY - //sidc['G-S-LCM---'] = [];//TACGRP.CSS.LNE.CNY.MCNY - //sidc['G-S-LCH---'] = [];//TACGRP.CSS.LNE.CNY.HCNY - //sidc['G-S-LR----'] = [];//TACGRP.CSS.LNE.SLPRUT - //sidc['G-S-LRM---'] = [];//TACGRP.CSS.LNE.SLPRUT.MSRUT - //sidc['G-S-LRA---'] = [];//TACGRP.CSS.LNE.SLPRUT.ASRUT - //sidc['G-S-LRO---'] = [];//TACGRP.CSS.LNE.SLPRUT.1WTRFF - //sidc['G-S-LRT---'] = [];//TACGRP.CSS.LNE.SLPRUT.ATRFF - //sidc['G-S-LRW---'] = [];//TACGRP.CSS.LNE.SLPRUT.2WTRFF - //sidc['G-S-A-----'] = [];//TACGRP.CSS.ARA - //sidc['G-S-AD----'] = [];//TACGRP.CSS.ARA.DHA - //sidc['G-S-AE----'] = [];//TACGRP.CSS.ARA.EPWHA - //sidc['G-S-AR----'] = [];//TACGRP.CSS.ARA.FARP - //sidc['G-S-AH----'] = [];//TACGRP.CSS.ARA.RHA - //sidc['G-S-AS----'] = [];//TACGRP.CSS.ARA.SUPARS - //sidc['G-S-ASB---'] = [];//TACGRP.CSS.ARA.SUPARS.BSA - //sidc['G-S-ASD---'] = [];//TACGRP.CSS.ARA.SUPARS.DSA - //sidc['G-S-ASR---'] = [];//TACGRP.CSS.ARA.SUPARS.RSA - //sidc['G-O-------'] = [];//TACGRP.OTH - //sidc['G-O-E-----'] = [];//TACGRP.OTH.ER - //sidc['G-O-H-----'] = [];//TACGRP.OTH.HAZ - //sidc['G-O-HN----'] = [];//TACGRP.OTH.HAZ.NVGL - //sidc['G-O-S-----'] = [];//TACGRP.OTH.SSUBSR - //sidc['G-O-B-----'] = [];//TACGRP.OTH.BERLNE - //sidc['G-O-BE----'] = [];//TACGRP.OTH.BERLNE.ELC - //sidc['G-O-BA----'] = [];//TACGRP.OTH.BERLNE.ACU - //sidc['G-O-BT----'] = [];//TACGRP.OTH.BERLNE.TPD - //sidc['G-O-BO----'] = [];//TACGRP.OTH.BERLNE.EOPI - //sidc['G-O-F-----'] = [];//TACGRP.OTH.FIX - - //2525B compatibility - //sidc["G-F-ATC---"] = []; //ms.geometryConverter.circle; - //sidc["G-F-AZIC--"] = []; //ms.geometryConverter.circle; - - // Army XML compability - sidc["C-R-LE----"] = ms.geometry.circle; - - // Systematic SitaWare compatibility - sidc["X---C-----"] = ms.geometryConverter.corridor; - sidc["X---I-----"] = ms.geometry.circle; - sidc["X---A-----"] = ms.geometryConverter["SUPPORTING ATTACK"]; -}; - - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module) {// Tactical graphics in APP6-B -module.exportS = function tacticalPoints(sidc, std2525) { - //sidc['G---------'] = [];//2.X - //sidc['G-T-------'] = [];//2.X.1 - //sidc['G-T-G-----'] = [];//2.X.1.1 - sidc["G-T-GB----"] = ms.geometryConverter["BLOCK"]; //2.X.1.1.1 - sidc["G-T-GH----"] = ms.geometryConverter["BYPASS"]; //2.X.1.1.2 - sidc["G-T-GY----"] = ms.geometryConverter["BYPASS"]; //2.X.1.1.3 - sidc["G-T-GC----"] = ms.geometryConverter["CANALIZE"]; //2.X.1.1.4 - sidc["G-T-GX----"] = ms.geometryConverter["CLEAR"]; //2.X.1.1.5 - //sidc['G-T-GJ----'] = [];//2.X.1.1.6 - //sidc['G-T-GK----'] = [];//2.X.1.1.7 - //sidc['G-T-GKF---'] = [];//2.X.1.1.7.1 - sidc["G-T-GL----"] = ms.geometryConverter["DELAY"]; //2.X.1.1.8 - //sidc['G-T-GLT---'] = [];//2.X.1.1.8.1 - //sidc['G-T-GT----'] = [];//2.X.1.1.10 - sidc["G-T-GF----"] = ms.geometryConverter["FIX"]; //2.X.1.1.11 - //sidc['G-T-GA----'] = [];//2.X.1.1.12 - //sidc['G-T-GAS---'] = [];//2.X.1.1.12.1 - sidc["G-T-GE----"] = ms.geometryConverter["ISOLATE"]; //2.X.1.1.14 - //sidc['G-T-GO----'] = [];//2.X.1.1.16 - //sidc['G-T-GP----'] = [];//2.X.1.1.17 - //sidc['G-T-GR----'] = [];//2.X.1.1.18 - //sidc['G-T-GQ----'] = [];//2.X.1.1.19 - //sidc['G-T-GM----'] = [];//2.X.1.1.20 - //sidc['G-T-GS----'] = [];//2.X.1.1.21 - //sidc['G-T-GSS---'] = [];//2.X.1.1.21.1 - //sidc['G-T-GSG---'] = [];//2.X.1.1.21.2 - //sidc['G-T-GSC---'] = [];//2.X.1.1.21.3 - //sidc['G-T-GZ----'] = [];//2.X.1.1.22 - //sidc['G-T-GW----'] = [];//2.X.1.1.23 - //sidc['G-T-GWP---'] = [];//2.X.1.1.23.1 - //sidc['G-C-------'] = [];//2.X.2 - //sidc['G-C-M-----'] = [];//2.X.2.1 - //sidc['G-C-MG----'] = [];//2.X.2.1.1 - //sidc['G-C-MGP---'] = [];//2.X.2.1.1.1 - //sidc['G-C-MGPF--'] = [];//2.X.2.1.1.1.1 - //sidc['G-C-MGL---'] = [];//2.X.2.1.1.2 - //sidc['G-C-MGLB--'] = [];//2.X.2.1.1.2.1 - //sidc['G-C-MGLBG-'] = [];//2.X.2.1.1.2.1.1 - //sidc['G-C-MGLBGF'] = [];//2.X.2.1.1.2.1.1.1 - //sidc['G-C-MGLBGO'] = [];//2.X.2.1.1.2.1.1.2 - //sidc['G-C-MGLBGK'] = [];//2.X.2.1.1.2.1.1.3 - //sidc['G-C-MGLBGS'] = [];//2.X.2.1.1.2.1.1.4 - //sidc['G-C-MGLBL-'] = [];//2.X.2.1.1.2.1.2 - //sidc['G-C-MGLBF-'] = [];//2.X.2.1.1.2.1.3 - //sidc['G-C-MGLBR-'] = [];//2.X.2.1.1.2.1.4 - //sidc['G-C-MGLF--'] = [];//2.X.2.1.1.2.2 - //sidc['G-C-MGLL--'] = [];//2.X.2.1.1.2.3 - //sidc['G-C-MGLP--'] = [];//2.X.2.1.1.2.4 - //sidc['G-C-MGLE--'] = [];//2.X.2.1.1.2.5 - //sidc['G-C-MGLEE-'] = [];//2.X.2.1.1.2.5.1 - //sidc['G-C-MGLEA-'] = [];//2.X.2.1.1.2.5.2 - //sidc['G-C-MGLET-'] = [];//2.X.2.1.1.2.5.3 - //sidc['G-C-MGLEO-'] = [];//2.X.2.1.1.2.5.4 - //sidc['G-C-MGA---'] = [];//2.X.2.1.1.3 - //sidc['G-C-MGAU--'] = [];//2.X.2.1.1.3.1 - //sidc['G-C-MGAUA-'] = [];//2.X.2.1.1.3.1.1 - //sidc['G-C-MGAUAF'] = [];//2.X.2.1.1.3.1.1.1 - //sidc['G-C-MGAUAP'] = [];//2.X.2.1.1.3.1.1.2 - //sidc['G-C-MGAUAE'] = [];//2.X.2.1.1.3.1.1.3 - //sidc['G-C-MGAUAS'] = [];//2.X.2.1.1.3.1.1.4 - //sidc['G-C-MGAUB-'] = [];//2.X.2.1.1.3.1.2 - //sidc['G-C-MGAUBO'] = [];//2.X.2.1.1.3.1.2.1 - //sidc['G-C-MGAUBM'] = [];//2.X.2.1.1.3.1.2.2 - //sidc['G-C-MGAUBR'] = [];//2.X.2.1.1.3.1.2.3 - //sidc['G-C-MGAS--'] = [];//2.X.2.1.1.3.2 - //sidc['G-C-MGASD-'] = [];//2.X.2.1.1.3.2.1 - //sidc['G-C-MGASE-'] = [];//2.X.2.1.1.3.2.2 - //sidc['G-C-MGASL-'] = [];//2.X.2.1.1.3.2.3 - //sidc['G-C-MGASP-'] = [];//2.X.2.1.1.3.2.4 - //sidc['G-C-MGASS-'] = [];//2.X.2.1.1.3.2.5 - //sidc['G-C-MGASM-'] = [];//2.X.2.1.1.3.2.6 - //sidc['G-C-MGASG-'] = [];//2.X.2.1.1.3.2.7 - //sidc['G-C-MGASF-'] = [];//2.X.2.1.1.3.2.8 - //sidc['G-C-MGAST-'] = [];//2.X.2.1.1.3.2.9 - //sidc['G-C-MA----'] = [];//2.X.2.1.2 - //sidc['G-C-MAA---'] = [];//2.X.2.1.2.1 - //sidc['G-C-MAL---'] = [];//2.X.2.1.2.2 - //sidc['G-C-MALC--'] = [];//2.X.2.1.2.2.1 - //sidc['G-C-MALM--'] = [];//2.X.2.1.2.2.2 - //sidc['G-C-MALS--'] = [];//2.X.2.1.2.2.3 - //sidc['G-C-MALU--'] = [];//2.X.2.1.2.2.4 - //sidc['G-C-MALL--'] = [];//2.X.2.1.2.2.5 - //sidc['G-C-MALIN-'] = [];//2.X.2.1.2.2.6 - //sidc['G-C-MALIF-'] = [];//2.X.2.1.2.2.7 - //sidc['G-C-MAV---'] = [];//2.X.2.1.2.3 - //sidc['G-C-MAVR--'] = [];//2.X.2.1.2.3.1 - //sidc['G-C-MAVF--'] = [];//2.X.2.1.2.3.2 - //sidc['G-C-MAVH--'] = [];//2.X.2.1.2.3.3 - //sidc['G-C-MAVM--'] = [];//2.X.2.1.2.3.4 - //sidc['G-C-MAVML-'] = [];//2.X.2.1.2.3.4.1 - //sidc['G-C-MAVMH-'] = [];//2.X.2.1.2.3.4.2 - //sidc['G-C-MAVW--'] = [];//2.X.2.1.2.3.5 - //sidc['G-C-MD----'] = [];//2.X.2.1.3 - //sidc['G-C-MDD---'] = [];//2.X.2.1.3.1 - //sidc['G-C-MDA---'] = [];//2.X.2.1.3.2 - //sidc['G-C-MDF---'] = [];//2.X.2.1.3.3 - //sidc['G-C-MDM---'] = [];//2.X.2.1.3.4 - //sidc['G-C-MDY---'] = [];//2.X.2.1.3.5 - //sidc['G-C-MM----'] = [];//2.X.2.1.4 - //sidc['G-C-MMP---'] = [];//2.X.2.1.4.1 - //sidc['G-C-MMPB--'] = [];//2.X.2.1.4.1.2 - //sidc['G-C-MMPBO-'] = [];//2.X.2.1.4.1.2.1 - //sidc['G-C-MMPBP-'] = [];//2.X.2.1.4.1.2.2 - //sidc['G-C-MMPBL-'] = [];//2.X.2.1.4.1.2.3 - //sidc['G-C-*'] = [];//2.X.2.1.4.1.3 - //sidc['G-C-MMPSF-'] = [];//2.X.2.1.4.1.3.1 - //sidc['G-C-MMPSE-'] = [];//2.X.2.1.4.1.3.2 - //sidc['G-C-MMD---'] = [];//2.X.2.1.4.2 - //sidc['G-C-MMDF--'] = [];//2.X.2.1.4.2.1 - //sidc['G-C-MMDFA-'] = [];//2.X.2.1.4.2.1.1 - //sidc['G-C-MMDFP-'] = [];//2.X.2.1.4.2.1.2 - //sidc['G-C-MMDP--'] = [];//2.X.2.1.4.2.2 - //sidc['G-C-MMA---'] = [];//2.X.2.1.4.3 - //sidc['G-C-MMAE--'] = [];//2.X.2.1.4.3.1 - //sidc['G-C-MO----'] = [];//2.X.2.1.5 - //sidc['G-C-MOP---'] = [];//2.X.2.1.5.1 - //sidc['G-C-MOL---'] = [];//2.X.2.1.5.2 - //sidc['G-C-MOLA--'] = [];//2.X.2.1.5.2.1 - //sidc['G-C-MOLAF-'] = [];//2.X.2.1.5.2.1.1 - //sidc['G-C-MOLAA-'] = [];//2.X.2.1.5.2.1.2 - //sidc['G-C-MOLAH-'] = [];//2.X.2.1.5.2.1.3 - sidc["G-C-MOLAS-"] = ms.geometryConverter["SUPPORTING ATTACK"]; //2.X.2.1.5.2.1.4 - sidc["G-C-MOLAM-"] = ms.geometryConverter["MAIN ATTACK"]; //2.X.2.1.5.2.1.5 - //sidc['G-C-MOLAO-'] = [];//2.X.2.1.5.2.1.6 - //sidc['G-C-MOLAE-'] = [];//2.X.2.1.5.2.1.7 - //sidc['G-C-MOLAT-'] = [];//2.X.2.1.5.2.1.8 - //sidc['G-C-MOLD--'] = [];//2.X.2.1.5.2.2 - //sidc['G-C-MOLDF-'] = [];//2.X.2.1.5.2.2.1 - //sidc['G-C-MOLDY-'] = [];//2.X.2.1.5.2.2.2 - //sidc['G-C-MOLDE-'] = [];//2.X.2.1.5.2.2.3 - //sidc['G-C-MOLDT-'] = [];//2.X.2.1.5.2.2.4 - //sidc['G-C-MOLDG-'] = [];//2.X.2.1.5.2.2.5 - //sidc['G-C-MOLDR-'] = [];//2.X.2.1.5.2.2.6 - //sidc['G-C-MOLDS-'] = [];//2.X.2.1.5.2.2.7 - //sidc['G-C-MOLDM-'] = [];//2.X.2.1.5.2.2.8 - //sidc['G-C-MOLDO-'] = [];//2.X.2.1.5.2.2.9 - //sidc['G-C-MOLF--'] = [];//2.X.2.1.5.2.3 - //sidc['G-C-MOLI--'] = [];//2.X.2.1.5.2.4 - //sidc['G-C-MOLL--'] = [];//2.X.2.1.5.2.5 - //sidc['G-C-MOLT--'] = [];//2.X.2.1.5.2.6 - //sidc['G-C-MOLC--'] = [];//2.X.2.1.5.2.7 - //sidc['G-C-MOLP--'] = [];//2.X.2.1.5.2.8 - //sidc['G-C-MOLR--'] = [];//2.X.2.1.5.2.9 - //sidc['G-C-MOO---'] = [];//2.X.2.1.5.3 - //sidc['G-C-MOOA--'] = [];//2.X.2.1.5.3.1 - //sidc['G-C-MOOT--'] = [];//2.X.2.1.5.3.2 - //sidc['G-C-MOOTF-'] = [];//2.X.2.1.5.3.2.1 - //sidc['G-C-MOOTC-'] = [];//2.X.2.1.5.3.2.2 - //sidc['G-C-MOOTP-'] = [];//2.X.2.1.5.3.2.3 - //sidc['G-C-MOOP--'] = [];//2.X.2.1.5.3.3 - //sidc['G-C-MOOS--'] = [];//2.X.2.1.5.3.4 - //sidc['G-C-MOOJ--'] = [];//2.X.2.1.5.3.5 - //sidc['G-C-MOOX--'] = [];//2.X.2.1.5.3.6 - //sidc['G-C-MOOR--'] = [];//2.X.2.1.5.3.7 - //sidc['G-C-MS----'] = [];//2.X.2.1.6 - //sidc['G-C-MSG---'] = [];//2.X.2.1.6.1 - //sidc['G-C-MSGE--'] = [];//2.X.2.1.6.1.1 - //sidc['G-C-MSGEF-'] = [];//2.X.2.1.6.1.1.1 - //sidc['G-C-MSGEY-'] = [];//2.X.2.1.6.1.1.2 - sidc["G-C-MSGA--"] = ms.geometryConverter["AMBUSH"]; //2.X.2.1.6.1.2 - //sidc['G-C-MSL---'] = [];//2.X.2.1.6.2 - //sidc['G-C-MSLA--'] = [];//2.X.2.1.6.2.1 - //sidc['G-C-MSLB--'] = [];//2.X.2.1.6.2.2 - //sidc['G-C-MSLH--'] = [];//2.X.2.1.6.2.3 - //sidc['G-C-MSLR--'] = [];//2.X.2.1.6.2.4 - //sidc['G-C-MSA---'] = [];//2.X.2.1.6.3 - //sidc['G-C-MSAO--'] = [];//2.X.2.1.6.3.1 - sidc["G-C-MSAN--"] = ms.geometryConverter["NAMED AREA OF INTEREST"]; //2.X.2.1.6.3.2 - sidc["G-C-MSAT--"] = ms.geometryConverter["TARGETED AREA OF INTEREST"]; //2.X.2.1.6.3.3 - //sidc['G-C-B-----'] = [];//2.X.2.2 - //sidc['G-C-BO----'] = [];//2.X.2.2.1 - //sidc['G-C-BOG---'] = [];//2.X.2.2.1.1 - //sidc['G-C-BOGB--'] = [];//2.X.2.2.1.1.1 - //sidc['G-C-BOGL--'] = [];//2.X.2.2.1.1.2 - //sidc['G-C-BOGZ--'] = [];//2.X.2.2.1.1.3 - //sidc['G-C-BOA---'] = [];//2.X.2.2.1.2 - //sidc['G-C-BOAT--'] = [];//2.X.2.2.1.3 - //sidc['G-C-BOATO-'] = [];//2.X.2.2.1.3.1 - //sidc['G-C-BOATM-'] = [];//2.X.2.2.1.3.2 - //sidc['G-C-BOATW-'] = [];//2.X.2.2.1.3.4 - //sidc['G-C-BOAM--'] = [];//2.X.2.2.1.5 - //sidc['G-C-BOAMW-'] = [];//2.X.2.2.1.5.7 - //sidc['G-C-BOAI--'] = [];//2.X.2.2.1.6 - //sidc['G-C-BOAIL-'] = [];//2.X.2.2.1.6.3 - //sidc['G-C-BOAIG-'] = [];//2.X.2.2.1.6.4 - //sidc['G-C-BOAIM-'] = [];//2.X.2.2.1.6.9 - //sidc['G-C-BOAV--'] = [];//2.X.2.2.1.7 - //sidc['G-C-BOAE--'] = [];//2.X.2.2.1.8 - //sidc['G-C-BOAEB-'] = [];//2.X.2.2.1.8.1 - //sidc['G-C-BOAEF-'] = [];//2.X.2.2.1.8.2 - //sidc['G-C-BOAET-'] = [];//2.X.2.2.1.8.3 - //sidc['G-C-BOAED-'] = [];//2.X.2.2.1.8.4 - //sidc['G-C-BOAF--'] = [];//2.X.2.2.1.9 - //sidc['G-C-BOAFR-'] = [];//2.X.2.2.1.9.1 - //sidc['G-C-BOAU--'] = [];//2.X.2.2.1.10 - //sidc['G-C-BOAR--'] = [];//2.X.2.2.1.11 - //sidc['G-C-BOARP-'] = [];//2.X.2.2.1.11.1 - //sidc['G-C-BOARE-'] = [];//2.X.2.2.1.11.2 - //sidc['G-C-BOARS-'] = [];//2.X.2.2.1.11.3 - //sidc['G-C-BOARC-'] = [];//2.X.2.2.1.11.4 - //sidc['G-C-BOAP--'] = [];//2.X.2.2.1.12 - //sidc['G-C-BOAW--'] = [];//2.X.2.2.1.13 - //sidc['G-C-BOAWU-'] = [];//2.X.2.2.1.13.1 - //sidc['G-C-BOAWS-'] = [];//2.X.2.2.1.13.2 - //sidc['G-C-BOAWD-'] = [];//2.X.2.2.1.13.3 - //sidc['G-C-BOAWA-'] = [];//2.X.2.2.1.13.4 - //sidc['G-C-BOAWL-'] = [];//2.X.2.2.1.13.5 - //sidc['G-C-BOAWH-'] = [];//2.X.2.2.1.13.6 - //sidc['G-C-BOAWC-'] = [];//2.X.2.2.1.13.7 - //sidc['G-C-BOAWB-'] = [];//2.X.2.2.1.13.8 - //sidc['G-C-BOAWR-'] = [];//2.X.2.2.1.13.9 - //sidc['G-C-BY----'] = [];//2.X.2.2.2 - //sidc['G-C-BYO---'] = [];//2.X.2.2.2.1 - //sidc['G-C-BYOE--'] = [];//2.X.2.2.2.1.1 - //sidc['G-C-BYOD--'] = [];//2.X.2.2.2.1.2 - //sidc['G-C-BYOI--'] = [];//2.X.2.2.2.1.3 - //sidc['G-C-BYC---'] = [];//2.X.2.2.2.2 - //sidc['G-C-BYCA--'] = [];//2.X.2.2.2.2.1 - //sidc['G-C-BYCB--'] = [];//2.X.2.2.2.2.2 - //sidc['G-C-BYCF--'] = [];//2.X.2.2.2.2.3 - //sidc['G-C-BYCE--'] = [];//2.X.2.2.2.2.4 - //sidc['G-C-BYCD--'] = [];//2.X.2.2.2.2.5 - //sidc['G-C-BYCL--'] = [];//2.X.2.2.2.2.6 - //sidc['G-C-BYCR--'] = [];//2.X.2.2.2.2.7 - //sidc['G-C-BS----'] = [];//2.X.2.2.3 - //sidc['G-C-BSL---'] = [];//2.X.2.2.3.3 - //sidc['G-C-BSW---'] = [];//2.X.2.2.3.4 - //sidc['G-C-BSP---'] = [];//2.X.2.2.3.5 - //sidc['G-C-BW----'] = [];//2.X.2.2.4 - //sidc['G-C-BWM---'] = [];//2.X.2.2.4.1 - //sidc['G-C-BWA---'] = [];//2.X.2.2.4.7 - //sidc['G-C-BWC---'] = [];//2.X.2.2.4.8 - //sidc['G-C-BWH---'] = [];//2.X.2.2.4.9 - //sidc['G-C-BWK---'] = [];//2.X.2.2.4.10 - //sidc['G-C-BWD---'] = [];//2.X.2.2.4.11 - //sidc['G-C-BWR---'] = [];//2.X.2.2.4.12 - //sidc['G-C-F-----'] = [];//2.X.2.3 - //sidc['G-C-FS----'] = [];//2.X.2.3.1 - //sidc['G-C-FST---'] = [];//2.X.2.3.1.1 - //sidc['G-C-FSTC--'] = [];//2.X.2.3.1.1.2 - //sidc['G-C-FL----'] = [];//2.X.2.3.2 - //sidc['G-C-FLC---'] = [];//2.X.2.3.2.1 - //sidc['G-C-FLF---'] = [];//2.X.2.3.2.2 - //sidc['G-C-FLT---'] = [];//2.X.2.3.2.3 - //sidc['G-C-FLTP--'] = [];//2.X.2.3.2.3.1 - //sidc['G-C-FLK---'] = [];//2.X.2.3.2.4 - //sidc['G-C-FLKP--'] = [];//2.X.2.3.2.4.1 - //sidc['G-C-FLKS--'] = [];//2.X.2.3.2.4.2 - //sidc['G-C-FLKT--'] = [];//2.X.2.3.2.4.3 - //sidc['G-C-FLN---'] = [];//2.X.2.3.2.5 - //sidc['G-C-FLR---'] = [];//2.X.2.3.2.6 - //sidc['G-C-FA----'] = [];//2.X.2.3.3 - sidc["G-C-FAS---"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //2.X.2.3.3.1 - sidc["G-C-FAC---"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //2.X.2.3.3.2 - //sidc['G-C-FAT---'] = [];//2.X.2.3.3.3 - //sidc['G-C-FAR---'] = [];//2.X.2.3.3.4 - //sidc['G-C-FARS--'] = [];//2.X.2.3.3.4.1 - //sidc['G-C-FARU--'] = [];//2.X.2.3.3.4.2 - //sidc['G-C-FAB---'] = [];//2.X.2.3.3.5 - sidc["G-C-FAI---"] = ms.geometryConverter["FREE FIRE AREA"]; //2.X.2.3.3.6 - //sidc['G-C-FAZ---'] = [];//2.X.2.3.3.7 - //sidc['G-C-FAZT--'] = [];//2.X.2.3.3.7.1 - //sidc['G-C-FAZU--'] = [];//2.X.2.3.3.7.2 - //sidc['G-C-FAN---'] = [];//2.X.2.3.3.8 - //sidc['G-C-FAD---'] = [];//2.X.2.3.3.10 - //sidc['G-C-FAP---'] = [];//2.X.2.3.3.11 - //sidc['G-C-FATA--'] = [];//2.X.2.3.3.12 - //sidc['*-*-*'] = [];//G - //sidc['G-C-SP----'] = [];//2.X.2.4.1 - //sidc['G-C-SPQ---'] = [];//2.X.2.4.1.14 - //sidc['G-C-SPM---'] = [];//2.X.2.4.1.15 - //sidc['G-C-SL----'] = [];//2.X.2.4.2 - //sidc['G-C-SLC---'] = [];//2.X.2.4.2.1 - //sidc['G-C-SLCM--'] = [];//2.X.2.4.2.1.1 - //sidc['G-C-SLCH--'] = [];//2.X.2.4.2.1.2 - //sidc['G-C-SLR---'] = [];//2.X.2.4.2.2 - //sidc['G-C-SLRM--'] = [];//2.X.2.4.2.2.1 - //sidc['G-C-SLRA--'] = [];//2.X.2.4.2.2.2 - //sidc['G-C-SLRO--'] = [];//2.X.2.4.2.2.3 - //sidc['G-C-SLRT--'] = [];//2.X.2.4.2.2.4 - //sidc['G-C-SLRW--'] = [];//2.X.2.4.2.2.5 - //sidc['G-C-SA----'] = [];//2.X.2.4.3 - //sidc['G-C-SAD---'] = [];//2.X.2.4.3.1 - //sidc['G-C-SAP---'] = [];//2.X.2.4.3.2 - //sidc['G-C-SAR---'] = [];//2.X.2.4.3.3 - //sidc['G-C-SAH---'] = [];//2.X.2.4.3.4 - //sidc['G-C-SAT---'] = [];//2.X.2.4.3.5 - //sidc['G-C-SATB--'] = [];//2.X.2.4.3.5.1 - //sidc['G-C-SATD--'] = [];//2.X.2.4.3.5.2 - //sidc['G-C-SATR--'] = [];//2.X.2.4.3.5.3 - //sidc['G-C-SARR--'] = [];//2.X.2.4.3.6 - //sidc['G-C-O-----'] = [];//2.X.2.5 - //sidc['G-C-OXE---'] = [];//2.X.2.5.1.1 - //sidc['G-C-OXU---'] = [];//2.X.2.5.1.2 - //sidc['G-C-OXW---'] = [];//2.X.2.5.1.3 - //sidc['G-C-OXST--'] = [];//2.X.2.5.1.8 - //sidc['G-C-OXA---'] = [];//2.X.2.5.1.10 - //sidc['G-C-OL----'] = [];//2.X.2.5.3 - //sidc['*-*-*'] = [];//G - //sidc['*-*-*'] = [];//G - //sidc['*-*-*'] = [];//G - //sidc['*-*-*'] = [];//G - //sidc['G-O-------'] = [];//2.X.3 - //sidc['G-O-V-----'] = [];//2.X.3.1 - //sidc['G-O-L-----'] = [];//2.X.3.2 - //sidc['G-O-P-----'] = [];//2.X.3.3 - //sidc['G-O-PJ----'] = [];//2.X.3.3.13 - //sidc['G-O-I-----'] = [];//2.X.3.4 -}; - -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)(module))) - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - -var addSIDCgraphics = function(parts, type) { - if (typeof parts === "function") { - if (typeof this["_" + type + "SIDCgraphics"] === "undefined") { - this["_" + type + "SIDCgraphics"] = []; - } - this["_" + type + "SIDCgraphics"] = this[ - "_" + type + "SIDCgraphics" - ].concat(parts); - } - return this; -}; - -module.exports = addSIDCgraphics; - - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -module.exports = function(properties, mapping) { - var version = this.SIDC.substr(0, 2); - var standardIdentity1 = this.SIDC.substr(2, 1); - var standardIdentity2 = this.SIDC.substr(3, 1); - var symbolSet = this.SIDC.substr(4, 2); - var status = this.SIDC.substr(6, 1); - var headquartersTaskForceDummy = this.SIDC.substr(7, 1); - var echelonMobility = this.SIDC.substr(8, 2); - - var affiliationMapping = { - "0": "Unknown", - "1": "Unknown", - "2": "Friend", - "3": "Friend", - "4": "Neutral", - "5": "Hostile", - "6": "Hostile" - }; - - var dimensionMapping = { - "00": "Sea", - "01": "Air", - "02": "Air", - "05": "Air", - "06": "Air", - "10": "Ground", - "11": "Ground", - "12": "Ground", - "15": "Ground", - "20": "Ground", - "30": "Sea", - "35": "Subsurface", - "36": "Subsurface", - "39": "Subsurface", - "40": "Ground", - "50": "Air", - "51": "Air", - "52": "Ground", - "53": "Sea", - "54": "Subsurface", - "60": "Ground" - }; - - var functionid = (properties.functionid = this.SIDC.substr(10, 10)); - - properties.context = mapping.context[parseInt(this.SIDC.substr(2, 1))]; - properties.affiliation = affiliationMapping[standardIdentity2]; - properties.dimension = dimensionMapping[symbolSet]; - - //Planned/Anticipated/Suspect symbols should have a dashed outline - if (status == "1") properties.notpresent = ms._dashArrays.anticipated; - if ( - standardIdentity2 == "0" || - standardIdentity2 == "2" || - standardIdentity2 == "5" - ) - properties.notpresent = ms._dashArrays.pending; - - if (echelonMobility >= 70 && echelonMobility < 80) { - properties.leadership = mapping.echelonMobility[echelonMobility]; - } - - return properties; -}; - - -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function ArmyXML(xml) { - var features = []; - /* - function parseSIDC(sidc) { - for (var i in sidc.childNodes){ - if (sidc.childNodes[i].nodeName == 'SymbolCodeString'){ - return sidc.childNodes[i].textContent; - } - } - } - */ - function parseArea(area) { - var coordinates = []; - area = area.getElementsByTagName(ns + "Point"); - for (var i in area) { - if (area[i].nodeName == ns + "Point") { - var point = area[i]; - var coord = []; - coord[0] = parseFloat(point.getAttribute("Longitude")); - coord[1] = parseFloat(point.getAttribute("Latitude")); - if (point.getAttribute("Elevation")) { - coord[2] = parseFloat(point.getAttribute("Elevation")); - } - coordinates.push(coord); - } - } - coordinates.push(coordinates[0]); //close ring - return coordinates; - } - - /* - function parseArrow(arrow) { - var coordinates = []; - var arrowHead = []; - for (var i in arrow.childNodes){ - if (arrow.childNodes[i].nodeName == 'Arrowhead'){ - arrowHead = parsePoint(arrow.childNodes[i]); - } - if (arrow.childNodes[i].nodeName == 'Points'){ - for (var j in arrow.childNodes[i].childNodes){ - if (arrow.childNodes[i].childNodes[j].nodeName == 'Point'){ - coordinates.unshift( parsePoint(arrow.childNodes[i].childNodes[j]) ); - } - } - } - } - coordinates.push(arrowHead);//Add arrow head last in multipoint - return coordinates; - } -*/ - /* - function parseCircle(line) { - var coordinates = [0,0]; - for (var i in line.childNodes){ - if (line.childNodes[i].nodeName == 'CenterPoint'){ - coordinates[0] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == 'PerimeterPoint'){ - coordinates[1] = parsePoint(line.childNodes[i]); - } - } - return coordinates; - } -*/ - /* - function parseCorridor(corridor) { - var coordinates = []; - var width = 0; - for (var i in corridor.childNodes){ - if (corridor.childNodes[i].nodeName == 'Width'){ - width = corridor.childNodes[i].textContent; - } - if (corridor.childNodes[i].nodeName == 'Points'){ - for (var j in corridor.childNodes[i].childNodes){ - if (corridor.childNodes[i].childNodes[j].nodeName == 'Point'){ - coordinates.push( parsePoint(corridor.childNodes[i].childNodes[j]) ); - } - } - } - } - coordinates.push(width);//Add width last in array, we fix this later - return coordinates; - } -*/ - - function parseLine(line) { - var coordinates = []; - line = line.getElementsByTagName(ns + "Point"); - for (var i in line) { - if (line[i].nodeName == ns + "Point") { - var point = line[i]; - var coord = []; - coord[0] = parseFloat(point.getAttribute("Longitude")); - coord[1] = parseFloat(point.getAttribute("Latitude")); - if (point.getAttribute("Elevation")) { - coord[2] = parseFloat(point.getAttribute("Elevation")); - } - coordinates.push(coord); - } - } - return coordinates; - } - - /* - function parseTwoPointArrow(arrow) { - var coordinates = [0,0,0]; - for (var i in arrow.childNodes){ - if (arrow.childNodes[i].nodeName == 'StartPoint'){ - coordinates[1] = parsePoint(arrow.childNodes[i]); - } - if (arrow.childNodes[i].nodeName == 'EndPoint' || arrow.childNodes[i].nodeName == 'Endpoint'){ - coordinates[0] = parsePoint(arrow.childNodes[i]); - } - if (arrow.childNodes[i].nodeName == 'Arrowhead' || arrow.childNodes[i].nodeName == 'ArrowHead'){ - coordinates[2] = parsePoint(arrow.childNodes[i]); - } - } - console.log(coordinates) - return coordinates; - } -*/ - /* - function parseTwoPointCorridor(line) { - var coordinates = [0,0,0]; - for (var i in line.childNodes){ - if (line.childNodes[i].nodeName == 'StartPoint'){ - coordinates[0] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == 'EndPoint' || line.childNodes[i].nodeName == 'Endpoint'){ - coordinates[1] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == 'Width'){ - coordinates[2] = line.childNodes[i].textContent; - } - } - return coordinates; - } -*/ - /* - function parseTwoPointLine(line) { - var coordinates = [0,0]; - for (var i in line.childNodes){ - if (line.childNodes[i].nodeName == 'StartPoint'){ - //we reverse them because MIR vs 2525 - coordinates[1] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == 'EndPoint' || line.childNodes[i].nodeName == 'Endpoint'){ - coordinates[0] = parsePoint(line.childNodes[i]); - } - } - return coordinates; - } -*/ - - function parsePoint(point) { - var coordinates = [0, 0]; - point = point.getElementsByTagName(ns + "Point")[0]; - coordinates[0] = parseFloat(point.getAttribute("Longitude")); - coordinates[1] = parseFloat(point.getAttribute("Latitude")); - if (point.getAttribute("Elevation")) { - coordinates[2] = parseFloat(point.getAttribute("Elevation")); - } - return coordinates; - } - - function parseSymbol(symbol) { - var feature = { type: "Feature", properties: {} }; - - var symbolNodes = {}; - for (var i in symbol.childNodes) { - symbolNodes[symbol.childNodes[i].nodeName] = symbol.childNodes[i]; - } - - var symbolDefinition = symbolNodes[ns + "Symbol_Definition"]; - for (i in symbolDefinition.childNodes) { - var nodeName = symbolDefinition.childNodes[i].nodeName; - if (nodeName == "#text" || typeof nodeName === "undefined") continue; - if (nodeName.indexOf(":") != -1) nodeName = nodeName.split(":")[1]; - feature.properties[nodeName] = symbolDefinition.childNodes[i].textContent; - } - - var operationalAttributes = symbolNodes[ns + "Operational_Attributes"]; - for (i in operationalAttributes.childNodes) { - nodeName = operationalAttributes.childNodes[i].nodeName; - if (nodeName == "#text" || typeof nodeName === "undefined") continue; - if (nodeName.indexOf(":") != -1) nodeName = nodeName.split(":")[1]; - feature.properties[nodeName] = - operationalAttributes.childNodes[i].textContent; - } - - var displayAttributes = symbolNodes[ns + "Display_Attributes"]; - for (i in displayAttributes.childNodes) { - nodeName = displayAttributes.childNodes[i].nodeName; - if (nodeName == "#text" || typeof nodeName === "undefined") continue; - if (nodeName.indexOf(":") != -1) nodeName = nodeName.split(":")[1]; - feature.properties[nodeName] = - displayAttributes.childNodes[i].textContent; - } - - switch (feature.properties["Symbol_Category"]) { - case "AREA": - feature.geometry = { - type: "Polygon", - coordinates: [parseArea(symbolNodes[ns + "Symbol_Points"])] - }; - break; - case "BIOCHEM": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - feature.geometry = { - type: "Polygon", - coordinates: [parseArea(symbolNodes[ns + "Symbol_Points"])] - }; - } - break; - //BOUNDARY, - case "EQUIPMENT": - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - break; - //GROUP , - case "INSTALLATION": - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - break; - case "LINE": - feature.geometry = { - type: "LineString", - coordinates: parseLine(symbolNodes[ns + "Symbol_Points"]) - }; - break; - case "MINE": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - feature.geometry = { - type: "Polygon", - coordinates: [parseArea(symbolNodes[ns + "Symbol_Points"])] - }; - } - break; - case "MOOTW": - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - break; - case "NOT_SPECIFIED": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - console.warn( - "cannot handle Symbol_Category: " + - feature.properties["Symbol_Category"] - ); - console.warn(feature.properties["Symbol_Name"]); - console.warn(symbol); - } - break; - case "NUCLEAR": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - feature.geometry = { - type: "Polygon", - coordinates: [parseArea(symbolNodes[ns + "Symbol_Points"])] - }; - } - break; - case "OBSTACLE": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - console.warn( - "cannot handle Symbol_Category: " + - feature.properties["Symbol_Category"] - ); - console.warn(symbol); - } - break; - case "POINT": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - // OK this is bonkers, but i found some errors in some of my sample files... - feature.geometry = { - type: "LineString", - coordinates: parseLine(symbolNodes[ns + "Symbol_Points"]) - }; - } - break; - case "SIG_INT": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - console.warn( - "cannot handle Symbol_Category: " + - feature.properties["Symbol_Category"] - ); - console.warn(symbol); - } - break; - case "TARGET": - if ( - symbolNodes[ns + "Symbol_Points"].getElementsByTagName(ns + "Point") - .length == 1 - ) { - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - } else { - feature.geometry = { - type: "Polygon", - coordinates: [parseArea(symbolNodes[ns + "Symbol_Points"])] - }; - } - break; - case "UNIT": - feature.geometry = { - type: "Point", - coordinates: parsePoint(symbolNodes[ns + "Symbol_Points"]) - }; - break; - default: - console.warn( - "cannot handle Symbol_Category: " + - feature.properties["Symbol_Category"] - ); - console.warn(symbol); - } - return feature; - } - - if (typeof xml == "string") { - xml = new DOMParser().parseFromString(xml, "text/xml"); - } - var ns = ""; - if (xml.firstChild.nodeName.indexOf(":") != -1) { - ns = xml.firstChild.nodeName.split(":")[0] + ":"; - } - - var symbols = xml.getElementsByTagName(ns + "Symbol"); - for (var sym in symbols) { - if (symbols[sym].nodeName) { - features = features.concat(parseSymbol(symbols[sym])); - } - } - - var rawGeoJSON = { type: "FeatureCollection", features: features }; - return ms.format.GeoJSON(rawGeoJSON, { - Additional_Info1: "additionalInformation", - Additional_Info2: "additionalInformation1", - Additional_Info3: "additionalInformation1", - Common_Identifier: "commonIdentifier", - Higher_Formation: "higherFormation", - Unique_Designator1: "uniqueDesignation", - Unique_Designator2: "uniqueDesignation1", - Staff_Comments: "staffComments", - Symbol_Code: "sidc", - DTG_1: "dtg", - DTG_2: "dtg1", - //Speed: 'speed', - //Direction: 'direction', - //Altitude_Depth: 'altitudeDepth', - Reinforced_or_Reduced: "reinforcedReduced", - Quantity: "quantity", - //Combat_Effectiveness: 'combatEffectiveness', - Signature_Equipment: "signatureEquipment", - IFF_SIF: "iffSif", - Special_C2HQ: "specialHeadquarters" - }); -} - -if (true) { - module.exports = ArmyXML; -} - - -/***/ }), -/* 14 */ -/***/ (function(module, exports) { - -function GeoJSON(data, mapping) { - if (typeof mapping == "undefined") { - mapping = {}; - } - // If input is a string, parse it to JSON - if (typeof data == "string") { - data = JSON.parse(data); - for (var key in data) { - this[key] = data[key]; - } - } - - // Parse and clone the JSON - var feature_copy = []; - for (var i = 0; i < data.features.length; i++) { - var feature = data.features[i]; - var f = { type: "Feature", properties: {} }; - if (feature.geometry) { - f.geometry = { - type: feature.geometry.type, - coordinates: feature.geometry.coordinates - }; - } - for (key in feature.properties) { - if (mapping.hasOwnProperty(key)) { - f.properties[mapping[key]] = feature.properties[key]; - } else { - f.properties[key] = feature.properties[key]; - } - } - feature_copy.push(f); - } - return { type: "FeatureCollection", features: feature_copy }; -} - -module.exports = GeoJSON; - - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - -function NVG(data) { - var _ = {}; - _.document = "nvg"; - _.items = []; - _.version = "2.0.2"; - if (Array.isArray(data)) { - _.items = data; - } - if (typeof data == "object" && !Array.isArray(data)) { - _.items.push(data); - } - if (typeof data == "string") { - //do stuff with input object - try { - data = JSON.parse(data); - for (var key in data) { - _[key] = data[key]; - } - } catch (e) { - //So parse as JSON failed, try to parse it as xml - parseXML(data); - } - } - - function parseXML(xml) { - //parse XML string to JSON - function tagAttributes(nodes, current) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var nodeName = node.nodeName.split(":"); - if (nodeName[0] == "dc" || nodeName[0] == "dcterms") { - nodeName = nodeName[0]; - } else { - nodeName = nodeName[1]; - } - if (node.nodeType == 1 && nodeName) { - nodeName = nodeName.toLowerCase(); - switch (nodeName) { - case "begin": - current[nodeName] = node.textContent; - break; - case "end": - current[nodeName] = node.textContent; - break; - case "dc": - case "dcterms": - current[node.nodeName] = node.textContent; - break; - case "content": - current[nodeName] = node.textContent; - break; - case "exclude": - if (!current.hasOwnProperty(nodeName)) { - current.exclusion = []; - } - tagAttributes(node.childNodes, current.exclusion); - break; - case "extendeddata": - if (!current.hasOwnProperty(nodeName)) { - current[nodeName] = {}; - current[nodeName].simpledata = []; - } - nodeAttibutes(node, current[nodeName]); - parseSubNodes(node.childNodes, current[nodeName]); - break; - case "extension": - console.warn("TODO tagAttributes: " + nodeName); - // TODO How to handle extended data - current[nodeName] = []; //this is for node - break; - case "metadata": - current[nodeName] = {}; - tagAttributes(node.childNodes, current[nodeName]); - break; - case "textinfo": - current[nodeName] = node.textContent; - break; - case "timespan": - current[nodeName] = {}; - tagAttributes(node.childNodes, current[nodeName]); - break; - case "timestamp": - current[nodeName] = node.textContent; - break; - case "simplefield": - if (!current.hasOwnProperty(nodeName)) { - current[nodeName] = []; - } - var field = {}; - nodeAttibutes(node, field); - current[nodeName].push(field); - break; - case "arcband-ring": - case "circular-ring": - case "elliptic-ring": - case "linear-ring": - case "rect-ring": - var exclude = {}; - exclude.ring = nodeName.replace("-", ""); - nodeAttibutes(node, exclude); - current.push(exclude); - break; - default: - //Debug logging, remove later - if ( - [ - "arc", - "arcband", - "arrow", - "circle", - "composite", - "content-item", - "corridor", - "ellipse", - "g", - "multipoint", - "orbit", - "point", - "polygon", - "polyline", - "rect", - "text" - ].lastIndexOf(nodeName) == -1 - ) { - console.warn("TODO tagAttributes default: " + nodeName); - } - } - } - } - } - function nodeAttibutes(node, current) { - Array.prototype.slice.call(node.attributes).forEach(function(attr) { - if (attr.name == "modifiers" || attr.name == "style") { - current[attr.name] = {}; - var attr_list = attr.value.trim().split(";"); - for (var j = 0; j < attr_list.length; j++) { - if (attr_list[j]) { - var s = attr_list[j].split(":"); - if (s[0] && s[1]) - current[attr.name][s[0].trim()] = isNaN(Number(s[1].trim())) - ? s[1].trim() - : Number(s[1].trim()); - } - } - return; - } - if (attr.name == "points") { - current[attr.name] = []; - attr_list = attr.value.trim().split(" "); - for (j = 0; j < attr_list.length; j++) { - if (attr_list[j]) { - s = attr_list[j].split(","); - if (s[0] && s[1]) - current[attr.name].push([Number(s[0]), Number(s[1])]); - } - } - return; - } - current[attr.name] = isNaN(Number(attr.value)) - ? attr.value - : Number(attr.value); - }); - } - function parseSubNodes(nodes, current) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (node.nodeType == 1) { - var nodeName = node.nodeName.split(":")[1] || node.nodeName; - nodeName = nodeName.toLowerCase(); - var item = {}; - if ( - [ - "extendeddata", - "extension", - "metadata", - "schema", - "section", - "simpledata", - "simplefield" - ].lastIndexOf(nodeName) != -1 - ) { - switch (nodeName) { - case "extendeddata": - current[nodeName] = item; - nodeAttibutes(node, item); - tagAttributes(node.childNodes, item); - break; - case "extension": - console.warn("TODO parsesubnodes: " + nodeName); - // TODO How to handle extended data - current[nodeName] = []; //this is for root level - break; - case "metadata": - console.warn("TODO parsesubnodes: " + nodeName); - // TODO How to handle metadata data - current[nodeName] = item; - break; - case "schema": - if (!current.hasOwnProperty(nodeName)) { - current[nodeName] = []; - } - current[nodeName].push(item); - nodeAttibutes(node, item); - tagAttributes(node.childNodes, item); - break; - case "section": - if (!current.hasOwnProperty("simpledatasection")) { - current.simpledatasection = []; - } - current.simpledatasection.push(item); - nodeAttibutes(node, item); - item.simpledata = []; - parseSubNodes(node.childNodes, item); - break; - case "simpledata": - nodeAttibutes(node, item); - item.value = node.textContent; - current.simpledata.push(item); - tagAttributes(node.childNodes, item); - break; - case "simplefield": - current[nodeName] = item; - nodeAttibutes(node, item); - tagAttributes(node.childNodes, item); - break; - default: - console.warn("TODO parsesubnodes default: " + nodeName); - } - } else { - //This is all drawables - nodeAttibutes(node, item); - item.drawable = nodeName; - - if (node.childNodes.length) { - tagAttributes(node.childNodes, item); - } - if (item.drawable == "g" || item.drawable == "composite") { - item.items = []; - parseSubNodes(node.childNodes, item); - } - if (item.drawable == "a") { - //This is for handling the old A element - parseSubNodes(node.childNodes, current); - } else { - // otherwise just add featuers - current.items.push(item); - } - } - } - } - } - - xml = new DOMParser().parseFromString(xml, "text/xml"); - if ( - xml.firstChild.nodeName == "nvg" || - xml.firstChild.nodeName.split(":")[1] == "nvg" - ) { - //check that we actually are parsing NVG but ignore namespace - _.version = xml.firstChild.getAttribute("version"); - _.items = []; - var nodes = xml.firstChild.childNodes; - parseSubNodes(nodes, _); - } - } - function toGeoJSON() { - function bearing(p1, p2) { - var l1 = p1[0] * (Math.PI / 180); - var l2 = p2[0] * (Math.PI / 180); - var f1 = p1[1] * (Math.PI / 180); - var f2 = p2[1] * (Math.PI / 180); - var y = Math.sin(l2 - l1) * Math.cos(f2); - var x = - Math.cos(f1) * Math.sin(f2) - - Math.sin(f1) * Math.cos(f2) * Math.cos(l2 - l1); - return Math.atan2(y, x) / (Math.PI / 180); - } - function distBearing(point, dist, bearing) { - var angularDist = dist / 6371e3; - bearing = bearing * (Math.PI / 180); - var lng = point[0] * (Math.PI / 180); - var lat = point[1] * (Math.PI / 180); - var lat2 = Math.asin( - Math.sin(lat) * Math.cos(angularDist) + - Math.cos(lat) * Math.sin(angularDist) * Math.cos(bearing) - ); - var lng2 = - lng + - Math.atan2( - Math.sin(bearing) * Math.sin(angularDist) * Math.cos(lat), - Math.cos(angularDist) - Math.sin(lat) * Math.sin(lat2) - ); - lat2 = lat2 / (Math.PI / 180); - lng2 = (lng2 / (Math.PI / 180) + 540) % 360 - 180; - return [lng2, lat2]; - } - function exclusions(exclusion) { - var exclude = []; - switch (exclusion.ring) { - case "arcbandring": - var startangle = exclusion.startangle; - var endangle = exclusion.endangle; - if (startangle > endangle) endangle += 360; - for (var j = startangle; j <= endangle; j += 2) { - exclude.push( - distBearing([exclusion.cx, exclusion.cy], exclusion.minr, j) - ); - } - for (j = endangle; j >= startangle; j -= 2) { - exclude.push( - distBearing([exclusion.cx, exclusion.cy], exclusion.maxr, j) - ); - } - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - exclusion.minr, - startangle - ) - ); - break; - case "ellipticalring": - for (j = 360; j >= 0; j -= 2) { - var radius = - exclusion.ry * - exclusion.rx / - Math.sqrt( - Math.pow(exclusion.rx * Math.cos(j * (Math.PI / 180)), 2) + - Math.pow(exclusion.ry * Math.sin(j * (Math.PI / 180)), 2) - ); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - radius, - j - (exclusion.rotation || 0) - ) - ); - } - break; - case "linearring": - exclude = exclusion.points; - exclude.push(exclusion.points[0]); - break; - case "rectangularring": - var diagonalRadius = Math.sqrt( - Math.pow(exclusion.rx, 2) + Math.pow(exclusion.rx, 2) - ); - var angle; - angle = - (Math.PI / 2 - Math.atan2(exclusion.ry, exclusion.rx)) / - (Math.PI / 180); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - diagonalRadius, - exclusion.rotation ? angle - exclusion.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(-exclusion.ry, exclusion.rx)) / - (Math.PI / 180); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - diagonalRadius, - exclusion.rotation ? angle - exclusion.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(-exclusion.ry, -exclusion.rx)) / - (Math.PI / 180); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - diagonalRadius, - exclusion.rotation ? angle - exclusion.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(exclusion.ry, -exclusion.rx)) / - (Math.PI / 180); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - diagonalRadius, - exclusion.rotation ? angle - exclusion.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(exclusion.ry, exclusion.rx)) / - (Math.PI / 180); - exclude.push( - distBearing( - [exclusion.cx, exclusion.cy], - diagonalRadius, - exclusion.rotation ? angle - exclusion.rotation : angle - ) - ); - break; - default: - console.warn("TODO parse item default: " + exclusion.ring); - } - return exclude; - } - function items2features(items, geometrycollection) { - var features = []; - for (var i = 0; i < items.length; i++) { - var item = items[i]; - var feature = { type: "Feature", properties: {} }; - for (var key in item) { - if (key == "uri") { - feature.id = item.uri; - } else { - feature.properties[key] = item[key]; - } - if ( - key == "symbol" && - (item[key].substring(0, 4) == "app6" || - item[key].substring(0, 4) == "2525") - ) { - feature.properties["sidc"] = item[key].split(":")[1]; - } - if (key == "modifiers") { - var modifiers = item[key]; - for (var mod in modifiers) { - feature.properties[mod] = modifiers[mod]; - } - } - } - switch (item.drawable) { - case "arc": - feature.geometry = { type: "LineString" }; - feature.geometry.coordinates = []; - var startangle = item.startangle; - var endangle = item.endangle; - if (startangle > endangle) endangle += 360; - for (var j = startangle; j <= endangle; j += 2) { - var radius = - item.ry * - item.rx / - Math.sqrt( - Math.pow(item.rx * Math.cos(j * (Math.PI / 180)), 2) + - Math.pow(item.ry * Math.sin(j * (Math.PI / 180)), 2) - ); - feature.geometry.coordinates.push( - distBearing( - [item.cx, item.cy], - radius, - item.rotation ? j - item.rotation : j - ) - ); - } - break; - case "arcband": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - startangle = item.startangle; - endangle = item.endangle; - if (startangle > endangle) endangle += 360; - for (j = startangle; j <= endangle; j += 2) { - feature.geometry.coordinates[0].push( - distBearing([item.cx, item.cy], item.minr, j) - ); - } - for (j = endangle; j >= startangle; j -= 2) { - feature.geometry.coordinates[0].push( - distBearing([item.cx, item.cy], item.maxr, j) - ); - } - feature.geometry.coordinates[0].push( - distBearing([item.cx, item.cy], item.minr, startangle) - ); - break; - case "arrow": - var direction; - feature.geometry = { type: "LineString" }; - feature.geometry.coordinates = []; - direction = (bearing(item.points[0], item.points[1]) + 360) % 360; - feature.geometry.coordinates.push( - distBearing(item.points[0], item.width / 2, direction - 90) - ); - for (j = 1; j < item.points.length - 1; j++) { - var direction1 = - (bearing(item.points[j], item.points[j - 1]) + 360) % 360; - var direction2 = - (bearing(item.points[j], item.points[j + 1]) + 360) % 360; - var factor = - 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - feature.geometry.coordinates.push( - distBearing( - item.points[j], - item.width / 2 * factor, - (direction1 + direction2) / 2 - ) - ); - } - direction = - (bearing( - item.points[item.points.length - 1], - item.points[item.points.length - 2] - ) + - 180) % - 360; - - //Arrowhead - var point = distBearing( - item.points[item.points.length - 1], - item.width, - direction + 180 - ); - feature.geometry.coordinates.push( - distBearing(point, item.width / 2, direction - 90) - ); - feature.geometry.coordinates.push( - distBearing(point, item.width, direction - 90) - ); - feature.geometry.coordinates.push( - item.points[item.points.length - 1] - ); - feature.geometry.coordinates.push( - distBearing(point, item.width, direction + 90) - ); - feature.geometry.coordinates.push( - distBearing(point, item.width / 2, direction + 90) - ); - - for (j = item.points.length - 2; j > 0; j--) { - direction1 = - (bearing(item.points[j], item.points[j - 1]) + 360) % 360; - direction2 = - (bearing(item.points[j], item.points[j + 1]) + 360) % 360; - factor = - 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - feature.geometry.coordinates.push( - distBearing( - item.points[j], - -(item.width / 2) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = (bearing(item.points[0], item.points[1]) + 360) % 360; - feature.geometry.coordinates.push( - distBearing(item.points[0], item.width / 2, direction + 90) - ); - break; - case "circle": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - for (j = 360; j >= 0; j -= 5) { - feature.geometry.coordinates[0].push( - distBearing([item.cx, item.cy], item.r, j) - ); - } - break; - case "composite": - //Flatten composites at the moment - var subfeatures = items2features(item.items, true); - for (key in subfeatures) { - subfeatures[key].properties.parent = {}; //feature.properties; - if (item.uri) subfeatures[key].properties.parent.uri = item.uri; - features.push(subfeatures[key]); - } - break; - case "corridor": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - direction = (bearing(item.points[0], item.points[1]) + 360) % 360; - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction - 90) - ); - for (j = 1; j < item.points.length - 1; j++) { - direction1 = - (bearing(item.points[j], item.points[j - 1]) + 360) % 360; - direction2 = - (bearing(item.points[j], item.points[j + 1]) + 360) % 360; - factor = - 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - feature.geometry.coordinates[0].push( - distBearing( - item.points[j], - item.width / 2 * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = - (bearing( - item.points[item.points.length - 1], - item.points[item.points.length - 2] - ) + - 180) % - 360; - feature.geometry.coordinates[0].push( - distBearing( - item.points[item.points.length - 1], - item.width / 2, - direction - 90 - ) - ); - feature.geometry.coordinates[0].push( - distBearing( - item.points[item.points.length - 1], - item.width / 2, - direction + 90 - ) - ); - - for (j = item.points.length - 2; j > 0; j--) { - direction1 = - (bearing(item.points[j], item.points[j - 1]) + 360) % 360; - direction2 = - (bearing(item.points[j], item.points[j + 1]) + 360) % 360; - factor = - 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - feature.geometry.coordinates[0].push( - distBearing( - item.points[j], - -(item.width / 2) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = (bearing(item.points[0], item.points[1]) + 360) % 360; - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction + 90) - ); - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction - 90) - ); //Close line - - break; - case "ellipse": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - for (j = 360; j >= 0; j -= 2) { - radius = - item.ry * - item.rx / - Math.sqrt( - Math.pow(item.rx * Math.cos(j * (Math.PI / 180)), 2) + - Math.pow(item.ry * Math.sin(j * (Math.PI / 180)), 2) - ); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - radius, - j - (item.rotation || 0) - ) - ); - } - break; - case "g": - //Flatten groups - subfeatures = items2features(item.items, true); - for (key in subfeatures) { - subfeatures[key].properties.parent = {}; //feature.properties; - if (item.uri) subfeatures[key].properties.parent.uri = item.uri; - features.push(subfeatures[key]); - } - break; - case "multipoint": - feature.geometry = { type: "MultiPoint" }; - feature.geometry.coordinates = item.points; - delete feature.properties.points; - break; - case "orbit": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - direction = - (Math.atan2( - item.points[1][0] - item.points[0][0], - item.points[1][1] - item.points[0][1] - ) - - Math.PI / 2) / - (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction) - ); - for (j = 0; j <= 180; j += 2) { - feature.geometry.coordinates[0].push( - distBearing(item.points[1], item.width / 2, direction + j) - ); - } - - direction = - (Math.atan2( - item.points[0][0] - item.points[1][0], - item.points[0][1] - item.points[1][1] - ) - - Math.PI / 2) / - (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - item.points[item.points.length - 1], - item.width / 2, - direction - ) - ); - for (j = 0; j <= 180; j += 2) { - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction + j) - ); - } - - direction = - (Math.atan2( - item.points[1][0] - item.points[0][0], - item.points[1][1] - item.points[0][1] - ) - - Math.PI / 2) / - (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing(item.points[0], item.width / 2, direction) - ); - break; - case "point": - feature.geometry = { type: "Point" }; - feature.geometry.coordinates = [item.x, item.y]; - break; - case "polygon": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [item.points]; - feature.geometry.coordinates[0].push(item.points[0]); - delete feature.properties.points; - break; - case "polyline": - feature.geometry = { type: "LineString" }; - feature.geometry.coordinates = item.points; - delete feature.properties.points; - break; - case "rect": - feature.geometry = { type: "Polygon" }; - feature.geometry.coordinates = [[]]; - var diagonalRadius = Math.sqrt( - Math.pow(item.rx, 2) + Math.pow(item.rx, 2) - ); - var angle; - angle = - (Math.PI / 2 - Math.atan2(item.ry, item.rx)) / (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - diagonalRadius, - item.rotation ? angle - item.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(-item.ry, item.rx)) / (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - diagonalRadius, - item.rotation ? angle - item.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(-item.ry, -item.rx)) / (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - diagonalRadius, - item.rotation ? angle - item.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(item.ry, -item.rx)) / (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - diagonalRadius, - item.rotation ? angle - item.rotation : angle - ) - ); - angle = - (Math.PI / 2 - Math.atan2(item.ry, item.rx)) / (Math.PI / 180); - feature.geometry.coordinates[0].push( - distBearing( - [item.cx, item.cy], - diagonalRadius, - item.rotation ? angle - item.rotation : angle - ) - ); - break; - case "text": - feature.geometry = { type: "Point" }; - feature.geometry.coordinates = [item.x, item.y]; - break; - default: - console.warn("TODO parse item default: " + item.drawable); - } - - if (item.hasOwnProperty("exclusion")) { - for (var e = 0; e < item.exclusion.length; e++) { - feature.geometry.coordinates.push(exclusions(item.exclusion[e])); - } - } - if (feature.geometry) { - features.push(feature); - } - } - return features; - } - var geoJSON = {}; - geoJSON.type = "FeatureCollection"; - for (var key in _) { - if (key == "items") { - geoJSON.features = items2features(_.items, false); - } else { - geoJSON[key] = _[key]; - } - } - return geoJSON; - } - - return toGeoJSON(); -} - -module.exports = NVG; - - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function SLF(xml) { - var features = []; - - function parseSIDC(sidc) { - for (var i in sidc.childNodes) { - if (sidc.childNodes[i].nodeName == "SymbolCodeString") { - return sidc.childNodes[i].textContent; - } - } - } - - function parseArea(area) { - var coordinates = []; - for (var i in area.childNodes) { - if (area.childNodes[i].nodeName == "Points") { - for (var j in area.childNodes[i].childNodes) { - if (area.childNodes[i].childNodes[j].nodeName == "Point") { - coordinates.push(parsePoint(area.childNodes[i].childNodes[j])); - } - } - } - } - coordinates.push(coordinates[0]); //close ring - return coordinates; - } - - function parseArrow(arrow) { - var coordinates = []; - var arrowHead = []; - for (var i in arrow.childNodes) { - if (arrow.childNodes[i].nodeName == "Arrowhead") { - arrowHead = parsePoint(arrow.childNodes[i]); - } - if (arrow.childNodes[i].nodeName == "Points") { - for (var j in arrow.childNodes[i].childNodes) { - if (arrow.childNodes[i].childNodes[j].nodeName == "Point") { - coordinates.unshift(parsePoint(arrow.childNodes[i].childNodes[j])); - } - } - } - } - coordinates.push(arrowHead); //Add arrow head last in multipoint - return coordinates; - } - - function parseCircle(line) { - var coordinates = [0, 0]; - for (var i in line.childNodes) { - if (line.childNodes[i].nodeName == "CenterPoint") { - coordinates[0] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == "PerimeterPoint") { - coordinates[1] = parsePoint(line.childNodes[i]); - } - } - return coordinates; - } - - function parseCorridor(corridor) { - var coordinates = []; - var width = 0; - for (var i in corridor.childNodes) { - if (corridor.childNodes[i].nodeName == "Width") { - width = corridor.childNodes[i].textContent; - } - if (corridor.childNodes[i].nodeName == "Points") { - for (var j in corridor.childNodes[i].childNodes) { - if (corridor.childNodes[i].childNodes[j].nodeName == "Point") { - coordinates.push(parsePoint(corridor.childNodes[i].childNodes[j])); - } - } - } - } - coordinates.push(width); //Add width last in array, we fix this later - return coordinates; - } - - function parseLine(line) { - var coordinates = []; - for (var i in line.childNodes) { - if (line.childNodes[i].nodeName == "Points") { - for (var j in line.childNodes[i].childNodes) { - if (line.childNodes[i].childNodes[j].nodeName == "Point") { - coordinates.push(parsePoint(line.childNodes[i].childNodes[j])); - } - } - } - } - return coordinates; - } - - function parseTwoPointArrow(arrow) { - var coordinates = [0, 0, 0]; - for (var i in arrow.childNodes) { - if (arrow.childNodes[i].nodeName == "StartPoint") { - coordinates[1] = parsePoint(arrow.childNodes[i]); - } - if ( - arrow.childNodes[i].nodeName == "EndPoint" || - arrow.childNodes[i].nodeName == "Endpoint" - ) { - coordinates[0] = parsePoint(arrow.childNodes[i]); - } - if ( - arrow.childNodes[i].nodeName == "Arrowhead" || - arrow.childNodes[i].nodeName == "ArrowHead" - ) { - coordinates[2] = parsePoint(arrow.childNodes[i]); - } - } - console.warn(coordinates); - return coordinates; - } - - function parseTwoPointCorridor(line) { - var coordinates = [0, 0, 0]; - for (var i in line.childNodes) { - if (line.childNodes[i].nodeName == "StartPoint") { - coordinates[0] = parsePoint(line.childNodes[i]); - } - if ( - line.childNodes[i].nodeName == "EndPoint" || - line.childNodes[i].nodeName == "Endpoint" - ) { - coordinates[1] = parsePoint(line.childNodes[i]); - } - if (line.childNodes[i].nodeName == "Width") { - coordinates[2] = line.childNodes[i].textContent; - } - } - return coordinates; - } - - function parseTwoPointLine(line) { - var coordinates = [0, 0]; - for (var i in line.childNodes) { - if (line.childNodes[i].nodeName == "StartPoint") { - //we reverse them because MIR vs 2525 - coordinates[1] = parsePoint(line.childNodes[i]); - } - if ( - line.childNodes[i].nodeName == "EndPoint" || - line.childNodes[i].nodeName == "Endpoint" - ) { - coordinates[0] = parsePoint(line.childNodes[i]); - } - } - return coordinates; - } - - function parsePoint(point) { - var coordinates = [0, 0]; - for (var i in point.childNodes) { - if (point.childNodes[i].nodeName == "Longitude") { - coordinates[0] = parseFloat(point.childNodes[i].textContent); - } - if (point.childNodes[i].nodeName == "Latitude") { - coordinates[1] = parseFloat(point.childNodes[i].textContent); - } - } - return coordinates; - } - - function parseLocation(location) { - var locationType = location.getAttribute("xsi:type"); - switch (locationType) { - case "Area": - return { type: "Polygon", coordinates: [parseArea(location)] }; - //break; - case "Arrow": - return { type: "LineString", coordinates: parseArrow(location) }; - //break; - case "Circle": - return { type: "LineString", coordinates: parseCircle(location) }; - //break; - case "Corridor": - return { type: "Corridor", coordinates: parseCorridor(location) }; // We fix Corridors later - //break; - case "Line": - return { type: "LineString", coordinates: parseLine(location) }; - //break; - case "Point": - return { type: "Point", coordinates: parsePoint(location) }; - //break; - case "PolyPoint": - return { type: "LineString", coordinates: parseLine(location) }; //I know this isn't a line but they are stored in the same way. - //break; - case "Rectangle": - return { - type: "Rectangle", - coordinates: parseTwoPointCorridor(location) - }; // We will fix TwoPointCorridor later - //break; - case "TwoPointArrow": - return { - type: "LineString", - coordinates: parseTwoPointArrow(location) - }; - //break; - case "TwoPointCorridor": - return { - type: "TwoPointCorridor", - coordinates: parseTwoPointCorridor(location) - }; // We will fix TwoPointCorridor later - //break; - case "TwoPointLine": - return { type: "LineString", coordinates: parseTwoPointLine(location) }; - //break; - default: - console.warn( - "SitaWare Layer File: TODO parse location type " + locationType - ); - } - } - - function parseSymbols(symbols) { - var features = []; - for (var i in symbols.childNodes) { - if (symbols.childNodes[i].nodeName == "Symbol") { - var symbol = symbols.childNodes[i]; - var symbolType = symbol.getAttribute("xsi:type"); - var feature = { type: "Feature", properties: {} }; - - if ( - [ - "Aviation", - "BattlePosition", - "BoundaryLine", - "Equipment", - "GenericShape", - "Incident", - "Installation", - "Minefield", - "TacticalGraphic", - "TextArea", - "Unit" - ].indexOf(symbolType) != -1 - ) { - for (var j in symbol.childNodes) { - var nodeName = symbol.childNodes[j].nodeName; - if (typeof nodeName === "undefined") continue; - switch (nodeName) { - case "Location": - feature.geometry = parseLocation(symbol.childNodes[j]); - if (feature.geometry && feature.geometry.type == "Corridor") { - var points = feature.geometry.coordinates; - feature.properties.distance = points[points.length - 1]; - points.pop(); - feature.geometry = { - type: "LineString", - coordinates: points - }; - } - if (feature.geometry && feature.geometry.type == "Rectangle") { - points = feature.geometry.coordinates; - feature.properties.distance = points[points.length - 1]; - points.pop(); - feature.geometry = { - type: "LineString", - coordinates: points - }; - } - if ( - feature.geometry && - feature.geometry.type == "TwoPointCorridor" - ) { - //TODO make sure that we are drawing this in the right direction - points = feature.geometry.coordinates; - var coordinates = [points[0], points[1]]; - var width = points[2]; - var bearing = ms.geometry.bearingBetween( - points[1], - points[0] - ); - coordinates.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.5), - width / 2, - bearing - 90 - ) - ); - //coordinates.push( ms.geometry.toDistanceBearing(points[1],width/2,bearing-90)); - //coordinates.push(points[0]); - - feature.geometry = { - type: "LineString", - coordinates: coordinates - }; - } - break; - case "SymbolCode": - feature.properties.SymbolCode = parseSIDC(symbol.childNodes[j]); - break; - case "#text": - break; - default: - feature.properties[nodeName] = symbol.childNodes[j].textContent; - } - } - if (typeof feature.geometry !== "undefined") { - features.push(feature); - } - } else { - console.warn( - "SitaWare Layer File: TODO parse symbol type " + symbolType - ); - } - } - } - return features; - } - - function parseLayer(layer) { - var features = []; - for (var i in layer.childNodes) { - if (layer.childNodes[i].nodeName == "Name") { - //console.log('LAYER: ' + layer.childNodes[i].textContent); - } - if (layer.childNodes[i].nodeName == "Symbols") { - //console.log(parseSymbols( layer.childNodes[i] )) - features = features.concat(parseSymbols(layer.childNodes[i])); - } - } - return features; - } - - if (typeof xml == "string") { - xml = new DOMParser().parseFromString(xml, "text/xml"); - } - - var layers = xml.getElementsByTagName("Layer"); // For SLF files - for (var lyr in layers) { - features = features.concat(parseLayer(layers[lyr])); - } - layers = xml.getElementsByTagName("Overlay"); // For SPF files - for (lyr in layers) { - features = features.concat(parseLayer(layers[lyr])); - } - - // Fix circles - for (var f in features) { - var sidc = features[f].properties.SymbolCode; - var genericSIDC = - sidc.substr(0, 1) + "-" + sidc.substr(2, 1) + "-" + sidc.substr(4, 6); - if ( - [ - "G-F-ATC---", - "G-F-ACSC--", - "G-F-ACAC--", - "G-F-ACFC--", - "G-F-ACNC--", - "G-F-ACRC--", - "G-F-ACPC--", - "G-F-AZIC--", - "G-F-AZXC--", - "G-F-AZSC--", - "G-F-AZCC--", - "G-F-AZDC--", - "G-F-AZFC--", - "G-F-AZZC--", - "G-F-AZBC--", - "G-F-AZVC--", - "X---I-----" - ].indexOf(genericSIDC) != -1 - ) { - var points = features[f].geometry.coordinates; - features[f].properties.distance = ms.geometry.distanceBetween( - points[0], - points[1] - ); - features[f].geometry = { type: "Point", coordinates: points[0] }; - } - } - - var rawGeoJSON = { type: "FeatureCollection", features: features }; - return ms.format.GeoJSON(rawGeoJSON, { - Aliases: "commonIdentifier", - Name: "uniqueDesignation", - StaffComments: "staffComments", - SymbolCode: "sidc", - Timestamp: "dtg" - }); -} - -if (true) { - module.exports = SLF; -} - - -/***/ }), -/* 17 */ -/***/ (function(module, exports) { - -// Calculates the bearing between two points in meter -function bearingBetween(p1, p2) { - var l1 = p1[0] * (Math.PI / 180); - var l2 = p2[0] * (Math.PI / 180); - var f1 = p1[1] * (Math.PI / 180); - var f2 = p2[1] * (Math.PI / 180); - var y = Math.sin(l2 - l1) * Math.cos(f2); - var x = - Math.cos(f1) * Math.sin(f2) - - Math.sin(f1) * Math.cos(f2) * Math.cos(l2 - l1); - return Math.atan2(y, x) / (Math.PI / 180); -} - -module.exports = bearingBetween; - - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a circle withe a radius in meters -module.exports = function(feature) { - var p = feature.geometry.coordinates; - var r = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; - for (var direction = 360; direction >= 0; direction -= 5) { - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(p, r, direction) - ); - } - return { geometry: geometry }; -}; - - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -module.exports = function(feature) { - var annotation = {}; - var geometry; - annotation.geometry = { type: "Point" }; - - switch (feature.geometry.type) { - case "Point": - geometry = ms.geometry.circle(feature).geometry; - annotation.geometry.coordinates = feature.geometry.coordinates; - break; - case "LineString": - geometry = ms.geometry.rectangle(feature).geometry; - annotation.geometry.coordinates = ms.geometry.pointBetween( - feature.geometry.coordinates[0], - feature.geometry.coordinates[1], - 0.5 - ); - break; - case "Polygon": - geometry = { type: feature.geometry.type }; - geometry.coordinates = feature.geometry.coordinates; - // add annotation geometry - break; - default: - console.warn("Invalid feature type in SIDC: " + feature.properties.sidc); - } - - return { annotation: annotation, geometry: geometry }; -}; - - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a corridor with a widht in meters -function corridor(feature) { - var direction; - var points = feature.geometry.coordinates; - var width = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); - for (var j = 1; j < points.length - 1; j++) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - width / 2 * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 180) % - 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction - 90 - ) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction + 90 - ) - ); - - for (j = points.length - 2; j > 0; j--) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - -(width / 2) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); //Close line - return { geometry: geometry }; -} - -module.exports = corridor; - - -/***/ }), -/* 21 */ -/***/ (function(module, exports) { - -// Calculates the great circle distance between two points in meter -function distanceBetween(p1, p2) { - var lng1 = p1[0]; - var lng2 = p2[0]; - var lat1 = p1[1]; - var lat2 = p2[1]; - - var latRad1 = lat1 * (Math.PI / 180); - var latRad2 = lat2 * (Math.PI / 180); - var deltaLat = (lat2 - lat1) * (Math.PI / 180); - var delataLng = (lng2 - lng1) * (Math.PI / 180); - - var a = - Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + - Math.cos(latRad1) * - Math.cos(latRad2) * - Math.sin(delataLng / 2) * - Math.sin(delataLng / 2); - var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - return (6371e3 * c).toFixed(1); // we don't expect more precision than this... -} - -module.exports = distanceBetween; - - -/***/ }), -/* 22 */ -/***/ (function(module, exports) { - -// Calculates a point between two other points at any fractional distance f between them -function pointBetween(p1, p2, f) { - var lng1 = p1[0]; - var lng2 = p2[0]; - var lat1 = p1[1]; - var lat2 = p2[1]; - - var lngRad1 = lng1 * (Math.PI / 180); - var lngRad2 = lng2 * (Math.PI / 180); - var latRad1 = lat1 * (Math.PI / 180); - var latRad2 = lat2 * (Math.PI / 180); - - var deltaLat = (lat2 - lat1) * (Math.PI / 180); - var delataLng = (lng2 - lng1) * (Math.PI / 180); - var a = - Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + - Math.cos(latRad1) * - Math.cos(latRad2) * - Math.sin(delataLng / 2) * - Math.sin(delataLng / 2); - var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // Angular distance - - var A = Math.sin((1 - f) * c) / Math.sin(c); - var B = Math.sin(f * c) / Math.sin(c); - - var x = - A * Math.cos(latRad1) * Math.cos(lngRad1) + - B * Math.cos(latRad2) * Math.cos(lngRad2); - var y = - A * Math.cos(latRad1) * Math.sin(lngRad1) + - B * Math.cos(latRad2) * Math.sin(lngRad2); - var z = A * Math.sin(latRad1) + B * Math.sin(latRad2); - - var lng3 = Math.atan2(y, x) / (Math.PI / 180); - var lat3 = - (Math.atan2(z, Math.sqrt(x * x + y * y)) / (Math.PI / 180) + 540) % 360 - - 180; - - return [lng3, lat3]; -} - -module.exports = pointBetween; - - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws rectangle from input feature -module.exports = function(feature) { - // A rectangle is just a two point corridor - return ms.geometry.corridor(feature); -}; - - -/***/ }), -/* 24 */ -/***/ (function(module, exports) { - -// Calculates the bearing between two points in meter -function toDistanceBearing(point, dist, bearing) { - var angularDist = dist / 6371e3; - bearing = bearing * (Math.PI / 180); - var lng = point[0] * (Math.PI / 180); - var lat = point[1] * (Math.PI / 180); - var lat2 = Math.asin( - Math.sin(lat) * Math.cos(angularDist) + - Math.cos(lat) * Math.sin(angularDist) * Math.cos(bearing) - ); - var lng2 = - lng + - Math.atan2( - Math.sin(bearing) * Math.sin(angularDist) * Math.cos(lat), - Math.cos(angularDist) - Math.sin(lat) * Math.sin(lat2) - ); - lat2 = lat2 / (Math.PI / 180); - lng2 = (lng2 / (Math.PI / 180) + 540) % 360 - 180; - return [lng2, lat2]; -} - -module.exports = toDistanceBearing; - - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a NAI -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ACA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.altitudeDepth) - annotations[0].properties.text += - "\nMIN ALT: " + feature.properties.altitudeDepth; - if (feature.properties.altitudeDepth1) - annotations[0].properties.text += - "\nMAX ALT: " + feature.properties.altitudeDepth1; - if (feature.properties.additionalInformation1) - annotations[0].properties.text += - "\nGrids " + feature.properties.additionalInformation1; - if (feature.properties.dtg) - annotations[0].properties.text += "\nEFF: " + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n- " + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function block(feature) { - var geom; - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; - - var midpoint = ms.geometry.pointBetween(points[1], points[2], 0.5); - var bearing1 = (ms.geometry.bearingBetween(points[1], points[2]) + 360) % 360; - var bearing2 = (ms.geometry.bearingBetween(points[1], points[0]) + 360) % 360; - - var distance = - Math.sin((bearing1 - bearing2) * (Math.PI / 180)) * - ms.geometry.distanceBetween(points[0], points[1]); - if (distance < 0) { - // Wrong order in input - points = [points[0], points[2], points[1]]; - bearing1 = (ms.geometry.bearingBetween(points[1], points[2]) + 360) % 360; - bearing2 = (ms.geometry.bearingBetween(points[1], points[0]) + 360) % 360; - distance = -distance; - } - var rotationpoint = ms.geometry.toDistanceBearing( - midpoint, - distance, - bearing1 + 90 - ); - var radius = ms.geometry.distanceBetween(rotationpoint, points[1]); - var b1 = (ms.geometry.bearingBetween(rotationpoint, points[1]) + 360) % 360; - var b2 = (ms.geometry.bearingBetween(rotationpoint, points[2]) + 360) % 360; - if (b1 > b2) { - b2 = b2 + 360; - } - var midAngle = (b1 + b2) / 2; - var tip = ms.geometry.toDistanceBearing( - rotationpoint, - distance * 2, - midAngle - ); - var b3 = (ms.geometry.bearingBetween(tip, rotationpoint) + 360) % 360; - - // Arc - geom = []; - geom.push(points[1]); - - for (var i = b1; i <= b2; i += 5) { - geom.push(ms.geometry.toDistanceBearing(rotationpoint, radius, i)); - } - geom.push(points[2]); - geometry.coordinates.push(geom); - - // Lines - var diff = (b2 - b1) / 7; - var p1, p2; - for (i = 1; i <= 6; i++) { - geom = []; - p1 = ms.geometry.toDistanceBearing(rotationpoint, radius, b1 + diff * i); - p2 = ms.geometry.toDistanceBearing(p1, distance * 0.3, b3); - geom.push(p1, p2); - geometry.coordinates.push(geom); - } - - // Arrow - geom = []; - geom.push(ms.geometry.toDistanceBearing(rotationpoint, radius, midAngle)); - geom.push( - ms.geometry.toDistanceBearing(rotationpoint, distance * 2, midAngle) - ); - geometry.coordinates.push(geom); - - // Arrow head - geom = []; - geom.push(ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 + 45)); - geom.push(tip); - geom.push(ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 - 45)); - geometry.coordinates.push(geom); - - return { geometry: geometry }; -} - -module.exports = block; - - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ATI ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - /*if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function block(feature) { - //var direction, width; - var annotations = [{}]; - var points = feature.geometry.coordinates; - - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; - - var geometry1 = []; - geometry1.push(points[0], points[1]); - - var geometry2 = []; - var midpoint = ms.geometry.pointBetween(points[0], points[1], 0.5); - geometry2.push(points[2], midpoint); - - geometry.coordinates = [geometry1, geometry2]; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - midpoint, - points[2], - 0.5 - ); - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = block; - - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function canalize(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45 + 180) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45 + 180) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = canalize; - - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function bypass(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 - 30) - ); - geom.push(points[0]); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 + 30) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 - 30) - ); - geom.push(points[1]); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 + 30) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = bypass; - - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CFF ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - /*if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function canalize(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45 + 180) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45 + 180) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "C"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = canalize; - - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CENSOR ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 34 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function clear(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0], points[1]]; - geometry.coordinates.push(geom); - - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "C"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - pMid, - geom[1], - 0.5 - ); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - pMid = ms.geometry.pointBetween(points[0], points[1], 0.2); - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - pMid = ms.geometry.pointBetween(points[0], points[1], 0.8); - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = clear; - - -/***/ }), -/* 35 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a corridor with a widht in meters -function corridor(feature) { - var direction; - var points = feature.geometry.coordinates; - var width = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); - for (var j = 1; j < points.length - 1; j++) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - width / 2 * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 180) % - 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction - 90 - ) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction + 90 - ) - ); - - for (j = points.length - 2; j > 0; j--) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - -(width / 2) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); //Close line - return { geometry: geometry }; -} - -module.exports = corridor; - - -/***/ }), -/* 36 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a circle withe a radius in meters -function cover(feature) { - var p = feature.geometry.coordinates; - var scale = Math.max( - ms.geometry.distanceBetween(p[0], p[1]), - ms.geometry.distanceBetween(p[0], p[2]) - ); - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; - - var geom = []; - var pMid = ms.geometry.pointBetween(p[0], p[1], 0.5); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); - geom.push(p[0]); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)) - ); - var pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); - geom.push(pMid2); - geom.push(p[1]); - geometry.coordinates.push(geom); - - geom = []; - bearing = ms.geometry.bearingBetween(p[1], pMid2); - geom.push(ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing - 45)); - geom.push(p[1]); - geom.push(ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing + 45)); - geometry.coordinates.push(geom); - - geom = []; - pMid = ms.geometry.pointBetween(p[0], p[2], 0.5); - bearing = ms.geometry.bearingBetween(p[0], p[2]); - geom.push(p[0]); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)) - ); - pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); - geom.push(pMid2); - geom.push(p[2]); - geometry.coordinates.push(geom); - - geom = []; - bearing = ms.geometry.bearingBetween(p[2], pMid2); - geom.push(ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing - 45)); - geom.push(p[2]); - geom.push(ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing + 45)); - geometry.coordinates.push(geom); - - return { geometry: geometry }; -} - -module.exports = cover; - - -/***/ }), -/* 37 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CF ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 38 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "DA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 39 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function delay(feature) { - var annotations = [{}]; - var directionFactor = -1; - var points = feature.geometry.coordinates; - - var width = ms.geometry.distanceBetween(points[1], points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - var geometry = { type: "MultiLineString" }; - - geometry.coordinates = []; - - var geometry1 = []; - geometry1.push(points[0]); - geometry1.push(points[1]); - //console.log('arrow bearing ' + bearing) - //console.log('fjomp bearing ' + ms.geometry.bearingBetween(points[1],points[2])) - - var midpoint = ms.geometry.pointBetween(points[1], points[2], 0.5); - var curveBearing = ms.geometry.bearingBetween(points[1], points[2]); - if (curveBearing < 0 && bearing < 0) directionFactor = 1; // OK - //if (curveBearing > 0 && bearing < 0)directionFactor = -1; // OK - //if (curveBearing < 0 && bearing > 0)directionFactor = -1; // OK - //if (curveBearing > 0 && bearing > 0)directionFactor = -1; // OK - //var directionFactor = (Math.abs(curveBearing)/curveBearing)*(Math.abs(bearing)/bearing); - - for (var i = 10; i < 180; i += 10) { - geometry1.push( - ms.geometry.toDistanceBearing( - midpoint, - width / 2, - curveBearing + i * directionFactor + 180 - ) - ); - } - - geometry1.push(points[2]); - - var geometry2 = []; - geometry2.push( - ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing + 45) - ); - geometry2.push(points[0]); - geometry2.push( - ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing - 45) - ); - - geometry.coordinates = [geometry1, geometry2]; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = feature.properties.dtg - ? feature.properties.dtg + "\n" - : ""; - annotations[0].properties.text += "D"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - points[0], - points[1], - 0.5 - ); - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = delay; - - -/***/ }), -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = - "FSA " + (feature.properties.uniqueDesignation || ""); - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -function fix(feature) { - //var direction, width; - var points = feature.geometry.coordinates; - - var length = ms.geometry.distanceBetween(points[0], points[1]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - var widht = length * 0.10; - - var geometry = { type: "MultiLineString" }; - - geometry.coordinates = []; - - var geometry1 = []; - - geometry1.push(points[0]); - - geometry1.push(ms.geometry.pointBetween(points[0], points[1], 0.2)); - - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.25), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.3), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.35), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.4), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.45), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.5), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.55), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.6), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.65), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.7), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.75), - widht, - bearing + 90 - ) - ); - - geometry1.push(ms.geometry.pointBetween(points[0], points[1], 0.8)); - - geometry1.push(points[1]); - - var geometry2 = []; - geometry2.push( - ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing + 45) - ); - geometry2.push(points[0]); - geometry2.push( - ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing - 45) - ); - - geometry.coordinates = [geometry1, geometry2]; - return { geometry: geometry }; -} - -module.exports = fix; - - -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "FFA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 43 */ -/***/ (function(module, exports) { - -// Draws a circle withe a radius in meters -function guard(feature) {} - -module.exports = guard; - - -/***/ }), -/* 44 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a circle withe a radius in meters -function isolate(feature) { - var p = feature.geometry.coordinates; - var r = ms.geometry.distanceBetween(p[0], p[1]); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); - - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; - for (var d = 0; d <= 340; d += 5) { - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(p[0], r, d + bearing) - ); - } - - for (d = 20; d <= 320; d += 40) { - var geom = []; - geom.push(ms.geometry.toDistanceBearing(p[0], r, d + bearing)); - geom.push(ms.geometry.toDistanceBearing(p[0], r * 0.7, 10 + d + bearing)); - geom.push(ms.geometry.toDistanceBearing(p[0], r, 20 + d + bearing)); - geometry.coordinates.push(geom); - } - - geom = []; - var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) - ); - geometry.coordinates.push(geom); - - return { geometry: geometry }; -} - -module.exports = isolate; - - -/***/ }), -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a corridor with a widht in meters -function mainAttack(feature) { - var direction, width; - var points = feature.geometry.coordinates; - var arrowHead = points.pop(); - var widthHeadRatio = 0.7; - - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; - - var geometry1 = []; - var geometry2 = []; - - // Width of the arrow - direction = ms.geometry.bearingBetween(points[0], points[1]); - var deltaDirection = - direction - ms.geometry.bearingBetween(points[0], arrowHead); - //console.log(deltaDirection) - var distance = ms.geometry.distanceBetween(points[0], arrowHead); - var arrowHead2 = ms.geometry.toDistanceBearing( - points[0], - distance, - direction + deltaDirection - ); - width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction - 90 - ) - ); - - for (var j = points.length - 2; j > 0; j--) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - width * widthHeadRatio * factor, - (direction1 + direction2) / 2 - ) - ); - } - - // Arrowhead - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry1.push(arrowHead); - geometry1.push(points[0]); - geometry1.push(arrowHead2); - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); - - geometry2.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry2.push( - ms.geometry.toDistanceBearing( - points[0], - width * - (1 - widthHeadRatio) * - Math.abs(1 / Math.tan(deltaDirection * (Math.PI / 180))), - direction - 180 - ) - ); - geometry2.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); - - for (j = 1; j < points.length - 1; j++) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - -(width * widthHeadRatio) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction + 90 - ) - ); - - geometry.coordinates = [geometry1, geometry2]; - return { geometry: geometry }; -} - -module.exports = mainAttack; - - -/***/ }), -/* 46 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a NAI -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "NAI"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 47 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a circle withe a radius in meters -function occupy(feature) { - var p = feature.geometry.coordinates; - var r = ms.geometry.distanceBetween(p[0], p[1]); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); - - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; - for (var d = 0; d <= 340; d += 5) { - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(p[0], r, d + bearing) - ); - } - - var geom = []; - var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) - ); - geometry.coordinates.push(geom); - - geom = []; - pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) - 45) - ); - geometry.coordinates.push(geom); - - return { geometry: geometry }; -} - -module.exports = occupy; - - -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "RFA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 49 */ -/***/ (function(module, exports) { - -// Draws a circle withe a radius in meters -function searchArea(feature) {} - -module.exports = searchArea; - - -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "SENSOR ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 51 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); -// Draws a corridor with a widht in meters -function supportingAttack(feature) { - var direction, width; - var points = feature.geometry.coordinates; - var arrowHead = points.pop(); - var widthHeadRatio = 0.7; - - var geometry = { type: "LineString" }; - geometry.coordinates = []; - - var geometry1 = []; - - // Width of the arrow - direction = ms.geometry.bearingBetween(points[0], points[1]); - var deltaDirection = - direction - ms.geometry.bearingBetween(points[0], arrowHead); - //console.log(deltaDirection) - var distance = ms.geometry.distanceBetween(points[0], arrowHead); - var arrowHead2 = ms.geometry.toDistanceBearing( - points[0], - distance, - direction + deltaDirection - ); - width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction - 90 - ) - ); - - for (var j = points.length - 2; j > 0; j--) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - width * widthHeadRatio * factor, - (direction1 + direction2) / 2 - ) - ); - } - - // Arrowhead - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry1.push(arrowHead); - geometry1.push(points[0]); - geometry1.push(arrowHead2); - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); - - for (j = 1; j < points.length - 1; j++) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); - geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - -(width * widthHeadRatio) * factor, - (direction1 + direction2) / 2 - ) - ); - } - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction + 90 - ) - ); - - geometry.coordinates = geometry1; - return { geometry: geometry }; -} - -module.exports = supportingAttack; - - -/***/ }), -/* 52 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TBA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 53 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TVAR"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 54 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a NAI -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TAI"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TGMF"; - /*if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 56 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -// Draws a Fire Support Area -module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ZOR"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } - - return { geometry: geometry, annotations: annotations }; -}; - - -/***/ }), -/* 57 */ -/***/ (function(module, exports, __webpack_require__) { - -var ms = __webpack_require__(0); - -module.exports = function() { - var properties = { - // "activity" : false, //Is it an Activity - affiliation: "", //Affiliation it is shown as (Friend/Hostile...) - // "baseAffilation" : "", //Affiliation it belongs to (Friend/Hostile...) - // "baseDimension" : "", //Dimension it belongs to (Air/Ground...) - // "baseGeometry" : {g:"",bbox:{}}, //Geometry is a combination of dimension and affiliation (AirFriend/GroundHostile...) - // "civilian" : false, //Is it Civilian - // "condition" : "", //What condition is it in - context: "", //Context of the symbol (Reality/Exercise...) - dimension: "", //Dimension it is shown as (Air/Ground...) - dimensionUnknown: false, //Is the dimension unknown - echelon: "", //What echelon (Platoon/Company...) - faker: false, //Is it a Faker - fenintDummy: false, //Is it a feint/dummy - // "fill" : this.fill, //Standard says it should be filled - // "frame" : this.frame, //Standard says it should be framed - functionid: "", //Part of SIDC referring to the icon. - // "headquarters" : false, //Is it a Headquarters - // "installation" : false, //Is it an Instalation - joker: false, //Is it a Joker - // "mobility" : "", //What mobility (Tracked/Sled) - notpresent: "", //Is it Anticipated or Pending - numberSIDC: false, //Is the SIDC number based - // "space" : false, //Is it in Space - // "taskForce" : false //Is it a task force - graphic: false - }; - var mapping = {}; - mapping.context = ["Reality", "Exercise", "Simulation"]; - mapping.status = [ - "Present", - "Planned", - "FullyCapable", - "Damaged", - "Destroyed", - "FullToCapacity" - ]; - mapping.affiliation = ["Hostile", "Friend", "Neutral", "Unknown"]; - mapping.dimension = ["Air", "Ground", "Sea", "Subsurface"]; - - properties.context = mapping.context[0]; - - if (this.monoColor != "") { - properties.fill = false; - } - this.SIDC = String(this.SIDC).replace(/\*/g, "-").replace(/ /g, ""); - - properties.numberSIDC = !isNaN(this.SIDC); - if (properties.numberSIDC) { - //This is for new number based SIDCs - - if (typeof ms._getNumberProperties === "function") { - properties = ms._getNumberPropertiesGraphic.call( - this, - properties, - mapping - ); - } else { - console.warn( - "ms._getNumberPropertiesGraphic() is not present, you will need to load functionality for letter based SIDCs" - ); - } - } else { - //This would be old letter based SIDCs - - if (typeof ms._getLetterProperties === "function") { - properties = ms._getLetterPropertiesGraphic.call( - this, - properties, - mapping - ); - } else { - console.warn( - "ms._getLetterPropertiesGraphic() is not present, you will need to load functionality for letter based SIDCs" - ); - } - } - - return properties; -}; - - -/***/ }), -/* 58 */ -/***/ (function(module, exports) { - -function asCesium() { - var ratio = window.devicePixelRatio || 1; - var entities = new Cesium.EntityCollection(); - - for (var i = 0; i < this.data.features.length; i++) { - var feature = this.data.features[i]; - - if (feature.geometry.type == "Point") { - console.info("point"); - var properties = feature.properties; - if (properties.sidc.charAt(0) != "X") { - //TODO handle sitaware custom graphics - var milsymbol = feature.symbol; - var ctx = milsymbol.asCanvas(ratio); - var entity = { - position: Cesium.Cartesian3.fromDegrees( - feature.geometry.coordinates[0], - feature.geometry.coordinates[1] - ), //Cesium.Cartesian3.fromArray( feature.geometry.coordinates ), - billboard: { - horizontalOrigin: Cesium.HorizontalOrigin.LEFT, // default - verticalOrigin: Cesium.VerticalOrigin.TOP, - image: ctx, - imageSubRegion: new Cesium.BoundingRectangle( - 0, - 0, - ctx.width + 2, - ctx.height + 2 - ), - height: milsymbol.getSize().height, - width: milsymbol.getSize().width, - pixelOffset: new Cesium.Cartesian2( - -milsymbol.getAnchor().x, - -milsymbol.getAnchor().y - ) // default: (0, 0) - } - }; - entities.add(entity); - } - } - - if ( - feature.graphic.isConverted() && - (feature.geometry.type == "LineString" || - feature.geometry.type == "MultiLineString") - ) { - //console.log('line') - var lineparts; - if (feature.geometry.type == "LineString") { - lineparts = [feature.geometry.coordinates]; // Make linestring to a sort of multiline - } else { - lineparts = feature.geometry.coordinates; - } - - for (var key in lineparts) { - var coordinates = lineparts[key]; - var positions = []; - for (var c in coordinates) { - positions.push( - Cesium.Cartesian3.fromDegrees( - coordinates[c][0], - coordinates[c][1], - coordinates[c][2] - ) - ); - } - - entity = new Cesium.Entity({ - polyline: new Cesium.PolylineGraphics({ - positions: positions, - material: Cesium.Color.BLACK, - width: 1.5 - }) - }); - - entities.add(entity); - } - } - - if (feature.graphic.isConverted() && feature.geometry.type == "Polygon") { - coordinates = feature.geometry.coordinates[0]; - positions = []; - for (c in coordinates) { - positions.push( - Cesium.Cartesian3.fromDegrees( - coordinates[c][0], - coordinates[c][1], - coordinates[c][2] - ) - ); - } - - /*var entity = new Cesium.Entity({ - polygon: new Cesium.PolygonGraphics({ - hierarchy: new Cesium.PolygonHierarchy(positions), - fill: false, - outline: true, - outlineColor: Cesium.Color.BLACK, - outlineWidth: 3 - }) - });*/ - - entity = new Cesium.Entity({ - polyline: new Cesium.PolylineGraphics({ - positions: positions, - material: Cesium.Color.BLACK, - width: 1.5 - }) - }); - - entities.add(entity); - } - } - - return entities; -} - -module.exports = asCesium; - - -/***/ }), -/* 59 */ -/***/ (function(module, exports) { - -function asOpenLayers(crs) { - crs = crs || "EPSG:3857"; - //var ua = window.navigator.userAgent; - //var isIE = ( ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0) ? true : false; - var ratio = window.devicePixelRatio || 1; - var geoJSON = new ol.format.GeoJSON(); - var features = []; - - for (var i = 0; i < this.data.features.length; i++) { - var feature = this.data.features[i]; - var olFeature = geoJSON.readFeature(feature, { - featureProjection: ol.proj.get(crs) - }); - - if ( - olFeature.getGeometry() && - olFeature.getGeometry().getType() == "Point" - ) { - var properties = olFeature.getProperties(); - if (properties.sidc.charAt(0) != "X") { - //TODO handle sitaware custom graphics - var milsymbol = this.data.features[i].symbol; - //var image = isIE ? mysymbol.asCanvas() : mysymbol.toDataURL(); - olFeature.setStyle( - new ol.style.Style({ - image: new ol.style.Icon({ - scale: 1 / ratio, - anchor: [ - milsymbol.getAnchor().x * ratio, - milsymbol.getAnchor().y * ratio - ], - anchorXUnits: "pixels", - anchorYUnits: "pixels", - imgSize: [ - Math.floor(milsymbol.getSize().width * ratio), - Math.floor(milsymbol.getSize().height * ratio) - ], - img: milsymbol.asCanvas(ratio) - }) - }) - ); - } - } - - if ( - feature.graphic.isConverted() && - (olFeature.getGeometry().getType() == "LineString" || - olFeature.getGeometry().getType() == "MultiLineString") - ) { - var styles = [ - new ol.style.Style({ - stroke: new ol.style.Stroke({ - lineCap: "butt", - color: "#000000", - width: 2 - }) - }) - ]; - if (feature.graphic.annotations) { - var labelgeom = geoJSON - .readFeature(feature.graphic.annotations[0].geometry, { - featureProjection: ol.proj.get(crs) - }) - .getGeometry(); - styles.push( - new ol.style.Style({ - text: new ol.style.Text({ - fill: new ol.style.Fill({ color: "black" }), - font: "bold 16px sans-serif", - stroke: new ol.style.Stroke({ - color: "rgb(239, 239, 239)", // off-white - width: 4 - }), - text: feature.graphic.annotations[0].properties.text - }), - geometry: labelgeom - }) - ); - } - olFeature.setStyle(styles); - } - - if ( - feature.graphic.isConverted() && - olFeature.getGeometry().getType() == "Polygon" - ) { - style = new ol.style.Style({ - stroke: new ol.style.Stroke({ - lineCap: "butt", - color: "#000000", - width: 2 - }), - fill: new ol.style.Fill({ color: "rgba(0,0,0,0)" }), - text: new ol.style.Text({ - fill: new ol.style.Fill({ color: "black" }), - font: "bold 16px sans-serif", - stroke: new ol.style.Stroke({ - color: "rgb(239, 239, 239)", // off-white - width: 4 - }), - text: feature.graphic.annotations - ? feature.graphic.annotations[0].properties.text - : "" - }) - }); - olFeature.setStyle(style); - } - - features.push(olFeature); - } - - return features; -} - -module.exports = asOpenLayers; - - -/***/ }), -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { - -/* *************************************************************************************** -Creating the base of milgraphics by importing milsymbol -*************************************************************************************** */ -var ms = __webpack_require__(0); - -ms.addSIDCgraphics = __webpack_require__(10); - -ms.format = __webpack_require__(1); -ms.geometry = __webpack_require__(2); -ms.geometryConverter = __webpack_require__(3); - -ms.Graphic = __webpack_require__(4); - -ms.GraphicsLayer = __webpack_require__(5); - -/* *************************************************************************************** -Letter based SIDC -*************************************************************************************** */ -ms._getLetterPropertiesGraphic = __webpack_require__(7); - -ms._getLetterSIDCgraphic = __webpack_require__(6); -ms.addSIDCgraphics(__webpack_require__(8), "letter"); -ms.addSIDCgraphics(__webpack_require__(9), "letter"); -/* *************************************************************************************** -Number based SIDC -*************************************************************************************** */ -ms._getNumberPropertiesGraphic = __webpack_require__(11); - -/* *************************************************************************************** -Export ms to the world -*************************************************************************************** */ -module.exports = ms; - - -/***/ }) -/******/ ]); -}); \ No newline at end of file +/*! For license information please see milgraphics.js.LICENSE.txt */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("milgraphics",[],e):"object"==typeof exports?exports.milgraphics=e():t.ms=t.ms?Object.assign(t.ms,e()):e()}(self,(function(){return(()=>{var t={8833:function(t){t.exports=function(){"use strict";var t={Black:{Civilian:"black",Friend:"black",Hostile:"black",Neutral:"black",Unknown:"black"},Dark:{Civilian:"rgb(80,0,80)",Friend:"rgb(0,107,140)",Hostile:"rgb(200,0,0)",Neutral:"rgb(0,160,0)",Unknown:"rgb(225,220,0)"},FrameColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},IconColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},Light:{Civilian:"rgb(255,161,255)",Friend:"rgb(128,224,255)",Hostile:"rgb(255,128,128)",Neutral:"rgb(170,255,170)",Unknown:"rgb(255,255,128)"},Medium:{Civilian:"rgb(128,0,128)",Friend:"rgb(0,168,220)",Hostile:"rgb(255,48,49)",Neutral:"rgb(0,226,110)",Unknown:"rgb(255,255,0)"},None:{Civilian:!1,Friend:!1,Hostile:!1,Neutral:!1,Unknown:!1},OffWhite:{Civilian:"rgb(239, 239, 239)",Friend:"rgb(239, 239, 239)",Hostile:"rgb(239, 239, 239)",Neutral:"rgb(239, 239, 239)",Unknown:"rgb(239, 239, 239)"},White:{Civilian:"white",Friend:"white",Hostile:"white",Neutral:"white",Unknown:"white"}};function e(t){var e,I=[],o=[],E=this.colors.frameColor[this.metadata.affiliation];if(!this.metadata.frame&&this.style.icon||void 0===this.metadata.baseGeometry.g.type)return{pre:I,post:o,bbox:this.metadata.baseGeometry.bbox};var i,n={type:this.metadata.baseGeometry.g.type};switch(n.type){case"path":n.d=this.metadata.baseGeometry.g.d;break;case"circle":n.cx=this.metadata.baseGeometry.g.cx,n.cy=this.metadata.baseGeometry.g.cy,n.r=this.metadata.baseGeometry.g.r}if(n.fill=this.colors.fillColor[this.metadata.affiliation],n.fillopacity=this.style.fillOpacity,n.stroke=E,n.strokewidth=10<=this.style.size?this.style.strokeWidth:10,this.style.frame&&0":18,"?":19,"@":30,A:22,B:22,C:22,D:22,E:21,F:19,G:24,H:22,I:9,J:17,K:22,L:19,M:25,N:22,O:24,P:21,Q:24,R:22,S:21,T:19,U:22,V:21,W:29,X:21,Y:21,Z:19,"[":10,"]":10,"^":18,_:17,"`":10,a:17,b:19,c:17,d:19,e:17,f:10,g:19,h:19,i:9,j:9,k:17,l:9,m:27,n:19,o:19,p:19,q:19,r:12,s:17,t:10,u:19,v:17,w:24,x:17,y:17,z:15,"{":12,"|":9,"}":12,"~":18},I=0,o=0;o=this.x2?t.x2:this.x2,this.y2=t.y2>=this.y2?t.y2:this.y2,this}}}var C={AirHostile:{g:{type:"path",d:"M 45,150 L45,70 100,20 155,70 155,150"},bbox:new A({x1:45,y1:20,x2:155,y2:150})},AirFriend:{g:{type:"path",d:"M 155,150 C 155,50 115,30 100,30 85,30 45,50 45,150"},bbox:new A({x1:45,y1:30,x2:155,y2:150})},AirNeutral:{g:{type:"path",d:"M 45,150 L 45,30,155,30,155,150"},bbox:new A({x1:45,y1:30,x2:155,y2:150})},AirUnknown:{g:{type:"path",d:"M 65,150 c -55,0 -50,-90 0,-90 0,-50 70,-50 70,0 50,0 55,90 0,90"},bbox:new A({x1:25,y1:20,x2:175,y2:150})},GroundHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new A({x1:28,y1:28,x2:172,y2:172})},GroundFriend:{g:{type:"path",d:"M25,50 l150,0 0,100 -150,0 z"},bbox:new A({x1:25,y1:50,x2:175,y2:150})},GroundNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new A({x1:45,y1:45,x2:155,y2:155})},GroundUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new A({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},LandDismountedIndividualHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new A({x1:28,y1:28,x2:172,y2:172})},LandDismountedIndividualFriend:{g:{type:"path",d:"m 100,45 55,25 0,60 -55,25 -55,-25 0,-60 z"},bbox:new A({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new A({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new A({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SeaHostile:{g:{type:"path",d:"M100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new A({x1:28,y1:28,x2:172,y2:172})},SeaFriend:{g:{type:"circle",cx:100,cy:100,r:60},bbox:new A({x1:40,y1:40,x2:160,y2:160})},SeaNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new A({x1:45,y1:45,x2:155,y2:155})},SeaUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new A({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SubsurfaceHostile:{g:{type:"path",d:"M45,50 L45,130 100,180 155,130 155,50"},bbox:new A({x1:45,y1:50,x2:155,y2:180})},SubsurfaceFriend:{g:{type:"path",d:"m 45,50 c 0,100 40,120 55,120 15,0 55,-20 55,-120"},bbox:new A({x1:45,y1:50,x2:155,y2:170})},SubsurfaceNeutral:{g:{type:"path",d:"M45,50 L45,170 155,170 155,50"},bbox:new A({x1:45,y1:50,x2:155,y2:170})},SubsurfaceUnknown:{g:{type:"path",d:"m 65,50 c -55,0 -50,90 0,90 0,50 70,50 70,0 50,0 55,-90 0,-90"},bbox:new A({x1:25,y1:50,x2:175,y2:180})},PositionMarker:{g:{type:"circle",cx:100,cy:100,r:15},bbox:new A({x1:85,y1:85,x2:115,y2:115})}},s=new function(){this._autoValidation=!1,this.version="2.0.0","object"==typeof console&&"object"!=typeof process&&console.info("milsymbol.js "+this.version+" - Copyright (c) 2018 M"+String.fromCharCode(229)+"ns Beckman http://www.spatialillusions.com")};function S(){this.bbox=new A,this.colors={},this.metadata={},this.octagonAnchor={x:50,y:50},this.options={},this.options.quantity="",this.options.reinforcedReduced="",this.options.staffComments="",this.options.additionalInformation="",this.options.evaluationRating="",this.options.combatEffectiveness="",this.options.signatureEquipment="",this.options.higherFormation="",this.options.hostile="",this.options.iffSif="",this.options.direction="",this.options.sigint="",this.options.uniqueDesignation="",this.options.type="",this.options.dtg="",this.options.altitudeDepth="",this.options.location="",this.options.speed="",this.options.speedLeader=0,this.options.specialHeadquarters="",this.options.country="",this.options.platformType="",this.options.equipmentTeardownTime="",this.options.commonIdentifier="",this.options.auxiliaryEquipmentIndicator="",this.options.headquartersElement="",this.options.installationComposition="",this.options.engagementBar="",this.options.engagementType="",this.options.guardedUnit="",this.options.specialDesignator="",this.style={},this.style.alternateMedal=!1,this.style.civilianColor=!0,this.style.colorMode="Light",this.style.fill=!0,this.style.fillOpacity=1,this.style.fontfamily="Arial",this.style.frame=!0,this.style.frameColor="",this.style.hqStaffLength=0,this.style.icon=!0,this.style.iconColor="",this.style.infoBackground="",this.style.infoBackgroundFrame="",this.style.infoColor="",this.style.infoFields=!0,this.style.infoSize=40,this.style.monoColor="",this.style.outlineColor="rgb(239, 239, 239)",this.style.outlineWidth=0,this.style.padding=0,this.style.simpleStatusModifier=!1,this.style.size=100,this.style.square=!1,this.style.standard="",this.style.strokeWidth=4,this.symbolAnchor={x:50,y:50},this.validIcon=!0,0';return t+=function t(e){for(var I="",o=0;o',E+='',E+=""),e[o].type){case"path":E+='/g,">")+"";break;case"translate":case"rotate":case"scale":E+=t.call(this,e[o].draw),E+=""}}I+=E}return I}.call(this,this.drawInstructions),t+="",this.XML=t},S.prototype.getAnchor=function(){return this.symbolAnchor},S.prototype.getColors=function(){var t="object"==typeof this.style.colorMode?this.style.colorMode:s.getColorMode(this.style.colorMode),e="object"==typeof this.style.frameColor?this.style.frameColor:s.getColorMode("FrameColor"),I="object"==typeof this.style.iconColor?this.style.iconColor:s.getColorMode("IconColor"),o=t,E=s.getColorMode("Black"),i=s.getColorMode("White"),n=s.getColorMode("OffWhite"),R=s.getColorMode("None");this.style.civilianColor&&this.metadata.civilian&&(t.Friend=t.Neutral=t.Unknown=t.Civilian,e.Friend=e.Neutral=e.Unknown=e.Civilian,I.Friend=I.Neutral=I.Unknown=I.Civilian),(this.metadata.joker||this.metadata.faker)&&(t.Friend=t.Hostile,e.Friend=e.Hostile,I.Friend=I.Hostile),""!=this.style.monoColor&&(e.Friend=e.Neutral=e.Hostile=e.Unknown=e.Civilian=this.style.monoColor,E=e,i=t=R);var r={fillColor:t,frameColor:e,iconColor:I,iconFillColor:o,none:R,black:E,white:i};return this.metadata.frame?r.frameColor="object"==typeof this.style.frameColor?this.style.frameColor:E:r.frameColor=R,this.metadata.fill?(r.fillColor=this.metadata.frame||!this.metadata.frame&&!this.style.icon?t:R,r.iconColor="object"==typeof this.style.iconColor?this.style.iconColor:E,r.iconFillColor=this.metadata.frame?n:t,r.white=n):(r.fillColor=R,r.frameColor=this.metadata.frame?e:R,r.iconColor=e,r.iconFillColor=R,this.metadata.frame||this.metadata.fill||this.style.icon||(r.frameColor=E,r.fillColor=E)),r},S.prototype.getOctagonAnchor=function(){return this.octagonAnchor},S.prototype.getMetadata=function(){var t={activity:!1,affiliation:"undefined",baseAffilation:"",baseDimension:"",baseGeometry:{g:"",bbox:{}},civilian:!1,condition:"",context:"",dimension:"undefined",dimensionUnknown:!1,echelon:"",faker:!1,fenintDummy:!1,fill:this.style.fill,frame:this.style.frame,functionid:"",headquarters:!1,installation:!1,joker:!1,mobility:"",notpresent:"",numberSIDC:!1,space:!1,STD2525:s._STD2525,taskForce:!1,unit:!1},e={context:["Reality","Exercise","Simulation"],status:["Present","Planned","FullyCapable","Damaged","Destroyed","FullToCapacity"],echelonMobility:{11:"Team/Crew",12:"Squad",13:"Section",14:"Platoon/detachment",15:"Company/battery/troop",16:"Battalion/squadron",17:"Regiment/group",18:"Brigade",21:"Division",22:"Corps/MEF",23:"Army",24:"Army Group/front",25:"Region/Theater",26:"Command",31:"Wheeled limited cross country",32:"Wheeled cross country",33:"Tracked",34:"Wheeled and tracked combination",35:"Towed",36:"Rail",37:"Pack animals",41:"Over snow (prime mover)",42:"Sled",51:"Barge",52:"Amphibious",61:"Short towed array",62:"Long towed Array",71:"Leader Individual",72:"Deputy Individual"},affiliation:["Hostile","Friend","Neutral","Unknown"],dimension:["Air","Ground","Sea","Subsurface"]};return t.context=e.context[0],this.style.standard&&(t.STD2525="APP6"!=this.style.standard),""!=this.style.monoColor&&(t.fill=!1),this.options.sidc=String(this.options.sidc).replace(/\*/g,"-").replace(/ /g,""),t.numberSIDC=!isNaN(this.options.sidc),t.numberSIDC?"function"==typeof s._getMetadata.number?t=s._getMetadata.number.call(this,s,t,e):console.warn("ms._getMetadata.number() is not present, you will need to load functionality for number based SIDCs"):"function"==typeof s._getMetadata.letter?t=s._getMetadata.letter.call(this,s,t,e):console.warn("ms._getMetadata.letter() is not present, you will need to load functionality for letter based SIDCs"),s._symbolGeometries.hasOwnProperty(t.dimension+t.affiliation)?t.baseGeometry=s._symbolGeometries[t.dimension+t.affiliation]:t.baseGeometry.bbox=new s.BBox,this.style.frame||this.style.icon||(t.baseGeometry=s._symbolGeometries.PositionMarker),t},S.prototype.getOptions=function(t){var e,I={};for(e in this.options)this.options.hasOwnProperty(e)&&(I[e]=this.options[e]);if(t||void 0===t)for(e in this.style)this.style.hasOwnProperty(e)&&(I[e]=this.style[e]);return I},S.prototype.getSize=function(){return void 0!==this.width&&void 0!==this.height||this.updateSymbol(),{width:this.width,height:this.height}},S.prototype.getStyle=function(){var t,e={};for(t in this.style)this.style.hasOwnProperty(t)&&(e[t]=this.style[t]);return e},S.prototype.isValid=function(t){var e=-1==JSON.stringify(this.drawInstructions).indexOf("null");return t?{affiliation:this.metadata.affiliation,dimension:this.metadata.dimension,dimensionUnknown:this.metadata.dimensionUnknown,drawInstructions:e,icon:this.validIcon,mobility:null!=this.metadata.mobility}:!("undefined"==this.metadata.affiliation||"undefined"==this.metadata.dimension&&!this.metadata.controlMeasure)&&e&&this.validIcon&&null!=this.metadata.mobility},S.prototype.setOptions=function(){var t;for(t=0;t{"use strict";I.d(e,{ZP:()=>G,v_:()=>O});var o=I(9520);var E,i=I(6369),n=I(5152),R=I(3002),r=(E=function(t,e){return(E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(t,e)},function(t,e){function I(){this.constructor=t}E(t,e),t.prototype=null===e?Object.create(e):(I.prototype=e.prototype,new I)});const A=function(t){function e(){var e=t.call(this)||this;return e.revision_=0,e}return r(e,t),e.prototype.changed=function(){++this.revision_,this.dispatchEvent(n.Z.CHANGE)},e.prototype.getRevision=function(){return this.revision_},e.prototype.on=function(t,e){if(Array.isArray(t)){for(var I=t.length,o=new Array(I),E=0;E{"use strict";function o(t,e,I){for(var o,i,n=I||E,R=0,r=t.length,A=!1;R>1)],e))<0?R=o+1:(r=o,A=!i);return A?R:~R}function E(t,e){return t>e?1:to,kK:()=>E,l7:()=>i,fS:()=>n})},9537:(t,e,I)=>{"use strict";I.d(e,{h:()=>R});var o,E=I(9179),i=(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(t,e)},function(t,e){function I(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(I.prototype=e.prototype,new I)});const n=function(t){function e(e){var I=this,o="Assertion failed. See https://openlayers.org/en/"+("latest"===E.q4?E.q4:"v"+E.q4.split("-")[0])+"/doc/errors/#"+e+" for details.";return(I=t.call(this,o)||this).code=e,I.name="AssertionError",I.message=o,I}return i(e,t),e}(Error);function R(t,e){if(!t)throw new n(e)}},3002:(t,e,I)=>{"use strict";I.d(e,{oL:()=>E,Vx:()=>i,bN:()=>n});var o=I(3580);function E(t,e,I,o,E){if(o&&o!==t&&(I=I.bind(o)),E){var i=I;I=function(){t.removeEventListener(e,I),i.apply(this,arguments)}}var n={target:t,type:e,listener:I};return t.addEventListener(e,I),n}function i(t,e,I,o){return E(t,e,I,o,!0)}function n(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),(0,o.ZH)(t))}},9520:(t,e,I)=>{"use strict";I.d(e,{ZP:()=>o});const o=function(){function t(t){this.propagationStopped,this.type=t,this.target=null}return t.prototype.preventDefault=function(){this.propagationStopped=!0},t.prototype.stopPropagation=function(){this.propagationStopped=!0},t}()},5152:(t,e,I)=>{"use strict";I.d(e,{Z:()=>o});const o={CHANGE:"change",ERROR:"error",BLUR:"blur",CLEAR:"clear",CONTEXTMENU:"contextmenu",CLICK:"click",DBLCLICK:"dblclick",DRAGENTER:"dragenter",DRAGOVER:"dragover",DROP:"drop",FOCUS:"focus",KEYDOWN:"keydown",KEYPRESS:"keypress",LOAD:"load",RESIZE:"resize",TOUCHMOVE:"touchmove",WHEEL:"wheel"}},6369:(t,e,I)=>{"use strict";I.d(e,{Z:()=>A});const o=function(){function t(){this.disposed=!1}return t.prototype.dispose=function(){this.disposed||(this.disposed=!0,this.disposeInternal())},t.prototype.disposeInternal=function(){},t}();var E,i=I(9520),n=I(4011),R=I(3580),r=(E=function(t,e){return(E=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(t,e)},function(t,e){function I(){this.constructor=t}E(t,e),t.prototype=null===e?Object.create(e):(I.prototype=e.prototype,new I)});const A=function(t){function e(e){var I=t.call(this)||this;return I.eventTarget_=e,I.pendingRemovals_=null,I.dispatching_=null,I.listeners_=null,I}return r(e,t),e.prototype.addEventListener=function(t,e){if(t&&e){var I=this.listeners_||(this.listeners_={}),o=I[t]||(I[t]=[]);-1===o.indexOf(e)&&o.push(e)}},e.prototype.dispatchEvent=function(t){var e="string"==typeof t?new i.ZP(t):t,I=e.type;e.target||(e.target=this.eventTarget_||this);var o,E=this.listeners_&&this.listeners_[I];if(E){var R=this.dispatching_||(this.dispatching_={}),r=this.pendingRemovals_||(this.pendingRemovals_={});I in R||(R[I]=0,r[I]=0),++R[I];for(var A=0,C=E.length;A0)},e.prototype.removeEventListener=function(t,e){var I=this.listeners_&&this.listeners_[t];if(I){var o=I.indexOf(e);-1!==o&&(this.pendingRemovals_&&t in this.pendingRemovals_?(I[o]=n.Zn,++this.pendingRemovals_[t]):(I.splice(o,1),0===I.length&&delete this.listeners_[t]))}},e}(o)},5832:(t,e,I)=>{"use strict";I.d(e,{qf:()=>o,r4:()=>E,jE:()=>i,lJ:()=>R,YN:()=>A,HK:()=>C,GN:()=>s,l7:()=>S,qP:()=>a,H6:()=>N,qg:()=>O,Cr:()=>G,kK:()=>l,I7:()=>c,EO:()=>M});function o(t,e,I){var o,E;return(o=eE&&(r|=4),Ri&&(r|=2),0===r&&(r=1),r}function R(){return[1/0,1/0,-1/0,-1/0]}function r(t,e,I,o,E){return E?(E[0]=t,E[1]=e,E[2]=I,E[3]=o,E):[t,e,I,o]}function A(t){return r(1/0,1/0,-1/0,-1/0,t)}function C(t,e){var I=t[0],o=t[1];return r(I,o,I,o,e)}function s(t,e,I,o,E){return a(A(E),t,e,I,o)}function S(t,e){return e[0]t[2]&&(t[2]=e[2]),e[1]t[3]&&(t[3]=e[3]),t}function a(t,e,I,o,E){for(;I=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function M(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t}function c(t,e,I){var o=!1,E=n(t,e),i=n(t,I);if(1===E||1===i)o=!0;else{var R=t[0],r=t[1],A=t[2],C=t[3],s=e[0],S=e[1],a=I[0],T=I[1],N=(T-S)/(a-s),O=void 0,G=void 0;2&i&&!(2&E)&&(o=(O=a-(T-C)/N)>=R&&O<=A),o||!(4&i)||4&E||(o=(G=T-(a-A)*N)>=r&&G<=C),o||!(8&i)||8&E||(o=(O=a-(T-r)/N)>=R&&O<=A),o||!(16&i)||16&E||(o=(G=T-(a-R)*N)>=r&&G<=C)}return o}},8653:(t,e,I)=>{"use strict";I.r(e),I.d(e,{default:()=>re});var o,E=I(4935),i=I(5152),n=I(9537),R=I(3002),r=(o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(t,e)},function(t,e){function I(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(I.prototype=e.prototype,new I)});const A=function(t){function e(e){var I=t.call(this)||this;if(I.id_=void 0,I.geometryName_="geometry",I.style_=null,I.styleFunction_=void 0,I.geometryChangeKey_=null,I.addEventListener((0,E.v_)(I.geometryName_),I.handleGeometryChanged_),e)if("function"==typeof e.getSimplifiedGeometry){var o=e;I.setGeometry(o)}else{var i=e;I.setProperties(i)}return I}return r(e,t),e.prototype.clone=function(){var t=new e(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());var I=this.getGeometry();I&&t.setGeometry(I.clone());var o=this.getStyle();return o&&t.setStyle(o),t},e.prototype.getGeometry=function(){return this.get(this.geometryName_)},e.prototype.getId=function(){return this.id_},e.prototype.getGeometryName=function(){return this.geometryName_},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.handleGeometryChange_=function(){this.changed()},e.prototype.handleGeometryChanged_=function(){this.geometryChangeKey_&&((0,R.bN)(this.geometryChangeKey_),this.geometryChangeKey_=null);var t=this.getGeometry();t&&(this.geometryChangeKey_=(0,R.oL)(t,i.Z.CHANGE,this.handleGeometryChange_,this)),this.changed()},e.prototype.setGeometry=function(t){this.set(this.geometryName_,t)},e.prototype.setStyle=function(t){this.style_=t,this.styleFunction_=t?function(t){return"function"==typeof t?t:(Array.isArray(t)?e=t:((0,n.h)("function"==typeof t.getZIndex,41),e=[t]),function(){return e});var e}(t):void 0,this.changed()},e.prototype.setId=function(t){this.id_=t,this.changed()},e.prototype.setGeometryName=function(t){this.removeEventListener((0,E.v_)(this.geometryName_),this.handleGeometryChanged_),this.geometryName_=t,this.addEventListener((0,E.v_)(this.geometryName_),this.handleGeometryChanged_),this.handleGeometryChanged_()},e}(E.ZP);var C={DEGREES:"degrees",FEET:"ft",METERS:"m",PIXELS:"pixels",TILE_PIXELS:"tile-pixels",USFEET:"us-ft"},s={};s[C.DEGREES]=2*Math.PI*6370997/360,s[C.FEET]=.3048,s[C.METERS]=1,s[C.USFEET]=1200/3937;const S=C;var a=I(9179);new Array(6);var T=I(5832);const N=function(){function t(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}return t.prototype.canWrapX=function(){return this.canWrapX_},t.prototype.getCode=function(){return this.code_},t.prototype.getExtent=function(){return this.extent_},t.prototype.getUnits=function(){return this.units_},t.prototype.getMetersPerUnit=function(){return this.metersPerUnit_||s[this.units_]},t.prototype.getWorldExtent=function(){return this.worldExtent_},t.prototype.getAxisOrientation=function(){return this.axisOrientation_},t.prototype.isGlobal=function(){return this.global_},t.prototype.setGlobal=function(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)},t.prototype.getDefaultTileGrid=function(){return this.defaultTileGrid_},t.prototype.setDefaultTileGrid=function(t){this.defaultTileGrid_=t},t.prototype.setExtent=function(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)},t.prototype.setWorldExtent=function(t){this.worldExtent_=t},t.prototype.setGetPointResolution=function(t){this.getPointResolutionFunc_=t},t.prototype.getPointResolutionFunc=function(){return this.getPointResolutionFunc_},t}();var O=I(1882),G=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}(),l=6378137,M=Math.PI*l,c=[-M,-M,M,M],h=[-180,-85,180,85],L=l*Math.log(Math.tan(Math.PI/2)),y=function(t){function e(e){return t.call(this,{code:e,units:S.METERS,extent:c,global:!0,worldExtent:h,getPointResolution:function(t,e){return t/(0,O.f9)(e[1]/l)}})||this}return G(e,t),e}(N),p=[new y("EPSG:3857"),new y("EPSG:102100"),new y("EPSG:102113"),new y("EPSG:900913"),new y("http://www.opengis.net/gml/srs/epsg.xml#3857")];var P,d,x,f=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}(),m=[-180,-90,180,90],U=6378137*Math.PI/180,D=function(t){function e(e,I){return t.call(this,{code:e,units:S.DEGREES,extent:m,axisOrientation:I,global:!0,metersPerUnit:U,worldExtent:m})||this}return f(e,t),e}(N),u=[new D("CRS:84"),new D("EPSG:4326","neu"),new D("urn:ogc:def:crs:OGC:1.3:CRS84"),new D("urn:ogc:def:crs:OGC:2:84"),new D("http://www.opengis.net/gml/srs/epsg.xml#4326","neu")],F={},g={};function z(t,e,I){var o=t.getCode(),E=e.getCode();o in g||(g[o]={}),g[o][E]=I}function H(t,e,I){var o;if(void 0!==e){for(var E=0,i=t.length;E1?I:2,i=e;void 0===i&&(i=E>2?t.slice():new Array(o));for(var n=0;nL?R=L:R<-L&&(R=-L),i[n+1]=R}return i},x=function(t,e,I){var o=t.length,E=I>1?I:2,i=e;void 0===i&&(i=E>2?t.slice():new Array(o));for(var n=0;n1)R=I;else{if(S>0){for(var a=0;aE&&(E=A),i=R,n=r}return E}function Gt(t,e,I,o,E){for(var i=0,n=I.length;i0;){for(var s=A.pop(),S=A.pop(),a=0,T=t[S],N=t[S+1],G=t[s],l=t[s+1],M=S+o;Ma&&(C=M,a=L)}a>E&&(r[(C-e)/o]=1,S+o0&&N>a)&&(T<0&&O0&&O>T)?(R=s,r=S):(i[n++]=R,i[n++]=r,A=R,C=r,R=s,r=S)}}return i[n++]=R,i[n++]=r,n}function Pt(t,e,I,o,E,i,n,R){for(var r=0,A=I.length;r1?n:2,h=i||new Array(c);for(T=0;T>1;Ei&&(A-R)*(i-r)-(E-R)*(C-r)>0&&n++:C<=i&&(A-R)*(i-r)-(E-R)*(C-r)<0&&n--,R=A,r=C}return 0!==n}function gt(t,e,I,o,E,i){if(0===I.length)return!1;if(!Ft(t,e,I[0],o,E,i))return!1;for(var n=1,R=I.length;n=E[0]&&i[2]<=E[2]||i[1]>=E[1]&&i[3]<=E[3]||xt(t,e,I,o,(function(t,e){return(0,T.I7)(E,t,e)})))}function Ht(t,e,I,o,E){if(!function(t,e,I,o,E){return!!(zt(t,e,I,o,E)||Ft(t,e,I,o,E[0],E[1])||Ft(t,e,I,o,E[0],E[3])||Ft(t,e,I,o,E[2],E[1])||Ft(t,e,I,o,E[2],E[3]))}(t,e,I[0],o,E))return!1;if(1===I.length)return!0;for(var i=1,n=I.length;ic&>(t,e,I,o,A=(C+s)/2,T)&&(M=A,c=h),C=s}return isNaN(M)&&(M=E[i]),n?(n.push(M,T,c),n):[M,T,c]}function qt(t,e,I,o){for(;e0}function jt(t,e,I,o,E){for(var i=void 0!==E&&E,n=0,R=I.length;n{"use strict";I.d(e,{Zn:()=>E,qe:()=>i});var o=I(9682);function E(){}function i(t){var e,I,E,i=!1;return function(){var n=Array.prototype.slice.call(arguments);return i&&this===E&&(0,o.fS)(n,I)||(i=!0,E=this,I=n,e=t.apply(this,arguments)),e}}},1882:(t,e,I)=>{"use strict";function o(t,e,I){return Math.min(Math.max(t,e),I)}I.d(e,{uZ:()=>o,f9:()=>E,rU:()=>i,bI:()=>n,t7:()=>R});var E="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function i(t,e,I,o,E,i){var R=E-I,r=i-o;if(0!==R||0!==r){var A=((t-I)*R+(e-o)*r)/(R*R+r*r);A>1?(I=E,o=i):A>0&&(I+=R*A,o+=r*A)}return n(t,e,I,o)}function n(t,e,I,o){var E=I-t,i=o-e;return E*E+i*i}function R(t,e,I){return t+I*(e-t)}"log2"in Math&&Math.log2},3580:(t,e,I)=>{"use strict";I.d(e,{f0:()=>o,ZH:()=>E,xb:()=>i});var o="function"==typeof Object.assign?Object.assign:function(t,e){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var I=Object(t),o=1,E=arguments.length;o{"use strict";I.r(e),I.d(e,{Circle:()=>D,Fill:()=>u,Icon:()=>j,IconImage:()=>q,Image:()=>i,RegularShape:()=>m,Stroke:()=>$,Style:()=>et,Text:()=>It});var o=I(9179);function E(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}const i=function(){function t(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=E(t.scale),this.displacement_=t.displacement}return t.prototype.clone=function(){var e=this.getScale();return new t({opacity:this.getOpacity(),scale:Array.isArray(e)?e.slice():e,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice()})},t.prototype.getOpacity=function(){return this.opacity_},t.prototype.getRotateWithView=function(){return this.rotateWithView_},t.prototype.getRotation=function(){return this.rotation_},t.prototype.getScale=function(){return this.scale_},t.prototype.getScaleArray=function(){return this.scaleArray_},t.prototype.getDisplacement=function(){return this.displacement_},t.prototype.getAnchor=function(){return(0,o.O3)()},t.prototype.getImage=function(t){return(0,o.O3)()},t.prototype.getHitDetectionImage=function(){return(0,o.O3)()},t.prototype.getPixelRatio=function(t){return 1},t.prototype.getImageState=function(){return(0,o.O3)()},t.prototype.getImageSize=function(){return(0,o.O3)()},t.prototype.getHitDetectionImageSize=function(){return(0,o.O3)()},t.prototype.getOrigin=function(){return(0,o.O3)()},t.prototype.getSize=function(){return(0,o.O3)()},t.prototype.setOpacity=function(t){this.opacity_=t},t.prototype.setRotateWithView=function(t){this.rotateWithView_=t},t.prototype.setRotation=function(t){this.rotation_=t},t.prototype.setScale=function(t){this.scale_=t,this.scaleArray_=E(t)},t.prototype.listenImageChange=function(t){(0,o.O3)()},t.prototype.load=function(){(0,o.O3)()},t.prototype.unlistenImageChange=function(t){(0,o.O3)()},t}();var n=I(9537),R=I(1882),r=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,A=/^([a-z]*)$|^hsla?\(.*\)$/i;function C(t){return"string"==typeof t?t:O(t)}var s,S,a=(s={},S=0,function(t){var e;if(s.hasOwnProperty(t))e=s[t];else{if(S>=1024){var I=0;for(var o in s)0==(3&I++)&&(delete s[o],--S)}e=function(t){var e,I,o,E,i;if(A.exec(t)&&(t=function(t){var e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);var I=getComputedStyle(e).color;return document.body.removeChild(e),I}return""}(t)),r.exec(t)){var R,C=t.length-1;R=C<=4?1:2;var s=4===C||8===C;e=parseInt(t.substr(1+0*R,R),16),I=parseInt(t.substr(1+1*R,R),16),o=parseInt(t.substr(1+2*R,R),16),E=s?parseInt(t.substr(1+3*R,R),16):255,1==R&&(e=(e<<4)+e,I=(I<<4)+I,o=(o<<4)+o,s&&(E=(E<<4)+E)),i=[e,I,o,E/255]}else 0==t.indexOf("rgba(")?N(i=t.slice(5,-1).split(",").map(Number)):0==t.indexOf("rgb(")?((i=t.slice(4,-1).split(",").map(Number)).push(1),N(i)):(0,n.h)(!1,14);return i}(t),s[t]=e,++S}return e});function T(t){return Array.isArray(t)?t:a(t)}function N(t){return t[0]=(0,R.uZ)(t[0]+.5|0,0,255),t[1]=(0,R.uZ)(t[1]+.5|0,0,255),t[2]=(0,R.uZ)(t[2]+.5|0,0,255),t[3]=(0,R.uZ)(t[3],0,1),t}function O(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var I=t[1];I!=(0|I)&&(I=I+.5|0);var o=t[2];return o!=(0|o)&&(o=o+.5|0),"rgba("+e+","+I+","+o+","+(void 0===t[3]?1:t[3])+")"}function G(t){return Array.isArray(t)?O(t):t}var l="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"",M=(l.indexOf("firefox"),-1!==l.indexOf("safari")&&l.indexOf("chrom"),-1!==l.indexOf("webkit")&&l.indexOf("edge"),l.indexOf("macintosh"),"undefined"!=typeof devicePixelRatio&&devicePixelRatio,"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope),c="undefined"!=typeof Image&&Image.prototype.decode;function h(t,e,I){var o=I&&I.length?I.shift():M?new OffscreenCanvas(t||300,e||300):document.createElement("canvas");return t&&(o.width=t),e&&(o.height=e),o.getContext("2d")}!function(){try{var t=Object.defineProperty({},"passive",{get:function(){!0}});window.addEventListener("_",null,t),window.removeEventListener("_",null,t)}catch(t){}}();var L=I(4935),y=I(6369),p=(I(3580),new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)","(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)","(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?","(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))","(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))","?\\s*([-,\\\"\\'\\sa-z]+?)\\s*$"].join(""),"i"),"#000"),P="round",d="round";new L.ZP;(new y.Z).setSize=function(){console.warn("labelCache is deprecated.")};var x,f=(x=function(t,e){return(x=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(t,e)},function(t,e){function I(){this.constructor=t}x(t,e),t.prototype=null===e?Object.create(e):(I.prototype=e.prototype,new I)});const m=function(t){function e(e){var I=this,o=void 0!==e.rotateWithView&&e.rotateWithView;return(I=t.call(this,{opacity:1,rotateWithView:o,rotation:void 0!==e.rotation?e.rotation:0,scale:void 0!==e.scale?e.scale:1,displacement:void 0!==e.displacement?e.displacement:[0,0]})||this).canvas_={},I.hitDetectionCanvas_=null,I.fill_=void 0!==e.fill?e.fill:null,I.origin_=[0,0],I.points_=e.points,I.radius_=void 0!==e.radius?e.radius:e.radius1,I.radius2_=e.radius2,I.angle_=void 0!==e.angle?e.angle:0,I.stroke_=void 0!==e.stroke?e.stroke:null,I.anchor_=null,I.size_=null,I.imageSize_=null,I.hitDetectionImageSize_=null,I.render(),I}return f(e,t),e.prototype.clone=function(){var t=this.getScale(),I=new e({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice()});return I.setOpacity(this.getOpacity()),I},e.prototype.getAnchor=function(){return this.anchor_},e.prototype.getAngle=function(){return this.angle_},e.prototype.getFill=function(){return this.fill_},e.prototype.getHitDetectionImage=function(){if(!this.hitDetectionCanvas_){var t=this.createRenderOptions();this.createHitDetectionCanvas_(t)}return this.hitDetectionCanvas_},e.prototype.getImage=function(t){if(!this.canvas_[t||1]){var e=this.createRenderOptions(),I=h(e.size*t||1,e.size*t||1);this.draw_(e,I,0,0,t||1),this.canvas_[t||1]=I.canvas}return this.canvas_[t||1]},e.prototype.getPixelRatio=function(t){return t},e.prototype.getImageSize=function(){return this.imageSize_},e.prototype.getHitDetectionImageSize=function(){return this.hitDetectionImageSize_},e.prototype.getImageState=function(){return 2},e.prototype.getOrigin=function(){return this.origin_},e.prototype.getPoints=function(){return this.points_},e.prototype.getRadius=function(){return this.radius_},e.prototype.getRadius2=function(){return this.radius2_},e.prototype.getSize=function(){return this.size_},e.prototype.getStroke=function(){return this.stroke_},e.prototype.listenImageChange=function(t){},e.prototype.load=function(){},e.prototype.unlistenImageChange=function(t){},e.prototype.createRenderOptions=function(){var t,e=P,I=d,o=0,E=null,i=0,n=0;return this.stroke_&&(null===(t=this.stroke_.getColor())&&(t="#000"),t=G(t),void 0===(n=this.stroke_.getWidth())&&(n=1),E=this.stroke_.getLineDash(),i=this.stroke_.getLineDashOffset(),void 0===(I=this.stroke_.getLineJoin())&&(I=d),void 0===(e=this.stroke_.getLineCap())&&(e=P),void 0===(o=this.stroke_.getMiterLimit())&&(o=10)),{strokeStyle:t,strokeWidth:n,size:2*(this.radius_+n)+1,lineCap:e,lineDash:E,lineDashOffset:i,lineJoin:I,miterLimit:o}},e.prototype.render=function(){var t=this.createRenderOptions(),e=h(t.size,t.size);this.draw_(t,e,0,0,1),this.canvas_={},this.canvas_[1]=e.canvas;var I=e.canvas.width,o=I,E=this.getDisplacement();this.hitDetectionImageSize_=[t.size,t.size],this.createHitDetectionCanvas_(t),this.anchor_=[I/2-E[0],I/2+E[1]],this.size_=[I,I],this.imageSize_=[o,o]},e.prototype.draw_=function(t,e,I,o,E){var i,n,R;e.setTransform(E,0,0,E,0,0),e.translate(I,o),e.beginPath();var r=this.points_;if(r===1/0)e.arc(t.size/2,t.size/2,this.radius_,0,2*Math.PI,!0);else{var A=void 0!==this.radius2_?this.radius2_:this.radius_;for(A!==this.radius_&&(r*=2),i=0;i<=r;i++)n=2*i*Math.PI/r-Math.PI/2+this.angle_,R=i%2==0?this.radius_:A,e.lineTo(t.size/2+R*Math.cos(n),t.size/2+R*Math.sin(n))}if(this.fill_){var C=this.fill_.getColor();null===C&&(C=p),e.fillStyle=G(C),e.fill()}this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,e.setLineDash&&t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke()),e.closePath()},e.prototype.createHitDetectionCanvas_=function(t){if(this.hitDetectionCanvas_=this.getImage(1),this.fill_){var e=this.fill_.getColor(),I=0;if("string"==typeof e&&(e=T(e)),null===e?I=1:Array.isArray(e)&&(I=4===e.length?e[3]:1),0===I){var o=h(t.size,t.size);this.hitDetectionCanvas_=o.canvas,this.drawHitDetectionCanvas_(t,o,0,0)}}},e.prototype.drawHitDetectionCanvas_=function(t,e,I,o){e.translate(I,o),e.beginPath();var E=this.points_;if(E===1/0)e.arc(t.size/2,t.size/2,this.radius_,0,2*Math.PI,!0);else{var i=void 0!==this.radius2_?this.radius2_:this.radius_;i!==this.radius_&&(E*=2);var n=void 0,R=void 0,r=void 0;for(n=0;n<=E;n++)r=2*n*Math.PI/E-Math.PI/2+this.angle_,R=n%2==0?this.radius_:i,e.lineTo(t.size/2+R*Math.cos(r),t.size/2+R*Math.sin(r))}e.fillStyle=p,e.fill(),this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.stroke()),e.closePath()},e}(i);var U=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}();const D=function(t){function e(e){var I=e||{};return t.call(this,{points:1/0,fill:I.fill,radius:I.radius,stroke:I.stroke,scale:void 0!==I.scale?I.scale:1,rotation:void 0!==I.rotation?I.rotation:0,rotateWithView:void 0!==I.rotateWithView&&I.rotateWithView,displacement:void 0!==I.displacement?I.displacement:[0,0]})||this}return U(e,t),e.prototype.clone=function(){var t=this.getScale(),I=new e({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice()});return I.setOpacity(this.getOpacity()),I},e.prototype.setRadius=function(t){this.radius_=t,this.render()},e}(m),u=function(){function t(t){var e=t||{};this.color_=void 0!==e.color?e.color:null}return t.prototype.clone=function(){var e=this.getColor();return new t({color:Array.isArray(e)?e.slice():e||void 0})},t.prototype.getColor=function(){return this.color_},t.prototype.setColor=function(t){this.color_=t},t}();var F=I(5152);const g="fraction",z="bottom-left",H="bottom-right",v="top-left",V="top-right";function B(t,e,I){return e+":"+t+":"+(I?C(I):"null")}var k=new(function(){function t(){this.cache_={},this.cacheSize_=0,this.maxCacheSize_=32}return t.prototype.clear=function(){this.cache_={},this.cacheSize_=0},t.prototype.canExpireCache=function(){return this.cacheSize_>this.maxCacheSize_},t.prototype.expire=function(){if(this.canExpireCache()){var t=0;for(var e in this.cache_){var I=this.cache_[e];0!=(3&t++)||I.hasListener()||(delete this.cache_[e],--this.cacheSize_)}}},t.prototype.get=function(t,e,I){var o=B(t,e,I);return o in this.cache_?this.cache_[o]:null},t.prototype.set=function(t,e,I,o){var E=B(t,e,I);this.cache_[E]=o,++this.cacheSize_},t.prototype.setSize=function(t){this.maxCacheSize_=t,this.expire()},t}()),Y=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}();const W=function(t){function e(e,I,o,E){var i=t.call(this)||this;return i.extent=e,i.pixelRatio_=o,i.resolution=I,i.state=E,i}return Y(e,t),e.prototype.changed=function(){this.dispatchEvent(F.Z.CHANGE)},e.prototype.getExtent=function(){return this.extent},e.prototype.getImage=function(){return(0,o.O3)()},e.prototype.getPixelRatio=function(){return this.pixelRatio_},e.prototype.getResolution=function(){return this.resolution},e.prototype.getState=function(){return this.state},e.prototype.load=function(){(0,o.O3)()},e}(y.Z);var b=I(5832),_=I(3002),Q=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}();function w(t,e,I){var o=t;if(o.src&&c){var E=o.decode(),i=!0;return E.then((function(){i&&e()})).catch((function(t){i&&("EncodingError"===t.name&&"Invalid image type."===t.message?e():I())})),function(){i=!1}}var n=[(0,_.Vx)(o,F.Z.LOAD,e),(0,_.Vx)(o,F.Z.ERROR,I)];return function(){n.forEach(_.bN)}}!function(t){function e(e,I,o,E,i,n){var R=t.call(this,e,I,o,0)||this;return R.src_=E,R.image_=new Image,null!==i&&(R.image_.crossOrigin=i),R.unlisten_=null,R.state=0,R.imageLoadFunction_=n,R}Q(e,t),e.prototype.getImage=function(){return this.image_},e.prototype.handleImageError_=function(){this.state=3,this.unlistenImage_(),this.changed()},e.prototype.handleImageLoad_=function(){void 0===this.resolution&&(this.resolution=(0,b.Cr)(this.extent)/this.image_.height),this.state=2,this.unlistenImage_(),this.changed()},e.prototype.load=function(){0!=this.state&&3!=this.state||(this.state=1,this.changed(),this.imageLoadFunction_(this,this.src_),this.unlisten_=w(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))},e.prototype.setImage=function(t){this.image_=t},e.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}(W);var K=function(){var t=function(e,I){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var I in e)Object.prototype.hasOwnProperty.call(e,I)&&(t[I]=e[I])})(e,I)};return function(e,I){function o(){this.constructor=e}t(e,I),e.prototype=null===I?Object.create(I):(o.prototype=I.prototype,new o)}}(),X=null,Z=function(t){function e(e,I,o,E,i,n){var R=t.call(this)||this;return R.hitDetectionImage_=null,R.image_=e||new Image,null!==E&&(R.image_.crossOrigin=E),R.canvas_={},R.color_=n,R.unlisten_=null,R.imageState_=i,R.size_=o,R.src_=I,R.tainted_,R}return K(e,t),e.prototype.isTainted_=function(){if(void 0===this.tainted_&&2===this.imageState_){X||(X=h(1,1)),X.drawImage(this.image_,0,0);try{X.getImageData(0,0,1,1),this.tainted_=!1}catch(t){X=null,this.tainted_=!0}}return!0===this.tainted_},e.prototype.dispatchChangeEvent_=function(){this.dispatchEvent(F.Z.CHANGE)},e.prototype.handleImageError_=function(){this.imageState_=3,this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.handleImageLoad_=function(){this.imageState_=2,this.size_?(this.image_.width=this.size_[0],this.image_.height=this.size_[1]):this.size_=[this.image_.width,this.image_.height],this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.getImage=function(t){return this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_},e.prototype.getPixelRatio=function(t){return this.replaceColor_(t),this.canvas_[t]?t:1},e.prototype.getImageState=function(){return this.imageState_},e.prototype.getHitDetectionImage=function(){if(!this.hitDetectionImage_)if(this.isTainted_()){var t=this.size_[0],e=this.size_[1],I=h(t,e);I.fillRect(0,0,t,e),this.hitDetectionImage_=I.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_},e.prototype.getSize=function(){return this.size_},e.prototype.getSrc=function(){return this.src_},e.prototype.load=function(){if(0==this.imageState_){this.imageState_=1;try{this.image_.src=this.src_}catch(t){this.handleImageError_()}this.unlisten_=w(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this))}},e.prototype.replaceColor_=function(t){if(this.color_&&!this.canvas_[t]){var e=document.createElement("canvas");this.canvas_[t]=e,e.width=Math.ceil(this.image_.width*t),e.height=Math.ceil(this.image_.height*t);var I=e.getContext("2d");if(I.scale(t,t),I.drawImage(this.image_,0,0),I.globalCompositeOperation="multiply","multiply"===I.globalCompositeOperation||this.isTainted_())I.fillStyle=C(this.color_),I.fillRect(0,0,e.width,e.height),I.globalCompositeOperation="destination-in",I.drawImage(this.image_,0,0);else{for(var o=I.getImageData(0,0,e.width,e.height),E=o.data,i=this.color_[0]/255,n=this.color_[1]/255,R=this.color_[2]/255,r=this.color_[3],A=0,s=E.length;A0,6);var a=void 0!==E.src?0:2;return I.color_=void 0!==E.color?T(E.color):null,I.iconImage_=function(t,e,I,o,E,i){var n=k.get(e,o,i);return n||(n=new Z(t,e,I,o,E,i),k.set(e,o,i,n)),n}(C,S,s,I.crossOrigin_,a,I.color_),I.offset_=void 0!==E.offset?E.offset:[0,0],I.offsetOrigin_=void 0!==E.offsetOrigin?E.offsetOrigin:v,I.origin_=null,I.size_=void 0!==E.size?E.size:null,I}return J(e,t),e.prototype.clone=function(){var t=this.getScale();return new e({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,crossOrigin:this.crossOrigin_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,src:this.getSrc(),offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,size:null!==this.size_?this.size_.slice():void 0,opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView()})},e.prototype.getAnchor=function(){if(this.normalizedAnchor_)return this.normalizedAnchor_;var t=this.anchor_,e=this.getSize();if(this.anchorXUnits_==g||this.anchorYUnits_==g){if(!e)return null;t=this.anchor_.slice(),this.anchorXUnits_==g&&(t[0]*=e[0]),this.anchorYUnits_==g&&(t[1]*=e[1])}if(this.anchorOrigin_!=v){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),this.anchorOrigin_!=V&&this.anchorOrigin_!=H||(t[0]=-t[0]+e[0]),this.anchorOrigin_!=z&&this.anchorOrigin_!=H||(t[1]=-t[1]+e[1])}return this.normalizedAnchor_=t,this.normalizedAnchor_},e.prototype.setAnchor=function(t){this.anchor_=t,this.normalizedAnchor_=null},e.prototype.getColor=function(){return this.color_},e.prototype.getImage=function(t){return this.iconImage_.getImage(t)},e.prototype.getPixelRatio=function(t){return this.iconImage_.getPixelRatio(t)},e.prototype.getImageSize=function(){return this.iconImage_.getSize()},e.prototype.getHitDetectionImageSize=function(){return this.getImageSize()},e.prototype.getImageState=function(){return this.iconImage_.getImageState()},e.prototype.getHitDetectionImage=function(){return this.iconImage_.getHitDetectionImage()},e.prototype.getOrigin=function(){if(this.origin_)return this.origin_;var t=this.offset_,e=this.getDisplacement();if(this.offsetOrigin_!=v){var I=this.getSize(),o=this.iconImage_.getSize();if(!I||!o)return null;t=t.slice(),this.offsetOrigin_!=V&&this.offsetOrigin_!=H||(t[0]=o[0]-I[0]-t[0]),this.offsetOrigin_!=z&&this.offsetOrigin_!=H||(t[1]=o[1]-I[1]-t[1])}return t[0]+=e[0],t[1]+=e[1],this.origin_=t,this.origin_},e.prototype.getSrc=function(){return this.iconImage_.getSrc()},e.prototype.getSize=function(){return this.size_?this.size_:this.iconImage_.getSize()},e.prototype.listenImageChange=function(t){this.iconImage_.addEventListener(F.Z.CHANGE,t)},e.prototype.load=function(){this.iconImage_.load()},e.prototype.unlistenImageChange=function(t){this.iconImage_.removeEventListener(F.Z.CHANGE,t)},e}(i),$=function(){function t(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width}return t.prototype.clone=function(){var e=this.getColor();return new t({color:Array.isArray(e)?e.slice():e||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},t.prototype.getColor=function(){return this.color_},t.prototype.getLineCap=function(){return this.lineCap_},t.prototype.getLineDash=function(){return this.lineDash_},t.prototype.getLineDashOffset=function(){return this.lineDashOffset_},t.prototype.getLineJoin=function(){return this.lineJoin_},t.prototype.getMiterLimit=function(){return this.miterLimit_},t.prototype.getWidth=function(){return this.width_},t.prototype.setColor=function(t){this.color_=t},t.prototype.setLineCap=function(t){this.lineCap_=t},t.prototype.setLineDash=function(t){this.lineDash_=t},t.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t},t.prototype.setLineJoin=function(t){this.lineJoin_=t},t.prototype.setMiterLimit=function(t){this.miterLimit_=t},t.prototype.setWidth=function(t){this.width_=t},t}();function tt(t){return t.getGeometry()}const et=function(){function t(t){var e=t||{};this.geometry_=null,this.geometryFunction_=tt,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex}return t.prototype.clone=function(){var e=this.getGeometry();return e&&"object"==typeof e&&(e=e.clone()),new t({geometry:e,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},t.prototype.getRenderer=function(){return this.renderer_},t.prototype.setRenderer=function(t){this.renderer_=t},t.prototype.getGeometry=function(){return this.geometry_},t.prototype.getGeometryFunction=function(){return this.geometryFunction_},t.prototype.getFill=function(){return this.fill_},t.prototype.setFill=function(t){this.fill_=t},t.prototype.getImage=function(){return this.image_},t.prototype.setImage=function(t){this.image_=t},t.prototype.getStroke=function(){return this.stroke_},t.prototype.setStroke=function(t){this.stroke_=t},t.prototype.getText=function(){return this.text_},t.prototype.setText=function(t){this.text_=t},t.prototype.getZIndex=function(){return this.zIndex_},t.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=tt,this.geometry_=t},t.prototype.setZIndex=function(t){this.zIndex_=t},t}(),It=function(){function t(t){var e=t||{};this.font_=e.font,this.rotation_=e.rotation,this.rotateWithView_=e.rotateWithView,this.scale_=e.scale,this.scaleArray_=E(void 0!==e.scale?e.scale:1),this.text_=e.text,this.textAlign_=e.textAlign,this.textBaseline_=e.textBaseline,this.fill_=void 0!==e.fill?e.fill:new u({color:"#333"}),this.maxAngle_=void 0!==e.maxAngle?e.maxAngle:Math.PI/4,this.placement_=void 0!==e.placement?e.placement:"point",this.overflow_=!!e.overflow,this.stroke_=void 0!==e.stroke?e.stroke:null,this.offsetX_=void 0!==e.offsetX?e.offsetX:0,this.offsetY_=void 0!==e.offsetY?e.offsetY:0,this.backgroundFill_=e.backgroundFill?e.backgroundFill:null,this.backgroundStroke_=e.backgroundStroke?e.backgroundStroke:null,this.padding_=void 0===e.padding?null:e.padding}return t.prototype.clone=function(){var e=this.getScale();return new t({font:this.getFont(),placement:this.getPlacement(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(e)?e.slice():e,text:this.getText(),textAlign:this.getTextAlign(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()})},t.prototype.getOverflow=function(){return this.overflow_},t.prototype.getFont=function(){return this.font_},t.prototype.getMaxAngle=function(){return this.maxAngle_},t.prototype.getPlacement=function(){return this.placement_},t.prototype.getOffsetX=function(){return this.offsetX_},t.prototype.getOffsetY=function(){return this.offsetY_},t.prototype.getFill=function(){return this.fill_},t.prototype.getRotateWithView=function(){return this.rotateWithView_},t.prototype.getRotation=function(){return this.rotation_},t.prototype.getScale=function(){return this.scale_},t.prototype.getScaleArray=function(){return this.scaleArray_},t.prototype.getStroke=function(){return this.stroke_},t.prototype.getText=function(){return this.text_},t.prototype.getTextAlign=function(){return this.textAlign_},t.prototype.getTextBaseline=function(){return this.textBaseline_},t.prototype.getBackgroundFill=function(){return this.backgroundFill_},t.prototype.getBackgroundStroke=function(){return this.backgroundStroke_},t.prototype.getPadding=function(){return this.padding_},t.prototype.setOverflow=function(t){this.overflow_=t},t.prototype.setFont=function(t){this.font_=t},t.prototype.setMaxAngle=function(t){this.maxAngle_=t},t.prototype.setOffsetX=function(t){this.offsetX_=t},t.prototype.setOffsetY=function(t){this.offsetY_=t},t.prototype.setPlacement=function(t){this.placement_=t},t.prototype.setRotateWithView=function(t){this.rotateWithView_=t},t.prototype.setFill=function(t){this.fill_=t},t.prototype.setRotation=function(t){this.rotation_=t},t.prototype.setScale=function(t){this.scale_=t,this.scaleArray_=E(void 0!==t?t:1)},t.prototype.setStroke=function(t){this.stroke_=t},t.prototype.setText=function(t){this.text_=t},t.prototype.setTextAlign=function(t){this.textAlign_=t},t.prototype.setTextBaseline=function(t){this.textBaseline_=t},t.prototype.setBackgroundFill=function(t){this.backgroundFill_=t},t.prototype.setBackgroundStroke=function(t){this.backgroundStroke_=t},t.prototype.setPadding=function(t){this.padding_=t},t}()},9179:(t,e,I)=>{"use strict";function o(){return function(){throw new Error("Unimplemented abstract method.")}()}I.d(e,{O3:()=>o,sq:()=>i,q4:()=>n});var E=0;function i(t){return t.ol_uid||(t.ol_uid=String(++E))}var n="6.5.0"},1086:(t,e,I)=>{var o={};o.ArmyXML=I(314),o.GeoJSON=I(5711),o.NVG=I(8677),o.SLF=I(2018),t.exports=o},314:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[];function I(t){var e=[];for(var I in t=t.getElementsByTagName(R+"Point"))if(t[I].nodeName==R+"Point"){var o=t[I],E=[];E[0]=parseFloat(o.getAttribute("Longitude")),E[1]=parseFloat(o.getAttribute("Latitude")),o.getAttribute("Elevation")&&(E[2]=parseFloat(o.getAttribute("Elevation"))),e.push(E)}return e.push(e[0]),e}function E(t){var e=[];for(var I in t=t.getElementsByTagName(R+"Point"))if(t[I].nodeName==R+"Point"){var o=t[I],E=[];E[0]=parseFloat(o.getAttribute("Longitude")),E[1]=parseFloat(o.getAttribute("Latitude")),o.getAttribute("Elevation")&&(E[2]=parseFloat(o.getAttribute("Elevation"))),e.push(E)}return e}function i(t){var e=[0,0];return t=t.getElementsByTagName(R+"Point")[0],e[0]=parseFloat(t.getAttribute("Longitude")),e[1]=parseFloat(t.getAttribute("Latitude")),t.getAttribute("Elevation")&&(e[2]=parseFloat(t.getAttribute("Elevation"))),e}function n(t){var e={type:"Feature",properties:{}},o={};for(var n in t.childNodes)o[t.childNodes[n].nodeName]=t.childNodes[n];var r=o[R+"Symbol_Definition"];for(n in r.childNodes){var A=r.childNodes[n].nodeName;"#text"!=A&&void 0!==A&&(-1!=A.indexOf(":")&&(A=A.split(":")[1]),e.properties[A]=r.childNodes[n].textContent)}var C=o[R+"Operational_Attributes"];for(n in C.childNodes)"#text"!=(A=C.childNodes[n].nodeName)&&void 0!==A&&(-1!=A.indexOf(":")&&(A=A.split(":")[1]),e.properties[A]=C.childNodes[n].textContent);var s=o[R+"Display_Attributes"];for(n in s.childNodes)"#text"!=(A=s.childNodes[n].nodeName)&&void 0!==A&&(-1!=A.indexOf(":")&&(A=A.split(":")[1]),e.properties[A]=s.childNodes[n].textContent);switch(e.properties.Symbol_Category){case"AREA":e.geometry={type:"Polygon",coordinates:[I(o[R+"Symbol_Points"])]};break;case"BIOCHEM":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:e.geometry={type:"Polygon",coordinates:[I(o[R+"Symbol_Points"])]};break;case"EQUIPMENT":case"INSTALLATION":e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])};break;case"LINE":e.geometry={type:"LineString",coordinates:E(o[R+"Symbol_Points"])};break;case"MINE":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:e.geometry={type:"Polygon",coordinates:[I(o[R+"Symbol_Points"])]};break;case"MOOTW":e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])};break;case"NOT_SPECIFIED":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:(console.warn("cannot handle Symbol_Category: "+e.properties.Symbol_Category),console.warn(e.properties.Symbol_Name),console.warn(t));break;case"NUCLEAR":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:e.geometry={type:"Polygon",coordinates:[I(o[R+"Symbol_Points"])]};break;case"OBSTACLE":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:(console.warn("cannot handle Symbol_Category: "+e.properties.Symbol_Category),console.warn(t));break;case"POINT":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:e.geometry={type:"LineString",coordinates:E(o[R+"Symbol_Points"])};break;case"SIG_INT":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:(console.warn("cannot handle Symbol_Category: "+e.properties.Symbol_Category),console.warn(t));break;case"TARGET":1==o[R+"Symbol_Points"].getElementsByTagName(R+"Point").length?e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])}:e.geometry={type:"Polygon",coordinates:[I(o[R+"Symbol_Points"])]};break;case"UNIT":e.geometry={type:"Point",coordinates:i(o[R+"Symbol_Points"])};break;default:console.warn("cannot handle Symbol_Category: "+e.properties.Symbol_Category),console.warn(t)}return e}"string"==typeof t&&(t=(new DOMParser).parseFromString(t,"text/xml"));var R="";-1!=t.firstChild.nodeName.indexOf(":")&&(R=t.firstChild.nodeName.split(":")[0]+":");var r=t.getElementsByTagName(R+"Symbol");for(var A in r)r[A].nodeName&&(e=e.concat(n(r[A])));var C={type:"FeatureCollection",features:e};return o.format.GeoJSON(C,{Additional_Info1:"additionalInformation",Additional_Info2:"additionalInformation1",Additional_Info3:"additionalInformation1",Common_Identifier:"commonIdentifier",Higher_Formation:"higherFormation",Unique_Designator1:"uniqueDesignation",Unique_Designator2:"uniqueDesignation1",Staff_Comments:"staffComments",Symbol_Code:"sidc",DTG_1:"dtg",DTG_2:"dtg1",Reinforced_or_Reduced:"reinforcedReduced",Quantity:"quantity",Signature_Equipment:"signatureEquipment",IFF_SIF:"iffSif",Special_C2HQ:"specialHeadquarters"})}},5711:t=>{t.exports=function(t,e){if(void 0===e&&(e={}),"string"==typeof t)for(var I in t=JSON.parse(t))this[I]=t[I];for(var o=[],E=0;E{t.exports=function(t){var e={document:"nvg",items:[],version:"2.0.2"};if(Array.isArray(t)&&(e.items=t),"object"!=typeof t||Array.isArray(t)||e.items.push(t),"string"==typeof t)try{for(var I in t=JSON.parse(t))e[I]=t[I]}catch(I){!function(t){function I(t,e){for(var i=0;iE&&(E+=360);for(var i=o;i<=E;i+=2)e.push(I([t.cx,t.cy],t.minr,i));for(i=E;i>=o;i-=2)e.push(I([t.cx,t.cy],t.maxr,i));e.push(I([t.cx,t.cy],t.minr,o));break;case"ellipticalring":for(i=360;i>=0;i-=2){var n=t.ry*t.rx/Math.sqrt(Math.pow(t.rx*Math.cos(i*(Math.PI/180)),2)+Math.pow(t.ry*Math.sin(i*(Math.PI/180)),2));e.push(I([t.cx,t.cy],n,i-(t.rotation||0)))}break;case"linearring":(e=t.points).push(t.points[0]);break;case"rectangularring":var R,r=Math.sqrt(Math.pow(t.rx,2)+Math.pow(t.rx,2));R=(Math.PI/2-Math.atan2(t.ry,t.rx))/(Math.PI/180),e.push(I([t.cx,t.cy],r,t.rotation?R-t.rotation:R)),R=(Math.PI/2-Math.atan2(-t.ry,t.rx))/(Math.PI/180),e.push(I([t.cx,t.cy],r,t.rotation?R-t.rotation:R)),R=(Math.PI/2-Math.atan2(-t.ry,-t.rx))/(Math.PI/180),e.push(I([t.cx,t.cy],r,t.rotation?R-t.rotation:R)),R=(Math.PI/2-Math.atan2(t.ry,-t.rx))/(Math.PI/180),e.push(I([t.cx,t.cy],r,t.rotation?R-t.rotation:R)),R=(Math.PI/2-Math.atan2(t.ry,t.rx))/(Math.PI/180),e.push(I([t.cx,t.cy],r,t.rotation?R-t.rotation:R));break;default:console.warn("TODO parse item default: "+t.ring)}return e}function E(e,i){for(var n=[],R=0;RT&&(T+=360);for(var N=a;N<=T;N+=2){var O=r.ry*r.rx/Math.sqrt(Math.pow(r.rx*Math.cos(N*(Math.PI/180)),2)+Math.pow(r.ry*Math.sin(N*(Math.PI/180)),2));A.geometry.coordinates.push(I([r.cx,r.cy],O,r.rotation?N-r.rotation:N))}break;case"arcband":for(A.geometry={type:"Polygon"},A.geometry.coordinates=[[]],(a=r.startangle)>(T=r.endangle)&&(T+=360),N=a;N<=T;N+=2)A.geometry.coordinates[0].push(I([r.cx,r.cy],r.minr,N));for(N=T;N>=a;N-=2)A.geometry.coordinates[0].push(I([r.cx,r.cy],r.maxr,N));A.geometry.coordinates[0].push(I([r.cx,r.cy],r.minr,a));break;case"arrow":var G;for(A.geometry={type:"LineString"},A.geometry.coordinates=[],G=(t(r.points[0],r.points[1])+360)%360,A.geometry.coordinates.push(I(r.points[0],r.width/2,G-90)),N=1;N0;N--)l=(t(r.points[N],r.points[N-1])+360)%360,M=(t(r.points[N],r.points[N+1])+360)%360,c=1/Math.sin((M-l)/2*(Math.PI/180)),A.geometry.coordinates.push(I(r.points[N],-r.width/2*c,(l+M)/2));G=(t(r.points[0],r.points[1])+360)%360,A.geometry.coordinates.push(I(r.points[0],r.width/2,G+90));break;case"circle":for(A.geometry={type:"Polygon"},A.geometry.coordinates=[[]],N=360;N>=0;N-=5)A.geometry.coordinates[0].push(I([r.cx,r.cy],r.r,N));break;case"composite":var L=E(r.items);for(C in L)L[C].properties.parent={},r.uri&&(L[C].properties.parent.uri=r.uri),n.push(L[C]);break;case"corridor":for(A.geometry={type:"Polygon"},A.geometry.coordinates=[[]],G=(t(r.points[0],r.points[1])+360)%360,A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G-90)),N=1;N0;N--)l=(t(r.points[N],r.points[N-1])+360)%360,M=(t(r.points[N],r.points[N+1])+360)%360,c=1/Math.sin((M-l)/2*(Math.PI/180)),A.geometry.coordinates[0].push(I(r.points[N],-r.width/2*c,(l+M)/2));G=(t(r.points[0],r.points[1])+360)%360,A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G+90)),A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G-90));break;case"ellipse":for(A.geometry={type:"Polygon"},A.geometry.coordinates=[[]],N=360;N>=0;N-=2)O=r.ry*r.rx/Math.sqrt(Math.pow(r.rx*Math.cos(N*(Math.PI/180)),2)+Math.pow(r.ry*Math.sin(N*(Math.PI/180)),2)),A.geometry.coordinates[0].push(I([r.cx,r.cy],O,N-(r.rotation||0)));break;case"g":for(C in L=E(r.items))L[C].properties.parent={},r.uri&&(L[C].properties.parent.uri=r.uri),n.push(L[C]);break;case"multipoint":A.geometry={type:"MultiPoint"},A.geometry.coordinates=r.points,delete A.properties.points;break;case"orbit":for(A.geometry={type:"Polygon"},A.geometry.coordinates=[[]],G=(Math.atan2(r.points[1][0]-r.points[0][0],r.points[1][1]-r.points[0][1])-Math.PI/2)/(Math.PI/180),A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G)),N=0;N<=180;N+=2)A.geometry.coordinates[0].push(I(r.points[1],r.width/2,G+N));for(G=(Math.atan2(r.points[0][0]-r.points[1][0],r.points[0][1]-r.points[1][1])-Math.PI/2)/(Math.PI/180),A.geometry.coordinates[0].push(I(r.points[r.points.length-1],r.width/2,G)),N=0;N<=180;N+=2)A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G+N));G=(Math.atan2(r.points[1][0]-r.points[0][0],r.points[1][1]-r.points[0][1])-Math.PI/2)/(Math.PI/180),A.geometry.coordinates[0].push(I(r.points[0],r.width/2,G));break;case"point":A.geometry={type:"Point"},A.geometry.coordinates=[r.x,r.y];break;case"polygon":A.geometry={type:"Polygon"},A.geometry.coordinates=[r.points],A.geometry.coordinates[0].push(r.points[0]),delete A.properties.points;break;case"polyline":A.geometry={type:"LineString"},A.geometry.coordinates=r.points,delete A.properties.points;break;case"rect":A.geometry={type:"Polygon"},A.geometry.coordinates=[[]];var y,p=Math.sqrt(Math.pow(r.rx,2)+Math.pow(r.rx,2));y=(Math.PI/2-Math.atan2(r.ry,r.rx))/(Math.PI/180),A.geometry.coordinates[0].push(I([r.cx,r.cy],p,r.rotation?y-r.rotation:y)),y=(Math.PI/2-Math.atan2(-r.ry,r.rx))/(Math.PI/180),A.geometry.coordinates[0].push(I([r.cx,r.cy],p,r.rotation?y-r.rotation:y)),y=(Math.PI/2-Math.atan2(-r.ry,-r.rx))/(Math.PI/180),A.geometry.coordinates[0].push(I([r.cx,r.cy],p,r.rotation?y-r.rotation:y)),y=(Math.PI/2-Math.atan2(r.ry,-r.rx))/(Math.PI/180),A.geometry.coordinates[0].push(I([r.cx,r.cy],p,r.rotation?y-r.rotation:y)),y=(Math.PI/2-Math.atan2(r.ry,r.rx))/(Math.PI/180),A.geometry.coordinates[0].push(I([r.cx,r.cy],p,r.rotation?y-r.rotation:y));break;case"text":A.geometry={type:"Point"},A.geometry.coordinates=[r.x,r.y];break;default:console.warn("TODO parse item default: "+r.drawable)}if(r.hasOwnProperty("exclusion"))for(var P=0;P{var o=I(8833);t.exports=function(t){var e=[];function I(t){for(var e in t.childNodes)if("SymbolCodeString"==t.childNodes[e].nodeName)return t.childNodes[e].textContent}function E(t){var e=[];for(var I in t.childNodes)if("Points"==t.childNodes[I].nodeName)for(var o in t.childNodes[I].childNodes)"Point"==t.childNodes[I].childNodes[o].nodeName&&e.push(S(t.childNodes[I].childNodes[o]));return e.push(e[0]),e}function i(t){var e=[],I=[];for(var o in t.childNodes)if("Arrowhead"==t.childNodes[o].nodeName&&(I=S(t.childNodes[o])),"Points"==t.childNodes[o].nodeName)for(var E in t.childNodes[o].childNodes)"Point"==t.childNodes[o].childNodes[E].nodeName&&e.unshift(S(t.childNodes[o].childNodes[E]));return e.push(I),e}function n(t){var e=[0,0];for(var I in t.childNodes)"CenterPoint"==t.childNodes[I].nodeName&&(e[0]=S(t.childNodes[I])),"PerimeterPoint"==t.childNodes[I].nodeName&&(e[1]=S(t.childNodes[I]));return e}function R(t){var e=[],I=0;for(var o in t.childNodes)if("Width"==t.childNodes[o].nodeName&&(I=t.childNodes[o].textContent),"Points"==t.childNodes[o].nodeName)for(var E in t.childNodes[o].childNodes)"Point"==t.childNodes[o].childNodes[E].nodeName&&e.push(S(t.childNodes[o].childNodes[E]));return e.push(I),e}function r(t){var e=[];for(var I in t.childNodes)if("Points"==t.childNodes[I].nodeName)for(var o in t.childNodes[I].childNodes)"Point"==t.childNodes[I].childNodes[o].nodeName&&e.push(S(t.childNodes[I].childNodes[o]));return e}function A(t){var e=[0,0,0];for(var I in t.childNodes)"StartPoint"==t.childNodes[I].nodeName&&(e[1]=S(t.childNodes[I])),"EndPoint"!=t.childNodes[I].nodeName&&"Endpoint"!=t.childNodes[I].nodeName||(e[0]=S(t.childNodes[I])),"Arrowhead"!=t.childNodes[I].nodeName&&"ArrowHead"!=t.childNodes[I].nodeName||(e[2]=S(t.childNodes[I]));return console.warn(e),e}function C(t){var e=[0,0,0];for(var I in t.childNodes)"StartPoint"==t.childNodes[I].nodeName&&(e[0]=S(t.childNodes[I])),"EndPoint"!=t.childNodes[I].nodeName&&"Endpoint"!=t.childNodes[I].nodeName||(e[1]=S(t.childNodes[I])),"Width"==t.childNodes[I].nodeName&&(e[2]=t.childNodes[I].textContent);return e}function s(t){var e=[0,0];for(var I in t.childNodes)"StartPoint"==t.childNodes[I].nodeName&&(e[1]=S(t.childNodes[I])),"EndPoint"!=t.childNodes[I].nodeName&&"Endpoint"!=t.childNodes[I].nodeName||(e[0]=S(t.childNodes[I]));return e}function S(t){var e=[0,0];for(var I in t.childNodes)"Longitude"==t.childNodes[I].nodeName&&(e[0]=parseFloat(t.childNodes[I].textContent)),"Latitude"==t.childNodes[I].nodeName&&(e[1]=parseFloat(t.childNodes[I].textContent));return e}function a(t){var e=t.getAttribute("xsi:type");switch(e){case"Area":return{type:"Polygon",coordinates:[E(t)]};case"Arrow":return{type:"LineString",coordinates:i(t)};case"Circle":return{type:"LineString",coordinates:n(t)};case"Corridor":return{type:"Corridor",coordinates:R(t)};case"Line":return{type:"LineString",coordinates:r(t)};case"Point":return{type:"Point",coordinates:S(t)};case"PolyPoint":return{type:"LineString",coordinates:r(t)};case"Rectangle":return{type:"Rectangle",coordinates:C(t)};case"TwoPointArrow":return{type:"LineString",coordinates:A(t)};case"TwoPointCorridor":return{type:"TwoPointCorridor",coordinates:C(t)};case"TwoPointLine":return{type:"LineString",coordinates:s(t)};default:console.warn("SitaWare Layer File: TODO parse location type "+e)}}function T(t){var e=[];for(var E in t.childNodes)if("Symbol"==t.childNodes[E].nodeName){var i=t.childNodes[E],n=i.getAttribute("xsi:type"),R={type:"Feature",properties:{}};if(-1!=["Aviation","BattlePosition","BoundaryLine","Equipment","GenericShape","Incident","Installation","Minefield","TacticalGraphic","TextArea","Unit"].indexOf(n)){for(var r in i.childNodes){var A=i.childNodes[r].nodeName;if(void 0!==A)switch(A){case"Location":if(R.geometry=a(i.childNodes[r]),R.geometry&&"Corridor"==R.geometry.type){var C=R.geometry.coordinates;R.properties.distance=C[C.length-1],C.pop(),R.geometry={type:"LineString",coordinates:C}}if(R.geometry&&"Rectangle"==R.geometry.type&&(C=R.geometry.coordinates,R.properties.distance=C[C.length-1],C.pop(),R.geometry={type:"LineString",coordinates:C}),R.geometry&&"TwoPointCorridor"==R.geometry.type){var s=[(C=R.geometry.coordinates)[0],C[1]],S=C[2],T=o.geometry.bearingBetween(C[1],C[0]);s.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(C[0],C[1],.5),S/2,T-90)),R.geometry={type:"LineString",coordinates:s}}break;case"SymbolCode":R.properties.SymbolCode=I(i.childNodes[r]);break;case"#text":break;default:R.properties[A]=i.childNodes[r].textContent}}void 0!==R.geometry&&e.push(R)}else console.warn("SitaWare Layer File: TODO parse symbol type "+n)}return e}function N(t){var e=[];for(var I in t.childNodes)t.childNodes[I].nodeName,"Symbols"==t.childNodes[I].nodeName&&(e=e.concat(T(t.childNodes[I])));return e}"string"==typeof t&&(t=(new DOMParser).parseFromString(t,"text/xml"));var O=t.getElementsByTagName("Layer");for(var G in O)e=e.concat(N(O[G]));for(G in O=t.getElementsByTagName("Overlay"))e=e.concat(N(O[G]));for(var l in e){var M=e[l].properties.SymbolCode,c=M.substr(0,1)+"-"+M.substr(2,1)+"-"+M.substr(4,6);if(-1!=["G-F-ATC---","G-F-ACSC--","G-F-ACAC--","G-F-ACFC--","G-F-ACNC--","G-F-ACRC--","G-F-ACPC--","G-F-AZIC--","G-F-AZXC--","G-F-AZSC--","G-F-AZCC--","G-F-AZDC--","G-F-AZFC--","G-F-AZZC--","G-F-AZBC--","G-F-AZVC--","X---I-----"].indexOf(c)){var h=e[l].geometry.coordinates;e[l].properties.distance=o.geometry.distanceBetween(h[0],h[1]),e[l].geometry={type:"Point",coordinates:h[0]}}}var L={type:"FeatureCollection",features:e};return o.format.GeoJSON(L,{Aliases:"commonIdentifier",Name:"uniqueDesignation",StaffComments:"staffComments",SymbolCode:"sidc",Timestamp:"dtg"})}},1974:(t,e,I)=>{var o={};o.bearingBetween=I(46),o.circle=I(9102),o.circleCorridorPolygon=I(4430),o.corridor=I(3381),o.distanceBetween=I(5171),o.isClockwise=I(2786),o.pointBetween=I(3627),o.pointBetweenAbsolute=I(5404),o.rectangle=I(7723),o.toDistanceBearing=I(4399),o.testGeometry=I(3548),t.exports=o},46:t=>{t.exports=function(t,e){var I=t[0]*(Math.PI/180),o=e[0]*(Math.PI/180),E=t[1]*(Math.PI/180),i=e[1]*(Math.PI/180),n=Math.sin(o-I)*Math.cos(i),R=Math.cos(E)*Math.sin(i)-Math.sin(E)*Math.cos(i)*Math.cos(o-I);return Math.atan2(n,R)/(Math.PI/180)}},9102:(t,e,I)=>{var o=I(8833);t.exports=function(t){for(var e=t.geometry.coordinates,I=t.properties.distance,E={type:"Polygon",coordinates:[[]]},i=360;i>=0;i-=5)E.coordinates[0].push(o.geometry.toDistanceBearing(e,I,i));return{geometry:E}}},4430:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I={geometry:{type:"Point"}};switch(t.geometry.type){case"Point":e=o.geometry.circle(t).geometry,I.geometry.coordinates=t.geometry.coordinates;break;case"LineString":e=o.geometry.rectangle(t).geometry,I.geometry.coordinates=o.geometry.pointBetween(t.geometry.coordinates[0],t.geometry.coordinates[1],.5);break;case"Polygon":(e={type:t.geometry.type}).coordinates=t.geometry.coordinates;break;default:console.warn("Invalid feature type in SIDC: "+t.properties.sidc)}return{annotation:I,geometry:e}}},5146:(t,e,I)=>{I(8833);const o=I(5171),E=I(46),i=I(4399);function n(t,e,I){for(var n,R,r,A=[],C=t.length,s=0,S=0;S=s&&S===t.length-1);S++){if(s>e&&0===A.length){if(!(n=e-s))return A.push([...t[S]]),A;R=E(t[S],t[S-1])-180,r=i(t[S],n,R),A.push([...r])}if(s>=I)return(n=I-s)?(R=E(t[S],t[S-1])-180,r=i(t[S],n,R),A.push([...r]),A):(A.push([...t[S]]),A);if(s>=e&&A.push([...t[S]]),S===t.length-1)return A;s+=parseFloat(o(t[S],t[S+1]))}if(se%2==0))}},3381:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=t.geometry.coordinates,E=t.properties.distance,i={type:"Polygon",coordinates:[[]]};e=(o.geometry.bearingBetween(I[0],I[1])+360)%360,i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e-90));for(var n=1;n0;n--)R=(o.geometry.bearingBetween(I[n],I[n-1])+360)%360,r=(o.geometry.bearingBetween(I[n],I[n+1])+360)%360,A=1/Math.sin((r-R)/2*(Math.PI/180)),i.coordinates[0].push(o.geometry.toDistanceBearing(I[n],-E/2*A,(R+r)/2));return e=(o.geometry.bearingBetween(I[0],I[1])+360)%360,i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e+90)),i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e-90)),{geometry:i}}},5171:t=>{t.exports=function(t,e){var I=t[0],o=e[0],E=t[1],i=e[1],n=E*(Math.PI/180),R=i*(Math.PI/180),r=(i-E)*(Math.PI/180),A=(o-I)*(Math.PI/180),C=Math.sin(r/2)*Math.sin(r/2)+Math.cos(n)*Math.cos(R)*Math.sin(A/2)*Math.sin(A/2);return(2*Math.atan2(Math.sqrt(C),Math.sqrt(1-C))*6371e3).toFixed(1)}},2786:(t,e,I)=>{I(8833),t.exports=function(...t){let e,I,o=0,E=1;for(;E0}},3627:t=>{t.exports=function(t,e,I){var o=t[0],E=e[0],i=t[1],n=e[1],R=o*(Math.PI/180),r=E*(Math.PI/180),A=i*(Math.PI/180),C=n*(Math.PI/180),s=(n-i)*(Math.PI/180),S=(E-o)*(Math.PI/180),a=Math.sin(s/2)*Math.sin(s/2)+Math.cos(A)*Math.cos(C)*Math.sin(S/2)*Math.sin(S/2),T=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)),N=Math.sin((1-I)*T)/Math.sin(T),O=Math.sin(I*T)/Math.sin(T),G=N*Math.cos(A)*Math.cos(R)+O*Math.cos(C)*Math.cos(r),l=N*Math.cos(A)*Math.sin(R)+O*Math.cos(C)*Math.sin(r),M=N*Math.sin(A)+O*Math.sin(C);return[Math.atan2(l,G)/(Math.PI/180),(Math.atan2(M,Math.sqrt(G*G+l*l))/(Math.PI/180)+540)%360-180]}},5404:(t,e,I)=>{var o=I(8833);t.exports=function(t,e,I){return frac=I/o.geometry.distanceBetween(t,e),p3=o.geometry.pointBetween(t,e,frac),p3}},7723:(t,e,I)=>{var o=I(8833);t.exports=function(t){return o.geometry.corridor(t)}},3548:t=>{t.exports=function(t,e,I){var o=t[0],E=e[0],i=t[1],n=e[1],R=o*(Math.PI/180),r=E*(Math.PI/180),A=i*(Math.PI/180),C=n*(Math.PI/180),s=(n-i)*(Math.PI/180),S=(E-o)*(Math.PI/180),a=Math.sin(s/2)*Math.sin(s/2)+Math.cos(A)*Math.cos(C)*Math.sin(S/2)*Math.sin(S/2),T=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)),N=Math.sin((1-I)*T)/Math.sin(T),O=Math.sin(I*T)/Math.sin(T),G=N*Math.cos(A)*Math.cos(R)+O*Math.cos(C)*Math.cos(r),l=N*Math.cos(A)*Math.sin(R)+O*Math.cos(C)*Math.sin(r),M=N*Math.sin(A)+O*Math.sin(C);return[Math.atan2(l,G)/(Math.PI/180),(Math.atan2(M,Math.sqrt(G*G+l*l))/(Math.PI/180)+540)%360-180]}},4399:t=>{t.exports=function(t,e,I){var o=e/6371e3;I*=Math.PI/180;var E=t[0]*(Math.PI/180),i=t[1]*(Math.PI/180),n=Math.asin(Math.sin(i)*Math.cos(o)+Math.cos(i)*Math.sin(o)*Math.cos(I)),R=E+Math.atan2(Math.sin(I)*Math.sin(o)*Math.cos(i),Math.cos(o)-Math.sin(i)*Math.sin(n));return n/=Math.PI/180,[R=(R/(Math.PI/180)+540)%360-180,n]}},1662:(t,e,I)=>{var o={};o.PHASELINE=I(3491),o.BOUNDARIES=I(1886),o["AIRSPACE COORDINATION AREA"]=I(9914),o.AMBUSH=I(4299),o["ARTILLERY TARGET INTELLIGENCE ZONE"]=I(7708),o.BLOCK=I(7893),o.BREACH=I(3028),o.BYPASS=I(183),o["CALL FOR FIRE ZONE"]=I(8386),o.CANALIZE=I(5937),o.FLOT=I(3476),o["LINE OF CONTACT"]=I(6832),o["CENSOR ZONE"]=I(5773),o.CONTAIN=I(6212),o.COUNTERATTACK=I(5739),o.CLEAR=I(3996),o.corridor=I(2414),o.cover=I(2209),o["CRITICAL FRIENDLY ZONE"]=I(9336),o["DEAD SPACE AREA"]=I(5130),o.DELAY=I(8350),o["FIRE SUPPORT AREA"]=I(1006),o.FIX=I(630),o["FREE FIRE AREA"]=I(2510),o.guard=I(5660),o.ISOLATE=I(186),o["MAIN ATTACK"]=I(4825),o["NAMED AREA OF INTEREST"]=I(6825),o.occupy=I(1186),o["RESTRICTIVE FIRE AREA"]=I(4630),o.searchArea=I(5657),o["SENSOR ZONE"]=I(9877),o["SUPPORTING ATTACK"]=I(4010),o["TARGET BUILD-UP AREA"]=I(7115),o["TARGET VALUE AREA"]=I(1733),o["TARGETED AREA OF INTEREST"]=I(5730),o["TERMINALLY GUIDED MUNITION FOOTPRINT"]=I(7084),o["ZONE OF RESPONSIBILITY"]=I(9464),t.exports=o},9914:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="ACA",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.altitudeDepth&&(I[0].properties.text+="\nMIN ALT: "+t.properties.altitudeDepth),t.properties.altitudeDepth1&&(I[0].properties.text+="\nMAX ALT: "+t.properties.altitudeDepth1),t.properties.additionalInformation1&&(I[0].properties.text+="\nGrids "+t.properties.additionalInformation1),t.properties.dtg&&(I[0].properties.text+="\nEFF: "+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n- "+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},4299:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=t.geometry.coordinates,E={type:"MultiLineString",coordinates:[]},i=o.geometry.pointBetween(I[1],I[2],.5),n=(o.geometry.bearingBetween(I[1],I[2])+360)%360,R=(o.geometry.bearingBetween(I[1],I[0])+360)%360,r=Math.sin((n-R)*(Math.PI/180))*o.geometry.distanceBetween(I[0],I[1]);r<0&&(I=[I[0],I[2],I[1]],n=(o.geometry.bearingBetween(I[1],I[2])+360)%360,R=(o.geometry.bearingBetween(I[1],I[0])+360)%360,r=-r);var A=o.geometry.toDistanceBearing(i,r,n+90),C=o.geometry.distanceBetween(A,I[1]),s=(o.geometry.bearingBetween(A,I[1])+360)%360,S=(o.geometry.bearingBetween(A,I[2])+360)%360;s>S&&(S+=360);var a=(s+S)/2,T=o.geometry.toDistanceBearing(A,2*r,a),N=(o.geometry.bearingBetween(T,A)+360)%360;(e=[]).push(I[1]);for(var O=s;O<=S;O+=5)e.push(o.geometry.toDistanceBearing(A,C,O));e.push(I[2]),E.coordinates.push(e);var G,l,M=(S-s)/7;for(O=1;O<=6;O++)e=[],G=o.geometry.toDistanceBearing(A,C,s+M*O),l=o.geometry.toDistanceBearing(G,.3*r,N),e.push(G,l),E.coordinates.push(e);return(e=[]).push(o.geometry.toDistanceBearing(A,C,a)),e.push(o.geometry.toDistanceBearing(A,2*r,a)),E.coordinates.push(e),(e=[]).push(o.geometry.toDistanceBearing(T,.2*r,N+45)),e.push(T),e.push(o.geometry.toDistanceBearing(T,.2*r,N-45)),E.coordinates.push(e),{geometry:E}}},7708:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="ATI ZONE",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},7893:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[{}],I=t.geometry.coordinates,E={type:"MultiLineString",coordinates:[]},i=[];i.push(I[0],I[1]);var n=[],R=o.geometry.pointBetween(I[0],I[1],.5);return n.push(I[2],R),E.coordinates=[i,n],e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="B",e[0].geometry.coordinates=o.geometry.pointBetween(R,I[2],.5),{geometry:E,annotations:e}}},1886:(t,e,I)=>{var o=I(8833),E=[{},{},{}];const i=I(5146);function n(t,e,I,E=0){if(E<=0)return t.push(e,I),t;o.geometry.distanceBetween(e,I),o.geometry.pointBetween(e,I,.5)}t.exports=function(t){for(var e=t.geometry.coordinates,I={type:"MultiLineString",coordinates:[]},R=[],r=0;r{var o=I(8833);t.exports=function(t){var e=[{}],I=t.geometry.coordinates,E={type:"MultiLineString"},i=o.geometry.distanceBetween(I[0],I[1]),n=o.geometry.pointBetween(I[0],I[1],.5),R=o.geometry.distanceBetween(n,I[2]),r=o.geometry.bearingBetween(I[0],I[1]);E.coordinates=[];var A=[I[0]];return A.push(o.geometry.toDistanceBearing(I[0],R,r+90)),A.push(o.geometry.toDistanceBearing(I[1],R,r+90)),A.push(I[1]),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[0],.2*i,r-45)),A.push(o.geometry.toDistanceBearing(I[0],.2*i,r-45+180)),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[1],.2*i,r+45)),A.push(o.geometry.toDistanceBearing(I[1],.2*i,r+45+180)),E.coordinates.push(A),e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="B",e[0].geometry.coordinates=I[2],{geometry:E,annotations:e}}},183:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[{}],I=t.geometry.coordinates,E={type:"MultiLineString"},i=o.geometry.distanceBetween(I[0],I[1]),n=o.geometry.pointBetween(I[0],I[1],.5),R=o.geometry.distanceBetween(n,I[2]),r=o.geometry.bearingBetween(I[0],I[1]);E.coordinates=[];var A=[I[0]];return A.push(o.geometry.toDistanceBearing(I[0],R,r+90)),A.push(o.geometry.toDistanceBearing(I[1],R,r+90)),A.push(I[1]),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[0],.2*i,r+90-30)),A.push(I[0]),A.push(o.geometry.toDistanceBearing(I[0],.2*i,r+90+30)),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[1],.2*i,r+90-30)),A.push(I[1]),A.push(o.geometry.toDistanceBearing(I[1],.2*i,r+90+30)),E.coordinates.push(A),e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="B",e[0].geometry.coordinates=I[2],{geometry:E,annotations:e}}},8386:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="CFF ZONE",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},5937:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[{}],I=t.geometry.coordinates,E={type:"MultiLineString"},i=o.geometry.distanceBetween(I[0],I[1]),n=o.geometry.pointBetween(I[0],I[1],.5),R=o.geometry.distanceBetween(n,I[2]),r=o.geometry.bearingBetween(I[0],I[1]);E.coordinates=[];var A=[I[0]];return A.push(o.geometry.toDistanceBearing(I[0],R,r+90)),A.push(o.geometry.toDistanceBearing(I[1],R,r+90)),A.push(I[1]),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[0],.2*i,r+45)),A.push(o.geometry.toDistanceBearing(I[0],.2*i,r+45+180)),E.coordinates.push(A),(A=[]).push(o.geometry.toDistanceBearing(I[1],.2*i,r-45)),A.push(o.geometry.toDistanceBearing(I[1],.2*i,r-45+180)),E.coordinates.push(A),e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="C",e[0].geometry.coordinates=I[2],{geometry:E,annotations:e}}},5773:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="CENSOR ZONE",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},3996:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[{}],I=t.geometry.coordinates,E={type:"MultiLineString"},i=o.geometry.distanceBetween(I[0],I[1]);E.coordinates=[];var n=[I[0],I[1]];E.coordinates.push(n);var R=o.geometry.pointBetween(I[0],I[1],.5),r=o.geometry.distanceBetween(R,I[2]),A=o.geometry.bearingBetween(I[0],I[1]);return n=[R,o.geometry.toDistanceBearing(R,r,A+90)],E.coordinates.push(n),e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="C",e[0].geometry.coordinates=o.geometry.pointBetween(R,n[1],.5),(n=[]).push(o.geometry.toDistanceBearing(R,.15*i,A+60)),n.push(R),n.push(o.geometry.toDistanceBearing(R,.15*i,A+60+60)),E.coordinates.push(n),n=[R=o.geometry.pointBetween(I[0],I[1],.2),o.geometry.toDistanceBearing(R,r,A+90)],E.coordinates.push(n),(n=[]).push(o.geometry.toDistanceBearing(R,.15*i,A+60)),n.push(R),n.push(o.geometry.toDistanceBearing(R,.15*i,A+60+60)),E.coordinates.push(n),n=[R=o.geometry.pointBetween(I[0],I[1],.8),o.geometry.toDistanceBearing(R,r,A+90)],E.coordinates.push(n),(n=[]).push(o.geometry.toDistanceBearing(R,.15*i,A+60)),n.push(R),n.push(o.geometry.toDistanceBearing(R,.15*i,A+60+60)),E.coordinates.push(n),{geometry:E,annotations:e}}},6212:(t,e,I)=>{var o=I(8833);t.exports=function(t){let e=[],I=t.geometry.coordinates,E=o.geometry.pointBetween(I[0],I[1],.5),i={type:"MultiLineString",coordinates:[]};o.geometry.isClockwise(...I)&&(I=[I[1],I[0],I[2]]);let n=[],R=[],r=o.geometry.distanceBetween(I[0],I[1])/2,A=o.geometry.bearingBetween(E,I[0]);for(var C=A;C<=A+180;C+=18){let t=o.geometry.toDistanceBearing(E,r,C);n.push(t),R.push([t,o.geometry.pointBetween(t,E,.33)])}i.coordinates.push(n,...R);let s=o.geometry.distanceBetween(I[2],E),S=o.geometry.bearingBetween(I[0],I[1]),a=[];return a.push(o.geometry.toDistanceBearing(E,.15*s,S+60)),a.push(E),a.push(o.geometry.toDistanceBearing(E,.15*s,S+60+60)),i.coordinates.push(a),i.coordinates.push([I[2],E]),e[0]={},e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text="C",e[0].geometry.coordinates=o.geometry.toDistanceBearing(E,r,A+90),e[1]={},e[1].geometry={type:"Point"},e[1].properties={},e[1].properties.text="ENY",e[1].geometry.coordinates=o.geometry.pointBetween(I[2],E,.5),{geometry:i,annotations:e}}},2414:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=t.geometry.coordinates,E=t.properties.distance,i={type:"Polygon",coordinates:[[]]};e=(o.geometry.bearingBetween(I[0],I[1])+360)%360,i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e-90));for(var n=1;n0;n--)R=(o.geometry.bearingBetween(I[n],I[n-1])+360)%360,r=(o.geometry.bearingBetween(I[n],I[n+1])+360)%360,A=1/Math.sin((r-R)/2*(Math.PI/180)),i.coordinates[0].push(o.geometry.toDistanceBearing(I[n],-E/2*A,(R+r)/2));return e=(o.geometry.bearingBetween(I[0],I[1])+360)%360,i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e+90)),i.coordinates[0].push(o.geometry.toDistanceBearing(I[0],E/2,e-90)),{geometry:i}}},5739:(t,e,I)=>{var o=I(8833);const E=I(5146);t.exports=function(t){var e,I,i=[...t.geometry.coordinates],n=i.pop(),R=.7,r=[],A={type:"MultiLineString",coordinates:[]},C=[],s=(e=o.geometry.bearingBetween(i[0],i[1]))-o.geometry.bearingBetween(i[0],n),S=o.geometry.distanceBetween(i[0],n),a=o.geometry.toDistanceBearing(i[0],S,e+s);I=o.geometry.distanceBetween(n,a)/2,e=(o.geometry.bearingBetween(i[i.length-1],i[i.length-2])+360)%360,C.push(o.geometry.toDistanceBearing(i[i.length-1],I*R,e-90));for(var T=i.length-2;T>0;T--){var N=(o.geometry.bearingBetween(i[T],i[T+1])+360)%360,O=(o.geometry.bearingBetween(i[T],i[T-1])+360)%360,G=1/Math.sin((O-N)/2*(Math.PI/180));C.push(o.geometry.toDistanceBearing(i[T],I*R*G,(N+O)/2))}for(e=(o.geometry.bearingBetween(i[0],i[1])+180)%360,C.push(o.geometry.toDistanceBearing(n,I*(1-R),e+90)),C.push(n),C.push(i[0]),C.push(a),C.push(o.geometry.toDistanceBearing(a,I*(1-R),e-90)),T=1;T{var o=I(8833);t.exports=function(t){var e=t.geometry.coordinates,I=Math.max(o.geometry.distanceBetween(e[0],e[1]),o.geometry.distanceBetween(e[0],e[2])),E={type:"MultiLineString",coordinates:[[]]},i=[],n=o.geometry.pointBetween(e[0],e[1],.5),R=o.geometry.bearingBetween(e[0],e[1]);i.push(e[0]),i.push(o.geometry.toDistanceBearing(n,.05*I,R+-60));var r=o.geometry.toDistanceBearing(n,.05*I,R+120);return i.push(r),i.push(e[1]),E.coordinates.push(i),i=[],R=o.geometry.bearingBetween(e[1],r),i.push(o.geometry.toDistanceBearing(e[1],.08*I,R-45)),i.push(e[1]),i.push(o.geometry.toDistanceBearing(e[1],.08*I,R+45)),E.coordinates.push(i),i=[],n=o.geometry.pointBetween(e[0],e[2],.5),R=o.geometry.bearingBetween(e[0],e[2]),i.push(e[0]),i.push(o.geometry.toDistanceBearing(n,.05*I,R+-60)),r=o.geometry.toDistanceBearing(n,.05*I,R+120),i.push(r),i.push(e[2]),E.coordinates.push(i),i=[],R=o.geometry.bearingBetween(e[2],r),i.push(o.geometry.toDistanceBearing(e[2],.08*I,R-45)),i.push(e[2]),i.push(o.geometry.toDistanceBearing(e[2],.08*I,R+45)),E.coordinates.push(i),{geometry:E}}},9336:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="CF ZONE",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},5130:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="DA",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},8350:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=[{}],I=-1,E=t.geometry.coordinates,i=o.geometry.distanceBetween(E[1],E[2]),n=o.geometry.bearingBetween(E[0],E[1]),R={type:"MultiLineString",coordinates:[]},r=[];r.push(E[0]),r.push(E[1]);var A=o.geometry.pointBetween(E[1],E[2],.5),C=o.geometry.bearingBetween(E[1],E[2]);C<0&&n<0&&(I=1);for(var s=10;s<180;s+=10)r.push(o.geometry.toDistanceBearing(A,i/2,C+s*I+180));r.push(E[2]);var S=[];return S.push(o.geometry.toDistanceBearing(E[0],.4*i,n+45)),S.push(E[0]),S.push(o.geometry.toDistanceBearing(E[0],.4*i,n-45)),R.coordinates=[r,S],e[0].geometry={type:"Point"},e[0].properties={},e[0].properties.text=t.properties.dtg?t.properties.dtg+"\n":"",e[0].properties.text+="D",e[0].geometry.coordinates=o.geometry.pointBetween(E[0],E[1],.5),{geometry:R,annotations:e}}},1006:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="FSA "+(t.properties.uniqueDesignation||""),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},630:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e=t.geometry.coordinates,I=o.geometry.distanceBetween(e[0],e[1]),E=o.geometry.bearingBetween(e[0],e[1]),i=.1*I,n={type:"MultiLineString",coordinates:[]},R=[];R.push(e[0]),R.push(o.geometry.pointBetween(e[0],e[1],.2)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.25),i,E+90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.3),i,E-90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.35),i,E+90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.4),i,E-90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.45),i,E+90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.5),i,E-90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.55),i,E+90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.6),i,E-90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.65),i,E+90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.7),i,E-90)),R.push(o.geometry.toDistanceBearing(o.geometry.pointBetween(e[0],e[1],.75),i,E+90)),R.push(o.geometry.pointBetween(e[0],e[1],.8)),R.push(e[1]);var r=[];return r.push(o.geometry.toDistanceBearing(e[0],1.5*i,E+45)),r.push(e[0]),r.push(o.geometry.toDistanceBearing(e[0],1.5*i,E-45)),n.coordinates=[R,r],{geometry:n}}},3476:(t,e,I)=>{var o=I(8833);function E(t,e,I,i=0,n=4){if(i<=0)return t.push(e,I),t;const R=o.geometry.distanceBetween(e,I),r=o.geometry.pointBetween(e,I,.5),A=o.geometry.bearingBetween(e,I);if(1===i){for(var C=[],s=0;s<=180;s+=10)C.push(o.geometry.toDistanceBearing(r,R/2-n/2,A+s+180));t.push(C)}else t=E(t,e,r,i-1),t=E(t,r,I,i-1);return t}function i(t,e,I,E=2e4,i=4){let n=o.geometry.distanceBetween(e,I),R=0,r=0;if(E{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="FFA",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},5660:t=>{t.exports=function(t){}},186:(t,e,I)=>{var o=I(8833);t.exports=function(t){for(var e=t.geometry.coordinates,I=o.geometry.distanceBetween(e[0],e[1]),E=o.geometry.bearingBetween(e[0],e[1]),i={type:"MultiLineString",coordinates:[[]]},n=0;n<=340;n+=5)i.coordinates[0].push(o.geometry.toDistanceBearing(e[0],I,n+E));for(n=20;n<=320;n+=40){var R=[];R.push(o.geometry.toDistanceBearing(e[0],I,n+E)),R.push(o.geometry.toDistanceBearing(e[0],.7*I,10+n+E)),R.push(o.geometry.toDistanceBearing(e[0],I,20+n+E)),i.coordinates.push(R)}R=[];var r=o.geometry.toDistanceBearing(e[0],I,340+E);return R.push(o.geometry.toDistanceBearing(r,.2*I,320+E-75+45)),R.push(r),R.push(o.geometry.toDistanceBearing(r,.2*I,320+E-75-45)),i.coordinates.push(R),{geometry:i}}},6832:(t,e,I)=>{var o=I(8833);function E(t,e,I,i=0,n=4,R=3){if(i<=0)return t.push(e,I),t;const r=o.geometry.distanceBetween(e,I),A=o.geometry.pointBetween(e,I,.5),C=o.geometry.bearingBetween(e,I);if(1===i){for(var s=[],S=[],a=0;a<=180;a+=10)s.push(o.geometry.toDistanceBearing(o.geometry.toDistanceBearing(A,(r+R)/2,C+90),r/2-n/2,C+a+180));for(var T=180;T<=360;T+=10)S.push(o.geometry.toDistanceBearing(o.geometry.toDistanceBearing(A,(r+R)/2,C-90),r/2-n/2,C+T+180));t.push(s),t.push(S)}else t=E(t,e,A,i-1),t=E(t,A,I,i-1);return t}function i(t,e,I,E=50,i=4,n=3){let R=o.geometry.distanceBetween(e,I),r=0,A=0;if(E{var o=I(8833);t.exports=function(t){var e,I,E=t.geometry.coordinates,i=E.pop(),n=.7,R={type:"MultiLineString",coordinates:[]},r=[],A=[],C=(e=o.geometry.bearingBetween(E[0],E[1]))-o.geometry.bearingBetween(E[0],i),s=o.geometry.distanceBetween(E[0],i),S=o.geometry.toDistanceBearing(E[0],s,e+C);I=o.geometry.distanceBetween(i,S)/2,e=(o.geometry.bearingBetween(E[E.length-1],E[E.length-2])+360)%360,r.push(o.geometry.toDistanceBearing(E[E.length-1],I*n,e-90));for(var a=E.length-2;a>0;a--){var T=(o.geometry.bearingBetween(E[a],E[a+1])+360)%360,N=(o.geometry.bearingBetween(E[a],E[a-1])+360)%360,O=1/Math.sin((N-T)/2*(Math.PI/180));r.push(o.geometry.toDistanceBearing(E[a],I*n*O,(T+N)/2))}for(e=(o.geometry.bearingBetween(E[0],E[1])+180)%360,r.push(o.geometry.toDistanceBearing(i,I*(1-n),e+90)),r.push(i),r.push(E[0]),r.push(S),r.push(o.geometry.toDistanceBearing(S,I*(1-n),e-90)),A.push(o.geometry.toDistanceBearing(i,I*(1-n),e+90)),A.push(o.geometry.toDistanceBearing(E[0],I*(1-n)*Math.abs(1/Math.tan(C*(Math.PI/180))),e-180)),A.push(o.geometry.toDistanceBearing(S,I*(1-n),e-90)),a=1;a{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="NAI",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},1186:(t,e,I)=>{var o=I(8833);t.exports=function(t){for(var e=t.geometry.coordinates,I=o.geometry.distanceBetween(e[0],e[1]),E=o.geometry.bearingBetween(e[0],e[1]),i={type:"MultiLineString",coordinates:[[]]},n=0;n<=340;n+=5)i.coordinates[0].push(o.geometry.toDistanceBearing(e[0],I,n+E));var R=[],r=o.geometry.toDistanceBearing(e[0],I,340+E);return R.push(o.geometry.toDistanceBearing(r,.2*I,320+E-75+45)),R.push(r),R.push(o.geometry.toDistanceBearing(r,.2*I,320+E-75-45)),i.coordinates.push(R),R=[],r=o.geometry.toDistanceBearing(e[0],I,340+E),R.push(o.geometry.toDistanceBearing(r,.2*I,320+E+105+45)),R.push(r),R.push(o.geometry.toDistanceBearing(r,.2*I,320+E+105-45)),i.coordinates.push(R),{geometry:i}}},3491:(t,e,I)=>{var o=I(8833);function E(t,e,I,o=0){if(o<=0)return t.push(e,I),t}function i(t,e){return{geometry:{type:"Point",coordinates:t},properties:{text:e}}}t.exports=function(t){for(var e=t.geometry.coordinates,I=[],n={type:"MultiLineString"},R=[],r=1;r{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="RFA",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},5657:t=>{t.exports=function(t){}},9877:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="SENSOR ZONE",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},4010:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I,E=t.geometry.coordinates,i=E.pop(),n=.7,R={type:"LineString",coordinates:[]},r=[],A=(e=o.geometry.bearingBetween(E[0],E[1]))-o.geometry.bearingBetween(E[0],i),C=o.geometry.distanceBetween(E[0],i),s=o.geometry.toDistanceBearing(E[0],C,e+A);I=o.geometry.distanceBetween(i,s)/2,e=(o.geometry.bearingBetween(E[E.length-1],E[E.length-2])+360)%360,r.push(o.geometry.toDistanceBearing(E[E.length-1],I*n,e-90));for(var S=E.length-2;S>0;S--){var a=(o.geometry.bearingBetween(E[S],E[S+1])+360)%360,T=(o.geometry.bearingBetween(E[S],E[S-1])+360)%360,N=1/Math.sin((T-a)/2*(Math.PI/180));r.push(o.geometry.toDistanceBearing(E[S],I*n*N,(a+T)/2))}for(e=(o.geometry.bearingBetween(E[0],E[1])+180)%360,r.push(o.geometry.toDistanceBearing(i,I*(1-n),e+90)),r.push(i),r.push(E[0]),r.push(s),r.push(o.geometry.toDistanceBearing(s,I*(1-n),e-90)),S=1;S{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="TBA",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},1733:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="TVAR",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},5730:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="TAI",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},7084:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="TGMF";var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},9464:(t,e,I)=>{var o=I(8833);t.exports=function(t){var e,I=[{}];I[0].geometry={type:"Point"},I[0].properties={},I[0].properties.text="ZOR",t.properties.uniqueDesignation&&(I[0].properties.text+="\n"+t.properties.uniqueDesignation),t.properties.dtg&&(I[0].properties.text+="\n"+t.properties.dtg),t.properties.dtg1&&(I[0].properties.text+="\n"+t.properties.dtg1);var E=o.geometry.circleCorridorPolygon(t);return e=E.geometry,E.annotation.hasOwnProperty("geometry")&&(I[0].geometry=E.annotation.geometry),{geometry:e,annotations:I}}},1001:(t,e,I)=>{var o=I(8833);function E(t){if(this.SIDC=t.properties.sidc,this.converted=!1,this.geometry=t.geometry,this.properties=this.getProperties(),this.properties.graphic)if(void 0===o._graphicCache&&(o._graphicCache={}),this.properties.numberSIDC)console.log("TODO number sidc stuff");else{if(!o._graphicCache.hasOwnProperty("letter-"+this.properties.numberSIDC)){var e={};o._getLetterSIDCgraphic(e,this.properties.numberSIDC),o._graphicCache["letter-"+this.properties.numberSIDC]=e}var I=o._graphicCache["letter-"+this.properties.numberSIDC],E=this.SIDC.substr(0,1)+"-"+this.SIDC.substr(2,1)+"-"+this.SIDC.substr(4,6);if(I[E]){var i=I[E].call(this,t);this.geometry=i.geometry,this.annotations=i.annotations,this.converted=!0}else"Point"!=this.geometry.type&&console.log("Did not find graphic converter for: "+this.SIDC+" ("+this.geometry.type+")")}}E.prototype.getProperties=I(8609),E.prototype.isConverted=function(){return this.converted},t.exports=E},8609:(t,e,I)=>{var o=I(8833);t.exports=function(){var t={affiliation:"",context:"",dimension:"",dimensionUnknown:!1,echelon:"",faker:!1,fenintDummy:!1,functionid:"",joker:!1,notpresent:"",numberSIDC:!1,graphic:!1},e={context:["Reality","Exercise","Simulation"],status:["Present","Planned","FullyCapable","Damaged","Destroyed","FullToCapacity"],affiliation:["Hostile","Friend","Neutral","Unknown"],dimension:["Air","Ground","Sea","Subsurface"]};return t.context=e.context[0],""!=this.monoColor&&(t.fill=!1),this.SIDC=String(this.SIDC).replace(/\*/g,"-").replace(/ /g,""),t.numberSIDC=!isNaN(this.SIDC),t.numberSIDC?"function"==typeof o.Symbol.prototype.getMetadata?t=o._getNumberPropertiesGraphic.call(this,t,e):console.warn("ms._getNumberPropertiesGraphic() is not present, you will need to load functionality for letter based SIDCs"):"function"==typeof o.Symbol.prototype.getMetadata?t=o._getLetterPropertiesGraphic.call(this,t,e):console.warn("ms._getLetterPropertiesGraphic() is not present, you will need to load functionality for letter based SIDCs"),t}},5494:(t,e,I)=>{var o=I(8833);function E(t){this.data=t;for(var e=0;e{t.exports=function(){for(var t=window.devicePixelRatio||1,e=new Cesium.EntityCollection,I=0;I{var o=I(8653),E=I(7612);t.exports=function(t){t=t||"EPSG:3857";for(var e=window.devicePixelRatio||1,I=[],i=0;i{var o=I(8833);o.addSIDCgraphics=I(2394),o.format=I(1086),o.geometry=I(1974),o.geometryConverter=I(1662),o.Graphic=I(1001),o.GraphicsLayer=I(5494),o._getLetterPropertiesGraphic=I(8459),o._getLetterSIDCgraphic=I(7689),o.addSIDCgraphics(I(3673),"letter"),o.addSIDCgraphics(I(1069),"letter"),o._getNumberPropertiesGraphic=I(3932),t.exports=o},7689:(t,e,I)=>{var o=I(8833);t.exports=function(t,e){for(var I in o._letterSIDCgraphics)o._letterSIDCgraphics.hasOwnProperty(I)&&o._letterSIDCgraphics[I].call(this,t,e)}},8459:(t,e,I)=>{var o=I(8833);t.exports=function(t,e){this.SIDC=this.SIDC.toUpperCase(),""!=this.SIDC.charAt(0)&&this.SIDC.charAt(0);var I=""!=this.SIDC.charAt(1)?this.SIDC.charAt(1):"-",E=""!=this.SIDC.charAt(2)?this.SIDC.charAt(2):"-",i=""!=this.SIDC.charAt(3)?this.SIDC.charAt(3):"-",n=(t.functionid=""!=this.SIDC.substr(4,6)?this.SIDC.substr(4,6):"------",""!=this.SIDC.charAt(10)&&this.SIDC.charAt(10),""!=this.SIDC.charAt(11)&&this.SIDC.charAt(11),""!=this.SIDC.substr(12,2)&&this.SIDC.substr(12,2),""!=this.SIDC.charAt(14)?this.SIDC.charAt(14):"-");["H","S","J","K"].indexOf(I)>-1&&(t.affiliation=e.affiliation[0]),["F","A","D","M"].indexOf(I)>-1&&(t.affiliation=e.affiliation[1]),["N","L"].indexOf(I)>-1&&(t.affiliation=e.affiliation[2]),["P","U","G","W","O"].indexOf(I)>-1&&(t.affiliation=e.affiliation[3]),["P","A"].indexOf(E)>-1&&(t.dimension=e.dimension[0]),["G","Z","F","X"].indexOf(E)>-1&&(t.dimension=e.dimension[1]),["S"].indexOf(E)>-1&&(t.dimension=e.dimension[2]),["U"].indexOf(E)>-1&&(t.dimension=e.dimension[3]),"A"==i&&(t.notpresent=o._dashArrays.anticipated),["P","A","S","G","M"].indexOf(I)>-1&&(t.notpresent=o._dashArrays.pending),"X"==n&&(t.graphic=!0);var R=this.SIDC.substr(0,1)+"-"+this.SIDC.substr(2,1)+"-"+this.SIDC.substr(4,6);return-1!=["X---C-----","X---I-----","X---A-----"].indexOf(R)&&(t.graphic=!0),t}},3673:(t,e,I)=>{var o=I(8833);t.exports=function(t,e){t["G-T-B-----"]=o.geometryConverter.BLOCK,t["G-T-H-----"]=o.geometryConverter.BREACH,t["G-T-Y-----"]=o.geometryConverter.BYPASS,t["G-T-C-----"]=o.geometryConverter.CANALIZE,t["G-T-X-----"]=o.geometryConverter.CLEAR,t["G-T-J-----"]=o.geometryConverter.CONTAIN,t["G-T-K-----"]=o.geometryConverter.COUNTERATTACK,t["G-T-L-----"]=o.geometryConverter.DELAY,t["G-T-F-----"]=o.geometryConverter.FIX,t["G-T-E-----"]=o.geometryConverter.ISOLATE,t["G-T-O-----"]=o.geometryConverter.occupy,t["G-T-UG----"]=o.geometryConverter.guard,t["G-T-UC----"]=o.geometryConverter.cover,t["G-G-GLB---"]=o.geometryConverter.BOUNDARIES,t["G-G-GLF---"]=o.geometryConverter.FLOT,t["G-G-GLC---"]=o.geometryConverter["LINE OF CONTACT"],t["G-G-GLP---"]=o.geometryConverter.PHASELINE,t["G-G-OLAGM-"]=o.geometryConverter["MAIN ATTACK"],t["G-G-OLAGS-"]=o.geometryConverter["SUPPORTING ATTACK"],t["G-G-SLA---"]=o.geometryConverter.AMBUSH,t["G-G-SAN---"]=o.geometryConverter["NAMED AREA OF INTEREST"],t["G-G-SAT---"]=o.geometryConverter["TARGETED AREA OF INTEREST"],t["G-F-ACSI--"]=o.geometryConverter["FIRE SUPPORT AREA"],t["G-F-ACSR--"]=o.geometryConverter["FIRE SUPPORT AREA"],t["G-F-ACSC--"]=o.geometryConverter["FIRE SUPPORT AREA"],t["G-F-ACAI--"]=o.geometryConverter["AIRSPACE COORDINATION AREA"],t["G-F-ACAR--"]=o.geometryConverter["AIRSPACE COORDINATION AREA"],t["G-F-ACAC--"]=o.geometryConverter["AIRSPACE COORDINATION AREA"],t["G-F-ACFI--"]=o.geometryConverter["FREE FIRE AREA"],t["G-F-ACFR--"]=o.geometryConverter["FREE FIRE AREA"],t["G-F-ACFC--"]=o.geometryConverter["FREE FIRE AREA"],t["G-F-ACRI--"]=o.geometryConverter["RESTRICTIVE FIRE AREA"],t["G-F-ACRR--"]=o.geometryConverter["RESTRICTIVE FIRE AREA"],t["G-F-ACRC--"]=o.geometryConverter["RESTRICTIVE FIRE AREA"],t["G-F-ACEI--"]=o.geometryConverter["SENSOR ZONE"],t["G-F-ACER--"]=o.geometryConverter["SENSOR ZONE"],t["G-F-ACEC--"]=o.geometryConverter["SENSOR ZONE"],t["G-F-ACDI--"]=o.geometryConverter["DEAD SPACE AREA"],t["G-F-ACDR--"]=o.geometryConverter["DEAD SPACE AREA"],t["G-F-ACDC--"]=o.geometryConverter["DEAD SPACE AREA"],t["G-F-ACZI--"]=o.geometryConverter["ZONE OF RESPONSIBILITY"],t["G-F-ACZR--"]=o.geometryConverter["ZONE OF RESPONSIBILITY"],t["G-F-ACZC--"]=o.geometryConverter["ZONE OF RESPONSIBILITY"],t["G-F-ACBI--"]=o.geometryConverter["TARGET BUILD-UP AREA"],t["G-F-ACBR--"]=o.geometryConverter["TARGET BUILD-UP AREA"],t["G-F-ACBC--"]=o.geometryConverter["TARGET BUILD-UP AREA"],t["G-F-ACVI--"]=o.geometryConverter["TARGET VALUE AREA"],t["G-F-ACVR--"]=o.geometryConverter["TARGET VALUE AREA"],t["G-F-ACVC--"]=o.geometryConverter["TARGET VALUE AREA"],t["G-F-ACT---"]=o.geometryConverter["TERMINALLY GUIDED MUNITION FOOTPRINT"],t["G-F-AZII--"]=o.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"],t["G-F-AZIR--"]=o.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"],t["G-F-AZXI--"]=o.geometryConverter["CALL FOR FIRE ZONE"],t["G-F-AZXR--"]=o.geometryConverter["CALL FOR FIRE ZONE"],t["G-F-AZCI--"]=o.geometryConverter["CENSOR ZONE"],t["G-F-AZCR--"]=o.geometryConverter["CENSOR ZONE"],t["G-F-AZFI--"]=o.geometryConverter["CRITICAL FRIENDLY ZONE"],t["G-F-AZFR--"]=o.geometryConverter["CRITICAL FRIENDLY ZONE"],t["C-R-LE----"]=o.geometry.circle,t["X---C-----"]=o.geometryConverter.corridor,t["X---I-----"]=o.geometry.circle,t["X---A-----"]=o.geometryConverter["SUPPORTING ATTACK"]}},1069:(t,e,I)=>{(t=I.nmd(t)).exportS=function(t,e){t["G-T-GB----"]=ms.geometryConverter.BLOCK,t["G-T-GH----"]=ms.geometryConverter.BYPASS,t["G-T-GY----"]=ms.geometryConverter.BYPASS,t["G-T-GC----"]=ms.geometryConverter.CANALIZE,t["G-T-GX----"]=ms.geometryConverter.CLEAR,t["G-T-GL----"]=ms.geometryConverter.DELAY,t["G-T-GF----"]=ms.geometryConverter.FIX,t["G-T-GE----"]=ms.geometryConverter.ISOLATE,t["G-C-MOLAS-"]=ms.geometryConverter["SUPPORTING ATTACK"],t["G-C-MOLAM-"]=ms.geometryConverter["MAIN ATTACK"],t["G-C-MSGA--"]=ms.geometryConverter.AMBUSH,t["G-C-MSAN--"]=ms.geometryConverter["NAMED AREA OF INTEREST"],t["G-C-MSAT--"]=ms.geometryConverter["TARGETED AREA OF INTEREST"],t["G-C-FAS---"]=ms.geometryConverter["FIRE SUPPORT AREA"],t["G-C-FAC---"]=ms.geometryConverter["AIRSPACE COORDINATION AREA"],t["G-C-FAI---"]=ms.geometryConverter["FREE FIRE AREA"]}},2394:t=>{t.exports=function(t,e){return"function"==typeof t&&(void 0===this["_"+e+"SIDCgraphics"]&&(this["_"+e+"SIDCgraphics"]=[]),this["_"+e+"SIDCgraphics"]=this["_"+e+"SIDCgraphics"].concat(t)),this}},3932:(t,e,I)=>{var o=I(8833);t.exports=function(t,e){this.SIDC.substr(0,2),this.SIDC.substr(2,1);var I=this.SIDC.substr(3,1),E=this.SIDC.substr(4,2),i=this.SIDC.substr(6,1),n=(this.SIDC.substr(7,1),this.SIDC.substr(8,2));return t.functionid=this.SIDC.substr(10,10),t.context=e.context[parseInt(this.SIDC.substr(2,1))],t.affiliation={0:"Unknown",1:"Unknown",2:"Friend",3:"Friend",4:"Neutral",5:"Hostile",6:"Hostile"}[I],t.dimension={"00":"Sea","01":"Air","02":"Air","05":"Air","06":"Air",10:"Ground",11:"Ground",12:"Ground",15:"Ground",20:"Ground",30:"Sea",35:"Subsurface",36:"Subsurface",39:"Subsurface",40:"Ground",50:"Air",51:"Air",52:"Ground",53:"Sea",54:"Subsurface",60:"Ground"}[E],"1"==i&&(t.notpresent=o._dashArrays.anticipated),"0"!=I&&"2"!=I&&"5"!=I||(t.notpresent=o._dashArrays.pending),n>=70&&n<80&&(t.leadership=e.echelonMobility[n]),t}}},e={};function I(o){if(e[o])return e[o].exports;var E=e[o]={id:o,loaded:!1,exports:{}};return t[o].call(E.exports,E,E.exports,I),E.loaded=!0,E.exports}return I.d=(t,e)=>{for(var o in e)I.o(e,o)&&!I.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},I.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),I.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},I.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),I(8138)})()})); \ No newline at end of file diff --git a/dist/milgraphics.js.LICENSE.txt b/dist/milgraphics.js.LICENSE.txt new file mode 100644 index 00000000..ecc005c5 --- /dev/null +++ b/dist/milgraphics.js.LICENSE.txt @@ -0,0 +1,26 @@ +/**! +* @license +* The MIT License (MIT) +* +* Copyright (c) 2017 Måns Beckman - www.spatialillusions.com +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +* +* More information can be found at www.spatialillusions.com +*/ diff --git a/docs/milsymbol-2525c-tactical-points-svg.html b/docs/milsymbol-2525c-tactical-points-svg.html index 5b088f69..51d7921e 100644 --- a/docs/milsymbol-2525c-tactical-points-svg.html +++ b/docs/milsymbol-2525c-tactical-points-svg.html @@ -1,4217 +1,8095 @@ - - + + + + Milsymbol Documentation - Spatial Illusions + + table { + border-collapse: collapse; + margin: auto; + } + + table, td, th { + border: solid 1px #000; + padding: 5px; + } + + thead { + font-weight: bold; + background-color: rgb(243, 243, 243); + } +
- - - -

Milsymbol 2525C tactical points implementation

-Milsymbol only support point symbols and not other graphics.
- -
-By default milsymbol will draw all tactical points black, except hostile that will be drawn in red. You can override this by setting monoColor to the desired color.
-
- - -G*M*OMP---****X
-
- -GFM*OMP---****X
-
- -GHM*OMP---****X
-
- -GFM*OMP---****X (with monoColor set to blue)
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DESCRIPTION -SYMBOL -
-TACGRP
-TACTICAL GRAPHICS
-
-
-
-TACGRP.TSK
-TACTICAL GRAPHICS TASKS
-
-
-
-TACGRP.TSK.BLK
-BLOCK
-G*T*B-----****X
-
-COMPLETED -
-TACGRP.TSK.BRH
-BREACH
-G*T*H-----****X
-
-COMPLETED -
-TACGRP.TSK.BYS
-BYPASS
-G*T*Y-----****X
-
-COMPLETED -
-TACGRP.TSK.CNZ
-CANALIZE
-G*T*C-----****X
-
-COMPLETED -
-TACGRP.TSK.CLR
-CLEAR
-G*T*X-----****X
-
-COMPLETED -
-TACGRP.TSK.CNT
-CONTAIN
-G*T*J-----****X
-
-N/A
-TACGRP.TSK.CATK
-COUNTERATTACK (CATK)
-G*T*K-----****X
-
-N/A
-TACGRP.TSK.CATK.CATKF
-COUNTERATTACK BY FIRE
-G*T*KF----****X
-
-N/A
-TACGRP.TSK.DLY
-DELAY
-G*T*L-----****X
-
-COMPLETED -
-TACGRP.TSK.DSTY
-DESTROY
-G*T*D-----****X
-
- -
-TACGRP.TSK.DRT
-DISRUPT
-G*T*T-----****X
-
-N/A
-TACGRP.TSK.FIX
-FIX
-G*T*F-----****X
-
-COMPLETED -
-TACGRP.TSK.FLWASS
-FOLLOW AND ASSUME
-G*T*A-----****X
-
-N/A
-TACGRP.TSK.FLWASS.FLWSUP
-FOLLOW AND SUPPORT
-G*T*AS----****X
-
-N/A
-TACGRP.TSK.ITDT
-INTERDICT
-G*T*I-----****X
-
- -
-TACGRP.TSK.ISL
-ISOLATE
-G*T*E-----****X
-
-COMPLETED -
-TACGRP.TSK.NEUT
-NEUTRALIZE
-G*T*N-----****X
-
- -
-TACGRP.TSK.OCC
-OCCUPY
-G*T*O-----****X
-
-N/A
-TACGRP.TSK.PNE
-PENETRATE
-G*T*P-----****X
-
-N/A
-TACGRP.TSK.RIP
-RELIEF IN PLACE (RIP)
-G*T*R-----****X
-
-N/A
-TACGRP.TSK.RTN
-RETAIN
-G*T*Q-----****X
-
-N/A
-TACGRP.TSK.RTM
-RETIREMENT
-G*T*M-----****X
-
-N/A
-TACGRP.TSK.SCE
-SECURE
-G*T*S-----****X
-
-N/A
-TACGRP.TSK.SEC
-SECURITY
-G-T*U---------X
-
-
-TACGRP.TSK.SEC.SCN
-SCREEN
-G*T*US----****X
-
-N/A
-TACGRP.TSK.SEC.GUD
-GUARD
-G*T*UG----****X
-
-N/A
-TACGRP.TSK.SEC.COV
-COVER
-G*T*UC----****X
-
-N/A
-TACGRP.TSK.SZE
-SEIZE
-G*T*Z-----****X
-
-N/A
-TACGRP.TSK.WDR
-WITHDRAW
-G*T*W-----****X
-
-N/A
-TACGRP.TSK.WDR.WDRUP
-WITHDRAW UNDER PRESSURE
-G*T*WP----****X
-
-N/A
-TACGRP.C2GM
-COMMAND AND CONTROL AND GENERAL MANEUVER
-G*G*------****X
-
-
-TACGRP.C2GM.GNL
-GENERAL
-G*G*G-----****X
-
-
-TACGRP.C2GM.GNL.PNT
-POINTS
-G*G*GP----****X
-
-
-TACGRP.C2GM.GNL.PNT.USW
-UNDER SEA WARFARE
-G*G*GPU---****X
-
-
-TACGRP.C2GM.GNL.PNT.USW.UH2
-UNDERWATER
-G*G*GPUU--****X
-
-
-TACGRP.C2GM.GNL.PNT.USW.UH2.DTM
-DATUM
-G*G*GPUUD-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.UH2.BCON
-BRIEF CONTACT
-G*G*GPUUB-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.UH2.LCON
-LOST CONTACT
-G*G*GPUUL-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.UH2.SNK
-SINKER
-G*G*GPUUS-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY
-SONOBUOY
-G*G*GPUY--****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.PTNCTR
-PATTERN CENTER
-G*G*GPUYP-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.DIFAR
-DIRECTIONAL FREQUENCY ANALYZING AND RECORDING (DIFAR)
-G*G*GPUYD-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.LOFAR
-LOW FREQUENCY ANALYZING AND RECORDING (LOFAR)
-G*G*GPUYL-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.CASS
-COMMAND ACTIVE SONOBUOY SYSTEM (CASS)
-G*G*GPUYC-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.DICASS
-DIRECTIONAL COMMAND ACTIVE SONOBUOY SYSTEM (DICASS)
-G*G*GPUYS-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.BT
-BATHYTHERMOGRAPH TRANSMITTING (BT)
-G*G*GPUYB-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.ANM
-ANM
-G*G*GPUYA-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.VLAD
-VERTICAL LINE ARRAY DIFAR (VLAD)
-G*G*GPUYV-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.ATAC
-ATAC
-G*G*GPUYT-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.RO
-RANGE ONLY (RO)
-G*G*GPUYR-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.KGP
-KINGPIN
-G*G*GPUYK-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SNBY.EXP
-SONOBUOY-EXPIRED
-G*G*GPUYX-*****
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SRH
-SEARCH
-G*G*GPUS--****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SRH.ARA
-SEARCH AREA
-G*G*GPUSA-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SRH.DIPPSN
-DIP POSITION
-G*G*GPUSD-****X
-
- -
-TACGRP.C2GM.GNL.PNT.USW.SRH.CTR
-SEARCH CENTER
-G*G*GPUSC-****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT
-REFERENCE POINT
-G*G*GPR---****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.NAVREF
-NAVIGATIONAL REFERENCE POINT
-G*G*GPRN--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.SPLPNT
-SPECIAL POINT
-G*G*GPRS--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.DLRP
-DLRP
-G*G*GPRD--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.PIM
-POINT OF INTENDED MOVEMENT (PIM)
-G*G*GPRP--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.MRSH
-MARSHALL POINT
-G*G*GPRM--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.WAP
-WAYPOINT
-G*G*GPRW--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.CRDRTB
-CORRIDOR TAB
-G*G*GPRC--****X
-
- -
-TACGRP.C2GM.GNL.PNT.REFPNT.PNTINR
-POINT OF INTEREST
-G*G*GPRI--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.WPN
-WEAPON
-G*G*GPW---****X
-
-
-TACGRP.C2GM.GNL.PNT.WPN.AIMPNT
-AIM POINT
-G*G*GPWA--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.DRPPNT
-DROP POINT
-G*G*GPWD--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.ENTPNT
-ENTRY POINT
-G*G*GPWE--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.GRDZRO
-GROUND ZERO
-G*G*GPWG--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.MSLPNT
-MSL DETECT POINT
-G*G*GPWM--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.IMTPNT
-IMPACT POINT
-G*G*GPWI--****X
-
- -
-TACGRP.C2GM.GNL.PNT.WPN.PIPNT
-PREDICTED IMPACT POINT
-G*G*GPWP--****X
-
- -
-TACGRP.C2GM.GNL.PNT.FRMN
-FORMATION
-G*G*GPF---****X
-
- -
-TACGRP.C2GM.GNL.PNT.HBR
-HARBOR (GENERAL)
-G*G*GPH---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.HBR.PNTQ
-POINT Q
-G*G*GPHQ--****X
-
- -
-TACGRP.C2GM.GNL.PNT.HBR.PNTA
-POINT A
-G*G*GPHA--****X
-
- -
-TACGRP.C2GM.GNL.PNT.HBR.PNTY
-POINT Y
-G*G*GPHY--****X
-
- -
-TACGRP.C2GM.GNL.PNT.HBR.PNTX
-POINT X
-G*G*GPHX--****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE
-ROUTE
-G*G*GPO---****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE.RDV
-RENDEZVOUS
-G*G*GPOZ--****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE.DVSN
-DIVERSIONS
-G*G*GPOD--****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE.WAP
-WAYPOINT
-G*G*GPOW--****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE.PIM
-PIM
-G*G*GPOP--****X
-
- -
-TACGRP.C2GM.GNL.PNT.RTE.PNTR
-POINT R
-G*G*GPOR--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL
-AIR CONTROL
-G*G*GPA---****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.CAP
-COMBAT AIR PATROL (CAP)
-G*G*GPAP--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ABNEW
-AIRBORNE EARLY WARNING (AEW)
-G*G*GPAW--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.TAK
-TANKING
-G*G*GPAK--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ASBWF
-ANTISUBMARINE WARFARE, FIXED WING
-G*G*GPAA--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ASBWR
-ANTISUBMARINE WARFARE, ROTARY WING
-G*G*GPAH--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.SUWF
-SUCAP - FIXED WING
-G*G*GPAB--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.SUWR
-SUCAP - ROTARY WING
-G*G*GPAC--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.MIWF
-MIW - FIXED WING
-G*G*GPAD--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.MIWR
-MIW - ROTARY WING
-G*G*GPAE--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.SKEIP
-STRIKE IP
-G*G*GPAS--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.TCN
-TACAN
-G*G*GPAT--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.TMC
-TOMCAT
-G*G*GPAO--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.RSC
-RESCUE
-G*G*GPAR--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.RPH
-REPLENISH
-G*G*GPAL--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.UA
-UNMANNED AERIAL SYSTEM (UAS/UA)
-G*G*GPAF--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.VTUA
-VTUA
-G*G*GPAG--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ORB
-ORBIT
-G*G*GPAI--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ORBF8
-ORBIT - FIGURE EIGHT
-G*G*GPAJ--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ORBRT
-ORBIT - RACE TRACK
-G*G*GPAM--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTL.ORBRD
-ORBIT - RANDOM, CLOSED
-G*G*GPAN--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT
-ACTION POINTS (GENERAL)
-G*G*GPP---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.CHKPNT
-CHECK POINT
-G*G*GPPK--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.CONPNT
-CONTACT POINT
-G*G*GPPC--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.CRDPNT
-COORDINATION POINT
-G*G*GPPO--****X
-
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.DCNPNT
-DECISION POINT
-G*G*GPPD--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.LNKUPT
-LINKUP POINT
-G*G*GPPL--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.PSSPNT
-PASSAGE POINT
-G*G*GPPP--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.RAYPNT
-RALLY POINT
-G*G*GPPR--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.RELPNT
-RELEASE POINT
-G*G*GPPE--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.STRPNT
-START POINT
-G*G*GPPS--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.AMNPNT
-AMNESTY POINT
-G*G*GPPA--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.ACTPNT.WAP
-WAYPOINT
-G*G*GPPW--****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.GNL.PNT.SCTL
-SEA SURFACE CONTROL STATION
-G*G*GPC---****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.USV
-UNMANNED SURFACE VEHICLE (USV) CONTROL STATION
-G*G*GPCU--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.USV.RMV
-REMOTE MULTIMISSION VEHICLE (RMV) USV CONTROL STATION
-G*G*GPCUR-****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.USV.ASW
-USV - ANTISUBMARINE WARFARE CONTROL STATION
-G*G*GPCUA-****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.USV.SUW
-USV - SURFACE WARFARE CONTROL STATION
-G*G*GPCUS-****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.USV.MIW
-USV - MINE WARFARE CONTROL STATION
-G*G*GPCUM-****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.ASW
-ASW CONTROL STATION
-G*G*GPCA--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.SUW
-SUW CONTROL STATION
-G*G*GPCS--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.MIW
-MIW CONTROL STATION
-G*G*GPCM--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.PKT
-PICKET CONTROL STATION
-G*G*GPCP--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.RDV
-RENDEZVOUS CONTROL POINT
-G*G*GPCR--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.RSC
-RESCUE CONTROL POINT
-G*G*GPCC--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.REP
-REPLENISHMENT CONTROL POINT
-G*G*GPCE--****X
-
- -
-TACGRP.C2GM.GNL.PNT.SCTL.NCBTT
-NONCOMBATANT CONTROL STATION
-G*G*GPCN--****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL
-SUBSURFACE CONTROL STATION
-G*G*GPB---****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.UUV
-UNMANNED UNDERWATER VEHICLE (UUV) CONTROL STATION
-G*G*GPBU--****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.UUV.ASW
-UUV - ANTISUBMARINE WARFARE CONTROL STATION
-G*G*GPBUA-****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.UUV.SUW
-UUV - SURFACE WARFARE CONTROL STATION
-G*G*GPBUS-****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.UUV.MIW
-UUV - MINE WARFARE CONTROL STATION
-G*G*GPBUM-****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.SBSTN
-SUBMARINE CONTROL STATION
-G*G*GPBS--****X
-
- -
-TACGRP.C2GM.GNL.PNT.UCTL.SBSTN.ASW
-ASW SUBMARINE CONTROL STATION
-G*G*GPBSA-****X
-
- -
-TACGRP.C2GM.GNL.LNE
-LINES
-G*G*GL----****X
-
-
-TACGRP.C2GM.GNL.LNE.BNDS
-BOUNDARIES
-G*G*GLB---****X
-
-N/A
-TACGRP.C2GM.GNL.LNE.FLOT
-FORWARD LINE OF OWN TROOPS (FLOT)
-G*G*GLF---****X
-
-N/A
-TACGRP.C2GM.GNL.LNE.LOC
-LINE OF CONTACT
-G*G*GLC---****X
-
-N/A
-TACGRP.C2GM.GNL.LNE.PHELNE
-PHASE LINE
-G*G*GLP---****X
-
-N/A
-TACGRP.C2GM.GNL.LNE.LITLNE
-LIGHT LINE
-G*G*GLL---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS
-AREAS
-G*G*GA----****X
-
-
-TACGRP.C2GM.GNL.ARS.GENARA
-GENERAL AREA
-G*G*GAG---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.ABYARA
-ASSEMBLY AREA
-G*G*GAA---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.EMTARA
-ENGAGEMENT AREA
-G*G*GAE---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.FTFDAR
-FORTIFIED AREA
-G*G*GAF---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.DRPZ
-DROP ZONE
-G*G*GAD---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.EZ
-EXTRACTION ZONE (EZ)
-G*G*GAX---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.LZ
-LANDING ZONE (LZ)
-G*G*GAL---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.PZ
-PICKUP ZONE (PZ)
-G*G*GAP---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.SRHARA
-SEARCH AREA/RECONNAISSANCE AREA
-G*G*GAS---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.LAARA
-LIMITED ACCESS AREA
-G*G*GAY---****X
-
-N/A
-TACGRP.C2GM.GNL.ARS.AIRFZ
-AIRFIELD ZONE
-G*G*GAZ---****X
-
-N/A
-TACGRP.C2GM.AVN
-AVIATION
-G*G*A-----****X
-
-
-TACGRP.C2GM.AVN.PNT
-POINTS
-G*G*AP----****X
-
-
-TACGRP.C2GM.AVN.PNT.ACP
-AIR CONTROL POINT (ACP)
-G*G*APP---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.AVN.PNT.COMMCP
-COMMUNICATIONS CHECKPOINT (CCP)
-G*G*APC---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.AVN.PNT.PUP
-PULL-UP POINT (PUP)
-G*G*APU---****X
-
- -
-TACGRP.C2GM.AVN.PNT.DAPP
-DOWNED AIRCREW PICKUP POINT
-G*G*APD---****X
-
- -
-TACGRP.C2GM.AVN.LNE
-LINES
-G*G*AL----****X
-
-
-TACGRP.C2GM.AVN.LNE.ACDR
-AIR CORRIDOR
-G*G*ALC---****X
-
-N/A
-TACGRP.C2GM.AVN.LNE.MRR
-MINIMUM RISK ROUTE (MRR)
-G*G*ALM---****X
-
-N/A
-TACGRP.C2GM.AVN.LNE.SAAFR
-STANDARD-USE ARMY AIRCRAFT FLIGHT ROUTE (SAAFR)
-G*G*ALS---****X
-
-N/A
-TACGRP.C2GM.AVN.LNE.UAR
-UNMANNED AIRCRAFT (UA) ROUTE
-G*G*ALU---****X
-
-N/A
-TACGRP.C2GM.AVN.LNE.LLTR
-LOW LEVEL TRANSIT ROUTE (LLTR)
-G*G*ALL---****X
-
-N/A
-TACGRP.C2GM.AVN.ARS
-AREAS
-G*G*AA----****X
-
-
-TACGRP.C2GM.AVN.ARS.ROZ
-RESTRICTED OPERATIONS ZONE (ROZ)
-G*G*AAR---****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.SHRDEZ
-SHORT-RANGE AIR DEFENSE ENGAGEMENT ZONE (SHORADEZ)
-G*G*AAF---****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.HIDACZ
-HIGH DENSITY AIRSPACE CONTROL ZONE (HIDACZ)
-G*G*AAH---****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.MEZ
-MISSILE ENGAGEMENT ZONE (MEZ)
-G*G*AAM---****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.MEZ.LAMEZ
-LOW ALTITUDE MEZ
-G*G*AAML--****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.MEZ.HAMEZ
-HIGH ALTITUDE MEZ
-G*G*AAMH--****X
-
-N/A
-TACGRP.C2GM.AVN.ARS.WFZ
-WEAPONS FREE ZONE
-G*G*AAW---****X
-
-N/A
-TACGRP.C2GM.DCPN
-DECEPTION
-G*G*P-----****X
-
-
-TACGRP.C2GM.DCPN.DMY
-DUMMY (DECEPTION/DECOY)
-G*G*PD----****X
-
-N/A
-TACGRP.C2GM.DCPN.AAFF
-AXIS OF ADVANCE FOR FEINT
-G*G*PA----****X
-
-N/A
-TACGRP.C2GM.DCPN.DAFF
-DIRECTION OF ATTACK FOR FEINT
-G*G*PF----****X
-
-N/A
-TACGRP.C2GM.DCPN.DMA
-DECOY MINED AREA
-G*G*PM----****X
-
-N/A
-TACGRP.C2GM.DCPN.DMAF
-DECOY MINED AREA, FENCED
-G*G*PY----****X
-
-N/A
-TACGRP.C2GM.DCPN.DMYMS
-DUMMY MINEFIELD (STATIC)
-G*G*PN----****X
-
- -
-ACGRP.C2GM.DCPN.DMYMD
-DUMMY MINEFIELD (DYNAMIC)
-G*G*PC----****X
-
-N/A
-TACGRP.C2GM.DEF
-DEFENSE
-G*G*D-----****X
-
-
-TACGRP.C2GM.DEF.PNT
-POINTS
-G*G*DP----****X
-
-
-TACGRP.C2GM.DEF.PNT.TGTREF
-TARGET REFERENCE POINT (TRP)
-G*G*DPT---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.DEF.PNT.OBSPST
-OBSERVATION POST/OUTPOST
-G*G*DPO---****X
-
- -
-TACGRP.C2GM.DEF.PNT.OBSPST.CBTPST
-COMBAT OUTPOST
-G*G*DPOC--****X
-
- -
-TACGRP.C2GM.DEF.PNT.OBSPST.RECON
-OBSERVATION POST OCCUPIED BY DISMOUNTED SCOUTS OR RECONNAISSANCE
-G*G*DPOR--****X
-
- -
-TACGRP.C2GM.DEF.PNT.OBSPST.FWDOP
-FORWARD OBSERVER POSITION
-G*G*DPOF--****X
-
- -
-TACGRP.C2GM.DEF.PNT.OBSPST.SOP
-SENSOR OUTPOST/LISTENING POST (OP/LP)
-G*G*DPOS--****X
-
- -
-TACGRP.C2GM.DEF.PNT.OBSPST.CBRNOP
-CBRN OBSERVATION POST (DISMOUNTED)
-G*G*DPON--****X
-
- -
-TACGRP.C2GM.DEF.LNE
-LINES
-G*G*DL----****X
-
-
-TACGRP.C2GM.DEF.LNE.FEBA
-FORWARD EDGE OF BATTLE AREA (FEBA)
-G*G*DLF---****X
-
-N/A
-TACGRP.C2GM.DEF.LNE.PDF
-PRINCIPAL DIRECTION OF FIRE (PDF)
-G*G*DLP---****X
-
-N/A
-TACGRP.C2GM.DEF.ARS
-AREAS
-G*G*DA----****X
-
-
-TACGRP.C2GM.DEF.ARS.BTLPSN
-BATTLE POSITION
-G*G*DAB---****X
-
-N/A
-TACGRP.C2GM.DEF.ARS.BTLPSN.PBNO
-PREPARED BUT NOT OCCUPIED
-G*G*DABP--****X
-
-N/A
-TACGRP.C2GM.DEF.ARS.EMTARA
-ENGAGEMENT AREA
-G*G*DAE---****X
-
-N/A
-TACGRP.C2GM.OFF
-OFFENSE
-G*G*O-----****X
-
-
-TACGRP.C2GM.OFF.PNT
-POINTS
-G*G*OP----****X
-
-
-TACGRP.C2GM.OFF.PNT.PNTD
-POINT OF DEPARTURE
-G*G*OPP---****X
-
-Template
-
-Example
- -
-TACGRP.C2GM.OFF.LNE
-LINES
-G*G*OL----****X
-
-
-TACGRP.C2GM.OFF.LNE.AXSADV
-AXIS OF ADVANCE
-G*G*OLA---****X
-
-
-TACGRP.C2GM.OFF.LNE.AXSADV.AVN
-AVIATION
-G*G*OLAV--****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.AXSADV.ABN
-AIRBORNE
-G*G*OLAA--****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.AXSADV.ATK
-ATTACK, ROTARY WING
-G*G*OLAR--****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.AXSADV.GRD
-GROUND
-G*G*OLAG--****X
-
-
-TACGRP.C2GM.OFF.LNE.AXSADV.GRD.MANATK
-MAIN ATTACK
-G*G*OLAGM-****X
-
-COMPLETED -
-TACGRP.C2GM.OFF.LNE.AXSADV.GRD.SUPATK
-SUPPORTING ATTACK
-G*G*OLAGS-****X
-
-COMPLETED -
-TACGRP.C2GM.OFF.LNE.DIRATK
-DIRECTION OF ATTACK
-G*G*OLK---****X
-
-
-TACGRP.C2GM.OFF.LNE.DIRATK.AVN
-AVIATION
-G*G*OLKA--****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.DIRATK.GRD
-GROUND
-G*G*OLKG--****X
-
-
-TACGRP.C2GM.OFF.LNE.DIRATK.GRD.MANATK
-MAIN ATTACK
-G*G*OLKGM-****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.DIRATK.GRD.SUPATK
-SUPPORTING ATTACK
-G*G*OLKGS-****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.FCL
-FINAL COORDINATION LINE
-G*G*OLF---****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.INFNLE
-INFILTRATION LANE
-G*G*OLI---****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.LMTADV
-LIMIT OF ADVANCE
-G*G*OLL---****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.LD
-LINE OF DEPARTURE
-G*G*OLT---****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.LDLC
-LINE OF DEPARTURE/LINE OF CONTACT (LD/LC)
-G*G*OLC---****X
-
-N/A
-TACGRP.C2GM.OFF.LNE.PLD
-PROBABLE LINE OF DEPLOYMENT (PLD)
-G*G*OLP---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS
-AREAS
-G*G*OA----****X
-
-
-TACGRP.C2GM.OFF.ARS.ASTPSN
-ASSAULT POSITION
-G*G*OAA---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS.ATKPSN
-ATTACK POSITION
-G*G*OAK---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS.AFP
-ATTACK BY FIRE POSITION
-G*G*OAF---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS.SFP
-SUPPORT BY FIRE POSITION
-G*G*OAS---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS.OBJ
-OBJECTIVE
-G*G*OAO---****X
-
-N/A
-TACGRP.C2GM.OFF.ARS.PBX
-PENETRATION BOX
-G*G*OAP---****X
-
-N/A
-TACGRP.C2GM.SPL
-SPECIAL
-G*G*S-----****X
-
-
-TACGRP.C2GM.SPL.LNE
-LINE
-G*G*SL----****X
-
-
-TACGRP.C2GM.SPL.LNE.AMB
-AMBUSH
-G*G*SLA---****X
-
-COMPLETED -
-TACGRP.C2GM.SPL.LNE.HGL
-HOLDING LINE
-G*G*SLH---****X
-
-N/A
-TACGRP.C2GM.SPL.LNE.REL
-RELEASE LINE
-G*G*SLR---****X
-
-N/A
-TACGRP.C2GM.SPL.LNE.BRGH
-BRIDGEHEAD
-G*G*SLB---****X
-
-N/A
-TACGRP.C2GM.SPL.ARA
-AREA
-G*G*SA----****X
-
-
-TACGRP.C2GM.SPL.ARA.AOO
-AREA OF OPERATIONS (AO)
-G*G*SAO---****X
-
-N/A
-TACGRP.C2GM.SPL.ARA.AHD
-AIRHEAD
-G*G*SAA---****X
-
-N/A
-TACGRP.C2GM.SPL.ARA.ENCMT
-ENCIRCLEMENT
-G*G*SAE---****X
-
-N/A
-TACGRP.C2GM.SPL.ARA.NAI
-NAMED AREA OF INTEREST (NAI)
-G*G*SAN---****X
-
-COMPLETED -
-TACGRP.C2GM.SPL.ARA.TAIS
-TARGETED AREA OF INTEREST (TAI)
-G*G*SAT---****X
-
-COMPLETED -
-TACGRP.MOBSU
-MOBILITY/SURVIVABILITY
-G*M*------****X
-
-
-TACGRP.MOBSU.OBST
-OBSTACLES
-G*M *O-----****X
-
-
-TACGRP.MOBSU.OBST.GNL
-GENERAL
-G*M*OG----****X
-
-
-TACGRP.MOBSU.OBST.GNL.BLT
-BELT
-G*M*OGB---****X
-
-N/A
-TACGRP.MOBSU.OBST.GNL.LNE
-LINE
-G*M*OGL---****X
-
-N/A
-TACGRP.MOBSU.OBST.GNL.Z
-ZONE
-G*M*OGZ---****X
-
-N/A
-TACGRP.MOBSU.OBST.GNL.OFA
-OBSTACLE FREE AREA
-G*M*OGF---****X
-
-N/A
-TACGRP.MOBSU.OBST.GNL.ORA
-OBSTACLE RESTRICTED AREA
-G*M *OGR---****X
-
-N/A
-TACGRP.MOBSU.OBST.ABS
-ABATIS
-G*M*OS----****X
-
-N/A
-TACGRP.MOBSU.OBST.ATO
-ANTITANK OBSTACLES
-G*M*OA----****X
-
-
-TACGRP.MOBSU.OBST.ATO.ATD
-ANTITANK DITCH
-G*M*OAD---****X
-
-
-TACGRP.MOBSU.OBST.ATO.ATD.ATDUC
-UNDER CONSTRUCTION
-G*M*OADU--****X
-
-N/A
-TACGRP.MOBSU.OBST.ATO.ATD.ATDC
-COMPLETE
-G*M*OADC--****X
-
-N/A
-TACGRP.MOBSU.OBST.ATO.ATDATM
-ANTITANK DITCH REINFORCED WITH ANTITANK MINES
-G*M*OAR---****X
-
-N/A
-TACGRP.MOBSU.OBST.ATO.TDTSM
-ANTITANK OBSTACLES: TETRAHEDRONS, DRAGONS TEETH, AND OTHER SIMILAR OBSTACLES
-G*M*OAO---****X
-
-
-TACGRP.MOBSU.OBST.ATO.TDTSM.FIXPFD
-FIXED AND PREFABRICATED
-G*M*OAOF--****X
-
- -
-TACGRP.MOBSU.OBST.ATO.TDTSM.MVB
-MOVEABLE
-G*M*OAOM--****X
-
- -
-TACGRP.MOBSU.OBST.ATO.TDTSM.MVBPFD
-MOVEABLE AND PREFABRICATED
-G*M*OAOP--****X
-
- -
-TACGRP.MOBSU.OBST.ATO.ATW
-ANTITANK WALL
-G*M*OAW---****X
-
-N/A
-TACGRP.MOBSU.OBST.BBY
-BOOBY TRAP
-G*M*OB----****X
-
- -
-TACGRP.MOBSU.OBST.MNE
-MINES
-G*M*OM----****X
-
-
-TACGRP.MOBSU.OBST.MNE.USPMNE
-UNSPECIFIED MINE
-G*M*OMU---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.ATMNE
-ANTITANK MINE (AT)
-G*M*OMT---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.ATMAHD
-ANTITANK MINE WITH ANTIHANDLING DEVICE
-G*M*OMD---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.ATMDIR
-ANTITANK MINE (DIRECTIONAL)
-G*M*OME---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.APMNE
-ANTIPERSONNEL (AP) MINES
-G*M*OMP---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.WAMNE
-WIDE AREA MINES
-G*M*OMW---****X
-
- -
-TACGRP.MOBSU.OBST.MNE.MCLST
-MINE CLUSTER
-G*M*OMC---****X
-
-N/A
-TACGRP.MOBSU.OBST.MNEFLD
-MINEFIELDS
-G*M*OF----****X
-
-
-TACGRP.MOBSU.OBST.MNEFLD.STC
-STATIC DEPICTION
-G*M*OFS---****X
-
- -Template
-
-Example: Friendly Present
-
-Example: Enemy Known
-
-Example: Friendly Planned
-
-Example: Enemy Suspected
- -
- - -
-TACGRP.MOBSU.OBST.MNEFLD.DYN
-DYNAMIC DEPICTION
-G*M*OFD---****X
-
-N/A
-TACGRP.MOBSU.OBST.MNEFLD.GAP
-GAP
-G*M*OFG---****X
-
-N/A
-TACGRP.MOBSU.OBST.MNEFLD.MNDARA
-MINED AREA
-G*M*OFA---****X
-
-N/A
-TACGRP.MOBSU.OBST.OBSEFT
-OBSTACLE EFFECT
-G*M*OE----****X
-
-
-TACGRP.MOBSU.OBST.OBSEFT.BLK
-BLOCK
-G*M*OEB---****X
-
-N/A
-TACGRP.MOBSU.OBST.OBSEFT.FIX
-FIX
-G*M*OEF---****X
-
-N/A
-TACGRP.MOBSU.OBST.OBSEFT.TUR
-TURN
-G*M*OET---****X
-
-N/A
-TACGRP.MOBSU.OBST.OBSEFT.DRT
-DISRUPT
-G*M*OED---****X
-
-N/A
-TACGRP.MOBSU.OBST.UXO
-UNEXPLODED ORDNANCE AREA (UXO)
-G*M*OU----****X
-
-N/A
-TACGRP.MOBSU.OBST.RCBB
-ROADBLOCKS, CRATERS, AND BLOWN BRIDGES
-G*M*OR----****X
-
-N/A
-TACGRP.MOBSU.OBST.RCBB.PLND
-PLANNED
-G*M*ORP---****X
-
-N/A
-TACGRP.MOBSU.OBST.RCBB.SAFE
-EXPLOSIVES, STATE OF READINESS 1 (SAFE)
-G*M*ORS---****X
-
-N/A
-TACGRP.MOBSU.OBST.RCBB.ABP
-EXPLOSIVES, STATE OF READINESS 2 (ARMED-BUT PASSABLE)
-G*M*ORA---****X
-
-N/A
-TACGRP.MOBSU.OBST.RCBB.EXCD
-ROADBLOCK COMPLETE (EXECUTED)
-G*M*ORC---****X
-
-N/A
-TACGRP.MOBSU.OBST.TRIPWR
-TRIP WIRE
-G*M*OT----****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS
-WIRE OBSTACLE
-G*M*OW----****X
-
-
-TACGRP.MOBSU.OBST.WREOBS.USP
-UNSPECIFIED
-G*M*OWU---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.SNGFNC
-SINGLE FENCE
-G*M*OWS---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.DBLFNC
-DOUBLE FENCE
-G*M*OWD---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.DAFNC
-DOUBLE APRON FENCE
-G*M*OWA---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.LWFNC
-LOW WIRE FENCE
-G*M*OWL---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.HWFNC
-HIGH WIRE FENCE
-G*M*OWH---****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.CCTA
-CONCERTINA
-G*M*OWC---****X
-
-
-TACGRP.MOBSU.OBST.WREOBS.CCTA.SNG
-SINGLE CONCERTINA
-G*M*OWCS--****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.CCTA.DBLSTD
-DOUBLE STRAND CONCERTINA
-G*M*OWCD--****X
-
-N/A
-TACGRP.MOBSU.OBST.WREOBS.CCTA.TRISTD
-TRIPLE STRAND CONCERTINA
-G*M*OWCT--****X
-
-N/A
-TACGRP.MOBSU.OBST.AVN
-AVIATION
-G*M*OH----****X
-
-
-TACGRP.MOBSU.OBST.AVN.TWR
-TOWER
-G*M*OHT---****X
-
-
-TACGRP.MOBSU.OBST.AVN.TWR.LOW
-LOW
-G*M*OHTL--****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.OBST.AVN.TWR.HIGH
-HIGH
-G*M*OHTH--****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.OBST.AVN.OHWIRE
-OVERHEAD WIRE/POWER LINE
-G*M*OHO---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP
-OBSTACLE BYPASS
-G*M*B-----****X
-
-
-TACGRP.MOBSU.OBSTBP.DFTY
-OBSTACLE BYPASS DIFFICULTY
-G*M*BD----****X
-
-
-TACGRP.MOBSU.OBSTBP.DFTY.ESY
-BYPASS EASY
-G*M*BDE---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.DFTY.DFT
-BYPASS DIFFICULT
-G*M*BDD---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.DFTY.IMP
-BYPASS IMPOSSIBLE
-G*M*BDI---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE
-CROSSING SITE/WATER CROSSING
-G*M*BC----****X
-
-
-TACGRP.MOBSU.OBSTBP.CSGSTE.ASTCA
-ASSAULT CROSSING AREA
-G*M*BCA---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.BRG
-BRIDGE OR GAP
-G*M*BCB---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.FRY
-FERRY
-G*M*BCF---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.FRDESY
-FORD EASY
-G*M*BCE---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.FRDDFT
-FORD DIFFICULT
-G*M*BCD---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.LANE
-LANE
-G*M*BCL---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.RFT
-RAFT SITE
-G*M*BCR---****X
-
-N/A
-TACGRP.MOBSU.OBSTBP.CSGSTE.ERP
-ENGINEER REGULATING POINT
-G*M*BCP---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.SU
-SURVIVABILITY
-G*M*S-----****X
-
-
-TACGRP.MOBSU.SU.ESTOF
-EARTHWORK, SMALL TRENCH OR FORTIFICATION
-G*M*SE----****X
-
- -
-TACGRP.MOBSU.SU.FRT
-FORT
-G*M*SF----****X
-
- -
-TACGRP.MOBSU.SU.FTFDLN
-FORTIFIED LINE
-G*M*SL----****X
-
-N/A
-TACGRP.MOBSU.SU.FEWS
-FOXHOLE, EMPLACEMENT OR WEAPON SITE
-G*M*SW----****X
-
-N/A
-TACGRP.MOBSU.SU.STRGPT
-STRONG POINT
-G*M*SP----****X
-
-N/A
-TACGRP.MOBSU.SU.SUFSHL
-SURFACE SHELTER
-G*M*SS----****X
-
- -
-TACGRP.MOBSU.SU.UGDSHL
-UNDERGROUND SHELTER
-G*M*SU----****X
-
- -
-TACGRP.MOBSU.CBRN
-CHEMICAL, BIOLOGICAL, RADIOLOGICAL, AND NUCLEAR
-G*M*N-----****X
-
-
-TACGRP.MOBSU.CBRN.MSDZ
-MINIMUM SAFE DISTANCE ZONES
-G*M*NM----****X
-
-N/A
-TACGRP.MOBSU.CBRN.NDGZ
-NUCLEAR DETONATIONS GROUND ZERO
-G*M*NZ----****X
-
-Template
-
-Examples
- -
- -
- -
-TACGRP.MOBSU.CBRN.FAOTP
-FALLOUT PRODUCING
-G*M*NF----****X
-
- -
-TACGRP.MOBSU.CBRN.RADA
-RADIOACTIVE AREA
-G*M*NR----****X
-
-N/A
-TACGRP.MOBSU.CBRN.BIOCA
-BIOLOGICALLY CONTAMINATED AREA
-G*M*NB----****X
-
-N/A
-TACGRP.MOBSU.CBRN.CMLCA
-CHEMICALLY CONTAMINATED AREA
-G*M*NC----****X
-
-N/A
-TACGRP.MOBSU.CBRN.REEVNT
-RELEASE EVENTS
-G*M*NE----****X
-
-
-TACGRP.MOBSU.CBRN.REEVNT.BIO
-BIOLOGICAL
-G*M*NEB---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.REEVNT.CML
-CHEMICAL
-G*M*NEC---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP
-DECONTAMINATION (DECON) POINTS
-G*M*ND----****X
-
-
-TACGRP.MOBSU.CBRN.DECONP.USP
-DECON SITE/POINT (UNSPECIFIED)
-G*M*NDP---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.ALTUSP
-ALTERNATE DECON SITE/POINT (UNSPECIFIED)
-G*M*NDA---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.TRP
-DECON SITE/POINT (TROOPS)
-G*M*NDT---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.EQT
-DECON SITE/POINT (EQUIPMENT)
-G*M*NDE---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.EQTTRP
-DECON SITE/POINT (EQUIPMENT AND TROOPS)
-G*M*NDB---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.OPDECN
-DECON SITE/POINT (OPERATIONAL DECONTAMINATION)
-G*M*NDO---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DECONP.TRGH
-DECON SITE/POINT (THOROUGH DECONTAMINATION)
-G*M*NDD---****X
-
-Template
-
-Example
- -
-TACGRP.MOBSU.CBRN.DRCL
-DOSE RATE CONTOUR LINES
-G*M*NL----****X
-
-N/A
-TACGRP.FSUPP
-FIRE SUPPORT
-G*F*------****X
-
-
-TACGRP.FSUPP.PNT
-POINT
-G*F*P-----****X
-
-
-TACGRP.FSUPP.PNT.TGT
-TARGET
-G*F*PT----****X
-
-
-TACGRP.FSUPP.PNT.TGT.PTGT
-POINT/SINGLE TARGET
-G*F*PTS---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.TGT.NUCTGT
-NUCLEAR TARGET
-G*F*PTN---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT
-COMMAND & CONTROL POINTS
-G*F*PC----****X
-
-
-TACGRP.FSUPP.PNT.C2PNT.FSS
-FIRE SUPPORT STATION
-G*F*PCF---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT.SCP
-SURVEY CONTROL POINT
-G*F*PCS---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT.FP
-FIRING POINT
-G*F*PCB---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT.RP
-RELOAD POINT
-G*F*PCR---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT.HP
-HIDE POINT
-G*F*PCH---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.PNT.C2PNT.LP
-LAUNCH POINT
-G*F*PCL---****X
-
-Template
-
-Example
- -
-TACGRP.FSUPP.LNE
-LINES
-G*F*L-----****X
-
-
-TACGRP.FSUPP.LNE.LNRTGT
-LINEAR TARGET
-G*F*LT----****X
-
-N/A
-TACGRP.FSUPP.LNE.LNRTGT.LSTGT
-LINEAR SMOKE TARGET
-G*F*LTS---****X
-
-N/A
-TACGRP.FSUPP.LNE.LNRTGT.FPF
-FINAL PROTECTIVE FIRE (FPF)
-G*F*LTF---****X
-
-N/A
-TACGRP.FSUPP.LNE.C2LNE
-COMMAND & CONTROL LINES
-G*F*LC----****X
-
-
-TACGRP.FSUPP.LNE.C2LNE.FSCL
-FIRE SUPPORT COORDINATION LINE (FSCL)
-G*F*LCF---****X
-
-N/A
-TACGRP.FSUPP.LNE.C2LNE.CFL
-COORDINATED FIRE LINE (CFL)
-G*F*LCC---****X
-
-N/A
-TACGRP.FSUPP.LNE.C2LNE.NFL
-NO-FIRE LINE (NFL)
-G*F*LCN---****X
-
-N/A
-TACGRP.FSUPP.LNE.C2LNE.RFL
-RESTRICTIVE FIRE LINE (RFL)
-G*F*LCR---****X
-
-N/A
-TACGRP.FSUPP.LNE.C2LNE.MFP
-MUNITION FLIGHT PATH (MFP)
-G*F*LCM---****X
-
-N/A
-TACGRP.FSUPP.ARS
-AREAS
-G*F*A-----****X
-
-
-TACGRP.FSUPP.ARS.ARATGT
-AREA TARGET
-G*F*AT----****X
-
-N/A
-TACGRP.FSUPP.ARS.ARATGT.RTGTGT
-RECTANGULAR TARGET
-G*F*ATR---****X
-
-N/A -
-TACGRP.FSUPP.ARS.ARATGT.CIRTGT
-CIRCULAR TARGET
-G*F*ATC---****X
-
-N/A -
-TACGRP.FSUPP.ARS.ARATGT.SGTGT
-SERIES OR GROUP OF TARGETS
-G*F*ATG---****X
-
-N/A
-TACGRP.FSUPP.ARS.ARATGT.SMK
-SMOKE
-G*F*ATS---****X
-
-N/A
-TACGRP.FSUPP.ARS.ARATGT.BMARA
-BOMB AREA
-G*F*ATB---****X
-
-N/A
-TACGRP.FSUPP.ARS.C2ARS
-COMMAND & CONTROL AREAS
-G*F*AC----****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.FSA
-FIRE SUPPORT AREA (FSA)
-G*F*ACS---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.FSA.IRR
-FIRE SUPPORT AREA (FSA), IRREGULAR
-G*F*ACSI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.FSA.RTG
-FIRE SUPPORT AREA (FSA), RECTANGULAR
-G*F*ACSR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.FSA.CIRCLR
-FIRE SUPPORT AREA (FSA), CIRCULAR
-G*F*ACSC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ACA
-AIRSPACE COORDINATION AREA (ACA)
-G*F*ACA---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.ACA.IRR
-AIRSPACE COORDINATION AREA (ACA), IRREGULAR
-G*F*ACAI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ACA.RTG
-AIRSPACE COORDINATION AREA (ACA), RECTANGULAR
-G*F*ACAR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ACA.CIRCLR
-AIRSPACE COORDINATION AREA (ACA), CIRCULAR
-G*F*ACAC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.FFA
-FREE FIRE AREA (FFA)
-G*F*ACF---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.FFA.IRR
-FREE FIRE AREA (FFA), IRREGULAR
-G*F*ACFI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.FFA.RTG
-FREE FIRE AREA (FFA), RECTANGULAR
-G*F*ACFR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.FFA.CIRCLR
-FREE FIRE AREA (FFA), CIRCULAR
-G*F*ACFC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.NFA
-NO-FIRE AREA (NFA)
-G*F*ACN---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.NFA.IRR
-NO FIRE AREA (NFA), IRREGULAR
-G*F*ACNI--****X
-
-N/A
-TACGRP.FSUPP.ARS.C2ARS.NFA.RTG
-NO FIRE AREA (NFA), RECTANGULAR
-G*F*ACNR--****X
-
-N/A
-TACGRP.FSUPP.ARS.C2ARS.NFA.CIRCLR
-NO FIRE AREA (NFA), CIRCULAR
-G*F*ACNC--****X
-
-N/A -
-TACGRP.FSUPP.ARS.C2ARS.RFA
-RESTRICTIVE FIRE AREA (RFA)
-G*F*ACR---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.RFA.IRR
-RESTRICTIVE FIRE AREA (RFA), IRREGULAR
-G*F*ACRI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.RFA.RTG
-RESTRICTIVE FIRE AREA (RFA), RECTANGULAR
-G*F*ACRR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.RFA.CIRCLR
-RESTRICTIVE FIRE AREA (RFA), CIRCULAR
-G*F*ACRC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.PAA
-POSITION AREA FOR ARTILLERY (PAA)
-G*F*ACP---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.PAA.RTG
-POSITION AREA FOR ARTILLERY (PAA), RECTANGULAR
-G*F*ACPR--****X
-
-N/A
-TACGRP.FSUPP.ARS.C2ARS.PAA.CIRCLR
-POSITION AREA FOR ARTILLERY (PAA), CIRCULAR
-G*F*ACPC--****X
-
-N/A -
-TACGRP.FSUPP.ARS.C2ARS.SNSZ
-SENSOR ZONE
-G*F*ACE---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.SNSZ.IRR
-SENSOR ZONE, IRREGULAR
-G*F*ACEI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.SNSZ.RTG
-SENSOR ZONE, RECTANGULAR
-G*F*ACER--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.SNSZ.CIRCLR
-SENSOR ZONE, CIRCULAR
-G*F*ACEC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.DA
-DEAD SPACE AREA (DA)
-G*F*ACD---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.DA.IRR
-DEAD SPACE AREA (DA), IRREGULAR
-G*F*ACDI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.DA.RTG
-DEAD SPACE AREA (DA), RECTANGULAR
-G*F*ACDR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.DA.CIRCLR
-DEAD SPACE AREA (DA), CIRCULAR
-G*F*ACDC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ZOR
-ZONE OF RESPONSIBILITY (ZOR)
-G*F*ACZ---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.ZOR.IRR
-ZONE OF RESPONSIBILITY (ZOR), IRREGULAR
-G*F*ACZI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ZOR.RTG
-ZONE OF RESPONSIBILITY (ZOR), RECTANGULAR
-G*F*ACZR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.ZOR.CIRCLR
-ZONE OF RESPONSIBILITY (ZOR), CIRCULAR
-G*F*ACZC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TBA
-TARGET BUILD-UP AREA (TBA)
-G*F*ACB---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.TBA.IRR
-TARGET BUILD UP AREA (TBA), IRREGULAR
-G*F*ACBI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TBA.RTG
-TARGET BUILD UP AREA (TBA), RECTANGULAR
-G*F*ACBR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TBA.CIRCLR
-TARGET BUILD UP AREA (TBA), CIRCULAR
-G*F*ACBC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TVAR
-TARGET VALUE AREA (TVAR)
-G*F*ACV---****X
-
-
-TACGRP.FSUPP.ARS.C2ARS.TVAR.IRR
-TARGET VALUE AREA (TVAR), IRREGULAR
-G*F*ACVI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TVAR.RTG
-TARGET VALUE AREA (TVAR), RECTANGULAR
-G*F*ACVR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TVAR.CIRCLR
-TARGET VALUE AREA (TVAR), CIRCULAR
-G*F*ACVC--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.C2ARS.TGMF
-TERMINALLY GUIDED MUNITION FOOTPRINT (TGMF)
-G*F*ACT---****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ
-TARGET ACQUISITION ZONES
-G*F*AZ----****X
-
-
-TACGRP.FSUPP.ARS.TGTAQZ.ATIZ
-ARTILLERY TARGET INTELLIGENCE (ATI) ZONE
-G*F*AZI---****X
-
-
-TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.IRR
-ARTILLERY TARGET INTELLIGENCE (ATI) ZONE, IRREGULAR
-G*F*AZII--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.RTG
-ARTILLERY TARGET INTELLIGENCE (ATI) ZONE, RECTANGULAR
-G*F*AZIR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CFFZ
-CALL FOR FIRE ZONE (CFFZ)
-G*F*AZX---****X
-
-
-TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.IRR
-CALL FOR FIRE ZONE (CFFZ), IRREGULAR
-G*F*AZXI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.RTG
-CALL FOR FIRE ZONE (CFFZ), RECTANGULAR
-G*F*AZXR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CNS
-CENSOR ZONE
-G*F*AZC---****X
-
-
-TACGRP.FSUPP.ARS.TGTAQZ.CNS.IRR
-CENSOR ZONE, IRREGULAR
-G*F*AZCI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CNS.RTG
-CENSOR ZONE, RECTANGULAR
-G*F*AZCR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CFZ
-CRITICAL FRIENDLY ZONE (CFZ)
-G*F*AZF---****X
-
-
-TACGRP.FSUPP.ARS.TGTAQZ.CFZ.IRR
-CRITICAL FRIENDLY ZONE (CFZ), IRREGULAR
-G*F*AZFI--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.TGTAQZ.CFZ.RTG
-CRITICAL FRIENDLY ZONE (CFZ), RECTANGULAR
-G*F*AZFR--****X
-
-COMPLETED -
-TACGRP.FSUPP.ARS.WPNRF
-WEAPON/SENSOR RANGE FANS
-G*F*AX----****X
-
-
-TACGRP.FSUPP.ARS.WPNRF.CIRCLR
-WEAPON/SENSOR RANGE FAN, CIRCULAR
-G*F*AXC---****X
-
-N/A -
-TACGRP.FSUPP.ARS.WPNRF.SCR
-WEAPON/SENSOR RANGE FAN, SECTOR
-G*F*AXS---****X
-
-N/A
-TACGRP.FSUPP.ARS.KLBOX
-KILL BOX
-G*F*AK----****X
-
-
-TACGRP.FSUPP.ARS.KLBOX.BLUE
-BLUE KILL BOX (BKB)
-G*F*AKB---****X
-
-
-TACGRP.FSUPP.ARS.KLBOX.BLUE.CIRCLR
-BLUE KILL BOX, CIRCULAR
-G*F*AKBC--****X
-
-N/A -
-TACGRP.FSUPP.ARS.KLBOX.BLUE.IRR
-BLUE KILL BOX, IRREGULAR
-G*F*AKBI--****X
-
-N/A
-TACGRP.FSUPP.ARS.KLBOX.BLUE.RTG
-BLUE KILL BOX, RECTANGULAR
-G*F*AKBR--****X
-
-N/A
-TACGRP.FSUPP.ARS.KLBOX.PURPLE
-PURPLE KILL BOX (PKB)
-G*F*AKP---****X
-
-
-TACGRP.FSUPP.ARS.KLBOX.PURPLE.CIRCLR
-PURPLE KILL BOX, CIRCULAR
-G*F*AKPC--****X
-
-N/A -
-TACGRP.FSUPP.ARS.KLBOX.PURPLE.IRR
-PURPLE KILL BOX, IRREGULAR
-G*F*AKPI--****X
-
-N/A
-TACGRP.FSUPP.ARS.KLBOX.PURPLE.RTG
-PURPLE KILL BOX, RECTANGULAR
-G*F*AKPR--****X
-
-N/A
-TACGRP.CSS
-COMBAT SERVICE SUPPORT
-G*S*------****X
-
-
-TACGRP.CSS.PNT
-POINTS
-G*S*P-----****X
-
-
-TACGRP.CSS.PNT.AEP
-AMBULANCE EXCHANGE POINT
-G*S*PX----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.CBNP
-CANNIBALIZATION POINT
-G*S*PC----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.CCP
-CASUALTY COLLECTION POINT
-G*S*PY----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.CVP
-CIVILIAN COLLECTION POINT
-G*S*PT----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.DCP
-DETAINEE COLLECTION POINT
-G*S*PD----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.EPWCP
-ENEMY PRISONER OF WAR (EPW) COLLECTION POINT
-G*S*PE----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.LRP
-LOGISTICS RELEASE POINT (LRP)
-G*S*PL----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.MCP
-MAINTENANCE COLLECTION POINT
-G*S*PM----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.RRRP
-REARM, REFUEL AND RESUPPLY POINT
-G*S*PR----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.ROM
-REFUEL ON THE MOVE (ROM) POINT
-G*S*PU----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.TCP
-TRAFFIC CONTROL POST (TCP)
-G*S*PO----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.TTP
-TRAILER TRANSFER POINT
-G*S*PI----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.UMC
-UNIT MAINTENANCE COLLECTION POINT
-G*S*PN----****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT
-SUPPLY POINTS
-G*S*PS----****X
-
-
-TACGRP.CSS.PNT.SPT.GNL
-GENERAL
-G*S*PSZ---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS1
-CLASS I
-G*S*PSA---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS2
-CLASS II
-G*S*PSB---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS3
-CLASS III
-G*S*PSC---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS4
-CLASS IV
-G*S*PSD---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS5
-CLASS V
-G*S*PSE---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS6
-CLASS VI
-G*S*PSF---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS7
-CLASS VII
-G*S*PSG---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS8
-CLASS VIII
-G*S*PSH---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS9
-CLASS IX
-G*S*PSI---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.SPT.CLS10
-CLASS X
-G*S*PSJ---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.AP
-AMMUNITION POINTS
-G*S*PA----****X
-
-
-TACGRP.CSS.PNT.AP.ASP
-AMMUNITION SUPPLY POINT (ASP)
-G*S*PAS---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.PNT.AP.ATP
-AMMUNITION TRANSFER POINT (ATP)
-G*S*PAT---****X
-
-Template
-
-Example
- -
-TACGRP.CSS.LNE
-LINES
-G*S*L-----****X
-
-
-TACGRP.CSS.LNE.CNY
-CONVOYS
-G*S*LC----****X
-
-
-TACGRP.CSS.LNE.CNY.MCNY
-MOVING CONVOY
-G*S*LCM---****X
-
-N/A
-TACGRP.CSS.LNE.CNY.HCNY
-HALTED CONVOY
-G*S*LCH---****X
-
-N/A
-TACGRP.CSS.LNE.SLPRUT
-SUPPLY ROUTES
-G*S*LR----****X
-
-
-TACGRP.CSS.LNE.SLPRUT.MSRUT
-MAIN SUPPLY ROUTE
-G*S*LRM---****X
-
-N/A
-TACGRP.CSS.LNE.SLPRUT.ASRUT
-ALTERNATE SUPPLY ROUTE
-G*S*LRA---****X
-
-N/A
-TACGRP.CSS.LNE.SLPRUT.1WTRFF
-ONE-WAY TRAFFIC
-G*S*LRO---****X
-
-N/A
-TACGRP.CSS.LNE.SLPRUT.ATRFF
-ALTERNATING TRAFFIC
-G*S*LRT---****X
-
-N/A
-TACGRP.CSS.LNE.SLPRUT.2WTRFF
-TWO-WAY TRAFFIC
-G*S*LRW---****X
-
-N/A
-TACGRP.CSS.ARA
-AREA
-G*S*A-----****X
-
-
-TACGRP.CSS.ARA.DHA
-DETAINEE HOLDING AREA
-G*S*AD----****X
-
-N/A
-TACGRP.CSS.ARA.EPWHA
-ENEMY PRISONER OF WAR (EPW) HOLDING AREA
-G*S*AE----****X
-
-N/A
-TACGRP.CSS.ARA.FARP
-FORWARD ARMING AND REFUELING AREA (FARP)
-G*S*AR----****X
-
-N/A
-TACGRP.CSS.ARA.RHA
-REFUGEE HOLDING AREA
-G*S*AH----****X
-
-N/A
-TACGRP.CSS.ARA.SUPARS
-SUPPORT AREAS
-G*S*AS----****X
-
-
-TACGRP.CSS.ARA.SUPARS.BSA
-BRIGADE (BSA)
-G*S*ASB---****X
-
-N/A
-TACGRP.CSS.ARA.SUPARS.DSA
-DIVISION (DSA)
-G*S*ASD---****X
-
-N/A
-TACGRP.CSS.ARA.SUPARS.RSA
-REGIMENTAL (RSA)
-G*S*ASR---****X
-
-N/A
-TACGRP.OTH
-OTHER
-G*O*------****X
-
-
-TACGRP.OTH.ER
-EMERGENCY
-G*O*E-----****X
-
-
-TACGRP.OTH.ER.DTHAC
-DITCHED AIRCRAFT
-G*O*ED----****X
-
- -
-TACGRP.OTH.ER.PIW
-PERSON IN WATER
-G*O*EP----****X
-
- -
-TACGRP.OTH.ER.DSTVES
-DISTRESSED VESSEL
-G*O*EV----****X
-
- -
-TACGRP.OTH.HAZ
-HAZARD
-G*O*H-----****X
-
-
-TACGRP.OTH.HAZ.SML
-SEA MINE-LIKE
-G*O*HM----****X
-
- -
-TACGRP.OTH.HAZ.NVGL
-NAVIGATIONAL
-G*O*HN----****X
-
-N/A
-TACGRP.OTH.HAZ.IB
-ICEBERG
-G*O*HI----****X
-
- -
-TACGRP.OTH.HAZ.OLRG
-OIL RIG
-G*O*HO----****X
-
- -
-TACGRP.OTH.SSUBSR
-SEA SUBSURFACE RETURNS
-G*O*S-----****X
-
-
-TACGRP.OTH.SSUBSR.BTMRTN
-BOTTOM RETURN/NON-MILCO
-G*O*SB----****X
-
- -
-TACGRP.OTH.SSUBSR.BTMRTN.INS
-INSTALLATION/MANMADE
-G*O*SBM---****X
-
- -
-TACGRP.OTH.SSUBSR.BTMRTN.SBRSOO
-SEABED ROCK/STONE, OBSTACLE, OTHER
-G*O*SBN---****X
-
- -
-TACGRP.OTH.SSUBSR.BTMRTN.WRKND
-WRECK, NON DANGEROUS
-G*O*SBW---****X
-
- -
-TACGRP.OTH.SSUBSR.BTMRTN.WRKD
-WRECK, DANGEROUS
-G*O*SBX---****X
-
- -
-TACGRP.OTH.SSUBSR.MARLFE
-MARINE LIFE
-G*O*SM----****X
-
- -
-TACGRP.OTH.SSUBSR.SA
-SEA ANOMALY (WAKE, CURRENT, KNUCKLE)
-G*O*SS----****X
-
- -
-TACGRP.OTH.BERLNE
-BEARING LINE
-G*O*B-----****X
-
-N/A
-TACGRP.OTH.BERLNE.ELC
-ELECTRONIC
-G*O*BE----****X
-
-N/A
-TACGRP.OTH.BERLNE.ACU
-ACOUSTIC
-G*O*BA----****X
-
-N/A
-TACGRP.OTH.BERLNE.TPD
-TORPEDO
-G*O*BT----****X
-
-N/A
-TACGRP.OTH.BERLNE.EOPI
-ELECTRO-OPTICAL INTERCEPT
-G*O*BO----****X
-
-N/A
-TACGRP.OTH.FIX
-FIX
-G*O*F-----****X
-
-
-TACGRP.OTH.FIX.ACU
-ACOUSTIC
-G*O*FA----****X
-
- -
-TACGRP.OTH.FIX.EM
-ELECTRO-MAGNETIC
-G*O*FE----****X
-
- -
-TACGRP.OTH.FIX.EOP
-ELECTRO-OPTICAL
-G*O*FO----****X
-
- -
+ + + +

Milsymbol 2525C tactical points implementation

+ Milsymbol only support point symbols and not other graphics. +
+ +
+ By default milsymbol will draw all tactical points black, except hostile that will be drawn in red. You can override + this by setting monoColor to the desired color. +
+
+ + G*M*OMP---****X +
+ +
+ + GFM*OMP---****X +
+ +
+ + GHM*OMP---****X +
+ +
+ + GFM*OMP---****X (with monoColor set to blue) +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DESCRIPTION + SYMBOL +
+ TACGRP +
+ TACTICAL GRAPHICS +
+
+
+ TACGRP.TSK +
+ TACTICAL GRAPHICS TASKS +
+
+
+ TACGRP.TSK.BLK +
+ BLOCK +
+ G*T*B-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.BRH +
+ BREACH +
+ G*T*H-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.BYS +
+ BYPASS +
+ G*T*Y-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.CNZ +
+ CANALIZE +
+ G*T*C-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.CLR +
+ CLEAR +
+ G*T*X-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.CNT +
+ CONTAIN +
+ G*T*J-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.CATK +
+ COUNTERATTACK (CATK) +
+ G*T*K-----****X +
+
+ N/A +
+ TACGRP.TSK.CATK.CATKF +
+ COUNTERATTACK BY FIRE +
+ G*T*KF----****X +
+
+ N/A +
+ TACGRP.TSK.DLY +
+ DELAY +
+ G*T*L-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.DSTY +
+ DESTROY +
+ G*T*D-----****X +
+
+ +
+ TACGRP.TSK.DRT +
+ DISRUPT +
+ G*T*T-----****X +
+
+ N/A +
+ TACGRP.TSK.FIX +
+ FIX +
+ G*T*F-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.FLWASS +
+ FOLLOW AND ASSUME +
+ G*T*A-----****X +
+
+ N/A +
+ TACGRP.TSK.FLWASS.FLWSUP +
+ FOLLOW AND SUPPORT +
+ G*T*AS----****X +
+
+ N/A +
+ TACGRP.TSK.ITDT +
+ INTERDICT +
+ G*T*I-----****X +
+
+ +
+ TACGRP.TSK.ISL +
+ ISOLATE +
+ G*T*E-----****X +
+
+ COMPLETED +
+ TACGRP.TSK.NEUT +
+ NEUTRALIZE +
+ G*T*N-----****X +
+
+ +
+ TACGRP.TSK.OCC +
+ OCCUPY +
+ G*T*O-----****X +
+
+ N/A +
+ TACGRP.TSK.PNE +
+ PENETRATE +
+ G*T*P-----****X +
+
+ N/A +
+ TACGRP.TSK.RIP +
+ RELIEF IN PLACE (RIP) +
+ G*T*R-----****X +
+
+ N/A +
+ TACGRP.TSK.RTN +
+ RETAIN +
+ G*T*Q-----****X +
+
+ N/A +
+ TACGRP.TSK.RTM +
+ RETIREMENT +
+ G*T*M-----****X +
+
+ N/A +
+ TACGRP.TSK.SCE +
+ SECURE +
+ G*T*S-----****X +
+
+ N/A +
+ TACGRP.TSK.SEC +
+ SECURITY +
+ G-T*U---------X +
+
+ TACGRP.TSK.SEC.SCN +
+ SCREEN +
+ G*T*US----****X +
+
+ N/A +
+ TACGRP.TSK.SEC.GUD +
+ GUARD +
+ G*T*UG----****X +
+
+ N/A +
+ TACGRP.TSK.SEC.COV +
+ COVER +
+ G*T*UC----****X +
+
+ N/A +
+ TACGRP.TSK.SZE +
+ SEIZE +
+ G*T*Z-----****X +
+
+ N/A +
+ TACGRP.TSK.WDR +
+ WITHDRAW +
+ G*T*W-----****X +
+
+ N/A +
+ TACGRP.TSK.WDR.WDRUP +
+ WITHDRAW UNDER PRESSURE +
+ G*T*WP----****X +
+
+ N/A +
+ TACGRP.C2GM +
+ COMMAND AND CONTROL AND GENERAL MANEUVER +
+ G*G*------****X +
+
+ TACGRP.C2GM.GNL +
+ GENERAL +
+ G*G*G-----****X +
+
+ TACGRP.C2GM.GNL.PNT +
+ POINTS +
+ G*G*GP----****X +
+
+ TACGRP.C2GM.GNL.PNT.USW +
+ UNDER SEA WARFARE +
+ G*G*GPU---****X +
+
+ TACGRP.C2GM.GNL.PNT.USW.UH2 +
+ UNDERWATER +
+ G*G*GPUU--****X +
+
+ TACGRP.C2GM.GNL.PNT.USW.UH2.DTM +
+ DATUM +
+ G*G*GPUUD-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.UH2.BCON +
+ BRIEF CONTACT +
+ G*G*GPUUB-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.UH2.LCON +
+ LOST CONTACT +
+ G*G*GPUUL-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.UH2.SNK +
+ SINKER +
+ G*G*GPUUS-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY +
+ SONOBUOY +
+ G*G*GPUY--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.PTNCTR +
+ PATTERN CENTER +
+ G*G*GPUYP-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.DIFAR +
+ DIRECTIONAL FREQUENCY ANALYZING AND RECORDING (DIFAR) +
+ G*G*GPUYD-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.LOFAR +
+ LOW FREQUENCY ANALYZING AND RECORDING (LOFAR) +
+ G*G*GPUYL-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.CASS +
+ COMMAND ACTIVE SONOBUOY SYSTEM (CASS) +
+ G*G*GPUYC-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.DICASS +
+ DIRECTIONAL COMMAND ACTIVE SONOBUOY SYSTEM (DICASS) +
+ G*G*GPUYS-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.BT +
+ BATHYTHERMOGRAPH TRANSMITTING (BT) +
+ G*G*GPUYB-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.ANM +
+ ANM +
+ G*G*GPUYA-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.VLAD +
+ VERTICAL LINE ARRAY DIFAR (VLAD) +
+ G*G*GPUYV-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.ATAC +
+ ATAC +
+ G*G*GPUYT-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.RO +
+ RANGE ONLY (RO) +
+ G*G*GPUYR-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.KGP +
+ KINGPIN +
+ G*G*GPUYK-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SNBY.EXP +
+ SONOBUOY-EXPIRED +
+ G*G*GPUYX-***** +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SRH +
+ SEARCH +
+ G*G*GPUS--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SRH.ARA +
+ SEARCH AREA +
+ G*G*GPUSA-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SRH.DIPPSN +
+ DIP POSITION +
+ G*G*GPUSD-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.USW.SRH.CTR +
+ SEARCH CENTER +
+ G*G*GPUSC-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT +
+ REFERENCE POINT +
+ G*G*GPR---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.NAVREF +
+ NAVIGATIONAL REFERENCE POINT +
+ G*G*GPRN--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.SPLPNT +
+ SPECIAL POINT +
+ G*G*GPRS--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.DLRP +
+ DLRP +
+ G*G*GPRD--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.PIM +
+ POINT OF INTENDED MOVEMENT (PIM) +
+ G*G*GPRP--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.MRSH +
+ MARSHALL POINT +
+ G*G*GPRM--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.WAP +
+ WAYPOINT +
+ G*G*GPRW--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.CRDRTB +
+ CORRIDOR TAB +
+ G*G*GPRC--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.REFPNT.PNTINR +
+ POINT OF INTEREST +
+ G*G*GPRI--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.WPN +
+ WEAPON +
+ G*G*GPW---****X +
+
+ TACGRP.C2GM.GNL.PNT.WPN.AIMPNT +
+ AIM POINT +
+ G*G*GPWA--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.DRPPNT +
+ DROP POINT +
+ G*G*GPWD--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.ENTPNT +
+ ENTRY POINT +
+ G*G*GPWE--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.GRDZRO +
+ GROUND ZERO +
+ G*G*GPWG--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.MSLPNT +
+ MSL DETECT POINT +
+ G*G*GPWM--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.IMTPNT +
+ IMPACT POINT +
+ G*G*GPWI--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.WPN.PIPNT +
+ PREDICTED IMPACT POINT +
+ G*G*GPWP--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.FRMN +
+ FORMATION +
+ G*G*GPF---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.HBR +
+ HARBOR (GENERAL) +
+ G*G*GPH---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.HBR.PNTQ +
+ POINT Q +
+ G*G*GPHQ--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.HBR.PNTA +
+ POINT A +
+ G*G*GPHA--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.HBR.PNTY +
+ POINT Y +
+ G*G*GPHY--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.HBR.PNTX +
+ POINT X +
+ G*G*GPHX--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE +
+ ROUTE +
+ G*G*GPO---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE.RDV +
+ RENDEZVOUS +
+ G*G*GPOZ--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE.DVSN +
+ DIVERSIONS +
+ G*G*GPOD--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE.WAP +
+ WAYPOINT +
+ G*G*GPOW--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE.PIM +
+ PIM +
+ G*G*GPOP--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.RTE.PNTR +
+ POINT R +
+ G*G*GPOR--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL +
+ AIR CONTROL +
+ G*G*GPA---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.CAP +
+ COMBAT AIR PATROL (CAP) +
+ G*G*GPAP--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ABNEW +
+ AIRBORNE EARLY WARNING (AEW) +
+ G*G*GPAW--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.TAK +
+ TANKING +
+ G*G*GPAK--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ASBWF +
+ ANTISUBMARINE WARFARE, FIXED WING +
+ G*G*GPAA--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ASBWR +
+ ANTISUBMARINE WARFARE, ROTARY WING +
+ G*G*GPAH--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.SUWF +
+ SUCAP - FIXED WING +
+ G*G*GPAB--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.SUWR +
+ SUCAP - ROTARY WING +
+ G*G*GPAC--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.MIWF +
+ MIW - FIXED WING +
+ G*G*GPAD--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.MIWR +
+ MIW - ROTARY WING +
+ G*G*GPAE--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.SKEIP +
+ STRIKE IP +
+ G*G*GPAS--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.TCN +
+ TACAN +
+ G*G*GPAT--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.TMC +
+ TOMCAT +
+ G*G*GPAO--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.RSC +
+ RESCUE +
+ G*G*GPAR--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.RPH +
+ REPLENISH +
+ G*G*GPAL--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.UA +
+ UNMANNED AERIAL SYSTEM (UAS/UA) +
+ G*G*GPAF--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.VTUA +
+ VTUA +
+ G*G*GPAG--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ORB +
+ ORBIT +
+ G*G*GPAI--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ORBF8 +
+ ORBIT - FIGURE EIGHT +
+ G*G*GPAJ--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ORBRT +
+ ORBIT - RACE TRACK +
+ G*G*GPAM--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTL.ORBRD +
+ ORBIT - RANDOM, CLOSED +
+ G*G*GPAN--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT +
+ ACTION POINTS (GENERAL) +
+ G*G*GPP---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.CHKPNT +
+ CHECK POINT +
+ G*G*GPPK--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.CONPNT +
+ CONTACT POINT +
+ G*G*GPPC--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.CRDPNT +
+ COORDINATION POINT +
+ G*G*GPPO--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.DCNPNT +
+ DECISION POINT +
+ G*G*GPPD--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.LNKUPT +
+ LINKUP POINT +
+ G*G*GPPL--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.PSSPNT +
+ PASSAGE POINT +
+ G*G*GPPP--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.RAYPNT +
+ RALLY POINT +
+ G*G*GPPR--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.RELPNT +
+ RELEASE POINT +
+ G*G*GPPE--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.STRPNT +
+ START POINT +
+ G*G*GPPS--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.AMNPNT +
+ AMNESTY POINT +
+ G*G*GPPA--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.ACTPNT.WAP +
+ WAYPOINT +
+ G*G*GPPW--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL +
+ SEA SURFACE CONTROL STATION +
+ G*G*GPC---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.USV +
+ UNMANNED SURFACE VEHICLE (USV) CONTROL STATION +
+ G*G*GPCU--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.USV.RMV +
+ REMOTE MULTIMISSION VEHICLE (RMV) USV CONTROL STATION +
+ G*G*GPCUR-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.USV.ASW +
+ USV - ANTISUBMARINE WARFARE CONTROL STATION +
+ G*G*GPCUA-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.USV.SUW +
+ USV - SURFACE WARFARE CONTROL STATION +
+ G*G*GPCUS-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.USV.MIW +
+ USV - MINE WARFARE CONTROL STATION +
+ G*G*GPCUM-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.ASW +
+ ASW CONTROL STATION +
+ G*G*GPCA--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.SUW +
+ SUW CONTROL STATION +
+ G*G*GPCS--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.MIW +
+ MIW CONTROL STATION +
+ G*G*GPCM--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.PKT +
+ PICKET CONTROL STATION +
+ G*G*GPCP--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.RDV +
+ RENDEZVOUS CONTROL POINT +
+ G*G*GPCR--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.RSC +
+ RESCUE CONTROL POINT +
+ G*G*GPCC--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.REP +
+ REPLENISHMENT CONTROL POINT +
+ G*G*GPCE--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.SCTL.NCBTT +
+ NONCOMBATANT CONTROL STATION +
+ G*G*GPCN--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL +
+ SUBSURFACE CONTROL STATION +
+ G*G*GPB---****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.UUV +
+ UNMANNED UNDERWATER VEHICLE (UUV) CONTROL STATION +
+ G*G*GPBU--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.UUV.ASW +
+ UUV - ANTISUBMARINE WARFARE CONTROL STATION +
+ G*G*GPBUA-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.UUV.SUW +
+ UUV - SURFACE WARFARE CONTROL STATION +
+ G*G*GPBUS-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.UUV.MIW +
+ UUV - MINE WARFARE CONTROL STATION +
+ G*G*GPBUM-****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.SBSTN +
+ SUBMARINE CONTROL STATION +
+ G*G*GPBS--****X +
+
+ +
+ TACGRP.C2GM.GNL.PNT.UCTL.SBSTN.ASW +
+ ASW SUBMARINE CONTROL STATION +
+ G*G*GPBSA-****X +
+
+ +
+ TACGRP.C2GM.GNL.LNE +
+ LINES +
+ G*G*GL----****X +
+
+ TACGRP.C2GM.GNL.LNE.BNDS +
+ BOUNDARIES +
+ G*G*GLB---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.LNE.FLOT +
+ FORWARD LINE OF OWN TROOPS (FLOT) +
+ G*G*GLF---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.LNE.LOC +
+ LINE OF CONTACT +
+ G*G*GLC---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.LNE.PHELNE +
+ PHASE LINE +
+ G*G*GLP---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.LNE.LITLNE +
+ LIGHT LINE +
+ G*G*GLL---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS +
+ AREAS +
+ G*G*GA----****X +
+
+ TACGRP.C2GM.GNL.ARS.GENARA +
+ GENERAL AREA +
+ G*G*GAG---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.ABYARA +
+ ASSEMBLY AREA +
+ G*G*GAA---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.EMTARA +
+ ENGAGEMENT AREA +
+ G*G*GAE---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.FTFDAR +
+ FORTIFIED AREA +
+ G*G*GAF---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.DRPZ +
+ DROP ZONE +
+ G*G*GAD---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.EZ +
+ EXTRACTION ZONE (EZ) +
+ G*G*GAX---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.LZ +
+ LANDING ZONE (LZ) +
+ G*G*GAL---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.PZ +
+ PICKUP ZONE (PZ) +
+ G*G*GAP---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.SRHARA +
+ SEARCH AREA/RECONNAISSANCE AREA +
+ G*G*GAS---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.LAARA +
+ LIMITED ACCESS AREA +
+ G*G*GAY---****X +
+
+ N/A +
+ TACGRP.C2GM.GNL.ARS.AIRFZ +
+ AIRFIELD ZONE +
+ G*G*GAZ---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN +
+ AVIATION +
+ G*G*A-----****X +
+
+ TACGRP.C2GM.AVN.PNT +
+ POINTS +
+ G*G*AP----****X +
+
+ TACGRP.C2GM.AVN.PNT.ACP +
+ AIR CONTROL POINT (ACP) +
+ G*G*APP---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.AVN.PNT.COMMCP +
+ COMMUNICATIONS CHECKPOINT (CCP) +
+ G*G*APC---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.AVN.PNT.PUP +
+ PULL-UP POINT (PUP) +
+ G*G*APU---****X +
+
+ +
+ TACGRP.C2GM.AVN.PNT.DAPP +
+ DOWNED AIRCREW PICKUP POINT +
+ G*G*APD---****X +
+
+ +
+ TACGRP.C2GM.AVN.LNE +
+ LINES +
+ G*G*AL----****X +
+
+ TACGRP.C2GM.AVN.LNE.ACDR +
+ AIR CORRIDOR +
+ G*G*ALC---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.LNE.MRR +
+ MINIMUM RISK ROUTE (MRR) +
+ G*G*ALM---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.LNE.SAAFR +
+ STANDARD-USE ARMY AIRCRAFT FLIGHT ROUTE (SAAFR) +
+ G*G*ALS---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.LNE.UAR +
+ UNMANNED AIRCRAFT (UA) ROUTE +
+ G*G*ALU---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.LNE.LLTR +
+ LOW LEVEL TRANSIT ROUTE (LLTR) +
+ G*G*ALL---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS +
+ AREAS +
+ G*G*AA----****X +
+
+ TACGRP.C2GM.AVN.ARS.ROZ +
+ RESTRICTED OPERATIONS ZONE (ROZ) +
+ G*G*AAR---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.SHRDEZ +
+ SHORT-RANGE AIR DEFENSE ENGAGEMENT ZONE (SHORADEZ) +
+ G*G*AAF---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.HIDACZ +
+ HIGH DENSITY AIRSPACE CONTROL ZONE (HIDACZ) +
+ G*G*AAH---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.MEZ +
+ MISSILE ENGAGEMENT ZONE (MEZ) +
+ G*G*AAM---****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.MEZ.LAMEZ +
+ LOW ALTITUDE MEZ +
+ G*G*AAML--****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.MEZ.HAMEZ +
+ HIGH ALTITUDE MEZ +
+ G*G*AAMH--****X +
+
+ N/A +
+ TACGRP.C2GM.AVN.ARS.WFZ +
+ WEAPONS FREE ZONE +
+ G*G*AAW---****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN +
+ DECEPTION +
+ G*G*P-----****X +
+
+ TACGRP.C2GM.DCPN.DMY +
+ DUMMY (DECEPTION/DECOY) +
+ G*G*PD----****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN.AAFF +
+ AXIS OF ADVANCE FOR FEINT +
+ G*G*PA----****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN.DAFF +
+ DIRECTION OF ATTACK FOR FEINT +
+ G*G*PF----****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN.DMA +
+ DECOY MINED AREA +
+ G*G*PM----****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN.DMAF +
+ DECOY MINED AREA, FENCED +
+ G*G*PY----****X +
+
+ N/A +
+ TACGRP.C2GM.DCPN.DMYMS +
+ DUMMY MINEFIELD (STATIC) +
+ G*G*PN----****X +
+
+ +
+ ACGRP.C2GM.DCPN.DMYMD +
+ DUMMY MINEFIELD (DYNAMIC) +
+ G*G*PC----****X +
+
+ N/A +
+ TACGRP.C2GM.DEF +
+ DEFENSE +
+ G*G*D-----****X +
+
+ TACGRP.C2GM.DEF.PNT +
+ POINTS +
+ G*G*DP----****X +
+
+ TACGRP.C2GM.DEF.PNT.TGTREF +
+ TARGET REFERENCE POINT (TRP) +
+ G*G*DPT---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST +
+ OBSERVATION POST/OUTPOST +
+ G*G*DPO---****X +
+
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST.CBTPST +
+ COMBAT OUTPOST +
+ G*G*DPOC--****X +
+
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST.RECON +
+ OBSERVATION POST OCCUPIED BY DISMOUNTED SCOUTS OR RECONNAISSANCE +
+ G*G*DPOR--****X +
+
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST.FWDOP +
+ FORWARD OBSERVER POSITION +
+ G*G*DPOF--****X +
+
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST.SOP +
+ SENSOR OUTPOST/LISTENING POST (OP/LP) +
+ G*G*DPOS--****X +
+
+ +
+ TACGRP.C2GM.DEF.PNT.OBSPST.CBRNOP +
+ CBRN OBSERVATION POST (DISMOUNTED) +
+ G*G*DPON--****X +
+
+ +
+ TACGRP.C2GM.DEF.LNE +
+ LINES +
+ G*G*DL----****X +
+
+ TACGRP.C2GM.DEF.LNE.FEBA +
+ FORWARD EDGE OF BATTLE AREA (FEBA) +
+ G*G*DLF---****X +
+
+ N/A +
+ TACGRP.C2GM.DEF.LNE.PDF +
+ PRINCIPAL DIRECTION OF FIRE (PDF) +
+ G*G*DLP---****X +
+
+ N/A +
+ TACGRP.C2GM.DEF.ARS +
+ AREAS +
+ G*G*DA----****X +
+
+ TACGRP.C2GM.DEF.ARS.BTLPSN +
+ BATTLE POSITION +
+ G*G*DAB---****X +
+
+ N/A +
+ TACGRP.C2GM.DEF.ARS.BTLPSN.PBNO +
+ PREPARED BUT NOT OCCUPIED +
+ G*G*DABP--****X +
+
+ N/A +
+ TACGRP.C2GM.DEF.ARS.EMTARA +
+ ENGAGEMENT AREA +
+ G*G*DAE---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF +
+ OFFENSE +
+ G*G*O-----****X +
+
+ TACGRP.C2GM.OFF.PNT +
+ POINTS +
+ G*G*OP----****X +
+
+ TACGRP.C2GM.OFF.PNT.PNTD +
+ POINT OF DEPARTURE +
+ G*G*OPP---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.C2GM.OFF.LNE +
+ LINES +
+ G*G*OL----****X +
+
+ TACGRP.C2GM.OFF.LNE.AXSADV +
+ AXIS OF ADVANCE +
+ G*G*OLA---****X +
+
+ TACGRP.C2GM.OFF.LNE.AXSADV.AVN +
+ AVIATION +
+ G*G*OLAV--****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.AXSADV.ABN +
+ AIRBORNE +
+ G*G*OLAA--****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.AXSADV.ATK +
+ ATTACK, ROTARY WING +
+ G*G*OLAR--****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.AXSADV.GRD +
+ GROUND +
+ G*G*OLAG--****X +
+
+ TACGRP.C2GM.OFF.LNE.AXSADV.GRD.MANATK +
+ MAIN ATTACK +
+ G*G*OLAGM-****X +
+
+ COMPLETED +
+ TACGRP.C2GM.OFF.LNE.AXSADV.GRD.SUPATK +
+ SUPPORTING ATTACK +
+ G*G*OLAGS-****X +
+
+ COMPLETED +
+ TACGRP.C2GM.OFF.LNE.DIRATK +
+ DIRECTION OF ATTACK +
+ G*G*OLK---****X +
+
+ TACGRP.C2GM.OFF.LNE.DIRATK.AVN +
+ AVIATION +
+ G*G*OLKA--****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.DIRATK.GRD +
+ GROUND +
+ G*G*OLKG--****X +
+
+ TACGRP.C2GM.OFF.LNE.DIRATK.GRD.MANATK +
+ MAIN ATTACK +
+ G*G*OLKGM-****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.DIRATK.GRD.SUPATK +
+ SUPPORTING ATTACK +
+ G*G*OLKGS-****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.FCL +
+ FINAL COORDINATION LINE +
+ G*G*OLF---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.INFNLE +
+ INFILTRATION LANE +
+ G*G*OLI---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.LMTADV +
+ LIMIT OF ADVANCE +
+ G*G*OLL---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.LD +
+ LINE OF DEPARTURE +
+ G*G*OLT---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.LDLC +
+ LINE OF DEPARTURE/LINE OF CONTACT (LD/LC) +
+ G*G*OLC---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.LNE.PLD +
+ PROBABLE LINE OF DEPLOYMENT (PLD) +
+ G*G*OLP---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS +
+ AREAS +
+ G*G*OA----****X +
+
+ TACGRP.C2GM.OFF.ARS.ASTPSN +
+ ASSAULT POSITION +
+ G*G*OAA---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS.ATKPSN +
+ ATTACK POSITION +
+ G*G*OAK---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS.AFP +
+ ATTACK BY FIRE POSITION +
+ G*G*OAF---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS.SFP +
+ SUPPORT BY FIRE POSITION +
+ G*G*OAS---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS.OBJ +
+ OBJECTIVE +
+ G*G*OAO---****X +
+
+ N/A +
+ TACGRP.C2GM.OFF.ARS.PBX +
+ PENETRATION BOX +
+ G*G*OAP---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL +
+ SPECIAL +
+ G*G*S-----****X +
+
+ TACGRP.C2GM.SPL.LNE +
+ LINE +
+ G*G*SL----****X +
+
+ TACGRP.C2GM.SPL.LNE.AMB +
+ AMBUSH +
+ G*G*SLA---****X +
+
+ COMPLETED +
+ TACGRP.C2GM.SPL.LNE.HGL +
+ HOLDING LINE +
+ G*G*SLH---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.LNE.REL +
+ RELEASE LINE +
+ G*G*SLR---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.LNE.BRGH +
+ BRIDGEHEAD +
+ G*G*SLB---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.ARA +
+ AREA +
+ G*G*SA----****X +
+
+ TACGRP.C2GM.SPL.ARA.AOO +
+ AREA OF OPERATIONS (AO) +
+ G*G*SAO---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.ARA.AHD +
+ AIRHEAD +
+ G*G*SAA---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.ARA.ENCMT +
+ ENCIRCLEMENT +
+ G*G*SAE---****X +
+
+ N/A +
+ TACGRP.C2GM.SPL.ARA.NAI +
+ NAMED AREA OF INTEREST (NAI) +
+ G*G*SAN---****X +
+
+ COMPLETED +
+ TACGRP.C2GM.SPL.ARA.TAIS +
+ TARGETED AREA OF INTEREST (TAI) +
+ G*G*SAT---****X +
+
+ COMPLETED +
+ TACGRP.MOBSU +
+ MOBILITY/SURVIVABILITY +
+ G*M*------****X +
+
+ TACGRP.MOBSU.OBST +
+ OBSTACLES +
+ G*M *O-----****X +
+
+ TACGRP.MOBSU.OBST.GNL +
+ GENERAL +
+ G*M*OG----****X +
+
+ TACGRP.MOBSU.OBST.GNL.BLT +
+ BELT +
+ G*M*OGB---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.GNL.LNE +
+ LINE +
+ G*M*OGL---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.GNL.Z +
+ ZONE +
+ G*M*OGZ---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.GNL.OFA +
+ OBSTACLE FREE AREA +
+ G*M*OGF---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.GNL.ORA +
+ OBSTACLE RESTRICTED AREA +
+ G*M *OGR---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.ABS +
+ ABATIS +
+ G*M*OS----****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.ATO +
+ ANTITANK OBSTACLES +
+ G*M*OA----****X +
+
+ TACGRP.MOBSU.OBST.ATO.ATD +
+ ANTITANK DITCH +
+ G*M*OAD---****X +
+
+ TACGRP.MOBSU.OBST.ATO.ATD.ATDUC +
+ UNDER CONSTRUCTION +
+ G*M*OADU--****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.ATO.ATD.ATDC +
+ COMPLETE +
+ G*M*OADC--****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.ATO.ATDATM +
+ ANTITANK DITCH REINFORCED WITH ANTITANK MINES +
+ G*M*OAR---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.ATO.TDTSM +
+ ANTITANK OBSTACLES: TETRAHEDRONS, DRAGONS TEETH, AND OTHER SIMILAR OBSTACLES +
+ G*M*OAO---****X +
+
+ TACGRP.MOBSU.OBST.ATO.TDTSM.FIXPFD +
+ FIXED AND PREFABRICATED +
+ G*M*OAOF--****X +
+
+ +
+ TACGRP.MOBSU.OBST.ATO.TDTSM.MVB +
+ MOVEABLE +
+ G*M*OAOM--****X +
+
+ +
+ TACGRP.MOBSU.OBST.ATO.TDTSM.MVBPFD +
+ MOVEABLE AND PREFABRICATED +
+ G*M*OAOP--****X +
+
+ +
+ TACGRP.MOBSU.OBST.ATO.ATW +
+ ANTITANK WALL +
+ G*M*OAW---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.BBY +
+ BOOBY TRAP +
+ G*M*OB----****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE +
+ MINES +
+ G*M*OM----****X +
+
+ TACGRP.MOBSU.OBST.MNE.USPMNE +
+ UNSPECIFIED MINE +
+ G*M*OMU---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.ATMNE +
+ ANTITANK MINE (AT) +
+ G*M*OMT---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.ATMAHD +
+ ANTITANK MINE WITH ANTIHANDLING DEVICE +
+ G*M*OMD---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.ATMDIR +
+ ANTITANK MINE (DIRECTIONAL) +
+ G*M*OME---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.APMNE +
+ ANTIPERSONNEL (AP) MINES +
+ G*M*OMP---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.WAMNE +
+ WIDE AREA MINES +
+ G*M*OMW---****X +
+
+ +
+ TACGRP.MOBSU.OBST.MNE.MCLST +
+ MINE CLUSTER +
+ G*M*OMC---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.MNEFLD +
+ MINEFIELDS +
+ G*M*OF----****X +
+
+ TACGRP.MOBSU.OBST.MNEFLD.STC +
+ STATIC DEPICTION +
+ G*M*OFS---****X +
+
+ + Template +
+ +
+ Example: Friendly Present +
+ +
+ Example: Enemy Known +
+ +
+ Example: Friendly Planned +
+ +
+ Example: Enemy Suspected +
+ +
+ +
+ TACGRP.MOBSU.OBST.MNEFLD.DYN +
+ DYNAMIC DEPICTION +
+ G*M*OFD---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.MNEFLD.GAP +
+ GAP +
+ G*M*OFG---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.MNEFLD.MNDARA +
+ MINED AREA +
+ G*M*OFA---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.OBSEFT +
+ OBSTACLE EFFECT +
+ G*M*OE----****X +
+
+ TACGRP.MOBSU.OBST.OBSEFT.BLK +
+ BLOCK +
+ G*M*OEB---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.OBSEFT.FIX +
+ FIX +
+ G*M*OEF---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.OBSEFT.TUR +
+ TURN +
+ G*M*OET---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.OBSEFT.DRT +
+ DISRUPT +
+ G*M*OED---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.UXO +
+ UNEXPLODED ORDNANCE AREA (UXO) +
+ G*M*OU----****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.RCBB +
+ ROADBLOCKS, CRATERS, AND BLOWN BRIDGES +
+ G*M*OR----****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.RCBB.PLND +
+ PLANNED +
+ G*M*ORP---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.RCBB.SAFE +
+ EXPLOSIVES, STATE OF READINESS 1 (SAFE) +
+ G*M*ORS---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.RCBB.ABP +
+ EXPLOSIVES, STATE OF READINESS 2 (ARMED-BUT PASSABLE) +
+ G*M*ORA---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.RCBB.EXCD +
+ ROADBLOCK COMPLETE (EXECUTED) +
+ G*M*ORC---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.TRIPWR +
+ TRIP WIRE +
+ G*M*OT----****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS +
+ WIRE OBSTACLE +
+ G*M*OW----****X +
+
+ TACGRP.MOBSU.OBST.WREOBS.USP +
+ UNSPECIFIED +
+ G*M*OWU---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.SNGFNC +
+ SINGLE FENCE +
+ G*M*OWS---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.DBLFNC +
+ DOUBLE FENCE +
+ G*M*OWD---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.DAFNC +
+ DOUBLE APRON FENCE +
+ G*M*OWA---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.LWFNC +
+ LOW WIRE FENCE +
+ G*M*OWL---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.HWFNC +
+ HIGH WIRE FENCE +
+ G*M*OWH---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.CCTA +
+ CONCERTINA +
+ G*M*OWC---****X +
+
+ TACGRP.MOBSU.OBST.WREOBS.CCTA.SNG +
+ SINGLE CONCERTINA +
+ G*M*OWCS--****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.CCTA.DBLSTD +
+ DOUBLE STRAND CONCERTINA +
+ G*M*OWCD--****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.WREOBS.CCTA.TRISTD +
+ TRIPLE STRAND CONCERTINA +
+ G*M*OWCT--****X +
+
+ N/A +
+ TACGRP.MOBSU.OBST.AVN +
+ AVIATION +
+ G*M*OH----****X +
+
+ TACGRP.MOBSU.OBST.AVN.TWR +
+ TOWER +
+ G*M*OHT---****X +
+
+ TACGRP.MOBSU.OBST.AVN.TWR.LOW +
+ LOW +
+ G*M*OHTL--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.OBST.AVN.TWR.HIGH +
+ HIGH +
+ G*M*OHTH--****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.OBST.AVN.OHWIRE +
+ OVERHEAD WIRE/POWER LINE +
+ G*M*OHO---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP +
+ OBSTACLE BYPASS +
+ G*M*B-----****X +
+
+ TACGRP.MOBSU.OBSTBP.DFTY +
+ OBSTACLE BYPASS DIFFICULTY +
+ G*M*BD----****X +
+
+ TACGRP.MOBSU.OBSTBP.DFTY.ESY +
+ BYPASS EASY +
+ G*M*BDE---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.DFTY.DFT +
+ BYPASS DIFFICULT +
+ G*M*BDD---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.DFTY.IMP +
+ BYPASS IMPOSSIBLE +
+ G*M*BDI---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE +
+ CROSSING SITE/WATER CROSSING +
+ G*M*BC----****X +
+
+ TACGRP.MOBSU.OBSTBP.CSGSTE.ASTCA +
+ ASSAULT CROSSING AREA +
+ G*M*BCA---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.BRG +
+ BRIDGE OR GAP +
+ G*M*BCB---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.FRY +
+ FERRY +
+ G*M*BCF---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.FRDESY +
+ FORD EASY +
+ G*M*BCE---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.FRDDFT +
+ FORD DIFFICULT +
+ G*M*BCD---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.LANE +
+ LANE +
+ G*M*BCL---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.RFT +
+ RAFT SITE +
+ G*M*BCR---****X +
+
+ N/A +
+ TACGRP.MOBSU.OBSTBP.CSGSTE.ERP +
+ ENGINEER REGULATING POINT +
+ G*M*BCP---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.SU +
+ SURVIVABILITY +
+ G*M*S-----****X +
+
+ TACGRP.MOBSU.SU.ESTOF +
+ EARTHWORK, SMALL TRENCH OR FORTIFICATION +
+ G*M*SE----****X +
+
+ +
+ TACGRP.MOBSU.SU.FRT +
+ FORT +
+ G*M*SF----****X +
+
+ +
+ TACGRP.MOBSU.SU.FTFDLN +
+ FORTIFIED LINE +
+ G*M*SL----****X +
+
+ N/A +
+ TACGRP.MOBSU.SU.FEWS +
+ FOXHOLE, EMPLACEMENT OR WEAPON SITE +
+ G*M*SW----****X +
+
+ N/A +
+ TACGRP.MOBSU.SU.STRGPT +
+ STRONG POINT +
+ G*M*SP----****X +
+
+ N/A +
+ TACGRP.MOBSU.SU.SUFSHL +
+ SURFACE SHELTER +
+ G*M*SS----****X +
+
+ +
+ TACGRP.MOBSU.SU.UGDSHL +
+ UNDERGROUND SHELTER +
+ G*M*SU----****X +
+
+ +
+ TACGRP.MOBSU.CBRN +
+ CHEMICAL, BIOLOGICAL, RADIOLOGICAL, AND NUCLEAR +
+ G*M*N-----****X +
+
+ TACGRP.MOBSU.CBRN.MSDZ +
+ MINIMUM SAFE DISTANCE ZONES +
+ G*M*NM----****X +
+
+ N/A +
+ TACGRP.MOBSU.CBRN.NDGZ +
+ NUCLEAR DETONATIONS GROUND ZERO +
+ G*M*NZ----****X +
+
+ Template +
+ +
+ Examples +
+ +
+ +
+ +
+ TACGRP.MOBSU.CBRN.FAOTP +
+ FALLOUT PRODUCING +
+ G*M*NF----****X +
+
+ +
+ TACGRP.MOBSU.CBRN.RADA +
+ RADIOACTIVE AREA +
+ G*M*NR----****X +
+
+ N/A +
+ TACGRP.MOBSU.CBRN.BIOCA +
+ BIOLOGICALLY CONTAMINATED AREA +
+ G*M*NB----****X +
+
+ N/A +
+ TACGRP.MOBSU.CBRN.CMLCA +
+ CHEMICALLY CONTAMINATED AREA +
+ G*M*NC----****X +
+
+ N/A +
+ TACGRP.MOBSU.CBRN.REEVNT +
+ RELEASE EVENTS +
+ G*M*NE----****X +
+
+ TACGRP.MOBSU.CBRN.REEVNT.BIO +
+ BIOLOGICAL +
+ G*M*NEB---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.REEVNT.CML +
+ CHEMICAL +
+ G*M*NEC---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP +
+ DECONTAMINATION (DECON) POINTS +
+ G*M*ND----****X +
+
+ TACGRP.MOBSU.CBRN.DECONP.USP +
+ DECON SITE/POINT (UNSPECIFIED) +
+ G*M*NDP---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.ALTUSP +
+ ALTERNATE DECON SITE/POINT (UNSPECIFIED) +
+ G*M*NDA---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.TRP +
+ DECON SITE/POINT (TROOPS) +
+ G*M*NDT---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.EQT +
+ DECON SITE/POINT (EQUIPMENT) +
+ G*M*NDE---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.EQTTRP +
+ DECON SITE/POINT (EQUIPMENT AND TROOPS) +
+ G*M*NDB---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.OPDECN +
+ DECON SITE/POINT (OPERATIONAL DECONTAMINATION) +
+ G*M*NDO---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DECONP.TRGH +
+ DECON SITE/POINT (THOROUGH DECONTAMINATION) +
+ G*M*NDD---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.MOBSU.CBRN.DRCL +
+ DOSE RATE CONTOUR LINES +
+ G*M*NL----****X +
+
+ N/A +
+ TACGRP.FSUPP +
+ FIRE SUPPORT +
+ G*F*------****X +
+
+ TACGRP.FSUPP.PNT +
+ POINT +
+ G*F*P-----****X +
+
+ TACGRP.FSUPP.PNT.TGT +
+ TARGET +
+ G*F*PT----****X +
+
+ TACGRP.FSUPP.PNT.TGT.PTGT +
+ POINT/SINGLE TARGET +
+ G*F*PTS---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.TGT.NUCTGT +
+ NUCLEAR TARGET +
+ G*F*PTN---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT +
+ COMMAND & CONTROL POINTS +
+ G*F*PC----****X +
+
+ TACGRP.FSUPP.PNT.C2PNT.FSS +
+ FIRE SUPPORT STATION +
+ G*F*PCF---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT.SCP +
+ SURVEY CONTROL POINT +
+ G*F*PCS---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT.FP +
+ FIRING POINT +
+ G*F*PCB---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT.RP +
+ RELOAD POINT +
+ G*F*PCR---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT.HP +
+ HIDE POINT +
+ G*F*PCH---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.PNT.C2PNT.LP +
+ LAUNCH POINT +
+ G*F*PCL---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.FSUPP.LNE +
+ LINES +
+ G*F*L-----****X +
+
+ TACGRP.FSUPP.LNE.LNRTGT +
+ LINEAR TARGET +
+ G*F*LT----****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.LNRTGT.LSTGT +
+ LINEAR SMOKE TARGET +
+ G*F*LTS---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.LNRTGT.FPF +
+ FINAL PROTECTIVE FIRE (FPF) +
+ G*F*LTF---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.C2LNE +
+ COMMAND & CONTROL LINES +
+ G*F*LC----****X +
+
+ TACGRP.FSUPP.LNE.C2LNE.FSCL +
+ FIRE SUPPORT COORDINATION LINE (FSCL) +
+ G*F*LCF---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.C2LNE.CFL +
+ COORDINATED FIRE LINE (CFL) +
+ G*F*LCC---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.C2LNE.NFL +
+ NO-FIRE LINE (NFL) +
+ G*F*LCN---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.C2LNE.RFL +
+ RESTRICTIVE FIRE LINE (RFL) +
+ G*F*LCR---****X +
+
+ N/A +
+ TACGRP.FSUPP.LNE.C2LNE.MFP +
+ MUNITION FLIGHT PATH (MFP) +
+ G*F*LCM---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS +
+ AREAS +
+ G*F*A-----****X +
+
+ TACGRP.FSUPP.ARS.ARATGT +
+ AREA TARGET +
+ G*F*AT----****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.ARATGT.RTGTGT +
+ RECTANGULAR TARGET +
+ G*F*ATR---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.ARATGT.CIRTGT +
+ CIRCULAR TARGET +
+ G*F*ATC---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.ARATGT.SGTGT +
+ SERIES OR GROUP OF TARGETS +
+ G*F*ATG---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.ARATGT.SMK +
+ SMOKE +
+ G*F*ATS---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.ARATGT.BMARA +
+ BOMB AREA +
+ G*F*ATB---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS +
+ COMMAND & CONTROL AREAS +
+ G*F*AC----****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.FSA +
+ FIRE SUPPORT AREA (FSA) +
+ G*F*ACS---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.FSA.IRR +
+ FIRE SUPPORT AREA (FSA), IRREGULAR +
+ G*F*ACSI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.FSA.RTG +
+ FIRE SUPPORT AREA (FSA), RECTANGULAR +
+ G*F*ACSR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.FSA.CIRCLR +
+ FIRE SUPPORT AREA (FSA), CIRCULAR +
+ G*F*ACSC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ACA +
+ AIRSPACE COORDINATION AREA (ACA) +
+ G*F*ACA---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.ACA.IRR +
+ AIRSPACE COORDINATION AREA (ACA), IRREGULAR +
+ G*F*ACAI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ACA.RTG +
+ AIRSPACE COORDINATION AREA (ACA), RECTANGULAR +
+ G*F*ACAR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ACA.CIRCLR +
+ AIRSPACE COORDINATION AREA (ACA), CIRCULAR +
+ G*F*ACAC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.FFA +
+ FREE FIRE AREA (FFA) +
+ G*F*ACF---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.FFA.IRR +
+ FREE FIRE AREA (FFA), IRREGULAR +
+ G*F*ACFI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.FFA.RTG +
+ FREE FIRE AREA (FFA), RECTANGULAR +
+ G*F*ACFR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.FFA.CIRCLR +
+ FREE FIRE AREA (FFA), CIRCULAR +
+ G*F*ACFC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.NFA +
+ NO-FIRE AREA (NFA) +
+ G*F*ACN---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.NFA.IRR +
+ NO FIRE AREA (NFA), IRREGULAR +
+ G*F*ACNI--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS.NFA.RTG +
+ NO FIRE AREA (NFA), RECTANGULAR +
+ G*F*ACNR--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS.NFA.CIRCLR +
+ NO FIRE AREA (NFA), CIRCULAR +
+ G*F*ACNC--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS.RFA +
+ RESTRICTIVE FIRE AREA (RFA) +
+ G*F*ACR---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.RFA.IRR +
+ RESTRICTIVE FIRE AREA (RFA), IRREGULAR +
+ G*F*ACRI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.RFA.RTG +
+ RESTRICTIVE FIRE AREA (RFA), RECTANGULAR +
+ G*F*ACRR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.RFA.CIRCLR +
+ RESTRICTIVE FIRE AREA (RFA), CIRCULAR +
+ G*F*ACRC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.PAA +
+ POSITION AREA FOR ARTILLERY (PAA) +
+ G*F*ACP---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.PAA.RTG +
+ POSITION AREA FOR ARTILLERY (PAA), RECTANGULAR +
+ G*F*ACPR--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS.PAA.CIRCLR +
+ POSITION AREA FOR ARTILLERY (PAA), CIRCULAR +
+ G*F*ACPC--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.C2ARS.SNSZ +
+ SENSOR ZONE +
+ G*F*ACE---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.SNSZ.IRR +
+ SENSOR ZONE, IRREGULAR +
+ G*F*ACEI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.SNSZ.RTG +
+ SENSOR ZONE, RECTANGULAR +
+ G*F*ACER--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.SNSZ.CIRCLR +
+ SENSOR ZONE, CIRCULAR +
+ G*F*ACEC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.DA +
+ DEAD SPACE AREA (DA) +
+ G*F*ACD---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.DA.IRR +
+ DEAD SPACE AREA (DA), IRREGULAR +
+ G*F*ACDI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.DA.RTG +
+ DEAD SPACE AREA (DA), RECTANGULAR +
+ G*F*ACDR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.DA.CIRCLR +
+ DEAD SPACE AREA (DA), CIRCULAR +
+ G*F*ACDC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ZOR +
+ ZONE OF RESPONSIBILITY (ZOR) +
+ G*F*ACZ---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.ZOR.IRR +
+ ZONE OF RESPONSIBILITY (ZOR), IRREGULAR +
+ G*F*ACZI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ZOR.RTG +
+ ZONE OF RESPONSIBILITY (ZOR), RECTANGULAR +
+ G*F*ACZR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.ZOR.CIRCLR +
+ ZONE OF RESPONSIBILITY (ZOR), CIRCULAR +
+ G*F*ACZC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TBA +
+ TARGET BUILD-UP AREA (TBA) +
+ G*F*ACB---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.TBA.IRR +
+ TARGET BUILD UP AREA (TBA), IRREGULAR +
+ G*F*ACBI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TBA.RTG +
+ TARGET BUILD UP AREA (TBA), RECTANGULAR +
+ G*F*ACBR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TBA.CIRCLR +
+ TARGET BUILD UP AREA (TBA), CIRCULAR +
+ G*F*ACBC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TVAR +
+ TARGET VALUE AREA (TVAR) +
+ G*F*ACV---****X +
+
+ TACGRP.FSUPP.ARS.C2ARS.TVAR.IRR +
+ TARGET VALUE AREA (TVAR), IRREGULAR +
+ G*F*ACVI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TVAR.RTG +
+ TARGET VALUE AREA (TVAR), RECTANGULAR +
+ G*F*ACVR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TVAR.CIRCLR +
+ TARGET VALUE AREA (TVAR), CIRCULAR +
+ G*F*ACVC--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.C2ARS.TGMF +
+ TERMINALLY GUIDED MUNITION FOOTPRINT (TGMF) +
+ G*F*ACT---****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ +
+ TARGET ACQUISITION ZONES +
+ G*F*AZ----****X +
+
+ TACGRP.FSUPP.ARS.TGTAQZ.ATIZ +
+ ARTILLERY TARGET INTELLIGENCE (ATI) ZONE +
+ G*F*AZI---****X +
+
+ TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.IRR +
+ ARTILLERY TARGET INTELLIGENCE (ATI) ZONE, IRREGULAR +
+ G*F*AZII--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.RTG +
+ ARTILLERY TARGET INTELLIGENCE (ATI) ZONE, RECTANGULAR +
+ G*F*AZIR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CFFZ +
+ CALL FOR FIRE ZONE (CFFZ) +
+ G*F*AZX---****X +
+
+ TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.IRR +
+ CALL FOR FIRE ZONE (CFFZ), IRREGULAR +
+ G*F*AZXI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.RTG +
+ CALL FOR FIRE ZONE (CFFZ), RECTANGULAR +
+ G*F*AZXR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CNS +
+ CENSOR ZONE +
+ G*F*AZC---****X +
+
+ TACGRP.FSUPP.ARS.TGTAQZ.CNS.IRR +
+ CENSOR ZONE, IRREGULAR +
+ G*F*AZCI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CNS.RTG +
+ CENSOR ZONE, RECTANGULAR +
+ G*F*AZCR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CFZ +
+ CRITICAL FRIENDLY ZONE (CFZ) +
+ G*F*AZF---****X +
+
+ TACGRP.FSUPP.ARS.TGTAQZ.CFZ.IRR +
+ CRITICAL FRIENDLY ZONE (CFZ), IRREGULAR +
+ G*F*AZFI--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.TGTAQZ.CFZ.RTG +
+ CRITICAL FRIENDLY ZONE (CFZ), RECTANGULAR +
+ G*F*AZFR--****X +
+
+ COMPLETED +
+ TACGRP.FSUPP.ARS.WPNRF +
+ WEAPON/SENSOR RANGE FANS +
+ G*F*AX----****X +
+
+ TACGRP.FSUPP.ARS.WPNRF.CIRCLR +
+ WEAPON/SENSOR RANGE FAN, CIRCULAR +
+ G*F*AXC---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.WPNRF.SCR +
+ WEAPON/SENSOR RANGE FAN, SECTOR +
+ G*F*AXS---****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX +
+ KILL BOX +
+ G*F*AK----****X +
+
+ TACGRP.FSUPP.ARS.KLBOX.BLUE +
+ BLUE KILL BOX (BKB) +
+ G*F*AKB---****X +
+
+ TACGRP.FSUPP.ARS.KLBOX.BLUE.CIRCLR +
+ BLUE KILL BOX, CIRCULAR +
+ G*F*AKBC--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX.BLUE.IRR +
+ BLUE KILL BOX, IRREGULAR +
+ G*F*AKBI--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX.BLUE.RTG +
+ BLUE KILL BOX, RECTANGULAR +
+ G*F*AKBR--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX.PURPLE +
+ PURPLE KILL BOX (PKB) +
+ G*F*AKP---****X +
+
+ TACGRP.FSUPP.ARS.KLBOX.PURPLE.CIRCLR +
+ PURPLE KILL BOX, CIRCULAR +
+ G*F*AKPC--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX.PURPLE.IRR +
+ PURPLE KILL BOX, IRREGULAR +
+ G*F*AKPI--****X +
+
+ N/A +
+ TACGRP.FSUPP.ARS.KLBOX.PURPLE.RTG +
+ PURPLE KILL BOX, RECTANGULAR +
+ G*F*AKPR--****X +
+
+ N/A +
+ TACGRP.CSS +
+ COMBAT SERVICE SUPPORT +
+ G*S*------****X +
+
+ TACGRP.CSS.PNT +
+ POINTS +
+ G*S*P-----****X +
+
+ TACGRP.CSS.PNT.AEP +
+ AMBULANCE EXCHANGE POINT +
+ G*S*PX----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.CBNP +
+ CANNIBALIZATION POINT +
+ G*S*PC----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.CCP +
+ CASUALTY COLLECTION POINT +
+ G*S*PY----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.CVP +
+ CIVILIAN COLLECTION POINT +
+ G*S*PT----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.DCP +
+ DETAINEE COLLECTION POINT +
+ G*S*PD----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.EPWCP +
+ ENEMY PRISONER OF WAR (EPW) COLLECTION POINT +
+ G*S*PE----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.LRP +
+ LOGISTICS RELEASE POINT (LRP) +
+ G*S*PL----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.MCP +
+ MAINTENANCE COLLECTION POINT +
+ G*S*PM----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.RRRP +
+ REARM, REFUEL AND RESUPPLY POINT +
+ G*S*PR----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.ROM +
+ REFUEL ON THE MOVE (ROM) POINT +
+ G*S*PU----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.TCP +
+ TRAFFIC CONTROL POST (TCP) +
+ G*S*PO----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.TTP +
+ TRAILER TRANSFER POINT +
+ G*S*PI----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.UMC +
+ UNIT MAINTENANCE COLLECTION POINT +
+ G*S*PN----****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT +
+ SUPPLY POINTS +
+ G*S*PS----****X +
+
+ TACGRP.CSS.PNT.SPT.GNL +
+ GENERAL +
+ G*S*PSZ---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS1 +
+ CLASS I +
+ G*S*PSA---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS2 +
+ CLASS II +
+ G*S*PSB---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS3 +
+ CLASS III +
+ G*S*PSC---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS4 +
+ CLASS IV +
+ G*S*PSD---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS5 +
+ CLASS V +
+ G*S*PSE---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS6 +
+ CLASS VI +
+ G*S*PSF---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS7 +
+ CLASS VII +
+ G*S*PSG---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS8 +
+ CLASS VIII +
+ G*S*PSH---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS9 +
+ CLASS IX +
+ G*S*PSI---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.SPT.CLS10 +
+ CLASS X +
+ G*S*PSJ---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.AP +
+ AMMUNITION POINTS +
+ G*S*PA----****X +
+
+ TACGRP.CSS.PNT.AP.ASP +
+ AMMUNITION SUPPLY POINT (ASP) +
+ G*S*PAS---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.PNT.AP.ATP +
+ AMMUNITION TRANSFER POINT (ATP) +
+ G*S*PAT---****X +
+
+ Template +
+ +
+ Example +
+ +
+ TACGRP.CSS.LNE +
+ LINES +
+ G*S*L-----****X +
+
+ TACGRP.CSS.LNE.CNY +
+ CONVOYS +
+ G*S*LC----****X +
+
+ TACGRP.CSS.LNE.CNY.MCNY +
+ MOVING CONVOY +
+ G*S*LCM---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.CNY.HCNY +
+ HALTED CONVOY +
+ G*S*LCH---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.SLPRUT +
+ SUPPLY ROUTES +
+ G*S*LR----****X +
+
+ TACGRP.CSS.LNE.SLPRUT.MSRUT +
+ MAIN SUPPLY ROUTE +
+ G*S*LRM---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.SLPRUT.ASRUT +
+ ALTERNATE SUPPLY ROUTE +
+ G*S*LRA---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.SLPRUT.1WTRFF +
+ ONE-WAY TRAFFIC +
+ G*S*LRO---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.SLPRUT.ATRFF +
+ ALTERNATING TRAFFIC +
+ G*S*LRT---****X +
+
+ N/A +
+ TACGRP.CSS.LNE.SLPRUT.2WTRFF +
+ TWO-WAY TRAFFIC +
+ G*S*LRW---****X +
+
+ N/A +
+ TACGRP.CSS.ARA +
+ AREA +
+ G*S*A-----****X +
+
+ TACGRP.CSS.ARA.DHA +
+ DETAINEE HOLDING AREA +
+ G*S*AD----****X +
+
+ N/A +
+ TACGRP.CSS.ARA.EPWHA +
+ ENEMY PRISONER OF WAR (EPW) HOLDING AREA +
+ G*S*AE----****X +
+
+ N/A +
+ TACGRP.CSS.ARA.FARP +
+ FORWARD ARMING AND REFUELING AREA (FARP) +
+ G*S*AR----****X +
+
+ N/A +
+ TACGRP.CSS.ARA.RHA +
+ REFUGEE HOLDING AREA +
+ G*S*AH----****X +
+
+ N/A +
+ TACGRP.CSS.ARA.SUPARS +
+ SUPPORT AREAS +
+ G*S*AS----****X +
+
+ TACGRP.CSS.ARA.SUPARS.BSA +
+ BRIGADE (BSA) +
+ G*S*ASB---****X +
+
+ N/A +
+ TACGRP.CSS.ARA.SUPARS.DSA +
+ DIVISION (DSA) +
+ G*S*ASD---****X +
+
+ N/A +
+ TACGRP.CSS.ARA.SUPARS.RSA +
+ REGIMENTAL (RSA) +
+ G*S*ASR---****X +
+
+ N/A +
+ TACGRP.OTH +
+ OTHER +
+ G*O*------****X +
+
+ TACGRP.OTH.ER +
+ EMERGENCY +
+ G*O*E-----****X +
+
+ TACGRP.OTH.ER.DTHAC +
+ DITCHED AIRCRAFT +
+ G*O*ED----****X +
+
+ +
+ TACGRP.OTH.ER.PIW +
+ PERSON IN WATER +
+ G*O*EP----****X +
+
+ +
+ TACGRP.OTH.ER.DSTVES +
+ DISTRESSED VESSEL +
+ G*O*EV----****X +
+
+ +
+ TACGRP.OTH.HAZ +
+ HAZARD +
+ G*O*H-----****X +
+
+ TACGRP.OTH.HAZ.SML +
+ SEA MINE-LIKE +
+ G*O*HM----****X +
+
+ +
+ TACGRP.OTH.HAZ.NVGL +
+ NAVIGATIONAL +
+ G*O*HN----****X +
+
+ N/A +
+ TACGRP.OTH.HAZ.IB +
+ ICEBERG +
+ G*O*HI----****X +
+
+ +
+ TACGRP.OTH.HAZ.OLRG +
+ OIL RIG +
+ G*O*HO----****X +
+
+ +
+ TACGRP.OTH.SSUBSR +
+ SEA SUBSURFACE RETURNS +
+ G*O*S-----****X +
+
+ TACGRP.OTH.SSUBSR.BTMRTN +
+ BOTTOM RETURN/NON-MILCO +
+ G*O*SB----****X +
+
+ +
+ TACGRP.OTH.SSUBSR.BTMRTN.INS +
+ INSTALLATION/MANMADE +
+ G*O*SBM---****X +
+
+ +
+ TACGRP.OTH.SSUBSR.BTMRTN.SBRSOO +
+ SEABED ROCK/STONE, OBSTACLE, OTHER +
+ G*O*SBN---****X +
+
+ +
+ TACGRP.OTH.SSUBSR.BTMRTN.WRKND +
+ WRECK, NON DANGEROUS +
+ G*O*SBW---****X +
+
+ +
+ TACGRP.OTH.SSUBSR.BTMRTN.WRKD +
+ WRECK, DANGEROUS +
+ G*O*SBX---****X +
+
+ +
+ TACGRP.OTH.SSUBSR.MARLFE +
+ MARINE LIFE +
+ G*O*SM----****X +
+
+ +
+ TACGRP.OTH.SSUBSR.SA +
+ SEA ANOMALY (WAKE, CURRENT, KNUCKLE) +
+ G*O*SS----****X +
+
+ +
+ TACGRP.OTH.BERLNE +
+ BEARING LINE +
+ G*O*B-----****X +
+
+ N/A +
+ TACGRP.OTH.BERLNE.ELC +
+ ELECTRONIC +
+ G*O*BE----****X +
+
+ N/A +
+ TACGRP.OTH.BERLNE.ACU +
+ ACOUSTIC +
+ G*O*BA----****X +
+
+ N/A +
+ TACGRP.OTH.BERLNE.TPD +
+ TORPEDO +
+ G*O*BT----****X +
+
+ N/A +
+ TACGRP.OTH.BERLNE.EOPI +
+ ELECTRO-OPTICAL INTERCEPT +
+ G*O*BO----****X +
+
+ N/A +
+ TACGRP.OTH.FIX +
+ FIX +
+ G*O*F-----****X +
+
+ TACGRP.OTH.FIX.ACU +
+ ACOUSTIC +
+ G*O*FA----****X +
+
+ +
+ TACGRP.OTH.FIX.EM +
+ ELECTRO-MAGNETIC +
+ G*O*FE----****X +
+
+ +
+ TACGRP.OTH.FIX.EOP +
+ ELECTRO-OPTICAL +
+ G*O*FO----****X +
+
+ +
- \ No newline at end of file + diff --git a/example/index.html b/example/index.html new file mode 100644 index 00000000..9d16a7ad --- /dev/null +++ b/example/index.html @@ -0,0 +1,19 @@ + + + + + + + + + milgraphics + + + +
+ + \ No newline at end of file diff --git a/example/index.js b/example/index.js new file mode 100644 index 00000000..5b13a253 --- /dev/null +++ b/example/index.js @@ -0,0 +1,29 @@ +import React, { useState } from 'react'; +import ReactDOM from 'react-dom'; +import Map from './map'; +import files from '../tacticaljson/import_files.js'; + +const OpenLayersMap = ({ data }) => { + return +}; + +const APP = () => { + const [selected, onSelect] = useState('air-corridor'); + return ( + <> +
+ +
+ + + ); +}; + +ReactDOM.render( + , + document.querySelector(".root") +); diff --git a/example/map.js b/example/map.js new file mode 100644 index 00000000..5cd19fe8 --- /dev/null +++ b/example/map.js @@ -0,0 +1,82 @@ +import React from 'react'; +import OLMap from 'ol/Map'; +import * as olInteraction from 'ol/interaction'; +import * as olControl from 'ol/control'; +import OSM from 'ol/source/OSM'; +import TileLayer from 'ol/layer/Tile'; +import VectorLayer from 'ol/layer/Vector'; +import VectorSource from 'ol/source/Vector'; +import View from 'ol/View'; +import ms from '../src'; + +var vectorSource = new VectorSource(); +var vectorLayer = new VectorLayer({ + source: vectorSource +}); + +export default class Map extends React.Component { + constructor(props) { + super(props); + this.map = new OLMap({ + interactions: olInteraction.defaults(), + controls: olControl.defaults(), + overlays: [], + view: new View({ + center: [0, 0], + zoom: 2 + }), + layers: [ + new TileLayer({ + source: new OSM() + }), + vectorLayer + ] + }); + } + + updateVector(props) { + var openLayersFeaturesWithStyle = new ms.GraphicsLayer(new ms.format.GeoJSON(props.data)).asOpenLayers(); + vectorSource.clear(); + vectorSource.addFeatures(openLayersFeaturesWithStyle); + var extent = vectorSource.getExtent(openLayersFeaturesWithStyle); + this.map.getView().fit(extent, this.map.getSize()); + } + + UNSAFE_componentWillReceiveProps(props) { + this.updateVector(props); + } + + componentDidMount() { + this.map.setTarget(this.refs.target); + this.map.renderSync(); + this.focus(); + this.updateVector(this.props); + } + + componentWillUnmount() { + this.map.setTarget(undefined); + } + + render() { + return ( +
+
+
+
+ {this.props.children} + {this.props.view} +
+
+ ); + } + + focus() { + const viewport = this.map.getViewport(); + viewport.tabIndex = 0; + viewport.focus(); + } + + getSize() { + return this.map.getSize(); + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..58144ccf --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5733 @@ +{ + "name": "milgraphics", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/cli": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz", + "integrity": "sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q==", + "dev": true, + "requires": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "@babel/compat-data": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", + "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/eslint-parser": { + "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz", + "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz", + "integrity": "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz", + "integrity": "sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", + "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz", + "integrity": "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz", + "integrity": "sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", + "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz", + "integrity": "sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz", + "integrity": "sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-wrap-function": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz", + "integrity": "sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/helpers": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz", + "integrity": "sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==", + "dev": true, + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.3", + "@babel/types": "^7.16.0" + } + }, + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", + "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz", + "integrity": "sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz", + "integrity": "sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz", + "integrity": "sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz", + "integrity": "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz", + "integrity": "sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz", + "integrity": "sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz", + "integrity": "sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz", + "integrity": "sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz", + "integrity": "sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz", + "integrity": "sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz", + "integrity": "sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz", + "integrity": "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz", + "integrity": "sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz", + "integrity": "sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz", + "integrity": "sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz", + "integrity": "sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-create-class-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz", + "integrity": "sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", + "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz", + "integrity": "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz", + "integrity": "sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.16.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz", + "integrity": "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz", + "integrity": "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz", + "integrity": "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz", + "integrity": "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz", + "integrity": "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz", + "integrity": "sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz", + "integrity": "sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz", + "integrity": "sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz", + "integrity": "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz", + "integrity": "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz", + "integrity": "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz", + "integrity": "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz", + "integrity": "sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz", + "integrity": "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.16.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz", + "integrity": "sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz", + "integrity": "sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz", + "integrity": "sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz", + "integrity": "sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz", + "integrity": "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.16.0" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz", + "integrity": "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz", + "integrity": "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz", + "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz", + "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz", + "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.0" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz", + "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz", + "integrity": "sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz", + "integrity": "sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz", + "integrity": "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz", + "integrity": "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz", + "integrity": "sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz", + "integrity": "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz", + "integrity": "sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz", + "integrity": "sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz", + "integrity": "sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.16.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.4.tgz", + "integrity": "sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.3", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.2", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-async-generator-functions": "^7.16.4", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-class-static-block": "^7.16.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.0", + "@babel/plugin-proposal-export-namespace-from": "^7.16.0", + "@babel/plugin-proposal-json-strings": "^7.16.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.16.0", + "@babel/plugin-transform-async-to-generator": "^7.16.0", + "@babel/plugin-transform-block-scoped-functions": "^7.16.0", + "@babel/plugin-transform-block-scoping": "^7.16.0", + "@babel/plugin-transform-classes": "^7.16.0", + "@babel/plugin-transform-computed-properties": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/plugin-transform-dotall-regex": "^7.16.0", + "@babel/plugin-transform-duplicate-keys": "^7.16.0", + "@babel/plugin-transform-exponentiation-operator": "^7.16.0", + "@babel/plugin-transform-for-of": "^7.16.0", + "@babel/plugin-transform-function-name": "^7.16.0", + "@babel/plugin-transform-literals": "^7.16.0", + "@babel/plugin-transform-member-expression-literals": "^7.16.0", + "@babel/plugin-transform-modules-amd": "^7.16.0", + "@babel/plugin-transform-modules-commonjs": "^7.16.0", + "@babel/plugin-transform-modules-systemjs": "^7.16.0", + "@babel/plugin-transform-modules-umd": "^7.16.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.0", + "@babel/plugin-transform-new-target": "^7.16.0", + "@babel/plugin-transform-object-super": "^7.16.0", + "@babel/plugin-transform-parameters": "^7.16.3", + "@babel/plugin-transform-property-literals": "^7.16.0", + "@babel/plugin-transform-regenerator": "^7.16.0", + "@babel/plugin-transform-reserved-words": "^7.16.0", + "@babel/plugin-transform-shorthand-properties": "^7.16.0", + "@babel/plugin-transform-spread": "^7.16.0", + "@babel/plugin-transform-sticky-regex": "^7.16.0", + "@babel/plugin-transform-template-literals": "^7.16.0", + "@babel/plugin-transform-typeof-symbol": "^7.16.0", + "@babel/plugin-transform-unicode-escapes": "^7.16.0", + "@babel/plugin-transform-unicode-regex": "^7.16.0", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.0", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.19.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz", + "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-react-jsx": "^7.16.0", + "@babel/plugin-transform-react-jsx-development": "^7.16.0", + "@babel/plugin-transform-react-pure-annotations": "^7.16.0" + } + }, + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + } + }, + "@babel/traverse": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", + "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.3", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", + "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" + }, + "@mapbox/mapbox-gl-style-spec": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.23.0.tgz", + "integrity": "sha512-zI26XoK0UjGOvOEUUAoKlmFKHrSD8qIMCaoQBsFxNPzGIluryT32Z1m4aq7NtxEsrfE+qc2mPPXQg+iRllqbqA==", + "requires": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/unitbezier": "^0.0.0", + "csscolorparser": "~1.0.2", + "json-stringify-pretty-compact": "^2.0.0", + "minimist": "^1.2.5", + "rw": "^1.3.3", + "sort-object": "^0.3.2" + } + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" + }, + "@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=" + }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@petamoriken/float16": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.5.11.tgz", + "integrity": "sha512-aKJaQhvWcP4XRo4eb34VygcqNsE1+Ej5687oexkK+qYWC7tejxaWRkAfE54Ze3xQGnvwXHZ5Ahx6CWq5sS4q7Q==" + }, + "@types/eslint": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.0.tgz", + "integrity": "sha512-74hbvsnc+7TEDa1z5YLSe4/q8hGYB3USNvCuzHUJrjPV6hXaq8IXcngCrHkuvFt0+8rFz7xYXrHgNayIX0UZvQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "@types/node": { + "version": "16.11.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", + "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "dev": true + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.6.0.tgz", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "babel-loader": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", + "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", + "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", + "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", + "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001280", + "electron-to-chromium": "^1.3.896", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-lite": { + "version": "1.0.30001283", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz", + "integrity": "sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js-compat": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.2.tgz", + "integrity": "sha512-ObBY1W5vx/LFFMaL1P5Udo4Npib6fu+cMokeziWkA8Tns4FcDemKF5j9JvaI5JhdkW8EQJQGJN1EcrzmEwuAqQ==", + "dev": true, + "requires": { + "browserslist": "^4.18.1", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.5.tgz", + "integrity": "sha512-YKaB+t8ul5crdh6OeqT2qXdxJGI0fAYb6/X8pDIyye+c3a7ndOCk5gVeKX+ABwivCGNS56vOAif3TN0qJMpEHw==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", + "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.1.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "optional": true + }, + "espree": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", + "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", + "dev": true, + "requires": { + "acorn": "^8.6.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "dev": true + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "geodesy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/geodesy/-/geodesy-2.2.1.tgz", + "integrity": "sha512-jhUYGHFZz5hZ/f+lBZiwFNWRhOUV2iiVxyLOT8FixIUJHEDVMgcB1SWQs50P51uTVcVjsngjPAUUNWcWdWiPog==" + }, + "geotiff": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-1.0.9.tgz", + "integrity": "sha512-PY+q1OP8RtQZkx1630pVfC3hEkxFnGW9LwIF/glSzcalyShkrH+W8uM/M4RVY12j4QkDQvRXVKOpU65hq6t0iQ==", + "requires": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "lru-cache": "^6.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "threads": "^1.7.0", + "xml-utils": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-observable": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz", + "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "27.4.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", + "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==" + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mapbox-to-css-font": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.0.tgz", + "integrity": "sha512-v674D0WtpxCXlA6E+sBlG1QJWdUkz/s9qAD91bJSXBGuBL5lL4tJXpoJEftecphCh2SVQCjWMS2vhylc3AIQTg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.0.tgz", + "integrity": "sha512-o/RfP0J1d03YwsAxyHxAYs2kyJp55AFkMazlFAZFR2I2IXkxiUTXRabJ6RmNNCQ83LAD2jy52Khj0m3OffpNdA==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "milsymbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/milsymbol/-/milsymbol-2.0.0.tgz", + "integrity": "sha512-GcBFrcIUr8jScaZqZb0SI2W6AbnUrPCTHu2kqHxduQjN2DIN8q5pY6ksSWfnJ4HlcIAWQhyotbdPIr1bBxFbwQ==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "observable-fns": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz", + "integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==" + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "ol": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-6.9.0.tgz", + "integrity": "sha512-VmU5HKHwO2O1uGgmBcng/dL1PouVB1jKiYUbiXPR5l1i/3B3qatexl4rapZAnsGx0vsOC7lI1GLx7jEZro8C8Q==", + "requires": { + "geotiff": "^1.0.8", + "ol-mapbox-style": "^6.5.1", + "pbf": "3.2.1", + "rbush": "^3.0.1" + } + }, + "ol-mapbox-style": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-6.5.3.tgz", + "integrity": "sha512-2SNJQ/7acgACC4nnuKCm9qeMXK2LEeUQWZWRKlXNCstjRf7SDcQvSFXrNSlDLvzhtQ0Gv3QTX5L7plE2wm7Z3Q==", + "requires": { + "@mapbox/mapbox-gl-style-spec": "^13.20.1", + "mapbox-to-css-font": "^2.4.0", + "webfont-matcher": "^1.1.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-headers": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", + "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "requires": { + "quickselect": "^2.0.0" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-hot-loader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", + "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", + "dev": true, + "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sort-asc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", + "integrity": "sha1-q3md9h/HPqCVbHnEtTHtHp53J+k=" + }, + "sort-desc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", + "integrity": "sha1-GYuMDN6wlcRjNBhh45JdTuNZqe4=" + }, + "sort-object": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", + "integrity": "sha1-mODRme3kDgfGGoRAPGHWw7KQ+eI=", + "requires": { + "sort-asc": "^0.1.0", + "sort-desc": "^0.1.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "source-map-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.0.tgz", + "integrity": "sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "source-map-js": "^0.6.2" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", + "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "dev": true, + "requires": { + "jest-worker": "^27.0.6", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "threads": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz", + "integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==", + "requires": { + "callsites": "^3.1.0", + "debug": "^4.2.0", + "is-observable": "^2.1.0", + "observable-fns": "^0.6.1", + "tiny-worker": ">= 2" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tiny-worker": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz", + "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==", + "optional": true, + "requires": { + "esm": "^3.2.25" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "watchpack": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz", + "integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webfont-matcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webfont-matcher/-/webfont-matcher-1.1.0.tgz", + "integrity": "sha1-mM6VCXsp4x++czBT4Q5XFkLRxsc=" + }, + "webpack": { + "version": "5.64.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.64.4.tgz", + "integrity": "sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.0", + "webpack-sources": "^3.2.2" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-cli": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-custom-var-library-name-append-plugin": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/webpack-custom-var-library-name-append-plugin/-/webpack-custom-var-library-name-append-plugin-2.1.3.tgz", + "integrity": "sha512-JzwH4sZNDkZ+iwcIrMTkdl79sJGu+JfPANHrew83DGBLEjE1I1Z8hJ0JI//042DPxQ+6v3vHiCQe4rIQg0vUvQ==" + }, + "webpack-dev-middleware": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.2.tgz", + "integrity": "sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.2.2", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.6.0.tgz", + "integrity": "sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", + "del": "^6.0.0", + "express": "^4.17.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.0", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^4.0.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^7.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^5.2.1", + "ws": "^8.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", + "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "dev": true + }, + "xml-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.0.2.tgz", + "integrity": "sha512-rEn0FvKi+YGjv9omf22oAf+0d6Ly/sgJ/CUufU/nOzS7SRLmgwSujrewc03KojXxt+aPaTRpm593TgehtUBMSQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/package.json b/package.json index b71dabe8..4e556ee7 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,8 @@ "example": "examples" }, "scripts": { - "build": "webpack -p", - "build-dev": "webpack", - "test": "echo \"Error: no test specified\" && exit 1" + "build": "webpack --config webpack.production.js --progress --profile", + "start": "webpack serve --config webpack.development.js" }, "repository": { "type": "git", @@ -23,9 +22,35 @@ }, "homepage": "https://github.com/spatialillusions/milgraphics", "devDependencies": { - "eslint": "^3.19.0", - "milsymbol": "^1.0.0", - "webpack": "^2.2.0", - "webpack-custom-var-library-name-plugin": "^1.0.2" + "@babel/cli": "^7.16.0", + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.5", + "@babel/plugin-proposal-object-rest-spread": "^7.16.0", + "@babel/plugin-transform-destructuring": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "babel-loader": "^8.2.3", + "eslint": "^8.3.0", + "html-webpack-plugin": "^5.5.0", + "milsymbol": "^2.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-hot-loader": "4.13.0", + "source-map-loader": "^3.0.0", + "webpack": "^5.64.4", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.6.0" + }, + "peerDependencies": { + "@types/react": "^17.0.37", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "dependencies": { + "file-loader": "^6.2.0", + "geodesy": "2.2.1", + "ol": "6.9.0", + "requirejs": "^2.3.6", + "webpack-custom-var-library-name-append-plugin": "^2.1.3" } } diff --git a/src/geometry.js b/src/geometry.js index c7d2d6a9..9ea69372 100644 --- a/src/geometry.js +++ b/src/geometry.js @@ -5,8 +5,12 @@ geometry.circle = require("./geometry/circle.js"); geometry.circleCorridorPolygon = require("./geometry/circlecorridorpolygon.js"); geometry.corridor = require("./geometry/corridor.js"); geometry.distanceBetween = require("./geometry/distancebetween.js"); +geometry.isClockwise = require("./geometry/isclockwise.js"); geometry.pointBetween = require("./geometry/pointbetween.js"); +geometry.pointBetweenAbsolute = require("./geometry/pointbetweenabsolute.js"); geometry.rectangle = require("./geometry/rectangle.js"); geometry.toDistanceBearing = require("./geometry/todistancebearing.js"); +geometry.testGeometry = require("./geometry/testGeometry.js"); +geometry.addAnotation = require("./geometry/anotations.js"); module.exports = geometry; diff --git a/src/geometry/anotations.js b/src/geometry/anotations.js new file mode 100644 index 00000000..67211a28 --- /dev/null +++ b/src/geometry/anotations.js @@ -0,0 +1,15 @@ +// Add anotationPoint with text + +function addAnotation(annotationPoint, annotationText) { + return ({ + geometry: { + type: "Point", + coordinates: annotationPoint + }, + properties: { + text: annotationText + } + }); +} + +module.exports = addAnotation; \ No newline at end of file diff --git a/src/geometry/circle.js b/src/geometry/circle.js index 7c0d3d12..710a4869 100644 --- a/src/geometry/circle.js +++ b/src/geometry/circle.js @@ -4,8 +4,7 @@ var ms = require("milsymbol"); module.exports = function(feature) { var p = feature.geometry.coordinates; var r = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; + var geometry = { type: "Polygon", coordinates: [[]] }; for (var direction = 360; direction >= 0; direction -= 5) { geometry.coordinates[0].push( ms.geometry.toDistanceBearing(p, r, direction) diff --git a/src/geometry/circlecorridorpolygon.js b/src/geometry/circlecorridorpolygon.js index 2dbdcccb..53837784 100644 --- a/src/geometry/circlecorridorpolygon.js +++ b/src/geometry/circlecorridorpolygon.js @@ -1,31 +1,35 @@ var ms = require("milsymbol"); module.exports = function(feature) { - var annotation = {}; - var geometry; - annotation.geometry = { type: "Point" }; + var annotation = {}; + var geometry; - switch (feature.geometry.type) { - case "Point": - geometry = ms.geometry.circle(feature).geometry; - annotation.geometry.coordinates = feature.geometry.coordinates; - break; - case "LineString": - geometry = ms.geometry.rectangle(feature).geometry; - annotation.geometry.coordinates = ms.geometry.pointBetween( - feature.geometry.coordinates[0], - feature.geometry.coordinates[1], - 0.5 - ); - break; - case "Polygon": - geometry = { type: feature.geometry.type }; - geometry.coordinates = feature.geometry.coordinates; - // add annotation geometry - break; - default: - console.warn("Invalid feature type in SIDC: " + feature.properties.sidc); - } + annotation.geometry = { type: "Point" }; - return { annotation: annotation, geometry: geometry }; -}; + switch (feature.geometry.type) { + case "Point": + geometry = ms.geometry.circle(feature).geometry; + //annotation.geometry.coordinates = feature.geometry.coordinates; + break; + case "LineString": + geometry = ms.geometry.rectangle(feature).geometry; + /*annotation.geometry.coordinates = feature.geometry.coordinates; + annotation.geometry.coordinates = ms.geometry.pointBetween( + feature.geometry.coordinates[0], + feature.geometry.coordinates[1], + 0.5 + );*/ + //console.log(annotation); + break; + case "Polygon": + geometry = { type: feature.geometry.type }; + geometry.coordinates = feature.geometry.coordinates; + // add annotation geometry + + break; + default: + console.warn("Invalid feature type in SIDC: " + feature.properties.sidc); + } + + return { annotation: annotation, geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometry/converttodashes.js b/src/geometry/converttodashes.js new file mode 100644 index 00000000..aae0baad --- /dev/null +++ b/src/geometry/converttodashes.js @@ -0,0 +1,89 @@ +var ms = require("milsymbol"); +const distanceBetween = require("./distancebetween"); +const bearingBetween = require("./bearingbetween"); +const toDistanceBearing = require("./todistancebearing"); + +function convertToDashes(lineString, segmentInterval) { + if (segmentInterval <= 0) + throw new Error("segmentInterval must be greater than 0"); + + let dashes = []; + + // Get the lineString's total length (in meters) + let lineLength = 0; + for(let i = 0; i < lineString.length - 1; i++) { + lineLength += parseFloat(distanceBetween(lineString[i], lineString[i + 1])); + } + + const segmentLength = lineLength * segmentInterval; + + let numberOfSegments = lineLength / segmentLength; + + // If numberOfSegments is integer, no need to plus 1 + if (!Number.isInteger(numberOfSegments)) + numberOfSegments = Math.floor(numberOfSegments) + 1; + + for (let i = 0; i < numberOfSegments; i++) { + const slice = lineSliceAlong( + [...lineString], + segmentLength * i, + segmentLength * (i + 1) + ); + dashes.push(slice); + } + + return dashes.filter((slice, i) => i % 2 === 0); +} + +function lineSliceAlong(lineString, startDist, stopDist) { + var slice = []; + + var origCoordsLength = lineString.length; + var travelled = 0; + var overshot, direction, interpolated; + for (var i = 0; i < lineString.length; i++) { + if (startDist >= travelled && i === lineString.length - 1) { + break; + } + else if (travelled > startDist && slice.length === 0) { + overshot = startDist - travelled; + if (!overshot) { + slice.push([...lineString[i]]); + return slice; + } + direction = bearingBetween(lineString[i], lineString[i - 1]) - 180; + interpolated = toDistanceBearing(lineString[i], overshot, direction); + slice.push([...interpolated]); + } + + if (travelled >= stopDist) { + overshot = stopDist - travelled; + if (!overshot) { + slice.push([...lineString[i]]); + return slice; + } + direction = bearingBetween(lineString[i], lineString[i - 1]) - 180; + interpolated = toDistanceBearing(lineString[i], overshot, direction); + slice.push([...interpolated]); + return slice; + } + + if (travelled >= startDist) { + slice.push([...lineString[i]]); + } + + if (i === lineString.length - 1) { + return slice; + } + + travelled += parseFloat(distanceBetween(lineString[i], lineString[i + 1])); + } + + if (travelled < startDist && lineString.length === origCoordsLength) + throw new Error("Start position is beyond line"); + + var last = lineString[lineString.length - 1]; + return [last, last]; +} + +module.exports = convertToDashes; diff --git a/src/geometry/corridor.js b/src/geometry/corridor.js index a55a189c..a67c22d2 100644 --- a/src/geometry/corridor.js +++ b/src/geometry/corridor.js @@ -1,76 +1,73 @@ var ms = require("milsymbol"); // Draws a corridor with a widht in meters -function corridor(feature) { - var direction; - var points = feature.geometry.coordinates; - var width = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); - for (var j = 1; j < points.length - 1; j++) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var width = feature.properties.distance; + var geometry = { + type: "Polygon", + coordinates: [ + [] + ] + }; + var direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - width / 2 * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) ); - } + for (var j = 1; j < points.length - 1; j++) { + var direction1 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + var direction2 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[j], + width / 2 * factor, + (direction1 + direction2) / 2 + ) + ); + } - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 180) % - 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction - 90 - ) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction + 90 - ) - ); - - for (j = points.length - 2; j > 0; j--) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 180) % + 360; + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width / 2, + direction - 90 + ) + ); geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - -(width / 2) * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + points[points.length - 1], + width / 2, + direction + 90 + ) ); - } - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); //Close line - return { geometry: geometry }; -} + for (j = points.length - 2; j > 0; j--) { + direction1 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + direction2 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[j], -(width / 2) * factor, + (direction1 + direction2) / 2 + ) + ); + } -module.exports = corridor; + direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) + ); //Close line + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometry/isclockwise.js b/src/geometry/isclockwise.js new file mode 100644 index 00000000..cafba421 --- /dev/null +++ b/src/geometry/isclockwise.js @@ -0,0 +1,26 @@ +var ms = require("milsymbol"); + +/** + * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise. + * + * @name booleanClockwise + * @param {float[]} points to be evaluated + * @returns {boolean} true/false + * @summary Checks curve orientation via the sign of the determinant + **/ +function isClockwise(...points) { + let sum = 0, + i = 1, + prev, + cur; + + while (i < points.length) { + prev = cur || points[0]; + cur = points[i]; + sum += (cur[0] - prev[0]) * (cur[1] + prev[1]); + i++; + } + return sum > 0; +} + +module.exports = isClockwise; diff --git a/src/geometry/pointbetweenabsolute.js b/src/geometry/pointbetweenabsolute.js new file mode 100644 index 00000000..331b40b3 --- /dev/null +++ b/src/geometry/pointbetweenabsolute.js @@ -0,0 +1,15 @@ +var ms = require("milsymbol"); +// Calculates a point between two points p1 and p2 at any absolute distance l from p1 in the direction of p2 +function pointBetweenAbsolute(p1, p2, l) { + // This can be optimized for performance by using the math directly, but this works the same and was quicker to implement + + // Calculate fraction of length + frac = (l/ms.geometry.distanceBetween(p1,p2)) + + // Designate the particular point using the fractional based function + p3 = ms.geometry.pointBetween(p1,p2,frac) + + return p3 +} + +module.exports = pointBetweenAbsolute; diff --git a/src/geometry/testGeometry.js b/src/geometry/testGeometry.js new file mode 100644 index 00000000..8c51cda9 --- /dev/null +++ b/src/geometry/testGeometry.js @@ -0,0 +1,43 @@ +// Calculates a point between two other points at any fractional distance f between them +function testGeometry(p1, p2, f) { + var lng1 = p1[0]; + var lng2 = p2[0]; + var lat1 = p1[1]; + var lat2 = p2[1]; + + var lngRad1 = lng1 * (Math.PI / 180); + var lngRad2 = lng2 * (Math.PI / 180); + var latRad1 = lat1 * (Math.PI / 180); + var latRad2 = lat2 * (Math.PI / 180); + + var deltaLat = (lat2 - lat1) * (Math.PI / 180); + var delataLng = (lng2 - lng1) * (Math.PI / 180); + var a = + Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + + Math.cos(latRad1) * + Math.cos(latRad2) * + Math.sin(delataLng / 2) * + Math.sin(delataLng / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // Angular distance + + var A = Math.sin((1 - f) * c) / Math.sin(c); + var B = Math.sin(f * c) / Math.sin(c); + + var x = + A * Math.cos(latRad1) * Math.cos(lngRad1) + + B * Math.cos(latRad2) * Math.cos(lngRad2); + var y = + A * Math.cos(latRad1) * Math.sin(lngRad1) + + B * Math.cos(latRad2) * Math.sin(lngRad2); + var z = A * Math.sin(latRad1) + B * Math.sin(latRad2); + + var lng3 = Math.atan2(y, x) / (Math.PI / 180); + var lat3 = + (Math.atan2(z, Math.sqrt(x * x + y * y)) / (Math.PI / 180) + 540) % 360 - + 180; + + return [lng3, lat3]; + } + + module.exports = testGeometry; + \ No newline at end of file diff --git a/src/geometryconverter.js b/src/geometryconverter.js index d9deaa37..8d5e88d0 100644 --- a/src/geometryconverter.js +++ b/src/geometryconverter.js @@ -1,73 +1,135 @@ var geometryConverter = {}; - geometryConverter[ - "AIRSPACE COORDINATION AREA" + "TEST" +] = require("./geometryconverter/test.js"); +geometryConverter[ + "AIR CORRIDOR" +] = require("./geometryconverter/air-corridor.js"); +geometryConverter[ + "MUNITION FLIGHT PATH" +] = require("./geometryconverter/munition-flight-path.js"); +geometryConverter[ + "COORDINATED FIRE LINE" +] = require("./geometryconverter/coordinated-fire-line.js"); +geometryConverter[ + "FIRE SUPPORT COORDINATION LINE" +] = require("./geometryconverter/fire-support-coordination-line.js"); +geometryConverter[ + "RESTRICTIVE FIRE LINE" +] = require("./geometryconverter/restrictive-fire-line.js"); +geometryConverter[ + "NO FIRE LINE" +] = require("./geometryconverter/no-fire-line.js"); +geometryConverter[ + "NO FIRE AREA" +] = require("./geometryconverter/no-fire-area.js"); +geometryConverter[ + "POSITION AREA FOR ARTILLERY" +] = require("./geometryconverter/position-area-for-artillery.js"); +geometryConverter[ + "PHASELINE" +] = require("./geometryconverter/phase-line.js"); +geometryConverter[ + "BOUNDARIES" +] = require("./geometryconverter/boundaries.js"); //just for developer purpose - unknown sidc +geometryConverter[ + "AIRSPACE COORDINATION AREA" ] = require("./geometryconverter/airspace-coordination-area.js"); -geometryConverter["AMBUSH"] = require("./geometryconverter/ambush.js"); geometryConverter[ - "ARTILLERY TARGET INTELLIGENCE ZONE" + "AMBUSH" +] = require("./geometryconverter/ambush.js"); +geometryConverter[ + "ARTILLERY TARGET INTELLIGENCE ZONE" ] = require("./geometryconverter/artillery-target-intelligence-zone.js"); -geometryConverter["BLOCK"] = require("./geometryconverter/block.js"); -geometryConverter["BREACH"] = require("./geometryconverter/breach.js"); -geometryConverter["BYPASS"] = require("./geometryconverter/bypass.js"); geometryConverter[ - "CALL FOR FIRE ZONE" + "BLOCK" +] = require("./geometryconverter/block.js"); +geometryConverter[ + "BREACH" +] = require("./geometryconverter/breach.js"); +geometryConverter[ + "BYPASS" +] = require("./geometryconverter/bypass.js"); +geometryConverter[ + "CALL FOR FIRE ZONE" ] = require("./geometryconverter/call-for-fire-zone.js"); -geometryConverter["CANALIZE"] = require("./geometryconverter/canalize.js"); geometryConverter[ - "CENSOR ZONE" + "CANALIZE" +] = require("./geometryconverter/canalize.js"); +geometryConverter[ + "FLOT" +] = require("./geometryconverter/flot.js"); +geometryConverter[ + "LINE OF CONTACT" +] = require("./geometryconverter/line-of-contact.js"); +geometryConverter[ + "CENSOR ZONE" ] = require("./geometryconverter/censor-zone.js"); //geometryConverter.circle = require("./geometryconverter/circle.js"); -geometryConverter["CLEAR"] = require("./geometryconverter/clear.js"); +geometryConverter[ + "CONTAIN" +] = require("./geometryconverter/contain.js"); +geometryConverter[ + "COUNTERATTACK" +] = require("./geometryconverter/counterattack.js"); +geometryConverter[ + "CLEAR" +] = require("./geometryconverter/clear.js"); geometryConverter.corridor = require("./geometryconverter/corridor.js"); geometryConverter.cover = require("./geometryconverter/cover.js"); geometryConverter[ - "CRITICAL FRIENDLY ZONE" + "CRITICAL FRIENDLY ZONE" ] = require("./geometryconverter/critical-friendly-zone.js"); geometryConverter[ - "DEAD SPACE AREA" + "DEAD SPACE AREA" ] = require("./geometryconverter/dead-space-area.js"); -geometryConverter["DELAY"] = require("./geometryconverter/delay.js"); geometryConverter[ - "FIRE SUPPORT AREA" + "DELAY" +] = require("./geometryconverter/delay.js"); +geometryConverter[ + "FIRE SUPPORT AREA" ] = require("./geometryconverter/fire-support-area.js"); -geometryConverter["FIX"] = require("./geometryconverter/fix.js"); geometryConverter[ - "FREE FIRE AREA" + "FIX" +] = require("./geometryconverter/fix.js"); +geometryConverter[ + "FREE FIRE AREA" ] = require("./geometryconverter/free-fire-area.js"); geometryConverter.guard = require("./geometryconverter/guard.js"); -geometryConverter["ISOLATE"] = require("./geometryconverter/isolate.js"); geometryConverter[ - "MAIN ATTACK" + "ISOLATE" +] = require("./geometryconverter/isolate.js"); +geometryConverter[ + "MAIN ATTACK" ] = require("./geometryconverter/main-attack.js"); geometryConverter[ - "NAMED AREA OF INTEREST" + "NAMED AREA OF INTEREST" ] = require("./geometryconverter/named-area-of-interest.js"); geometryConverter.occupy = require("./geometryconverter/occupy.js"); geometryConverter[ - "RESTRICTIVE FIRE AREA" + "RESTRICTIVE FIRE AREA" ] = require("./geometryconverter/restrictive-fire-area.js"); geometryConverter.searchArea = require("./geometryconverter/search-area.js"); geometryConverter[ - "SENSOR ZONE" + "SENSOR ZONE" ] = require("./geometryconverter/sensor-zone.js"); geometryConverter[ - "SUPPORTING ATTACK" + "SUPPORTING ATTACK" ] = require("./geometryconverter/supporting-attack.js"); geometryConverter[ - "TARGET BUILD-UP AREA" + "TARGET BUILD-UP AREA" ] = require("./geometryconverter/target-build-up-area.js"); geometryConverter[ - "TARGET VALUE AREA" + "TARGET VALUE AREA" ] = require("./geometryconverter/target-value-area.js"); geometryConverter[ - "TARGETED AREA OF INTEREST" + "TARGETED AREA OF INTEREST" ] = require("./geometryconverter/targeted-area-of-interest.js"); geometryConverter[ - "TERMINALLY GUIDED MUNITION FOOTPRINT" + "TERMINALLY GUIDED MUNITION FOOTPRINT" ] = require("./geometryconverter/terminally-guided-munition-footprint.js"); geometryConverter[ - "ZONE OF RESPONSIBILITY" + "ZONE OF RESPONSIBILITY" ] = require("./geometryconverter/zone-of-responsibility.js"); -module.exports = geometryConverter; +module.exports = geometryConverter; \ No newline at end of file diff --git a/src/geometryconverter/air-corridor.js b/src/geometryconverter/air-corridor.js new file mode 100644 index 00000000..fcd7d816 --- /dev/null +++ b/src/geometryconverter/air-corridor.js @@ -0,0 +1,24 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function(feature) { + var annotations = []; + var annotationText = feature.properties.name; + + var points = feature.geometry.coordinates; + var distance = feature.properties.distance; //distance in meters + var centerPoint = points; + + + annotations.push(ms.geometry.addAnotation(centerPoint[1], "")); + + + var shape = ms.geometry.corridor(feature); + + + return { + geometry: shape.geometry, + annotations: annotations + }; + +}; \ No newline at end of file diff --git a/src/geometryconverter/airspace-coordination-area.js b/src/geometryconverter/airspace-coordination-area.js index 22bf687f..3c82ec2a 100644 --- a/src/geometryconverter/airspace-coordination-area.js +++ b/src/geometryconverter/airspace-coordination-area.js @@ -2,34 +2,33 @@ var ms = require("milsymbol"); // Draws a NAI module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ACA"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "ACA" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.altitudeDepth) - annotations[0].properties.text += + annotations.properties.text += "\nMIN ALT: " + feature.properties.altitudeDepth; if (feature.properties.altitudeDepth1) - annotations[0].properties.text += + annotations.properties.text += "\nMAX ALT: " + feature.properties.altitudeDepth1; if (feature.properties.additionalInformation1) - annotations[0].properties.text += + annotations.properties.text += "\nGrids " + feature.properties.additionalInformation1; if (feature.properties.dtg) - annotations[0].properties.text += "\nEFF: " + feature.properties.dtg; + annotations.properties.text += "\nEFF: " + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n- " + feature.properties.dtg1; + annotations.properties.text += "\n- " + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { + geometry: polygon.geometry, + annotations: [annotations]}; }; diff --git a/src/geometryconverter/ambush.js b/src/geometryconverter/ambush.js index 0536d7a4..176f795d 100644 --- a/src/geometryconverter/ambush.js +++ b/src/geometryconverter/ambush.js @@ -3,8 +3,7 @@ var ms = require("milsymbol"); function block(feature) { var geom; var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; + var geometry = { type: "MultiLineString", coordinates: [] }; var midpoint = ms.geometry.pointBetween(points[1], points[2], 0.5); var bearing1 = (ms.geometry.bearingBetween(points[1], points[2]) + 360) % 360; @@ -40,8 +39,9 @@ function block(feature) { var b3 = (ms.geometry.bearingBetween(tip, rotationpoint) + 360) % 360; // Arc - geom = []; - geom.push(points[1]); + geom = [ + points[1] + ]; for (var i = b1; i <= b2; i += 5) { geom.push(ms.geometry.toDistanceBearing(rotationpoint, radius, i)); @@ -53,26 +53,25 @@ function block(feature) { var diff = (b2 - b1) / 7; var p1, p2; for (i = 1; i <= 6; i++) { - geom = []; p1 = ms.geometry.toDistanceBearing(rotationpoint, radius, b1 + diff * i); p2 = ms.geometry.toDistanceBearing(p1, distance * 0.3, b3); - geom.push(p1, p2); + geom = [p1, p2]; geometry.coordinates.push(geom); } // Arrow - geom = []; - geom.push(ms.geometry.toDistanceBearing(rotationpoint, radius, midAngle)); - geom.push( + geom = [ + ms.geometry.toDistanceBearing(rotationpoint, radius, midAngle), ms.geometry.toDistanceBearing(rotationpoint, distance * 2, midAngle) - ); + ]; geometry.coordinates.push(geom); // Arrow head - geom = []; - geom.push(ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 + 45)); - geom.push(tip); - geom.push(ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 - 45)); + geom = [ + ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 + 45), + tip, + ms.geometry.toDistanceBearing(tip, distance * 0.2, b3 - 45) + ]; geometry.coordinates.push(geom); return { geometry: geometry }; diff --git a/src/geometryconverter/artillery-firing-position.js b/src/geometryconverter/artillery-firing-position.js new file mode 100644 index 00000000..7b51d70d --- /dev/null +++ b/src/geometryconverter/artillery-firing-position.js @@ -0,0 +1,46 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function (feature) { + var annotations = []; + var geometry = { + type: "MultiLineString", + coordinates: [] + }; + var points = feature.geometry.coordinates; + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var centerPoint; + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.1, bearing + 90), + ms.geometry.toDistanceBearing(points[0], 0, bearing - 90) + +]; +geometry.coordinates.push(geom); +geom = [ + ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing + 90), + ms.geometry.toDistanceBearing(points.slice(-1)[0], 0, bearing - 90), + centerPoint = ms.geometry.pointBetween(ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing + 90),ms.geometry.toDistanceBearing(points.slice(-1)[0], 0, bearing - 90),0.5) +]; +geometry.coordinates.push(geom); +console.log(centerPoint); + if(feature.properties.firNum){ + var annotationPoint = ms.geometry.toDistanceBearing(centerPoint, scale*0.01, bearing + 45); + annotations.push(ms.geometry.addAnotation(annotationPoint, feature.properties.firNum)); + } + + + return { + geometry: geometry, + annotations: annotations + }; + +}; \ No newline at end of file diff --git a/src/geometryconverter/artillery-target-intelligence-zone.js b/src/geometryconverter/artillery-target-intelligence-zone.js index ba6f8b8f..a83c0627 100644 --- a/src/geometryconverter/artillery-target-intelligence-zone.js +++ b/src/geometryconverter/artillery-target-intelligence-zone.js @@ -1,26 +1,22 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; + var annotations = {}; - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ATI ZONE"; + annotations.geometry = { type: "Point" }; + annotations.properties = { text: "ATI ZONE" }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; /*if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ + annotations.properties.text += "\n" + feature.properties.dtg1;*/ var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/barrage-fire.js b/src/geometryconverter/barrage-fire.js new file mode 100644 index 00000000..4768eb8d --- /dev/null +++ b/src/geometryconverter/barrage-fire.js @@ -0,0 +1,48 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function (feature) { + var annotations = []; + var geometry = { + type: "MultiLineString", + coordinates: [] + }; + var points = feature.geometry.coordinates; + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var centerPoint = ms.geometry.pointBetween(points[0], points[1], 0.5); + var annotTopPos = ms.geometry.toDistanceBearing(centerPoint, scale * 0.05, bearing - 90); //annotation above the line + var annotUndPos = ms.geometry.toDistanceBearing(centerPoint, scale * 0.05, bearing + 90); //annotation below the line + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.1, bearing + 90), // Right end + ms.geometry.toDistanceBearing(points[0], scale * 0.1, bearing - 90) // Left end + +]; +geometry.coordinates.push(geom); +geom = [ + ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing + 90), // Right end + ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing - 90) // Left end +]; +geometry.coordinates.push(geom); + if(feature.properties.administrator){ + annotations.push(ms.geometry.addAnotation(annotTopPos, feature.properties.administrator)); + } + if(feature.properties.type){ + annotations.push(ms.geometry.addAnotation(annotUndPos, feature.properties.type)); + } + + + return { + geometry: geometry, + annotations: annotations + }; + +}; \ No newline at end of file diff --git a/src/geometryconverter/block.js b/src/geometryconverter/block.js index 1c4ff410..097ea977 100644 --- a/src/geometryconverter/block.js +++ b/src/geometryconverter/block.js @@ -2,31 +2,26 @@ var ms = require("milsymbol"); function block(feature) { //var direction, width; - var annotations = [{}]; var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; - - var geometry1 = []; - geometry1.push(points[0], points[1]); - - var geometry2 = []; + var geometry1 = [points[0], points[1]]; var midpoint = ms.geometry.pointBetween(points[0], points[1], 0.5); - geometry2.push(points[2], midpoint); - - geometry.coordinates = [geometry1, geometry2]; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - midpoint, - points[2], - 0.5 - ); - - return { geometry: geometry, annotations: annotations }; + var geometry2 = [points[2], midpoint]; + + var geometry = { type: "MultiLineString", coordinates: [geometry1, geometry2] }; + + var annotations = { + geometry: { + type: "Point", + coordinates: ms.geometry.pointBetween( + midpoint, + points[2], + 0.5 + ) + }, + properties: { text: "B" } + }; + return { geometry: geometry, annotations: [annotations] }; } module.exports = block; diff --git a/src/geometryconverter/boundaries.js b/src/geometryconverter/boundaries.js new file mode 100644 index 00000000..0b7f5872 --- /dev/null +++ b/src/geometryconverter/boundaries.js @@ -0,0 +1,24 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + var point = []; + if (points.length % 2 === 0) { + var index = points.length / 2; + var f = ms.geometry.distanceBetween(points[index - 1], points[index]); + point = ms.geometry.pointBetweenAbsolute(points[index - 1], points[index], f / 2); + } else { + point = points.slice((points.length - 1) / 2)[0]; + } + + var annotations = { + geometry: { type: "Point", coordinates: point }, + properties: { text: "III" } + }; + + geometry.coordinates = [points]; + + return { geometry: geometry, annotations: [annotations] }; +}; \ No newline at end of file diff --git a/src/geometryconverter/breach.js b/src/geometryconverter/breach.js index a4f5b795..3bc1807f 100644 --- a/src/geometryconverter/breach.js +++ b/src/geometryconverter/breach.js @@ -1,48 +1,37 @@ var ms = require("milsymbol"); -function canalize(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45 + 180) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45 + 180) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = canalize; +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); + var length = ms.geometry.distanceBetween(pMid, points[2]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45), + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing - 45 + 180) + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45), + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 45 + 180) + ]; + geometry.coordinates.push(geom); + + var annotations = [{ + geometry: { type: "Point", coordinates: points[2] }, + properties: { text: "B" } + }]; + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/bypass.js b/src/geometryconverter/bypass.js index 75fa7573..7eb5ee75 100644 --- a/src/geometryconverter/bypass.js +++ b/src/geometryconverter/bypass.js @@ -1,50 +1,39 @@ var ms = require("milsymbol"); -function bypass(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 - 30) - ); - geom.push(points[0]); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 + 30) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 - 30) - ); - geom.push(points[1]); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 + 30) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "B"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = bypass; +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); + var length = ms.geometry.distanceBetween(pMid, points[2]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 - 30), + points[0], + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 90 + 30), + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 - 30), + points[1], + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing + 90 + 30), + ]; + geometry.coordinates.push(geom); + + var annotations = [{ + geometry: { type: "Point", coordinates: points[2] }, + properties: { text: "B" } + }]; + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/call-for-fire-zone.js b/src/geometryconverter/call-for-fire-zone.js index 007dcd78..6c84a1e4 100644 --- a/src/geometryconverter/call-for-fire-zone.js +++ b/src/geometryconverter/call-for-fire-zone.js @@ -1,26 +1,23 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "CFF ZONE" } + }; - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CFF ZONE"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - /*if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ + if (feature.properties.uniqueDesignation) + annotations.properties.text += + "\n" + feature.properties.uniqueDesignation; + /* if (feature.properties.dtg) + annotations.properties.text += "\n" + feature.properties.dtg; + /*if (feature.properties.dtg1) + annotations.properties.text += "\n" + feature.properties.dtg1;*/ - var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; - if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; - } + var polygon = ms.geometry.circleCorridorPolygon(feature); + if (polygon.annotation.hasOwnProperty("geometry")) { + annotations.geometry = polygon.annotation.geometry; + } - return { geometry: geometry, annotations: annotations }; -}; + return { geometry: polygon.geometry, annotations: [annotations] }; +}; \ No newline at end of file diff --git a/src/geometryconverter/canalize.js b/src/geometryconverter/canalize.js index fe2925ba..9188e3ec 100644 --- a/src/geometryconverter/canalize.js +++ b/src/geometryconverter/canalize.js @@ -1,48 +1,37 @@ var ms = require("milsymbol"); -function canalize(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0]]; - geom.push(ms.geometry.toDistanceBearing(points[0], length, bearing + 90)); - geom.push(ms.geometry.toDistanceBearing(points[1], length, bearing + 90)); - geom.push(points[1]); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45 + 180) - ); - geometry.coordinates.push(geom); - - geom = []; - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45) - ); - geom.push( - ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45 + 180) - ); - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "C"; - annotations[0].geometry.coordinates = points[2]; - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = canalize; +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); + var length = ms.geometry.distanceBetween(pMid, points[2]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45), + ms.geometry.toDistanceBearing(points[0], scale * 0.2, bearing + 45 + 180) + ]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45), + ms.geometry.toDistanceBearing(points[1], scale * 0.2, bearing - 45 + 180) + ]; + geometry.coordinates.push(geom); + + var annotations = [{ + geometry: { type: "Point", coordinates: points[2] }, + properties: { text: "C" } + }]; + + return { geometry: geometry, annotations: annotations }; +} \ No newline at end of file diff --git a/src/geometryconverter/censor-zone.js b/src/geometryconverter/censor-zone.js index bce149c0..29508b8d 100644 --- a/src/geometryconverter/censor-zone.js +++ b/src/geometryconverter/censor-zone.js @@ -1,26 +1,23 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "CENSOR ZONE" } + }; - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CENSOR ZONE"; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/circle.js b/src/geometryconverter/circle.js index 7c0d3d12..f9f8cf6a 100644 --- a/src/geometryconverter/circle.js +++ b/src/geometryconverter/circle.js @@ -4,8 +4,8 @@ var ms = require("milsymbol"); module.exports = function(feature) { var p = feature.geometry.coordinates; var r = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; + var geometry = { type: "Polygon", coordinates: [[]] }; + for (var direction = 360; direction >= 0; direction -= 5) { geometry.coordinates[0].push( ms.geometry.toDistanceBearing(p, r, direction) diff --git a/src/geometryconverter/clear.js b/src/geometryconverter/clear.js index cd289b55..03803a76 100644 --- a/src/geometryconverter/clear.js +++ b/src/geometryconverter/clear.js @@ -1,67 +1,60 @@ var ms = require("milsymbol"); -function clear(feature) { - //var direction, width; - var annotations = [{}]; - - var points = feature.geometry.coordinates; - var geometry = { type: "MultiLineString" }; - var scale = ms.geometry.distanceBetween(points[0], points[1]); - - geometry.coordinates = []; - - var geom = [points[0], points[1]]; - geometry.coordinates.push(geom); - - var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); - var length = ms.geometry.distanceBetween(pMid, points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "C"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - pMid, - geom[1], - 0.5 - ); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - pMid = ms.geometry.pointBetween(points[0], points[1], 0.2); - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - pMid = ms.geometry.pointBetween(points[0], points[1], 0.8); - geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; - geometry.coordinates.push(geom); - - geom = []; - geom.push(ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60)); - geom.push(pMid); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) - ); - geometry.coordinates.push(geom); - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = clear; +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + var scale = ms.geometry.distanceBetween(points[0], points[1]); + + var geom = [points[0], points[1]]; + geometry.coordinates.push(geom); + + var pMid = ms.geometry.pointBetween(points[0], points[1], 0.5); + var length = ms.geometry.distanceBetween(pMid, points[2]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + + geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; + geometry.coordinates.push(geom); + + var annotations = [{ + geometry: { + type: "Point", + coordinates: ms.geometry.pointBetween( + pMid, + geom[1], + 0.5 + ) + }, + properties: { text: "C" } + }]; + + geom = [ + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60), + pMid, + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) + ]; + geometry.coordinates.push(geom); + + pMid = ms.geometry.pointBetween(points[0], points[1], 0.2); + geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60), + pMid, + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) + ]; + geometry.coordinates.push(geom); + + pMid = ms.geometry.pointBetween(points[0], points[1], 0.8); + geom = [pMid, ms.geometry.toDistanceBearing(pMid, length, bearing + 90)]; + geometry.coordinates.push(geom); + + geom = [ + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60), + pMid, + ms.geometry.toDistanceBearing(pMid, scale * 0.15, bearing + 60 + 60) + ]; + geometry.coordinates.push(geom); + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/contain.js b/src/geometryconverter/contain.js new file mode 100644 index 00000000..10e8ef2c --- /dev/null +++ b/src/geometryconverter/contain.js @@ -0,0 +1,44 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + let annotations = [], + points = feature.geometry.coordinates, + center = ms.geometry.pointBetween(points[0], points[1], 0.5), + geometry = { type: "MultiLineString", coordinates: [] }; + + // Ensure points are counter-clockwise, so the semi circle is drawn on the correct side + if (ms.geometry.isClockwise(...points)) + points = [points[1], points[0], points[2]]; + + // Draw a semicircle with openings points[0] and points[1], oriented away from points[2], with "spokes" facing inward + let semiCircle = [], + spokes = [], + radius = ms.geometry.distanceBetween(points[0], points[1]) / 2, + intialBearing = ms.geometry.bearingBetween(center, points[0]); + for (var direction = intialBearing; direction <= intialBearing + 180; direction += 18) { + let vert = ms.geometry.toDistanceBearing(center, radius, direction); + semiCircle.push(vert); + spokes.push([vert, ms.geometry.pointBetween(vert, center, 0.33)]); + } + geometry.coordinates.push(semiCircle, ...spokes); + + // Draw the arrow head + let scale = ms.geometry.distanceBetween(points[2], center), + bearing = ms.geometry.bearingBetween(points[0], points[1]), + arrowHead = [ + ms.geometry.toDistanceBearing(center, scale * 0.15, bearing + 60), + center, + ms.geometry.toDistanceBearing(center, scale * 0.15, bearing + 60 + 60) + ]; + geometry.coordinates.push(arrowHead); + + // Draw the arrow body + geometry.coordinates.push([points[2], center]); + + annotations.push(ms.geometry.addAnotation( + ms.geometry.toDistanceBearing(center, radius, intialBearing + 90), "C")); + annotations.push(ms.geometry.addAnotation( + ms.geometry.pointBetween(points[2], center, 0.5), "ENY")); + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/coordinated-fire-line.js b/src/geometryconverter/coordinated-fire-line.js new file mode 100644 index 00000000..a2958531 --- /dev/null +++ b/src/geometryconverter/coordinated-fire-line.js @@ -0,0 +1,43 @@ +var ms = require("milsymbol"); +const { getPointResolution } = require("ol/proj"); +const convertToDashes = require("../geometry/converttodashes"); + +module.exports = function(feature) { + + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + var geometry1 = []; + var annotationText = feature.properties.name; + + for (var i = 0; i < points.length; i++) { + geometry1.push(points[i]); + + } + + var annotations = { + geometry: { type: "Point" }, + properties: { text: annotationText } + }; + + // if odd number of vertices, put on central vertex + if (points.length % 2 !== 0) { + annotations.geometry.coordinates = points[parseInt(points.length / 2)]; + } else { + annotations.geometry.coordinates = ms.geometry.pointBetween( + points[parseInt(points.length / 2) - 1], + points[parseInt(points.length / 2)], + 0.5 + ); + } + if (feature.properties.administrator) + annotations.properties.text += + " " + feature.properties.administrator; + if (feature.properties.nationality) + annotations.properties.text += " (" + feature.properties.nationality + ") "; + + + geometry.coordinates = convertToDashes(geometry1, 1 / 50); + + + return { geometry: geometry, annotations: [annotations], props: { dashes: true } }; +}; \ No newline at end of file diff --git a/src/geometryconverter/corridor.js b/src/geometryconverter/corridor.js index a55a189c..d1b53b88 100644 --- a/src/geometryconverter/corridor.js +++ b/src/geometryconverter/corridor.js @@ -1,76 +1,73 @@ var ms = require("milsymbol"); // Draws a corridor with a widht in meters -function corridor(feature) { - var direction; - var points = feature.geometry.coordinates; - var width = feature.properties.distance; - var geometry = { type: "Polygon" }; - geometry.coordinates = [[]]; - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); - for (var j = 1; j < points.length - 1; j++) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var width = feature.properties.distance; + var geometry = { type: "Polygon", coordinates: [ + [] + ] }; + var direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - width / 2 * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) ); - } + for (var j = 1; j < points.length - 1; j++) { + var direction1 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + var direction2 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[j], + width / 2 * factor, + (direction1 + direction2) / 2 + ) + ); + } - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 180) % - 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction - 90 - ) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width / 2, - direction + 90 - ) - ); - - for (j = points.length - 2; j > 0; j--) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 180) % + 360; + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width / 2, + direction - 90 + ) + ); geometry.coordinates[0].push( - ms.geometry.toDistanceBearing( - points[j], - -(width / 2) * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + points[points.length - 1], + width / 2, + direction + 90 + ) ); - } - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) - ); - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) - ); //Close line - return { geometry: geometry }; -} + for (j = points.length - 2; j > 0; j--) { + direction1 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + direction2 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing( + points[j], -(width / 2) * factor, + (direction1 + direction2) / 2 + ) + ); + } -module.exports = corridor; + direction = (ms.geometry.bearingBetween(points[0], points[1]) + 360) % 360; + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing(points[0], width / 2, direction + 90) + ); + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing(points[0], width / 2, direction - 90) + ); //Close line + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/counterattack.js b/src/geometryconverter/counterattack.js new file mode 100644 index 00000000..366f5ac9 --- /dev/null +++ b/src/geometryconverter/counterattack.js @@ -0,0 +1,105 @@ +var ms = require("milsymbol"); +const convertToDashes = require("../geometry/converttodashes"); + +// Draws a corridor with a widht in meters +module.exports = function(feature) { + var direction, width; + var points = [...feature.geometry.coordinates]; + var arrowHead = points.pop(); + var widthHeadRatio = 0.7; + var annotations = []; + var geometry = { type: "MultiLineString", coordinates: [] }; + var geometry1 = []; + + // Width of the arrow + direction = ms.geometry.bearingBetween(points[0], points[1]); + var deltaDirection = direction - ms.geometry.bearingBetween(points[0], arrowHead); + var distance = ms.geometry.distanceBetween(points[0], arrowHead); + var arrowHead2 = ms.geometry.toDistanceBearing( + points[0], + distance, + direction + deltaDirection + ); + width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; + + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; + geometry1.push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction - 90 + ) + ); + + for (var j = points.length - 2; j > 0; j--) { + var direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + var direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], + width * widthHeadRatio * factor, + (direction1 + direction2) / 2 + ) + ); + } + + // Arrowhead + direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; + geometry1.push( + ms.geometry.toDistanceBearing( + arrowHead, + width * (1 - widthHeadRatio), + direction + 90 + ) + ); + geometry1.push(arrowHead, points[0], arrowHead2, + ms.geometry.toDistanceBearing( + arrowHead2, + width * (1 - widthHeadRatio), + direction - 90 + ) + ); + + for (j = 1; j < points.length - 1; j++) { + direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], -(width * widthHeadRatio) * factor, + (direction1 + direction2) / 2 + ) + ); + } + + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; + geometry1.push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction + 90 + ) + ); + + annotations.push(ms.geometry.addAnotation(ms.geometry.pointBetween(points[0], points[1], 0.5), "CATK")); + geometry.coordinates = convertToDashes(geometry1, 1 / 64); + + return { geometry: geometry, annotations: annotations, props: { dashes: true } }; +}; \ No newline at end of file diff --git a/src/geometryconverter/cover.js b/src/geometryconverter/cover.js index 991df02c..a15a7c6d 100644 --- a/src/geometryconverter/cover.js +++ b/src/geometryconverter/cover.js @@ -1,54 +1,53 @@ var ms = require("milsymbol"); // Draws a circle withe a radius in meters -function cover(feature) { - var p = feature.geometry.coordinates; - var scale = Math.max( - ms.geometry.distanceBetween(p[0], p[1]), - ms.geometry.distanceBetween(p[0], p[2]) - ); - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; +module.exports = function(feature) { + var p = feature.geometry.coordinates; + var scale = Math.max( + ms.geometry.distanceBetween(p[0], p[1]), + ms.geometry.distanceBetween(p[0], p[2]) + ); + var geometry = { type: "MultiLineString", coordinates: [ + [] + ] }; - var geom = []; - var pMid = ms.geometry.pointBetween(p[0], p[1], 0.5); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); - geom.push(p[0]); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)) - ); - var pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); - geom.push(pMid2); - geom.push(p[1]); - geometry.coordinates.push(geom); + var pMid = ms.geometry.pointBetween(p[0], p[1], 0.5); + var bearing = ms.geometry.bearingBetween(p[0], p[1]); + var pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); + var geom = [ + p[0], + ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)), + pMid2, + p[1] + ]; + geometry.coordinates.push(geom); - geom = []; - bearing = ms.geometry.bearingBetween(p[1], pMid2); - geom.push(ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing - 45)); - geom.push(p[1]); - geom.push(ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing + 45)); - geometry.coordinates.push(geom); + bearing = ms.geometry.bearingBetween(p[1], pMid2); + geom = [ + ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing - 45), + p[1], + ms.geometry.toDistanceBearing(p[1], scale * 0.08, bearing + 45) + ]; + geometry.coordinates.push(geom); - geom = []; - pMid = ms.geometry.pointBetween(p[0], p[2], 0.5); - bearing = ms.geometry.bearingBetween(p[0], p[2]); - geom.push(p[0]); - geom.push( - ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)) - ); - pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); - geom.push(pMid2); - geom.push(p[2]); - geometry.coordinates.push(geom); + pMid = ms.geometry.pointBetween(p[0], p[2], 0.5); + bearing = ms.geometry.bearingBetween(p[0], p[2]); + pMid2 = ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + 120); + geom = [ + p[0], + ms.geometry.toDistanceBearing(pMid, scale * 0.05, bearing + (120 - 180)), + pMid2, + p[2] + ]; + geometry.coordinates.push(geom); - geom = []; - bearing = ms.geometry.bearingBetween(p[2], pMid2); - geom.push(ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing - 45)); - geom.push(p[2]); - geom.push(ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing + 45)); - geometry.coordinates.push(geom); + bearing = ms.geometry.bearingBetween(p[2], pMid2); + geom = [ + ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing - 45), + p[2], + ms.geometry.toDistanceBearing(p[2], scale * 0.08, bearing + 45) + ]; + geometry.coordinates.push(geom); - return { geometry: geometry }; -} - -module.exports = cover; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/critical-friendly-zone.js b/src/geometryconverter/critical-friendly-zone.js index 129a87f6..72a02dd9 100644 --- a/src/geometryconverter/critical-friendly-zone.js +++ b/src/geometryconverter/critical-friendly-zone.js @@ -1,26 +1,23 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "CF ZONE" } + }; - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "CF ZONE"; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/dead-space-area.js b/src/geometryconverter/dead-space-area.js index f024e82b..185af56c 100644 --- a/src/geometryconverter/dead-space-area.js +++ b/src/geometryconverter/dead-space-area.js @@ -1,26 +1,22 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "DA"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "DA" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/delay.js b/src/geometryconverter/delay.js index ba43b336..fd399c80 100644 --- a/src/geometryconverter/delay.js +++ b/src/geometryconverter/delay.js @@ -1,67 +1,57 @@ var ms = require("milsymbol"); -function delay(feature) { - var annotations = [{}]; - var directionFactor = -1; - var points = feature.geometry.coordinates; - - var width = ms.geometry.distanceBetween(points[1], points[2]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - - var geometry = { type: "MultiLineString" }; - - geometry.coordinates = []; - - var geometry1 = []; - geometry1.push(points[0]); - geometry1.push(points[1]); - //console.log('arrow bearing ' + bearing) - //console.log('fjomp bearing ' + ms.geometry.bearingBetween(points[1],points[2])) - - var midpoint = ms.geometry.pointBetween(points[1], points[2], 0.5); - var curveBearing = ms.geometry.bearingBetween(points[1], points[2]); - if (curveBearing < 0 && bearing < 0) directionFactor = 1; // OK - //if (curveBearing > 0 && bearing < 0)directionFactor = -1; // OK - //if (curveBearing < 0 && bearing > 0)directionFactor = -1; // OK - //if (curveBearing > 0 && bearing > 0)directionFactor = -1; // OK - //var directionFactor = (Math.abs(curveBearing)/curveBearing)*(Math.abs(bearing)/bearing); - - for (var i = 10; i < 180; i += 10) { - geometry1.push( - ms.geometry.toDistanceBearing( - midpoint, - width / 2, - curveBearing + i * directionFactor + 180 - ) - ); - } - - geometry1.push(points[2]); - - var geometry2 = []; - geometry2.push( - ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing + 45) - ); - geometry2.push(points[0]); - geometry2.push( - ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing - 45) - ); - - geometry.coordinates = [geometry1, geometry2]; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = feature.properties.dtg - ? feature.properties.dtg + "\n" - : ""; - annotations[0].properties.text += "D"; - annotations[0].geometry.coordinates = ms.geometry.pointBetween( - points[0], - points[1], - 0.5 - ); - - return { geometry: geometry, annotations: annotations }; -} - -module.exports = delay; +module.exports = function(feature) { + var directionFactor = -1; + var points = feature.geometry.coordinates; + var width = ms.geometry.distanceBetween(points[1], points[2]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + + var geometry = { type: "MultiLineString", coordinates: [] }; + var geometry1 = [ + points[0], + points[1] + ]; + + var midpoint = ms.geometry.pointBetween(points[1], points[2], 0.5); + var curveBearing = ms.geometry.bearingBetween(points[1], points[2]); + if (curveBearing < 0 && bearing < 0) directionFactor = 1; // OK + //if (curveBearing > 0 && bearing < 0)directionFactor = -1; // OK + //if (curveBearing < 0 && bearing > 0)directionFactor = -1; // OK + //if (curveBearing > 0 && bearing > 0)directionFactor = -1; // OK + //var directionFactor = (Math.abs(curveBearing)/curveBearing)*(Math.abs(bearing)/bearing); + + for (var i = 10; i < 180; i += 10) { + geometry1.push( + ms.geometry.toDistanceBearing( + midpoint, + width / 2, + curveBearing + i * directionFactor + 180 + ) + ); + } + geometry1.push(points[2]); + + // Geometry 2 - The head of the arrow: + var geometry2 = [ + ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing + 45), // Right end + points[0], // Tip of the arrow + ms.geometry.toDistanceBearing(points[0], width * 0.4, bearing - 45) // Left end + ]; + + geometry.coordinates = [geometry1, geometry2]; + var annotations = [{ + geometry: { + type: "Point", + coordinates: ms.geometry.pointBetween( + points[0], + points[1], + 0.5 + ) + }, + properties: { + text: feature.properties.dtg ? feature.properties.dtg + "\nD" : "D" + } + }]; + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/fire-support-area.js b/src/geometryconverter/fire-support-area.js index 59eec9bd..349d7d0e 100644 --- a/src/geometryconverter/fire-support-area.js +++ b/src/geometryconverter/fire-support-area.js @@ -1,24 +1,20 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = - "FSA " + (feature.properties.uniqueDesignation || ""); + var annotations = { + geometry: { type: "Point" }, + properties: { text: "FSA " + (feature.properties.uniqueDesignation || "") } + }; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/fire-support-coordination-line.js b/src/geometryconverter/fire-support-coordination-line.js new file mode 100644 index 00000000..ba79a2e5 --- /dev/null +++ b/src/geometryconverter/fire-support-coordination-line.js @@ -0,0 +1,30 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + var annotations = []; + var annotationTop = ""; + var annotationUnder = ""; + + + if (feature.properties.administrator) + annotationTop += feature.properties.administrator + " " + feature.properties.name; + if (feature.properties.dtg) + annotationUnder += feature.properties.dtg; + if (feature.properties.dtg1) + annotationUnder += " -\n" + feature.properties.dtg1; + + geometry.coordinates = [points]; + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], 30, 45), annotationTop)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], 30, -45), annotationTop)); + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], -30, -45), annotationUnder)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], -30, 45), annotationUnder)); + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], 40, -90), "PL "+feature.properties.t1)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], 40, 90), "PL "+feature.properties.t1)); + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/fix.js b/src/geometryconverter/fix.js index 21d8ebf1..33fb4ed0 100644 --- a/src/geometryconverter/fix.js +++ b/src/geometryconverter/fix.js @@ -1,116 +1,33 @@ var ms = require("milsymbol"); -function fix(feature) { - //var direction, width; - var points = feature.geometry.coordinates; - - var length = ms.geometry.distanceBetween(points[0], points[1]); - var bearing = ms.geometry.bearingBetween(points[0], points[1]); - var widht = length * 0.10; - - var geometry = { type: "MultiLineString" }; - - geometry.coordinates = []; - - var geometry1 = []; - - geometry1.push(points[0]); - - geometry1.push(ms.geometry.pointBetween(points[0], points[1], 0.2)); - - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.25), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.3), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.35), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.4), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.45), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.5), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.55), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.6), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.65), - widht, - bearing + 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.7), - widht, - bearing - 90 - ) - ); - geometry1.push( - ms.geometry.toDistanceBearing( - ms.geometry.pointBetween(points[0], points[1], 0.75), - widht, - bearing + 90 - ) - ); - - geometry1.push(ms.geometry.pointBetween(points[0], points[1], 0.8)); - - geometry1.push(points[1]); - - var geometry2 = []; - geometry2.push( - ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing + 45) - ); - geometry2.push(points[0]); - geometry2.push( - ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing - 45) - ); - - geometry.coordinates = [geometry1, geometry2]; - return { geometry: geometry }; -} - -module.exports = fix; +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var length = ms.geometry.distanceBetween(points[0], points[1]); + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + var widht = length * 0.10; + + var geometry = { type: "MultiLineString", coordinates: [] }; + var geometry1 = []; + var opposite = -90; + geometry1.push(points[0], ms.geometry.pointBetween(points[0], points[1], 0.2)); + for (var i = 0.25; i < 0.8; i = i + 0.05) { + opposite = -opposite + geometry1.push( + ms.geometry.toDistanceBearing( + ms.geometry.pointBetween(points[0], points[1], i), + widht, + bearing + opposite + ) + ); + } + geometry1.push(ms.geometry.pointBetween(points[0], points[1], 0.8), points[1]); + + var geometry2 = [ + ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing + 45), + points[0], + ms.geometry.toDistanceBearing(points[0], widht * 1.5, bearing - 45) + ]; + + geometry.coordinates = [geometry1, geometry2]; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/flot.js b/src/geometryconverter/flot.js new file mode 100644 index 00000000..c6496812 --- /dev/null +++ b/src/geometryconverter/flot.js @@ -0,0 +1,142 @@ +var ms = require("milsymbol"); + +function flot(feature, relative = false) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + // Geometry 1 - bearing line of n points + var bearingGeos = []; + + var bearingWidth = (feature.properties.bearingWidth) ? feature.properties.bearingWidth : 400; + + + + // loop to repeat for every segment of the polygon that was input + for (var i = 1; i < points.length; i += 1) { + if (relative === false) { + // visualize that many bearings with absolute width + bearingGeos = flotifyAbsolute(bearingGeos, points[i - 1], points[i], bearingWidth) + } else { + // Alternative - old implementation based on relative sizes of bearings + // Making each segment into a bearing line with 2^5 = 32 bearings + bearingGeos = flotifyRelative(bearingGeos, points[i - 1], points[i], 5) + } + } + + // visualise individual bearings + for (var i = 0; i < bearingGeos.length; i += 1) { + geometry.coordinates.push(bearingGeos[i]); + } + + var annotations = { + geometry: { type: "Point" }, + properties: { text: "FLOT" } + }; + // if odd number of vertices, put on central vertex + if (points.length % 2 !== 0) { + // takes the central vertex by automatic rounding down and indexing from zero + annotations.geometry.coordinates = points[parseInt(points.length / 2)]; + } + // otherwise even number of vertices mean odd number of sides, put on central side + else { + annotations.geometry.coordinates = ms.geometry.pointBetween( + points[parseInt(points.length / 2) - 1], + points[parseInt(points.length / 2)], + 0.5 + ); + } + + return { geometry: geometry, annotations: [annotations] }; +} + +// old implementation, creates a bearing line with 2^(degree-1) bearings, each segment has bearings of different size +// example: degree = 5, then number of bearings is 2^4 = 16 in each segment +// if degree is zero, it draws a straight line +// gaps or spacing is implemented in this version +function flotifyRelative(geo, pointa, pointb, degree = 0, bearingSpacing = 4) { + + if (degree <= 0) { + geo.push(pointa, pointb) + return geo; + } + + const width = ms.geometry.distanceBetween(pointa, pointb); + const midpoint = ms.geometry.pointBetween(pointa, pointb, 0.5); + const curveBearing = ms.geometry.bearingBetween(pointa, pointb); + + if (degree === 1) { + var bearingGeo = []; + for (var i = 0; i <= 180; i += 10) { + bearingGeo.push( + ms.geometry.toDistanceBearing( + midpoint, + width / 2 - bearingSpacing / 2, + curveBearing + i + 180 + ) + ); + } + geo.push(bearingGeo) + } else { + geo = flotifyRelative(geo, pointa, midpoint, degree - 1) + geo = flotifyRelative(geo, midpoint, pointb, degree - 1) + } + return geo; +} + + +function flotifyAbsolute(geo, pointa, pointb, bearingWidth, bearingSpacing = 4) { + // measure distance between each two points + let distance = ms.geometry.distanceBetween(pointa, pointb); + // calculate how many bearings can fit + let widthMeasure = 0; + let numBearings = 0; + // if segment is longer than at least one bearing, calculate number and length of bearing line + if (bearingWidth < distance) { + numBearings = 1; + widthMeasure = widthMeasure + bearingWidth; + if (widthMeasure <= distance) { + while (widthMeasure <= distance) { + widthMeasure = widthMeasure + bearingSpacing + bearingWidth; + numBearings = numBearings + 1; + } + // correction due to overshoot in while loop + numBearings = numBearings - 1; + widthMeasure = widthMeasure - bearingSpacing - bearingWidth; + } + } + // calculate padding on the sides of the segment + let padding = ((distance - widthMeasure) / 2) + + // loop for number of bearings, move the starting point and create the bearing + for (var i = 1; i <= numBearings; i += 1) { + + var bearingGeo = []; + + // draw bearings of constant size along the dedicated segment, starting at a point offset by the internal padding + let leftAnchor = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth) - bearingWidth) + (i - 1) * bearingSpacing) + ); + let rightAnchor = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth)) + (i - 1) * bearingSpacing) + ); + let curveBearing = ms.geometry.bearingBetween(leftAnchor, rightAnchor); + midpoint = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth) - bearingWidth / 2) + (i - 1) * bearingSpacing) + ); + // actually visualising the bearing + for (var j = 0; j <= 180; j += 10) { + bearingGeo.push( + ms.geometry.toDistanceBearing( + midpoint, + bearingWidth / 2, + curveBearing + j + 180 + ) + ) + } + geo.push(bearingGeo) + } + + return geo; +} + +module.exports = flot; \ No newline at end of file diff --git a/src/geometryconverter/free-fire-area.js b/src/geometryconverter/free-fire-area.js index 80006c2f..2048f206 100644 --- a/src/geometryconverter/free-fire-area.js +++ b/src/geometryconverter/free-fire-area.js @@ -1,26 +1,24 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "FFA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + var annotations = { + geometry: { type: "Point" }, + properties: { text: "FFA" } + }; + if (feature.properties.uniqueDesignation) { + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; - + } + if (feature.properties.dtg) { + annotations.properties.text += "\n" + feature.properties.dtg; + } + if (feature.properties.dtg1) { + annotations.properties.text += "\n" + feature.properties.dtg1; + } var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/guard.js b/src/geometryconverter/guard.js index 9b3606a7..f1a4c507 100644 --- a/src/geometryconverter/guard.js +++ b/src/geometryconverter/guard.js @@ -1,4 +1,2 @@ // Draws a circle withe a radius in meters -function guard(feature) {} - -module.exports = guard; +module.exports = function(feature) {}; \ No newline at end of file diff --git a/src/geometryconverter/isolate.js b/src/geometryconverter/isolate.js index fdc8445e..f9e1e51e 100644 --- a/src/geometryconverter/isolate.js +++ b/src/geometryconverter/isolate.js @@ -1,39 +1,36 @@ var ms = require("milsymbol"); // Draws a circle withe a radius in meters -function isolate(feature) { - var p = feature.geometry.coordinates; - var r = ms.geometry.distanceBetween(p[0], p[1]); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); +module.exports = function(feature) { + var p = feature.geometry.coordinates; + var r = ms.geometry.distanceBetween(p[0], p[1]); + var bearing = ms.geometry.bearingBetween(p[0], p[1]); - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; - for (var d = 0; d <= 340; d += 5) { - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(p[0], r, d + bearing) - ); - } + var geometry = { type: "MultiLineString", coordinates: [ + [] + ] }; + for (var d = 0; d <= 340; d += 5) { + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing(p[0], r, d + bearing) + ); + } - for (d = 20; d <= 320; d += 40) { - var geom = []; - geom.push(ms.geometry.toDistanceBearing(p[0], r, d + bearing)); - geom.push(ms.geometry.toDistanceBearing(p[0], r * 0.7, 10 + d + bearing)); - geom.push(ms.geometry.toDistanceBearing(p[0], r, 20 + d + bearing)); - geometry.coordinates.push(geom); - } - - geom = []; - var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) - ); - geometry.coordinates.push(geom); + for (d = 20; d <= 320; d += 40) { + var geom = [ + ms.geometry.toDistanceBearing(p[0], r, d + bearing), + ms.geometry.toDistanceBearing(p[0], r * 0.7, 10 + d + bearing), + ms.geometry.toDistanceBearing(p[0], r, 20 + d + bearing) + ]; + geometry.coordinates.push(geom); + } - return { geometry: geometry }; -} + var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); + geom = [ + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45), + pEnd, + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) + ]; + geometry.coordinates.push(geom); -module.exports = isolate; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/line-of-contact.js b/src/geometryconverter/line-of-contact.js new file mode 100644 index 00000000..8fe37706 --- /dev/null +++ b/src/geometryconverter/line-of-contact.js @@ -0,0 +1,172 @@ +var ms = require("milsymbol"); + +function lineOfContact(feature, relative = false) { + //var direction, width; + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + // Geometry 1 - bearing line of n points + var bearingGeos = []; + var bearingWidth = (feature.properties.bearingWidth) ? feature.properties.bearingWidth : 400; + var bearingSpacing = (feature.properties.bearingSpacing) ? feature.properties.bearingSpacing : 5; + var locWidth = (feature.properties.locWidth) ? feature.properties.locWidth : 10; + + console.log(feature.properties); + // loop to repeat for every segment of the polygon that was input + for (var i = 1; i < points.length; i += 1) { + if (relative === false) { + // visualize that many bearings with absolute width + bearingGeos = lineOfContactAbsolute(bearingGeos, points[i - 1], points[i], bearingWidth, bearingSpacing, locWidth) + } else { + // Alternative - old implementation based on relative sizes of bearings + // Making each segment into a bearing line with 2^5 = 32 bearings + bearingGeos = lineOfContactRelative(bearingGeos, points[i - 1], points[i], 5) + } + } + + // visualise individual bearings + for (var i = 0; i < bearingGeos.length; i += 1) { + geometry.coordinates.push(bearingGeos[i]); + } + + var annotations = { + geometry: { type: "Point" }, + properties: { text: "Line of Contact" } + }; + + // if odd number of vertices, put on central vertex + if (points.length % 2 !== 0) { + // takes the central vertex by automatic rounding down and indexing from zero + annotations.geometry.coordinates = points[parseInt(points.length / 2)]; + } + // otherwise even number of vertices mean odd number of sides, put on central side + else { + annotations.geometry.coordinates = ms.geometry.pointBetween( + points[parseInt(points.length / 2) - 1], + points[parseInt(points.length / 2)], + 0.5 + ); + } + + return { geometry: geometry, annotations: [annotations] }; +} + +// old implementation, creates a bearing line with 2^(degree-1) bearings, each segment has bearings of different size +// example: degree = 5, then number of bearings is 2^4 = 16 in each segment +// if degree is zero, it draws a straight line +// gaps or spacing is implemented in this version +function lineOfContactRelative(geo, pointa, pointb, degree = 0, bearingSpacing = 4, locWidth = 3) { + + if (degree <= 0) { + geo.push(pointa, pointb) + return geo; + } + + const width = ms.geometry.distanceBetween(pointa, pointb); + const midpoint = ms.geometry.pointBetween(pointa, pointb, 0.5); + const curveBearing = ms.geometry.bearingBetween(pointa, pointb); + + if (degree === 1) { + var bearingGeo1 = []; + var bearingGeo2 = []; + for (var i = 0; i <= 180; i += 10) { + bearingGeo1.push( + ms.geometry.toDistanceBearing( + ms.geometry.toDistanceBearing(midpoint, (width + locWidth) / 2, curveBearing + 90), + width / 2 - bearingSpacing / 2, + curveBearing + i + 180 + ) + ); + } + // adding a second line of bearings turned + for (var j = 180; j <= 360; j += 10) { + bearingGeo2.push( + ms.geometry.toDistanceBearing( + // shift all bearings towards center of line + ms.geometry.toDistanceBearing(midpoint, (width + locWidth) / 2, curveBearing - 90), + width / 2 - bearingSpacing / 2, + curveBearing + j + 180 + ) + ) + } + geo.push(bearingGeo1) + geo.push(bearingGeo2) + } else { + geo = lineOfContactRelative(geo, pointa, midpoint, degree - 1) + geo = lineOfContactRelative(geo, midpoint, pointb, degree - 1) + } + return geo; +} + +function lineOfContactAbsolute(geo, pointa, pointb, bearingWidth, bearingSpacing, locWidth) { + + // measure distance between each two points + let distance = ms.geometry.distanceBetween(pointa, pointb); + // calculate how many bearings can fit + let widthMeasure = 0; + let numBearings = 0; + // if segment is longer than at least one bearing, calculate number and length of bearing line + if (bearingWidth < distance) { + numBearings = 1; + widthMeasure = widthMeasure + bearingWidth; + if (widthMeasure <= distance) { + while (widthMeasure <= distance) { + widthMeasure = widthMeasure + bearingSpacing + bearingWidth; + numBearings = numBearings + 1; + } + // correction due to overshoot in while loop + numBearings = numBearings - 1; + widthMeasure = widthMeasure - bearingSpacing - bearingWidth; + } + } + // calculate padding on the sides of the segment + let padding = ((distance - widthMeasure) / 2) + + // loop for number of bearings, move the starting point and create the bearing + for (var i = 1; i <= numBearings; i += 1) { + + // initialising both lines of contact + var bearingGeo1 = []; + var bearingGeo2 = []; + + // draw bearings of constant size along the dedicated segment, starting at a point offset by the internal padding + let leftAnchor = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth) - bearingWidth) + (i - 1) * bearingSpacing) + ); + let rightAnchor = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth)) + (i - 1) * bearingSpacing) + ); + let curveBearing = ms.geometry.bearingBetween(leftAnchor, rightAnchor); + midpoint = ms.geometry.pointBetweenAbsolute( + pointa, pointb, (padding + ((i * bearingWidth) - bearingWidth / 2) + (i - 1) * bearingSpacing) + ); + // actually visualising the bearing + for (var j = 0; j <= 180; j += 10) { + bearingGeo1.push( + ms.geometry.toDistanceBearing( + // shift all bearings towards center of line and add width of LOC + ms.geometry.toDistanceBearing(midpoint, (bearingWidth + locWidth) / 2, curveBearing + 90), + bearingWidth / 2, + curveBearing + j + 180 + ) + ) + } + // adding a second line of bearings turned + for (var j = 180; j <= 360; j += 10) { + bearingGeo2.push( + ms.geometry.toDistanceBearing( + // shift all bearings towards center of line and add width of LOC + ms.geometry.toDistanceBearing(midpoint, (bearingWidth + locWidth) / 2, curveBearing - 90), + bearingWidth / 2, + curveBearing + j + 180 + ) + ) + } + geo.push(bearingGeo1) + geo.push(bearingGeo2) + } + + return geo; +} + +module.exports = lineOfContact; \ No newline at end of file diff --git a/src/geometryconverter/main-attack.js b/src/geometryconverter/main-attack.js index d8813dda..45e179c5 100644 --- a/src/geometryconverter/main-attack.js +++ b/src/geometryconverter/main-attack.js @@ -1,137 +1,124 @@ var ms = require("milsymbol"); // Draws a corridor with a widht in meters -function mainAttack(feature) { - var direction, width; - var points = feature.geometry.coordinates; - var arrowHead = points.pop(); - var widthHeadRatio = 0.7; +module.exports = function(feature) { + var direction, width; + var points = feature.geometry.coordinates; + var arrowHead = points.pop(); + var widthHeadRatio = 0.7; - var geometry = { type: "MultiLineString" }; - geometry.coordinates = []; + var geometry = { type: "MultiLineString", coordinates: [] }; - var geometry1 = []; - var geometry2 = []; + var geometry1 = []; + var geometry2 = []; - // Width of the arrow - direction = ms.geometry.bearingBetween(points[0], points[1]); - var deltaDirection = - direction - ms.geometry.bearingBetween(points[0], arrowHead); - //console.log(deltaDirection) - var distance = ms.geometry.distanceBetween(points[0], arrowHead); - var arrowHead2 = ms.geometry.toDistanceBearing( - points[0], - distance, - direction + deltaDirection - ); - width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction - 90 - ) - ); + // Width of the arrow + direction = ms.geometry.bearingBetween(points[0], points[1]); + var deltaDirection = + direction - ms.geometry.bearingBetween(points[0], arrowHead); + //console.log(deltaDirection) + var distance = ms.geometry.distanceBetween(points[0], arrowHead); + var arrowHead2 = ms.geometry.toDistanceBearing( + points[0], + distance, + direction + deltaDirection + ); + width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - for (var j = points.length - 2; j > 0; j--) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - width * widthHeadRatio * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction - 90 + ) ); - } - // Arrowhead - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry1.push(arrowHead); - geometry1.push(points[0]); - geometry1.push(arrowHead2); - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); + for (var j = points.length - 2; j > 0; j--) { + var direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + var direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], + width * widthHeadRatio * factor, + (direction1 + direction2) / 2 + ) + ); + } - geometry2.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry2.push( - ms.geometry.toDistanceBearing( - points[0], - width * - (1 - widthHeadRatio) * - Math.abs(1 / Math.tan(deltaDirection * (Math.PI / 180))), - direction - 180 - ) - ); - geometry2.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); - - for (j = 1; j < points.length - 1; j++) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + // Arrowhead + direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - -(width * widthHeadRatio) * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + arrowHead, + width * (1 - widthHeadRatio), + direction + 90 + ) ); - } + geometry1.push(arrowHead, points[0], arrowHead2, ms.geometry.toDistanceBearing( + arrowHead2, + width * (1 - widthHeadRatio), + direction - 90 + )); - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction + 90 - ) - ); + geometry2.push( + ms.geometry.toDistanceBearing( + arrowHead, + width * (1 - widthHeadRatio), + direction + 90 + ), + ms.geometry.toDistanceBearing( + points[0], + width * + (1 - widthHeadRatio) * + Math.abs(1 / Math.tan(deltaDirection * (Math.PI / 180))), + direction - 180 + ), + ms.geometry.toDistanceBearing( + arrowHead2, + width * (1 - widthHeadRatio), + direction - 90 + ) + ); - geometry.coordinates = [geometry1, geometry2]; - return { geometry: geometry }; -} + for (j = 1; j < points.length - 1; j++) { + direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], -(width * widthHeadRatio) * factor, + (direction1 + direction2) / 2 + ) + ); + } + + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; + geometry1.push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction + 90 + ) + ); -module.exports = mainAttack; + geometry.coordinates = [geometry1, geometry2]; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/munition-flight-path.js b/src/geometryconverter/munition-flight-path.js new file mode 100644 index 00000000..f790e57c --- /dev/null +++ b/src/geometryconverter/munition-flight-path.js @@ -0,0 +1,38 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + var annotations = []; + var annotationTop = ""; + var annotationUnder = ""; + var annotationTopCoordinates; + + + if (feature.properties.name) + annotationTop += feature.properties.name; + if (feature.properties.dtg) + annotationUnder += feature.properties.dtg; + if (feature.properties.dtg1) + annotationUnder += " -\n" + feature.properties.dtg1; + + geometry.coordinates = [points]; + + if (points.length % 2 !== 0) { + annotationTopCoordinates = points[parseInt(points.length / 2)]; + } else { + annotationTopCoordinates = ms.geometry.pointBetween( + points[parseInt(points.length / 2) - 1], + points[parseInt(points.length / 2)], + 0.5 + ); + } + + annotations.push(ms.geometry.addAnotation(annotationTopCoordinates, annotationTop)); + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], -30, -45), annotationUnder)); + + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/named-area-of-interest.js b/src/geometryconverter/named-area-of-interest.js index af425c9b..3a20c907 100644 --- a/src/geometryconverter/named-area-of-interest.js +++ b/src/geometryconverter/named-area-of-interest.js @@ -2,21 +2,19 @@ var ms = require("milsymbol"); // Draws a NAI module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "NAI"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "NAI" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; var polygon = ms.geometry.circleCorridorPolygon(feature); geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/no-fire-area.js b/src/geometryconverter/no-fire-area.js new file mode 100644 index 00000000..1819e71a --- /dev/null +++ b/src/geometryconverter/no-fire-area.js @@ -0,0 +1,69 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function(feature) { + + var points = feature.geometry.coordinates; + var annotationText = feature.properties.name; + var distance = feature.properties.distance; //distance in meters + var centerPoint; + var annotations = { + geometry: { type: "Point", coordinates: centerPoint }, + properties: { text: annotationText } + }; + + + + if (feature.geometry.type == "Point") { + centerPoint = points; + + } else if (feature.geometry.type == "LineString") { + + centerPoint = ms.geometry.pointBetween(points[0], points[1], 0.5); + distance = distance / 2; + + } else if (feature.geometry.type = "Polygon") { + + //Variables for northernmost, southernmost coordinates for annotations in polygon + var maxLongitudes = Math.max.apply(null, getLatLong(points).longitudes); + var minLongitudes = Math.min.apply(null, getLatLong(points).longitudes); + var northernmost; + var southernmost; + + for (var a = 0; a < points[0].length; a++) { + if (points[0][a][1] == minLongitudes) { + northernmost = points[0][a]; + } else if (points[0][a][1] == maxLongitudes) { + southernmost = points[0][a]; + } + } + centerPoint = ms.geometry.pointBetween(southernmost, northernmost, 0.5); + + //console.log(maxLongitudes, minLongitudes); + } + + + + var shape = ms.geometry.circleCorridorPolygon(feature); + + return { + geometry: shape.geometry, + annotations: [annotations] + }; + +} + +function getLatLong(array) { + var latitudes = []; + var longitudes = []; + + for (var i = 0; i < array[0].length; i++) { + latitudes.push(array[0][i][0]); + longitudes.push(array[0][i][1]); + } + + return { + latitudes, + longitudes + }; +}; \ No newline at end of file diff --git a/src/geometryconverter/no-fire-line.js b/src/geometryconverter/no-fire-line.js new file mode 100644 index 00000000..3b87a2c5 --- /dev/null +++ b/src/geometryconverter/no-fire-line.js @@ -0,0 +1,26 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + + + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + var annotations = []; + var annotationText = feature.properties.name; + + + if (feature.properties.administrator) + annotationText += + " " + feature.properties.administrator; + if (feature.properties.dtg) + annotationText += "\n\n" + feature.properties.dtg; + if (feature.properties.dtg1) + annotationText += "\n\n" + feature.properties.dtg1; + + geometry.coordinates = [points]; + annotations.push(ms.geometry.addAnotation(points[0], annotationText)); + annotations.push(ms.geometry.addAnotation(points.slice(-1)[0], annotationText)); + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/occupy.js b/src/geometryconverter/occupy.js index 33011ea1..4c3b921f 100644 --- a/src/geometryconverter/occupy.js +++ b/src/geometryconverter/occupy.js @@ -1,42 +1,38 @@ var ms = require("milsymbol"); // Draws a circle withe a radius in meters -function occupy(feature) { - var p = feature.geometry.coordinates; - var r = ms.geometry.distanceBetween(p[0], p[1]); - var bearing = ms.geometry.bearingBetween(p[0], p[1]); +module.exports = function(feature) { + var p = feature.geometry.coordinates; + var r = ms.geometry.distanceBetween(p[0], p[1]); + var bearing = ms.geometry.bearingBetween(p[0], p[1]); + var geometry = { + type: "MultiLineString", + coordinates: [ + [] + ] + }; - var geometry = { type: "MultiLineString" }; - geometry.coordinates = [[]]; - for (var d = 0; d <= 340; d += 5) { - geometry.coordinates[0].push( - ms.geometry.toDistanceBearing(p[0], r, d + bearing) - ); - } + for (var d = 0; d <= 340; d += 5) { + geometry.coordinates[0].push( + ms.geometry.toDistanceBearing(p[0], r, d + bearing) + ); + } - var geom = []; - var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) - ); - geometry.coordinates.push(geom); + var pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); + var geom = [ + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) + 45), + pEnd, + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing - (90 - 15) - 45) + ]; + geometry.coordinates.push(geom); - geom = []; - pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) + 45) - ); - geom.push(pEnd); - geom.push( - ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) - 45) - ); - geometry.coordinates.push(geom); + pEnd = ms.geometry.toDistanceBearing(p[0], r, 340 + bearing); + geom = [ + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) + 45), + pEnd, + ms.geometry.toDistanceBearing(pEnd, r * 0.2, 320 + bearing + (90 + 15) - 45) + ]; + geometry.coordinates.push(geom); - return { geometry: geometry }; -} - -module.exports = occupy; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/phase-line.js b/src/geometryconverter/phase-line.js new file mode 100644 index 00000000..813ba794 --- /dev/null +++ b/src/geometryconverter/phase-line.js @@ -0,0 +1,30 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + //var direction, width; + console.log(feature); + var points = feature.geometry.coordinates; + var name = feature.properties.name; + var annotations = []; + var geometry = { type: "MultiLineString" }; + var geometry1 = []; + for (var i = 1; i < points.length; i += 1) { + // measure distance between each two points + distance = ms.geometry.distanceBetween(points[i - 1], points[i]) + // Making each segment straight + geometry1 = laundery(geometry1, points[i - 1], points[i], 0, 0) + } + geometry.coordinates = [geometry1]; + + annotations.push(ms.geometry.addAnotation(points[0], name)); + annotations.push(ms.geometry.addAnotation(points.slice(-1)[0], name)); + + return { geometry: geometry, annotations: annotations }; +} + +function laundery(geo, pointa, pointb, degree = 0) { + if (degree <= 0) { + geo.push(pointa, pointb) + return geo; + } +} \ No newline at end of file diff --git a/src/geometryconverter/position-area-for-artillery.js b/src/geometryconverter/position-area-for-artillery.js new file mode 100644 index 00000000..1093f358 --- /dev/null +++ b/src/geometryconverter/position-area-for-artillery.js @@ -0,0 +1,66 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function (feature) { + var annotations = []; + var points = feature.geometry.coordinates; + var annotationText = feature.properties.name; + var distance = feature.properties.distance; //distance in meters + + var centerPoint; + + if (feature.geometry.type == "Point") { + centerPoint = points; + } else if (feature.geometry.type == "LineString") { + centerPoint = ms.geometry.pointBetween(points[0], points[1], 0.5); + distance = distance / 2; + } else if (feature.geometry.type = "Polygon"){ + centerPoint = points[0]; + + //console.log(points); + //Variables for northernmost, southernmost, easternmost and westernmost coordinates for annotations in polygon + var maxLatitudes = Math.max.apply(null, getLatLong(points).latitudes); + var maxLongitudes = Math.max.apply(null, getLatLong(points).longitudes); + var minLatitudes = Math.min.apply(null, getLatLong(points).latitudes); + var minLongitudes = Math.min.apply(null, getLatLong(points).longitudes); + + for(var a = 0; a < points[0].length; a++){ + + if(points[0][a][0] == minLatitudes){ + annotations.push(ms.geometry.addAnotation(points[0][a], annotationText)); + }else if(points[0][a][0] == maxLatitudes){ + annotations.push(ms.geometry.addAnotation(points[0][a], annotationText)); + }else if(points[0][a][1] == minLongitudes){ + annotations.push(ms.geometry.addAnotation(points[0][a], annotationText)); + }else if(points[0][a][1] == maxLongitudes){ + annotations.push(ms.geometry.addAnotation(points[0][a], annotationText)); + } + + } + + } + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(centerPoint, distance, 360), annotationText)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(centerPoint, distance, 180), annotationText)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(centerPoint, distance, -90), annotationText)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(centerPoint, distance, 90), annotationText)); + + var shape = ms.geometry.circleCorridorPolygon(feature); + + return { + geometry: shape.geometry, + annotations: annotations + }; + +} +function getLatLong(array){ + var latitudes = []; + var longitudes = []; + + for(var i = 0; i < array[0].length; i++){ + latitudes.push(array[0][i][0]); + longitudes.push(array[0][i][1]); + } + + return {latitudes, longitudes}; +}; \ No newline at end of file diff --git a/src/geometryconverter/restrictive-fire-area.js b/src/geometryconverter/restrictive-fire-area.js index 18329bb0..0ddd60dd 100644 --- a/src/geometryconverter/restrictive-fire-area.js +++ b/src/geometryconverter/restrictive-fire-area.js @@ -2,25 +2,21 @@ var ms = require("milsymbol"); // Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "RFA"; - if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "RFA" } + }; + if (feature.properties.administrator) + annotations.properties.text += + "\n" + feature.properties.administrator; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += " - " + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/restrictive-fire-line.js b/src/geometryconverter/restrictive-fire-line.js new file mode 100644 index 00000000..ffbc4512 --- /dev/null +++ b/src/geometryconverter/restrictive-fire-line.js @@ -0,0 +1,33 @@ +var ms = require("milsymbol"); + +module.exports = function(feature) { + + + var points = feature.geometry.coordinates; + var geometry = { type: "MultiLineString", coordinates: [] }; + + var annotations = []; + var annotationTop = feature.properties.name; + var annotationUnder = ""; + + + if (feature.properties.administrator) + annotationTop += + " " + feature.properties.administrator; + if (feature.properties.w) + annotationUnder += feature.properties.w; + if (feature.properties.w1) + annotationUnder += " -\n" + feature.properties.w1; + + geometry.coordinates = [points]; + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], 30, 45), annotationTop)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], 30, -45), annotationTop)); + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], -30, -45), annotationUnder)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], -30, 45), annotationUnder)); + + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points[0], 40, -90), "PL "+feature.properties.t1)); + annotations.push(ms.geometry.addAnotation(ms.geometry.toDistanceBearing(points.slice(-1)[0], 40, 90), "PL "+feature.properties.t1)); + + return { geometry: geometry, annotations: annotations }; +}; \ No newline at end of file diff --git a/src/geometryconverter/search-area.js b/src/geometryconverter/search-area.js index c8007b5b..f1a4c507 100644 --- a/src/geometryconverter/search-area.js +++ b/src/geometryconverter/search-area.js @@ -1,4 +1,2 @@ // Draws a circle withe a radius in meters -function searchArea(feature) {} - -module.exports = searchArea; +module.exports = function(feature) {}; \ No newline at end of file diff --git a/src/geometryconverter/sensor-zone.js b/src/geometryconverter/sensor-zone.js index 2d148873..fd3b0fb3 100644 --- a/src/geometryconverter/sensor-zone.js +++ b/src/geometryconverter/sensor-zone.js @@ -2,25 +2,22 @@ var ms = require("milsymbol"); // Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "SENSOR ZONE"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "SENSOR ZONE" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/supporting-attack.js b/src/geometryconverter/supporting-attack.js index 611ffdb2..f5be943a 100644 --- a/src/geometryconverter/supporting-attack.js +++ b/src/geometryconverter/supporting-attack.js @@ -1,111 +1,104 @@ var ms = require("milsymbol"); // Draws a corridor with a widht in meters -function supportingAttack(feature) { - var direction, width; - var points = feature.geometry.coordinates; - var arrowHead = points.pop(); - var widthHeadRatio = 0.7; +module.exports = function(feature) { + var direction, width; + var points = feature.geometry.coordinates; + var arrowHead = points.pop(); + var widthHeadRatio = 0.7; + var geometry = { type: "LineString", coordinates: [] }; - var geometry = { type: "LineString" }; - geometry.coordinates = []; + var geometry1 = []; - var geometry1 = []; - - // Width of the arrow - direction = ms.geometry.bearingBetween(points[0], points[1]); - var deltaDirection = - direction - ms.geometry.bearingBetween(points[0], arrowHead); - //console.log(deltaDirection) - var distance = ms.geometry.distanceBetween(points[0], arrowHead); - var arrowHead2 = ms.geometry.toDistanceBearing( - points[0], - distance, - direction + deltaDirection - ); - width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction - 90 - ) - ); + // Width of the arrow + direction = ms.geometry.bearingBetween(points[0], points[1]); + var deltaDirection = + direction - ms.geometry.bearingBetween(points[0], arrowHead); + //console.log(deltaDirection) + var distance = ms.geometry.distanceBetween(points[0], arrowHead); + var arrowHead2 = ms.geometry.toDistanceBearing( + points[0], + distance, + direction + deltaDirection + ); + width = ms.geometry.distanceBetween(arrowHead, arrowHead2) / 2; - for (var j = points.length - 2; j > 0; j--) { - var direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - var direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - width * widthHeadRatio * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction - 90 + ) ); - } - // Arrowhead - direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead, - width * (1 - widthHeadRatio), - direction + 90 - ) - ); - geometry1.push(arrowHead); - geometry1.push(points[0]); - geometry1.push(arrowHead2); - geometry1.push( - ms.geometry.toDistanceBearing( - arrowHead2, - width * (1 - widthHeadRatio), - direction - 90 - ) - ); + for (var j = points.length - 2; j > 0; j--) { + var direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + var direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + var factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], + width * widthHeadRatio * factor, + (direction1 + direction2) / 2 + ) + ); + } - for (j = 1; j < points.length - 1; j++) { - direction1 = - (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; - direction2 = - (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; - factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + // Arrowhead + direction = (ms.geometry.bearingBetween(points[0], points[1]) + 180) % 360; geometry1.push( - ms.geometry.toDistanceBearing( - points[j], - -(width * widthHeadRatio) * factor, - (direction1 + direction2) / 2 - ) + ms.geometry.toDistanceBearing( + arrowHead, + width * (1 - widthHeadRatio), + direction + 90 + ), + arrowHead, + points[0], + arrowHead2, + ms.geometry.toDistanceBearing( + arrowHead2, + width * (1 - widthHeadRatio), + direction - 90 + ) ); - } - direction = - (ms.geometry.bearingBetween( - points[points.length - 1], - points[points.length - 2] - ) + - 360) % - 360; - geometry1.push( - ms.geometry.toDistanceBearing( - points[points.length - 1], - width * widthHeadRatio, - direction + 90 - ) - ); + for (j = 1; j < points.length - 1; j++) { + direction1 = + (ms.geometry.bearingBetween(points[j], points[j + 1]) + 360) % 360; + direction2 = + (ms.geometry.bearingBetween(points[j], points[j - 1]) + 360) % 360; + factor = 1 / Math.sin((direction2 - direction1) / 2 * (Math.PI / 180)); + geometry1.push( + ms.geometry.toDistanceBearing( + points[j], -(width * widthHeadRatio) * factor, + (direction1 + direction2) / 2 + ) + ); + } - geometry.coordinates = geometry1; - return { geometry: geometry }; -} + direction = + (ms.geometry.bearingBetween( + points[points.length - 1], + points[points.length - 2] + ) + + 360) % + 360; + geometry1.push( + ms.geometry.toDistanceBearing( + points[points.length - 1], + width * widthHeadRatio, + direction + 90 + ) + ); -module.exports = supportingAttack; + geometry.coordinates = geometry1; + return { geometry: geometry }; +}; \ No newline at end of file diff --git a/src/geometryconverter/target-build-up-area.js b/src/geometryconverter/target-build-up-area.js index b87c8fd4..890a55bf 100644 --- a/src/geometryconverter/target-build-up-area.js +++ b/src/geometryconverter/target-build-up-area.js @@ -1,26 +1,22 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TBA"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "TBA" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/target-value-area.js b/src/geometryconverter/target-value-area.js index faa5b2e7..08d73c60 100644 --- a/src/geometryconverter/target-value-area.js +++ b/src/geometryconverter/target-value-area.js @@ -1,26 +1,22 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TVAR"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "TVAR" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/targeted-area-of-interest.js b/src/geometryconverter/targeted-area-of-interest.js index 679b0d99..24844875 100644 --- a/src/geometryconverter/targeted-area-of-interest.js +++ b/src/geometryconverter/targeted-area-of-interest.js @@ -2,21 +2,18 @@ var ms = require("milsymbol"); // Draws a NAI module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TAI"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "TAI" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/terminally-guided-munition-footprint.js b/src/geometryconverter/terminally-guided-munition-footprint.js index 9ccbf4bd..b8d9a54c 100644 --- a/src/geometryconverter/terminally-guided-munition-footprint.js +++ b/src/geometryconverter/terminally-guided-munition-footprint.js @@ -1,26 +1,14 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "TGMF"; - /*if (feature.properties.uniqueDesignation) - annotations[0].properties.text += - "\n" + feature.properties.uniqueDesignation; - if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; - if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1;*/ - + var annotations = { + geometry: { type: "Point" }, + properties: { text: "TGMF" } + }; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/geometryconverter/test.js b/src/geometryconverter/test.js new file mode 100644 index 00000000..4768eb8d --- /dev/null +++ b/src/geometryconverter/test.js @@ -0,0 +1,48 @@ +var ms = require("milsymbol"); +const toDistanceBearing = require("../geometry/todistancebearing"); + +module.exports = function (feature) { + var annotations = []; + var geometry = { + type: "MultiLineString", + coordinates: [] + }; + var points = feature.geometry.coordinates; + var bearing = ms.geometry.bearingBetween(points[0], points[1]); + var scale = ms.geometry.distanceBetween(points[0], points[1]); + var centerPoint = ms.geometry.pointBetween(points[0], points[1], 0.5); + var annotTopPos = ms.geometry.toDistanceBearing(centerPoint, scale * 0.05, bearing - 90); //annotation above the line + var annotUndPos = ms.geometry.toDistanceBearing(centerPoint, scale * 0.05, bearing + 90); //annotation below the line + + var geom = [ + points[0], + ms.geometry.toDistanceBearing(points[0], length, bearing + 90), + ms.geometry.toDistanceBearing(points[1], length, bearing + 90), + points[1] + ]; + geometry.coordinates.push(geom); + geom = [ + ms.geometry.toDistanceBearing(points[0], scale * 0.1, bearing + 90), // Right end + ms.geometry.toDistanceBearing(points[0], scale * 0.1, bearing - 90) // Left end + +]; +geometry.coordinates.push(geom); +geom = [ + ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing + 90), // Right end + ms.geometry.toDistanceBearing(points.slice(-1)[0], scale * 0.1, bearing - 90) // Left end +]; +geometry.coordinates.push(geom); + if(feature.properties.administrator){ + annotations.push(ms.geometry.addAnotation(annotTopPos, feature.properties.administrator)); + } + if(feature.properties.type){ + annotations.push(ms.geometry.addAnotation(annotUndPos, feature.properties.type)); + } + + + return { + geometry: geometry, + annotations: annotations + }; + +}; \ No newline at end of file diff --git a/src/geometryconverter/zone-of-responsibility.js b/src/geometryconverter/zone-of-responsibility.js index 138fb714..dfa5fb78 100644 --- a/src/geometryconverter/zone-of-responsibility.js +++ b/src/geometryconverter/zone-of-responsibility.js @@ -1,26 +1,22 @@ var ms = require("milsymbol"); -// Draws a Fire Support Area module.exports = function(feature) { - var annotations = [{}]; - var geometry; - - annotations[0].geometry = { type: "Point" }; - annotations[0].properties = {}; - annotations[0].properties.text = "ZOR"; + var annotations = { + geometry: { type: "Point" }, + properties: { text: "ZOR" } + }; if (feature.properties.uniqueDesignation) - annotations[0].properties.text += + annotations.properties.text += "\n" + feature.properties.uniqueDesignation; if (feature.properties.dtg) - annotations[0].properties.text += "\n" + feature.properties.dtg; + annotations.properties.text += "\n" + feature.properties.dtg; if (feature.properties.dtg1) - annotations[0].properties.text += "\n" + feature.properties.dtg1; + annotations.properties.text += "\n" + feature.properties.dtg1; var polygon = ms.geometry.circleCorridorPolygon(feature); - geometry = polygon.geometry; if (polygon.annotation.hasOwnProperty("geometry")) { - annotations[0].geometry = polygon.annotation.geometry; + annotations.geometry = polygon.annotation.geometry; } - return { geometry: geometry, annotations: annotations }; + return { geometry: polygon.geometry, annotations: [annotations] }; }; diff --git a/src/graphic/getproperties.js b/src/graphic/getproperties.js index 9ba6532e..8428589a 100644 --- a/src/graphic/getproperties.js +++ b/src/graphic/getproperties.js @@ -52,7 +52,7 @@ module.exports = function() { if (properties.numberSIDC) { //This is for new number based SIDCs - if (typeof ms._getNumberProperties === "function") { + if (typeof ms.Symbol.prototype.getMetadata === "function") { properties = ms._getNumberPropertiesGraphic.call( this, properties, @@ -66,7 +66,7 @@ module.exports = function() { } else { //This would be old letter based SIDCs - if (typeof ms._getLetterProperties === "function") { + if (typeof ms.Symbol.prototype.getMetadata === "function") { properties = ms._getLetterPropertiesGraphic.call( this, properties, diff --git a/src/graphicslayer/asopenlayers.js b/src/graphicslayer/asopenlayers.js index a32a9409..2478b50b 100644 --- a/src/graphicslayer/asopenlayers.js +++ b/src/graphicslayer/asopenlayers.js @@ -1,115 +1,133 @@ +var GeoJSON = require('ol/format/GeoJSON'); +// const { +// default: UrlTile +// } = require('ol/source/UrlTile'); +var style = require('ol/style'); +var makePattern = require('./makepattern'); + function asOpenLayers(crs) { - crs = crs || "EPSG:3857"; - //var ua = window.navigator.userAgent; - //var isIE = ( ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0) ? true : false; - var ratio = window.devicePixelRatio || 1; - var geoJSON = new ol.format.GeoJSON(); - var features = []; + crs = crs || "EPSG:3857"; + //var ua = window.navigator.userAgent; + // var isIE = ( ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0) ? true : false; + var features = []; + for (var i = 0; i < this.data.features.length; i++) { + var feature = this.data.features[i]; + var olFeature = GeoJSON.default.prototype.readFeature(feature, { + dataProjection: 'EPSG:4326', + featureProjection: crs + }); - for (var i = 0; i < this.data.features.length; i++) { - var feature = this.data.features[i]; - var olFeature = geoJSON.readFeature(feature, { - featureProjection: ol.proj.get(crs) - }); + if (olFeature.getGeometry() && olFeature.getGeometry().getType() == "Point") { + var properties = olFeature.getProperties(); + if (properties.sidc.charAt(0) != "X") { + //TODO handle sitaware custom graphics + var milsymbol = this.data.features[i].symbol; + // var image = isIE ? mysymbol.asCanvas() : mysymbol.toDataURL(); + var image = 'data:image/svg+xml,' + milsymbol.asSVG().toString(); + olFeature.setStyle( + new style.Style({ + image: new style.Icon({ + anchor: [ + milsymbol.getAnchor().x, + milsymbol.getAnchor().y + ], + anchorXUnits: "pixels", + anchorYUnits: "pixels", + imgSize: [ + Math.floor(milsymbol.getSize().width), + Math.floor(milsymbol.getSize().height) + ], + src: image + }) + }) + ); + } + } - if ( - olFeature.getGeometry() && - olFeature.getGeometry().getType() == "Point" - ) { - var properties = olFeature.getProperties(); - if (properties.sidc.charAt(0) != "X") { - //TODO handle sitaware custom graphics - var milsymbol = this.data.features[i].symbol; - //var image = isIE ? mysymbol.asCanvas() : mysymbol.toDataURL(); - olFeature.setStyle( - new ol.style.Style({ - image: new ol.style.Icon({ - scale: 1 / ratio, - anchor: [ - milsymbol.getAnchor().x * ratio, - milsymbol.getAnchor().y * ratio - ], - anchorXUnits: "pixels", - anchorYUnits: "pixels", - imgSize: [ - Math.floor(milsymbol.getSize().width * ratio), - Math.floor(milsymbol.getSize().height * ratio) - ], - img: milsymbol.asCanvas(ratio) + var styles = [ + new style.Style({ + stroke: new style.Stroke({ + lineCap: "butt", + color: "#000000", + width: 2 + }) }) - }) - ); - } + ]; + + if (feature.graphic.isConverted() && (olFeature.getGeometry().getType() == "LineString" || + olFeature.getGeometry().getType() == "MultiLineString")) { + if (feature.graphic.annotations) { + styles = styles.concat(createAnnotationsStyle(feature.graphic.annotations, crs)); + } + olFeature.setStyle(styles); + } + + if (feature.graphic.isConverted() && olFeature.getGeometry().getType() == "Polygon") { + if (feature.properties.fill == "dashes") { + + var pattern = makePattern('#000', 'obliqueLeft', 15); + styles[0].setFill( + new style.Fill({ + color: pattern + }) + ); + + + } else { + styles[0].setFill( + new style.Fill({ + color: "rgba(0,0,0,0)" + }) + ); + } + + if (feature.graphic.annotations) { + if (!feature.graphic.annotations[0].geometry.coordinates) { + styles[0].setText(getText(feature.graphic.annotations[0].properties.text)); + } + styles = styles.concat(createAnnotationsStyle(feature.graphic.annotations, crs)); + } + olFeature.setStyle(styles); + } + + + features.push(olFeature); } - if ( - feature.graphic.isConverted() && - (olFeature.getGeometry().getType() == "LineString" || - olFeature.getGeometry().getType() == "MultiLineString") - ) { - var styles = [ - new ol.style.Style({ - stroke: new ol.style.Stroke({ - lineCap: "butt", - color: "#000000", - width: 2 - }) - }) - ]; - if (feature.graphic.annotations) { - var labelgeom = geoJSON - .readFeature(feature.graphic.annotations[0].geometry, { - featureProjection: ol.proj.get(crs) - }) - .getGeometry(); - styles.push( - new ol.style.Style({ - text: new ol.style.Text({ - fill: new ol.style.Fill({ color: "black" }), - font: "bold 16px sans-serif", - stroke: new ol.style.Stroke({ - color: "rgb(239, 239, 239)", // off-white - width: 4 - }), - text: feature.graphic.annotations[0].properties.text - }), - geometry: labelgeom - }) - ); - } - olFeature.setStyle(styles); + return features; +} + +function createAnnotationsStyle(annotations, crs) { + var add_styles = []; + for (var a = 0; a < annotations.length; a++) { + if (annotations[a].geometry.coordinates) { + var labelgeom = GeoJSON.default.prototype.readFeature(annotations[a].geometry, { + dataProjection: 'EPSG:4326', + featureProjection: crs + }).getGeometry(); + add_styles.push( + new style.Style({ + text: getText(annotations[a].properties.text), + geometry: labelgeom + }) + ); + } } + return add_styles; +} - if ( - feature.graphic.isConverted() && - olFeature.getGeometry().getType() == "Polygon" - ) { - style = new ol.style.Style({ - stroke: new ol.style.Stroke({ - lineCap: "butt", - color: "#000000", - width: 2 +function getText(text) { + return new style.Text({ + fill: new style.Fill({ + color: "black" }), - fill: new ol.style.Fill({ color: "rgba(0,0,0,0)" }), - text: new ol.style.Text({ - fill: new ol.style.Fill({ color: "black" }), - font: "bold 16px sans-serif", - stroke: new ol.style.Stroke({ + font: "bold 16px sans-serif", + stroke: new style.Stroke({ color: "rgb(239, 239, 239)", // off-white width: 4 - }), - text: feature.graphic.annotations - ? feature.graphic.annotations[0].properties.text - : "" - }) - }); - olFeature.setStyle(style); - } - - features.push(olFeature); - } - - return features; + }), + text: text + }); } -module.exports = asOpenLayers; +module.exports = asOpenLayers; \ No newline at end of file diff --git a/src/graphicslayer/makepattern.js b/src/graphicslayer/makepattern.js new file mode 100644 index 00000000..61516277 --- /dev/null +++ b/src/graphicslayer/makepattern.js @@ -0,0 +1,32 @@ +/** + * Javascript function for generating hatch pattern + * @param fill HEX color string + * @param direction hatch direction, enum of HATCH_DIRECTION + * @param size number value for spaces between lines + */ +function makePattern(fill, direction, size) { + var cnv = document.createElement('canvas'); + var ctx = cnv.getContext('2d'); + cnv.width = size; + cnv.height = size; + ctx.fillStyle = fill; + + for (var i = 0; i < size; i++) { + if (direction == 'obliqueLeft') { + ctx.fillRect(i, i, 1, 1); + } + if (direction == 'obliqueRight') { + ctx.fillRect(size - 1 - i, i, 1, 1); + } + if (direction == 'horizontal') { + ctx.fillRect(i, 0, 1, 1); + } + if (direction == 'vertical') { + ctx.fillRect(0, i, 1, 1); + } + } + + return ctx.createPattern(cnv, 'repeat'); +} + +module.exports = makePattern; diff --git a/src/letter-sidc/tactical-2525.js b/src/letter-sidc/tactical-2525.js index eba154bb..f7d01bcb 100644 --- a/src/letter-sidc/tactical-2525.js +++ b/src/letter-sidc/tactical-2525.js @@ -2,336 +2,338 @@ var ms = require("milsymbol"); // Tactical graphics in 2525C + some extra module.exports = function tacticalPoints(sidc, std2525) { - sidc["G-T-B-----"] = ms.geometryConverter["BLOCK"]; //TACGRP.TSK.BLK - sidc["G-T-H-----"] = ms.geometryConverter["BREACH"]; //TACGRP.TSK.BRH - sidc["G-T-Y-----"] = ms.geometryConverter["BYPASS"]; //TACGRP.TSK.BYS - sidc["G-T-C-----"] = ms.geometryConverter["CANALIZE"]; //TACGRP.TSK.CNZ - sidc["G-T-X-----"] = ms.geometryConverter["CLEAR"]; //TACGRP.TSK.CLR - //sidc['G-T-J-----'] = [];//TACGRP.TSK.CNT - //sidc['G-T-K-----'] = [];//TACGRP.TSK.CATK - //sidc['G-T-KF----'] = [];//TACGRP.TSK.CATK.CATKF - sidc["G-T-L-----"] = ms.geometryConverter["DELAY"]; //TACGRP.TSK.DLY - //sidc['G-T-T-----'] = [];//TACGRP.TSK.DRT - sidc["G-T-F-----"] = ms.geometryConverter["FIX"]; //TACGRP.TSK.FIX - //sidc['G-T-A-----'] = [];//TACGRP.TSK.FLWASS - //sidc['G-T-AS----'] = [];//TACGRP.TSK.FLWASS.FLWSUP - sidc["G-T-E-----"] = ms.geometryConverter["ISOLATE"]; //TACGRP.TSK.ISL - sidc["G-T-O-----"] = ms.geometryConverter.occupy; //TACGRP.TSK.OCC - //sidc['G-T-P-----'] = [];//TACGRP.TSK.PNE - //sidc['G-T-R-----'] = [];//TACGRP.TSK.RIP - //sidc['G-T-Q-----'] = [];//TACGRP.TSK.RTN - //sidc["G-T-M-----"] = ms.geometryConverter.delay; //TACGRP.TSK.RTM - //sidc['G-T-S-----'] = [];//TACGRP.TSK.SCE - //sidc['G-T-U-----'] = [];//TACGRP.TSK.SEC - //sidc['G-T-US----'] = [];//TACGRP.TSK.SEC.SCN - sidc["G-T-UG----"] = ms.geometryConverter.guard; //TACGRP.TSK.SEC.GUD - sidc["G-T-UC----"] = ms.geometryConverter.cover; //TACGRP.TSK.SEC.COV - //sidc['G-T-Z-----'] = [];//TACGRP.TSK.SZE - //sidc['G-T-W-----'] = [];//TACGRP.TSK.WDR - //sidc['G-T-WP----'] = [];//TACGRP.TSK.WDR.WDRUP - //sidc['G-G-------'] = [];//TACGRP.C2GM - //sidc['G-G-G-----'] = [];//TACGRP.C2GM.GNL - //sidc['G-G-GP----'] = [];//TACGRP.C2GM.GNL.PNT - //sidc['G-G-GPU---'] = [];//TACGRP.C2GM.GNL.PNT.USW - //sidc['G-G-GPUU--'] = [];//TACGRP.C2GM.GNL.PNT.USW.UH2 - //sidc['G-G-GPW---'] = [];//TACGRP.C2GM.GNL.PNT.WPN - //sidc['G-G-GL----'] = [];//TACGRP.C2GM.GNL.LNE - //sidc['G-G-GLB---'] = [];//TACGRP.C2GM.GNL.LNE.BNDS - //sidc['G-G-GLF---'] = [];//TACGRP.C2GM.GNL.LNE.FLOT - //sidc['G-G-GLC---'] = [];//TACGRP.C2GM.GNL.LNE.LOC - //sidc['G-G-GLP---'] = [];//TACGRP.C2GM.GNL.LNE.PHELNE - //sidc['G-G-GLL---'] = [];//TACGRP.C2GM.GNL.LNE.LITLNE - //sidc['G-G-GA----'] = [];//TACGRP.C2GM.GNL.ARS - //sidc['G-G-GAG---'] = [];//TACGRP.C2GM.GNL.ARS.GENARA - //sidc['G-G-GAA---'] = [];//TACGRP.C2GM.GNL.ARS.ABYARA - //sidc['G-G-GAE---'] = [];//TACGRP.C2GM.GNL.ARS.EMTARA - //sidc['G-G-GAF---'] = [];//TACGRP.C2GM.GNL.ARS.FTFDAR - //sidc['G-G-GAD---'] = [];//TACGRP.C2GM.GNL.ARS.DRPZ - //sidc['G-G-GAX---'] = [];//TACGRP.C2GM.GNL.ARS.EZ - //sidc['G-G-GAL---'] = [];//TACGRP.C2GM.GNL.ARS.LZ - //sidc['G-G-GAP---'] = [];//TACGRP.C2GM.GNL.ARS.PZ - //sidc['G-G-GAS---'] = [];//TACGRP.C2GM.GNL.ARS.SRHARA - //sidc['G-G-GAY---'] = [];//TACGRP.C2GM.GNL.ARS.LAARA - //sidc['G-G-GAZ---'] = [];//TACGRP.C2GM.GNL.ARS.AIRFZ - //sidc['G-G-A-----'] = [];//TACGRP.C2GM.AVN - //sidc['G-G-AP----'] = [];//TACGRP.C2GM.AVN.PNT - //sidc['G-G-AL----'] = [];//TACGRP.C2GM.AVN.LNE - //sidc['G-G-ALC---'] = [];//TACGRP.C2GM.AVN.LNE.ACDR - //sidc['G-G-ALM---'] = [];//TACGRP.C2GM.AVN.LNE.MRR - //sidc['G-G-ALS---'] = [];//TACGRP.C2GM.AVN.LNE.SAAFR - //sidc['G-G-ALU---'] = [];//TACGRP.C2GM.AVN.LNE.UAR - //sidc['G-G-ALL---'] = [];//TACGRP.C2GM.AVN.LNE.LLTR - //sidc['G-G-AA----'] = [];//TACGRP.C2GM.AVN.ARS - //sidc['G-G-AAR---'] = [];//TACGRP.C2GM.AVN.ARS.ROZ - //sidc['G-G-AAF---'] = [];//TACGRP.C2GM.AVN.ARS.SHRDEZ - //sidc['G-G-AAH---'] = [];//TACGRP.C2GM.AVN.ARS.HIDACZ - //sidc['G-G-AAM---'] = [];//TACGRP.C2GM.AVN.ARS.MEZ - //sidc['G-G-AAML--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.LAMEZ - //sidc['G-G-AAMH--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.HAMEZ - //sidc['G-G-AAW---'] = [];//TACGRP.C2GM.AVN.ARS.WFZ - //sidc['G-G-P-----'] = [];//TACGRP.C2GM.DCPN - //sidc['G-G-PD----'] = [];//TACGRP.C2GM.DCPN.DMY - //sidc['G-G-PA----'] = [];//TACGRP.C2GM.DCPN.AAFF - //sidc['G-G-PF----'] = [];//TACGRP.C2GM.DCPN.DAFF - //sidc['G-G-PM----'] = [];//TACGRP.C2GM.DCPN.DMA - //sidc['G-G-PY----'] = [];//TACGRP.C2GM.DCPN.DMAF - //sidc['G-G-PC----'] = [];//ACGRP.C2GM.DCPN.DMYMD - //sidc['G-G-D-----'] = [];//TACGRP.C2GM.DEF - //sidc['G-G-DP----'] = [];//TACGRP.C2GM.DEF.PNT - //sidc['G-G-DL----'] = [];//TACGRP.C2GM.DEF.LNE - //sidc['G-G-DLF---'] = [];//TACGRP.C2GM.DEF.LNE.FEBA - //sidc['G-G-DLP---'] = [];//TACGRP.C2GM.DEF.LNE.PDF - //sidc['G-G-DA----'] = [];//TACGRP.C2GM.DEF.ARS - //sidc['G-G-DAB---'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN - //sidc['G-G-DABP--'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN.PBNO - //sidc['G-G-DAE---'] = [];//TACGRP.C2GM.DEF.ARS.EMTARA - //sidc['G-G-O-----'] = [];//TACGRP.C2GM.OFF - //sidc['G-G-OP----'] = [];//TACGRP.C2GM.OFF.PNT - //sidc['G-G-OL----'] = [];//TACGRP.C2GM.OFF.LNE - //sidc['G-G-OLA---'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV - //sidc['G-G-OLAV--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.AVN - //sidc['G-G-OLAA--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ABN - //sidc['G-G-OLAR--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ATK - //sidc['G-G-OLAG--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.GRD - sidc["G-G-OLAGM-"] = ms.geometryConverter["MAIN ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.MANATK - sidc["G-G-OLAGS-"] = ms.geometryConverter["SUPPORTING ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.SUPATK - //sidc['G-G-OLK---'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK - //sidc['G-G-OLKA--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.AVN - //sidc['G-G-OLKG--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD - //sidc['G-G-OLKGM-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.MANATK - //sidc['G-G-OLKGS-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.SUPATK - //sidc['G-G-OLF---'] = [];//TACGRP.C2GM.OFF.LNE.FCL - //sidc['G-G-OLI---'] = [];//TACGRP.C2GM.OFF.LNE.INFNLE - //sidc['G-G-OLL---'] = [];//TACGRP.C2GM.OFF.LNE.LMTADV - //sidc['G-G-OLT---'] = [];//TACGRP.C2GM.OFF.LNE.LD - //sidc['G-G-OLC---'] = [];//TACGRP.C2GM.OFF.LNE.LDLC - //sidc['G-G-OLP---'] = [];//TACGRP.C2GM.OFF.LNE.PLD - //sidc['G-G-OA----'] = [];//TACGRP.C2GM.OFF.ARS - //sidc['G-G-OAA---'] = [];//TACGRP.C2GM.OFF.ARS.ASTPSN - //sidc['G-G-OAK---'] = [];//TACGRP.C2GM.OFF.ARS.ATKPSN - //sidc['G-G-OAF---'] = [];//TACGRP.C2GM.OFF.ARS.AFP - //sidc['G-G-OAS---'] = [];//TACGRP.C2GM.OFF.ARS.SFP - //sidc['G-G-OAO---'] = [];//TACGRP.C2GM.OFF.ARS.OBJ - //sidc['G-G-OAP---'] = [];//TACGRP.C2GM.OFF.ARS.PBX - //sidc['G-G-S-----'] = [];//TACGRP.C2GM.SPL - //sidc['G-G-SL----'] = [];//TACGRP.C2GM.SPL.LNE - sidc["G-G-SLA---"] = ms.geometryConverter["AMBUSH"]; //TACGRP.C2GM.SPL.LNE.AMB - //sidc['G-G-SLH---'] = [];//TACGRP.C2GM.SPL.LNE.HGL - //sidc['G-G-SLR---'] = [];//TACGRP.C2GM.SPL.LNE.REL - //sidc['G-G-SLB---'] = [];//TACGRP.C2GM.SPL.LNE.BRGH - //sidc['G-G-SA----'] = [];//TACGRP.C2GM.SPL.ARA - //sidc['G-G-SAO---'] = [];//TACGRP.C2GM.SPL.ARA.AOO - //sidc['G-G-SAA---'] = [];//TACGRP.C2GM.SPL.ARA.AHD - //sidc['G-G-SAE---'] = [];//TACGRP.C2GM.SPL.ARA.ENCMT - sidc["G-G-SAN---"] = ms.geometryConverter["NAMED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.NAI - sidc["G-G-SAT---"] = ms.geometryConverter["TARGETED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.TAIS - //sidc['G-M-------'] = [];//TACGRP.MOBSU - //sidc['G-M-O-----'] = [];//TACGRP.MOBSU.OBST - //sidc['G-M-OG----'] = [];//TACGRP.MOBSU.OBST.GNL - //sidc['G-M-OGB---'] = [];//TACGRP.MOBSU.OBST.GNL.BLT - //sidc['G-M-OGL---'] = [];//TACGRP.MOBSU.OBST.GNL.LNE - //sidc['G-M-OGZ---'] = [];//TACGRP.MOBSU.OBST.GNL.Z - //sidc['G-M-OGF---'] = [];//TACGRP.MOBSU.OBST.GNL.OFA - //sidc['G-M-OGR---'] = [];//TACGRP.MOBSU.OBST.GNL.ORA - //sidc['G-M-OS----'] = [];//TACGRP.MOBSU.OBST.ABS - //sidc['G-M-OA----'] = [];//TACGRP.MOBSU.OBST.ATO - //sidc['G-M-OAD---'] = [];//TACGRP.MOBSU.OBST.ATO.ATD - //sidc['G-M-OADU--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDUC - //sidc['G-M-OADC--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDC - //sidc['G-M-OAR---'] = [];//TACGRP.MOBSU.OBST.ATO.ATDATM - //sidc['G-M-OAO---'] = [];//TACGRP.MOBSU.OBST.ATO.TDTSM - //sidc['G-M-OAW---'] = [];//TACGRP.MOBSU.OBST.ATO.ATW - //sidc['G-M-OM----'] = [];//TACGRP.MOBSU.OBST.MNE - //sidc['G-M-OMC---'] = [];//TACGRP.MOBSU.OBST.MNE.MCLST - //sidc['G-M-OF----'] = [];//TACGRP.MOBSU.OBST.MNEFLD - //sidc['G-M-OFD---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.DYN - //sidc['G-M-OFG---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.GAP - //sidc['G-M-OFA---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.MNDARA - //sidc['G-M-OE----'] = [];//TACGRP.MOBSU.OBST.OBSEFT - //sidc['G-M-OEB---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.BLK - //sidc['G-M-OEF---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.FIX - //sidc['G-M-OET---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.TUR - //sidc['G-M-OED---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.DRT - //sidc['G-M-OU----'] = [];//TACGRP.MOBSU.OBST.UXO - //sidc['G-M-OR----'] = [];//TACGRP.MOBSU.OBST.RCBB - //sidc['G-M-ORP---'] = [];//TACGRP.MOBSU.OBST.RCBB.PLND - //sidc['G-M-ORS---'] = [];//TACGRP.MOBSU.OBST.RCBB.SAFE - //sidc['G-M-ORA---'] = [];//TACGRP.MOBSU.OBST.RCBB.ABP - //sidc['G-M-ORC---'] = [];//TACGRP.MOBSU.OBST.RCBB.EXCD - //sidc['G-M-OT----'] = [];//TACGRP.MOBSU.OBST.TRIPWR - //sidc['G-M-OW----'] = [];//TACGRP.MOBSU.OBST.WREOBS - //sidc['G-M-OWU---'] = [];//TACGRP.MOBSU.OBST.WREOBS.USP - //sidc['G-M-OWS---'] = [];//TACGRP.MOBSU.OBST.WREOBS.SNGFNC - //sidc['G-M-OWD---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DBLFNC - //sidc['G-M-OWA---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DAFNC - //sidc['G-M-OWL---'] = [];//TACGRP.MOBSU.OBST.WREOBS.LWFNC - //sidc['G-M-OWH---'] = [];//TACGRP.MOBSU.OBST.WREOBS.HWFNC - //sidc['G-M-OWC---'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA - //sidc['G-M-OWCS--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.SNG - //sidc['G-M-OWCD--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.DBLSTD - //sidc['G-M-OWCT--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.TRISTD - //sidc['G-M-OH----'] = [];//TACGRP.MOBSU.OBST.AVN - //sidc['G-M-OHT---'] = [];//TACGRP.MOBSU.OBST.AVN.TWR - //sidc['G-M-OHO---'] = [];//TACGRP.MOBSU.OBST.AVN.OHWIRE - //sidc['G-M-B-----'] = [];//TACGRP.MOBSU.OBSTBP - //sidc['G-M-BD----'] = [];//TACGRP.MOBSU.OBSTBP.DFTY - //sidc['G-M-BDE---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.ESY - //sidc['G-M-BDD---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.DFT - //sidc['G-M-BDI---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.IMP - //sidc['G-M-BC----'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE - //sidc['G-M-BCA---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.ASTCA - //sidc['G-M-BCB---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.BRG - //sidc['G-M-BCF---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRY - //sidc['G-M-BCE---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDESY - //sidc['G-M-BCD---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDDFT - //sidc['G-M-BCL---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.LANE - //sidc['G-M-BCR---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.RFT - //sidc['G-M-S-----'] = [];//TACGRP.MOBSU.SU - //sidc['G-M-SL----'] = [];//TACGRP.MOBSU.SU.FTFDLN - //sidc['G-M-SW----'] = [];//TACGRP.MOBSU.SU.FEWS - //sidc['G-M-SP----'] = [];//TACGRP.MOBSU.SU.STRGPT - //sidc['G-M-N-----'] = [];//TACGRP.MOBSU.CBRN - //sidc['G-M-NM----'] = [];//TACGRP.MOBSU.CBRN.MSDZ - //sidc['G-M-NR----'] = [];//TACGRP.MOBSU.CBRN.RADA - //sidc['G-M-NB----'] = [];//TACGRP.MOBSU.CBRN.BIOCA - //sidc['G-M-NC----'] = [];//TACGRP.MOBSU.CBRN.CMLCA - //sidc['G-M-NE----'] = [];//TACGRP.MOBSU.CBRN.REEVNT - //sidc['G-M-ND----'] = [];//TACGRP.MOBSU.CBRN.DECONP - //sidc['G-M-NL----'] = [];//TACGRP.MOBSU.CBRN.DRCL - //sidc['G-F-------'] = [];//TACGRP.FSUPP - //sidc['G-F-P-----'] = [];//TACGRP.FSUPP.PNT - //sidc['G-F-PT----'] = [];//TACGRP.FSUPP.PNT.TGT - //sidc['G-F-PC----'] = [];//TACGRP.FSUPP.PNT.C2PNT - //sidc['G-F-L-----'] = [];//TACGRP.FSUPP.LNE - //sidc['G-F-LT----'] = [];//TACGRP.FSUPP.LNE.LNRTGT - //sidc['G-F-LTS---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.LSTGT - //sidc['G-F-LTF---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.FPF - //sidc['G-F-LC----'] = [];//TACGRP.FSUPP.LNE.C2LNE - //sidc['G-F-LCF---'] = [];//TACGRP.FSUPP.LNE.C2LNE.FSCL - //sidc['G-F-LCC---'] = [];//TACGRP.FSUPP.LNE.C2LNE.CFL - //sidc['G-F-LCN---'] = [];//TACGRP.FSUPP.LNE.C2LNE.NFL - //sidc['G-F-LCR---'] = [];//TACGRP.FSUPP.LNE.C2LNE.RFL - //sidc['G-F-LCM---'] = [];//TACGRP.FSUPP.LNE.C2LNE.MFP - //sidc['G-F-A-----'] = [];//TACGRP.FSUPP.ARS - //sidc['G-F-AT----'] = [];//TACGRP.FSUPP.ARS.ARATGT - //sidc['G-F-ATG---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SGTGT - //sidc['G-F-ATS---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SMK - //sidc['G-F-ATB---'] = [];//TACGRP.FSUPP.ARS.ARATGT.BMARA - //sidc['G-F-AC----'] = [];//TACGRP.FSUPP.ARS.C2ARS - //TACGRP.FSUPP.ARS.C2ARS.FSA - sidc["G-F-ACSI--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.IRR - sidc["G-F-ACSR--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.RTG - sidc["G-F-ACSC--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.CIRCLR - //sidc['G-F-ACA---'] = [];//TACGRP.FSUPP.ARS.C2ARS.ACA - sidc["G-F-ACAI--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.IRR - sidc["G-F-ACAR--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.RTG - sidc["G-F-ACAC--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.FFA - sidc["G-F-ACFI--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.IRR - sidc["G-F-ACFR--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.RTG - sidc["G-F-ACFC--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.CIRCLR - //sidc['G-F-ACN---'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA - //sidc['G-F-ACNI--'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA.IRR - //sidc['G-F-ACNR--'] = [];//TACGRP.FSUPP.ARS.C2ARS.NFA.RTG - //sidc["G-F-ACNC--"] = []; //TACGRP.FSUPP.ARS.C2ARS.NFA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.RFA - sidc["G-F-ACRI--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.IRR - sidc["G-F-ACRR--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.RTG - sidc["G-F-ACRC--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.CIRCLR - //sidc['G-F-ACP---'] = [];//TACGRP.FSUPP.ARS.C2ARS.PAA - //sidc['G-F-ACPR--'] = [];//TACGRP.FSUPP.ARS.C2ARS.PAA.RTG - //sidc["G-F-ACPC--"] = []; //TACGRP.FSUPP.ARS.C2ARS.PAA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.SNSZ - sidc["G-F-ACEI--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.IRR - sidc["G-F-ACER--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.RTG - sidc["G-F-ACEC--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.DA - sidc["G-F-ACDI--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.IRR - sidc["G-F-ACDR--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.RTG - sidc["G-F-ACDC--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.ZOR - sidc["G-F-ACZI--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.IRR - sidc["G-F-ACZR--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.RTG - sidc["G-F-ACZC--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.TBA - sidc["G-F-ACBI--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.IRR - sidc["G-F-ACBR--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.RTG - sidc["G-F-ACBC--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.CIRCLR - //TACGRP.FSUPP.ARS.C2ARS.TVAR - sidc["G-F-ACVI--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.IRR - sidc["G-F-ACVR--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.RTG - sidc["G-F-ACVC--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.CIRCLR - sidc["G-F-ACT---"] = - ms.geometryConverter["TERMINALLY GUIDED MUNITION FOOTPRINT"]; //TACGRP.FSUPP.ARS.C2ARS.TGMF - //sidc['G-F-AZ----'] = [];//TACGRP.FSUPP.ARS.TGTAQZ - //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ - sidc["G-F-AZII--"] = - ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.IRR - sidc["G-F-AZIR--"] = - ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ - sidc["G-F-AZXI--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.IRR - sidc["G-F-AZXR--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CNS - sidc["G-F-AZCI--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.IRR - sidc["G-F-AZCR--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.RTG - //TACGRP.FSUPP.ARS.TGTAQZ.CFZ - sidc["G-F-AZFI--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.IRR - sidc["G-F-AZFR--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.RTG - //sidc['G-F-AX----'] = [];//TACGRP.FSUPP.ARS.WPNRF - //sidc["G-F-AXC---"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.WPNRF.CIRCLR - //sidc['G-F-AXS---'] = [];//TACGRP.FSUPP.ARS.WPNRF.SCR - //sidc['G-F-AK----'] = [];//TACGRP.FSUPP.ARS.KLBOX - //sidc['G-F-AKB---'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE - //sidc["G-F-AKBC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.BLUE.CIRCLR - //sidc['G-F-AKBI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.IRR - //sidc['G-F-AKBR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.RTG - //sidc['G-F-AKP---'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE - //sidc["G-F-AKPC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.PURPLE.CIRCLR - //sidc['G-F-AKPI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.IRR - //sidc['G-F-AKPR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.RTG - //sidc['G-S-------'] = [];//TACGRP.CSS - //sidc['G-S-P-----'] = [];//TACGRP.CSS.PNT - //sidc['G-S-L-----'] = [];//TACGRP.CSS.LNE - //sidc['G-S-LC----'] = [];//TACGRP.CSS.LNE.CNY - //sidc['G-S-LCM---'] = [];//TACGRP.CSS.LNE.CNY.MCNY - //sidc['G-S-LCH---'] = [];//TACGRP.CSS.LNE.CNY.HCNY - //sidc['G-S-LR----'] = [];//TACGRP.CSS.LNE.SLPRUT - //sidc['G-S-LRM---'] = [];//TACGRP.CSS.LNE.SLPRUT.MSRUT - //sidc['G-S-LRA---'] = [];//TACGRP.CSS.LNE.SLPRUT.ASRUT - //sidc['G-S-LRO---'] = [];//TACGRP.CSS.LNE.SLPRUT.1WTRFF - //sidc['G-S-LRT---'] = [];//TACGRP.CSS.LNE.SLPRUT.ATRFF - //sidc['G-S-LRW---'] = [];//TACGRP.CSS.LNE.SLPRUT.2WTRFF - //sidc['G-S-A-----'] = [];//TACGRP.CSS.ARA - //sidc['G-S-AD----'] = [];//TACGRP.CSS.ARA.DHA - //sidc['G-S-AE----'] = [];//TACGRP.CSS.ARA.EPWHA - //sidc['G-S-AR----'] = [];//TACGRP.CSS.ARA.FARP - //sidc['G-S-AH----'] = [];//TACGRP.CSS.ARA.RHA - //sidc['G-S-AS----'] = [];//TACGRP.CSS.ARA.SUPARS - //sidc['G-S-ASB---'] = [];//TACGRP.CSS.ARA.SUPARS.BSA - //sidc['G-S-ASD---'] = [];//TACGRP.CSS.ARA.SUPARS.DSA - //sidc['G-S-ASR---'] = [];//TACGRP.CSS.ARA.SUPARS.RSA - //sidc['G-O-------'] = [];//TACGRP.OTH - //sidc['G-O-E-----'] = [];//TACGRP.OTH.ER - //sidc['G-O-H-----'] = [];//TACGRP.OTH.HAZ - //sidc['G-O-HN----'] = [];//TACGRP.OTH.HAZ.NVGL - //sidc['G-O-S-----'] = [];//TACGRP.OTH.SSUBSR - //sidc['G-O-B-----'] = [];//TACGRP.OTH.BERLNE - //sidc['G-O-BE----'] = [];//TACGRP.OTH.BERLNE.ELC - //sidc['G-O-BA----'] = [];//TACGRP.OTH.BERLNE.ACU - //sidc['G-O-BT----'] = [];//TACGRP.OTH.BERLNE.TPD - //sidc['G-O-BO----'] = [];//TACGRP.OTH.BERLNE.EOPI - //sidc['G-O-F-----'] = [];//TACGRP.OTH.FIX + sidc["T-S-T-----"] = ms.geometryConverter["TEST"]; //SIDC FOR DEVELOPER PURPOSES / MARKS WITHOUT ITS OWN SIDC - //2525B compatibility - //sidc["G-F-ATC---"] = []; //ms.geometryConverter.circle; - //sidc["G-F-AZIC--"] = []; //ms.geometryConverter.circle; + sidc["G-T-B-----"] = ms.geometryConverter["BLOCK"]; //TACGRP.TSK.BLK + sidc["G-T-H-----"] = ms.geometryConverter["BREACH"]; //TACGRP.TSK.BRH + sidc["G-T-Y-----"] = ms.geometryConverter["BYPASS"]; //TACGRP.TSK.BYS + sidc["G-T-C-----"] = ms.geometryConverter["CANALIZE"]; //TACGRP.TSK.CNZ + sidc["G-T-X-----"] = ms.geometryConverter["CLEAR"]; //TACGRP.TSK.CLR + sidc['G-T-J-----'] = ms.geometryConverter["CONTAIN"]; //TACGRP.TSK.CNT + sidc['G-T-K-----'] = ms.geometryConverter["COUNTERATTACK"]; //TACGRP.TSK.CATK + //sidc['G-T-KF----'] = [];//TACGRP.TSK.CATK.CATKF + sidc["G-T-L-----"] = ms.geometryConverter["DELAY"]; //TACGRP.TSK.DLY + //sidc['G-T-T-----'] = [];//TACGRP.TSK.DRT + sidc["G-T-F-----"] = ms.geometryConverter["FIX"]; //TACGRP.TSK.FIX + //sidc['G-T-A-----'] = [];//TACGRP.TSK.FLWASS + //sidc['G-T-AS----'] = [];//TACGRP.TSK.FLWASS.FLWSUP + sidc["G-T-E-----"] = ms.geometryConverter["ISOLATE"]; //TACGRP.TSK.ISL + sidc["G-T-O-----"] = ms.geometryConverter.occupy; //TACGRP.TSK.OCC + //sidc['G-T-P-----'] = [];//TACGRP.TSK.PNE + //sidc['G-T-R-----'] = [];//TACGRP.TSK.RIP + //sidc['G-T-Q-----'] = [];//TACGRP.TSK.RTN + //sidc["G-T-M-----"] = ms.geometryConverter.delay; //TACGRP.TSK.RTM + //sidc['G-T-S-----'] = [];//TACGRP.TSK.SCE + //sidc['G-T-U-----'] = [];//TACGRP.TSK.SEC + //sidc['G-T-US----'] = [];//TACGRP.TSK.SEC.SCN + sidc["G-T-UG----"] = ms.geometryConverter.guard; //TACGRP.TSK.SEC.GUD + sidc["G-T-UC----"] = ms.geometryConverter.cover; //TACGRP.TSK.SEC.COV + //sidc['G-T-Z-----'] = [];//TACGRP.TSK.SZE + //sidc['G-T-W-----'] = [];//TACGRP.TSK.WDR + //sidc['G-T-WP----'] = [];//TACGRP.TSK.WDR.WDRUP + //sidc['G-G-------'] = [];//TACGRP.C2GM + //sidc['G-G-G-----'] = [];//TACGRP.C2GM.GNL + //sidc['G-G-GP----'] = [];//TACGRP.C2GM.GNL.PNT + //sidc['G-G-GPU---'] = [];//TACGRP.C2GM.GNL.PNT.USW + //sidc['G-G-GPUU--'] = [];//TACGRP.C2GM.GNL.PNT.USW.UH2 + //sidc['G-G-GPW---'] = [];//TACGRP.C2GM.GNL.PNT.WPN + //sidc['G-G-GL----'] = [];//TACGRP.C2GM.GNL.LNE + sidc['G-G-GLB---'] = ms.geometryConverter["BOUNDARIES"]; //TACGRP.C2GM.GNL.LNE.BNDS + sidc['G-G-GLF---'] = ms.geometryConverter["FLOT"]; //TACGRP.C2GM.GNL.LNE.FLOT + sidc['G-G-GLC---'] = ms.geometryConverter["LINE OF CONTACT"]; //TACGRP.C2GM.GNL.LNE.LOC + sidc['G-G-GLP---'] = ms.geometryConverter["PHASELINE"]; //TACGRP.C2GM.GNL.LNE.PHELNE + //sidc['G-G-GLL---'] = [];//TACGRP.C2GM.GNL.LNE.LITLNE + //sidc['G-G-GA----'] = [];//TACGRP.C2GM.GNL.ARS + //sidc['G-G-GAG---'] = [];//TACGRP.C2GM.GNL.ARS.GENARA + //sidc['G-G-GAA---'] = [];//TACGRP.C2GM.GNL.ARS.ABYARA + //sidc['G-G-GAE---'] = [];//TACGRP.C2GM.GNL.ARS.EMTARA + //sidc['G-G-GAF---'] = [];//TACGRP.C2GM.GNL.ARS.FTFDAR + //sidc['G-G-GAD---'] = [];//TACGRP.C2GM.GNL.ARS.DRPZ + //sidc['G-G-GAX---'] = [];//TACGRP.C2GM.GNL.ARS.EZ + //sidc['G-G-GAL---'] = [];//TACGRP.C2GM.GNL.ARS.LZ + //sidc['G-G-GAP---'] = [];//TACGRP.C2GM.GNL.ARS.PZ + //sidc['G-G-GAS---'] = [];//TACGRP.C2GM.GNL.ARS.SRHARA + //sidc['G-G-GAY---'] = [];//TACGRP.C2GM.GNL.ARS.LAARA + //sidc['G-G-GAZ---'] = [];//TACGRP.C2GM.GNL.ARS.AIRFZ + //sidc['G-G-A-----'] = [];//TACGRP.C2GM.AVN + //sidc['G-G-AP----'] = [];//TACGRP.C2GM.AVN.PNT + //sidc['G-G-AL----'] = [];//TACGRP.C2GM.AVN.LNE + sidc['G-G-ALC---'] = ms.geometryConverter["AIR CORRIDOR"];//TACGRP.C2GM.AVN.LNE.ACDR + //sidc['G-G-ALM---'] = [];//TACGRP.C2GM.AVN.LNE.MRR + //sidc['G-G-ALS---'] = [];//TACGRP.C2GM.AVN.LNE.SAAFR + //sidc['G-G-ALU---'] = [];//TACGRP.C2GM.AVN.LNE.UAR + //sidc['G-G-ALL---'] = [];//TACGRP.C2GM.AVN.LNE.LLTR + //sidc['G-G-AA----'] = [];//TACGRP.C2GM.AVN.ARS + //sidc['G-G-AAR---'] = [];//TACGRP.C2GM.AVN.ARS.ROZ + //sidc['G-G-AAF---'] = [];//TACGRP.C2GM.AVN.ARS.SHRDEZ + //sidc['G-G-AAH---'] = [];//TACGRP.C2GM.AVN.ARS.HIDACZ + //sidc['G-G-AAM---'] = [];//TACGRP.C2GM.AVN.ARS.MEZ + //sidc['G-G-AAML--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.LAMEZ + //sidc['G-G-AAMH--'] = [];//TACGRP.C2GM.AVN.ARS.MEZ.HAMEZ + //sidc['G-G-AAW---'] = [];//TACGRP.C2GM.AVN.ARS.WFZ + //sidc['G-G-P-----'] = [];//TACGRP.C2GM.DCPN + //sidc['G-G-PD----'] = [];//TACGRP.C2GM.DCPN.DMY + //sidc['G-G-PA----'] = [];//TACGRP.C2GM.DCPN.AAFF + //sidc['G-G-PF----'] = [];//TACGRP.C2GM.DCPN.DAFF + //sidc['G-G-PM----'] = [];//TACGRP.C2GM.DCPN.DMA + //sidc['G-G-PY----'] = [];//TACGRP.C2GM.DCPN.DMAF + //sidc['G-G-PC----'] = [];//ACGRP.C2GM.DCPN.DMYMD + //sidc['G-G-D-----'] = [];//TACGRP.C2GM.DEF + //sidc['G-G-DP----'] = [];//TACGRP.C2GM.DEF.PNT + //sidc['G-G-DL----'] = [];//TACGRP.C2GM.DEF.LNE + //sidc['G-G-DLF---'] = [];//TACGRP.C2GM.DEF.LNE.FEBA + //sidc['G-G-DLP---'] = [];//TACGRP.C2GM.DEF.LNE.PDF + //sidc['G-G-DA----'] = [];//TACGRP.C2GM.DEF.ARS + //sidc['G-G-DAB---'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN + //sidc['G-G-DABP--'] = [];//TACGRP.C2GM.DEF.ARS.BTLPSN.PBNO + //sidc['G-G-DAE---'] = [];//TACGRP.C2GM.DEF.ARS.EMTARA + //sidc['G-G-O-----'] = [];//TACGRP.C2GM.OFF + //sidc['G-G-OP----'] = [];//TACGRP.C2GM.OFF.PNT + //sidc['G-G-OL----'] = [];//TACGRP.C2GM.OFF.LNE + //sidc['G-G-OLA---'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV + //sidc['G-G-OLAV--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.AVN + //sidc['G-G-OLAA--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ABN + //sidc['G-G-OLAR--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.ATK + //sidc['G-G-OLAG--'] = [];//TACGRP.C2GM.OFF.LNE.AXSADV.GRD + sidc["G-G-OLAGM-"] = ms.geometryConverter["MAIN ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.MANATK + sidc["G-G-OLAGS-"] = ms.geometryConverter["SUPPORTING ATTACK"]; //TACGRP.C2GM.OFF.LNE.AXSADV.GRD.SUPATK + //sidc['G-G-OLK---'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK + //sidc['G-G-OLKA--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.AVN + //sidc['G-G-OLKG--'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD + //sidc['G-G-OLKGM-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.MANATK + //sidc['G-G-OLKGS-'] = [];//TACGRP.C2GM.OFF.LNE.DIRATK.GRD.SUPATK + //sidc['G-G-OLF---'] = [];//TACGRP.C2GM.OFF.LNE.FCL + //sidc['G-G-OLI---'] = [];//TACGRP.C2GM.OFF.LNE.INFNLE + //sidc['G-G-OLL---'] = [];//TACGRP.C2GM.OFF.LNE.LMTADV + //sidc['G-G-OLT---'] = [];//TACGRP.C2GM.OFF.LNE.LD + //sidc['G-G-OLC---'] = [];//TACGRP.C2GM.OFF.LNE.LDLC + //sidc['G-G-OLP---'] = [];//TACGRP.C2GM.OFF.LNE.PLD + //sidc['G-G-OA----'] = [];//TACGRP.C2GM.OFF.ARS + //sidc['G-G-OAA---'] = [];//TACGRP.C2GM.OFF.ARS.ASTPSN + //sidc['G-G-OAK---'] = [];//TACGRP.C2GM.OFF.ARS.ATKPSN + //sidc['G-G-OAF---'] = [];//TACGRP.C2GM.OFF.ARS.AFP + //sidc['G-G-OAS---'] = [];//TACGRP.C2GM.OFF.ARS.SFP + //sidc['G-G-OAO---'] = [];//TACGRP.C2GM.OFF.ARS.OBJ + //sidc['G-G-OAP---'] = [];//TACGRP.C2GM.OFF.ARS.PBX + //sidc['G-G-S-----'] = [];//TACGRP.C2GM.SPL + //sidc['G-G-SL----'] = [];//TACGRP.C2GM.SPL.LNE + sidc["G-G-SLA---"] = ms.geometryConverter["AMBUSH"]; //TACGRP.C2GM.SPL.LNE.AMB + //sidc['G-G-SLH---'] = [];//TACGRP.C2GM.SPL.LNE.HGL + //sidc['G-G-SLR---'] = [];//TACGRP.C2GM.SPL.LNE.REL + //sidc['G-G-SLB---'] = [];//TACGRP.C2GM.SPL.LNE.BRGH + //sidc['G-G-SA----'] = [];//TACGRP.C2GM.SPL.ARA + //sidc['G-G-SAO---'] = [];//TACGRP.C2GM.SPL.ARA.AOO + //sidc['G-G-SAA---'] = [];//TACGRP.C2GM.SPL.ARA.AHD + //sidc['G-G-SAE---'] = [];//TACGRP.C2GM.SPL.ARA.ENCMT + sidc["G-G-SAN---"] = ms.geometryConverter["NAMED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.NAI + sidc["G-G-SAT---"] = ms.geometryConverter["TARGETED AREA OF INTEREST"]; //TACGRP.C2GM.SPL.ARA.TAIS + //sidc['G-M-------'] = [];//TACGRP.MOBSU + //sidc['G-M-O-----'] = [];//TACGRP.MOBSU.OBST + //sidc['G-M-OG----'] = [];//TACGRP.MOBSU.OBST.GNL + //sidc['G-M-OGB---'] = [];//TACGRP.MOBSU.OBST.GNL.BLT + //sidc['G-M-OGL---'] = [];//TACGRP.MOBSU.OBST.GNL.LNE + //sidc['G-M-OGZ---'] = [];//TACGRP.MOBSU.OBST.GNL.Z + //sidc['G-M-OGF---'] = [];//TACGRP.MOBSU.OBST.GNL.OFA + //sidc['G-M-OGR---'] = [];//TACGRP.MOBSU.OBST.GNL.ORA + //sidc['G-M-OS----'] = [];//TACGRP.MOBSU.OBST.ABS + //sidc['G-M-OA----'] = [];//TACGRP.MOBSU.OBST.ATO + //sidc['G-M-OAD---'] = [];//TACGRP.MOBSU.OBST.ATO.ATD + //sidc['G-M-OADU--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDUC + //sidc['G-M-OADC--'] = [];//TACGRP.MOBSU.OBST.ATO.ATD.ATDC + //sidc['G-M-OAR---'] = [];//TACGRP.MOBSU.OBST.ATO.ATDATM + //sidc['G-M-OAO---'] = [];//TACGRP.MOBSU.OBST.ATO.TDTSM + //sidc['G-M-OAW---'] = [];//TACGRP.MOBSU.OBST.ATO.ATW + //sidc['G-M-OM----'] = [];//TACGRP.MOBSU.OBST.MNE + //sidc['G-M-OMC---'] = [];//TACGRP.MOBSU.OBST.MNE.MCLST + //sidc['G-M-OF----'] = [];//TACGRP.MOBSU.OBST.MNEFLD + //sidc['G-M-OFD---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.DYN + //sidc['G-M-OFG---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.GAP + //sidc['G-M-OFA---'] = [];//TACGRP.MOBSU.OBST.MNEFLD.MNDARA + //sidc['G-M-OE----'] = [];//TACGRP.MOBSU.OBST.OBSEFT + //sidc['G-M-OEB---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.BLK + //sidc['G-M-OEF---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.FIX + //sidc['G-M-OET---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.TUR + //sidc['G-M-OED---'] = [];//TACGRP.MOBSU.OBST.OBSEFT.DRT + //sidc['G-M-OU----'] = [];//TACGRP.MOBSU.OBST.UXO + //sidc['G-M-OR----'] = [];//TACGRP.MOBSU.OBST.RCBB + //sidc['G-M-ORP---'] = [];//TACGRP.MOBSU.OBST.RCBB.PLND + //sidc['G-M-ORS---'] = [];//TACGRP.MOBSU.OBST.RCBB.SAFE + //sidc['G-M-ORA---'] = [];//TACGRP.MOBSU.OBST.RCBB.ABP + //sidc['G-M-ORC---'] = [];//TACGRP.MOBSU.OBST.RCBB.EXCD + //sidc['G-M-OT----'] = [];//TACGRP.MOBSU.OBST.TRIPWR + //sidc['G-M-OW----'] = [];//TACGRP.MOBSU.OBST.WREOBS + //sidc['G-M-OWU---'] = [];//TACGRP.MOBSU.OBST.WREOBS.USP + //sidc['G-M-OWS---'] = [];//TACGRP.MOBSU.OBST.WREOBS.SNGFNC + //sidc['G-M-OWD---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DBLFNC + //sidc['G-M-OWA---'] = [];//TACGRP.MOBSU.OBST.WREOBS.DAFNC + //sidc['G-M-OWL---'] = [];//TACGRP.MOBSU.OBST.WREOBS.LWFNC + //sidc['G-M-OWH---'] = [];//TACGRP.MOBSU.OBST.WREOBS.HWFNC + //sidc['G-M-OWC---'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA + //sidc['G-M-OWCS--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.SNG + //sidc['G-M-OWCD--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.DBLSTD + //sidc['G-M-OWCT--'] = [];//TACGRP.MOBSU.OBST.WREOBS.CCTA.TRISTD + //sidc['G-M-OH----'] = [];//TACGRP.MOBSU.OBST.AVN + //sidc['G-M-OHT---'] = [];//TACGRP.MOBSU.OBST.AVN.TWR + //sidc['G-M-OHO---'] = [];//TACGRP.MOBSU.OBST.AVN.OHWIRE + //sidc['G-M-B-----'] = [];//TACGRP.MOBSU.OBSTBP + //sidc['G-M-BD----'] = [];//TACGRP.MOBSU.OBSTBP.DFTY + //sidc['G-M-BDE---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.ESY + //sidc['G-M-BDD---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.DFT + //sidc['G-M-BDI---'] = [];//TACGRP.MOBSU.OBSTBP.DFTY.IMP + //sidc['G-M-BC----'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE + //sidc['G-M-BCA---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.ASTCA + //sidc['G-M-BCB---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.BRG + //sidc['G-M-BCF---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRY + //sidc['G-M-BCE---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDESY + //sidc['G-M-BCD---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.FRDDFT + //sidc['G-M-BCL---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.LANE + //sidc['G-M-BCR---'] = [];//TACGRP.MOBSU.OBSTBP.CSGSTE.RFT + //sidc['G-M-S-----'] = [];//TACGRP.MOBSU.SU + //sidc['G-M-SL----'] = [];//TACGRP.MOBSU.SU.FTFDLN + //sidc['G-M-SW----'] = [];//TACGRP.MOBSU.SU.FEWS + //sidc['G-M-SP----'] = [];//TACGRP.MOBSU.SU.STRGPT + //sidc['G-M-N-----'] = [];//TACGRP.MOBSU.CBRN + //sidc['G-M-NM----'] = [];//TACGRP.MOBSU.CBRN.MSDZ + //sidc['G-M-NR----'] = [];//TACGRP.MOBSU.CBRN.RADA + //sidc['G-M-NB----'] = [];//TACGRP.MOBSU.CBRN.BIOCA + //sidc['G-M-NC----'] = [];//TACGRP.MOBSU.CBRN.CMLCA + //sidc['G-M-NE----'] = [];//TACGRP.MOBSU.CBRN.REEVNT + //sidc['G-M-ND----'] = [];//TACGRP.MOBSU.CBRN.DECONP + //sidc['G-M-NL----'] = [];//TACGRP.MOBSU.CBRN.DRCL + //sidc['G-F-------'] = [];//TACGRP.FSUPP + //sidc['G-F-P-----'] = [];//TACGRP.FSUPP.PNT + //sidc['G-F-PT----'] = [];//TACGRP.FSUPP.PNT.TGT + //sidc['G-F-PC----'] = [];//TACGRP.FSUPP.PNT.C2PNT + //sidc['G-F-L-----'] = [];//TACGRP.FSUPP.LNE + //sidc['G-F-LT----'] = [];//TACGRP.FSUPP.LNE.LNRTGT + //sidc['G-F-LTS---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.LSTGT + //sidc['G-F-LTF---'] = [];//TACGRP.FSUPP.LNE.LNRTGT.FPF + //sidc['G-F-LC----'] = [];//TACGRP.FSUPP.LNE.C2LNE + sidc['G-F-LCF---'] = ms.geometryConverter["FIRE SUPPORT COORDINATION LINE"]; //TACGRP.FSUPP.LNE.C2LNE.FSCL + sidc['G-F-LCC---'] = ms.geometryConverter["COORDINATED FIRE LINE"]; //TACGRP.FSUPP.LNE.C2LNE.CFL + sidc['G-F-LCN---'] = ms.geometryConverter["NO FIRE LINE"]; //TACGRP.FSUPP.LNE.C2LNE.NFL + sidc['G-F-LCR---'] = ms.geometryConverter["RESTRICTIVE FIRE LINE"]; //TACGRP.FSUPP.LNE.C2LNE.RFL + sidc['G-F-LCM---'] = ms.geometryConverter["MUNITION FLIGHT PATH"];//TACGRP.FSUPP.LNE.C2LNE.MFP + //sidc['G-F-A-----'] = [];//TACGRP.FSUPP.ARS + //sidc['G-F-AT----'] = [];//TACGRP.FSUPP.ARS.ARATGT + //sidc['G-F-ATG---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SGTGT + //sidc['G-F-ATS---'] = [];//TACGRP.FSUPP.ARS.ARATGT.SMK + //sidc['G-F-ATB---'] = [];//TACGRP.FSUPP.ARS.ARATGT.BMARA + //sidc['G-F-AC----'] = [];//TACGRP.FSUPP.ARS.C2ARS + //TACGRP.FSUPP.ARS.C2ARS.FSA + sidc["G-F-ACSI--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.IRR + sidc["G-F-ACSR--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.RTG + sidc["G-F-ACSC--"] = ms.geometryConverter["FIRE SUPPORT AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FSA.CIRCLR + //sidc['G-F-ACA---'] = [];//TACGRP.FSUPP.ARS.C2ARS.ACA + sidc["G-F-ACAI--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.IRR + sidc["G-F-ACAR--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.RTG + sidc["G-F-ACAC--"] = ms.geometryConverter["AIRSPACE COORDINATION AREA"]; //TACGRP.FSUPP.ARS.C2ARS.ACA.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.FFA + sidc["G-F-ACFI--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.IRR + sidc["G-F-ACFR--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.RTG + sidc["G-F-ACFC--"] = ms.geometryConverter["FREE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.FFA.CIRCLR + sidc['G-F-ACN---'] = ms.geometryConverter["NO FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.NFA + sidc['G-F-ACNI--'] = ms.geometryConverter["NO FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.NFA.IRR + sidc['G-F-ACNR--'] = ms.geometryConverter["NO FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.NFA.RTG + sidc["G-F-ACNC--"] = ms.geometryConverter["NO FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.NFA.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.RFA + sidc["G-F-ACRI--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.IRR + sidc["G-F-ACRR--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.RTG + sidc["G-F-ACRC--"] = ms.geometryConverter["RESTRICTIVE FIRE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.RFA.CIRCLR + sidc['G-F-ACP---'] = ms.geometryConverter["POSITION AREA FOR ARTILLERY"]; //TACGRP.FSUPP.ARS.C2ARS.PAA + sidc['G-F-ACPR--'] = ms.geometryConverter["POSITION AREA FOR ARTILLERY"]; //TACGRP.FSUPP.ARS.C2ARS.PAA.RTG + sidc["G-F-ACPC--"] = ms.geometryConverter["POSITION AREA FOR ARTILLERY"]; //TACGRP.FSUPP.ARS.C2ARS.PAA.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.SNSZ + sidc["G-F-ACEI--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.IRR + sidc["G-F-ACER--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.RTG + sidc["G-F-ACEC--"] = ms.geometryConverter["SENSOR ZONE"]; //TACGRP.FSUPP.ARS.C2ARS.SNSZ.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.DA + sidc["G-F-ACDI--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.IRR + sidc["G-F-ACDR--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.RTG + sidc["G-F-ACDC--"] = ms.geometryConverter["DEAD SPACE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.DA.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.ZOR + sidc["G-F-ACZI--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.IRR + sidc["G-F-ACZR--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.RTG + sidc["G-F-ACZC--"] = ms.geometryConverter["ZONE OF RESPONSIBILITY"]; //TACGRP.FSUPP.ARS.C2ARS.ZOR.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.TBA + sidc["G-F-ACBI--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.IRR + sidc["G-F-ACBR--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.RTG + sidc["G-F-ACBC--"] = ms.geometryConverter["TARGET BUILD-UP AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TBA.CIRCLR + //TACGRP.FSUPP.ARS.C2ARS.TVAR + sidc["G-F-ACVI--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.IRR + sidc["G-F-ACVR--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.RTG + sidc["G-F-ACVC--"] = ms.geometryConverter["TARGET VALUE AREA"]; //TACGRP.FSUPP.ARS.C2ARS.TVAR.CIRCLR + sidc["G-F-ACT---"] = + ms.geometryConverter["TERMINALLY GUIDED MUNITION FOOTPRINT"]; //TACGRP.FSUPP.ARS.C2ARS.TGMF + //sidc['G-F-AZ----'] = [];//TACGRP.FSUPP.ARS.TGTAQZ + //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ + sidc["G-F-AZII--"] = + ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.IRR + sidc["G-F-AZIR--"] = + ms.geometryConverter["ARTILLERY TARGET INTELLIGENCE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.ATIZ.RTG + //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ + sidc["G-F-AZXI--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.IRR + sidc["G-F-AZXR--"] = ms.geometryConverter["CALL FOR FIRE ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFFZ.RTG + //TACGRP.FSUPP.ARS.TGTAQZ.CNS + sidc["G-F-AZCI--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.IRR + sidc["G-F-AZCR--"] = ms.geometryConverter["CENSOR ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CNS.RTG + //TACGRP.FSUPP.ARS.TGTAQZ.CFZ + sidc["G-F-AZFI--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.IRR + sidc["G-F-AZFR--"] = ms.geometryConverter["CRITICAL FRIENDLY ZONE"]; //TACGRP.FSUPP.ARS.TGTAQZ.CFZ.RTG + //sidc['G-F-AX----'] = [];//TACGRP.FSUPP.ARS.WPNRF + //sidc["G-F-AXC---"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.WPNRF.CIRCLR + //sidc['G-F-AXS---'] = [];//TACGRP.FSUPP.ARS.WPNRF.SCR + //sidc['G-F-AK----'] = [];//TACGRP.FSUPP.ARS.KLBOX + //sidc['G-F-AKB---'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE + //sidc["G-F-AKBC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.BLUE.CIRCLR + //sidc['G-F-AKBI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.IRR + //sidc['G-F-AKBR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.BLUE.RTG + //sidc['G-F-AKP---'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE + //sidc["G-F-AKPC--"] = []; //ms.geometryConverter.circle;//TACGRP.FSUPP.ARS.KLBOX.PURPLE.CIRCLR + //sidc['G-F-AKPI--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.IRR + //sidc['G-F-AKPR--'] = [];//TACGRP.FSUPP.ARS.KLBOX.PURPLE.RTG + //sidc['G-S-------'] = [];//TACGRP.CSS + //sidc['G-S-P-----'] = [];//TACGRP.CSS.PNT + //sidc['G-S-L-----'] = [];//TACGRP.CSS.LNE + //sidc['G-S-LC----'] = [];//TACGRP.CSS.LNE.CNY + //sidc['G-S-LCM---'] = [];//TACGRP.CSS.LNE.CNY.MCNY + //sidc['G-S-LCH---'] = [];//TACGRP.CSS.LNE.CNY.HCNY + //sidc['G-S-LR----'] = [];//TACGRP.CSS.LNE.SLPRUT + //sidc['G-S-LRM---'] = [];//TACGRP.CSS.LNE.SLPRUT.MSRUT + //sidc['G-S-LRA---'] = [];//TACGRP.CSS.LNE.SLPRUT.ASRUT + //sidc['G-S-LRO---'] = [];//TACGRP.CSS.LNE.SLPRUT.1WTRFF + //sidc['G-S-LRT---'] = [];//TACGRP.CSS.LNE.SLPRUT.ATRFF + //sidc['G-S-LRW---'] = [];//TACGRP.CSS.LNE.SLPRUT.2WTRFF + //sidc['G-S-A-----'] = [];//TACGRP.CSS.ARA + //sidc['G-S-AD----'] = [];//TACGRP.CSS.ARA.DHA + //sidc['G-S-AE----'] = [];//TACGRP.CSS.ARA.EPWHA + //sidc['G-S-AR----'] = [];//TACGRP.CSS.ARA.FARP + //sidc['G-S-AH----'] = [];//TACGRP.CSS.ARA.RHA + //sidc['G-S-AS----'] = [];//TACGRP.CSS.ARA.SUPARS + //sidc['G-S-ASB---'] = [];//TACGRP.CSS.ARA.SUPARS.BSA + //sidc['G-S-ASD---'] = [];//TACGRP.CSS.ARA.SUPARS.DSA + //sidc['G-S-ASR---'] = [];//TACGRP.CSS.ARA.SUPARS.RSA + //sidc['G-O-------'] = [];//TACGRP.OTH + //sidc['G-O-E-----'] = [];//TACGRP.OTH.ER + //sidc['G-O-H-----'] = [];//TACGRP.OTH.HAZ + //sidc['G-O-HN----'] = [];//TACGRP.OTH.HAZ.NVGL + //sidc['G-O-S-----'] = [];//TACGRP.OTH.SSUBSR + //sidc['G-O-B-----'] = [];//TACGRP.OTH.BERLNE + //sidc['G-O-BE----'] = [];//TACGRP.OTH.BERLNE.ELC + //sidc['G-O-BA----'] = [];//TACGRP.OTH.BERLNE.ACU + //sidc['G-O-BT----'] = [];//TACGRP.OTH.BERLNE.TPD + //sidc['G-O-BO----'] = [];//TACGRP.OTH.BERLNE.EOPI + //sidc['G-O-F-----'] = [];//TACGRP.OTH.FIX - // Army XML compability - sidc["C-R-LE----"] = ms.geometry.circle; + //2525B compatibility + //sidc["G-F-ATC---"] = []; //ms.geometryConverter.circle; + //sidc["G-F-AZIC--"] = []; //ms.geometryConverter.circle; - // Systematic SitaWare compatibility - sidc["X---C-----"] = ms.geometryConverter.corridor; - sidc["X---I-----"] = ms.geometry.circle; - sidc["X---A-----"] = ms.geometryConverter["SUPPORTING ATTACK"]; -}; + // Army XML compability + sidc["C-R-LE----"] = ms.geometry.circle; + + // Systematic SitaWare compatibility + sidc["X---C-----"] = ms.geometryConverter.corridor; + sidc["X---I-----"] = ms.geometry.circle; + sidc["X---A-----"] = ms.geometryConverter["SUPPORTING ATTACK"]; +}; \ No newline at end of file diff --git a/tacticaljson/air-corridor.json b/tacticaljson/air-corridor.json new file mode 100644 index 00000000..88723d90 --- /dev/null +++ b/tacticaljson/air-corridor.json @@ -0,0 +1,81 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-G-ALC-------X", + "name": "AC", + "distance": 500, + "administrator": "CCP" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + 4.87, + 52.40 + ], + [ + 4.92, + 52.40 + ], + [ + 4.95, + 52.42 + ] + ] + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.95, + 52.42 + ] + }, + "properties": { + "sidc": "GFGPAPP-------X", + "name": "", + "size": 140, + "fullname": "", + "command": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.92, + 52.40 + ] + }, + "properties": { + "sidc": "GFGPAPC-------X", + "name": "", + "size": 150, + "fullname": "", + "command": "" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 4.87, + 52.40 + ] + }, + "properties": { + "sidc": "GFGPAPP-------X", + "name": "", + "size": 140, + "fullname": "", + "command": "" + } + } + ] +} \ No newline at end of file diff --git a/example-data/tacticaljson/airspace-coordination-area.json b/tacticaljson/airspace-coordination-area.json similarity index 100% rename from example-data/tacticaljson/airspace-coordination-area.json rename to tacticaljson/airspace-coordination-area.json diff --git a/example-data/tacticaljson/ambush.json b/tacticaljson/ambush.json similarity index 100% rename from example-data/tacticaljson/ambush.json rename to tacticaljson/ambush.json diff --git a/example-data/tacticaljson/ambush_wrong_order.json b/tacticaljson/ambush_wrong_order.json similarity index 100% rename from example-data/tacticaljson/ambush_wrong_order.json rename to tacticaljson/ambush_wrong_order.json diff --git a/tacticaljson/artillery-firing-position.json b/tacticaljson/artillery-firing-position.json new file mode 100644 index 00000000..710938f3 --- /dev/null +++ b/tacticaljson/artillery-firing-position.json @@ -0,0 +1,24 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "T-S-T---------X", + "name": "ARTILLERY FIRING POSITION", + "firNum": "11" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.85, + 52.40 + ], + [ + 4.90, + 52.40 + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/artillery-target-intelligence-zone.json b/tacticaljson/artillery-target-intelligence-zone.json similarity index 100% rename from example-data/tacticaljson/artillery-target-intelligence-zone.json rename to tacticaljson/artillery-target-intelligence-zone.json diff --git a/tacticaljson/barrage-fire.json b/tacticaljson/barrage-fire.json new file mode 100644 index 00000000..a5e94967 --- /dev/null +++ b/tacticaljson/barrage-fire.json @@ -0,0 +1,26 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-G-ALC-------X", + "name": "AC", + "distance":500, + "administrator": "OAK", + "type": "1BTY" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.85, + 52.40 + ], + [ + 4.90, + 52.40 + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/block.json b/tacticaljson/block.json similarity index 100% rename from example-data/tacticaljson/block.json rename to tacticaljson/block.json diff --git a/tacticaljson/boundaries.json b/tacticaljson/boundaries.json new file mode 100644 index 00000000..1ee23f49 --- /dev/null +++ b/tacticaljson/boundaries.json @@ -0,0 +1,28 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "sidc": "G-G-GLB-------X" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.19997137199048 + ], + [ + 8.71291081542969, + 50.19977765585604 + ], + [ + 8.719921081542969, + 50.197967765585604 + ] + ] + } + } + ] + } \ No newline at end of file diff --git a/example-data/tacticaljson/breach.json b/tacticaljson/breach.json similarity index 100% rename from example-data/tacticaljson/breach.json rename to tacticaljson/breach.json diff --git a/example-data/tacticaljson/bypass.json b/tacticaljson/bypass.json similarity index 100% rename from example-data/tacticaljson/bypass.json rename to tacticaljson/bypass.json diff --git a/example-data/tacticaljson/call-for-fire-zone.json b/tacticaljson/call-for-fire-zone.json similarity index 100% rename from example-data/tacticaljson/call-for-fire-zone.json rename to tacticaljson/call-for-fire-zone.json diff --git a/example-data/tacticaljson/canalize.json b/tacticaljson/canalize.json similarity index 100% rename from example-data/tacticaljson/canalize.json rename to tacticaljson/canalize.json diff --git a/example-data/tacticaljson/censor-zone.json b/tacticaljson/censor-zone.json similarity index 100% rename from example-data/tacticaljson/censor-zone.json rename to tacticaljson/censor-zone.json diff --git a/example-data/tacticaljson/clear.json b/tacticaljson/clear.json similarity index 100% rename from example-data/tacticaljson/clear.json rename to tacticaljson/clear.json diff --git a/tacticaljson/contain.json b/tacticaljson/contain.json new file mode 100644 index 00000000..d406258f --- /dev/null +++ b/tacticaljson/contain.json @@ -0,0 +1,28 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "sidc": "G-T-J---------X" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.730182647705078, + 50.19767137199048 + ], + [ + 8.726921081542969, + 50.190967765585604 + ], + [ + 8.711814880371094, + 50.19778125933641 + ] + ] + } + } + ] +} diff --git a/tacticaljson/coordinated-fire-line.json b/tacticaljson/coordinated-fire-line.json new file mode 100644 index 00000000..2b84355b --- /dev/null +++ b/tacticaljson/coordinated-fire-line.json @@ -0,0 +1,53 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-LCC-------X", + "name": "CFL", + "administrator": "4RDB", + "nationality": "CZE" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.710182647705078, + 50.19967137199048 + ], + [ + 8.720182647705078, + 50.19267137199048 + ], + [ + 8.730182647705078, + 50.19967137199048 + ], + [ + 8.740182647705078, + 50.19267137199048 + ], + [ + 8.750282647705078, + 50.19967137199048 + ], + [ + 8.760282647705078, + 50.19267137199048 + ], + [ + 8.770282647705078, + 50.19967137199048 + ], + [ + 8.780282647705078, + 50.19267137199048 + ], + [ + 8.790282647705078, + 50.19967137199048 + ] + ] + } + }] +} \ No newline at end of file diff --git a/tacticaljson/counterattack.json b/tacticaljson/counterattack.json new file mode 100644 index 00000000..f3ad548e --- /dev/null +++ b/tacticaljson/counterattack.json @@ -0,0 +1,32 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "sidc": "G-T-K---------X" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.87, + 52.40 + ], + [ + 4.92, + 52.40 + ], + [ + 4.95, + 52.42 + ], + [ + 4.89, + 52.39 + ] + ] + } + } + ] +} diff --git a/example-data/tacticaljson/critical-friendly-zone.json b/tacticaljson/critical-friendly-zone.json similarity index 100% rename from example-data/tacticaljson/critical-friendly-zone.json rename to tacticaljson/critical-friendly-zone.json diff --git a/example-data/tacticaljson/dead-space-area.json b/tacticaljson/dead-space-area.json similarity index 100% rename from example-data/tacticaljson/dead-space-area.json rename to tacticaljson/dead-space-area.json diff --git a/example-data/tacticaljson/delay.json b/tacticaljson/delay.json similarity index 100% rename from example-data/tacticaljson/delay.json rename to tacticaljson/delay.json diff --git a/example-data/tacticaljson/fire-support-areas.json b/tacticaljson/fire-support-areas.json similarity index 100% rename from example-data/tacticaljson/fire-support-areas.json rename to tacticaljson/fire-support-areas.json diff --git a/tacticaljson/fire-support-coordination-line.json b/tacticaljson/fire-support-coordination-line.json new file mode 100644 index 00000000..160377a0 --- /dev/null +++ b/tacticaljson/fire-support-coordination-line.json @@ -0,0 +1,27 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-LCF-------X", + "name": "FSCL", + "administrator": "X CORPS", + "t1": "ALPHA", + "dtg": "10095900ZJAN92", + "dtg1": "10095900ZJAN92" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.197967765585604 + ], + [ + 8.719921081542969, + 50.197967765585604 + ] + ] + } + }] +} \ No newline at end of file diff --git a/tacticaljson/flot.json b/tacticaljson/flot.json new file mode 100644 index 00000000..d5069b4a --- /dev/null +++ b/tacticaljson/flot.json @@ -0,0 +1,23 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-G-GLF-------X", + "bearingWidth": 400 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.87, + 52.40 + ], + [ + 4.87, + 52.39 + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/free-fire-area.json b/tacticaljson/free-fire-area.json similarity index 100% rename from example-data/tacticaljson/free-fire-area.json rename to tacticaljson/free-fire-area.json diff --git a/tacticaljson/import_files.js b/tacticaljson/import_files.js new file mode 100644 index 00000000..07dd86bc --- /dev/null +++ b/tacticaljson/import_files.js @@ -0,0 +1,12 @@ +const importAll = (requireFiles) => { + const files = {}; + requireFiles.keys().map((item) => { + files[item.replace('./', '').replace('.json', '')] = requireFiles(item); + }); + + return files; +}; + +const files = importAll(require.context('./', false, /\.json$/)); + +export default files; \ No newline at end of file diff --git a/tacticaljson/lateral-boundary.json b/tacticaljson/lateral-boundary.json new file mode 100644 index 00000000..0f6cbd05 --- /dev/null +++ b/tacticaljson/lateral-boundary.json @@ -0,0 +1,46 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-L-B---------X" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.730182647705078, + 50.19967137199048 + ], + [ + 8.730182647705078, + 50.19267137199048 + ], + [ + 8.730182647705078, + 50.19967137199048 + ], + [ + 8.730182647705078, + 50.19267137199048 + ], + [ + 8.737282647705078, + 50.19967137199048 + ], + [ + 8.737282647705078, + 50.19267137199048 + ], + [ + 8.740282647705078, + 50.19967137199048 + ], + [ + 8.740282647705078, + 50.19267137199048 + ] + ] + } + }] +} \ No newline at end of file diff --git a/tacticaljson/line-of-contact.json b/tacticaljson/line-of-contact.json new file mode 100644 index 00000000..35445966 --- /dev/null +++ b/tacticaljson/line-of-contact.json @@ -0,0 +1,33 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-G-GLC-------X", + "bearingWidth": 400, + "bearingSpacing": 10, + "locWidth": 5 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.19997137199048 + ], + [ + 8.71291081542969, + 50.19977765585604 + ], + [ + 8.719921081542969, + 50.197967765585604 + ], + [ + 8.726921081542969, + 50.193967765585604 + ] + ] + } + }] +} \ No newline at end of file diff --git a/tacticaljson/munition-flight-path.json b/tacticaljson/munition-flight-path.json new file mode 100644 index 00000000..0fe3d358 --- /dev/null +++ b/tacticaljson/munition-flight-path.json @@ -0,0 +1,25 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-LCM-------X", + "name": "MFL", + "dtg": "10095900ZJAN92", + "dtg1": "10095900ZJAN92" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.197967765585604 + ], + [ + 8.719921081542969, + 50.197967765585604 + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/named-area-of-interest.json b/tacticaljson/named-area-of-interest.json similarity index 100% rename from example-data/tacticaljson/named-area-of-interest.json rename to tacticaljson/named-area-of-interest.json diff --git a/tacticaljson/no-fire-area.json b/tacticaljson/no-fire-area.json new file mode 100644 index 00000000..5ed206cb --- /dev/null +++ b/tacticaljson/no-fire-area.json @@ -0,0 +1,99 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-ACNC------X", + "distance": 300, + "fill": "dashes", + "name": "NFA" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 0.6128800048828125, + 47.38672820892124 + ] + + } + }, + { + "type": "Feature", + "properties": { + "sidc": "G-F-ACNR------X", + "distance": 300, + "fill": "dashes", + "name": "NFA" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 0.6228800048828125, + 47.38672820892124 + ], + [ + 0.6188800048828125, + 47.38672820892124 + ] + ] + } + + }, { + "type": "Feature", + "properties": { + "sidc": "G-F-ACNI------X", + "distance": 200, + "fill": "dashes", + "name": "NFA" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.514984130859375, + 47.42065432071318 + ], + [ + 0.45799255371093744, + 47.39695481668995 + ], + [ + 0.454559326171875, + 47.37184960049907 + ], + [ + 0.46623229980468756, + 47.33789206010502 + ], + [ + 0.5101776123046875, + 47.30789206010502 + ], + [ + 0.6117633056640625, + 47.35836223484991 + ], + [ + 0.5108642578125, + 47.37138457633079 + ], + [ + 0.5417633056640625, + 47.38812286319825 + ], + [ + 0.538330078125, + 47.41833131141311 + ], + [ + 0.514984130859375, + 47.42065432071318 + ] + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/tacticaljson/no-fire-line.json b/tacticaljson/no-fire-line.json new file mode 100644 index 00000000..7186031a --- /dev/null +++ b/tacticaljson/no-fire-line.json @@ -0,0 +1,29 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-LCN-------X", + "name": "NFL", + "administrator": "4RDB", + "dtg": "10095900ZJAN92" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.19997137199048 + ], + [ + 8.71291081542969, + 50.19977765585604 + ], + [ + 8.719921081542969, + 50.197967765585604 + ] + ] + } + }] +} \ No newline at end of file diff --git a/tacticaljson/phase-line.json b/tacticaljson/phase-line.json new file mode 100644 index 00000000..de51981c --- /dev/null +++ b/tacticaljson/phase-line.json @@ -0,0 +1,49 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "sidc": "G-G-GLP-------X", + "name": "PL NAME" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.710182647705078, + 50.19967137199048 + ], + [ + 8.720182647705078, + 50.19267137199048 + ], + [ + 8.730182647705078, + 50.19967137199048 + ], + [ + 8.740182647705078, + 50.19267137199048 + ], + [ + 8.750282647705078, + 50.19967137199048 + ], + [ + 8.760282647705078, + 50.19267137199048 + ], + [ + 8.770282647705078, + 50.19967137199048 + ], + [ + 8.780282647705078, + 50.19267137199048 + ] + ] + } + } +] +} \ No newline at end of file diff --git a/tacticaljson/position-area-for-artillery.json b/tacticaljson/position-area-for-artillery.json new file mode 100644 index 00000000..74c4aeb1 --- /dev/null +++ b/tacticaljson/position-area-for-artillery.json @@ -0,0 +1,96 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-ACPR------X", + "distance": 300, + "name": "PAA" + }, + "geometry": { + "type": "Point", + "coordinates": + [ + 0.6128800048828125, + 47.38672820892124 + ] + + } + }, + { + "type": "Feature", + "properties": { + "sidc": "G-F-ACPR------X", + "distance": 300, + "name": "PAA" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 0.6228800048828125, + 47.38672820892124 + ], + [ + 0.6188800048828125, + 47.38672820892124 + ] + ] + } + + }, { + "type": "Feature", + "properties": { + "sidc": "G-F-ACPR------X", + "distance": 200, + "name": "PAA" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 0.514984130859375, + 47.42065432071318 + ], + [ + 0.45799255371093744, + 47.39695481668995 + ], + [ + 0.454559326171875, + 47.37184960049907 + ], + [ + 0.46623229980468756, + 47.33789206010502 + ], + [ + 0.5101776123046875, + 47.30789206010502 + ], + [ + 0.6117633056640625, + 47.35836223484991 + ], + [ + 0.5108642578125, + 47.37138457633079 + ], + [ + 0.5417633056640625, + 47.38812286319825 + ], + [ + 0.538330078125, + 47.41833131141311 + ], + [ + 0.514984130859375, + 47.42065432071318 + ] + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/restrictive-fire-area.json b/tacticaljson/restrictive-fire-area.json similarity index 95% rename from example-data/tacticaljson/restrictive-fire-area.json rename to tacticaljson/restrictive-fire-area.json index cb647c0a..3b837bbe 100644 --- a/example-data/tacticaljson/restrictive-fire-area.json +++ b/tacticaljson/restrictive-fire-area.json @@ -5,7 +5,7 @@ "type": "Feature", "properties": { "sidc": "G-F-ACRI------X", - "uniqueDesignation": "I" + "administrator": "X CORPS" }, "geometry": { "type": "Polygon", @@ -60,7 +60,7 @@ "properties": { "sidc": "G-F-ACRR------X", "distance": 5000, - "uniqueDesignation": "II" + "administrator": "X CORPS" }, "geometry": { "type": "LineString", @@ -83,7 +83,7 @@ "distance": 5000, "dtg": "10095900ZJAN92", "dtg1": "11095900ZJAN92", - "uniqueDesignation": "III" + "administrator": "X CORPS" }, "geometry": { "type": "Point", diff --git a/tacticaljson/restrictive-fire-line.json b/tacticaljson/restrictive-fire-line.json new file mode 100644 index 00000000..d83abe27 --- /dev/null +++ b/tacticaljson/restrictive-fire-line.json @@ -0,0 +1,27 @@ +{ + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": { + "sidc": "G-F-LCR-------X", + "name": "RFL", + "administrator": "XCORPS", + "t1":"DELTA", + "w": "NO WP SMOKE", + "w1": "" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 8.705182647705078, + 50.19997137199048 + ], + [ + 8.719921081542969, + 50.19997137199048 + ] + ] + } + }] +} \ No newline at end of file diff --git a/example-data/tacticaljson/sensor-zone.json b/tacticaljson/sensor-zone.json similarity index 100% rename from example-data/tacticaljson/sensor-zone.json rename to tacticaljson/sensor-zone.json diff --git a/example-data/tacticaljson/target-build-up-area.json b/tacticaljson/target-build-up-area.json similarity index 100% rename from example-data/tacticaljson/target-build-up-area.json rename to tacticaljson/target-build-up-area.json diff --git a/example-data/tacticaljson/target-value-area.json b/tacticaljson/target-value-area.json similarity index 100% rename from example-data/tacticaljson/target-value-area.json rename to tacticaljson/target-value-area.json diff --git a/example-data/tacticaljson/targeted-area-of-interest.json b/tacticaljson/targeted-area-of-interest.json similarity index 100% rename from example-data/tacticaljson/targeted-area-of-interest.json rename to tacticaljson/targeted-area-of-interest.json diff --git a/example-data/tacticaljson/terminally-guided-munition-footprint.json b/tacticaljson/terminally-guided-munition-footprint.json similarity index 100% rename from example-data/tacticaljson/terminally-guided-munition-footprint.json rename to tacticaljson/terminally-guided-munition-footprint.json diff --git a/example-data/tacticaljson/zone-of-responsibility.json b/tacticaljson/zone-of-responsibility.json similarity index 100% rename from example-data/tacticaljson/zone-of-responsibility.json rename to tacticaljson/zone-of-responsibility.json diff --git a/webpack.development.js b/webpack.development.js new file mode 100644 index 00000000..9489fc5e --- /dev/null +++ b/webpack.development.js @@ -0,0 +1,51 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const ROOT = path.resolve(); +const EXAMPLES_DIR = path.join(ROOT, 'example'); +const NODE_MODULES_DIR = path.join(ROOT, 'node_modules'); + +module.exports = { + mode: 'development', + devtool: 'inline-source-map', + entry: [ + path.join(EXAMPLES_DIR, 'index.js') + ], + output: { + filename: 'bundle.js', + pathinfo: false + }, + module: { + rules: [ + { + test: /\.js$/, + enforce: 'pre', + loader: 'source-map-loader' + }, + { + test: /\.js$/, + exclude: NODE_MODULES_DIR, + loader: 'babel-loader' + } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.join(EXAMPLES_DIR, 'index.html') + }) + ], + resolve: { + extensions: ['.js', '.json'], + modules: [ + "src", + NODE_MODULES_DIR, + EXAMPLES_DIR, + 'tacticaljson' + ] + }, + target: 'web', + devServer: { + compress: true, + historyApiFallback: true, + port: 8080 + } +}; diff --git a/webpack.config.js b/webpack.production.js similarity index 78% rename from webpack.config.js rename to webpack.production.js index d41881bf..1a3bd8e4 100644 --- a/webpack.config.js +++ b/webpack.production.js @@ -1,11 +1,12 @@ const path = require("path"); -var CustomVarLibraryNamePlugin = require("webpack-custom-var-library-name-plugin"); +var CustomVarLibraryNamePlugin = require("webpack-custom-var-library-name-append-plugin"); module.exports = { + mode: 'production', entry: "./src/index.js", output: { filename: "milgraphics.js", - path: path.resolve(__dirname, "dist"), + path: path.resolve(path.resolve(), "dist"), library: "milgraphics", libraryTarget: "umd", umdNamedDefine: true