{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/app/services/index.ts","webpack:///./src/assets/scss/index.scss","webpack:///./node_modules/@angular/core/@angular lazy namespace object","webpack:///./src/app/app.resolvers.ts","webpack:///./src/app/services/corkboard.service.ts","webpack:///./src/app/components/index.ts","webpack:///./src/index.ts","webpack:///./src/app/config.ts","webpack:///./src/assets/fontello/css/fontello.css","webpack:///./src/assets/fontello/css/animation.css","webpack:///./src/assets/scss/index.scss?0029","webpack:///./src/assets/css/app.css","webpack:///./src/app/app.module.ts","webpack:///./src/app/app.routes.ts","webpack:///./src/app/services/http.service.ts","webpack:///./src/app/services/storage.service.ts","webpack:///./src/app/services/env.service.ts","webpack:///./src/app/services/socket.service.ts","webpack:///./src/app/services/data.service.ts","webpack:///./src/app/services/notification.service.ts","webpack:///./src/app/services/user.service.ts","webpack:///./src/app/services/board.service.ts","webpack:///./src/app/services/filter.service.ts","webpack:///./src/app/services/issue.service.ts","webpack:///./src/app/services/upload.service.ts","webpack:///./src/app/components/utils/modal.component.ts","webpack:///./src/app/components/utils/form-typeahead.component.ts","webpack:///./src/app/components/header.component.ts","webpack:///./src/app/components/notification-list.component.ts","webpack:///./src/app/components/notification.component.ts","webpack:///./src/app/components/license.component.ts","webpack:///./src/app/components/corkboard.component.ts","webpack:///./src/app/components/corkboard-upload.component.ts","webpack:///./src/app/components/corkboard-column-choose.component.ts","webpack:///./src/app/components/corkboard-issue-assign.component.ts","webpack:///./src/app/components/corkboard-print-issues.component.ts","webpack:///./src/app/components/corkboard-choose-issue.component.ts","webpack:///./src/app/components/col-dragger.component.ts","webpack:///./src/app/directives/index.ts","webpack:///./src/app/directives/dropdown.directive.ts","webpack:///./src/app/directives/draggable.directive.ts","webpack:///./src/app/directives/misc.directive.ts","webpack:///./src/app/pipes/index.ts","webpack:///./src/app/pipes/misc.pipe.ts","webpack:///./src/app/utils/atlassian_backend.ts","webpack:///./src/app/utils/microsoft_backend.ts","webpack:///./src/app/app.component.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","id","envService","canActivate","route","this","queryParams","options","EnvironmentProvider","Injectable","EnvService","router","console","log","license","production","isLicensed","navigate","IsLicensedProvider","Router","reject","setDefaultFilter","retriveBoards","subscribe","boards","atlassian","board","values","retriveBoard","Observable","combineLatest","retriveFields","retriveIssueTypes","retriveIssueLinkTypes","err","BoardResolver","isAtlassian","isMicrosoft","GenericResolver","http","appHttp","environment","issues","storage","notificationService","metaService","isprocession","Subject","columns","isprocessing","usedKeysJql","td","corkboard","transitons","transitions","list","map","labels","type","lastTransition","storageKey","transition","logentries","setBoard","processImage","getTag","bit","api","getAttribute","CorkboardService","retriveEpics","retriveProjects","boardid","observable","agile","epics","_data","next","projects","projectList","item","reverse","join","regex","updateStatus","issue","post","base","retrive","getErrorMessage","updateStoryPoints","params","boardId","put","updateEpic","epic","fieldId","getFieldByName","update","fields","set","args","toString","updateIssue","col","STATUS","state","processing","STATES","wait","success","error","title","POINTS","storypoints","EPIC","applyChanges","updates","Array","_columns","forkJoin","createFromBackendError","colSetting","updateKeylist","usedKeys","keylist","issueSearch","jql","maxResults","addIssue","applyIssues","cols","column","index","minX","x","maxX","width","setting","mergeIssuesWithBackendData","tu","find","detectIssues","image","regexpFromComponent","_that","regexp","getTextContent","textAnnotations","performance","now","extractData","base64Img","imageToDataUrl","replace","isAtlassianServer","processImagePublic","response","status","apiResponse","json","responses","throw","statusText","catch","handleError","errMsg","Response","message","canvas","document","createElement","height","getContext","drawImage","toDataURL","combine","v1","v2","concat","re","RegExp","lastDesc","lastVertices","processedKeys","elem","undefined","description","desc","vertices","boundingPoly","match","minY","maxY","y","boundingBox","Http","AppHttp","IssueService","Storage","NotificationService","Meta","onload","init","ready","platformBrowserDynamic","bootstrapModule","AppModule","contentType","dialog","microsoft","preferences","debounce","interval","pdf","filename","notification","level","HINT","SUCCESS","WARNING","ERROR","DEFAULT","TABLE_IMPORT","FLOW_PLAY","FLOWSTEP_PLAY","defaults","dismissOnTimeout","timeout","dismissButton","dismissOnClick","onDismiss","dnd","MAP_GRID_LANE","MAP_GRID_COLUMN","group","PROJECT","SPRINT","VERSION_AFFECTED","VERSION_FIXED","COMPONENT","PRIORITY","TYPE","ASSIGNEE","REPORTER","DUPLICATES","DUPLICATED","BLOCKS","BLOCKED","tree","extras","NEW","OTHERS","lane","project","STORY","locals","Backend","AppComponent","AtlassianBackend","MicrosoftBackend","enableProdMode","NgModule","imports","DndModule","forRoot","BrowserModule","HttpModule","FormsModule","ReactiveFormsModule","routing","providers","BaseRequestOptions","Upload","APP_ROUTER_PROVIDERS","provide","APP_BASE_HREF","useValue","location","pathname","substring","lastIndexOf","useClass","deps","useFactory","defaultOptions","declarations","ModalComponent","FormTypeaheadComponent","HeaderComponent","NotificationComponent","NotificationListComponent","LicenseComponent","ColDraggerComponent","CorkboardComponent","CorkboardUploadComponent","CorkboardColumnChooseComponent","CorkboardIssueAssignComponent","CorkboardPrintIssuesComponent","CorkboardChooseIssueComponent","SafePipe","PluralizePipe","TruncatePipe","IfEmptyPipe","DropdownDirective","DraggableDirective","FormControlValidator","bootstrap","appRoutes","path","children","component","RouterModule","_backend","_defaultOptions","_headers","headers","Headers","append","_serialize","JSON","stringify","_encode","URLSearchParams","searchParams","forEach","url","search","_request","body","patch","delete","callback","resolveConnection","subject","_callback","observer","res","text","stack","complete","ConnectionBackend","RequestOptions","localStorage","getItem","parse","setItem","remove","removeItem","clear","httpGlobal","_options","_settings","settings","isAtlassianCloud","AP","require","jira","JIRA","VSS","cookie","includes","new","getPreferences","user","product","uuid","getSettings","setPreferences","server","baseUrl","urlIssue","urlBoard","clauseNames","indexOf","getFieldById","schema","customId","custom","getIssueLinkByName","issueLinkTypes","setBoardPreferences","getBoardPreferences","retriveFilter","filter","retriveSprints","sprints","retriveVersions","versions","retriveComponents","components","estimation","field","rank","ranking","rankCustomFieldId","epiclink","sprint","issueTypes","retrivePriorities","priorities","assign","setSettings","getBackup","maps","prop","backup","setBackup","_ngZone","_socket","SocketService","io","transports","on","roomKey","emit","eventName","run","webhook","AppSocket","NgZone","_type","_params","startAt","view","edit","_observables","observables","ReplaySubject","jQuery","extend","editForm","form","_editForm","reset","_refresh","event","target","_cloneForm","abstractControl","control","FormGroup","props","controls","validator","asyncValidator","abstractControlItem","addControl","FormArray","FormControl","Math","max","__editFormExtendArray","setValue","onlySelf","emitEvent","emitModelToViewChange","controlArray","prototypeControl","DataService","ngZone","INTERVAL","runOutsideAngular","setInterval","random","substr","created","Date","_subscribe","reduce","dataErrorMessages","dataErrors","trackBy","notifications","dismiss","_deserialize","avatarUrl","getAvatarUrl","avatarUrls","UserService","findIndex","issueData","BoardService","FilterService","socket","userService","expand","isUnlocked","fieldKey","reporter","assignee","locks","isLocked","listBoard","updated","_update","retriveObservable","updateProject","open","focus","epicId","updatePoints","to","updateIssueLinkCreate","inwardIssueId","outwardIssueId","typeId","inwardIssue","outwardIssue","updateIssueLinkDelete","updateRank","issueBefore","issueAfter","rankBeforeIssue","rankAfterIssue","updateGroup","add","groupId","isOthers","types","parseInt","updateGroupProperties","addGroups","removeGroups","createDialog","issueType","openCreateIssueDialog","editDialog","assignDialog","commentDialog","createSubissueDialog","loaded","dataurl","asObservable","fn","handleEvent","preventDefault","handleInputChange","file","dataTransfer","files","reader","FileReader","_handleReaderLoaded","readAsDataURL","alert","_imageurl","imageurl","Image","onerror","src","elementRef","showEvent","EventEmitter","shownEvent","hideEvent","hiddenEvent","ngOnInit","el","nativeElement","$","shown","hidden","show","ngOnDestroy","hide","modal","action","toggle","Output","Component","selector","template","ElementRef","optionValue","optionLabel","select","debounceDelay","inputControl","getTime","default","valueChanges","debounceTime","onSelect","option","label","optionLabelInput","Input","Function","printEvent","config","routeSubscription","unsubscribe","ActivatedRoute","close","env","zone","numberofcolumns","columnsAvailable","tab","modColumns","columnSubscription","setTab","onFileLoaded","v","animations","trigger","style","opacity","animate","handleDrop","upload","onColumnsAvailable","pictureLoaded","_numberofcolumns","onImageLoaded","dragging","onResize","autoWidth","container","clientWidth","_width","_cheight","clientHeight","cbcanvas","context","newIssues","columnWidthUpdated","draggerPositions","columnWidthChanged","markIssues","restore","beginPath","moveTo","ratio","lineTo","closePath","color","fillStyle","strokeStyle","fill","stroke","img","apierror","scale","_height","arr","first","ViewChild","HostListener","corkboardSubscription","onStoryPointsChange","printCSS","printing","printed","modes","iframe","popup","standards","strict","loose","html5","standard","popTitle","printComplete","ngAfterViewChecked","boardissues","print","startPrinting","setTimeout","write","printDoc","docType","getHead","getBody","styles","links","printStyle","native","printHTML","outerHTML","startPrint","timeoutId","printWindow","clearTimeout","createIframe","oldFrame","getElementsByClassName","parentNode","removeChild","printIframe","appendChild","position","border","left","top","zIndex","className","contentWindow","contentDocument","createPopup","windowAttr","screen","newWin","getPrintWindow","submitEvent","issueValue","issueLabel","iconUrl","issueLabelInput","Validators","required","onSubmit","renderer","changed","min","arrangeColumns","updateColumnLayout","colWidth","dragStart","drag","setColumn","dragEnd","setElementStyle","setupDivs","divs","draggableDivs","toArray","ngAfterViewInit","ViewChildren","Renderer","onDropdownShow","onDropdownShown","onDropdownHide","onDropdownHidden","Directive","mouseDown","touchmoveListenFunc","touchendListenFunc","touchcancelListenFunc","onDragStart","touches","removePreviousTouchListeners","listen","onDrag","onDragEnd","clientX","offsetLeft","_getForm","root","_isValid","statusChanges","valid","pristine","submitted","removeClass","addClass","transform","defaultValue","Pipe","limitTo","suffix","plural","pattern","sanitizer","bypassSecurityTrustStyle","DomSanitizer","XSSI_PREFIX","reqAtlassian","baseResponseOptions","request","responseObserver","_req","setDetectedContentType","RequestMethod","method","toUpperCase","output","xhrText","xhrResult","xhr","fromResponseHeaderString","getAllResponseHeaders","responseOptions","ResponseOptions","merge","ok","isSuccess","ResponseType","blob","AtlassianConnection","_baseResponseOptions","createConnection","_browserXHR","_xsrfStrategy","_token","validTo","VSS_Auth_Service","getAccessToken","token","_tokenHeader","authTokenManager","getAuthorizationHeader","configureRequest","XHRConnection","BrowserXhr","XSRFStrategy"],"mappings":"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","file":"js/index.0ceaae0ac85612690090.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([325,1,2]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from './http.service';\nexport * from './storage.service';\nexport * from './env.service';\nexport * from './socket.service';\n\nexport * from './data.service';\nexport * from './notification.service';\nexport * from './user.service';\nexport * from './board.service';\nexport * from './filter.service';\nexport * from './issue.service';\n\nexport * from './upload.service';\nexport * from './corkboard.service'\n\n// RESERVED / export * from './backend.service';\n","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \"/*!\\n * Bootstrap v4.0.0 (https://getbootstrap.com)\\n * Copyright 2011-2018 The Bootstrap Authors\\n * Copyright 2011-2018 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n */:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #cd124a;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #007bff;--secondary: #6c757d;--success: #28a745;--info: #17a2b8;--warning: #ffc107;--danger: #dc3545;--light: #f8f9fa;--dark: #343a40;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\", Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \\\"Liberation Mono\\\", \\\"Courier New\\\", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-size:.8rem;font-weight:400;line-height:1.5;color:#fff;text-align:left;background-color:#fff}[tabindex=\\\"-1\\\"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:monospace, monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=\\\"button\\\"],[type=\\\"reset\\\"],[type=\\\"submit\\\"]{-webkit-appearance:button}button::-moz-focus-inner,[type=\\\"button\\\"]::-moz-focus-inner,[type=\\\"reset\\\"]::-moz-focus-inner,[type=\\\"submit\\\"]::-moz-focus-inner{padding:0;border-style:none}input[type=\\\"radio\\\"],input[type=\\\"checkbox\\\"]{box-sizing:border-box;padding:0}input[type=\\\"date\\\"],input[type=\\\"time\\\"],input[type=\\\"datetime-local\\\"],input[type=\\\"month\\\"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=\\\"number\\\"]::-webkit-inner-spin-button,[type=\\\"number\\\"]::-webkit-outer-spin-button{height:auto}[type=\\\"search\\\"]{outline-offset:-2px;-webkit-appearance:none}[type=\\\"search\\\"]::-webkit-search-cancel-button,[type=\\\"search\\\"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2rem}h2,.h2{font-size:1.6rem}h3,.h3{font-size:1.4rem}h4,.h4{font-size:1.2rem}h5,.h5{font-size:1rem}h6,.h6{font-size:.8rem}.lead{font-size:1rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\\\"\\\\2014   \\\\A0\\\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\\\"Liberation Mono\\\",\\\"Courier New\\\",monospace}code{font-size:87.5%;color:#cd124a;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:600}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=\\\"col-\\\"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:rgba(0,0,0,0)}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>th,.table-success>td{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>th,.table-info>td{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>th,.table-warning>td{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark th,.table-dark td,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:.8rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(1.95rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.8rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.form-control-plaintext.form-control-lg,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.8rem;line-height:1.5;border-radius:.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(1.7rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1rem;line-height:1.5;border-radius:.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(2.5rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=\\\"col-\\\"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,0.8);border-radius:.2rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#28a745}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip,.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#28a745}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#28a745}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{background-color:#71dd8a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{background-color:#34ce57}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#28a745}.was-validated .custom-file-input:valid ~ .custom-file-label::before,.custom-file-input.is-valid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,0.8);border-radius:.2rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dc3545}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip,.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dc3545}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dc3545}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{background-color:#efa2a9}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{background-color:#e4606d}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dc3545}.was-validated .custom-file-input:invalid ~ .custom-file-label::before,.custom-file-input.is-invalid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:.8rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary:focus,.btn-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.8rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=\\\"submit\\\"].btn-block,input[type=\\\"reset\\\"].btn-block,input[type=\\\"button\\\"].btn-block{width:100%}.fade{opacity:0;transition:opacity 0.15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}.dropup,.dropdown{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.8rem;color:#fff;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:\\\"\\\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:\\\"\\\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.8rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=\\\"radio\\\"],.btn-group-toggle>.btn input[type=\\\"checkbox\\\"],.btn-group-toggle>.btn-group>.btn input[type=\\\"radio\\\"],.btn-group-toggle>.btn-group>.btn input[type=\\\"checkbox\\\"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file:focus{z-index:3}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.8rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=\\\"radio\\\"],.input-group-text input[type=\\\"checkbox\\\"]{margin-top:0}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,0.25)}.custom-control-input:active ~ .custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:\\\"\\\";user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:\\\"\\\";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\\\")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\\\")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.95rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\\\") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(128,189,255,0.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\\\"1\\\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.7rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.5rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.95rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.95rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.custom-file-input:focus ~ .custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en) ~ .custom-file-label::after{content:\\\"Browse\\\"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.95rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(1.95rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\\\"Browse\\\";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.35rem;padding-bottom:.35rem;margin-right:1rem;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\\\"\\\";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\\\")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:\\\"/\\\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.8rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:600;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:hover,.badge-info[href]:focus{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:hover,.badge-light[href]:focus{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:600}.alert-dismissible{padding-right:3.7rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.6rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width 0.6s ease}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#fff;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.2rem;font-weight:600;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.close:focus{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -25%)}.modal.show .modal-dialog{transform:translate(0, 0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.8rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=\\\"top\\\"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=\\\"top\\\"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=\\\"top\\\"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=\\\"right\\\"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=\\\"right\\\"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=\\\"right\\\"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=\\\"bottom\\\"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=\\\"bottom\\\"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=\\\"bottom\\\"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=\\\"left\\\"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=\\\"left\\\"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=\\\"left\\\"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.8rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:\\\"\\\";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=\\\"top\\\"]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^=\\\"top\\\"] .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=\\\"top\\\"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=\\\"top\\\"] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=\\\"top\\\"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=\\\"top\\\"] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=\\\"right\\\"]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^=\\\"right\\\"] .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=\\\"right\\\"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=\\\"right\\\"] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=\\\"right\\\"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=\\\"right\\\"] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=\\\"bottom\\\"]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .arrow::after{border-width:0 .5rem .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=\\\"bottom\\\"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\\\"\\\";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=\\\"left\\\"]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^=\\\"left\\\"] .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=\\\"left\\\"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=\\\"left\\\"] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=\\\"left\\\"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=\\\"left\\\"] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.8rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform 0.6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translate3d(0, 0, 0)}}.carousel-item-next,.active.carousel-item-right{transform:translateX(100%)}@supports (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{transform:translate3d(100%, 0, 0)}}.carousel-item-prev,.active.carousel-item-left{transform:translateX(-100%)}@supports (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{transform:translate3d(-100%, 0, 0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\\\")}.carousel-control-next-icon{background-image:url(\\\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\\\")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,0.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:\\\"\\\"}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#007bff !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#0062cc !important}.bg-secondary{background-color:#6c757d !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#545b62 !important}.bg-success{background-color:#28a745 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#1e7e34 !important}.bg-info{background-color:#17a2b8 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#117a8b !important}.bg-warning{background-color:#ffc107 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#d39e00 !important}.bg-danger{background-color:#dc3545 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#bd2130 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#007bff !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#28a745 !important}.border-info{border-color:#17a2b8 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:\\\"\\\"}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\\\"\\\"}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:600 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#007bff !important}a.text-primary:hover,a.text-primary:focus{color:#0062cc !important}.text-secondary{color:#6c757d !important}a.text-secondary:hover,a.text-secondary:focus{color:#545b62 !important}.text-success{color:#28a745 !important}a.text-success:hover,a.text-success:focus{color:#1e7e34 !important}.text-info{color:#17a2b8 !important}a.text-info:hover,a.text-info:focus{color:#117a8b !important}.text-warning{color:#ffc107 !important}a.text-warning:hover,a.text-warning:focus{color:#d39e00 !important}.text-danger{color:#dc3545 !important}a.text-danger:hover,a.text-danger:focus{color:#bd2130 !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#dae0e5 !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#1d2124 !important}.text-muted{color:#6c757d !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\\\" (\\\" attr(title) \\\")\\\"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}.text-light{color:#343a40 !important}a.text-light:hover,a.text-light:focus{color:#1d2124 !important}.text-lighter{color:#ddd !important}a.text-lighter:hover,a.text-lighter:focus{color:#c4c4c4 !important}.text-lightest{color:#eee !important}a.text-lightest:hover,a.text-lightest:focus{color:#d5d5d5 !important}.link{cursor:pointer}.link-decorless:hover,.link-decorless:hover a{text-decoration:none}.text-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bit-card-issue{min-height:4.33em;max-height:7em;border-radius:3;margin-bottom:5px}.bit-card-issue-body{height:2.67em;overflow:hidden;text-overflow:ellipsis;line-height:1.2em;color:#444444}.bit-card-issue-title{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:uppercase;font-weight:600;width:8em}.bit-card-issue .card-block{padding:2.5px 2.5px}.bit-card-issue textarea,.bit-card-issue input{border-color:#ddd}.bit-card-issue textarea .dropdown-menu{font-size:.8rem}.bit-card-issue-highlight-a{background-color:#dff0d8}.bit-card-issue-highlight-b{background-color:#fcf8e3}.bit-card-issue-highlight-c{background-color:blue}.bit-card-issue-highlight-a.bit-card-issue-highlight-b{background:repeating-linear-gradient(45deg, #dff0d8, #dff0d8 0.5em, #fcf8e3 0, #fcf8e3 1em)}.bit-card-issue-highlight-a.bit-card-issue-highlight-c{background:repeating-linear-gradient(45deg, #dff0d8, #dff0d8 0.5em, blue 0, blue 1em)}.bit-card-issue-highlight-b.bit-card-issue-highlight-c{background:repeating-linear-gradient(45deg, #fcf8e3, #fcf8e3 0.5em, blue 0, blue 1em)}.bit-img-icon,.bit-img-avatar{display:inline-block;height:16px;width:16px;background-repeat:no-repeat}iframe{border-radius:5px;border:1px solid #f5f5f5;box-sizing:border-box}.bit-corkboard-logo{color:#CD194D;font-size:3.33em;margin-left:-10px}.bit-corkboard-logo span{color:#222;font-size:80%;vertical-align:middle}.bit-corkboard-logo:before{margin-left:0}.bit-cb-column-dragger{top:0px;width:10px;height:100%;position:absolute;background-color:darkgray;cursor:ew-resize;opacity:0.8}.bit-cb-column-dragger:before{border:none;border-radius:100%;background-color:#fff;position:absolute;font-size:1.5em;left:50%;top:50%;padding:0.25em;margin-top:-.75em;margin-left:-.75em;opacity:1;width:1.5em}.bit-cb-container{position:relative}.bit-stack-parent{position:relative}.bit-stack-child{position:absolute;width:100%;min-height:100%;max-height:100%}.bit-cb{bottom:100px;width:100%;height:100%;overflow-x:hidden;overflow-y:auto}.bit-cb>*{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bit-cb-tab{position:relative;width:100%;min-height:100%;max-height:100%;overflow-y:scroll;overflow-x:auto}.dropdown-toggle{cursor:pointer}.dropdown-item{cursor:pointer}.bit-cb-nopicture{position:absolute;top:0;font-size:10em;color:#ddd;display:flex;align-items:center;justify-content:center;height:100%;width:100%}.bit-cb-processing{position:absolute;top:0;font-size:10em;background-color:#ddd;opacity:0.5;display:flex;align-items:center;justify-content:center;height:100%;width:100%}.modal.bit-corkboard-modal>div{height:90%}.bit-cb-absolute{position:absolute;top:0;left:0;right:0;bottom:0}.bit-corkboard-input{width:3em;border:0px;padding:0 0 0 0.5em}.bit-corkboard-ul{display:flex;flex-wrap:wrap;padding:0px;list-style-type:none}.bit-corkboard-ul>li{flex:0 0 150px;margin-right:10px}.cb-issues-assign{margin:10px}.cb-btn-selected{font-weight:bold}.bit-corkboard-boards-dropdown{text-align:left;width:12em;overflow:hidden;text-overflow:ellipsis;display:list-item;border-top-left-radius:3.01px !important;border-bottom-left-radius:3.01px !important}.bit-corkboard-transitions-dropdown{text-align:left;width:12em;overflow:hidden;text-overflow:ellipsis;display:list-item}.bit-fh-parent{min-height:100%;height:1px}.bit-fh-child{min-height:100%;max-height:100%}.bit-aui-header-dropdown{display:inline-block;text-align:left}.bit-aui-header-dropdown div{z-index:10000}.aui-buttons .bit-aui-header-dropdown a{border-radius:0 !important;margin-right:-1px !important}#dialog-close-button{margin-left:10px}col-dragger{min-height:100%;position:absolute;top:0px}bit-corkboard-card{width:160px}.bit-corkboard-print-cardcontainer{width:100%;margin:5%}.bit-corkboard-print-card{margin:0%;min-height:7cm;max-height:7cm;display:inline-block}.bit-corkboard-print-key{letter-spacing:0.075em;font-size:3rem}.bit-corkboard-print-sd-wrapper{max-height:11.5em;overflow:hidden}.bit-corkboard-print-summary{min-height:3em;overflow:hidden;text-overflow:ellipsis}.bit-corkboard-print-description{text-overflow:ellipsis}.bit-corkboard-print-mark{margin:2em auto;position:relative;border:.5em solid white;width:45%;float:left;background:#fff}.bit-corkboard-print-mark:before,.bit-corkboard-print-mark:after{position:absolute;content:'';border:solid black;z-index:-1}.bit-corkboard-print-mark:before{top:-1em;bottom:-1em;left:-.5em;right:0;border-width:0 1px 0 0}.bit-corkboard-print-mark:after{left:-1em;right:-1em;top:0;bottom:0;border-width:1px 0}.bit-storymap-container{padding:0 5px;padding-left:20px;position:relative}.bit-storymap-filter{float:left;width:16em;border-right:1px solid #ddd;padding:5px 5px 5px 0}.bit-storymap-filter+.bit-storymap-container{margin-left:15.7em}.bit-storymap-grid{overflow-x:scroll;overflow-y:visible}.bit-storymap-grid-lane-label{position:absolute;margin-left:-1em;color:#343a40;font-size:.8rem;text-overflow:ellipsis;transform:rotate(90deg);transform-origin:left center 0}.bit-storymap-grid-lane-item.odd{background-color:rgba(0,0,0,0.022)}.bit-storymap-grid-column{white-space:nowrap}.bit-storymap-grid-column-item{vertical-align:top;margin-right:5px;width:11em;min-height:10em}.bit-storymap-grid-column-item.odd{background-color:rgba(0,0,0,0.022)}.bit-storymap-grid-header .bit-storymap-grid-column-item{padding-top:5px;padding-bottom:5px}.bit-storymap-grid-list{padding-bottom:20px;width:11em}.bit-storymap-filter-list{padding-left:5px}.bit-storymap-filter-label{font-size:.8rem;color:#343a40;line-height:200%;font-weight:600;text-transform:uppercase}.bit-storymap-filter-label .icon-circle,.bit-storymap-filter-label .icon-ok-circled{line-height:1px;font-size:.8rem;margin-left:0rem}.bit-storymap-filter-group{outline:1px solid #ddd}.bit-storymap-filter-group+div{margin-top:2.5px}.bit-storymap-filter-group .bit-storymap-filter-label{text-transform:initial}.bit-storymap-filter-label-badge{background-color:#ddd;color:#fff}.bit-storymap-notification-list{position:fixed;top:0;right:0;width:33em;z-index:100;padding:10px 10px}.bit-storymap-notification-item{margin-bottom:10px}.bit-card-issue .bit-storymap-card-actions .dropdown-toggle{margin-left:-0.5em}.bit-card-issue .bit-storymap-card-actions .dropdown-item{padding:1.25px 5px}.bit-card-issue .bit-storymap-card-actions .dropdown-divider{margin:2.5px 0}\\n\", \"\"]);\n\n// exports\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 210;","import { Injectable } from '@angular/core';\nimport { Resolve, Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { IBackendBoardList } from './interfaces/backend.interface';\nimport { EnvService } from './services';\n\n@Injectable()\nexport class EnvironmentProvider implements CanActivate {\n  // have to do it that way, not as resolver. to make it run before child providers\n\n  constructor(\n    private envService: EnvService\n  ) { }\n\n  canActivate(\n    route: ActivatedRouteSnapshot,\n  ): Observable<boolean> | boolean {\n\n    this.envService.resolve(route.queryParams);\n    return !!this.envService.options;\n  }\n}\n\n@Injectable()\nexport class IsLicensedProvider implements CanActivate {\n\n  constructor(\n    private router: Router,\n    private envService: EnvService\n  ) { }\n\n  canActivate(): Observable<boolean> | boolean {\n    console.log('###### LIC #####', this.envService.license);\n    console.log('###### ENV #####', this.envService.production);\n\n    let isLicensed = this.envService.license || !this.envService.production;\n    console.log('###### VALID #####', isLicensed);\n    !isLicensed && this.router.navigate(['license']);\n\n    return isLicensed;\n  }\n}\n\n@Injectable()\nexport class BoardResolver implements Resolve<any> {\n  constructor(\n    private envService: EnvService\n  ) { }\n\n  resolve(route: ActivatedRouteSnapshot): Promise<any> {\n    // TODO: workaround using promises, cause mock/jira backends return 'invalid' observerable :(\n    let promise = new Promise((resolve, reject) => {\n      this.envService.setDefaultFilter();\n\n      // GET '/board/:id/configuration'\n      this.envService.retriveBoards().subscribe((boards) => {\n        if (!this.envService.options.atlassian.board) {\n          this.envService.options.atlassian.board = boards.values[0].id;\n        }\n\n        // preload board\n        this.envService.retriveBoard(this.envService.options.atlassian.board).subscribe((board: any) => { // could be specified later\n          // preload other global stuff\n          Observable.combineLatest(\n            //this.envService.retriveFilter(board.filter['id']),\n            this.envService.retriveFields(),\n            //this.envService.retriveBoards(),\n            //this.envService.retriveProjects(),\n            //this.envService.retriveStatuses(),\n            this.envService.retriveIssueTypes(),\n            this.envService.retriveIssueLinkTypes(),\n          ).subscribe(\n            () => {},\n            (err) => { reject(err); },\n            () => { resolve(null); }\n          );\n        });\n      });\n\n    });\n\n    return promise;\n\n    // TODO: add environment validation/consistency checking and redirect on issues\n  }\n}\n\n@Injectable()\nexport class GenericResolver implements Resolve<any> {\n  constructor(\n    private envService: EnvService\n  ) { }\n\n  resolve(route: ActivatedRouteSnapshot): Promise<any> {\n\n    let promise = new Promise((resolve, reject) => {\n\n      if (this.envService.isAtlassian) {\n        // preload  global stuff\n        Observable.combineLatest(\n          this.envService.retriveFields(), // TODO: is it needed here at all?\n        ).subscribe(\n          () => {},\n          (err) => { reject(err); },\n          () => { resolve(null); }\n        );\n      }\n\n      if (this.envService.isMicrosoft) {\n        // pass\n        resolve(null);\n      }\n\n    });\n\n    return promise;\n  }\n}\n","\nimport { RouterStateSnapshot } from '@angular/router';\nimport { Injectable, transition } from '@angular/core';\nimport { Observable } from 'rxjs/Rx';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport 'rxjs/add/observable/combineLatest';\nimport { Http, Response } from \"@angular/http\";\n\nimport { Meta, MetaDefinition } from '@angular/platform-browser';\nimport config from '../config';\n\nimport { IIssue } from '../interfaces/issue.interface';\nimport { IBoard, IBoardConfiguration, TBoardId } from '../interfaces/board.interface';\nimport { ICorkboardData } from '../interfaces/corkboarddata.interface';\n\nimport {\n    EnvService,\n    IssueService,\n    BoardService,\n    AppHttp,\n    Storage,\n    NotificationService,\n} from './index';\n\n@Injectable()\nexport class CorkboardService {\n\n    public isprocession = false;\n    public data = new Subject<ICorkboardData>();\n    private _data: ICorkboardData;\n    public columns = new Subject<any[]>();\n\n    private transitions: any[];\n    public transition: any;\n\n    public board: any;\n    public boards: any[];\n\n    public epics: any[];\n    public projects: any[];\n\n    public isprocessing: boolean = false;\n    private _columns: any[];\n    private issueSubscription: Subscription;\n\n    private logentries: any[];\n\n    public regex: string;\n\n    private usedKeysJql = null;\n\n    public static STATES = {\n        'success': { state: 'success', title: 'Sucessfully updated' },\n        'wait': { state: 'wait', title: 'processing...' },\n        'error': { state: 'error', title: 'Update failed!' }\n    }\n\n    constructor(\n        private http: Http,\n        protected appHttp: AppHttp,\n        protected environment: EnvService,\n        protected issues: IssueService,\n        private storage: Storage,\n        protected notificationService: NotificationService,\n        private metaService: Meta\n    ) {\n\n        let td = config.corkboard.transitons;\n        this.transitions = [];\n        td.list.map(t =>\n            this.transitions.push({\n                name: td.labels[t],\n                type: t\n            })\n        );\n\n        let lastTransition = this.storage.get(this.environment.storageKey(\"transition\"));\n        this.transition = lastTransition ? lastTransition : this.transitions[0];\n\n        this.logentries = [];\n        this.boards = environment.data.boards;\n\n        // ^(STORYMAP|AG|AC|DEMO|SUC|BIT)-(\\\\d+)$\n        // build regex from project list\n        // var projects = environment.data.projects.map(item => item.key).reverse().join('|');\n\n        // TEMP\n        /*\n        this.data.subscribe((data: any) => {\n            console.log(\"new data settng board\", data);\n            var projects = data.projects.map(item => item.key).reverse().join('|');\n            this.regex = '^(' + projects + ')-(\\\\d+)$';\n            this.log(\"Recognize issues matching \", this.regex);\n        });\n        */\n\n        this.setBoard(this.boards[0]);\n\n        // make  processImage api configurable via meta tag\n        const processImage = this.metaService.getTag('name=\"processImage\"');\n        processImage && (config.environment.bit.api.processImage = processImage.getAttribute('content'));\n    }\n\n    setBoard(board) {\n        this.board = board;\n        this.retriveEpics(board.id);\n        this.retriveProjects(board.id);\n    }\n\n    retriveEpics(boardid): any {\n        // GET '/board'\n        const observable = this.appHttp.get(config.environment.atlassian.api.agile + 'board/' + boardid + '/epic');\n        observable.subscribe(\n            (data: any) => {\n                this.epics = data.values;\n                if (this._data) {\n                    this._data.epics = this.epics;\n                    this.data.next(this._data);\n                }\n            }\n        );\n        return observable;\n    }\n\n    retriveProjects(boardid): any {\n        // GET '/board/:boardId/project'\n        const observable = this.appHttp.get(config.environment.atlassian.api.agile + 'board/' + boardid + '/project');\n        observable.subscribe(\n            (data: any) => {\n                this.projects = data.values;\n\n                var projectList = this.projects.map(item => item.key).reverse().join('|');\n                this.regex = '^(' + projectList + ')-(\\\\d+)$';\n                this.log(\"Recognize issues matching \", this.regex);\n\n                if (this._data) {\n                    this._data.projects = this.projects;\n                    // TEMP / console.log(\"retrived projects\", this.projects);\n                    this.data.next(this._data);\n                }\n            }\n        );\n        return observable;\n    }\n\n    updateStatus(issue: IIssue, transition: any) {\n        let data = {\n            transition: { id: transition.id }\n        };\n\n        // POST '/issue/:id/transitions'\n        const observable = this.appHttp.post(config.environment.atlassian.api.base + 'issue/' + issue.id + '/transitions', data);\n        observable.subscribe(\n            () => {\n                this.log(\"Updated issue \", issue.key, \" with transition \", transition.name);\n                this.issues.retrive(issue.id);\n            },\n            (err) => { this.log(\"Failed to updated issue \", issue.key, \" with transition \", transition.name, \" (\", this.getErrorMessage(err), \")\") },\n        );\n\n        return observable;\n    }\n\n    updateStoryPoints(issue: IIssue, value): any {\n        // PUT /issue/:issueIdOrKey/estimation\n        var data = {\n            value: value\n        }\n        var params = {\n            boardId: this.board.id\n        }\n        const observable = this.appHttp.put(config.environment.atlassian.api.agile + 'issue/' + issue.id + '/estimation', data, params);\n        observable.subscribe(\n            () => {\n                this.log(\"Updated issue \", issue.key, \" with estimation \", value);\n               this.issues.retrive(issue.id);\n            },\n            (err) => { this.log(\"Failed to updated issue \", issue.key, \" with estimation \", value, \" (\", this.getErrorMessage(err), \")\") },\n        );\n        return observable;\n    }\n\n    updateEpic(issue: IIssue, epic): any {\n        let fieldId = this.environment.getFieldByName('Epic Link').id;\n        let data: any = {\n            update: {},\n            fields: {},\n        };\n        data['update'][fieldId] = [{ set: epic.key }];\n        // PUT '/issue/:id'\n        const observable = this.appHttp.put(config.environment.atlassian.api.base + 'issue/' + issue.id, data);\n        observable.subscribe(\n            () => {\n                this.log(\"Updated issue \", issue.key, \" with epic \", epic.name);\n                this.issues.retrive(issue.id);\n            },\n            (err) => { this.log(\"Failed to updated issue \", issue.key, \" with epic \", epic.name, \" (\", this.getErrorMessage(err), \")\") },\n\n        );\n        return observable;\n    }\n\n    public log(...args: any[]) {\n        console.log(\"log\", args);\n        this.logentries.push(args.join(''));\n    }\n\n    private getErrorMessage(data) {\n        let messages = data['errorMessages'] ? data['errorMessages'] : [data.toString()];\n        return messages.map(item => item).join('\\n');\n    }\n\n    public updateIssue(issue:IIssue, col) {\n        if (issue.fields) {\n\n            if (this.transition.type == config.corkboard.transitons.values.STATUS) {\n                if (col.transition) {\n                    issue.state.processing = CorkboardService.STATES.wait;\n                    const observable = this.updateStatus(issue, col.transition);\n                    observable.subscribe(\n                        data => {\n                            issue.state.processing = CorkboardService.STATES.success;\n                        },\n                        err => {\n                            issue.state.processing = CorkboardService.STATES.error;\n                            issue.state.processing.title = this.getErrorMessage(err);\n                            console.log(err);\n                        }\n                    );\n                    return observable;\n                }\n            } else if (this.transition.type == config.corkboard.transitons.values.POINTS) {\n                if (col.storypoints) {\n                    issue.state.processing = CorkboardService.STATES.wait;\n                    const observable = this.updateStoryPoints(issue, col.storypoints);\n                    observable.subscribe(\n                        data => {\n                            issue.state.processing = CorkboardService.STATES.success;\n                        },\n                        err => {\n                            issue.state.processing = CorkboardService.STATES.error;\n                            issue.state.processing.title = this.getErrorMessage(err);\n                            console.log(err);\n                        }\n                    );\n                    return observable;\n                }\n            } else if (this.transition.type == config.corkboard.transitons.values.EPIC) {\n                if (col.epic) {\n                    issue.state.processing = CorkboardService.STATES.wait;\n                    const observable = this.updateEpic(issue, col.epic);\n                    observable.subscribe(\n                        data => {\n                            issue.state.processing = CorkboardService.STATES.success;\n                        },\n                        err => {\n                            issue.state.processing = CorkboardService.STATES.error;\n                            issue.state.processing.title = this.getErrorMessage(err);\n                            console.log(err);\n                        }\n                    );\n                    return observable;\n                }\n            }\n        }\n    }\n\n    public applyChanges() {\n\n        let updates = Array();\n        this._columns.map((col: any) => {\n            col.issues.map(issue => {\n                updates.push(this.updateIssue(issue, col));\n            })\n        })\n\n        Observable.forkJoin(updates).subscribe(\n            () => { },\n            (err) => this.notificationService.createFromBackendError(err),\n            () => { }\n        );\n\n        var colSetting = {}\n        this._columns.map(col => {\n            colSetting[col.id] = {\n                transition: col.transition,\n                storypoints: col.storypoints,\n                epic: col.epic\n            }\n        });\n\n        this.storage.set(this.environment.storageKey(\"transition\"), this.transition);\n        this.storage.set(this.environment.storageKey(\"columns\"), colSetting);\n    }\n\n    updateKeylist() {\n        let usedKeys = [];\n        this._columns.map(col => {\n            col.issues.map(issue => usedKeys.push(issue.key))\n        });\n        let keylist = usedKeys.join(',')\n        this.usedKeysJql = ' key in (' + keylist + ')';\n    }\n\n    issueSearch(value) {\n        return this.issues.list({\n            // + '\" OR key ~ \"' + value  -  operation not supportet by key field\n            // '\" OR key = \"' + value + -  \"test 1\" NOT A VALID KEY\n            jql: '(summary ~ \"' + value +  '\") OR key >= \"' + value+ '\" ' + (this.usedKeysJql ? ' AND NOT ' + this.usedKeysJql : '') + ' ORDER BY key' ,\n            maxResults: 10,\n        });\n    }\n\n    addIssue(col, id) {\n        // TODO: issue can occure only once\n        this.issues.retrive(id).subscribe((issue) => {\n            col.issues.push(issue)\n            this.updateKeylist();\n        });\n    }\n\n    applyIssues(columns) {\n        if (!this._data) return;\n        let keys = this._data.keys;\n        var cols = [];\n\n        var colSetting = this.storage.get(this.environment.storageKey(\"columns\"));\n\n        columns.map((column, index) => {\n            var minX = column.x;\n            var maxX = column.x + column.width;\n            var setting = colSetting ? colSetting[index] : null;\n            var col = {\n                id: index,\n                issues: [],\n            };\n            if (setting) {\n                col['transition'] = setting.transition;\n                col['storypoints'] = setting.storypoints;\n                col['epic'] = setting.epic;\n            }\n            cols.push(col);\n            keys.map(key => {\n\n                if (key.minX >= minX && key.maxX <= maxX) {\n                    if (key.issue) {\n                        key.issue.processing = {};\n                    } else {\n                        key.issue = { key: key.key };\n                    }\n\n                    col.issues.push(key.issue);\n                }\n            });\n        });\n        this._columns = cols\n        this.updateKeylist();\n        this.columns.next(this._columns);\n        return cols;\n    }\n\n    private mergeIssuesWithBackendData() {\n        this.issues.data.keys = {};\n        var tu = {};\n        let data = this._data;\n        if (this.issues.data.list) {\n            var transitions = [];\n            this.issues.data.list.map((issue: IIssue) => {\n                this.issues.data.keys[issue.key] = issue;\n                var key = data.keys.find(item => item.key == issue.key);\n                if (key) { key.issue = issue; }\n                issue.transitions.map((transition: any) => {\n                    if (!tu[transition.id]) {\n                        tu[transition.id] = true;\n                        transitions.push(transition);\n                    }\n                })\n            })\n            data.transitions = transitions;\n            this.data.next(data);\n        }\n    }\n\n    detectIssues(image, regexpFromComponent) {\n        let _that = this;\n        let regexp = this.regex;\n        this.isprocessing = true;\n        this.getTextContent(image).subscribe(\n            (textAnnotations) => {\n                // get data from image\n                var t0 = performance.now();\n                let data = this.extractData(regexp, textAnnotations);\n                var t1 = performance.now();\n\n                // TEMP / this.log(\"ExtractData took \" + (t1 - t0) + \" milliseconds.\")\n                this._data = data;\n                // get issues from backend\n                if (data.keys.length == 0) {\n                    this.notificationService.create(\"No matches found.\")\n                } else {\n                    let keylist = data.keys.map(i => `\"${i.key}\"`).join(',');\n                    var params = { jql: 'key in (' + keylist + ')' };\n                    this.issues.list(params).subscribe((data) => {\n                        this.mergeIssuesWithBackendData();\n                    },\n                    (err) => {\n                        _that.notificationService.createFromBackendError(err);\n                        _that.isprocessing = false;\n                        \n                    });\n                }\n                this.isprocessing = false;\n            },\n            (err) => {\n                _that.notificationService.createFromBackendError(err);\n                _that.isprocessing = false;\n                \n            }\n        )\n    }\n\n    getTextContent(image): Observable<any> {\n\n        var content = this.imageToDataUrl(image);\n        var base64Img = content.replace(\"data:image/jpeg;base64,\", \"\")\n\n        return this.http.post(\n            EnvService.isAtlassianServer ? config.environment.bit.api.processImagePublic : config.environment.bit.api.processImage,\n            '{ \"requests\":[{\"image\":{\"content\":\"' + base64Img + '\"},\"features\":[{\"type\":\"TEXT_DETECTION\"}]}]}'\n        ).map(response => {\n            if (response.status == 200) {\n                let body = response.json();\n                var apiResponse = body.responses[0];\n                if (apiResponse.error) {\n                    return Observable.throw(apiResponse.error);\n                } else {\n                    return apiResponse.textAnnotations || {};\n                }\n            } else {\n                return Observable.throw(response.statusText);\n            }\n        }).catch(this.handleError);\n    }\n\n    private handleError(error: Response | any) {\n        let errMsg: string;\n        if (error instanceof Response) {\n            errMsg = `${error.status} - ${error.statusText || ''}`;\n        } else {\n            errMsg = error.message ? error.message : error.toString();\n        }\n        return Observable.throw(errMsg);\n    }\n\n    imageToDataUrl(image) {\n        var canvas = document.createElement(\"canvas\");\n        canvas.height = image.height;\n        canvas.width = image.width;\n        var context = canvas.getContext('2d');\n        context.drawImage(image, 0, 0);\n        return canvas.toDataURL('image/jpeg');\n    }\n\n    /*  TODO: outline vertices, do someting better */\n    combine(v1, v2) {\n        return v1.concat(v2);\n    }\n\n    extractData(regexp, textAnnotations): ICorkboardData {\n        let re = new RegExp(regexp);\n        var issues = new Object();\n        var keys = new Array();\n\n        var lastDesc = \"\";\n        var lastVertices = [];\n        var processedKeys = {};\n        for (var j = 0; j < textAnnotations.length; j++) {\n            var elem = textAnnotations[j];\n\n            if (elem.description !== undefined) {\n                // only alphanumeric\n                var desc = elem.description.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, '');\n                var key = desc;\n                if (key.length >= 1 && key.length <= 20) {\n                    if (!processedKeys[key]) {\n                        var keyMode = \"single word\"\n                        var vertices = elem.boundingPoly.vertices;\n                        var match = key.match(re);\n                        if (match == null) {\n                            key = lastDesc + desc;\n                            if (!processedKeys[key]) {\n                                match = key.match(re);\n                                if (match != null) {\n                                    keyMode = \"2gram\"\n                                    vertices = this.combine(vertices, lastVertices);\n                                }\n                            }\n                        }\n                        if (match == null) {\n                            key = desc + lastDesc;\n                            if (!processedKeys[key]) {\n                                match = key.match(re);\n                                if (match != null) {\n                                    keyMode = \"2gram reverse\"\n                                    vertices = this.combine(vertices, lastVertices);\n                                }\n                            }\n                        }\n                        processedKeys[key] = key;\n                        // generate bounding box\n                        if (match != null) {\n                            var minX = 99999,\n                                maxX = 0,\n                                minY = 99999,\n                                maxY = 0;\n                            for (var i = 1; i < vertices.length; i++) {\n                                var x = vertices[i].x;\n                                var y = vertices[i].y;\n                                if (x > maxX) maxX = x;\n                                if (x < minX) minX = x;\n                                if (y > maxY) maxY = y;\n                                if (y < minY) minY = y;\n                            }\n                            var boundingBox = [\n                                { x: minX, y: minY },\n                                { x: maxX, y: minY },\n                                { x: maxX, y: maxY },\n                                { x: minX, y: maxY },\n                            ];\n                            elem.minX = minX;\n                            elem.maxX = maxX;\n                            keys.push(\n                                {\n                                    key: key,\n                                    vertices: vertices,\n                                    boundingBox: boundingBox,\n                                    minX: minX,\n                                    maxX: maxX,\n                                })\n                        }\n                        lastDesc = desc;\n                        lastVertices = elem.boundingPoly.vertices;\n                    }\n                }\n            }\n\n        }\n        return {\n            columns: [],\n            issues: issues,\n            textAnnotations: textAnnotations,\n            keys: keys,\n            epics: this.epics,\n            transitions: [],\n            projects: []\n        };\n    }\n}","export * from './utils/modal.component';\nexport * from './utils/form-typeahead.component';\n\nexport * from './header.component';\nexport * from './notification-list.component';\nexport * from './notification.component';\n\nexport * from './license.component';\n\nexport * from './corkboard.component';\nexport * from './corkboard-upload.component';\nexport * from './corkboard-column-choose.component';\nexport * from './corkboard-issue-assign.component';\nexport * from './corkboard-print-issues.component';\nexport * from './corkboard-choose-issue.component';\nexport * from './col-dragger.component'\n","import 'core-js/es6';\nimport 'core-js/es7/reflect';\nimport 'zone.js/dist/zone';\n\nif (process.env.ENV == 'production') {\n  // pass\n} else {\n  Error.stackTraceLimit = Infinity;\n  require('zone.js/dist/long-stack-trace-zone');\n}\n\n// js \n// import 'jquery';\nimport '@angular/core';\nimport '@angular/common';\nimport '@angular/platform-browser';\nimport '@angular/platform-browser-dynamic';\nimport '@angular/router';\nimport '@angular/http';\nimport '@angular/forms';\n\nimport { Observable } from 'rxjs/Observable';\nimport { ReplaySubject } from 'rxjs/ReplaySubject';\nimport 'rxjs/add/observable/throw';\nimport 'rxjs/add/observable/combineLatest';\nimport 'rxjs/add/operator/catch';\nimport 'rxjs/add/operator/filter';\nimport 'rxjs/add/operator/startWith';\nimport 'rxjs/add/operator/take';\nimport 'rxjs/add/operator/map';\nimport 'rxjs/add/operator/mergeMap';\nimport 'rxjs/add/operator/debounceTime';\nimport 'rxjs/add/operator/first';\n// reserved / import 'rxjs/add/operator/toPromise';\n\nimport 'bootstrap/dist/js/bootstrap';\nimport 'ng2-dnd';\n\n// css (for webpack only)\n// RESERVED / import '@atlassian/aui/dist/aui/css/aui.min.css';\nimport './assets/fontello/css/fontello.css';\nimport './assets/fontello/css/animation.css';\nimport './assets/scss/index.scss'; // customized bootstrap\n\n// css (for webpack only)\nimport './assets/css/app.css';\n\n// js\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { AppModule } from './app/app.module';\nimport { EnvService } from './app/services';\n\nif (process.env.MOCK) { // see \"--env.mock\" cli option\n  require('lokijs'); // to put in vendor bundle only\n}\n\n// experimental\nif (EnvService.isMicrosoft) {\n  window.onload = () => {\n    window['VSS'].init({\n      // usePlatformScripts: true,\n      // usePlatformStyles: true\n    });\n\n    window['VSS'].ready(() => {\n      platformBrowserDynamic().bootstrapModule(AppModule);\n    });\n  };\n}\n\nif (EnvService.isAtlassian) {\n  window.onload = () => {\n    platformBrowserDynamic().bootstrapModule(AppModule);\n  };\n}\n","const config = {\n\n  environment: {\n    atlassian: {\n      api: {\n        base: '/rest/api/2/', // temporal / merge with \"environment service\"\n        agile: '/rest/agile/1.0/', // temporal / merge with \"environment service\"\n        // OBSOLETED / tokenLabel: 'Authorization', // for mock backend only\n        // OBSOLETED / tokenValue: 'Bearer !@#$%^&*()123456789c', // for mock backend only\n        contentType: 'application/json; charset=UTF-8',\n      },\n      dialog: 'left=5,top=5,width=840,height=640,scrollbars=1,toolbar=1,resizable=0',\n    },\n    microsoft: {\n      api: {\n        base: '/rest/api/2/', // temporal / merge with \"environment service\"\n        agile: '/rest/agile/1.0/', // temporal / merge with \"environment service\"\n        // OBSOLETED / tokenLabel: 'Authorization', // for mock backend only\n        // OBSOLETED / tokenValue: 'Bearer !@#$%^&*()123456789c', // for mock backend only\n        contentType: 'application/json; charset=UTF-8',\n      },\n    },\n    bit: {\n      api: {\n        processImagePublic: '//bit-corkboard.bauer-information-technology.com/api/processimage', // temporal / merge with \"environment service\"\n        processImage: '/api/processimage', // temporal / merge with \"environment service\"\n        contentType: 'application/json; charset=UTF-8',\n      },\n    },\n  },\n\n  storage: {\n    preferences: 'preferences',\n  },\n\n  debounce: {\n    interval: 500, // milliseconds;\n  },\n\n  pdf: {\n    filename: 'Bauer-Corkboard.pdf',\n  },\n\n  notification: { // inspired by http://tamerayd.in/ngToast/\n    interval: 3000, // refresh interval in milliseconds\n    level: {\n      values: {\n        HINT: 'hint',\n        SUCCESS: 'success',\n        WARNING: 'warning',\n        ERROR: 'error',\n        // GENERIC: 'generic',\n        // INFO: 'info', // aka 'default'\n      },\n    },\n    type: {\n      values: { // could be used directly as string values\n        DEFAULT: 'DEFAULT',\n        ERROR: 'ERROR',\n        WARNING: 'WARNING',\n        TABLE_IMPORT: 'TABLE_IMPORT',\n        FLOW_PLAY: 'FLOW_PLAY',\n        FLOWSTEP_PLAY: 'FLOWSTEP_PLAY',\n      },\n    },\n    defaults: { // default per-item options\n      dismissOnTimeout: true,\n      timeout: 70000, // milliseconds\n      dismissButton: false,\n      dismissOnClick: true,\n      onDismiss: null,\n      //combineDuplications: false,\n    }\n  },\n\n  dnd: { // dnd zones\n    MAP_GRID_LANE: 'map-grid-lane',\n    MAP_GRID_COLUMN: 'map-grid-column',\n  },\n\n  map: {\n    group: {\n      values: {\n        PROJECT: 'PROJECT',\n        EPIC: 'EPIC',\n        SPRINT: 'SPRINT',\n        POINTS: 'POINTS',\n        VERSION_AFFECTED: 'VERSION_AFFECTED',\n        VERSION_FIXED: 'VERSION_FIXED',\n        COMPONENT: 'COMPONENT',\n        STATUS: 'STATUS',\n        PRIORITY: 'PRIORITY',\n        TYPE: 'TYPE',\n        ASSIGNEE: 'ASSIGNEE',\n        REPORTER: 'REPORTER',\n        DUPLICATES: 'DUPLICATES',\n        DUPLICATED: 'DUPLICATED',\n        BLOCKS: 'BLOCKS',\n        BLOCKED: 'BLOCKED',\n      },\n      labels: {\n        PROJECT: 'Project',\n        EPIC: 'Epic link',\n        SPRINT: 'Sprint',\n        POINTS: 'Story points',\n        VERSION_AFFECTED: 'Affects version/s',\n        VERSION_FIXED: 'Fix version/s',\n        COMPONENT: 'Component/s',\n        STATUS: 'Status',\n        PRIORITY: 'Priority',\n        TYPE: 'Issue type',\n        ASSIGNEE: 'Assignee',\n        REPORTER: 'Reporter',\n        DUPLICATES: 'Duplicates (out)',\n        DUPLICATED: 'Is duplicated by (in)',\n        BLOCKS: 'Blocks (out)',\n        BLOCKED: 'Is blocked by (in)',\n      },\n      list: [\n        'PROJECT', 'EPIC', 'SPRINT', 'POINTS',\n        'VERSION_AFFECTED', 'VERSION_FIXED', 'COMPONENT',\n        'STATUS', 'PRIORITY', 'TYPE', 'ASSIGNEE', 'REPORTER',\n        'DUPLICATES', 'DUPLICATED', 'BLOCKS', 'BLOCKED',\n      ],\n      tree: [\n        {\n          name: 'Issue fields',\n          list: [\n            'PROJECT', 'EPIC', 'SPRINT', 'POINTS',\n            'VERSION_AFFECTED', 'VERSION_FIXED', 'COMPONENT',\n            'STATUS', 'PRIORITY', 'TYPE', 'ASSIGNEE', 'REPORTER',\n          ]\n        },\n        {\n          name: 'Linked issues',\n          list: [\n            'DUPLICATES', 'DUPLICATED', 'BLOCKS', 'BLOCKED',\n          ]\n        },\n      ],\n      extras: { // experimental\n        NEW: '_n_e_w_',\n        OTHERS: '_o_t_h_e_r_s_',\n      }\n    },\n    lane: {\n      // @TODO: to do\n    },\n  },\n\n  corkboard : {\n    transitons: {\n       values: {\n        EPIC: 'EPIC',\n        POINTS: 'POINTS',\n        STATUS: 'STATUS',\n      },\n      labels: {\n        EPIC: 'Epic',\n        POINTS: 'Story Points',\n        STATUS: 'Status',\n      },\n      list: [\n        'STATUS', 'POINTS', 'EPIC'\n      ]\n    }\n  },\n\n  project: {\n  },\n\n  issue: {\n    type: { // defined by Jira\n      values: {\n        EPIC: 'Epic',\n        STORY: 'Story',\n      }\n    },\n    fields: [\n      'id', 'watches', 'versions', 'summary', 'subtasks', 'status', 'resolution', 'reporter',\n      'project', 'progress', 'priority', 'issuetype', 'issuelinks', 'fixVersions', 'components', 'assignee',\n      // Sprint\n      // Story points\n      // Rank\n      // Epic link\n    ]\n  },\n};\n\nexport default config;\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n            import content from \"!!../../../node_modules/css-loader/index.js!../../../node_modules/sass-loader/dist/cjs.js!./index.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// extracted by mini-css-extract-plugin\nexport {};","import { APP_BASE_HREF } from '@angular/common';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BaseRequestOptions, HttpModule } from '@angular/http';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { enableProdMode, NgModule } from '@angular/core';\n\nimport { DndModule } from 'ng2-dnd';\n\nimport { routing, APP_ROUTER_PROVIDERS } from './app.routes';\nimport { GenericResolver, BoardResolver } from './app.resolvers';\n\nimport {\n  Storage,\n  AppHttp,\n  NotificationService,\n  EnvService,\n  Upload\n} from './services';\n\nimport {\n  ModalComponent,\n  FormTypeaheadComponent,\n\n  HeaderComponent,\n  NotificationComponent,\n  NotificationListComponent,\n\n  LicenseComponent,\n\n  ColDraggerComponent,\n  CorkboardComponent,\n  CorkboardUploadComponent,\n  CorkboardColumnChooseComponent,\n  CorkboardIssueAssignComponent,\n  CorkboardPrintIssuesComponent,\n  CorkboardChooseIssueComponent\n} from './components';\n\nimport {\n  DropdownDirective,\n  DraggableDirective,\n  FormControlValidator,\n} from './directives';\n\nimport {\n  SafePipe,\n  PluralizePipe,\n  TruncatePipe,\n  IfEmptyPipe\n} from './pipes';\n\nlet BackendService: any;\nlet Backend: any;\nlet AppComponent: any;\n\nif (process.env.MOCK) { // see \"--env.mock\" cli option\n  // NOT IN USE\n  // RESERVED / BackendService = require('./services/backend.service').BackendService;\n  // RESERVED / Backend = require('@angular/http/testing').MockBackend;\n  // RESERVED / AppComponent = require('./app-mock.component').AppMockComponent;\n\n} else {\n  Backend = EnvService.isAtlassian ?\n    require('./utils/atlassian_backend').AtlassianBackend : // require('@angular/http').XHRBackend;\n    require('./utils/microsoft_backend').MicrosoftBackend; // require('@angular/http').XHRBackend;\n\n  AppComponent = require('./app.component').AppComponent;\n}\n\nprocess.env.ENV == 'production' && enableProdMode();\n\n\n@NgModule({\n  imports: [\n    DndModule.forRoot(),\n    BrowserModule,\n    HttpModule,\n    FormsModule,\n    ReactiveFormsModule,\n    routing\n  ],\n  providers: [\n    ...[\n      BaseRequestOptions,\n      Storage,\n      NotificationService,\n      EnvService,\n      Upload,\n      APP_ROUTER_PROVIDERS,\n      {\n        provide: APP_BASE_HREF,\n        useValue: document.location.pathname.substring(0, document.location.pathname.lastIndexOf('/bit') + '/bit'.length) || '/'\n        /* useValue: '.' */\n      },\n      {\n        provide: Backend,\n        useClass: Backend\n      },\n      {\n        provide: AppHttp,\n        deps: [Backend, BaseRequestOptions, Storage],\n        useFactory: (Backend, defaultOptions, storage) => new AppHttp(Backend, defaultOptions, storage),\n      },\n      {\n        provide: GenericResolver,\n        deps: [EnvService],\n        useFactory: (EnvService) => new GenericResolver(EnvService),\n      },\n      {\n        provide: BoardResolver,\n        deps: [EnvService],\n        useFactory: (EnvService) => new BoardResolver(EnvService),\n      },\n    ].concat(process.env.MOCK ? [\n      {\n        provide: BackendService,\n        deps: [Backend],\n        useFactory: Backend => new BackendService(Backend),\n      }\n    ] : []),\n  ],\n  declarations: [\n    AppComponent,\n    ModalComponent,\n    FormTypeaheadComponent,\n\n    HeaderComponent,\n    NotificationComponent,\n    NotificationListComponent,\n\n    LicenseComponent,\n\n    ColDraggerComponent,\n    CorkboardComponent,\n    CorkboardUploadComponent,\n    CorkboardColumnChooseComponent,\n    CorkboardIssueAssignComponent,\n    CorkboardPrintIssuesComponent,\n    CorkboardChooseIssueComponent,\n    // Pipes\n    SafePipe,\n    PluralizePipe,\n    TruncatePipe,\n    IfEmptyPipe,\n    // Directives\n    DropdownDirective,\n    DraggableDirective,\n    FormControlValidator,\n  ],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {}\n","import { Routes, RouterModule } from '@angular/router';\n\nimport {\n  EnvironmentProvider,\n  IsLicensedProvider,\n  BoardResolver,\n} from './app.resolvers';\n\nimport {\n  CorkboardComponent,\n  LicenseComponent\n} from './components/index';\n\nexport const appRoutes: Routes = [\n  {\n    path: '',\n    canActivate: [EnvironmentProvider],\n    children: [\n      {path: 'corkboard', component: CorkboardComponent, canActivate: [IsLicensedProvider], resolve: {board: BoardResolver}},\n      {path: 'corkboard/index', component: CorkboardComponent, canActivate: [IsLicensedProvider], resolve: {board: BoardResolver}},\n      {path: 'license', component: LicenseComponent},\n    ]\n  },\n  {\n    path: 'jira/plugins/servlet',\n    canActivate: [EnvironmentProvider],\n    children: [\n      {path: 'corkboard', component: CorkboardComponent, canActivate: [IsLicensedProvider], resolve: {board: BoardResolver}},\n      {path: 'license', component: LicenseComponent},\n    ]\n  },\n\n];\n\nexport const APP_ROUTER_PROVIDERS = [\n  EnvironmentProvider, IsLicensedProvider,\n];\n\nexport const routing = RouterModule.forRoot(appRoutes);\n","import { Injectable } from '@angular/core';\nimport { Http, Request, Response, Headers, URLSearchParams } from '@angular/http';\nimport { ConnectionBackend, RequestOptions, RequestOptionsArgs } from '@angular/http';\nimport { Observable } from 'rxjs/Observable';\nimport { Observer } from 'rxjs/Observer';\nimport { Subject } from 'rxjs/Subject';\n\nimport config from '../config';\nimport {\n  Storage,\n} from './index';\n\n@Injectable()\nexport class AppHttp extends Http {\n\n  constructor(\n    protected _backend: ConnectionBackend,\n    protected _defaultOptions: RequestOptions,\n    private storage: Storage\n  ) {\n    super(_backend, _defaultOptions);\n  }\n\n  private _headers(options?: RequestOptionsArgs) {\n    options = options || {};\n    options['headers'] = options.headers || new Headers();\n\n    // set content type and etc\n    options.headers.append('Content-Type', config.environment.atlassian.api.contentType);\n\n    return options;\n  }\n\n  // wrap and serialize request\n  private _serialize(value: any): string {\n    return JSON.stringify(value);\n  }\n\n  // obsoleted\n  // unwrap and deserialize response\n  // private _deserialize(res: Observable<Response>): any {\n  // }\n\n  // encode search (url) params\n  private _encode(params?: any): URLSearchParams {\n    if (params instanceof URLSearchParams) return params;\n\n    let searchParams = new URLSearchParams();\n    Object.keys(params).forEach(key => params[key] !== null && searchParams.set(key, params[key]));\n\n    return searchParams;\n  }\n\n  get(url: string, params?: any, options?: RequestOptionsArgs): Observable<any> {\n    options = this._headers(options);\n    params && (options.search = this._encode(params));\n\n    let res = this._request(super.get.bind(this, url, options));\n    return res; // obsoleted / .share(); // share: to make consecutive observers calls\n  }\n\n  post(url: string, body: any, params?: any, options?: RequestOptionsArgs): Observable<any> {\n    options = this._headers(options);\n    body = this._serialize(body);\n    params && (options.search = this._encode(params));\n\n    let res = this._request(super.post.bind(this, url, body, options));\n    return res; // obsoleted / .share(); // share: to make consecutive observers calls\n  }\n\n  put(url: string, body: any, params?: any, options?: RequestOptionsArgs): Observable<any> {\n    options = this._headers(options);\n    body = this._serialize(body);\n    params && (options.search = this._encode(params));\n\n    let res = this._request(super.put.bind(this, url, body, options));\n    return res; // obsoleted / .share(); // share: to make consecutive observers calls\n  }\n\n  patch(url: string, body: any, params?: any, options?: RequestOptionsArgs): Observable<any> {\n    options = this._headers(options);\n    body = this._serialize(body);\n    params && (options.search = this._encode(params));\n\n    let res = this._request(super.patch.bind(this, url, body, options));\n    return res; // obsoleted / .share(); // share: to make consecutive observers calls\n  }\n\n  delete(url: string, params?: any, options?: RequestOptionsArgs): Observable<any> {\n    options = this._headers(options);\n    params && (options.search = this._encode(params));\n\n    let res = this._request(super.delete.bind(this, url, options));\n    return res; // obsoleted / .share(); // share: to make consecutive observers calls\n  }\n\n  // experimental\n  // add extra async level to please Microsoft VisualStudio platform\n  _request(callback): Observable<any> {\n    const resolveConnection = this._backend['resolveConnection'];\n    const subject = new Subject();\n    const _callback = (observer: Observer<Response>) => {\n      callback().subscribe(\n        res => {\n          let data = !!res.text() ? res.json() : {};\n          observer.next(data);\n        },\n        err => {\n          // server errors\n          // todo: refactor later. looks like obsoleted \n          if (err.stack) { return observer.error(err); } // exception from http api\n\n          if (err.status >= 500 && err.status < 600) {\n            let data = err.json() || 'Server error (${error.status})';\n            return observer.error(data);\n          }\n\n          // client errors\n          if (err.status >= 400 && err.status < 500) {\n            return observer.error(err.message);\n          }\n\n          return observer.error(err.message);\n        },\n        () => observer.complete()\n      );\n    }\n\n    if (resolveConnection) {\n      resolveConnection.call(this._backend).then(_callback.bind(this, subject));\n    } else {\n      _callback(subject);\n    }\n\n    return subject;\n  }\n\n}\n","// TODO: supposed to be replaced with any stable angular/es6 storage lib\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class Storage {\n\n  // TODO: try to add caching\n\n  get(key: string): any {\n    const value = localStorage.getItem(key);\n\n    try {\n      return value == undefined ? undefined : JSON.parse(value);\n    } catch (err) {\n      return value; // err.name == 'SyntaxError' // err instanceof SyntaxError\n    }\n  }\n\n  set(key: string, value: any): void {\n    localStorage.setItem(key, JSON.stringify(value));\n  }\n\n  remove(key: string): void {\n    localStorage.removeItem(key);\n  }\n\n  clear(): void {\n    localStorage.clear();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Http, URLSearchParams } from '@angular/http';\nimport { TObjectId } from '../interfaces/common.interface';\nimport { TBoardId } from '../interfaces/board.interface';\nimport { TIssueId } from '../interfaces/issue.interface';\n\nimport config from '../config';\nimport {\n  Storage,\n  AppHttp,\n} from './index';\n\n@Injectable()\nexport class EnvService {\n\n  production: boolean;\n  new: boolean; // is the first app load\n\n  environment: string;\n  license: boolean;\n  product: string;\n  user: string;\n\n  uuid: string;\n\n  // client: string;\n  //referer: string;\n\n  protected _options: any = {\n    atlassian: {},\n    microsoft: {},\n  };\n\n  protected _settings: any = {\n    update: true, // live update (via webhooks, etc)\n  };\n\n  protected _data: any = {\n  };\n\n  public options = this._options;\n  public settings = this._settings;\n  public data = this._data;\n\n  // Atlassian specific APIs\n  public AP: any;\n  public JIRA: any;\n\n  // Microsoft VisialStudio specific APIs\n  public VSS: any;\n\n  constructor(\n    private storage: Storage,\n    protected httpGlobal: Http,\n    protected http: AppHttp) {\n    // temporal\n    //this.environment = EnvService.isAtlassian ? 'ATLASSIAN_CLOUD' : 'MICROSOFT';\n    this.environment =\n      EnvService.isAtlassianCloud ? 'ATLASSIAN_CLOUD' :\n      EnvService.isAtlassianServer ? 'ATLASSIAN_SERVER' :\n      undefined;\n\n    if (this.isAtlassian) {\n      if (!window['AP']) {\n        throw new Error('Atlassian API is not detected');\n      }\n\n      this.AP = window['AP'];\n\n      this.AP.require('jira', jira => {\n        this.JIRA = jira;\n      });\n    }\n\n    if (this.isMicrosoft) {\n      this.VSS = window['VSS'];\n    }\n  }\n\n  // experimental\n  resolve(params: Object) {\n    // app: ...,\n    // base: ...,\n    // title: ...,\n\n    this.production = document.cookie.includes('env=production');\n    this.new = !!this.getPreferences('new');\n\n    this.user = params['user_id'] || this.user;\n    this.license = params['lic'] == 'active';\n    this.product = params['xdm_c'] || this.product;\n    this.uuid = this.product + \"_\" + this.user;\n    //this.client = params['xdm_c'] || this.client;\n\n    if (this.environment == 'ATLASSIAN_CLOUD' || this.environment == 'ATLASSIAN_SERVER') {\n      this._options.atlassian['key'] = params['xdm_deprecated_addon_key_do_not_use'] || this._options.atlassian['xdm_deprecated_addon_key_do_not_use'];\n      this._options.atlassian['version'] = params['cv'] || this._options.atlassian['version']; // TODO: check the param name\n      this._options.atlassian['baseUrl'] = params['xdm_e'] || this._options.atlassian['baseUrl'] || '//localhost';\n      this._options.atlassian['board'] = params['board'] || this._options.atlassian['board'];\n      this._options.atlassian['jwt'] = params['jwt'] || this._options.atlassian['jwt'];\n      // this.client = params['xdm_c'] || this.client;\n    }\n    if(this.environment == 'ATLASSIAN_SERVER')\n\n    this.getSettings();\n    this.setPreferences('new', true);\n  }\n\n  get isAtlassian() {\n    return this.environment == 'ATLASSIAN_CLOUD' || this.environment == 'ATLASSIAN_SERVER';\n  }\n  \n  static get isAtlassianCloud() {\n    return !(window['AP'] || {}).server;\n  }\n\n  static get isAtlassianServer() {\n    return !!(window['AP'] || {}).server;\n  }\n\n  storageKey(key: string) {\n    return this.uuid + '_' + key;\n  }\n\n  get isAtlassianCloud() {\n    return this.environment == 'ATLASSIAN_CLOUD';\n  }\n\n  get isAtlassianServer() {\n    return this.environment == 'ATLASSIAN_SERVER';\n  }\n\n  get isMicrosoft() {\n    return this.environment == 'MICROSOFT';\n  }\n\n  static get isAtlassian() {\n    return !window.location.search.includes('microsoft'); // temporal / set proper param\n  }\n\n  static get isMicrosoft() {\n    return window.location.search.includes('microsoft');\n  }\n\n  // experimental\n  url(path: string): string {\n    let url = path;\n    url = this._options.atlassian.baseUrl + url;\n\n    return url;\n  }\n\n  // experimental\n  urlIssue(key: TIssueId): string {\n    return this.url('/browse/' + key);\n  }\n\n  urlBoard(id: TBoardId): string {\n    return this.url('/projects/AS?board=' + id + '&selectedItem=com.bit.story-map__ausm-provided-link-to-panel');\n  }\n\n  // RESERVED\n  // urlIssueEdit(id: string): string {\n  //   let url = path;\n  //   url = this._options.atlassian.baseUrl + 'secure/EditIssue!default.jspa?key=' + id; // id or key\n  //   return url;\n  // }\n\n  getFieldByName(name: string) {\n    // TEMP / console.log(\"field id for name:\", name);\n    return (this._data.fields || []).find(item => (item.clauseNames || []).indexOf(name) > -1); // don't rely on \"name\" prop, it's localizatoion dependent\n  }\n  getFieldById(id: string) {\n    return (this._data.fields || []).find(item => (item.id == id || (item.schema && item.schema.customId == id) || (item.schema && item.schema.custom == id))); // don't rely on \"name\" prop, it's localizatoion dependent\n  }\n\n  getIssueLinkByName(name: string) {\n    return (this._data.issueLinkTypes || []).find(item => item.name == name);\n  }\n\n  setPreferences(key, value): void {\n    let preferences = this.storage.get(config.storage.preferences) || {};\n    preferences[key] = value;\n\n    this.storage.set(config.storage.preferences, preferences);\n  }\n\n  getPreferences(key): any {\n    let preferences = this.storage.get(config.storage.preferences) || {};\n    return preferences[key];\n  }\n\n  setBoardPreferences(key, value): void {\n    let board = this._data.board;\n    board && this.setPreferences(key + '_' + board.id, value);\n  }\n\n  getBoardPreferences(key): any {\n    let board = this._data.board;\n    return board && this.getPreferences(key + '_' + board.id);\n  }\n\n  retriveBoards(): any {\n    // GET '$apiAgile/board'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.boards = data.values;\n      }\n    );\n\n    return observable;\n  }\n\n  retriveBoard(id?: TBoardId): any {\n    id = id || this.options.atlassian.board;\n\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board/' + id + '/configuration');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.board = data || {};\n      }\n    );\n\n    return observable;\n\n  }\n\n  retriveFilter(id?: TObjectId): any {\n    id = id || this.options.atlassian.board.filter['id'];\n\n    // GET '/filter'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'filter/' + id);\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.filter = data || {};\n      }\n    );\n\n    return observable;\n  }\n\n  retriveSprints(id?: TBoardId): any {\n    id = id || this.options.atlassian.board;\n\n    // GET '/board/:id/sprint'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board/' + id + '/sprint');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.sprints = data.values || [];\n      }\n    );\n\n    return observable;\n  }\n\n  retriveEpics(boardid): any {\n    // GET '$apiAgile/board'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.epics = data.values || [];\n      }\n    );\n\n    return observable;\n  }\n\n  setDefaultFilter() {\n    this._data.filter = { jql: '' };\n  }\n\n  retriveVersions(id?: TBoardId): any {\n    id = id || this.options.atlassian.board;\n\n    // GET '/board/:id/version'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board/' + id + '/version');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.versions = data.values || [];\n      }\n    );\n\n    return observable;\n  }\n\n  retriveProjects(): any {\n    // GET '/projects'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'projects');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.projects = data || [];\n      }\n    );\n\n    return observable;\n  }\n\n  retriveComponents(id: TObjectId): any {\n    // GET '/project/:id/components'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'project/' + id + '/components');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.components = data || [];\n      }\n    );\n\n    return observable;\n  }\n\n  retriveFields(): any {\n    // GET '/field'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'field');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.fields = data || [];\n        // TEMP / console.log(\"Board: \", this._data.board);\n        // TEMP / console.log(\"Fields: \", this._data.fields);\n\n        const estimation = this.getFieldById(this._data.board?.estimation?.field?.fieldId);\n        estimation && estimation.clauseNames.push(\"Story Points\");\n\n        const rank = this.getFieldById(this._data.board.ranking.rankCustomFieldId);\n        rank && rank.clauseNames.push(\"Rank\");\n\n        const epiclink = this.getFieldById(\"com.pyxis.greenhopper.jira:gh-epic-link\");\n        epiclink && epiclink.clauseNames.push(\"Epic Link\");\n\n        const sprint = this.getFieldById(\"com.pyxis.greenhopper.jira:gh-sprint\");\n        sprint && sprint.clauseNames.push(\"Sprint\");\n\n        // TODO: Proper error handling if fields are missing\n        // TEMP / console.log(\"Fields with sugar: \", this._data.fields);\n      }\n    );\n\n    return observable;\n  }\n\n  retriveIssueTypes(): any {\n    // GET '/issuetype'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'issuetype');\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.issueTypes = data || [];\n      }\n    );\n\n    return observable;\n  }\n\n  retriveIssueLinkTypes(): any {\n    // GET '/issueLinkType'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'issueLinkType'); // yeah, camelcase\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.issueLinkTypes = data['issueLinkTypes'] || []; // atlassian, why he hell is it nested? \n      }\n    );\n\n    return observable;\n  }\n\n  retrivePriorities(): any {\n    // GET '/issueLinkType'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'priority'); // yeah, camelcase\n\n    observable.subscribe(\n      (data: any) => {\n        this._data.priorities = data || [];\n      }\n    );\n\n    return observable;\n  }\n\n  // OBSOLETED\n  // retriveStatuses(): any {\n  //   // GET '/status'\n  //   const observable = this.http.get('status');\n\n  //   observable.subscribe(\n  //     (data: any) => {\n  //       this._data.status = data;\n  //     }\n  //   );\n\n  //   return observable;\n  // }\n\n  getSettings(): any {\n    let key = 'settings:' + this.environment;\n    this._settings = Object.assign(this._settings, this.getPreferences(key));\n    return this._settings;\n  }\n\n  setSettings(data: any) {\n    let key = 'settings:' + this.environment;\n    this._settings = Object.assign(this._settings, data);\n    this.setPreferences(key, this._settings);\n  }\n\n  // experimental\n  getBackup(): any {\n    let params = new URLSearchParams();\n    params.set('jwt', this._options.atlassian['jwt']);\n    params.set('baseUrl', this._options.atlassian['baseUrl']);\n\n    // GET '/backup'\n    const observable = this.httpGlobal\n      .get('/backup', { search: params })\n      .map(res => res.json());\n\n    observable.subscribe(\n      (data: any) => {\n        data.maps = Object.keys(data.maps).map(prop => data.maps[prop]);\n        this._data.backup = data;\n      }\n    );\n\n    return observable;\n  }\n\n  // experimental\n  setBackup(): any {\n    // pass\n  }\n}\n","import { io } from 'socket.io-client';\n\nimport { NgZone } from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport {\n  EnvService,\n} from './index';\n\n@Injectable()\nexport class AppSocket {\n\n  private _socket: any;\n\n  constructor(\n    private _ngZone: NgZone,\n    protected envService: EnvService,\n  ) {\n     this.init();\n  }\n\n  init(projects?: string) {\n    if (this.envService.isAtlassian) {\n      this._socket = this.envService.isAtlassianServer ? new window['AP'].SocketService(projects) : io({\n        transports: ['websocket'],\n      });\n    }\n\n    this._socket && this._socket.on('connect', () => {\n      let roomKey = this.envService.options['client']; // aka \"Set\" in socket.io v3\n      this._socket.emit('room', roomKey);\n\n      // OBSOLETED\n      // let baseUrl = this.envService.options.atlassian['baseUrl'];\n      // this._socket.emit('room', baseUrl);\n    });\n  }\n\n  // RESERVED\n  // updateProjectKeys(projectKeys) {\n  //   if (this.envService.isAtlassianServer) {\n  //      this._socket.setProjectKeys(projectKeys);\n  //   }\n  // }\n\n  on(eventName: string, projects?: string): Observable<any> {\n    if (!this._socket) { this.init(projects); }\n\n    return Observable.create(observer => {\n      this._socket ? this._socket.on(eventName, (data: any) => {\n        this._ngZone.run(() => {\n          data.webhook = true;\n          observer.next(data);\n        });\n      }) : observer.complete();\n    });\n  }\n\n  emit(eventName: string, data: any) {\n    this._socket && this._socket.emit(eventName, data);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup, FormArray, AbstractControl } from '@angular/forms';\nimport { ReplaySubject } from 'rxjs/ReplaySubject';\n\nimport { IEvent } from '../interfaces/event.interface';\n\nimport config from '../config';\n//import {} from './index';\n\n@Injectable()\nexport class DataService {\n\n  // TODO: naming\n  protected _type = null; // should be assigned in child services\n\n  protected _params: any = {\n    startAt: 0,\n    maxResults: 1000, // @TODO: how about 'null'?\n  };\n\n  protected _data: any = {\n    list: null,\n    view: null,\n    edit: null,\n  };\n\n  protected _observables: any = {\n    list: null,\n    view: null,\n    edit: null,\n  };\n\n  public data = this._data;\n  public observables = this._observables;\n\n  constructor() {\n    // init observers\n    ['list', 'view', 'edit'].forEach(prop => {\n      let observable = new ReplaySubject(1); // buffer last value\n      this._observables[prop] = observable;\n    });\n  }\n\n  assign(item: Object, data: Object = {}): Object {\n    Object.keys(item).forEach(key => !data[key] && (delete item[key]));\n    Object.keys(data).forEach(key => item[key] = data[key]);\n    return item;\n  }\n\n  view(item?: Object): void {\n    const data = item ? jQuery.extend(true, {}, item) : null;\n\n    this._data.view = data;\n    this._observables.view.next(data);\n  }\n\n  edit(item?: Object): void {\n    item = item || this._data.view || {};\n    const data = item ? jQuery.extend(true, {}, item) : null;\n\n    this._data.edit = data;\n    this._observables.edit.next(data);\n  }\n\n  editForm(form: FormGroup, item?: Object): void {\n    item = item || this._data.view || {};\n    const data = jQuery.extend(true, {}, item);\n\n    this._editForm(form, data);\n\n    this._data.edit = data;\n    this._observables.edit.next(data);\n  }\n\n  // experimental\n  reset() {\n    Object.keys(this._data).forEach(prop => { delete this._data[prop]; });\n  }\n\n  private _refresh(event: IEvent): void {\n    if (!event.data.target || event.data.target != this._type) { return; }\n\n    // update list\n    let list = (this._data.list || []).map(item => item.id);\n    list.length && list.indexOf(event.data.id) > -1 && this['list'] && this['list']();\n\n    // update view\n    this._data.view && this._data.view.id == event.data.id && this['get'] && this['get'](event.data.id);\n\n    // update edit\n    //this._data.edit && this._data.edit.id == event.data.id && this['get'] && this['get'](event.data.id);\n  }\n\n  private _cloneForm(abstractControl: AbstractControl): AbstractControl {\n    // experimental and weird\n    // supposed to be used to clone ControlArray elements\n    let control: FormControl | FormGroup | FormArray;\n\n    // ControlGroup\n    if (abstractControl instanceof FormGroup) {\n      let props = Object.keys(abstractControl.controls);\n      control = <FormGroup> new FormGroup({}, abstractControl.validator, abstractControl.asyncValidator);\n\n      for (let i = 0; i < props.length; ++i) {\n        let abstractControlItem = abstractControl.controls[props[i]];\n        control.addControl(props[i], this._cloneForm(abstractControlItem));\n      }\n    }\n\n    // ControlArray\n    if (abstractControl instanceof FormArray) {\n      let length = abstractControl.controls.length;\n      control = <FormArray> new FormArray([], abstractControl.validator, abstractControl.asyncValidator);\n\n      for (let i = 0; i < length; ++i) {\n        let abstractControlItem = abstractControl.controls[i];\n        control.push(this._cloneForm(abstractControlItem));\n      }\n    }\n\n    // Control\n    if (abstractControl instanceof FormControl) {\n      // how to set default values? :/\n      control = new FormControl(null, abstractControl.validator, abstractControl.asyncValidator);\n    }\n\n    return control;\n  }\n\n  private _editForm(abstractControl: AbstractControl, data: any): void {\n    // set initial values for form controls (recursively)\n    if (data === undefined) { return; }\n\n    // ControlGroup\n    if (abstractControl instanceof FormGroup) {\n\n      data = data || {};\n      let props = Object.keys(abstractControl.controls);\n\n      for (let i = 0; i < props.length; ++i) {\n        let abstractControlItem = abstractControl.controls[props[i]];\n        this._editForm(abstractControlItem, data[props[i]]);\n      }\n    }\n\n    // ControlArray\n    if (abstractControl instanceof FormArray) {\n\n      data = data || [];\n      let length = Math.max(abstractControl.controls.length, data.length);\n\n      for (let i = 0; i < length; ++i) {\n        let abstractControlItem = abstractControl.controls[i] || this.__editFormExtendArray(abstractControl);\n        this._editForm(abstractControlItem, data[i]);\n      }\n    }\n\n    // Control\n    if (abstractControl instanceof FormControl) {\n      abstractControl.setValue(data, {onlySelf: false, emitEvent: false, emitModelToViewChange: false}); // do it silently (last param)\n    }\n  }\n\n  private __editFormExtendArray(controlArray: FormArray): AbstractControl {\n    // to extend control array (see _editForm)\n    let prototypeControl = controlArray.controls[0] || new FormControl(); // could be even smarter\n    let control: AbstractControl = this._cloneForm(prototypeControl);\n\n    controlArray.push(control);\n    return control;\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport { TNotificationId, INotification } from '../interfaces/notification.interface';\nimport { IBackendError } from '../interfaces/backend.interface';\n\nimport config from '../config';\n\n@Injectable()\nexport class NotificationService {\n  private INTERVAL = 3000;\n  protected _data: INotification[] = []; // experimental / could be more complex\n\n  public data = this._data;\n\n  constructor(\n    private ngZone: NgZone\n  ) {\n    // to refresh notifications\n    this.ngZone.runOutsideAngular(() => { // experimental / to not re-render map, triggered by setInterval\n      window.setInterval(() => {\n        this._data.length && this.ngZone.run(() => { // experimental\n          this._refresh(this._data);\n        });\n      }, config.notification.interval || this.INTERVAL);\n    });\n  }\n\n  find(id: TNotificationId): INotification {\n    return (this._data || []).find(item => item.id == id);\n  }\n\n  create(item: {} | string, title?: string, level?: string): INotification {\n    let notification: INotification;\n\n    // create notification object\n    if (typeof item == 'string') {\n      notification = <any> {\n        data: {\n          level: level || config.notification.level.values.HINT,\n          title: title, // text\n          text: item, // text\n        },\n      };\n\n    } else {\n      notification = jQuery.extend(true, {}, item);\n    }\n\n    // set props\n    notification.id = <TNotificationId> '_' + Math.random().toString(36).substr(2, 9);\n    notification.type = notification.type || config.notification.type.values.DEFAULT;\n    notification.data = notification.data || {};\n    notification.created = Date.now();\n\n    notification.options = <any> Object.assign({}, config.notification.defaults, notification.options);\n\n    // set \"observable\" data props\n    if (notification.data instanceof Observable) {\n      let observable = <Observable<any>> notification.data;\n\n      notification.data = {};\n      observable.subscribe(this._subscribe(notification));\n    }\n\n    this._data.push(notification);\n\n    return notification;\n  }\n\n  update(id: TNotificationId, data?: any): INotification {\n    let notification = this.find(id);\n\n    // pass // @todo: update notification\n    return notification;\n  }\n\n  delete(id: TNotificationId): TNotificationId {\n    let index = this.data.reduce((result, item, index) => {\n      return item.id == id ? index : result;\n    }, -1);\n\n    index > -1 && this._data.splice(index, 1);\n\n    return id;\n  }\n\n  createFromBackendError(data: IBackendError | string): INotification[] {\n    let dataErrorMessages = data['errorMessages'] || [];\n    let dataErrors = Object.keys(data['errors'] || {}).map(item => data['errors'][item]);\n    let messages = dataErrorMessages.length ? dataErrorMessages : dataErrors.length ? dataErrors : data.toString();\n\n    return messages.map(item => this.create(item, '', 'error'));\n  }\n\n  trackBy(index: number, item): any {\n    return item && item['id'];\n  }\n\n  private _subscribe(notification: INotification) {\n    return (data: any) => {\n      notification.data = data; // unpack observerable data\n    };\n  }\n\n  private _refresh(notifications: INotification[] = []) {\n    let now = Date.now();\n\n    for (let i = notifications.length - 1; i >= 0; i--) {\n      let item = notifications[i];\n      let dismiss = (\n        item.options.dismissOnTimeout\n          ? item.options.timeout\n          ? item.created + item.options.timeout < now : false : false\n        // add more conditions here\n      );\n\n      dismiss && item.options.onDismiss && item.options.onDismiss(item);\n      dismiss && this._data.splice(i, 1);\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport { TUserId, IUser } from '../interfaces/user.interface';\nimport { IBackendError, IBackendUserListPartial } from '../interfaces/backend.interface';\n\nimport config from '../config';\nimport {\n  AppHttp,\n  DataService,\n} from './index';\n\n@Injectable()\nexport class UserService extends DataService {\n\n  protected _params = {\n  };\n\n  constructor(\n    protected http: AppHttp,\n  ) {\n    super();\n  }\n\n  _deserialize(user: IUser) {\n    user.avatarUrl = this.getAvatarUrl(user);\n    return user;\n  }\n\n  _serialize(user: IUser) {\n    // pass / not in use\n  }\n\n  list(params?: any): Observable<IBackendUserListPartial> {\n    params = jQuery.extend(true, {}, this._params, params);\n\n    // GET '/user/search'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'user/search', params);\n\n    observable.subscribe(\n      (data: IBackendUserListPartial) => {\n        this._data.list = (data || []).map(item => this._deserialize(item));\n\n        // RESERVED \n        // this._data.listMeta = {\n        //   count: data.total,\n        //   startAt: data.startAt,\n        // };\n\n        this._observables.list.next(this._data.list);\n      }\n    );\n\n    return observable;\n  }\n\n  getAvatarUrl(item: IUser) {\n    return item && item.avatarUrls ? item.avatarUrls['16x16'] : '/img/useravatar_small.png'; // legacy: $options.init.base + '/img/useravatar_small.png';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport { TBoardId, IBoard } from '../interfaces/board.interface';\nimport { IBackendError, IBackendBoardListPartial } from '../interfaces/backend.interface';\n\nimport config from '../config';\nimport {\n  AppHttp,\n  DataService,\n  NotificationService,\n} from './index';\n\n@Injectable()\nexport class BoardService extends DataService {\n\n  protected _params = {\n    startAt: 0,\n    maxResults: 100,\n    // type: ...\n    // name: ...\n    // projectKeyOrId: ...\n  };\n\n  constructor(\n    protected http: AppHttp,\n    protected notificationService: NotificationService,\n  ) {\n    super();\n  }\n\n  _deserialize(board: IBoard, list: IBoard[] = []) {\n    // pass / not in use\n    return board;\n  }\n\n  _serialize(board: IBoard) {\n    // pass / not in use\n    return board;\n  }\n\n  find(id): IBoard {\n    return (this._data.list || []).find(item => item.id == id);\n  }\n\n  findIndex(id): number {\n    return (this._data.list || []).findIndex(item => item.id == id);\n  }\n\n  list(params?: any): Observable<IBackendBoardListPartial> {\n    params = jQuery.extend(true, {}, this._params, params);\n\n    // GET '/board'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board', params);\n\n    observable.subscribe(\n      (data: IBackendBoardListPartial) => {\n        this._data.list = (data.values || []).map(item => this._deserialize(item, data.values));\n\n        // RESERVED \n        // this._data.listMeta = {\n        //   count: data.total,\n        //   startAt: data.startAt,\n        // };\n\n        this._observables.list.next(this._data.list);\n      }\n    );\n\n    return observable;\n  }\n\n  retrive(id: TBoardId): Observable<IBoard> {\n    // GET '/board/:id'\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board/' + id);\n\n    observable.subscribe(\n      (data: IBoard) => {\n        // update view object / not in use...\n        this._data.view = data;\n        this._observables.view.next(data);\n\n        let list = this._data.list;\n        if (!list) { return; }\n\n        // update list\n        let board = this.find(data.id);\n        let issueData = this._deserialize(data, list);\n\n        board ? this.assign(board, issueData) : list.push(issueData);\n        this._observables.list.next(list);\n      }\n    );\n\n    return observable;\n  }\n\n  create(data: any): Observable<IBoard> {\n    data = jQuery.extend(true, {}, data);\n\n    // POST '/board'\n    const observable = this.http.post(config.environment.atlassian.api.agile + 'board', data);\n\n    observable.subscribe(\n      (data: IBoard) => {\n        // update view object / not in use...\n        this._data.view = data;\n        this._observables.view.next(data);\n\n        let list = this._data.list;\n        if (!list) { return; }\n\n        // update list\n        let board = this.find(data.id);\n        let issueData = this._deserialize(data, list);\n\n        board ? this.assign(board, issueData) : list.push(issueData);\n        this._observables.list.next(list);\n      },\n      (err: IBackendError) => {\n        this.notificationService.createFromBackendError(err);\n      }\n    );\n\n    return observable;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport { TFilterId, IFilter } from '../interfaces/filter.interface';\nimport { IBackendError } from '../interfaces/backend.interface';\n\nimport config from '../config';\nimport {\n  AppHttp,\n  DataService,\n  NotificationService,\n} from './index';\n\n@Injectable()\nexport class FilterService extends DataService {\n\n  constructor(\n    protected http: AppHttp,\n    protected notificationService: NotificationService\n  ) {\n    super();\n  }\n\n  _deserialize(filter: IFilter, list: IFilter[] = []) {\n    // pass / not in use\n    return filter;\n  }\n\n  _serialize(filter: IFilter) {\n    // pass / not in use\n    return filter;\n  }\n\n  find(id): IFilter {\n    return (this._data.list || []).find(item => item.id == id);\n  }\n\n  findIndex(id): number {\n    return (this._data.list || []).findIndex(item => item.id == id);\n  }\n\n  retrive(id: TFilterId): Observable<IFilter> {\n    // GET '/filter/:id'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'filter/' + id);\n\n    observable.subscribe(\n      (data: IFilter) => {\n        this._data.view = data;\n        this._observables.view.next(data);\n      }\n    );\n\n    return observable;\n  }\n\n  create(data: any): Observable<IFilter> {\n    data = jQuery.extend(true, {}, data);\n\n    // POST '/filter'\n    const observable = this.http.post(config.environment.atlassian.api.base + 'filter', data);\n\n    observable.subscribe(\n      (data: IFilter) => {\n        this._data.view = data;\n        this._observables.view.next(data);\n      },\n      (err: IBackendError) => {\n        this.notificationService.createFromBackendError(err);\n      }\n    );\n\n    return observable;\n  }\n\n  update(filter: IFilter, data: any): Observable<IFilter> {\n    if (!filter.id) return this.create(Object.assign({}, filter, data)); // dirty?...\n    data = jQuery.extend(true, {}, data);\n\n    // PUT '/filter/:id'\n    const observable = this.http.put(config.environment.atlassian.api.base + 'filter/' + filter.id, data);\n\n    observable.subscribe(\n      (data: IFilter) => {\n        this._data.view = data;\n        this._observables.view.next(data);\n      },\n      (err: IBackendError) => {\n        this.notificationService.createFromBackendError(err);\n      }\n    );\n\n    return observable;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { ReplaySubject } from 'rxjs/ReplaySubject';\n\nimport { TGroupId, IGroup } from '../interfaces/map.interface';\nimport { TIssueId, TIssueIndex, IIssue } from '../interfaces/issue.interface';\nimport { IBackendError, IBackendIssueListPartial } from '../interfaces/backend.interface';\n\nimport { parseJavaObject } from '../utils/misc';\n\nimport config from '../config';\nimport {\n  AppHttp,\n  AppSocket,\n  DataService,\n  NotificationService,\n  EnvService,\n  UserService,\n} from './index';\n\n@Injectable()\nexport class IssueService extends DataService {\n\n  protected _params = { // jira \"/search\" endpoint props\n    jql: '',\n    startAt: 0,\n    maxResults: 1000, // TODO: how about 'null'?\n    fields: '',\n    expand: 'transitions',\n  };\n\n  constructor(\n    protected http: AppHttp,\n    protected socket: AppSocket,\n    protected notificationService: NotificationService,\n    protected envService: EnvService,\n    protected userService: UserService\n  ) {\n    super();\n\n    // init search params\n    this._params['jql'] = (this.envService.data.filter || {})['jql'] || ''; // RESERVED / + 'ORDER BY Rank';\n    this._params['fields'] = [].concat(\n      config.issue.fields,\n      envService.getFieldByName('Sprint').id,\n      envService.getFieldByName('Story Points').id,\n      envService.getFieldByName('Rank').id,\n      envService.getFieldByName('Epic Link').id,\n    ).join(',');\n\n    // init sockets\n    if (this.envService.settings.update) {\n      this.socket.on('jira:issue_created').subscribe((data: IIssue) => data && this.isUnlocked(data.id) && this.retrive(data.id));\n      this.socket.on('jira:issue_updated').subscribe((data: IIssue) => data && this.isUnlocked(data.id) && this.retrive(data.id));\n      this.socket.on('jira:issue_deleted').subscribe((data: IIssue) => data && this.isUnlocked(data.id) && this.delete(data.id));\n      this.socket.on('remote_issue_link_aggregate_cleared_event').subscribe((data: IIssue) => data && this.isUnlocked(data.id) && this.retrive(data.id)); // is it ok?\n    }\n  }\n\n  _deserialize(issue: IIssue, list: IIssue[] = []) {\n    let fieldId, fieldKey;\n\n    // RESERVED\n    // fieldId = this.envService.getFieldByName('Rank').id;\n    // issue.fields['rank'] = issue.fields[fieldId] || null; // TODO: specify default value\n\n    fieldId = this.envService.getFieldByName('Story Points').id;\n    issue.fields['points'] = issue.fields[fieldId] || 0;\n\n    fieldId = this.envService.getFieldByName('Sprint').id;\n    issue.fields['sprints'] = (issue.fields[fieldId] || []);\n\n    fieldId = this.envService.getFieldByName('Epic Link').id;\n    fieldKey = issue.fields[fieldId];\n    issue['parent'] = issue['parent'] || list.find(item => item.key == fieldKey);\n\n    issue.fields.reporter && (issue.fields.reporter.avatarUrl = this.userService.getAvatarUrl(issue.fields.reporter));\n    issue.fields.assignee && (issue.fields.assignee.avatarUrl = this.userService.getAvatarUrl(issue.fields.assignee));\n\n    // to store \"state\" values / weak\n    issue['state'] = <any>{\n      rank: list.findIndex(item => item.id == issue.id), // temporal\n      locks: 0,\n    };\n\n    return issue;\n  }\n\n  _serialize(issue: IIssue) {\n    // pass / not in use\n  }\n\n  find(id: TIssueId): IIssue {\n    return (this._data.list || []).find(item => item.id == id);\n  }\n\n  findIndex(id: TIssueId): number {\n    return (this._data.list || []).findIndex(item => item.id == id);\n  }\n\n  isLocked(id: TIssueId): boolean {\n    let issue = this.find(id);\n    return issue ? issue.state.locks > 0 : false;\n  }\n\n  isUnlocked(id: TIssueId): boolean {\n    let issue = this.find(id);\n    return issue ? issue.state.locks == 0 : true;\n  }\n\n  listBoard(boardId, params?: any): Observable<IBackendIssueListPartial> {\n    params = jQuery.extend(true, {}, this._params, params);\n    // GET /rest/agile/1.0/board/{boardId}/issue\n    const observable = this.http.get(config.environment.atlassian.api.agile + 'board/' + boardId + '/issue', params);\n    return observable;\n  }\n\n  list(params?: any): Observable<IBackendIssueListPartial> {\n    params = jQuery.extend(true, {}, this._params, params);\n\n    // GET '/search'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'search', params);\n\n    observable.subscribe(\n      (data: IBackendIssueListPartial) => {\n        this._data.list = (data.issues || []).map(item => this._deserialize(item, data.issues));\n\n        // RESERVED\n        // this._data.listMeta = {\n        //   count: data.total,\n        //   startAt: data.startAt,\n        // };\n\n        // emit items\n        this._observables.list.next(this._data.list);\n      }\n    );\n\n    return observable;\n  }\n\n  retrive(id: TIssueId): Observable<IIssue> {\n    let issue = this.find(id);\n    issue && (issue.state.updated = false); // experimental\n\n    // GET '/issue/:id'\n    const observable = this.http.get(config.environment.atlassian.api.base + 'issue/' + id, {\n      fields: this._params.fields,\n      expand: 'transitions'\n    });\n\n    observable.subscribe(\n      (data: IIssue) => {\n        let list = this._data.list;\n        if (!list) { return; }\n\n        // format issue\n        let issue = this.find(data.id);\n        let issueData = this._deserialize(data, list);\n\n        issueData.state = issue ? issue.state : issueData.state;\n        issueData.state.updated = true;\n\n        // update list\n        issue ? this.assign(issue, issueData) : list.push(issueData);\n        // OBSOLETED / mistakenly calls map.group / this._observables.list.next(list);\n\n        // update view object and emit item\n        this._data.view = issue;\n        this._observables.view.next(issue);\n      }\n    );\n\n    // TODO: revert in case of server error/rejection\n    // let issue = this.find(data.id);\n    // issue && this.regroup(issue);\n\n    return observable;\n  }\n\n  // experimental / routine to cascade observers for update/retrive\n  _update(issue: IIssue, observable: Observable<void>): ReplaySubject<IIssue> { // TODO: Observable<IIssue>\n    const retriveObservable: ReplaySubject<IIssue> = new ReplaySubject(1);\n    issue.state.locks++;\n\n    observable.subscribe(\n      () => {\n        this.retrive(issue.id).subscribe(\n          (issue: IIssue) => { retriveObservable.next(issue); },\n          () => { retriveObservable.next(issue); },\n          () => {\n            retriveObservable.complete();\n          }\n        );\n      },\n      (err: IBackendError) => {\n        // error message\n        this.notificationService.createFromBackendError(err);\n\n        // experimental (pass no errors upward)\n        retriveObservable.next(issue);\n        retriveObservable.complete();\n      },\n      () => {\n        issue.state.locks--;\n      }\n    );\n\n    return retriveObservable;\n  }\n\n  update(issue: IIssue, data: any): Observable<IIssue> {\n    // RESERVED / if (!issue.id) return this.create(Object.assign({}, issue, data)); // dirty?...\n    data = jQuery.extend(true, {}, data);\n\n    const observable =\n      // PUT '/issue/:id'\n      this.http.put(config.environment.atlassian.api.base + 'issue/' + issue.id, data);\n\n    return this._update(issue, observable);\n  }\n\n  updateProject(issue: IIssue) {\n    window.open(this.envService.url(\n      '/secure/views/bulkedit/BulkMigrateDetails.jspa?singleIssueId=' + issue.id\n    ), '_blank', config.environment.atlassian.dialog).focus();\n  }\n\n  updateEpic(issue: IIssue, epicId: any): Observable<IIssue> {\n    // epicId 'none' to unlink issue from the epic\n    let data = {\n      issues: [issue.key],\n    };\n\n    const observable =\n      // POST '/epic/:id/issue'\n      this.http.post(config.environment.atlassian.api.agile + 'epic/' + epicId + '/issue', data);\n\n    return this._update(issue, observable);\n  }\n\n  updatePoints(issue: IIssue, value: string): Observable<IIssue> {\n    let board = this.envService.options.atlassian['board'];\n    let data = {\n      value: value,\n    };\n\n    const observable =\n      // PUT '/issue/:id/estimation?boardId=:boardId'\n      this.http.put(config.environment.atlassian.api.agile + 'issue/' + issue.id + '/estimation?boardId=' + board, data);\n\n    return this._update(issue, observable);\n  }\n\n  updateStatus(issue: IIssue, name: string): Observable<IIssue> {\n    // should pass status name and find transition id by name,\n    // cause ids can differ from project to project and so on.\n    let transition = issue.transitions.find(item => item.to.name == name);\n\n    // skip update and revert changes for unpermissioned transitions\n    if (!transition) { return this.retrive(issue.id); }\n\n    let data = {\n      transition: {id: transition.id}\n    };\n\n    const observable =\n      // POST '/issue/:id/transitions'\n      this.http.post(config.environment.atlassian.api.base + 'issue/' + issue.id + '/transitions', data);\n\n    return this._update(issue, observable);\n  }\n\n  updateIssueLinkCreate(issue: IIssue, inwardIssueId: any, outwardIssueId: any, typeId: any): Observable<IIssue> {\n    let data = {\n      type: {id: typeId},\n      inwardIssue: {id: inwardIssueId},\n      outwardIssue: {id: outwardIssueId},\n    };\n\n    const observable =\n      // POST '/issueLink'\n      this.http.post(config.environment.atlassian.api.base + 'issueLink', data);\n\n    return this._update(issue, observable);\n  }\n\n  updateIssueLinkDelete(issue: IIssue, inwardIssueId: any, outwardIssueId: any, typeId: any): Observable<IIssue> {\n    let data = {\n      type: {id: typeId},\n      inwardIssue: {id: inwardIssueId},\n      outwardIssue: {id: outwardIssueId},\n    }\n\n    const observable =\n      // DELETE '/issueLink'\n      this.http.delete(config.environment.atlassian.api.base + 'issueLink', data);\n\n    return this._update(issue, observable);\n  }\n\n  updateRank(issue: IIssue, issueBefore: IIssue, issueAfter: IIssue): Observable<void> {\n    // normalize data\n    issueAfter = !issueAfter && !issueBefore ? issue : issueAfter; // make a fake update if no data\n    issueAfter = issueAfter && issueBefore ? null : issueAfter; // make it valid for excessive data\n    issue.state.locks++; // exprimental\n\n    let data = {\n      issues: [issue.key],\n      rankBeforeIssue: issueAfter  ? issueAfter.key : undefined, // yes, swapped values\n      rankAfterIssue: issueBefore ? issueBefore.key : undefined, // yes, swapped values\n    };\n\n    // PUT '/issue/rank'\n    const observable = this.http.put(config.environment.atlassian.api.agile + 'issue/rank', data);\n\n    observable.subscribe(\n      () => {\n        // update view object and emit item\n        this._data.view = issue;\n        this._observables.view.next(issue);\n      },\n      (err: IBackendError) => {\n        // error message\n        this.notificationService.createFromBackendError(err);\n      },\n      () => {\n        issue.state.locks--;\n      }\n    );\n\n    return observable;\n  }\n\n  updateGroup(issue: IIssue, group: IGroup, add: boolean = true): Observable<IIssue> {\n    const isOthers: boolean = group.id == config.map.group.extras.OTHERS;\n    const types = config.map.group.values;\n\n    let groupId: any;\n    let fieldId: string;\n    let data: any = {\n      update: {},\n      fields: {},\n    };\n\n    switch(group.type) {\n\n      case types.PROJECT:\n        // TODO: doesn't work, try another approach\n        data['update']['project'] = [{set: group.id}];\n        break;\n\n      case types.EPIC:\n        groupId = isOthers ? 'none' : group.id;\n        return this.updateEpic(issue, groupId);\n\n      case types.SPRINT:\n        groupId = isOthers ? null : parseInt(group.id);\n        fieldId = this.envService.getFieldByName('Sprint').id;\n        data['update'][fieldId] = [{set: groupId}];\n        break;\n\n      case types.POINTS:\n        return this.updatePoints(issue, group.id);\n\n      case types.VERSION_AFFECTED:\n        data['update']['versions'] = isOthers ?\n          (issue.fields['versions'] || []).map(item => ({remove: {id: item.id}})) : // remove all items\n          [add ? {add: {id: group.id}} : {remove: {id: group.id}}]; // add/remove item\n        break;\n\n      case types.VERSION_FIXED:\n        data['update']['fixVersions'] = isOthers ?\n          (issue.fields['fixVersions'] || []).map(item => ({remove: {id: item.id}})) : // remove all items\n          [add ? {add: {id: group.id}} : {remove: {id: group.id}}]; // add/remove item\n        break;\n\n      case types.COMPONENT:\n        data['update']['components'] = isOthers ?\n          (issue.fields['components'] || []).map(item => ({remove: {id: item.id}})) : // remove all items\n          [add ? {add: {id: group.id}} : {remove: {id: group.id}}]; // add/remove item\n        break;\n\n      case types.STATUS:\n        return this.updateStatus(issue, group.name || group.id); // yes, we pass name, not id\n\n      case types.PRIORITY:\n        data['update']['priority'] = [{set: {id: group.id}}];\n        break;\n\n      case types.TYPE:\n        data['fields']['issuetype'] = {id: group.id}; // doesn't work using \"update\" approach\n        break;\n\n      case types.ASSIGNEE:\n        data['update']['assignee'] = [{set: {name: isOthers ? null : group.id}}];\n        break;\n\n      case types.REPORTER:\n        data['update']['reporter'] = [{set: {name: isOthers ? null : group.id}}];\n        break;\n\n      case types.DUPLICATES:\n        fieldId = this.envService.getIssueLinkByName('Duplicate').id;\n\n        if (isOthers) {\n          // TEMP TEMP TEMP\n          return this.updateIssueLinkCreate(issue, issue.id, group.id, fieldId);\n\n          // RESERVED\n          // return issue.fields.issuelinks\n          //   .filter(item => item.id == typeId)\n          //   .map(item => this.updateIssueLinkDelete(issue, issue.id, group.id, typeId)\n\n        } else {\n          return this.updateIssueLinkCreate(issue, issue.id, group.id, fieldId);\n        }\n\n      case types.DUPLICATED:\n        fieldId = this.envService.getIssueLinkByName('Duplicate').id;\n\n        if (isOthers) {\n          // TEMP TEMP TEMP\n          return this.updateIssueLinkCreate(issue, group.id, issue.id, fieldId);\n        } else {\n          return this.updateIssueLinkCreate(issue, group.id, issue.id, fieldId);\n        }\n\n      case types.BLOCKS:\n        fieldId = this.envService.getIssueLinkByName('Blocks').id;\n\n        if (isOthers) {\n          // TEMP TEMP TEMP\n          return this.updateIssueLinkCreate(issue, issue.id, group.id, fieldId);\n        } else {\n          return this.updateIssueLinkCreate(issue, issue.id, group.id, fieldId);\n        }\n\n      case types.BLOCKED:\n        fieldId = this.envService.getIssueLinkByName('Blocks').id;\n\n        if (isOthers) {\n          // TEMP TEMP TEMP\n          return this.updateIssueLinkCreate(issue, group.id, issue.id, fieldId);\n        } else {\n          return this.updateIssueLinkCreate(issue, group.id, issue.id, fieldId);\n        }\n    }\n\n    return this.update(issue, data);\n  }\n\n  updateGroupProperties(issue: IIssue, type: string, addGroups: IGroup[], removeGroups: IGroup[]): Observable<IIssue> {\n    const isOthers: boolean = addGroups && addGroups.length && addGroups[0].id == config.map.group.extras.OTHERS;\n    const types = config.map.group.values;\n\n    let updates = addGroups.map((item: IGroup) =>\n      <any>({add: {id: item.id}})\n    ).concat(removeGroups.map((item: IGroup) =>\n      <any>({remove: {id: item.id}})\n    ));\n\n    let data: any = {\n      update: {},\n    };\n\n    switch(type) {\n\n      case types.VERSION_AFFECTED:\n        data['update']['versions'] = isOthers ?\n          (issue.fields['versions'] || []).map(item => ({remove: {id: addGroups[0].id}})) : // remove all items\n          updates; // add/remove item\n        break;\n\n      case types.VERSION_FIXED:\n        data['update']['fixVersions'] = isOthers ?\n          (issue.fields['fixVersions'] || []).map(item => ({remove: {id: addGroups[0].id}})) : // remove all items\n          updates; // add/remove item\n        break;\n\n      case types.COMPONENT:\n        data['update']['components'] = isOthers ?\n          (issue.fields['components'] || []).map(item => ({remove: {id: addGroups[0].id}})) : // remove all items\n          updates; // add/remove item\n        break;\n    }\n\n    return this.update(issue, data);\n  }\n\n  // experimental\n  delete(id: TIssueId) {\n    let index = this.findIndex(id);\n\n    if (index > - 1) {\n      this._data.list.splice(index, 1);\n      this._observables.list.next(this._data.list);\n    }\n  }\n\n  createDialog(group: IGroup) {\n    let issueType = this.envService.data.issueTypes.find(item =>  item.name == 'Story');\n\n    if (this.envService.isAtlassianCloud) {\n      this.envService.JIRA.openCreateIssueDialog((issues: IIssue[]) => {\n        issues.forEach((issue: IIssue) => {\n          group && group.id != config.map.group.extras.OTHERS ?\n            this.updateGroup(issue, group) : this.retrive(issue.id); // ...retrive to refresh map\n        });\n      }, {\n        // RESERVED / pid: parentIssue ? parentIssue.fields.project.id : null,\n        issueType: issueType,\n      });\n    }\n\n    if (this.envService.isAtlassianServer) {\n      // JIRA.Forms.createCreateIssueForm({\n      //   issueType: issueType,\n      //   pid: null,\n      //   parentIssueId: null,\n      // }).asDialog({\n      //   trigger: document.createElement('a'), // Because we're showing it manually, we don't want to have the dialog re-show for a different dialog.\n      //   id: 'issue-create-dialog',\n      //   windowTitle: AJS.I18n.getText('admin.issue.operations.create'),\n      // }).show();\n    }\n  }\n\n  editDialog(issue: IIssue) {\n    if (this.envService.isAtlassianCloud) {\n      window.open(this.envService.url(\n        '/secure/EditIssue!default.jspa?key=' + issue.key\n      ), '_blank', config.environment.atlassian.dialog).focus();\n    }\n\n    if (this.envService.isAtlassianServer) {\n      // legacy:\n      // this.openDialogEditIssue = function(issueKeyGot)\n    }\n  }\n\n  assignDialog(issue: IIssue) {\n    if (this.envService.isAtlassianCloud) {\n      window.open(this.envService.url(\n        '/secure/AssignIssue!default.jspa?key=' + issue.key\n      ), '_blank', config.environment.atlassian.dialog).focus();\n    }\n\n    if (this.envService.isAtlassianServer) {\n      // pass\n    }\n  }\n\n  commentDialog(issue: IIssue) {\n    if (this.envService.isAtlassianCloud) {\n      window.open(this.envService.url(\n        '/secure/AddComment!default.jspa?key=' + issue.key\n      ), '_blank', config.environment.atlassian.dialog).focus();\n    }\n\n    if (this.envService.isAtlassianServer) {\n      // pass\n    }\n  }\n\n  createSubissueDialog(issue: IIssue) {\n    if (this.envService.isAtlassianCloud) {\n      window.open(this.envService.url(\n        '/secure/CreateSubTaskIssue!default.jspa?parentIssueId=' + issue.id\n      ), '_blank', config.environment.atlassian.dialog).focus();\n    }\n\n    if (this.envService.isAtlassianServer) {\n      // TODO: refactor / legacy code\n      // JIRA.Forms.createSubtaskForm({parentIssueId:parentIssueIdGot,pid:null,issueType:null}).asDialog({\n      //   trigger: document.createElement(\"a\"), // Because we're showing it manually, we don't want to have the dialog re-show for a different dialog.\n      //   id: \"create-issue-dialog\",\n      //   windowTitle: AJS.I18n.getText('admin.issue.operations.create')\n      // }).show();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from \"rxjs/Observable\";\nimport { Subject } from \"rxjs/Subject\";\n\n@Injectable()\nexport class Upload {\n\n  loaded: boolean = false;\n  dataurl: string = '';\n  private _data: Subject<HTMLImageElement> = new Subject();\n  public readonly data: Observable<HTMLImageElement> = this._data.asObservable();\n\n  get image(): Observable<HTMLImageElement> {\n    return new Observable<HTMLImageElement>(fn => this._data.subscribe(fn));\n  }\n\n  public handleEvent(e) {\n    e.preventDefault();\n    this.handleInputChange(e);\n  }\n\n  handleInputChange(e) {\n\n    var file = e.dataTransfer ? e.dataTransfer.files[0] : e.target.files[0];\n\n    var pattern = /image-*/;\n    var reader = new FileReader();\n\n    if (!file.type.match(pattern)) {\n      alert('invalid format');\n      return;\n    }\n\n    this.loaded = false;\n\n    reader.onload = this._handleReaderLoaded.bind(this);\n    reader.readAsDataURL(file);\n  }\n\n  _handleReaderLoaded(e) {\n    var reader = e.target;\n    this.dataurl = reader.result;\n    this.loaded = true;\n    this._imageurl(this.dataurl);\n  }\n\n  _imageurl(imageurl: string) {\n    if (imageurl == undefined) return;\n    new Promise<HTMLImageElement>((resolve, reject) => {\n      const image = new Image();\n      image.onload = () => resolve(image);\n      image.onerror = (e) => reject(e);\n      image.src = imageurl;\n    })\n      .then(image => {\n        this._data.next(image);\n      })\n      .catch(e => console.log(\"error loading image: \" + e));\n  }\n\n}\n","import { Component, OnInit, OnDestroy, Input, Output, ElementRef, EventEmitter } from '@angular/core';\n\n// Use example:\n// <div modal *ngIf=\"nameModal\" class=\"modal\">...</div>\n// the component is supposed to be \"data-driven\", not \"action-driven\", don't call actions directly\n@Component({\n  selector: '[modal]',\n  template: `\n    <ng-content></ng-content>\n  `,\n})\nexport class ModalComponent implements OnInit, OnDestroy {\n  // RESERVED / @Input('options') options: Object;\n\n  @Output('show') showEvent: EventEmitter<any> = new EventEmitter();\n  @Output('shown') shownEvent: EventEmitter<any> = new EventEmitter();\n  @Output('hide') hideEvent: EventEmitter<any> = new EventEmitter();\n  @Output('hidden') hiddenEvent: EventEmitter<any> = new EventEmitter();\n\n  private el: HTMLElement;\n  private shown: boolean;\n  private hidden: boolean;\n\n  constructor(\n    private elementRef: ElementRef\n  ) {\n  }\n\n  ngOnInit() {\n    this.el = this.elementRef.nativeElement;\n\n    $(this.el).on('shown.bs.modal', () => { // jQuery only events\n      this.shown = true;\n      this.hidden = !this.shown;\n      this.shownEvent.emit();\n    });\n\n    $(this.el).on('hidden.bs.modal', () => {\n      this.shown = false;\n      this.hidden = !this.shown;\n      this.hiddenEvent.emit();\n    });\n\n    $(this.el).on('show.bs.modal', () => {\n      this.showEvent.emit();\n    });\n\n    $(this.el).on('hide.bs.modal', () => {\n      this.hideEvent.emit();\n    });\n\n    this.shown = false;\n    this.hidden = true;\n    this.show();\n  }\n\n  ngOnDestroy() {\n    this.hide();\n  }\n\n  modal(action: string) {\n    return $(this.el)['modal'](action);\n  }\n\n  show() {\n    this.hidden && this.modal('show');\n  }\n\n  hide() {\n    this.shown && this.modal('hide');\n  }\n\n  toggle() {\n    return this.modal('toggle');\n  }\n}\n","import { Component, Input, Output, OnInit, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport config from '../../config';\n\n@Component({\n  selector: 'form-typeahead',\n  template: `\n    <div style=\"position: relative\">\n      <input [id]=\"id\" [formControl]=\"inputControl\" [placeholder]=\"placeholder\" type=\"text\" class=\"form-control\">\n      <div *ngIf=\"options?.length && show\" class=\"dropdown-menu\" role=\"menu\" style=\"display: block\">\n        <a *ngFor=\"let item of options\" [innerHTML]=\"optionLabel(item)\" (click)=\"onSelect(item)\" class=\"dropdown-item link\"></a>\n      </div>\n    </div>\n  `\n})\nexport class FormTypeaheadComponent implements OnInit {\n  @Input() control: FormControl;\n\n  @Input() placeholder: string;\n  @Input() default: string;\n  @Input() options: any[];\n  @Input() optionValue: Function = item => item;\n  @Input() optionLabel: Function = item => item;\n  @Input() optionLabelInput: Function; // experimental\n\n  @Output() search: EventEmitter<string> = new EventEmitter();\n  @Output() select: EventEmitter<string> = new EventEmitter();\n\n  private debounceDelay = (config.debounce.interval || 1000) / 2; // milliseconds\n  private inputControl = new FormControl();\n  private show: boolean = false;\n  private id: string;\n\n  constructor(\n  ) {\n  }\n\n  ngOnInit() {\n    this.id = (new Date().getTime()).toString(36); // unique id\n\n    // init controls\n    this.inputControl.setValue(this.default || '');\n\n    this.inputControl.valueChanges.debounceTime(this.debounceDelay).subscribe((value: string) => {\n      this.search.emit(value);\n      this.control.reset();\n      this.show = true;\n    });\n\n    this.control.valueChanges.subscribe((value: any) => {\n      typeof value == 'undefined' // experimental\n        && this.inputControl.setValue(this.default || '', {emitEvent: false});\n    });\n  }\n\n  onSelect(option: any) {\n    let label = (this.optionLabelInput || this.optionLabel)(option);\n    this.inputControl.setValue(label, {emitEvent: false});\n    this.control.setValue(this.optionValue(option));\n    this.select.emit(this.control.value);\n    this.show = false;\n  }\n}\n","import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { FormGroup, FormControl } from '@angular/forms';\n\nimport config from '../config';\nimport {\n  //BoardService,\n  IssueService,\n} from '../services';\n\n@Component({\n  selector: 'header-xxy', // or 'layout-header'\n  template: `\n    <div class=\"container-fluid py-2\">\n\n      <div class=\"row\">\n        <div class=\"col-sm-6\">\n          <div class=\"float-left mr-3\" style=\"width: 3.33em; height: 3.33em; background-color: red\">&nbsp;</div>\n          <h3>Bauer Corkboard</h3>\n        </div>\n\n        <div *ngIf=\"true\" class=\"col-sm-6\">\n\n          <div class=\"aui-page-header-actions\">\n            <div class=\"aui-buttons btn-group\" >    \n             <span>  \n                <span dropdown (onDropdownHidden)=\"state.actions = false\" class=\"dropdown bit-storymap-card-actions\">\n                  <a (click)=\"state.actions = !state.actions\" data-toggle=\"dropdown\" class=\"aui-button aui-style-default aui-dropdown2-trigger\">Dropdown trigger</a>\n                  <div [style.display]=\"state.actions ? 'block' : 'none'\"  class=\"aui-style-default aui-dropdown2\">\n                      <ul class=\"aui-list-truncate\">\n                          <li><a href=\"#\">Menu item</a></li>\n                          <li><a href=\"#\">Menu item</a></li>\n                          <li><a href=\"#\">Menu item</a></li>\n                          <li><a href=\"#\">Menu item</a></li>\n                      </ul>\n                  </div>\n                </span>\n           \n                <a class=\"aui-button\" title=\"Print PDF\" (click)=\"printEvent.emit()\"><span class=\"icon-print\"></span></a>\n\n                <a class=\"aui-button\" title=\"Ask a question\" href=\"//answers.atlassian.com/questions/ask?topics=addon-jira.agile.user.story.map\" target=\"_blank\"><span title=\"Ask a question\" class=\"aui-icon aui-icon-small aui-iconfont-comment\">Ask a question</span></a>\n                <a class=\"aui-button\" title=\"Documentation\" href=\"//bauer-information-technology.com/story-map_user-manual/#!story-map_user-manual\" target=\"_blank\"><span title=\"Documentation\" class=\"aui-icon aui-icon-small aui-iconfont-editor-help\">Documentation</span></a>\n              </span>\n            </div>\n          </div>\n\n        </div>\n      </div>\n\n    </div>\n\n    <hr class=\"my-0\" />\n  `,\n})\nexport class HeaderComponent implements OnInit, OnDestroy {\n  @Input('form') form: FormGroup;\n  @Output('print') printEvent: EventEmitter<any> = new EventEmitter();\n  config = config;\n  state = {};\n\n  private routeSubscription: any;\n\n  constructor(\n    private route: ActivatedRoute,\n    private issues: IssueService\n    //private board: BoardService\n  ) {\n  }\n\n  ngOnInit() {\n    this.routeSubscription = this.route.params.subscribe(params => {\n      // TODO: use params or remove the ActivatedRoute service \n    });\n  }\n\n  ngOnDestroy() {\n    this.routeSubscription.unsubscribe();\n  }\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { NotificationService } from '../services';\n\n@Component({\n  selector: 'notification-list',\n  template: `\n    <div *ngIf=\"notifications.data && notifications.data.length\" class=\"bit-storymap-notification-list\">\n      <div *ngFor=\"let item of notifications.data; trackBy:notifications.trackBy\">\n        <notification [item]=\"item\"></notification>\n      </div>\n    </div>\n  `,\n})\nexport class NotificationListComponent {\n\n  constructor(\n    private router: Router,\n    private notifications: NotificationService\n  ) {\n  }\n}\n\n","import { Component, Input } from '@angular/core';\n\nimport { INotification } from '../interfaces/notification.interface';\nimport { NotificationService } from '../services';\n\n@Component({\n  selector: 'notification',\n  template: `\n    <div *ngIf=\"item.type == 'DEFAULT' || !item.type\" [ngClass]=\"'bit-storymap-notification-item fadeout closeable aui-message aui-message-' + item.data.level\">\n      <p *ngIf=\"item.title\">{{item.title}}</p>\n      <div *ngIf=\"item.data.html\" [innerHTML]=\"item.data.html\"></div>\n      <div *ngIf=\"item.data.text\" [innerHTML]=\"item.data.text\"></div>\n      <span class=\"aui-icon icon-close\" (click)=\"notifications.delete(item.id)\"></span>\n    </div>\n  `,\n})\nexport class NotificationComponent {\n  @Input() item: INotification;\n\n  constructor(private notifications: NotificationService) {\n  }\n}\n","import { Component } from '@angular/core';\n\nimport config from '../config';\nimport {\n  EnvService,\n} from '../services';\n\n@Component({\n  selector: 'license',\n  template: `\n    <div class=\"m-5\">\n      <div class=\"pa-2 aui-message aui-message-warning\">\n        <h3>\n          <strong>No valid License</strong>\n        </h3>\n        <p>\n          Please purchase a valid license at the\n          <a [href]=\"envService.url('plugins/servlet/upm#manage/' + envService.product)\" target=\"_parent\">Plugin Manager</a>\n          or the\n          <a [href]=\"'//marketplace.atlassian.com/plugins/' + envService.product + '/'\" target=\"_parent\">Atlassian Marketplace</a>.\n        </p>\n        <p>\n          <button (click)=\"$event.preventDefault(); dismiss()\" id=\"dialog-close-button\" class=\"aui-button aui-button-link\" resolved=\"\">Close</button>\n        </p>\n      </div>\n    </div>\n  `,\n})\nexport class LicenseComponent {\n  config = config;\n\n  constructor(\n    private envService: EnvService,\n  ) {\n  }\n\n  dismiss() {\n        var AP = window['AP'];\n        AP.require('dialog', function (dialog) {\n            dialog.close();\n        });\n    }\n\n}\n","import { CorkboardIssueAssignComponent } from './corkboard-issue-assign.component';\nimport { Component, NgZone, OnInit, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { Subscription } from 'rxjs/Subscription';\n\nimport { FormGroup, FormControl } from '@angular/forms';\n\nimport config from '../config';\nimport {\n    CorkboardService,\n    Storage,\n    EnvService\n} from '../services';\nimport {\n    trigger, state, animate, transition, style\n} from '@angular/core';\n@Component({\n    providers: [CorkboardService],\n    selector: 'corkboard',\n    animations: [\n        trigger(\n            'visibilityChanged',\n            [\n                transition(':enter', [\n                    style({ opacity: 0 }),\n                    animate('400ms', style({ opacity: 1 }))\n                ]),\n                transition(':leave', [\n                    style({ opacity: 1 }),\n                    animate('400ms', style({ opacity: 0 }))\n                ])\n            ]\n        )\n    ],\n    template: `\n  <section role=\"dialog\" style=\"height: calc(100% - 120px); top: 69px;\" id=\"bit-dialog-corkboard\" class=\"aui-layer aui-dialog2 aui-dialog2-fullscreen\">\n    <!-- Dialog header -->\n    <header class=\"aui-dialog2-header\">\n        <h2 class=\"aui-dialog2-header-main icon-corkboard bit-corkboard-logo\"><span>Bauer Corkboard</span></h2>\n        <div class=\"aui-dialog2-header-secondary\">\n            <div class=\"aui-buttons\" >\n              <span>\n                <span dropdown (onDropdownHidden)=\"state.actions = false\" class=\"bit-aui-header-dropdown dropdown\">\n                  <!-- todo: better solution for styling  button groups  -->\n                  <a id=\"boards\" style=\"display: flex; border-top-left-radius: 3.01px !important; border-bottom-left-radius: 3.01px !important;\" aria-owns=\"boards\" aria-haspopup=\"true\" (click)=\"state.actions = !state.actions\" data-toggle=\"dropdown\" class=\"bit-corkboard-boards-dropdown aui-button aui-style-default aui-dropdown2-trigger\">{{corkboard.board.name}}</a>\n                  <div [style.display]=\"state.actions ? 'block' : 'none'\" class=\"aui-style-default aui-dropdown2 dropdown-menu\" aria-labelledby=\"boards\">\n                      <ul class=\"aui-list-truncate\">\n                        <li style=\"font-size:14px;\" *ngFor=\"let board of corkboard.boards\">\n                        <a class=\"link\" (click)=\"$event.preventDefault(); corkboard.setBoard(board)\">{{board.name}}</a>\n                        </li>\n                      </ul>\n                  </div>\n                </span>\n\n                <span dropdown (onDropdownHidden)=\"state.transitions = false\" class=\"bit-aui-header-dropdown dropdown\">\n                  <a id=\"transitions\" style=\"display: flex;\" aria-owns=\"transitions\" aria-haspopup=\"true\" (click)=\"state.transitions = !state.transitions;\" data-toggle=\"dropdown\" class=\"bit-corkboard-transitions-dropdown aui-button aui-style-default aui-dropdown2-trigger\">{{corkboard.transition.name}}</a>\n                  <div [style.display]=\"state.transitions ? 'block' : 'none'\"  class=\"aui-style-default aui-dropdown2 dropdown-menu\" aria-labelledby=\"transitions\">\n                      <ul class=\"aui-list-truncate\">\n                        <li style=\"font-size:14px;\" *ngFor=\"let transition of corkboard.transitions\">\n                        <a class=\"link\" (click)=\"$event.preventDefault(); corkboard.transition = transition\">{{transition.name}}</a>\n                        </li>\n                      </ul>\n                  </div>\n                </span>\n\n                <corkboard-print-issues></corkboard-print-issues>\n\n                <a (click)=\"setTab(3)\" class=\"aui-button\" title=\"Log\">\n                  <span title=\"Log\" class=\"aui-icon aui-icon-small aui-iconfont-configure\">Configuration</span>\n                </a>\n\n                <!-- <button (click)=\"setTab(3)\" [ngClass]=\"{'cb-btn-selected' : tab == 3}\" class=\"aui-button\">Processing Log</button> -->\n\n                <a class=\"aui-button\" title=\"Documentation\" href=\"//bauer-information-technology.com/user-guide-corkboard/\" target=\"_blank\">\n                  <span title=\"Documentation\" class=\"aui-icon aui-icon-small aui-iconfont-editor-help\">Documentation</span>\n                </a>\n              </span>\n            </div>\n\n        </div>\n        <!-- Close icon\n        <a class=\"aui-dialog2-header-close\" (click)=\"$dismiss()\">\n            <span class=\"aui-icon aui-icon-small aui-iconfont-close-dialog\">Close</span>\n        </a>\n         -->\n    </header>\n    <!-- Main dialog content -->\n    <div class=\"aui-dialog2-content bit-fh-parent\" style=\"padding:0; overflow: hidden;\">\n        <notification-list></notification-list>\n\n\n        <div *ngIf=\"apierror\" class=\"aui-message error\">\n            <p class=\"title\">\n                <span class=\"aui-icon icon-error\"></span>\n                <strong>Api Error!</strong>\n            </p>\n        </div><!-- .aui-message -->\n\n\n        <div [hidden]=\"tab != 1\" class=\"tabs-pane active-pane bit-stack-parent bit-fh-child\" >\n            <corkboard-column-choose class=\"bit-stack-child\" [imageurl]=\"imageurl\" width=\"auto\" style=\"width:100%; height:100%\"\n                [numberofcolumns]=\"numberofcolumns\" regexp=\"corkboard.regexp\"> </corkboard-column-choose>\n        </div>\n        <div [hidden]=\"tab != 2\" class=\"tabs-pane active-pane bit-cb-tab\">\n            <corkboard-issue-assign ></corkboard-issue-assign>\n        </div>\n        <div [hidden]=\"tab != 3\" class=\"tabs-pane active-pane bit-cb-tab\" style=\"padding:2em;\">\n            <p *ngFor=\"let e of corkboard.logentries\">{{e}}</p>\n        </div>\n\n        <div class=\"bit-cb-processing\" [hidden]=\"!corkboard.isprocessing\">\n            <div style=\"opacity: 1; margin-left: -100px; margin-top: -100px; top: 50%; left:50%; position: absolute;\">\n                <div class=\"icon-spin1 animate-spin\" style=\"font-size: 128px;\"></div>\n            </div>\n        </div>\n    </div>\n\n    <!-- Dialog footer\n        position: relative  to break overflow hidden for popup see: position:fixed\n     -->\n    <footer class=\"aui-dialog2-footer\" style=\"position:relative\" >\n        <!-- Actions to render on the right of the footer -->\n        <div class=\"aui-dialog2-footer-actions\">\n         <div *ngIf=\"tab == 1 && columnsAvailable\" style=\"display:inline-block; margin-right: 10px\">\n                <button  class=\"aui-button\" type=\"button\" (click)=\"modColumns(1)\" ><span class=\"aui-icon aui-icon-small aui-iconfont-list-add\"></span></button>\n                <span [title]=\"'Columns'\" style=\"margin: 0.25em;\"><b>{{numberofcolumns}}</b></span>\n                <button  class=\"aui-button\" style=\"margin: 0;\"  type=\"button\" (click)=\"modColumns(-1)\" ><span class=\"aui-icon aui-icon-small aui-iconfont-list-remove\"></span></button>\n            </div>\n         <corkboard-upload *ngIf=\"tab == 1\" (onFileLoaded)=\"onFileLoaded($event)\"><i class=\"icon-upload\"></i>Choose Image</corkboard-upload>\n\n            <div *ngIf=\"tab == 2\" style=\"display:inline-block\">\n                <button (click)=\"applyChanges()\" class=\"aui-button aui-button-primary\">Apply Changes</button>\n            </div>\n            <button (click)=\"$event.preventDefault(); dismiss()\" id=\"dialog-close-button\" class=\"aui-button aui-button-link\" resolved=\"\">Close</button>\n        </div>\n        <!-- Hint text is rendered on the left of the footer -->\n        <div class=\"aui-dialog2-footer-hint\">\n            <div class=\"aui-buttons\" style=\"margin-right:20px;\">\n                <button (click)=\"setTab(1)\" [ngClass]=\"{'cb-btn-selected' : tab == 1}\" class=\"aui-button\">Corkboard</button>\n                <button (click)=\"setTab(2)\" [ngClass]=\"{'cb-btn-selected' : tab == 2}\" class=\"aui-button\">Digital Board</button>\n            </div>\n        </div>\n    </footer>\n</section>\n  `,\n})\n\nexport class CorkboardComponent implements OnInit, OnDestroy {\n\n    columnSubscription: Subscription;\n\n    numberofcolumns = 3;\n    imageurl;\n    columns = [];\n    columnsAvailable: boolean = false;\n    tab = 1;\n    state = {};\n    private corkboardSubscription: Subscription;\n\n    constructor(\n        public corkboard: CorkboardService,\n        private env: EnvService,\n        private storage: Storage,\n        private zone: NgZone,\n    ) {\n        var cols = this.storage.get(this.env.storageKey(\"numberofcolumns\"));\n        if (cols) {\n            this.numberofcolumns = parseInt(cols);\n            this.modColumns(0);\n        }\n    }\n\n    ngOnInit() {\n        this.columnSubscription = this.corkboard.columns.subscribe(columns => {\n            this.columns = columns || [];\n            this.columnsAvailable = columns.length > 0;\n        });\n    }\n    ngOnDestroy() {\n        this.columnSubscription.unsubscribe();\n    }\n    dismiss() {\n        var AP = window['AP'];\n        AP.require('dialog', function (dialog) {\n            dialog.close();\n        });\n    }\n\n    applyChanges() {\n        this.corkboard.applyChanges();\n    }\n\n    setTab(tab) {\n        this.zone.run(() => this.tab = tab);\n    }\n\n    onFileLoaded(dataurl: string) {\n        this.imageurl = dataurl;\n    }\n\n    modColumns(v) {\n        var cols = this.numberofcolumns + v;\n        if (cols > 10) cols = 10;\n        if (cols < 2) cols = 2;\n        this.numberofcolumns = cols;\n        this.storage.set(this.env.storageKey(\"numberofcolumns\"), this.numberofcolumns);\n    }\n}\n","import { Component, EventEmitter, Output } from '@angular/core';\n// <input type=\"file\" accept=\"image/*\" id=\"capture\">\n@Component({\n    selector: 'corkboard-upload',\n    template: `\n  <label class=\"aui-button\" ondragover=\"return false;\"\n    (drop)=\"handleDrop($event)\">\n    <ng-content></ng-content>\n    <input style=\"display: none;\" type=\"file\" name=\"file\" accept=\"image/*\"\n         (change)=\"handleInputChange($event)\">\n   </label>\n   <label class=\"aui-button\" ondragover=\"return false;\"\n    (drop)=\"handleDrop($event)\">\n    <span title=\"Take Picture\"><i class=\"icon-camera\"></i></span>\n\n    <input style=\"display: none;\" type=\"file\" name=\"file\" accept=\"image/*\"\n         capture=\"camera\" (change)=\"handleInputChange($event)\">\n   </label>\n\n  `,\n})\n\nexport class CorkboardUploadComponent {\n\n    loaded: boolean = false;\n    dataurl: string = '';\n    @Output() onFileLoaded = new EventEmitter<string>();\n\n    handleDrop(e) {\n        e.preventDefault();\n        this.handleInputChange(e);\n    }\n\n    handleInputChange(e) {\n        var file = e.dataTransfer ? e.dataTransfer.files[0] : e.target.files[0];\n\n        var pattern = /image-*/;\n        var reader = new FileReader();\n\n        if (!file.type.match(pattern)) {\n            alert('invalid format');\n            return;\n        }\n\n        this.loaded = false;\n\n        reader.onload = this._handleReaderLoaded.bind(this);\n        reader.readAsDataURL(file);\n    }\n\n    _handleReaderLoaded(e) {\n        var reader = e.target;\n        this.dataurl = reader.result;\n        this.loaded = true;\n        this.onFileLoaded.emit(this.dataurl);\n    }\n}\n","import { HostListener, Component, Input, Output, EventEmitter, OnInit, OnDestroy, Injectable, ViewChild, ElementRef } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\n\nimport config from '../config';\n\nimport {\n    CorkboardService,\n    Upload\n} from '../services';\n\n@Component({\n    selector: 'corkboard-column-choose',\n    template: `\n    <div #container class=\"bit-cb\"> <!--[style.width.px]=\"_width\">  [style.height.px]=\"_height\" >-->\n        <canvas ondragover=\"return false;\" (drop)=\"upload.handleEvent($event)\" style=\"display: block\" #cbcanvas></canvas>\n        <div ondragover=\"return false;\" (drop)=\"upload.handleEvent($event)\"\n            col-dragger [hidden]=\"!pictureLoaded\"\n            [width]=\"_width\" [height]=\"_cheight\" [numberofcolumns]=\"_numberofcolumns\" (updated)=\"columnWidthUpdated($event)\" (changed)=\"columnWidthChanged($event)\" >\n        </div>\n        <div  ondragover=\"return false;\" (drop)=\"upload.handleEvent($event)\" class=\"bit-cb-nopicture\" [hidden]=\"pictureLoaded\">\n            <i class=\"icon-camera\"></i>\n        </div>\n\n    </div>\n  `\n})\n\nexport class CorkboardColumnChooseComponent implements OnInit, OnDestroy {\n\n    private _width: number;\n    private _height: number;\n    private _cheight: number;\n\n    private image: any;\n    private data: any;\n\n    private autoWidth: boolean;\n    private scale: number;\n    private ratio: number;\n\n    columns: Array<any>;\n    draggerPositions: Array<any>;\n\n    @Output() onColumnsAvailable = new EventEmitter<Array<any>>();\n\n    issues: Array<any>;\n    annotations: Array<any>;\n\n    processing: boolean = false;\n    apierror: string;\n\n    @Input() regexp: string; //  = '^(STORYMAP|AG|AC|DEMO|SUC|BIT)-(\\\\d+)$';\n\n    @ViewChild('cbcanvas')\n    cbcanvas: ElementRef\n\n    @ViewChild('container')\n    container: ElementRef\n\n    private context: CanvasRenderingContext2D;\n    private canvas: HTMLCanvasElement;\n\n    private _imageurl = null;\n    public pictureLoaded: boolean = false;\n    _numberofcolumns: number = 3;\n\n    @Output() onImageLoaded = new EventEmitter<[Number, Number]>();\n\n    private target: any;\n    private startX: number;\n    private dragging: boolean = false;\n\n\n    constructor(\n        private corkboard: CorkboardService,\n        public upload: Upload\n    ) {\n        upload.data.subscribe(\n            (image) => {\n                this.image = image;\n                this.processImage(true);\n            }\n        );\n    }\n\n    get numberofcolumns(): number {\n        return this._numberofcolumns;\n    }\n\n\n    @HostListener('window:resize', ['$event'])\n    onResize(event) {\n        if (this.autoWidth) {\n            if (this.container.nativeElement.clientWidth != 0) {\n                this._width = this.container.nativeElement.clientWidth;\n                this._cheight = this.container.nativeElement.clientHeight;\n                if (this.image) this.processImage(false);\n            }\n        }\n    }\n\n    @Input()\n    set width(width) {\n        this.autoWidth = width == 'auto';\n        this._width = this.autoWidth ? this.container.nativeElement.clientWidth : width;\n        this._cheight = this.container.nativeElement.clientHeight;\n    }\n\n    @Input()\n    set numberofcolumns(numberofcolumns: number) {\n        if (numberofcolumns > 0 && numberofcolumns < 10) {\n            this._numberofcolumns = numberofcolumns;\n        }\n    }\n\n    @Input()\n    set imageurl(imageurl: string) {\n        if (imageurl == undefined) return;\n        new Promise((resolve, reject) => {\n            const image = new Image();\n            image.onload = () => resolve(image);\n            image.onerror = (e) => reject(e);\n            image.src = imageurl;\n\n        })\n            .then(image => {\n                this.image = image;\n                this.processImage(true);\n            })\n            .catch(e => console.log(\"error loading image: \" + e));\n    }\n\n\n    ngOnInit() {\n        this.canvas = this.cbcanvas.nativeElement;\n        this.context = this.canvas.getContext(\"2d\");\n        this.corkboard.data.subscribe(\n            data => {\n                this.newIssues(data)\n            }\n        );\n    }\n\n    ngOnDestroy() {\n    }\n\n    columnWidthUpdated(event) {\n        this.draggerPositions = event.columns;\n        this.applyIssues()\n    }\n    columnWidthChanged(event) {\n        let col = event.column;\n        this.draggerPositions[col.id] = col;\n        this.applyIssues()\n    }\n\n    newIssues(data) {\n        this.data = data;\n        this.markIssues();\n    }\n\n    markIssues() {\n        if (this.data) {\n            // hilight keys in canvas\n            var MARK_OK_COLOR = \"rgba(0, 255, 0, 0.5)\";\n            var MARK_FAIL_COLOR = \"rgba(255, 0, 0, 0.5)\";\n            let context = this.context;\n            context.restore();\n            this.data.keys.map(key => {\n                var vertices = key.boundingBox; //key.vertices;\n                context.beginPath();\n                context.moveTo(vertices[0].x * this.ratio, vertices[0].y * this.ratio)\n                for (var i = 1; i < vertices.length; i++) {\n                    context.lineTo(vertices[i].x * this.ratio, vertices[i].y * this.ratio);\n                }\n                context.closePath();\n                var color = key.issue ? MARK_OK_COLOR : MARK_FAIL_COLOR;\n                context.fillStyle = color;\n                context.strokeStyle = color;\n                context.fill();\n                context.stroke();\n\n            })\n            this.applyIssues();\n        }\n    }\n\n    processImage(detectIssues: boolean) {\n        let img = this.image;\n        this.pictureLoaded = true;\n        this.processing = true;\n        this.apierror = null;\n        this.ratio = this._width / img.width;\n        this.scale = img.width / this._width;\n        this._height = img.height * this.ratio;\n        this.canvas.width = this._width;\n        this.canvas.height = this._height;\n        this.context.drawImage(img, 0, 0, this._width, this._height);\n        this.onImageLoaded.emit([this._width, this._height]);\n        if (detectIssues) {\n            this.corkboard.detectIssues(img, this.regexp);\n        } else {\n            this.markIssues();\n        }\n\n    }\n\n    applyIssues() {\n        let arr = [];\n        var first = this.draggerPositions[0];\n\n        arr.push({ id: 0, x: 0, width: first.x });\n        this.draggerPositions.forEach((x) => {\n            arr.push(Object.assign({}, x));\n        })\n        var id = 0;\n        arr.map((c) => { c.id = id++ });\n        arr.map((c) => { c.x = c.x * this.scale });\n        for (var i = 0; i < arr.length; i++) {\n            if (i == (arr.length - 1)) {\n                arr[i].width = this._width * this.scale - arr[i].x;\n            } else {\n                arr[i].width = arr[i + 1].x - arr[i].x;\n            }\n        }\n        this.issues = this.corkboard.applyIssues(arr);\n        this.onColumnsAvailable.emit(this.issues);\n    }\n\n}\n","\n\nimport { Component, SimpleChanges, Input, Output, EventEmitter, OnInit, OnDestroy, Injectable, ChangeDetectionStrategy } from '@angular/core';\nimport { FormGroup, FormControl,Validators } from '@angular/forms';\nimport { Subscription } from 'rxjs/Subscription';\n\nimport { CorkboardColumnChooseComponent } from './corkboard-column-choose.component';\nimport { CorkboardComponent } from './corkboard.component';\nimport { CorkboardPrintIssuesComponent } from './corkboard-print-issues.component';\n\n\nimport { TIssueId, IIssue } from '../interfaces/issue.interface';\n\nimport config from '../config';\n\nimport { CorkboardService, EnvService, IssueService } from '../services';\n\n@Component({\n    selector: 'corkboard-issue-assign',\n    template: `\n        <div class=\"cb-issues-assign\" >\n            <ul class=\"bit-corkboard-ul\">\n                <li *ngFor=\"let col of columns\">\n                    <div>\n                        <div *ngIf=\"corkboard.transition.type == 'STATUS'\" class=\"btn-group\" style=\"width:100%; margin-bottom:1.5em;\">\n                            <button class=\"btn btn-secondary btn-sm dropdown-toggle\" style=\"width:100%\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n                                <div *ngIf=\"col.transition\" class=\"cb-issues-assign-dropdown-text\">{{col.transition.name}}</div>\n                                <div *ngIf=\"!col.transition\" class=\"cb-issues-assign-dropdown-text\">Choose Transition</div>\n                            </button>\n                            <ul class=\"dropdown-menu\">\n                                <li class=\"dropdown-item\" (click)=\"col.transition=transition\" *ngFor=\"let transition of transitions\">\n                                    {{transition.name}}\n                                </li>\n                                <li class=\"dropdown-divider\"></li>\n                                <li class=\"dropdown-item\" (click)=\"col.transition=null\">\n                                    No Transition\n                                </li>\n                            </ul>\n                        </div>\n                        <div *ngIf=\"corkboard.transition.type == 'EPIC'\" class=\"btn-group\" style=\"width:100%; margin-bottom:1.5em;\">\n                            <button class=\"btn btn-secondary btn-sm dropdown-toggle\" style=\"width:100%\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n                                <div *ngIf=\"col.epic\" class=\"cb-issues-assign-dropdown-text\">{{col.epic.name | ifEmpty:col.epic.summary}}</div>\n                                <div *ngIf=\"!col.epic\" class=\"cb-issues-assign-dropdown-text\">Choose Epic</div>\n                            </button>\n                            <ul class=\"dropdown-menu\">\n                                <li class=\"dropdown-item\" (click)=\"col.epic=epic\" *ngFor=\"let epic of epics\">\n                                    {{epic.name | ifEmpty:epic.summary}}\n                                </li>\n                                <li class=\"dropdown-divider\"></li>\n                                <li class=\"dropdown-item\" (click)=\"col.epic=null\">\n                                    No Epic\n                                </li>\n\n                            </ul>\n                        </div>\n                        <div *ngIf=\"corkboard.transition.type == 'POINTS'\" class=\"btn btn-secondary\" style=\"width: 100%; margin-bottom: 1.5em; padding: 5px;\">\n                            <p>Story Points</p>\n                            <input type=\"number\"\n                                min=\"0\" step=\"1\"\n                                style=\"box-sizing: border-box; width: 100%;\"\n                                [ngModel]=\"col.storypoints\"\n                                (ngModelChange)=\"onStoryPointsChange($event, col)\" >\n\n                        </div>\n                    </div>\n                    <ul class=\"bit-corkboard-ul\">\n                        <li *ngFor=\"let issue of col.issues\" >\n                            <div [class]=\"'card bit-card-issue bit-corkboard-card'\">\n                                <div class=\"card-block bit-card-issue-header clearfix\">\n                                    <div class=\"float-left bit-card-issue-title\">\n                                        <img [src]=\"issue.fields['issuetype'].iconUrl\" [title]=\"issue.fields['issuetype'].name\" class=\"bit-img-icon rounded\" />\n                                        <img [src]=\"issue.fields['priority'].iconUrl\" [title]=\"issue.fields['priority'].name\" class=\"bit-img-icon rounded\" />\n                                        <a [target]=\"issue.id\" [href]=\"env.urlIssue(issue.key)\" class=\"link-colorless\">{{issue.key}}</a>\n                                    </div>\n                                    <div class=\"float-right\">\n                                        <span *ngIf=\"issue.state.processing\" [title]=\"issue.state.processing.title\" [ngClass]=\"'aui-icon aui-icon-' + (issue.state.processing.state)\">&nbsp;</span>\n                                    </div>\n                                </div>\n                                <div class=\"card-block bit-card-issue-body clearfix\">\n                                    {{issue.fields.summary}}\n                                </div>\n                                <div class=\"card-block bit-card-issue-footer\">\n                                    <div class=\"float-right\">\n                                        <span [title]=\"'Reporter: ' + issue.fields.reporter.displayName\"><img class=\"bit-img-icon rounded\" [src]=\"issue.fields.reporter.avatarUrl\" /></span>\n                                        <span *ngIf=\"issue.fields.assignee\" [title]=\"'Assignee: ' + issue.fields.assignee.displayName\"><img class=\"bit-img-icon rounded\" [src]=\"issue.fields.assignee.avatarUrl\" /></span>\n                                        <span [title]=\"issue.fields.points + ' story points'\">{{issue.fields.points}}</span>\n                                    </div>\n                                </div>\n                            </div>\n                        </li>\n                        <li>\n                           <corkboard-choose-issue (submit)=\"addIssue($event, col)\"></corkboard-choose-issue>\n                        </li>\n                    </ul>\n                </li>\n            </ul>\n        </div>`\n})\n\nexport class CorkboardIssueAssignComponent implements OnInit, OnDestroy {\n\n    private transitions = [];\n    private epics = [];\n    private columns = [];\n\n    corkboardSubscription: Subscription;\n    columnSubscription: Subscription;\n\n    constructor(\n        public corkboard: CorkboardService,\n        private issues: IssueService,\n        private env: EnvService,\n    ) { }\n\n\n    ngOnInit() {\n        this.corkboardSubscription = this.corkboard.data.subscribe(data => {\n            this.transitions = data.transitions;\n            this.epics = data.epics;\n        });\n        this.columnSubscription = this.corkboard.columns.subscribe(data => {\n            this.columns = data;\n        });\n    }\n    addIssue(id, col) {\n        this.corkboard.addIssue(col, id);\n    }\n    ngOnDestroy() {\n        this.corkboardSubscription.unsubscribe();\n        this.columnSubscription.unsubscribe();\n    }\n\n    // col.storypoints < 0 ? col.storypoints = 0 : col.storypoints = $event;\n    onStoryPointsChange(event, col) {\n        col.storypoints < 0 ? col.storypoints = 0 : col.storypoints = event;\n    }\n\n\n}\n","import { ElementRef, ViewChild, AfterViewChecked, Component, Input, Output, EventEmitter } from '@angular/core';\nimport { TIssueId, IIssue } from '../interfaces/issue.interface';\nimport {\n    CorkboardService,\n    IssueService,\n} from '../services';\n\n@Component({\n    selector: 'corkboard-print-issues',\n    styles: [`\n    @media screen {\n        #printpage {display:none;}\n        .not-on-screen {display:none;}\n    }\n    @media print {\n        #printpage {display: block;}\n        .doNotPrint {display: none;}\n    }\n  `],\n    template: `\n        <a style=\"border-radius: 0; border-right: 0;\" class=\"aui-button\" title=\"Print Issues\" (click)=\"startPrinting()\">\n            <span *ngIf=\"!printing\" class=\"icon-print\"></span>\n            <span *ngIf=\"printing\" class=\"icon-spin1 animate-spin\"></span>\n        </a>\n        <div #print_div id=\"printpage\" class=\"bit-corkboard-print-issues not-on-screen\">\n            <div class=\"bit-corkboard-print-cardcontainer\">\n                <div class=\"bit-corkboard-print-mark\" *ngFor=\"let issue of boardissues\">\n                    <div  class=\"bit-corkboard-print-card\">\n                        <label>\n                            <img [src]=\"issue.fields['issuetype'].iconUrl\" [title]=\"issue.fields['issuetype'].name\" class=\"img-icon rounded\" />\n                            {{issue.fields.issuetype.name}}\n                        </label>\n                        <h3 class=\"bit-corkboard-print-key\"><b>{{issue.key}}</b></h3>\n                        <div class=\"bit-corkboard-print-sd-wrapper\">\n                            <p class=\"bit-corkboard-print-summary\">{{issue.fields.summary}}</p>\n                            <p class=\"bit-corkboard-print-description\">{{issue.fields.description}}</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n  `\n})\n\nexport class CorkboardPrintIssuesComponent {\n\n    @Input() mode: string;\n    @Input() standard: string;\n    @Input() popTitle: string;\n    @Input() printStyle: string;\n    @Input() printCSS: string[] = ['css/vendor.css', 'css/main.css'];\n    @Output() printComplete: EventEmitter<any>;\n\n    @ViewChild('print_div') printHTML: ElementRef; //HTMLDivElement;\n\n\n    private modes: any;\n    private standards: any;\n    private printWindow: Window;\n    private printDoc: Document;\n\n    private printing: boolean = false;\n    private printed: boolean = false;\n    private boardissues: any[];\n\n    constructor(\n        private corkboard: CorkboardService,\n        private issues: IssueService,\n    ) {\n\n\n        this.modes = {\n            iframe: 'iframe',\n            popup: 'popup'\n        };\n        this.standards = {\n            strict: 'strict',\n            loose: 'loose',\n            html5: 'html5'\n        };\n        this.mode = this.modes.iframe;\n        this.standard = this.standards.html5;\n        this.popTitle = '';\n        this.printComplete = new EventEmitter<any>(false);\n    }\n\n    public ngAfterViewChecked(): void {\n        if (this.boardissues && !this.printed) {\n            console.log(\"start printing:\", this.boardissues);\n\n            this.print();\n            this.printed = true;\n        }\n    }\n\n    startPrinting() {\n        if (this.printing) return;\n        setTimeout(() => {\n            this.printing = true;\n        }, 0);\n        this.issues.listBoard(this.corkboard.board.id).subscribe(\n            (data) => {\n                this.printed = false;\n                this.boardissues = data.issues;\n            },\n            (err) => {\n            }\n        );\n    }\n\n    private write(): any {\n        this.printDoc.open();\n        this.printDoc.write(`${this.docType()}${this.getHead()}${this.getBody()}`);\n        this.printDoc.close();\n    }\n\n    private docType(): string {\n        if (this.mode === this.modes.iframe) {\n            return \"\";\n        }\n\n        if (this.standard === this.standards.html5) {\n            return \"<!DOCTYPE html>\";\n        }\n\n        let transitional: string = this.standard === this.standards.loose ? 'Transitional' : '',\n            dtd: string = this.standard === this.standards.loose ? 'loose' : 'strict';\n        return '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01' + transitional + '//EN\" \"http://www.w3.org/TR/html4/' + dtd + '.dtd\">';\n    }\n\n    private getHead(): string {\n        let styles: string = '',\n            links: string = '';\n\n        if (this.printCSS) {\n            this.printCSS.forEach((url) => {\n                links += `<link href=\"${url}\" rel=\"stylesheet\">`;\n            });\n        }\n\n        if (this.printStyle) {\n            styles = `<style>${this.printStyle}</style>`;\n        }\n\n        return `<head><title>${this.popTitle}</title>${styles}${links}</head>`;\n    }\n\n    private getBody() {\n        let html: string = '';\n        let native = this.printHTML.nativeElement;\n        if (native) {\n            if (native.outerHTML) {\n                html = native.outerHTML;\n            } else {\n                html = native;\n            }\n        } else {\n            throw 'Invalid [printHTML]';\n        }\n        let script = `\n        <script>\n            document.addEventListener(\"DOMContentLoaded\", function(event) {\n                console.log(\"document ready\");\n                window.print();\n            });\n        </script>\n        `\n        return `<body>${html}${script}</body>`;\n    }\n\n    private startPrint() {\n        let timeoutId: number = window.setTimeout(() => {\n            this.printWindow.focus();\n            /*\n            this.printWindow.print();\n            if (this.mode === this.modes.popup) {\n                setTimeout(() => {\n                    this.printWindow.close()\n                }, 500);\n            }\n            */\n            window.clearTimeout(timeoutId);\n            setTimeout(() => {\n                this.printing = false;\n            }, 0);\n            this.printComplete.emit();\n        }, 500);\n    }\n\n    private createIframe() {\n        let oldFrame: any = document.getElementsByClassName('ng2-print-frame');\n        if (oldFrame.length > 0) {\n            oldFrame[0].parentNode.removeChild(oldFrame[0]);\n        }\n        try {\n            let printIframe: any = document.createElement('iframe');\n            document.body.appendChild(printIframe);\n            printIframe.style.position = 'absolute';\n            printIframe.style.border = '0px';\n            printIframe.style.width = '0px';\n            printIframe.style.height = '0px';\n            printIframe.style.left = '0';\n            printIframe.style.top = '0';\n            printIframe.style.zIndex = '-1';\n            printIframe.className = \"ng2-print-frame\";\n            this.printWindow = printIframe.contentWindow;\n            this.printDoc = printIframe.contentDocument ? printIframe.contentDocument : (printIframe.contentWindow ? printIframe.contentWindow.document : printIframe.document);\n        }\n        catch (e) {\n            throw e + \". iframes may not be supported in this browser.\";\n        }\n\n        if (!this.printWindow) {\n            throw \"Cannot find window.\";\n        }\n\n        if (!this.printDoc) {\n            throw \"Cannot find document.\";\n        }\n    }\n\n    private createPopup() {\n        let windowAttr = `location=yes,statusbar=no,directories=no,menubar=no,titlebar=no,toolbar=no,dependent=no`;\n        windowAttr += `,width=${window.screen.width},height=${window.screen.height};`;\n        windowAttr += \",resizable=yes,personalbar=no,scrollbars=yes\";\n        let newWin = window.open(\"\", \"_blank\", windowAttr);\n        this.printWindow = newWin;\n        this.printDoc = newWin.document;\n    }\n\n    private getPrintWindow() {\n        if (this.mode === this.modes.iframe) {\n            this.createIframe();\n        } else if (this.mode === this.modes.popup) {\n            this.createPopup();\n        }\n    }\n\n    print() {\n        let timeoutId: number = window.setTimeout(() => {\n            window.clearTimeout(timeoutId);\n            this.getPrintWindow();\n            console.log(\".write()\")\n            this.write();\n            this.startPrint();\n        }, 500);\n    }\n\n\n}\n","import { CorkboardService } from '../services/corkboard.service';\nimport { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { TIssueId, IIssue } from '../interfaces/issue.interface';\nimport config from '../config';\nimport { EnvService, IssueService } from '../services';\n\n@Component({\n\n    selector: 'corkboard-choose-issue',\n    template: `\n    <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" novalidate>\n        <div  [formControlValidator]=\"form.controls.id\"  [class]=\"'card bit-card-issue bit-corkboard-card'\">\n            <div style=\"display: flex;\" class=\"card-block bit-card-issue-footer\" title=\"Add additional cards to this column!\">\n                <form-typeahead\n                    placeholder=\"Type to search summary...\"\n                    [control]=\"form.controls.id\"\n                    [options]=\"issues.data.list\"\n                    [optionValue]=\"issueValue\"\n                    [optionLabel]=\"issueLabel\"\n                    [optionLabelInput]=\"issueLabelInput\"\n                    (search)=\"issueSearch($event, true)\"\n                ></form-typeahead>\n                <button type=\"submit\" style=\"padding: 0.5rem; margin-left: 0.25rem;\" class=\"btn btn-primary\"><span class=\"aui-icon aui-icon-small aui-iconfont-list-add\"></span></button>\n            </div>\n            <!--<div class=\"modal-footer\">\n\n            </div>-->\n        </div>\n    </form>\n    `,\n\n})\nexport class CorkboardChooseIssueComponent implements OnInit {\n\n    @Output('submit') submitEvent: EventEmitter<any> = new EventEmitter();\n    public form: FormGroup;\n\n    constructor(\n        private issues: IssueService,\n        private corkboard: CorkboardService,\n        private env: EnvService,\n    ) { }\n\n    ngOnInit() {\n        this.form = new FormGroup({\n            id: new FormControl(null, Validators.required),\n        });\n    }\n\n    issueValue = (issue: IIssue) => issue.id;\n    issueLabel = (issue: IIssue) => '<img class=\"bit-img-icon rounded\" src=\"' + issue.fields['issuetype'].iconUrl + '\" /> ' + issue.key;\n    issueLabelInput = (issue: IIssue) => issue.key;\n    issueSearch = (value: string) => value && this.corkboard.issueSearch(value);\n\n    onSubmit() {\n        this.submitEvent.emit(this.form.value.id);\n        this.form.reset();\n    }\n}\n","import { Component, Input, Renderer, ElementRef, ViewChildren, Output, EventEmitter } from '@angular/core';\n\n\n@Component({\n    selector: '[col-dragger]',\n    template: `\n        <div #draggers [draggable]\n                [style.height]=\"_height\"\n                (drag)=\"drag(col, $event)\" (dragEnd)=\"dragEnd(col, $event)\" (dragStart)=\"dragStart(col, $event)\"\n                *ngFor=\"let col of columns\" class=\"icon-resize-horizontal-1 bit-cb-column-dragger\"></div>\n    `\n})\nexport class ColDraggerComponent {\n\n    @Output() changed = new EventEmitter();\n    @Output() updated = new EventEmitter();\n\n    private columns = []\n    private _numberofcolumns = 3;\n    private _width = 800;\n    private _height = 400;\n    private divs: any;\n\n    private min = 0;\n    private max = 0;\n\n    constructor(\n        private el: ElementRef, private renderer: Renderer\n    ) { }\n\n    @Input()\n    set width(width: number) {\n        this._width = width;\n        this.arrangeColumns();\n        this.updateColumnLayout();\n    }\n\n    @Input()\n    set height(height: number) {\n        this._height = height;\n    }\n\n    @Input()\n    set numberofcolumns(numberofcolumns: number) {\n        if (numberofcolumns > 1 && numberofcolumns < 10) {\n            this._numberofcolumns = numberofcolumns;\n            this.arrangeColumns();\n        }\n        this.updateColumnLayout();\n    }\n\n    arrangeColumns() {\n        var columns = [];\n        var colWidth = this._width / this._numberofcolumns;\n        for (var i = 0; i < this._numberofcolumns - 1; i++) {\n            columns.push({\n                x: colWidth * (i + 1),\n                id: i\n            });\n        }\n        this.columns = columns;\n    }\n\n    dragStart(col, event) {\n        var min = 20, max = this._width - 20;\n        if (col.id > 0)\n            min = this.columns[col.id - 1].x + 20;\n\n        if (col.id < (this.columns.length - 1))\n            max = this.columns[col.id + 1].x - 20;\n\n        this.min = min;\n        this.max = max;\n    }\n\n    drag(col, event) {\n        this.setColumn(col, event.x, event.el);\n    }\n\n    dragEnd(col, event) {\n        col.x = this.setColumn(col, event.x, event.el);\n        this.changed.emit({ column: col, columns: this.columns });\n    }\n\n    setColumn(col, x, el) {\n        if (x < this.min) x = this.min;\n        if (x > this.max) x = this.max;\n        this.renderer.setElementStyle(\n            el.nativeElement\n            , 'left', x + 'px');\n        return x;\n    }\n\n    updateColumnLayout() {\n        setTimeout(() => this.setupDivs());\n        this.updated.emit({ columns: this.columns });\n    }\n\n    setupDivs() {\n        this.divs = this.draggableDivs.toArray();\n        for (var i = 0; i < this.columns.length; i++) {\n            this.renderer.setElementStyle(\n                this.divs[i].nativeElement\n                , 'left', this.columns[i].x + 'px');\n        }\n    }\n\n    @ViewChildren('draggers') draggableDivs;\n    ngAfterViewInit() { // or some event handler\n        this.setupDivs()\n    }\n}\n","export * from './dropdown.directive';\nexport * from './draggable.directive';\nexport * from './misc.directive';\n","import { Directive, OnInit, Output, ElementRef, EventEmitter, NgZone } from '@angular/core';\n\n// usage example\n// <div dropdown (onDropdownShown)=\"...\" (onDropdownHidden)=\"...\">...\n@Directive({\n  selector: '[dropdown]',\n})\nexport class DropdownDirective implements OnInit {\n  @Output() onDropdownShow: EventEmitter<any> = new EventEmitter();\n  @Output() onDropdownShown: EventEmitter<any> = new EventEmitter();\n  @Output() onDropdownHide: EventEmitter<any> = new EventEmitter();\n  @Output() onDropdownHidden: EventEmitter<any> = new EventEmitter();\n\n  constructor(\n    private el: ElementRef,\n    private _ngZone: NgZone\n  ) {\n  }\n\n  ngOnInit() {\n    // have to use jQuery binding, other approaches doesn't work for bootstrap events\n\n    $(this.el.nativeElement).on('show.bs.dropdown', e => {\n      this._ngZone.run(() => {\n        this.onDropdownShow.emit(e);\n      });\n    });\n\n    $(this.el.nativeElement).on('shown.bs.dropdown', e => {\n      this._ngZone.run(() => {\n        this.onDropdownShown.emit(e);\n      });\n    });\n\n    $(this.el.nativeElement).on('hide.bs.dropdown', e => {\n      this._ngZone.run(() => {\n        this.onDropdownHide.emit(e);\n      });\n    });\n\n    $(this.el.nativeElement).on('hidden.bs.dropdown', e => {\n      this._ngZone.run(() => {\n        this.onDropdownHidden.emit(e);\n      });\n    });\n  }\n}\n","import { Directive, ElementRef, Renderer, HostListener, Output, EventEmitter } from '@angular/core';\n@Directive({\n  selector: '[draggable]',\n})\nexport class DraggableDirective {\n  private mouseDown: boolean = false;\n  private Δx: number = 0;\n\n  @Output() drag = new EventEmitter();\n  @Output() dragEnd = new EventEmitter();\n  @Output() dragStart = new EventEmitter();\n\n  constructor(\n    private el: ElementRef, private renderer: Renderer\n  ) {\n  }\n\n  touchmoveListenFunc: Function = null;\n  touchendListenFunc: Function = null;\n  touchcancelListenFunc: Function = null;\n\n  @HostListener('mousedown', ['$event'])\n  @HostListener('touchstart', ['$event'])\n  onDragStart(event) {\n    event.preventDefault();\n\n    if (event.touches) {                      // only for touch\n      this.removePreviousTouchListeners();    // avoid mem leaks\n      this.touchmoveListenFunc = this.renderer.listen(event.target, 'touchmove', (e) => { this.onDrag(e); });\n      this.touchendListenFunc = this.renderer.listen(event.target, 'touchend', (e) => { this.removePreviousTouchListeners(); this.onDragEnd(e); });\n      this.touchcancelListenFunc = this.renderer.listen(event.target, 'touchcancel', (e) => { this.removePreviousTouchListeners(); this.onDragEnd(e); });\n    }\n\n    let clientX = event.touches ? event.touches[0].clientX : event.clientX;\n    this.mouseDown = true;\n    this.Δx = clientX - this.el.nativeElement.offsetLeft;\n    if (this.mouseDown) this.dragStart.emit({\n      x: clientX,\n      el: this.el\n    })\n  }\n  @HostListener('document:mousemove', ['$event'])\n  onDrag(event) {\n    let clientX = event.touches ? event.touches[0].clientX : event.clientX;\n    if (this.mouseDown) this.drag.emit({\n      x: clientX - this.Δx,\n      el: this.el\n    })\n  }\n  @HostListener('document:mouseup', ['$event'])\n  onDragEnd(event) {\n    let clientX = event.touches ? event.touches[0].clientX : event.clientX;\n    if (this.mouseDown) this.dragEnd.emit({\n      x: clientX - this.Δx,\n      el: this.el\n    })\n    this.Δx = 0;\n    this.mouseDown = false;\n  }\n\n  removePreviousTouchListeners() {\n    if (this.touchmoveListenFunc !== null)\n      this.touchmoveListenFunc();             // remove previous listener\n    if (this.touchendListenFunc !== null)\n      this.touchendListenFunc();              // remove previous listener\n    if (this.touchcancelListenFunc !== null)\n      this.touchcancelListenFunc();           // remove previous listener\n\n    this.touchmoveListenFunc = null;\n    this.touchendListenFunc = null;\n    this.touchcancelListenFunc = null;\n  }\n\n}\n\n\n","import { OnInit } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\n// highlight \"invalid\" fields (using Bootstrap classes)\n@Directive({ selector: '[formControlValidator]' })\nexport class FormControlValidator implements OnInit {\n\n  @Input('formControlValidator') field: FormControl;\n\n  form: any; // experimental / root form control\n\n  constructor(private el: ElementRef) { this.el = el.nativeElement; };\n\n  _getForm(control) {\n    // find root control recursively\n    return control == control.root ? control : this._getForm(control.root);\n  }\n\n  ngOnInit() {\n    this.form = this._getForm(this.field);\n\n    this._isValid(this.field);\n\n    this.field.statusChanges.subscribe(() => {\n      this._isValid(this.field);\n    });\n\n    this.field.root.statusChanges.subscribe(() => {\n      this._isValid(this.field);\n    });\n  }\n\n  _isValid(field): void {\n    let el: JQuery = $(<any>this.el);\n\n    // @todo we disable submit button when not valid form but we can revert it any time /*&& field.root.submitted*/\n\n    if (!field.valid && (!field.pristine || field.root.submitted)) { // experimental\n      el.addClass('has-danger');\n      el.find('.form-control').addClass('form-control-danger');\n    } else {\n      el.removeClass('has-danger');\n      el.find('.form-control').removeClass('form-control-danger');\n    }\n  }\n}\n","export * from './misc.pipe';\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({name: 'ifEmpty'})\nexport class IfEmptyPipe implements PipeTransform {\n  /**\n   * @param value\n   * @param defaultValue\n   * @returns {string}\n   */\n  transform(value: string, defaultValue: string): string {\n        if (!value || value === null || value === '') {\n            return defaultValue;\n        }\n        return value;\n    }\n}\n\n@Pipe({name: 'truncate'})\nexport class TruncatePipe implements PipeTransform {\n\n  /**\n   *\n   * @param value\n   * @param args\n   *  arg[0] - limitTo value\n   *  arg[1] - suffix\n   * @returns {string}\n   */\n  transform(value: string, ...args: string[]): string {\n    // TODO: should we use suffix when we don't truncate?\n    // TODO: should we use 0 value? now 0 value cause default\n    let limitTo = parseInt(args[0]) || 15;\n    let suffix = args[1] || '...';\n\n    value += '';\n    return value.length <= limitTo ? value : value.substring(0, limitTo) + suffix;\n  }\n}\n\n@Pipe({name: 'pluralize'})\nexport class PluralizePipe implements PipeTransform {\n  /**\n   *\n   * @param value\n   * @param label\n   * @param plural\n   * There are 3 variants of usage:\n   *  with label like 'item' -> returns 'item' for 1 and 'items' for other\n   *  with label like 'child' and plural like 'children' -> returns 'child' for 1 and 'children' for other\n   *  with label like complex object { '0': 'No items', '1': 'Just one', 'other': '{} items' }\n   *    -> returns 'No items' for 0\n   *    -> returns 'Just one' for 1 (and you can specify any other specific count)\n   *    -> returns '8 items' for 8 and etc\n   * @returns {any}\n   */\n  transform(value: number, label: string | Object, plural?: string): string {\n    // TODO: some util func for this isObject checking?\n    if (typeof label == 'object') {\n      let pattern = label[value] ? label[value] : label['other'];\n      return (pattern.indexOf('{}') !== -1) ? pattern.replace('{}', value) : pattern;\n    }\n\n    // TODO: is it normal that we use plural for 0 count?\n    return value == 1 ? <string>label : ( plural ? plural : <string>label + 's');\n  }\n}\n\n@Pipe({name: 'safe'})\nexport class SafePipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {\n    this.sanitizer = sanitizer;\n  }\n\n  transform(value: any) {\n    return this.sanitizer.bypassSecurityTrustStyle(value);\n  }\n}\n","// inspired by: \n// https://github.com/angular/angular/blob/master/modules/%40angular/http/src/backends/xhr_backend.ts\n\nimport { Injectable, NgZone } from '@angular/core';\nimport { Headers, Request, Response } from '@angular/http';\nimport { Connection, ConnectionBackend, XSRFStrategy } from '@angular/http';\nimport { ResponseOptions, ResponseContentType, ResponseType } from '@angular/http';\nimport { ReadyState, RequestMethod } from '@angular/http';\nimport { Observable } from 'rxjs/Observable';\nimport { Observer } from 'rxjs/Observer';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\nconst isSuccess = (status: number): boolean => (status >= 200 && status < 300);\n\nexport class AtlassianConnection implements Connection {\n  request: Request;\n  response: Observable<Response>;\n  readyState: ReadyState;\n\n  constructor(ngZone: NgZone, req: Request, reqAtlassian: any, baseResponseOptions?: ResponseOptions) {\n    this.request = req;\n\n    this.response = new Observable<Response>((responseObserver: Observer<Response>) => {\n      const _req: any = reqAtlassian;\n\n      // RESERVED / TODO: refactor\n      // if (req.withCredentials != null) {\n      //   _req.withCredentials = req.withCredentials;\n      // }\n\n      // success event handler\n      const onSuccess = (xhrText: string, xhrResult: number, xhr: any) => {\n        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n        let status: number = xhr.status === 1223 ? 204 : xhr.status;\n\n        let body: any = null;\n\n        // HTTP 204 means no content\n        if (status !== 204) {\n          // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n          // response/responseType properties were introduced in ResourceLoader Level2 spec\n          // (supported by IE10)\n          body = xhrText;\n\n          // Implicitly strip a potential XSSI prefix.\n          if (typeof body === 'string') {\n            body = body.replace(XSSI_PREFIX, '');\n          }\n        }\n\n        // fix status code when it is 0 (0 status is undocumented).\n        // Occurs when accessing file resources or on Android 4.1 stock browser\n        // while retrieving files from application cache.\n        if (status === 0) {\n          status = body ? 200 : 0;\n        }\n\n        const headers: Headers = Headers.fromResponseHeaderString(xhr.getAllResponseHeaders());\n        // IE 9 does not provide the way to get URL of response\n        const url = null; // OBSOLETED / angular4+ / getResponseURL(xhr) || req.url;\n        const statusText: string = xhr.statusText || 'OK';\n\n        let responseOptions = new ResponseOptions({body, status, headers, statusText, url});\n        if (baseResponseOptions != null) {\n          responseOptions = baseResponseOptions.merge(responseOptions);\n        }\n\n        const response = new Response(responseOptions);\n        response.ok = isSuccess(status);\n\n        if (response.ok) {\n          ngZone.run(() => {\n            responseObserver.next(response);\n            responseObserver.complete();\n          });\n\n          return;\n        }\n\n        ngZone.run(() => {\n          responseObserver.error(response);\n        });\n      };\n\n      // error event handler\n      const onError = (err: any) => {\n        let responseOptions = new ResponseOptions({\n          body: err['responseText'],\n          type: ResponseType.Error,\n          status: err['status'],\n          statusText: err['statusText'],\n        });\n\n        if (baseResponseOptions != null) {\n          responseOptions = baseResponseOptions.merge(responseOptions);\n        }\n\n        responseObserver.error(new Response(responseOptions));\n      };\n\n      this.setDetectedContentType(req, _req);\n\n      if (req.headers == null) {\n        req.headers = new Headers();\n      }\n\n      if (!req.headers.get('Accept')) {\n        req.headers.append('Accept', 'application/json, text/plain, */*');\n      }\n\n      _req({\n        url: req.url,\n        data: req.getBody(),\n        type: RequestMethod[req.method].toUpperCase(),\n        contentType: req.headers.get('Content-Type'),\n        headers: req.headers.keys().reduce((output, key) => {\n          output[key] = req.headers.get(key);\n          return output;\n        }, {}),\n        success: onSuccess,\n        error: onError,\n      });\n\n      return () => {\n        // RESERVED / TODO: refactor\n        //_req.abort();\n      };\n    });\n  }\n\n  setDetectedContentType(req: any /** Angular Request */, _req: any /** Atlassian Request */) {\n    // Skip if a custom Content-Type header is provided\n    if (req.headers != null && req.headers.get('Content-Type') != null) {\n      _req.contentType = req.headers.get('Content-Type');\n      return;\n    }\n\n    // Set the detected content type\n    switch (req.contentType) {\n      case 'NONE': // Content.NONE\n        break;\n      case 'JSON': // Content.JSON\n        _req.contentType = 'application/json';\n        break;\n      case 'FORM': // Content.FORM\n        _req.contentType = 'application/x-www-form-urlencoded;charset=UTF-8';\n        break;\n      case 'TEXT': // Content.TEXT\n        _req.contentType = 'text/plain';\n        break;\n      case 'BLOB': // Content.BLOB\n        const blob = req.blob();\n        if (blob.type) {\n          _req.contentType = blob.type;\n        }\n        break;\n    }\n  }\n}\n\n@Injectable()\nexport class AtlassianBackend implements ConnectionBackend {\n  private _req: any;\n\n  constructor(\n    private _baseResponseOptions: ResponseOptions,\n    // RESERVED / private _xsrfStrategy: XSRFStrategy\n    private _ngZone: NgZone\n  ) {\n    if (!window['AP']) {\n      throw new Error('Atlassian API is not detected');\n    }\n\n    window['AP'].require('request', request => {\n      this._req = request;\n    });\n  }\n\n  createConnection(request: Request): AtlassianConnection {\n    // RESERVED / this._xsrfStrategy.configureRequest(request);\n    return new AtlassianConnection(this._ngZone, request, this._req, this._baseResponseOptions);\n  }\n}\n","// inspired by: \n// https://github.com/angular/angular/blob/master/modules/%40angular/http/src/backends/xhr_backend.ts\n\nimport { Injectable } from '@angular/core';\nimport { Headers, Request, Response } from '@angular/http';\nimport { Connection, ConnectionBackend, XSRFStrategy } from '@angular/http';\nimport { ResponseOptions, BrowserXhr, XHRConnection } from '@angular/http';\n\n// import { ResponseOptions, ResponseContentType, ResponseType } from '@angular/http';\n// import { ReadyState, RequestMethod } from '@angular/http';\n// import { Observable } from 'rxjs/Observable';\n// import { Observer } from 'rxjs/Observer';\n\n// const XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n// const isSuccess = (status: number): boolean => (status >= 200 && status < 300);\n\n// export class MicrosoftConnection implements Connection {\n//   request: Request;\n//   response: Observable<Response>;\n//   readyState: ReadyState;\n\n//   constructor(req: Request, reqMicrosoft: any, baseResponseOptions?: ResponseOptions) {\n//     this.request = req;\n\n//     this.response = new Observable<Response>((responseObserver: Observer<Response>) => {\n//       const _req: any = reqMicrosoft;\n\n//       // RESERVED / TODO: refactor\n//       // if (req.withCredentials != null) {\n//       //   _req.withCredentials = req.withCredentials;\n//       // }\n\n//       // success event handler\n//       const onSuccess = (xhrText: string, xhrResult: number, xhr: any) => {\n//         // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n//         let status: number = xhr.status === 1223 ? 204 : xhr.status;\n\n//         let body: any = null;\n\n//         // HTTP 204 means no content\n//         if (status !== 204) {\n//           // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n//           // response/responseType properties were introduced in ResourceLoader Level2 spec\n//           // (supported by IE10)\n//           body = xhrText;\n\n//           // Implicitly strip a potential XSSI prefix.\n//           if (typeof body === 'string') {\n//             body = body.replace(XSSI_PREFIX, '');\n//           }\n//         }\n\n//         // fix status code when it is 0 (0 status is undocumented).\n//         // Occurs when accessing file resources or on Android 4.1 stock browser\n//         // while retrieving files from application cache.\n//         if (status === 0) {\n//           status = body ? 200 : 0;\n//         }\n\n//         const headers: Headers = Headers.fromResponseHeaderString(xhr.getAllResponseHeaders());\n//         // IE 9 does not provide the way to get URL of response\n//         const url = null; // OBSOLETED / angular4+ / getResponseURL(xhr) || req.url;\n//         const statusText: string = xhr.statusText || 'OK';\n\n//         let responseOptions = new ResponseOptions({body, status, headers, statusText, url});\n//         if (baseResponseOptions != null) {\n//           responseOptions = baseResponseOptions.merge(responseOptions);\n//         }\n\n//         const response = new Response(responseOptions);\n//         response.ok = isSuccess(status);\n\n//         if (response.ok) {\n//           responseObserver.next(response);\n//           responseObserver.complete();\n//           return;\n//         }\n\n//         responseObserver.error(response);\n//       };\n\n//       // error event handler\n//       const onError = (err: any) => {\n//         let responseOptions = new ResponseOptions({\n//           body: err['responseText'],\n//           type: ResponseType.Error,\n//           status: err['status'],\n//           statusText: err['statusText'],\n//         });\n\n//         if (baseResponseOptions != null) {\n//           responseOptions = baseResponseOptions.merge(responseOptions);\n//         }\n\n//         responseObserver.error(new Response(responseOptions));\n//       };\n\n//       this.setDetectedContentType(req, _req);\n\n//       if (req.headers == null) {\n//         req.headers = new Headers();\n//       }\n\n//       if (!req.headers.get('Accept')) {\n//         req.headers.append('Accept', 'application/json, text/plain, */*');\n//       }\n\n//       _req({\n//         url: req.url,\n//         data: req.getBody(),\n//         type: RequestMethod[req.method].toUpperCase(),\n//         contentType: req.headers.get('Content-Type'),\n//         headers: req.headers.keys().reduce((output, key) => {\n//           output[key] = req.headers.get(key);\n//           return output;\n//         }, {}),\n//         success: onSuccess,\n//         error: onError,\n//       });\n\n//       return () => {\n//         // RESERVED / TODO: refactor\n//         //_req.abort();\n//       };\n//     });\n//   }\n\n//   setDetectedContentType(req: any /** Angular Request */, _req: any /** Microsoft Request */) {\n//     // Skip if a custom Content-Type header is provided\n//     if (req.headers != null && req.headers.get('Content-Type') != null) {\n//       _req.contentType = req.headers.get('Content-Type');\n//       return;\n//     }\n\n//     // Set the detected content type\n//     switch (req.contentType) {\n//       case 'NONE': // Content.NONE\n//         break;\n//       case 'JSON': // Content.JSON\n//         _req.contentType = 'application/json';\n//         break;\n//       case 'FORM': // Content.FORM\n//         _req.contentType = 'application/x-www-form-urlencoded;charset=UTF-8';\n//         break;\n//       case 'TEXT': // Content.TEXT\n//         _req.contentType = 'text/plain';\n//         break;\n//       case 'BLOB': // Content.BLOB\n//         const blob = req.blob();\n//         if (blob.type) {\n//           _req.contentType = blob.type;\n//         }\n//         break;\n//     }\n//   }\n// }\n\n@Injectable()\nexport class MicrosoftBackend implements ConnectionBackend {\n  private _token: any;\n  private _tokenHeader: string;\n\n  constructor(\n    private _browserXHR: BrowserXhr,\n    private _baseResponseOptions: ResponseOptions,\n    private _xsrfStrategy: XSRFStrategy\n  ) {\n    if (!window['VSS']) {\n      throw new Error('Microsoft API is not detected');\n    }\n  }\n\n  // experimental\n  resolveConnection(request: Request): Promise<any> {\n\n    let promise = new Promise(resolve => {\n      if (this._token && this._token.validTo > new Date()) {\n        resolve(this._token);\n\n      } else {\n        window['VSS'].require(['VSS/Authentication/Services'], VSS_Auth_Service => {\n          window['VSS'].getAccessToken().then(token => {\n            this._token = token;\n            this._tokenHeader = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token);\n\n            resolve(this._token);\n          });\n        });\n      }\n    });\n\n    return promise;\n  }\n\n  createConnection(request: Request): XHRConnection {\n    request.headers.set('Authorization', this._tokenHeader);\n    this._xsrfStrategy.configureRequest(request);\n\n    return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);\n  }\n}\n","import { Component } from '@angular/core';\n\nimport config from './config';\nimport {\n  AppSocket,\n  EnvService,\n  UserService,\n  BoardService,\n  FilterService,\n  IssueService,\n  CorkboardService\n} from './services';\n\n@Component({\n  selector: '[app]',\n\n  providers: [\n    AppSocket,\n    UserService,\n    BoardService,\n    FilterService,\n    IssueService,\n    CorkboardService\n  ],\n  template: `\n    <router-outlet></router-outlet>\n    <notification-list></notification-list>\n  `,\n})\nexport class AppComponent {\n\n  constructor(\n    private envService: EnvService,\n  ) {\n  }\n\n}\n"],"sourceRoot":""}