{"version":3,"sources":["0helpers.js","1constants.js","2initializers.js","3templating.js","4base.js","5router.js","6datatable.js","7customfields.js","8templates.js","ajax.js","alerts.js","animate.js","app.js","auth.js","bidpackages.js","billing.js","binder.js","calendars.js","chart.js","compression.js","contacts.js","email.js","date.js","featuresettings.js","files.js","groups.js","inputs.js","legacy.js","maps.js","menus.js","modals.js","nav.js","collapse.js","colors.js","comments.js","company.js","contactsimport.js","contactus.js","draggable.js","emailtemplates.js","errorhandler.js","history.js","lazyload.js","loader.js","logging.js","mobile.js","notifications.js","notificationsettings.js","notify.js","pagination.js","payment.js","paysimple.js","permissions.js","photos.js","photoviewer.js","preferences.js","progress.js","projectcontacts.js","projectinvites.js","projectmessages.js","projectparticipants.js","projects.js","projectscopes.js","projectstatuses.js","rawfileuploads.js","register.js","reporting.js","resizable.js","sessions.js","sharing.js","signatures.js","slider.js","sortable.js","stepprogress.js","subscriptions.js","Tokens.js","toolbars.js","tooltip.js","tours.js","usermessages.js","users.js","usertypes.js","utility.js","weather.js","workareas.js"],"names":["PJQ","helpers","getMobileOS","userAgent","navigator","vendor","window","opera","test","MSStream","setViewport","content","existingViewport","document","getElementById","remove","nameViewports","getElementsByName","length","i","viewPortTag","createElement","id","name","getElementsByTagName","appendChild","domReadyHelper","$","submit","e","preventDefault","$skinHeader","$content","app","$el","_","size","css","top","height","bottom","left","position","overflow-y","$skinFooter","getParameterByName","replace","results","RegExp","exec","location","search","decodeURIComponent","processUpload","uid","sid","folder","ajax","Request","endpoint","urlHelpers","generateEndpoint","value","parameter","isApi2","post","done","bind","response","jQuery","click","FileUploadCallback","this","extend","form","url","data","method","attr","action","display","addData","isArray","_typeof","key","hasOwnProperty","append","type","String","appendTo","ui","dialog","widget","prototype","_title","title","options","html","views","formatPhone","val","substring","formatNewsfeedName","temp","indexOf","formatNewsfeed","lastIndexOf","formatDate","jsonDate","date","Date","parseInt","substr","dateFormat","parseDate","myDate","toLowerCase","isTooOld","createdOn","parseDateDT","trim","dateHelpers","getDateString","dateFormats","DATE","parseTimeDT","isLast","index","parent","notLast","blueimp","fileupload","_initProgressListener","that","xhr","ajaxSettings","upload","oe","originalEvent","lengthComputable","loaded","total","_onProgress","URL_DATE","DATE_TIME","TIME","DATE_MONTH_DAY","DATE_YMD","MONTH_YEAR","MONTH_DAY_SHORT","datePicker","ALT_DATE","getTimezoneByOffset","offset","timezone","timezones","getFormattedTimezoneOffset","tzo","pad","num","Math","floor","abs","ACST","abbr","ADT","AEST","AKDT","AST","BST","CAST","CBST","CST","CDT","CEDT","CPST","CVST","DST","EAST","EDT","EST","EEDT","ESAST","FDT","FST","GDT","GET","GMT","GST","HST","IDT","IST","JDT","JST","KDT","KST","LST","MEDT","MPST","MSK","MDT","MST","NAEST","NAST","NCAST","NDT","NST","NZST","PDT","PKT","PSST","PST","PYT","RDT","SAMT","SAST","SDT","SEST","SLST","SPST","SST","SWST","TDT","TST","UST","UTC","VST","WAST","WCAST","WEDT","WPST","YEKT","YST","parseDateString","input","isUTC","arguments","undefined","slice","GetDaysInMonth","m","y","tryParseDateString","string","result","Object","toString","call","isNaN","getTime","getDayName","dayNumber","getWeekBounds","localDate","startDiff","getUTCDate","getUTCDay","endDiff","start","setUTCDate","end","getCurrentMonth","getMonth","getCurrentYear","getFullYear","getTimeStats","date1","date2","t","parse","totalSeconds","constants","time","millis","ONE_MINUTE","seconds","totalMinutes","minutes","totalHours","ONE_HOUR","hours","totalDays","ONE_DAY","days","totalMonths","ONE_MONTH","months","years","ONE_YEAR","totalMillis","getTimeString","timeArray","toLocaleTimeString","hour12","split","concat","getMinutesFromHoursDecimal","hoursDecimal","wholeHours","minutesFromFraction","round","getCountdownString","s","checkDateIsBeforeToday","argDate","setHours","today","checkDateBetweenDays","checkDate","checkDateRangesOverlap","startA","endA","startB","endB","getFromNowString","moment","fromNow","getTimeElapsed","getTimeRemaining","getNewDateAddMilliseconds","milliseconds","setTime","getNewDateAddSeconds","getNewDateAddHours","getNewDateAddDays","weekdaysOnly","day","getDay","setDate","getDate","getDateMillisecondsDiff","getDateDiff","getDateSecondsDiff","getDateMinutesDiff","getDateHoursDiff","getDateDaysDiff","inclusive","numWorkDays","currentDate","addDays","diff","ONE_SECOND","checkTimesDifferent","isIncludeSeconds","getHours","getMinutes","getSeconds","getDateDiffString","compareDate","validateDate","dateString","parts","month","year","monthLength","Z","utc","format","objectHelpers","refinedType","MMMM","MMM","dddd","ddd","getUTCFullYear","M","getUTCMonth","ii","d","H","getUTCHours","h","getUTCMinutes","getUTCSeconds","f","getUTCMilliseconds","getMilliseconds","T","charAt","tz","getTimezoneOffset","K","tzMin","len","timerHelpers","createCountdownTimer","finishCallback","createTimerElement","interval","setInterval","clearInterval","createElapsedTimer","validators","validatePhone","validateZip","validateEmail","emailAddress","isAllowMultiple","error","emailRegex","every","emailIteration","success","formatHelpers","getOrdinalSuffix","j","k","upperCaseFirstLetterEachWord","txt","toUpperCase","upperCaseFirstLetter","lowerCaseFirstLetter","formatPhoneNumber","wrapURL","match","numbersOnly","allowDecimals","alphanumericOnly","formatPercent","cleaned","formatDecimal","number","decimals","toFixed","formatZip","numberToWords","digits","tens","teens","scales","words","scaleIndex","current","currentWords","minutesToHHMM","mins","minutesFromHHMM","timeStr","formatCurrency","money","includeDollarSign","regex","CURRENCY_NO_SYMBOL","getCentsDisplay","getDollarsDisplay","getTotalCents","dollars","cents","convertNLtoBR","inputHelpers","getMoneyInputValue","$container","inputDollarsFull","find","hasClass","inputSplit","dollarsInput","centsInput","parseFloat","getNumberInputValue","getPercentInputValue","decimal","inputVal","getPhoneInputValue","getElementNodeType","prop","attachNumericInputMinMax","min","max","callback","on","inputMaxLength","inArray","keyCode","allowPeriods","ctrlKey","metaKey","currentTarget","allowNegative","$target","target","shiftKey","numbersAndSingleDecimalOnly","allowZip","country","setInputError","isValid","elementType","removeClass","isHighlightInput","addClass","inputButton","siblings","eq","$errorEl","errId","removeData","errorText","closest","class","uniqueId","data-err","inputMaskPhone","inputmask","placeholder","inputMaskZip","inputMaskCurrency","showSymbol","alias","prefix","clearMaskOnLostFocus","rightAlign","allowMinus","inputMaskHours","mask","definitions","9","validator","cardinality","5","insertMode","showMaskOnHover","positionCaretOnClick","off","setSelectionRange","selectionStart","inputMaskPercent","suffix","inputMaskCreditCard","inputMaskDecimal","inputMaskInteger","bidForms","lineItemTypes","abbreviation","lineItemQuestionTypes","alternateTypes","alternateQuestionTypes","acknowledgementTypes","bondingTypes","certificationTypes","laborRateTypes","guid","c","r","random","stringHelpers","args","Array","getLowercaseChars","getUppercaseChars","getNumericChars","getSpecialChars","findMatches","str","matches","res","push","full","group","checkNested","obj","level","_len","rest","_key","apply","convertObjectCamelcase","copyObject","destinationObject","map","each","valueType","lowerKey","object","isIncludeBackbone","isBackboneModel","isBackboneCollection","Backbone","Model","Collection","findDistinct","arr","property","isBackboneModels","models","resultObj","get","buildApiUrl","isPascal","includeSessionId","includeAccessKey","includeAccessToken","service","services","ORIGIN","origin","FILES","fileApiUrl","APIv2","apiV2Url","apiUrl","appendSessionId","appendAccessToken","session","appendAccessKey","buildAPIURL","root","isFileAPI","isDebug","appendDebug","accessToken","TokenManager","getAccessToken","buildDomainURL","isPanteraDomain","defaultPortalUrl","endpointArr","parametersArr","endpointItem","isParamsStarted","parametersItem","includeIfEmpty","paramValue","join","toISOString","encodeURIComponent","buildQueryParamRegex","getQueryParam","loc","hash","q","removeQueryParam","useHash","newLoc","newUrl","pathname","history","replaceState","queryStringToObject","queryString","reduce","acc","pair","_pair$split2","_slicedToArray","pushState","pageTitle","cleanRouteParams","href","isURL","givenURL","URL","protocol","apiHelpers","getHeaders","headers","PortalId","Debug","Authorization","sessionId","SessionId","contact","ContactId","bbContactId","project","ProjectId","bbProjectId","accessKey","AccessKey","projKey","ProjectKey","contactGuid","ContactGuid","systemPermissions","Perm","permissions","ProjectPerm","MasterUserId","addHeaders","extraHeaders","header","addHeader","setRequestHeader","cookieHelpers","getCookie","nameEQ","ca","cookie","setCookie","expires","toUTCString","removeCookie","googleMapsHelpers","polyDefaults","fillColor","isFill","generatePolyStyle","style","defaults","paymentHelpers","validateCreditCard","nCheck","bEven","n","cDigit","nDigit","getCardIssuer","issuer","jcb_regex","amex_regex","diners_regex","visa_regex","mastercard_regex","maestro_regex","discover_regex","getCardIssuerIconFAClass","icon","colorHelpers","getHexFromRGB","rgb","rgbs","g","b","componentToHex","hex","getRGBFromHex","parsed","R","G","B","idealLinkColorForBackground","color","hexColor","elementHelpers","addInvisibleElement","$b","containerClass","$c","isElementInView","docViewTop","docViewBottom","scrollTop","elementTop","imageHelpers","rotateByExif","getExifOrientation","orientation","rotateElement","degrees","exifData","EXIF","getTag","getData","mathHelpers","getRandomNumber","clamp","a","trigHelpers","checkRectCollision","x","distance","x1","y1","x2","y2","dx","dy","sqrt","projectHelpers","accessKeyNavigate","router","navigate","trigger","projectId","host","message","Errors","auth","NOT_FOUND","fail","err","responseJSON","logging","LoggingActions","AUTH_SIGN_IN","sortHelpers","regexAlpha","regexNum","sortAlphaNum","localeCompare","numeric","sortAlphaNumeric","aA","bA","aN","bN","commonOrder","sortCommonPageNumbers","regexLetters","aStartLetter","bStartLetter","aLetters","bLetters","aInd","bInd","browserHelpers","getChromeVersion","raw","canvasHelpers","loadFont","font","fonts","load","then","drawRoundRect","ct","width","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","customerService","getPhone","getEmail","isPanteraApp","API","panteraPortalId","publicUserId","publicLogoURL","countries","internationalCountries","states","us","statusCodes","GONE","colors","BLUE","INDIGO","PURPLE","PINK","RED","ORANGE","YELLOW","GREEN","TEAL","CYAN","WHITE","GRAY","DARK","BLACK","navigation","categories","FIELD_TOOLS","BIDDING","JOB_COSTING","categoryNames","1","2","3","bidFormHelpers","primeContracts","primeContractStatus","DRAFT","OUT_FOR_BID","OUT_FOR_SIGNATURE","APPROVED","COMPLETE","TERMINATED","primeContractStatusNames","4","6","changeOrderStatus","NO_CHARGE","IN_REVIEW","NOT_PRICING","PRICING","NOT_PROCEEDING","PROCEEDING","REVISED","REJECTED","VOID","primeContractStatusBuckets","PENDING","statuses","PROJECTED","changeOrderStatusNames","0","7","8","10","changeOrderStatusBuckets","view","PRIME_CONTRACTS","CHANGE_ORDERS","filterType","PRIME_CONTRACT_STATUS_FILTER","changeOrderFilterType","STATUS_FILTER","financeCoreFields","primeContacts","primeContract","fieldName","isVisible","isRequired","changeOrder","commitments","commitment","invoices","payableInvoice","receivableInvoice","directCosts","directCost","primeContractChangeOrders","status","statusNames","11","invoicing","payableInvoiceStatus","REVIEWING","REVISE","payableInvoiceStatusNames","inviteStatus","DECLINED","ACCEPTED","receivableInvoiceStatus","receivableInvoiceStatusNames","PAYABLE_INVOICES","RECEIVABLE_INVOICES","paymentMethods","directcosts","directCostType","EXPENSE","INVOICE","PAYROLL","directCostTypeNames","directCostStatus","directCostStatusNames","DIRECT_COST_TYPE_FILTER","DIRECT_COST_STATUS_FILTER","DIRECT_COSTS","projectContacts","bidStatus","DECLINE","ACCEPT","BID_RECEIVED","AWARDED","markup","requiredAst","cookies","ACTION_ITEM_ORDER_COOKIE","CLOSE_PREQUAL_HELP_ALERT","NOTIFY_CONTACT_GROUPS_REPORTED","NOTIFY_DAILY_REPORTS_PROJECT_START_END","PROJECT_INVITES_FAVORITE_FILTER","PROJECT_INVITES_CURRENT_BIDDING_FILTER","PROJECT_INVITES_ORDER_COOKIE","SCHEDULE_TEMPLATE_DATES_ORIGIN","RFI_PAGE_LENGTH","SCHEDULE_TASK_LIST_GROUP_BY","SUBSCRIPTION_FREE_TRIAL","SUBSCRIPTION_EXPIRES_ALERT","SUBMITTAL_ORDER_COOKIE","PUNCHLIST_ORDER_COOKIE","INSPECTIONS_ORDER_COOKIE","INSPECTIONS_GROUP_BY_KEY","PRODUCTION_QUANTITIES_ORDER_COOKIE","NOTIFY_PREQUAL_VIEW_REQUESTED","NOTIFY_DRAWING_SHARE_PREVENT_EXPIRE","ALERT_DRAWING_SHARE_PREVENT_EXPIRE","ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS","SCHEDULE_GANTT_SORT_COLUMN","SCHEDULE_GANTT_SORT_DIRECTION","SCHEDULE_TASK_LIST_ORDER","PROJECT_CONTACT_LIST_PAGE_LENGTH","COMMITMENT_LIST_COLUMNS_WIDTH","MY_PROJECTS_LIST_COLUMNS_WIDTH","PROJECT_INVITES_LIST_COLUMNS_WIDTH","PRODUCTION_QUANTITIES_COLUMNS_WIDTH","changeRequests","changeRequestStatus","changeRequestStatusNames","scope","OWNER_CHANGE","INTERNAL","scopeNames","revenueSource","REVENUE","MANUAL","revenueSourceNames","OTHER_FILTER","CHANGE_REQUESTS","changeRequestStatusBuckets","rfq","rfqStatus","CLOSED","rfqStatusNames","RFQ","commitmentType","PURCHASE_ORDER","SUBCONTRACT","commitmentTypeNames","commitmentStatus","PURCHASE_ORDER_PROCESSING","SUBCONTRACT_OUT_FOR_BID","SUBMITTED","PURCHASE_ORDER_PARTIALLY_RECEIVED","PURCHASE_ORDER_RECEIVED","SUBCONTRACT_COMPLETE","SUBCONTRACT_TERMINATED","SUBCONTRACT_VOID","PURCHASE_ORDER_CLOSED","commitmentStatusNames","commitmentStatusBuckets","COMMITTED","TYPE_FILTER","COMMITMENTS","commitmentNumberTokenDateFormat","MMDDYYYY","MM","DD","YY","YYYY","commitmentNumberTokenDateFormatNames","customFieldType","BOOLEAN","CHOICE","DATETIME","FILE","INTEGER","MONEY","PERCENT","TEXT","TEXTAREA","modules","_defineProperty","_PJQ$constants$module","APP","GLOBAL","PROFILE_OLD","PROFILE","ACTIONITEMS","BIDFORMS","PJQADDRESSBOOK","ADDRESSBOOK","PUBLICPROJECTS","PROJECTWALL","PROJECTWALLADMIN","PROJECTWALLSUB","PROJECTLIST","REPORTS","RFI","RESOURCES","SUBMITTALS","FIELDREPORTS","MARKUPTOOL","PUNCHLISTS","DAILYREPORTS","LOGIN","ACCESS_KEY_LOGIN","PJQSETTINGS","SETTINGS","errorCodes","DELETED_CONTACT","minUsernameLength","minPasswordLength","login","INVALID_PASSWORD","USER_NOT_FOUND","screenings","WAITING","UNUSED","IN_PROCESS","INCOMPLETE","FEEDBACK_REQUIRED","EXPIRED","NOT_APPLICABLE","contacts","contexts","PARTICIPANTS","CONTACTS","PROJECTCONTACTS","USERS","COMPANIES","customFields","fieldTypes","INT","CALC","PHONE","BOOL","GRID","GROUPSELECT","REGIONSELECT","DOWNLOAD","UPLOAD","CUSTOMGRID","UPLOADV2","projects","ordering","paperSize","FULL","HALF","paper","largeBinding","STAPLED","LOOSE","EDGE","PUNCHBIND","smallBinding","CHICAGO","GBC","deliveryOptions","NEXTMORNING","NEXTDAY","TWODAY","THREEDAY","general","defaultView","COMPANY","MESSAGE","RESPONSE","GROUPS","SCOPE","defaultTimeZone","ALASKAN","ATLANTIC","CENTRAL","EASTERN","HAWAIIAN","MOUNTAIN","PACIFIC","files","modes","PRINT","ALT_PRINT","zipStatus","NEW","QUEUED","IN_PROGRESS","CANCELLED","FAILED","COMPLETE_ASYNC","downloadFrameId","imageExtensions","actionItems","notificationTypeNames","NEW_ITEM","STATUS_CHANGE","ASSIGNED","NEWCOMMENT","DISTRIBUTE","WORK_COMPLETED","NOT_RESOLVED","RESOLVED","statusColors","priorities","LOW","MEDIUM","HIGH","CRITICAL","priorityNames","priorityColors","dailyReports","NOT_SUBMITTED","DAY_OFF","MISSED","notificationModes","DEFAULT","PER_USER_DAY","DISABLED","communicationLogs","types","EMAIL","IN_PERSON","CONFERENCE_CALL","WEB_CONFERENCE","typeNames","inspectionLogs","meetings","meetingStatus","SCHEDULED","CONCLUDED","meetingStatusNames","meetingAgendaStatus","OPEN","HALTED","meetingAgendaStatusNames","meetingAgendaStatusColors","meetingAgendaPriority","URGENT","meetingAgendaPriorityNames","meetingAgendaPriorityColors","punchlists","rfi","RFIOpen","RFIUpdateDueDate","RFIAddDocument","RFIAddAssignee","RFIAddDistribution","RFIAddResponse","RFIClose","Overdue","DISTRIBUTED","RFIS","submittals","Created","Attachment","Comment","BallInCourt","Ball In Court","Approved","File(s) Uploaded","Rejected","Submitted","Assigned","Distribute","errors","STATUS_NOT_EXISTS","approvalModes","UNORDERED","SEQUENTIAL","statusTypeColors","statusTypes","statusTypeNames","schedule","SCHEDULE_CHANGE","REMINDER","COMMENT_ADDED","ATTACHMENT_ADDED","TASK_COMPLETE","SCHEDULE_UPDATE","dependencyTypes","START_START","FINISH_START","linkTypes","TIMELINE","CALENDAR","TASK_LIST","taskList","groupBy","MONTH","WEEK","DAY","ASSIGNEE","GROUP","proQual","screeningStatuses","Pending","Declined","InProcess","Incomplete","FeedbackRequired","Expired","Complete","NotApplicable","beforeReady","templating","templates","Template","_class","module","file","_classCallCheck","isOldModule","_createClass","path","isCombinedAssets","version","isK8","cdnUrl","getPath","TemplateRenderer","cachedTemplate","dataType","template","jsRenderTemplate","fetch","isJsRender","render","renderTemplate","isAppend","tmpl","parseTemplate","fetchTemplates","templateCount","filter","resultCount","resultCallback","parseMarkup","prepend","replaceWith","BaseModel","idAttribute","baseOptions","urlRoot","subItems","hasEndpoint","isNew","restore","set","initAttributes","attributes","dirtyAttributes","isDirty","hasChanged","attribute","itemClass","subItem","hasNewAttachments","attachments","attachment","getService","isAPIv2","isOrigin","beforeConstruct","constructor","beforeInit","initialize","model","fetchedAttributes","afterInit","getChanged","reset","clear","attrs","silent","isPatch","sync","optsClone","clone","urlOptions","beforeSend","timeout","self","fnErr","notify","ErrorHandler","errorHandlerOpts","handle","toJSON","_toConsumableArray","canRetry","refreshAccessToken","token","responseText","signOutNavigate","notifyName","request","notifications","successNotify","paramSuccess","opts","isFetched","patch","save","put","queuePatch","queueSave","queueData","clearTimeout","saveTimeout","setTimeout","beforeSave","saveObject","getSaveObject","saveOptions","getSaveOptions","successCallback","afterSave","formatString","fieldNumber","matchValue","getCustomFieldLabel","getCustomFieldValue","findWhere","cf","externalId","exObj","erpSyncStatus","integrations","erp","syncStatuses","isERPSynced","makeERPUrl","integration","collections","BaseCollection","add","fetchFirst","modelId","fetchReset","getChangedModels","changedModels","BaseView","View","firstRenderAnimation","subTemplates","hasTooltips","shouldRenderTemplate","defaultEvents","events","newOpts","undelegateEvents","delegateEvents","getTemplates","beforeFirstRender","view_base","renderData","beforeRender","isFirstRenderDone","rightAfterRender","toolTips","tooltip","animateCSS","afterRender","renderSubTemplate","el","cb","addElements","element","$addEl","beforeRemove","stopListening","empty","stopPropagation","cancelBubble","BaseModal","body","isVerticalCenter","isWrapForm","wrapFormName","isShowOkButton","okButtonText","okButtonColorClass","isShowCancelButton","cancelButtonText","cancelButtonColorClass","isShowSecondaryButton","secondaryButtonText","secondaryButtonColorClass","onSecondary","noop","onClose","onOk","minWidth","maxWidth","minHeight","maxHeight","fitHeight","isShowCloseButton","hidden.bs.modal","click .modal-ok","click .modal-secondary","click .modal-close","uuid","setElement","beforeModalCreated","createModal","afterModalCreated","container","modal","verticalBox","backdrop","keyboard","show","setZIndex","getWidth","setWidth","widths","min-width","max-width","$header","$footer","$overflow","$scrollContent","outerHeight","min-height","innerHeight","max-height","overflow","button","isRemoved","ivIndex","zIndex","removeModal","onRemove","close","_this$options","_this$options2","_this$options3","_this$options4","routers","BaseRouter","Router","routes","","route","isLoggedIn","matchedRoute","paramRoute","paramValues","hasAllParams","param","paramVal","hasFeature","user","signInNavigate","oldRoutes","oldRoute","defaultRoute","readyEvents","func","noAuthRoutes","cacheRoute","signInCache","getCurrentRoute","hide","portal","pages","portalSignInRoute","routeToRoot","execute","ga","page","AppView","photoViewer","triggerRoute","hashArr","posStatus","resQuery","utId","$menuItems","allowedUtString","allowedUt","staticRoute","isPortalRoute","$appMain","rootRoute","isRoot","isPanteraPortal","foundRoute","dataTables","DataTable","deferRender","isStriped","isNoPadding","isOverflowAuto","isHideSearch","dom","headerData","getPageCallback","onRowClick","onRowDoubleClick","onRowRemoved","onTableDraw","minHeightPx","paging","pageLength","rowId","groupByKey","disableGroupToggle","getGroupHeader","collapsedGroups","scrollRows","emptyDataGroup","onPageSizeChange","orderCookie","columnWidthCookie","pageLengthCookie","showPageSelector","enableColumnResize","hasFooter","extraClasses","toggleRowClass","hideColumnHeaders","click .group-start","keyup .datatable-search","click .clear-filters","isColumnResizable","column","onColumnResizeStart","columns","onColumnResize","onColumnResizeEnd","language","lengthMenu","processing","paginate","previous","next","clearServerCache","_this2","localStorage","removeItem","setItem","getItem","grg","getRowGroup","getGroupBy","rowGroup","startRender","startGroupRender","dataSrc","row","_ref","_groupByCol$column$da","groupByCol","getGroupByColumn","dataVal","getNestedValue","columnData","getContextMenuOptions","contextMenuOptions","getSortableOptions","sortableOptions","renderHeader","doneMoving","getRow","is","renderPageSelector","renderDataTable","sortOpts","makeSortable","ctxOpts","actions","addContextMenu","pageSelectPicker","inputs","Selectpicker","isIntChoices","defaultValue","dataTable","onChange","draw","info","refresh","setValue","afterHeaderRender","beforeDataTableRender","renderPage","displayStart","addressBookView","currentView","disableColumnReorder","colReorder","disable","enableColumnReorder","enable","_this3","childDataTables","destroy","getPage","serverSide","getColumns","colNameMap","rowIdAttr","$dataTable","cookieVal","order","JSON","firstVal","settings","details","orderArr","col","dir","stringify","footer","colMarkup","visible","_col2","renderFooter","filterData","getFilterData","orderFixed","isArrayGroup","newData","item","colData","colItem","newItem","fixedHeader","parentDataTable","initComplete","json","createdRow","applyColumnWidths","makeColumnsResizeable","isResizing","pageSizeContainer","pageSizeInput","$wrapper","afterSearch","first","hasSettingsModel","isBackboneSettings","oldOrderBy","oldOrderAscending","orderBy","orderAscending","detailCol","orderByCol","src","orderByChanged","drop","realtime","fixedLeft","fixedRight","fixedColumnsLeft","fixedColumnsRight","curSort","sort","mapping","newColumns","sortBy","colNum","columnOrderChanged","childRowToggle","toggleAllChildRows","initializeToggledRows","afterDataTableRender","tableWidth","internalColReorder","_colReorder","colReorderMouseDown","fn","ColReorder","_fnMouseDown","pageX","outerWidth","resizable","handles","event","addEventListener","preventBubble","capture","columnWidths","resize","thIndex","newWidth","currentTh","nextTh","totalAvailableWidth","remainingWidth","minColumnWidth","stop","saveColumnWidths","removeEventListener","updateScrollbar","context","$table","isNestedTable","stopImmediatePropagation","widthPercent","pageCache","pageNumber","pageSize","pageInfo","columnOrderName","direction","cache","rows","rowCount","totalRows","recordsTotal","recordsFiltered","_this$options5","_this$options6","addRow","refreshRow","invalidate","resetData","removeRow","isRefresh","removeAllRows","getFilter","filters","setFilter","filteredData","clearFilters","getFilteredRowData","filteredRows","filteredRow","toggleGroup","getGroupByColumnIndex","findIndex","colInd","setGroupBy","Key_Access_Token","collapsed","nodes","toggle","toggleClass","count","adjust","getSearchText","$search","searchText","lastSearchText","searchTimeout","colSearch","searchArr","colName","colSearchText","colIndex","zeroRecords","newOptions","contextMenu","menus","ContextMenu","selector","isHideNoActions","isWrapInFixedContainer","fetchElementData","onOpen","node","Sortable","collection","dataAttribute","items","connectWith","sortable","change","prevItem","prev","nextItem","draggedItem","helper","parentId","cid","onNestedRowSorted","containment","headerRow","firstChild","children","td","sortedRow","rowData","sortNumber","onRowSorted","newSort","newParent","sortOrder","shouldSave","expand","expandedRowIds","toggleChildRow","renderToggleAllIcon","$icon","sender","rowOverride","preventOnToggleEvent","child","isShown","includes","childDt","expandedId","childRows","renderChildRows","onChildRowToggle","expandAll","rowIdx","tableLoop","rowLoop","contains","getChildHeader","getChildFooter","childData","getRowChildData","fnRender","_this4","childCols","getRowChildColumns","childHeader","displayedColumnsCount","forEach","renderChildRow","after","childClass","$childTable","childTable","getRowChildTable","parentData","cols","$row","renderChildColumn","$replace","copyPhone","inputId","hiddenInput","select","execCommand","copyEmail","customFieldHelpers","getDisplayValue","choices","isMultipleChoice","typeUpper","fnGetChoiceName","choiceId","chId","choice","arrValue","choiceNames","choiceName","boolValue","lowerValue","intValue","dateValue","isDateTime","CustomField","collectionClass","CustomFieldChoices","newChoiceCollection","CustomFieldChoice","CustomFields","CustomFieldsForm","field","fieldInput","isEdit","canEdit","_this5","changedValues","fieldValues","applyDefaults","_field$get","existingFieldValue","fieldValue","fieldTypeId","fieldType","isMultiple","ContactCustomField","CompanyCustomField","isAdmin","$cf","$field","colClasses","attachFormEvents","customFieldControls","customFieldId","control","fieldChanged","Datepicker","datepickerOptions","Contacts","Contact","ContactsSelectInput","selectedContact","isSingleChoice","isReadOnly","emptyNotice","selectedContacts","$htmlInput","HTMLEditor","editorHeight","contents","fnInput","$input","sortSettings","preferences","hasPref","preferenceTypes","SORT_USER_ATTACHMENTS","getPref","uploader","FileUploaderGrid","canUpload","canDelete","sortDirection","onSuccess","guids","onDelete","delAttachments","users","User","Files","Binder","watchElements","changeEl","renderField","$alert","$inputOuter","fieldId","triggerEvent","fieldValueObj","changedObj","getValues","validate","hideError","getValue","showError","clearError","CustomFieldsSearchForm","valueIndex","value2","clearFieldValues","setValues","validateSearch","input2","control2","CustomFieldChoicesEditor","onCancel","onSave","click .add-custom-field-choice-button","click .delete-custom-field-choice-button","change .custom-field-choice-value","click .custom-field-choices-cancel","click .custom-field-choices-save","oldAttributes","update","setSortOrder","addChoice","choiceChanged","deleteChoice","cancel","TemplateManagement","templateType","click .btn-add-template","click .btn-edit-template","click .btn-delete-template","Templates","listenTo","editTemplate","onClick","isDanger","deleteTemplate","orderable","searchable","addTemplate","editClicked","deleteClicked","modals","DeleteCancel","NewTemplateModal","isSubmittal","keyup .input-template-name","click .btn-save","focus","templateNameChanged","templateName","Loader","_class2","setOptions","contentType","canAuthRetry","_success","_done","_fail","Alert","_class3","text","isPrepend","isBefore","isShowClose","cookieExpirationDays","animation","$outer","alertClosed","before","in","startDestroyTimeout","out","curHeight","animate","complete","duration","animationLowered","opacity","slideUp","slideDown","fadeTo","animationEnd","animations","OAnimation","MozAnimation","WebkitAnimation","bbVersion","bbApiUrl","bbApiV2Url","uploadUrl","bbUploadUrl","bbCombinedAssets","isV2Zips","groups","rRoot","subscription","subscriptionId","affiliateId","subscriptions","FREE","updateTrial","errorNotify","AppSignUp","activeItem","scrollTo","scrollLeft","pageUrl","menuItems","typeSplit","masterUserId","addOldRoutes","addRoutes","union","configureTokenManager","refreshToken","expiresOn","accessTokenExpiresOn","enabled","configureSentry","webkit","messageHandlers","userLogin","postMessage","bbSessionId","Android","$hd","renderPortalPage","getSession","captureOutboundLink","category","transport","attachEvents","$body","hasPermission","ec","$badge","ProjectContact","BaseEditContactModal","gantt","$btn","tours","initTour","parents","lazyLoad","LazyLoad","isFetch","retryCount","hasTaskWithStartDate","windowAccessKey","bbAccessKey","sessions","Session","state","userId","bbUserId","previewImageDimension","companyId","paysimple","SignUpOpenedModal","open","getRefreshToken","showSelectorAddress","ready","initNavigator","fetchProjectCustomFields","ProjectCustomFields","customField","afterDelete","nav","AppNavigator","attachReadyEvent","pjqProjectWall","ENABLE_NEW_PROJECT_WALL","childContainer","_class4","removeActiveView","$elInner","tab","profile","CompanyProfile","profileKey","activateTab","renderView","relativeToLocation","ScreeningDashboard","$actions","$actionName","clients","PJQPROFILE_GET_SCREENINGS","photos","PhotoViewer","SignIn","keydown .input-username,.input-password","click .btn-sign-in","click .btn-forgot-password","username","loginChanged","which","signInToken","signIn","signInClicked","errorAlert","$btnSignIn","isUsernameSSO","isSSO","signOnUrl","renderError","password","getTokensForUser","reload","passwordResetGuid","ResetPasswordModal","isExpired","isContinueToSignIn","lockoutMinutes","initError","remember","fnRedirect","UNHANDLED","forgotPassword","RequestResetPasswordModal","AccessKeySignIn","keydown .input-access-key","paste .input-access-key","click .btn-access-key-sign-in","accessKeyPasted","_this6","clipboardData","query","permissionStatus","pastedText","accessKeyChanged","KEY_LENGTH","AuthModal","Auth","omit","defaultSignUpUsername","SIGN_IN","SIGN_UP","RESET_PASSWORD","RESET_PASSWORD_SUCCESS","click .auth-nav-sign-in","keyup .auth-sign-in-username","keyup .auth-sign-in-password","click .auth-sign-in","click .auth-nav-sign-up","keyup .input-sign-up-username","keyup .input-sign-up-password","click .btn-sign-up","click .auth-nav-reset-password","keyup .auth-reset-password-username","click .auth-reset-password","errorParam","sessionContact","companyName","contactName","email","mode","renderSignInError","renderSignIn","signInUsernameChanged","signInPasswordChanged","signInAlert","renderSignUp","signUpUsernameChanged","validateSignUpInfo","signUpPasswordChanged","signUp","usernameLength","passwordLength","signUpAlert","renderSignUpError","CUSTOMER_SERVICE","AUTH_SIGN_UP","renderResetPassword","resetUsernameChanged","validateResetPasswordInfo","resetPassword","resetPasswordAlert","sendPasswordReset","renderResetPasswordSuccess","renderResetPasswordError","ResetPassword","onReset","navSignIn","passwordRequirements","isRequirementsGrid","keyup .input-reset-password","click .btn-reset-password","renderPasswordRequirements","checkPasswordRequirements","isGrid","req","newPassword","validCheck","$maxLength","allowRepeatChars","$noRepeat","some","v","minLength","$length","lowercaseCount","$lowercase","uppercaseCount","$uppercase","numericCount","$numeric","specialCharCount","$special","passwordChanged","historyPreventCount","keyup .input-reset-password-username","$username","usernameChanged","AUTH_RESET_PASSWORD","AppSignIn","click .btn-sign-up-nav","IS_SSO_ENABLED","accessKeySignIn","initFeatureAds","signUpNavigate","features","feature","carousel","ride","click .btn-sign-in-nav","keydown .input-password-signup","keydown .input-username-signup","zip","phone","portalOwner","fetchUserGroups","afterChange","noneSelectedText","mobile","getDevice","liveSearch","groupId","statePicker","countryChanged","validateField","isCompanyNameValid","isContactNameValid","isUsernameValid","isPasswordValid","isZipValid","isPhoneValid","isEmailValid","isCompanyTypeValid","isGroupsValid","checkReady","params","AppResetPassword","validateSessionContact","ErrorModal","errorCode","bidPackages","BidPackages","BidPackage","Groups","Attachments","addAttachments","entryIds","drawingIds","tags","uniq","entryId","drawingId","tag","drawingTagName","EditTemplateModal","change .cb-is-default","click .btn-close","click .btn-delete","defaultChanged","isDefault","templateId","TextEditorInput","label","BidPackagesView","ManageBidPackagesModal","projectName","changed","click .add-bid-package","click .btn-import-template","click .btn-save-a-template","click .btn-delete-bid-package","click .btn-edit-bid-package","bSort","editBidPackage","deleteBidPackage","groupNames","addBidPackageClicked","newBidPackage","bidPackageId","importTemplate","ImportTemplateModal","onImport","saveAsTemplate","BidPackageTemplateCreatorModal","bidPackage","EditBidPackageModal","pkg","editBidPackageClicked","deleteBidPackageClicked","groupUserId","groupLevels","GROUP_LEVELS","GroupsSelectInput","isShowAddButton","addButton","selectedGroups","onAfterSave","click .btn-import","fetchBidPackageTemplates","tmp","templatePicker","selectedTemplate","AutocompleteInput","source","$name","existingTemplate","fnSave","YesNo","onYes","SelectBidPackagesModal","alertText","click .bid-packages-select-save","bidPackageSelector","BidPackageSelector","isEnableSelectedFilter","onBidPackageSelected","checkBidPackagesSelected","bidPackagesData","new","difference","original","selected","includeBidPackageIds","selectedBidPackageIds","disabledBidPackageIds","selectedBidPackages","onBidPackagesLoaded","isEnableSelectAll","isDisableSelected","isHideDisabled","isExpandSelected","onSelect","headerButtons","isIncludeGroups","onSelected","keyup .bid-package-search","click .btn-header-action","click .bid-package-all-select","click .bid-package-expand","click .bid-package-select","click .group-select","selectedGroupIds","getBidPackages","afterSync","isBidPackagesLoaded","loadBidPackages","removed","renderBidPackages","searchFilter","isRendered","getParentChildContainer","expandParentClick","expandParent","groupIds","bidPackageIds","selectBidPackage","isChecked","selectAll","groupSelects","bidPackageSelects","selectGroup","removeBidPackage","bidPackageSwitch","BidPackageRadiusModal","click .add-participants","keyup .add-participants-radius","radiusPref","ADD_PARTICIPANTS_BID_PACKAGE_RADIUS","directoryFilterSelectPicker","mustSelectValue","radiusSlider","Slider","ticks","ticks_labels","setRadius","newValue","radiusChanged","addParticipants","billing","BillingInfo","getCardholderName","mod","cardNumber","cardExpirationMonth","cardExpirationYear","billingInfo","subscriptionChanged","_class5","setDefaultValues","delegate","useDecimalPercentFields","modelSelectorAttribute","modelSelector","objectType","isBackboneObj","bindElements","_this7","_this8","requiredAttributes","renderInputs","handleChange","bindElement","setElementValue","getElementAttribute","getElementType","picker","opposite","_this9","selectPickers","datePickers","buttonGroups","groupPickers","locationPickers","contactSelectors","fileUploaders","all","attributeListeners","inputOpts","getAttributeElement","selectPicker","renderSelectPicker","renderDatePicker","groupPicker","renderGroupPicker","locationPicker","renderLocationPicker","contactSelector","renderContactSelector","fileUploader","renderFileUploader","buttonGroup","renderButtonGroup","required","_this$getInputObj$inp","_this$getInputObj","getInputObj","pickerOpts","_this$options$canEdit","_pickerOpts$defaultVa","_this10","getArrayObjectForElement","optChange","GroupPicker","_this$options$canEdit2","_pickerOpts$defaultVa2","_this11","ProjectLocationPicker","_this$options$canEdit3","_ref2","_pickerOpts$selectedC","_collection","_this12","_this$options$canEdit4","_pickerOpts$defaultVa3","_arguments","_this13","_pickerOpts","_this$options$canEdit5","_pickerOpts$datepicke","_this14","defVal","defaultDate","_opts$defaultValue","_this$options$canEdit6","_this15","ButtonGroup","buttons","_this$options$canEdit7","_this$options$canEdit8","optSuccess","optDelete","updateElement","attrListener","_validator","_inputOpts$validate","_this16","showInputErrors","validAttributes","invalidAttributes","getValidator","_validatorRes$isValid","_result$errors","validatorRes","_validator$rules","rules","isArr","calendar","calendars","MiniCalendar","inline","isDaysOnly","icons","up","down","dateRangeChanged","dp.change","dp.update","lastSelectedDate","datetimepicker","onUpdate","_d","renderStatusMarkers","updateStatusMarker","newStatusDate","statusDates","statusDate","renderStatusMarker","dates","dayObj","$dayContainer","textColor","$existingMarker","$newMarker","currentDateRange","getCurrentDateRange","lastDateRange","$startDayEl","$endDayEl","last","FullCalendar","taskTooltip","onTaskEdit","onTaskDelete","fetchTasks","click .btn-edit-task","click .btn-delete-task","click .btn-close-tooltip","contextmenu .fc-day-grid-event","initCalendar","fnParseTasks","tasks","task","extendedProps","progress","Calendar","plugins","themeSystem","center","right","eventRender","eventRightClicked","addEventTooltip","$ev","getTask","Tooltip","taskId","calTask","editTaskClicked","editTask","deleteTaskClicked","deleteTask","closeEventTooltip","SystemCalendar","click .btn-add-task","click .btn-add-milestone","click .btn-export","click .btn-calendar-settings","projectCustomFields","fetchScheduleStatuses","taskStatuses","fetchCalendarSettings","stResult","CalendarTasks","sysTasks","Tasks","sysTask","getDefault","getCalendarTask","taskName","cfId","cfValueMatch","cfMatch","cfValue","finish","isAllDay","CalendarTask","allDay","backgroundColor","borderColor","addTaskClicked","newTask","Task","weekendWork","isMilestone","percentComplete","notes","addMilestoneClicked","EditTaskModal","exportCalendar","loader","loadingText","reporting","Report","fileName","generate","outerHTML","editSettings","CalendarSettingsModal","fnFetch","cfs","fetchProjectStatuses","projectStatuses","dateCustomFields","ENABLE_PROJECT_STATUS_ID","defaultVal","fields","isGrouped","CalendarSettings","charts","RED_80","BLUE_80","YELLOW_80","GREEN_80","Chart","_class6","showTotal","renderChart","maintainAspectRatio","datasets","memo","chart","getElementsAtEvent","dhtmlxGantt","enableSorting","sortField","sortAsc","onSort","isShowCriticalPath","click .grid-toggle","currentSort","asc","initChart","renderContextMenu","getDataObject","links","minStartDate","maxStartDate","maxEndDate","hasTaskNearToday","rangeStart","rangeEnd","taskObj","start_date","calendar_id","bar_height","unscheduled","listTextColor","dependencies","dependency","linkObj","keys","lag","startInlineEdit","ext","inlineEditors","startEdit","destructor","Gantt","getGanttInstance","clearAll","scale_cell_class","timeline_cell_class","config","fit_tasks","skin","work_time","correct_work_time","addCalendar","worktime","editor_types","dateEditor","innerHTML","taskModel","showDate","minDate","getMinStart","widgetPositioning","horizontal","set_value","end_date","get_value","is_changed","d1","d2","is_valid","onTaskMoved","getInput","durationEditor","currentValue","Number","nameEditor","formatter","formatters","durationFormatter","enter","store","linksFormatter","linkFormatter","map_to","predecessorEditor","getWBSCode","tree","editor","align","labels","link","getLink","task_text","checkTaskOverflow","rightside_text","grid_folder","$open","grid_row_class","grid_file","task_class","scale_height","order_branch","task_end_date","task_date","valueOf","open_tree_initially","readonly","attachEvent","sizeEl","querySelectorAll","ganttContainer","sizeElRect","getBoundingClientRect","gridCollapse","classList","addTaskLayer","getState","drag_id","sizes","getTaskPosition","progressAmount","className","gridDateToStr","date_to_str","date_grid","critical_path","marker","zoomConfig","levels","min_column_width","unit","dateToStr","step","dayNum","endDate","activeLevelIndex","zoom","init","ganttData","pos","posFromDate","renderTodayMarker","toggleCriticalPath","isExporting","todayMarkerId","deleteMarker","addMarker","dateText","task_width","getContext","task_element","getElementsByClassName","task_font_family","getComputedStyle","task_font_size","date_text_width","task_text_width","measureText","renderForExport","renderForViewing","toggleGrid","show_grid","_this17","editorState","columnName","range","getSubtaskDates","calculateEndDate","ganttTask","onTaskAdd","old_width","new_width","ASAP_SCHEDULE_CONTRAINT_ENABLED","errorMessage","showTask","$local_index","oldSort","summaryTaskId","sorted","mSort","onDependencyAdd","onDependencyDelete","override","getZoom","getCurrentLevel","zoomIn","zoomOut","querySelector","updateLink","addSubTaskClicked","addToSummaryTaskClicked","removeSummaryTask","onTaskUpdateSummary","SummaryTaskModal","isNewTask","onAddSubTask","addTask","addLink","bool","highlight_critical_path","refreshTasks","scroll","getScrollState","updateTask","exportToPDF","getCompanyLogoUrl","logoURL","_this18","PROJECT_GANTT_HEADER_CUSTOM_MARKUP","server","exportToExcel","visual","cellColors","date_format","exportToPNG","exportToPrimavera","exportToPrimaveraP6","exportToMSProject","click .btn-new-summary-task","existingTasks","targetTask","invalidTasks","getAllDescendantTaskIds","existingTaskPicker","isLiveSearch","existingSummary","warningAlert","descendants","findDescendants","currentTaskId","newSummaryTaskClicked","newSummaryTask","isSummaryTask","AssigneeListModal","assignees","click .btn-edit-assignee","renderAssignees","editAssignee","assignee","GanttTask","GanttTasks","collapse","BaseCollapse","onShown","shown.bs.collapse","hidden.bs.collapse","show.bs.collapse","hide.bs.collapse","renderChevrons","chevron","collapseContainer","ColorPicker","_class7","initPicker","colorpicker","SimpleColorPicker","_class8","$picker","colorPicked","onColorPicked","comments","CommentsModal","onAddComment","keyup .textarea-comment","click .btn-add-comment","commentChanged","addComment","companies","UserLimits","compression","encode","delta","values","lastValue","encoded","runLength","multiple","decode","getContactAnchor","useCompanyName","canViewContacts","Company","parseContactData","userTypeId","userType","userTypes","parseAttachmentData","getGroups","ids","checkHasGroup","fetchERPObject","_this19","externalObjectFetched","externalObject","minModified","lastSync","STALE","unlinkERP","approve","isCompanyUser","ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE","approvals","approvalUpdates","ApprovalUpdates","workAreas","ContactWorkAreas","contactId","fetchEditHistory","editHistory","EditHistory","fetchCompanyERPObject","companyErpObjectFetched","companyExternalObject","forCompany","fetchSystemPermissions","perm","SystemPermissions","fetchProjectPermissions","ProjectPermissions","fetchSystemNotificationSettings","notificationSettings","SystemNotificationSettings","fetchProjectNotificationSettings","ProjectNotificationSettings","unlinkUser","delete","userid","copyContact","getVcard","downloadFile","showProjectHistory","ProjectParticipantHistoryModal","sendUpdater","exportExcel","flatCustomFields","contactCustomFieldValues","contactCustomFieldValuesFlat","flatCompanyCustomFields","companyCustomFieldValues","isDeleted","workArea","contactWorkAreaId","workAreaId","addCompanyCustomFieldValue","exValue","addContactCustomFieldValue","mergeCustomFields","EditHistoryItem","CompanyPhoto","ContactFieldSetting","ContactGroup","ContactFieldSettings","filteredByGroups","groupContacts","ContactInfoList","contactIds","CompanyPhotos","ContactCustomFields","CompanyCustomFields","ContactGroups","BaseEditContactView","sso","alert","click .btn-edit-permissions","click .btn-edit-notifications","change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell","keydown .contact-edit-phone-ext","keyup .contact-edit-phone-ext","click .btn-unlock-user","click .btn-unlink-user","click .btn-send-user-reg","click .btn-send-password-reset","click .btn-screening-request-contact","click .contact-edit-add","click .contact-edit-cancel","click .contact-edit-save","click .contact-edit-save-and-add-project","click .contact-edit-delete","change .cb-sso-enabled","_this20","prefs","isUser","fieldSettingsEnabled","ENABLE_USER_FIELD_SETTINGS","ENABLE_CONTACT_FIELD_SETTINGS","fetchUserCustomFields","userCustomFields","fetchSSOProviders","providers","ssoProviders","fetchCompanyCustomFields","companyCustomFields","renderCompanyCustomFields","fetchContactCustomFields","contactCustomFields","renderContactCustomFields","fetchUserFieldSettings","coreFieldSettings","fetchContactFieldSettings","fetchERPIntegration","erpIntegration","company","initPermissionOptions","initViewOptions","featuresDidChange","showScreenings","ENABLE_SCREENINGS","renderERP","_this21","$modal","getERPBadge","renderERPButtons","pushSupported","hasAvailableAction","PUSH_VENDORS","unlinkSupported","UNLINK_VENDOR","pushERP","undoPushERP","_pushERP","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fnPush","_this22","wrap","_context","abrupt","pushVendor","_this23","undoPush","_this24","unlinkVendor","maxGroups","allowMultipleEmails","SUB_RESTRICT_SINGLE_EMAIL","isSelfEdit","prevailingWageLabel","PREVAILING_WAGE_LABEL","RESTRICT_GROUP_COUNT","ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP","enablePermissions","canModifyAttachments","sessionUserId","sessionContactId","isPrequalVisible","canModifyNotifications","canViewCustomFields","canEditCustomFields","ENABLE_DIRECTORY_EDIT","isContact","getByIsCompany","isUserTypeRequired","checkFieldVisible","checkFieldRequired","renderContact","SUB_ADDRESS_REQUIRED","ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_CORE","SUB_ZIP_REQUIRED","DOWNLOAD_CONTACT_UPDATE_REQ","NO_REQUIRE_UNION_SUB","ALLOW_SUB_GROUP_EDIT_REQUIRED","fieldSettings","ADDRESS_BOOK_HIDE_SECTOR","IS_HIDE_UNION_STATUS","CAN_EDIT_UNION_STATUS_SUB","ADDRESS_BOOK_HIDE_MINORITY_STATUS","CAN_EDIT_MINORITY_CLASS_SUB","_this$model$get","_this$model$get2","_this$model$get3","_this25","defaultUserType","userTypePicker","getById","StatePicker","CountryPicker","zipInput","enableInternational","ENABLE_INTERNATIONAL_COUNTRIES","renderLaborStatus","renderSector","renderMinority","renderPrequal","renderScreenings","workAreaMap","renderWorkAreas","renderCompanyAttachments","renderGroupSelector","renderUserCustomFields","renderSSO","prequalEditor","compContact","prequal","PrequalEditor","ScreeningClients","navContainer","onContactChange","ch","onCompanyCustomFieldChange","companyCustomFieldsForm","cfv","onContactCustomFieldChange","contactCustomFieldsForm","Prequal","ScreeningClient","$screenings","screeningEditor","ScreeningClientEditor","canManage","IS_PROQUAL_CUSTOMER","newScreeningRequest","addressbook","ProqualRequestModal","onSend","companyAttachmentFileUploader","SORT_COMPANY_ATTACHMENTS","canDownloadAll","laborStatus","isDisabled","_value$indexOf","_value$indexOf2","_value$indexOf3","_value$indexOf4","_value$indexOf5","_value$indexOf6","isUnion","isNonUnion","isPrevailingWage","sectors","isPrivateSector","isPublicSector","minorityClass","exclusiveChoices","isDBE","isDVBE","isMBE","isSBE","isSDVBE","isUDBE","isVSBE","isWBE","$groups","groupSelector","GroupSelector","detectGroupLevels","IS_DOCUMENT_CLERK","onGroupSelected","groupsChanged","unlinkContactUser","sendSignUp","userSSOChanged","tagSelectPicker","cfArray","userCustomFieldValues","userCustomFieldsForm","cfAdmin","$workAreas","WorkAreaMap","isInline","isSync","editPermissions","PermissionsEditorModal","editNotifications","NotificationSettingsEditorModal","validateCoreFields","hasError","$scrollTo","$company","$contactName","$title","$phone","$cell","$fax","$email","$add1","$add2","$city","$state","$zip","$country","$union","$certifications","$sector","$usertype","getGroupsData","$gac","$wac","valid","unlockUser","unlock","saveAndAddToProject","isAddNew","isAddToProject","$password","$itbUser","$pmUser","$cac","currentGroups","currentCompanyCustomFieldValues","currentContactCustomFieldValues","currentUserCustomFieldValues","projectParticipants","ProjectParticipant","isPreventAddToProject","isForceSaveExistingEmail","currentWorkAreas","ContactWorkArea","county","contactCompanyId","address1","address2","city","fax","onAddNew","refreshCommands","participants","getCostsPerUser","changeCosts","cost","BASIC","basic","PRO","pro","ENTERPRISE","enterprise","userSeatModal","changeUserSeats","SaveDontSave","onDontSave","isShowAddContact","click .contact-edit-save-without-approval","deleteLabel","shouldRenderInnerView","getContactElement","$cel","getInnerViewOptions","contextClosed","editView","getInnerViewType","addNew","_this$editView","_this$editView2","_this$editView3","_this$editView4","SelectContactsModal","hideContacts","hideEmails","disableBadEmail","disableBlacklisted","disableContacts","showAddress","userTypeFilter","isUserTypeFilterDisabled","titleOverride","canSwitchContext","hideUsers","shouldHideContacts","enableSelectAll","saveButtonText","change .select-contact","click .contacts-select-cancel","click .contacts-select-save","click .switch-context","click .project-contacts-new-contact","click .project-contacts-add-from-bid-participants","click .project-contacts-add-from-address-book","click .project-contacts-quick-search","click .project-contacts-add-from-project","click .project-contacts-add-from-company","click .select-all-contacts","Users","contactsRef","fnGet","ctx","forParticipants","fnContinue","_this26","ctn","getProjectStatuses","isSelected","disableContact","getStatusColor","zeroRecordsLabel","emptyTableLabel","newContacts","getContactsList","ContactSelectDataTable","filterGroups","emptyTable","switchContext","hideContact","hideEmailsLower","_contact$get","contactEmail","dataIndex","isBlacklisted","cssText","selectAllContacts","isSingleContact","selectContact","not","addFromBidParticipants","fetchParticipants","subtitle","_this27","addContactsToProject","addFromAddressBook","_this28","selectedContactsAll","DISABLE_NEW_ADDRESSBOOK","isUseNewAddressBook","isMultipleProjects","AddParticipantsDetailedModal","quickSearch","_this29","addFromProject","addFromCompany","_this30","newContactClicked","ADDRESS_BOOK_DEFAULT_COUNTRY","newUserClicked","contactCompanyIds","contactGroupIds","AddParticipantsErrorModal","onContinue","click .btn-filter-groups","click .contact-select-clear-filters","filterPicker","_this$userTypeFilter","_this$userTypeFilter2","companyUserTypes","contactUserTypes","projectStatusFilter","groupsFilter","st","FilterTradesModal","onFilter","updateGroupsFilter","groupLen","deselectAll","contactBadge","isShowAddButtonByLabel","onAdd","contactsRenderData","isSortable","onStop","click .btn-approve-behalf","click .contact-select-input-add","click .contact-select-input-delete","edit","approversSortable","dataArray","renderSelectedContact","approveBehalf","onApproveBehalf","deleteContact","deletedContact","_this31","allowDuplicate","_this31$selectedConta","_this$options$canView","crd","displayContactsBlock","canView","ReportContactModal","reason","onReport","showRemoveFromProject","keyup .input-other-reason","click .btn-report","setReason","otherReasonChanged","reportParticipant","removeFromProject","REPORT_CONTACT","ContactImportUpload","overwrite","skip","createGroups","ContactImportUploadColumns","ContactImportUploads","ContactImportUploadColumn","ContactsImportModal","contextUpload","click .btn-export-template","click .btn-cancel","renderUI","renderUploadEdit","renderImportUploadPicker","ContactsImportUploadsSelect","viewImportUploadCallback","ContactsImportUploadEdit","onDone","exportTemplate","import","click .view-contact-import-upload","click .delete-contact-import-upload","renderUploads","uploadsDataTable","im","isRemoveOnComplete","viewImportUpload","deleteImportUpload","click .btn-map-groups","click .delete-contact-import-upload-row","click .btn-edit-groups","click .btn-edit-work-areas","keyup .input-text","keydown .input-int","keyup .input-int","change select.input-state","change select.input-country","keyup .input-phone","change select.input-bool","change select.input-choice","change select.input-user-type","renderImportUploadData","overwriteOptionChanged","deleteRow","exRow","textValueChanged","intValueChanged","parsedVal","stateValueChanged","countryValueChanged","$options","getStateOptions","getUserTypeOptions","selectedUserTypeId","userTypeValueChanged","selectedState","lowerAbbr","phoneValueChanged","boolValueChanged","singleChoiceValueChanged","getColumnWidth","unmatchedGroups","noEmailOrFax","attrCamel","matchResult","getColumnGroupNames","pf","unmatched","matched","regions","rowVal","defaultContent","autoWidth","umGroups","importAlert","groupLabel","GROUP_LABEL","mapGroups","editWorkAreas","WorkAreaMapModal","workAreaCol","groupName","loweredName","mappedGroup","groupMap","editGroups","SelectGroupsModal","selectorOptions","MapGroupsModal","editRegions","getIsOverwrite","$mdOuter","importOptions","newNames","gName","mergeData","noEmailFaxCount","DuplicateEmailModal","onSkip","onOverwrite","click .btn-overwrite","click .btn-skip","_map$group","contactus","ContactUs","click .contactus-submit","onSubmit","emailValid","daysBetween","date1_ms","difference_ms","Draggable","_class9","addClasses","draggable","Droppable","_class10","droppable","ComposeEmailModal","emailBadge","enableCC","subject","onSaveWait","keyup .input-share-search","focus .input-share-search","click .share-email-delete","click .modal-share-send","click .modal-share-cancel","mousedown .modal-dialog","click .btn-add-project-contact","selectedEmailsTo","selectedEmailsCC","focusType","bodyEditor","isHideTokens","focusSearch","contactEmailSelector","ContactSearchSelect","selectedEmails","getFocusSearchText","addEmail","checkIsFocused","targetParent","parentElement","searchChanged","renderRecipientCount","emailCount","addProjectContact","_this32","emailLine","shouldNotFocus","deleteEmail","emailContainer","emailLineType","emailArray","without","send","_this33","$subject","toEmails","ccEmails","isSubjectValid","click .share-contact","contactsLoader","fetchProjectContacts","searchVal","filteredContacts","$addEmail","isValidEmail","$searchResults","$searchResultsOuter","$noResults","emailTemplates","EmailTemplate","EmailTemplates","projectMessage","INACTIVE","INACTIVE_USER","LOCKED","LOCKED_USER","INCORRECT_PASSWORD","INVALID_GRANT","USERNAME_EXISTS","CURRENT_PASSWORD","SSO_DISABLED","INVALID_SAML","_class11","handlers","notification","showContact","400","enableTracking","401","404","405","500","502","503","504","default","handler","Sentry","configureScope","sentryUserId","setUser","setLevel","setExtra","captureMessage","itemName","warningNotify","featureSettings","FeatureSetting","FeatureSettings","FeatureSettingsModal","downloadDrawings","objType","versions","versionIds","versionId","drawing","raster","merge","includeAttachments","fileGuids","queueDownload","drawings","Drawing","download","downloadStartCallback","isApiv2","createDownloadFrame","handleDownload","jqXHR","logDownloadFailure","minWaitSeconds","showPromo","promoType","QUIKBID_GROUP_IDS","isReady","isZip","isDrawing","isEndpoint","ZipProgressModal","ZipFile","DrawingProgressModal","DrawingDownload","FileProgressModal","File","FILE_DOWNLOAD_FAILED","iFrame","renderUrl","urlForKey","thumbnailUrl","thumbUrl","dataUrl","getSize","getFolderAttachments","exportFileList","addNotification","DrawingNotification","move","entryList","changedFiles","changedFile","matchFile","folderId","copy","newFiles","deleteFolderContents","detachFromProject","convert","checkStatus","canRender","extension","fileHelpers","getExtension","isImage","getNameNoExtension","pop","isColored","isRecursive","fetchFolderAttachments","recursive","getSiblingAttachments","where","getParentFolder","contextFolder","folders","parentFolder","getDepth","depth","downloadEndpoint","ZipFileNotification","share","isPhotos","emails","getRootAttachments","getSharedFolder","rootFolder","isFolder","modelComp","getPrivateFolder","getRootSharedAttachments","sharedFolders","sharedFolder","fetchFoldersAttachments","hideFiles","hideFolders","privateFolder","privateFolderId","FileShare","FileUploader","dictRemoveFile","ignoreHiddenFiles","allowedExtensions","dictDefaultMessage","parallelUploads","chunking","onError","onDrop","useFileAPI","useApiV2","click .download-import-template","downloadImportTemplate","uploadTemplateCallback","getUrl","svc","fullPath","folderPath","acceptedFilesFormatted","dropzoneOptions","hiddenInputContainer","maxFilesize","acceptedFiles","renderDropzone","hasUploadTemplateCallback","maxFiles","dropzone","Dropzone","removeFile","isUploading","getQueuedFiles","getUploadingFiles","_res$fileName","gridFile","listFile","sideBySide","isSmall","includeProjectAttachments","offsetTopText","onFileStatusChange","showCreatedByLink","hasNotes","isVersioned","onNewVersion","contextId","onAnnotationChange","canAddAnnotations","mergeAnnotations","onNoteChanged","click .file-preview-image","click .file-view-pdf","click .file-preview-download","click .file-preview-delete","click .btn-versions","click .file-edit-note","click .download-all","click .dz-upload-project-attachments","viewFileVersions","FileVersionsModal","collectionDefinition","parentAttachment","FILE_UPLOADER_SIDE_BY_SIDE","maxfilesexceeded","addedfile","fileModel","versionByName","getParentAttachment","$previewElement","renderFile","previewElement","thumbnail","uploadprogress","lastProgress","ceil","dataURL","_ref3","_response$name","_response$fileData","_ref4","_response$name2","_response$fileData2","fileResponse","uploadId","fileData","responseFile","retries","uploadFile","renderFiles","renderUploadMessage","fileToRender","fileTemplate","$fileEl","$message","topClass","topCSS","removeAttr","uploadFromProjectAttachments","AttachmentsModal","viewFile","versionFile","renderPhotoViewer","viewPdfFile","DrawingViewer","isAnnotationsEnabled","noNavigation","FileViewer","downloadAll","downloadVersion","editNote","_this34","FileEditorModal","isNoteEdit","isNewVersion","deleteFile","previewContainer","checkProgressInterval","click .zip-download-button","click .zip-email-button","keyup .zip-email","click .zip-cancel-button","isWaiting","waitTimeout","downloadZip","stopChecking","renderContent","checkZipStatus","checkStatusTimeout","defaultEmail","downloaded","emailChanged","emailZip","cancelZip","click .file-cancel-button","isCancel","cancelDownload","click .drawing-download-button","click .drawing-email-button","keyup .drawing-email","click .drawing-cancel-button","downloadStatus","checkDownloadStatus","FileUploaderModal","fileUploaderOptions","click .btn-done","dataChanged","queued","uploading","failed","$queued","$uploaded","$success","RawFileUploaderModal","keyup .input-revision-name","click .btn-submit","hasName","hasAttachments","postData","UPLOAD_RAW_FILES","FileUploaderBackground","click .file-preview","fileHistory","FileSelectInput","changeButton","isShowChangeButton","click .file-select-input-edit","selectedFiles","FileSelector","selectedAttachmentIds","ignoreFolders","click .btn-download-version","newVersions","canDownload","_this35","newFile","parentAttachmentId","filename","getDisplayFileSize","bytes","si","thresh","units","u","orderSettings","Group","setSelectedGroups","addSelectedGroups","deleteSelectedGroups","setDisabledGroups","disabledGroupIds","setPublicDisabledGroups","disabledPublicGroupIds","getGroupIds","getSelectedGroups","getGroupsLeveled","parentName1","parentName2","existingParent1","existingParent2","includeGroupIds","onGroupsLoaded","isPublicGroups","isDisableParents","isDisableCollapsedParents","isShowGroupCount","isShowNoGroup","keyup .group-search","click .group-clear-filters","click .group-all-select","click .group-parent-select","click .group-expand","click .report-contact-groups","click .no-group-select","isNoGroupSelected","isGroupsLoaded","loadGroups","groupDescription","disabledPublicGroups","createDisabledPublicGroupsAlert","originalGroups","renderFilters","renderGroups","hideDisabled","filterVal","selectedFilter","publicFilter","setSelectedParents","expandSelectedParents","setDisabledParents","checkMaxGroups","getGroupSwitch","setIncludedGroups","headerAction","actionId","headerButton","noGroupClicked","selectParent","selectGroups","groupSelected","setSwitch","newGroups","allGroups","reportContactGroups","ReportContactGroupsModal","click .btn-report-contact-groups","grps","isPublic","grp","checkGroupsSelected","groupsData","report","reportedGroups","reportedGroupCount","createNotifyModal","click .groups-select-save","groupBadge","limitGroups","click .group-select-input-edit","click .group-select-input-delete","click .btn-show-groups","modify","renderSelectedGroups","deleteGroup","reverse","showAllGroups","HistoryTimelineModal","click .btn-notification-link","click .btn-notification-resend","_beforeModalCreated","_callee2","_this36","_context2","getActionName","description","getDescription","person","HistoryTimeline","EditorInput","extraLabelClasses","extraValueDisplayClasses","extraEditButtonClasses","editButtonText","isFormInput","showSaveButton","showCancelButton","onEditStart","click .ei-edit-button","click .ei-cancel-button","click .ei-save-button","keyup .ei-input","dp.change .ei-input","inputType","beforeInputRender","afterInputRender","CurrencyEditorInput","SelectPickerEditorInput","formTemplate","selectPickerOptions","_this$options7","_this37","getChoices","displayVal","defaultDisplayValue","TextAreaEditorInput","nullText","DateEditorInput","dateOrientation","datepicker","dataDisplayProperty","keyup","parseSource","autocomplete","_renderMenu","ul","_renderItemData","_resizeMenu","menu","dataItem","getDataItemValue","reloadSource","onKeyup","allowInputToggle","useCurrent","disabledDays","disableWeekends","isTimeOnly","onShow","isShowTimezone","isEditTimezone","timeZoneName","dp.show","setMinDate","parsedDate","_this38","timezonePicker","getTimezoneSelectOptions","onTimezoneChange","timezoneInputAddon","getPickerOptions","daysOfWeekDisabled","getDaysOfWeekDisabled","setTimezone","setDisabledDays","getPicker","_disableDays","disableDays","selectedDate","dateChanged","isChanged","parsedValue","setValueSilently","_minDate","setPickerOption","option","SelectPickerCollection","_class12","pickerSelector","pickers","initPickers","cleanPickers","_model$self$options$i","valueAttribute","disabled","DatePickerCollection","_class13","datePickerOptions","_model$self$options$i2","defaultValDate","onHide","selectAllText","selectOnTab","allGroupsIsMultiple","isBlockSubtext","isMirrorOptionColors","mustSelectValuePerOptGroup","countBeforeTextFormat","changed.bs.select","hidden.bs.select","show.bs.select","_this39","isMultipleGroupCount","hasIsMultipleGroup","updateChoices","selectpicker","isClicking","isCollapsed","checkGroupIsMultiple","optGroup","selectedOptionVal","selectedGroupAttr","getOptionGroupAttribute","groupIsMultiple","valueItem","intValueItem","groupAttr","isKeepExisting","isAllowSelectDisabled","valArr","groupValue","setInputColors","_this40","allIntChoices","fnMakeOption","_choice$style","pickerWidth","data-content","data-subtext","subtext","_choice$id","optChoice","updateNoneSelectedText","newText","clickedIndex","optionValue","optGroupValueSelected","onHidden","selectedOption","renderStates","countryDef","_this41","fetchGroups","gGroups","gGroup","_this42","fetchLocations","locations","getPickerArray","firstOptGroup","secondOptGroup","attachStateZipInputs","optionOnChange","onInit","tokenButton","summernote","invoke","HTMLEditorTokensModal","summerNoteOptions","tabsize","shortcuts","callbacks","$editable","toolbar","oninit","pasteValue","click .tokens-close","click table.tokens tr td label","insertToken","colorInactiveButtons","buttonClasses","fitWidth","separateButtons","click .input-btn-group button","renderButton","triggerChange","StarRating","click .btn-rate","rating","ratingChanged","setRating","DayPicker","click .btn-work-day","reportDayClicked","notificationPerDayRefresh","dayClicked","dayBtn","w","setAttribute","lazyLoadPath","timezoneClip","dF","SyntaxError","masks","D","L","o","flags","dd","i18n","dayNames","mm","mmm","monthNames","mmmm","yy","yyyy","hh","HH","ss","l","tt","TT","S","$0","ValidateEmail2","re","emailList","ValidateEmail3","shortDate","mediumDate","longDate","fullDate","shortTime","mediumTime","longTime","isoDate","isoTime","isoDateTime","isoUtcDateTime","_class14","getType","$processing","GLOBAL_GET_SESSION","PJQPROFILE_GET_PREQUAL","SEND_PREQUAL_UPDATE","PJQPROQUALADMIN_GET_INVITE","PJQPROQUALADMIN_GET_ITEM","PJQPROQUALADMIN_GET_REQUEST","PJQPROQUALADMIN_GET_ITEM_COMMENTS","PREQUAL_EXPORT","SCREENING_PAYMENT","GET_NEW_CONTACT_AB","PAYMENT_ERROR","DELETE_PROJECT_CONTACTS_OR_GROUPS","_class15","isIncludeUrl","isSave","SESSION_URL","auditAction","maps","GoogleMap","_class16","mapId","google","LatLng","mapTypeId","MapTypeId","ROADMAP","initMap","mapObjects","Map","gestureHandling","latitude","longitude","Marker","Animation","DROP","infoWindowContent","infoWindow","InfoWindow","addListener","KmlLayer","suppressInfoWindows","preserveViewport","countyIds","countyEncode","setMap","setCenter","setZoom","SuperMap","mapZoom","isDetail","isActive","click .btn-edit-super","click .btn-go-to-super","click .user-edit-text-map","onFetch","filtered","statusSelectPicker","statusFilterChanged","addr","getUserCustomFieldValue","getUserCustomFieldChoice","editButtonHtml","superMapDataTable","renderMap","renderCounts","retired","active","activeNew","retiredToOffice","activeSub","neverUse","retiredSub","inactiveSub","inactiveSuper","customFieldValue","renderMarkers","watchSearch","makeInfoWindow","removeMarkers","infoWindowEditSuper","editSuper","goToSuper","lat","lng","getPosition","filterArray","activeMenus","closeActiveMenus","menuSource","menuPosition","menuEvent","actionsGroups","noActionsMessage","_actionSelectEvent","namespace","closeNamespace","$menu","renderMenu","$menuList","$openTarget","openEvent","setupOpenEventListeners","setupActionsEventListeners","updatePosition","menuLocation","relativeToElem","Error","my","at","of","targetData","$noActionsMsg","numShown","$action","itemClasses","textClasses","isFunction","isEnabled","setupCloseEventListeners","clearCloseEventListeners","clearOpenEventListeners","clearActionsEventListeners","_this","$ul","groupArr","ind","actionsHaveIcon","addedToGroup","iconClass","isFirstNonEmptyGroup","actionsIds","isHidden","openEventName","evt","actionSelectEvent","device","AppDownloadModal","click .open-in-app","click .no-thanks","openInApp","onNo","isShowDontSaveButton","declineButtonColorClass","deleteButtonText","deleteButtonColorClass","declineButtonText","CopyDelete","getDataForOldProjectModules","pjqWallContext","pjqSessionId","PanteraScript","PanteraScriptService","GetProjectWallAdminSettings","projectContactTemp","parseJSON","LayoutCompany","pjqITBLayoutDefault","LayoutGroupCompany","pjqITBLayoutGroupCompany","FieldMappingContact","pjqFMContact","xmlFile","ProjectMessageTemplates","GetProjectInfo","onScriptError","NavItem","_class17","isBeta","isLegacy","requiresDirectory","isPrimaryProjectManagerCheckExempt","iconImage","iconImageActive","hasRoute","hasPrecedingSeparator","extraMarkup","includeMarkup","outsideRoute","requireSignUp","leaveView","$navBody","getIsDisabled","noRoute","RegisterDirectory","onRegister","navPref","appNavPref","APP_NAV_ITEMS","portalNavPref","PORTAL_APP_NAV_ITEMS","itemPref","getNavPref","ENABLE_PROJECT_NAME_PAGE_TITLE","pName","pCity","pState","pLoc","NavItemGroup","_class18","itemGroups","main","MyProjectList","BIDDING_PROJECTS_TAB_NAME","BiddingProjectsList","DISABLE_BIDDING_PROJECTS","ProjectInvitesList","pjqABContext","initAddressBook","ENABLE_PERMISSIONS","ENABLE_OLD_ADDRESSBOOK","DISABLE_OLD_ADDRESSBOOK","AddressBook","DISABLE_NEW_DOCUMENTS","DOCUMENTS_TAB_ID","FileNavigator","BidFiler","ENABLE_BID_FILER","initPrintOnDemand","ENABLE_PRINT_ON_DEMAND","companyType","terms","ScreeningTerms","renderDashboard","term","ScreeningTermsModal","onComplete","DISABLE_PREQUAL","ENABLE_OLD_CALENDAR","initScheduler","resources","ResourceAllocation","timecards","TimeCardMain","ENABLE_INVOICES","Invoices","InvoicePreview","erpAdmin","ERPAdminManagement","initSystemReports","ReportView","NewReportView","ENABLE_REPORTS_NEW","DISABLE_NEW_SETTINGS","initSystemSettings","SettingsNav","procoreCode","initView","marginTop","HIDE_RESOURCE_CENTER","ProjectDashboard","projectDetails","ProjectDetails","cancelEdit","proj","LocationManagement","ENABLE_PROJECT_LOCATIONS","pjqIsNewProjContainer","GetProjectContainerInfo","ProjContainerInfoC","ENABLE_PROJECT_CONTAINERS","PROJECT_WALL_MESSAGING_TAB_NAME","IS_PROJECT_WALL_MESSAGING_NEW_PORTAL","muid","fetchProjectMessageEmailTemplates","ProjectMessaging","copyProjectMessageId","dlgPM","msgEditor","searchGroupList","filterGroupTree","filterUnsent","onsubmit","onkeyup","showErrors","errorMap","errorList","errorsFor","defaultShowErrors","errorPlacement","errorClass","ignore","$itb","$docs","gridITB","PJQProjectWallAdminITBInitialize","InitializeGridITB","gridITBGroupBy","viewProjectMessageId","HandleViewProjectMessage","CopyProjectMsg","deleteProjectMessageId","selectedCommentId","showInfoDialog","ProjectUser1Label","DISABLE_PROJECT_WALL_MESSAGING_OLD","IS_PROJECT_WALL_MESSAGING_NEW","UserMessages","userMessageId","viewUserMessageId","DISABLE_PROJECT_PRIVATE_MESSAGES","BidFormEditor","BidFormEditorSelector","GroupBidForms","initProposalId","proposalId","initGroupId","ENABLE_BID_FORMS","isBidFormsEnabled","ProposalSelector","Bidder","projectContactsManagement","ProjectContactsManagement","DISABLE_PROJECT_CONTACTS","loPDocs","PJQProjectWallAdminProjectDocumentsInitialize","Dashboard","initOptions","DISABLE_DRAWINGS","expandSharedFolders","EXPAND_PROJECT_ROOT_SHARED_FOLDERS","DISABLE_PROJECT_ATTACHMENTS","ProjectPhotoGallery","PhotoGallery","DISABLE_PROJECT_PHOTOS","MeetingsList","meetingId","ScheduleDashboard","initTaskId","initLookAheadId","lookAheadId","shareKey","DISABLE_SCHEDULING","fetchRFISettings","RFIManagement","DISABLE_RFI","SubmittalsView","initSubmittalId","submittalId","DailyReportsManagement","DailyReportsNavigator","DISABLE_DAILY_REPORTS","PunchlistView","ActionItemsView","ActionItemView","PJQProjectWallAdminProjectReportsInitialize","BuildReportProject","PROJECT_WALL_RSVP_AUTO_REPORT","AutoReport","costCodeSettings","budget","ProjectCostCodeSettings","BudgetView","ProjectBudget","PrimeContractManagement","CommitmentManagement","ChangeRequestsList","ProjectDirectCosts","InvoicingManagement","hasHeader","nonAdminExtras","cloneModal","newProject","projectWall","initProjectNavigator","adminExtras","copyModal","ENABLE_COPY_PROJECT","OrderPrintsModal","PLAN_EXPRESS_PORTAL","BlueBookPublishModal","DISABLE_BLUE_BOOK_PUBLISH","procoreProjectNumber","ProcorePublishModal","PROCORE_PROJECT_NUMBER_CUSTOM_FIELD","customFieldLabel","customFieldValueTemp","PROCORE_CLIENT_ID","PROCORE_ACCESS_REFRESH_TOKEN","startsWith","commands","signUpMessage","click .nav-link","click .btn-to-top","click .btn-start-tour","isNavExpanded","innerWidth","expandNav","$nav","renderHeaderNavExpandButton","renderHeaderSubscription","bgColor","btnColor","$expand","showTrial","newSubscription","$subscription","$daysRemaining","$startTourButton","startTour","defActiveItem","isExpanded","determineCommands","ENABLE_TOP_OF_PAGE_BUTTON","fadeIn","fadeOut","setActiveItem","renderCommands","renderActiveItem","trialCookie","preventTour","navInit","expireCookie","expiresOnDays","expirationText","isDowngrade","SubscriptionTourIntro","_this$projectMenuItem","projectMenuItems","_this$projectMenuItem2","_this$projectMenuItem3","userMessageTypes","menuItem","UserMessageModal","userMessageTypeId","isProjectAdmin","getIsAdmin","userHeader","UserHeader","projectHeader","ProjectHeader","viewOptions","PROJECT_WALL_PRIMARY_PROJECT_MANAGER_REQUIRED","fnPMR","primaryPM","projectContact","cfid","targetValues","getDocumentTitle","shouldDoFirstRoute","renderSignUpMessage","backToTop","selectedItemId","click .btn-favorite-project","change .input-project-online","click .btn-project-map","projectMap","ProjectMapModal","favoriteProject","projectOnlineChanged","isOnline","alertMessage","click .btn-join-directory","joinDirectory","RegisterDirectoryModal","NotificationHistory","Notifications","lastSent","getTypeName","extraColumns","copyNotificationLink","notificationId","resendNotification","resendButton","resend","sentCount","wasResent","Notification","recipient","NotificationSetting","ContactNotifications","ProjectsNotifications","MessagingNotifications","PrivateMessagingNotifications","BidFormNotifications","DrawingNotifications","AttachmentNotifications","ProjectContactNotifications","RFINotifications","DailyReportNotifications","PunchListNotifications","ActionItemNotifications","SubmittalNotifications","ScheduleNotifications","MeetingNotifications","PayableInvoiceNotifications","NotificationSettings","hasNotificationSetting","notificationSetting","splitNS","setting","stack","settingsResult","part","ns","or","nsMap","modelNotificationSettings","permMap","messaging","privateMessaging","punchList","payableInvoices","notificationSettingsEditor","NotificationSettingsEditor","click .btn-system-notification-settings-override","click .btn-system-notification-settings-revert","click .btn-project-notification-settings-override","click .btn-project-notification-settings-revert","fetchNotificationSettings","systemNotificationSettings","UserType","projectNotificationSettings","fnInit","nsEl","nsModel","$nsEl","nsKey","$ns","notificationSettingChanged","$notificationSetting","otherNS","$otherNS","otherLevel","otherAttr","overrideSystem","notificationSettingsId","revertSystem","fp","overrideProject","revertProject","saveP","NotifyModal","click .btn-dont-show","setDontShowCookie","defaultNotifySettings","placement","from","exit","allow_dismiss","delay","z_index","getTemplate","notifyOptions","notifySettings","$template","Pagination","_class19","$paginationData","renderPageItem","dataSource","$paginationController","pagination","pageItemTemplate","payment","PaymentModal","click .payment-complete","click .payment-cancel","FORM_NOT_COMPLETE","INVALID_ACCOUNT","ERROR","product","Product","products","Products","Transaction","cardholderName","expirationMonth","expirationYear","securityCode","paymentCompleteClicked","validateForm","renderFormError","isFormValid","errorFields","$formError","isKeyupValidation","isFieldValid","zipLength","paymentCancelClicked","PaySimplePaymentModal","keyup .input-cardholder-name","keyup .input-card-number","fetchBillingInfo","monthPicker","yearPicker","cardholderNameChanged","firstName","lastName","spaceIndex","setCardIssuer","cardBrand","isNameValid","isCardValid","isYearValid","isMonthValid","saveBillingInfo","SubscriptionPaymentModal","selectSubscription","selectedSubscriptionId","click .sub-option","costs","curCost","hasCardOnFile","renderSelectedSubscription","subscriptionSelected","renderTotal","$err","cNumber","fnChangeSubscription","changeSubscription","Permission","ProjectsPermissions","ContactPermissions","DocumentPermissions","BidFilerPermissions","CalendarPermissions","ReportPermissions","SettingsPermissions","PrequalPermissions","ResourcePermissions","TimeCardPermissions","InvoicePermissions","UserPermissions","ProjectBasePermissions","MessagingPermissions","PrivateMessagingPermissions","BidFormPermissions","DrawingPermissions","AttachmentPermissions","ProjectContactPermissions","PhotoGalleryPermissions","RFIPermissions","DailyReportPermissions","PunchListPermissions","ActionItemPermissions","SubmittalPermissions","SchedulePermissions","BudgetPermissions","CommitmentPermissions","CommitmentChangeOrderPermissions","PrimeContractPermissions","PrimeContractChangeOrderPermissions","DirectCostPermissions","PayableInvoicePermissions","ReceivableInvoicePermissions","MeetingPermissions","ChangeRequestPermissions","Permissions","permission","splitPerm","permResult","modelPermissions","documents","bidFiler","reports","timeCards","base","photoGallery","commitmentChangeOrders","receivableInvoices","permissionEditor","PermissionsEditor","permFn","click .btn-system-permissions-override","click .btn-system-permissions-revert","click .btn-project-permissions-override","click .btn-project-permissions-revert","fetchPermissions","projectPermissions","hasApproval","ADDRESS_BOOK_APPROVAL_REQUIRED","newAddressBook","permissionEl","permissionModel","$permissionEl","permissionKey","$perm","permissionChanged","$permission","otherPerm","$otherPerm","permissionId","dateGroup","photo","canExport","click .gallery-photo-image","click .gallery-photo-download","keyup .gallery-search","click .select-photo","click .select-date-group","click .group-by","fetchGalleryPhotos","groupByDefault","groupByOptions","renderPhotos","filesToolbar","toolbars","FilesToolbar","startDatePicker","endDatePicker","groupedPhotos","weekBounds","$groupEl","$datePhotos","renderPhoto","startDateFilter","endDateFilter","$date","visiblePhotoCount","$photo","selectGroupBy","$groupBy","viewPhoto","downloadPhoto","selectPhoto","photoModel","removeFiles","addFiles","$dateGroup","selectDateGroup","dateGroupPhotos","PhotoShare","shareGuid","photoId","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","timeToCall","photoHelpers","easeOutQuart","currentTime","initialVal","changedVal","elementId","zoomValue","snapView","maxZoom","refreshOnResize","zoomOnMouseWheel","shouldCreateCanvas","keyListeners","click .iv-prev","click .iv-next","click .iv-rotate-neg-90","click .iv-rotate-90","viewport","ZOOM_CONSTANT","MOUSE_WHEEL_COUNT","previousRoute","setContainerDimensions","$window","$contain","snapImageWrap","imageView","imageWrap","snapHandle","zoomHandle","createdOnDate","_viewerId","keydownListener","listener","eventSuffix","prevButton","nextButton","initViewer","initPaging","image","pagingModels","pageIndex","pagingDisplay","renderPaging","modelCount","rotate","rotation","rotate90","rotateNeg90","canDrag","canZoom","viewer","snapImgWrap","snapSlider","sliderId","onStart","curHandleTop","curHandleLeft","handleWidth","handleHeight","imageSlider","slideMomentumCheck","sliderMomentumFrame","onMove","maxLeft","maxTop","minLeft","minTop","imgLeft","imgWidth","containerDim","imgTop","imgHeight","currentImg","$canvas","$activeCanvas","$tooltips","cOff","canvas","_imageSlider","zooming","positions","startPosition","_clearFrames","currentPos","shift","mx","onEnd","xDiff","yDiff","positionX","positionY","momentum","changedDelta","wheelDelta","detail","contOffset","pageY","showSnapView","eStart","touch0","touches","touch1","startDist","pow","startZoom","$document","moveListener","eMove","newDist","endListener","point","touchtime","now","resetZoom","snapViewTimeout","snapViewVisible","slider","noTimeout","leftOffset","newLeft","_zoomSliderLength","snapEventsCallback","perc","lastZoomPoint","curPerc","curImg","curLeft","curTop","imageDim","baseLeft","baseTop","baseRight","baseBottom","_zoomFrame","tickZoom","ratio","newTop","prevItemInfo","wIncrease","hIncrease","_resizeHandle","_calculateDimensions","imageWidth","imageHeight","$iv","contWidth","contHeight","snapViewWidth","snapViewHeight","snapImg","refreshOpts","afterDimensionChange","showOpts","loadOpts","persistZoom","activeCtx","refreshView","afterImageDownload","newZoom","newZoomPoint","afterLoad","chromeVer","currentImage","naturalWidth","isDisableDownload","contextmenu .iv-image-view","pageCount","preventRightClick","_class20","def","touchMove","touchEnd","eOriginal","sx","clientX","sy","clientY","onMouseDown","Preferences","setPref","deletePref","ACTION_ITEM_WORK_COMPLETED_STATUS_OVERRIDE","ADDRESS_BOOK_DEFAULT_DISPLAY_DIRECTORY","ADDRESS_BOOK_COLOR_COLUMNS","ADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL","ADDRESS_BOOK_CONTACT_ID_LABEL","ADDRESS_BOOK_SHOW_PREQUAL_URL","ADDRESS_BOOK_SHOW_PREQUAL_EDITOR","ADDRESS_BOOK_HIDE_DEFAULT_SEARCH","ADDRESS_BOOK_CONTACT_UPDATER_ENABLED","ADDRESS_BOOK_HIDE_INACTIVE_CONTACTS","ADDRESS_BOOK_DEFAULT_FILTERS","ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS","ALLOW_SUB_GROUP_EDIT","PJQ_REGISTRATION_WORKAREAS_OPTIONAL","BIDDING_PROJECTS_REQUIRE_APPROVAL","BIDDING_PROJECTS_INCLUDE_COLUMNS","BID_FORM_NOT_SUBMITTED_STATUS_NAME_OVERRIDE","CAN_ORDER_ON_ACCOUNT","COPY_SCOPES_GRID_LAYOUT","DAILY_REPORT_ATTACHMENTS_NAME","DAILY_REPORT_SURVEY_NAME","DAILY_REPORT_NAV_ORDER","DAILY_REPORT_IS_LOCKED_AFTER_SUBMIT","DRAWING_SHARE_PREVENT_EXPIRATION","DRAWING_HIDE_TITLE","DRAWING_HIDE_TAG","DEFAULT_AUTO_SELECT_DISABLED","DISABLE_DAILY_REPORT_EXPENSES","DISABLE_PROJECT_PRIVATE_ATTACHMENTS","DISABLE_PROJECT_DOCUMENTS","DISABLE_SIMPLE_SEARCH","DRAWINGS_CURRENT_SET_DEFAULT_OFF","DOWNLOAD_RESPONSE_REQ","DOWNLOAD_TERMS_PROJECT_CF","DOWNLOAD_TERMS_PROJECT","DOWNLOAD_TERMS_SIGNATURE_REQ","DOWNLOAD_TERMS","EMAIL_LOGO_URL","ENABLE_AB_PREQUAL_EDIT","ENABLE_ADMIN_PAID_DOWNLOADS","ENABLE_BID_FORM_SEALING","ENABLE_BID_PACKAGES","ENABLE_BID_PACKAGES_COUNT","ENABLE_DATA_TABLE_FIXED_HEADER","ENABLE_DELIVER_BY_LOCAL","ENABLE_DELIVER_BY_PICKUP","ENABLE_DIRECTORY","ENABLE_DRAWING_ANNOTATIONS","ENABLE_DRAWING_ANNOTATION_REFS","ENABLE_FAX","ENABLE_FIELD_REPORTS","ENABLE_GANTT_COLUMN_SORTING","ENABLE_MEETINGS","ENABLE_MEETING_TRANSCRIPTIONS","DISABLE_OLD_SUBMITTALS","ENABLE_NEW_ADDRESSBOOK","ENABLE_FINANCES","ENABLE_NEW_FILES","ENABLE_NEW_FILE_VIEWER","ENABLE_NEW_GANTT","ENABLE_PERMISSIONS_PORTAL","ENABLE_PREQUAL_AUDITLOG","ENABLE_PREQUAL_COMMENTS","ENABLE_PROJECT_MESSAGE_DECLINE_QUESTION","ENABLE_PROJECT_NDA_DECLINE","ENABLE_NEW_PROJECT_CONTACTS_MANAGEMENT","ENABLE_NEW_PROJECT_HISTORY","ENABLE_NEW_SUBMITTALS","ENABLE_NEW_UPLOAD_BID_DOCS","ENABLE_RAW_FILE_UPLOAD_BILLING","ENABLE_RESOURCE_ALLOCATION","ENABLE_TIME_CARDS","ENABLE_TIMECARDS_SIGNATURE","ENABLE_USER_GROUPS","ENABLE_WORK_LOG_OVERTIME","DISABLE_PREQUAL_ATTACHMENT_DELETE","DISABLE_PREQUAL_CONTACT_ATTACHMENT_LINK","ENABLE_NEW_CONTACT_IMPORT","ENABLE_NEW_RAW_FILE_UPLOAD","DISABLE_SHARE_PEI","DISABLE_WORK_AREAS","ENABLE_ACTION_ITEMS","ENABLE_ERP_ADMIN","ENABLE_PREQUAL_PRIVATE_GROUPS","ENABLE_SUB_RESPONSE","ENABLE_PUNCH_LISTS","ENABLE_REGIONS_MAP","ENABLE_RFI_NEW","ENABLE_RFI","ENABLE_SCHEDULING","ENABLE_SCHEDULE_TASK_NOTIFICATION_SETTINGS","ENABLE_SCOPES","ENABLE_SUBMITTALS","ENABLE_SUBMITTAL_WORKFLOW","ENABLE_WORK_AREAS_ZIP_RADIUS_COUNTY_PICKER","ENABLE_WORK_AREAS","EXPAND_PROJECT_ATTACHMENTS","FILE_NAVIGATOR_VIEW_ON_CLICK","FLATTEN_DL_ALL_PROJECT_ATTACHMENTS","HAS_GROUPS_LINKED","HIDE_DAILY_REPORT_UNSUBMIT","HIDE_SAVE_PAYMENT_INFO","HIDE_VERSION_SELECTOR_ISSUED_ON","HIDE_SUBMITTAL_ITEM_TYPE","IS_DISABLE_PARENT_GROUPS","IS_DOCUMENT_CLERK_COMPANY","IS_DODGE_CRM","IS_DODGE_WG","IS_ENABLE_NEW_DOWNLOADS","IS_PROJECT_HOME_READONLY","IS_PROQUAL_PORTAL","IS_REQUIRE_BIDFORM_ATTACHMENT","ITB_RESUME_LABEL","ITB_SEND_NEW_LABEL","ITB_TAB_LABEL","MESSAGE_RESPONSE_DUE_LABEL","MESSAGE_STATUS_LIST","NEW_APP_PORTAL","ORDER_DELIVER_BY","ORDER_LARGE_FORMAT_BINDING_TYPE","ORDER_LARGE_FORMAT_PAPER_TYPE","ORDER_LARGE_FORMAT_PRINT_SIZE","ORDER_LARGE_FORMAT_QUANTITY","ORDER_PO_REQUIRED","ORDER_SMALL_FORMAT_BINDING_TYPE","ORDER_SMALL_FORMAT_PAPER_TYPE","ORDER_SMALL_FORMAT_QUANTITY","PREQUAL_HEADER","PREQUAL_ALLOW_SIGNATURE_ALWAYS","PREQUAL_HELP_CONTACT_DETAILS","PREQUAL_PROJECT_REFERENCE_COUNT","PREQUAL_PROJECT_REFS_GC_COL_NAME","PREQUAL_SIGNATURE_ALERT","PREQUAL_TAX_ID_MASK","PREQUAL_TERMS","PREVENT_NATIONWIDE_WORK_AREAS","PREVENT_NATIONWIDE_WORK_AREAS_PORTAL","PREVENT_NATIONWIDE_WORK_AREAS_SUB","PRIVATE_MESSAGING_USER_ID_DEFAULT","PROCORE_CLIENT_REDIRECT","PROCORE_URL_API","PROCORE_URL_AUTH","PROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS","PROJECT_ACTIVITY_RANK_STATUS_LIST","PROJECT_DEFAULT_BID_DUE_TIME","PROJECT_DEFAULT_BID_DUE_TIME_AMPM","PROJECT_DETAILS_EXPORT","PROJECT_MANAGEMENT_CONTACTS_ENABLE_PRIMARY","PROJECT_MESSAGING_DEFAULT_TEMPLATE","PROJECT_MESSAGING_DISABLE_QUICKADD","PROJECT_MESSAGING_DISABLE_RESPONSE_DUE","PROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD","PROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE","PROJECT_MESSAGING_MAX_GROUP_DISPLAY","PROJECT_MESSAGING_SEND_OPTIONS_EMAIL_ALWAYS","PROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS","PROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED","PROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL","PROJECT_MESSAGING_RESTRICT_TO_EXISTING_GROUPS","PROJECT_NAV_HEADER_CUSTOM_MARKUP","PROJECT_NDA_CHECKED_DEFAULT","PROJECT_NDA_MODAL_TITLE","PROJECT_NOTES_LABEL","PROJECT_SHARED_FOLDER_NAME_OVERRIDE","PROJECT_STATUS_LIST","PROJECT_STATUS_NON_DEFAULT_REQUIRED","PROJECT_USER_1_LABEL","PROJECT_USER_2_HIDE","PROJECT_USER_2_LABEL","PROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED","PROJECT_WALL_ADMIN_NOTES_HIDDEN","PROJECT_WALL_ADMIN_NOTES_REQUIRED","PROJECT_WALL_ADMIN_USER_2_REQUIRED","PROJECT_WALL_ADMIN_VIEW_BID_PACKAGES","PROJECT_WALL_ADMIN_VIEW_COMPANY","PROJECT_WALL_ADMIN_VIEW_CONTACT","PROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY","PROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT","PROJECT_WALL_ADMIN_ZIP_REQUIRED","PROJECT_WALL_MESSAGING_SHOW_TEMPLATES","PROJECT_WALL_DEFAULT_MODULE","PROJECT_WALL_DEFAULT_PRIVATE_FOLDERS","PROJECT_WALL_DEFAULT_PUBLIC_FOLDERS","PROJECT_WALL_SORT_GROUPS_BY_RESPONSE","PROJECT_WALL_HIDE_BIDS_DUE","PROJECT_WALL_TAB_ID","PROJECT_SCHEDULE_FILTER_USER_ID","PUBLIC_PROJECTS_REQ_REG","PUBLIC_PROJECTS_EMPTY_MESSAGE","PUNCH_LIST_WORK_COMPLETED_STATUS_OVERRIDE","QUIKBID_ZIP_CODES","REGISTRATION_REDIRECT","REGISTRATION_TAB_ID","RESOURCE_ALLOCATION_PRIMARY_ONLY","RESPONSE_DUE_LABEL","PROJECT_START_LABEL","PROJECT_FINISH_LABEL","REQUIRE_PROJECT_START_FINISH","RESOURCE_ALLOCATION_PROJECT_CUSTOM_FIELD_COLOR_BAR","RFI_DEFAULT_PUBLIC","RFI_DEFAULT_NOTIFY_PROJECT_CONTACTS","RFI_DEFAULT_NOTIFY_PARTICIPANTS","RFI_LOCATION_LABEL","RFI_NAME_OVERRIDE","RFI_RESPONSE_NAME_OVERRIDE","RSVP_DISABLE_PER_GROUP","RSVP_FOLDER_CHECKBOXES_ONLY","SETTINGS_LOCK","PROJECT_DETAILS_PROJECT_ID","SIMPLE_SEARCH_DEFAULT_ADDRESS_BOOK","SIMPLE_SEARCH_DEFAULT_RADIUS","SQUARE_TAKEOFF_ENABLED","STACK_TAKEOFF_ENABLED","START_END_HIDE","TIMECARD_WEEKLY_EXPORT_TEMPLATE","ENABLE_WORK_LOG_WORK_ITEMS","ENABLE_WORK_LOG_PROGRESS","WORK_LOG_WORK_ITEM_LABEL","WORK_LOG_WORK_ITEM_SUB_TEXT","ProgressBar","_class21","isShowPercentage","borderRadius","renderProgressBar","_this$options$colorCl","_this$options$borderR","colorClass","getCompletionColorClass","$res","role","textClass","makeProgressBar","updateIsPrimary","isPrimary","ProjectContacts","click .btn-edit-pc-perms","click .btn-edit-pc-notification-settings","click .edit-project-contact","click .remove-project-contact","click .project-contacts-new-user","change .cb-primary","click .export-pdf","click .export-excel","click .btn-copy-email","grResult","notificationButton","tableOpts","editContact","ManageProjectParticipantTradesModal","projectMessaging","MSGCONT_CONT","editNotificationsSettings","removeContact","clipboard","writeText","changeIsPrimary","editPermissionsClicked","notificationSettingsClicked","removeClicked","exportProjectContacts","NewReport","columnOrder","export","exportPDF","projectInvites","ProjectInvite","isShowQuickAdd","isShowAttachments","defaultTemplateKey","inviteSettings","sendEmail","sendFaxIfNoEmail","sendFaxIfEmailFails","sendFaxAlways","responseDue","responseDueLabel","quickAdd","uploaderGuid","privateFolders","templateKey","replyTo","emailTemplate","replyToContacts","activeView","replyToSelectPicker","messageSubject","queuePreview","renderPreview","messageType","dropupAuto","messageTypeSelected","responseType","sendOptions","SelectpickerProjectMessageSendOptions","messageBodyEditor","messageBody","prependTo","fetchAttachments","isShared","includeDrawings","ProjectAttachments","isHideDownload","isHideDrawings","preventSelectAll","selectedAttachments","tokens","bidDueDate","responseDueDate","responseDueDateWithBy","translateTokens","phoneExtension","cell","emailLogoURL","fullAddress","email2","signature","customFieldLabel1","customFieldValue1","customFieldLabel2","customFieldValue2","customFieldLabel3","customFieldValue3","customFieldLabel4","customFieldValue4","customFieldLabel5","customFieldValue5","customFieldLabel6","customFieldValue6","customFieldLabel7","customFieldValue7","customFieldLabel8","customFieldValue8","customFieldLabel9","customFieldValue9","customFieldLabel10","customFieldValue10","customFieldValue1_CLBR","customFieldValue2_CLBR","customFieldValue3_CLBR","customFieldValue4_CLBR","customFieldValue5_CLBR","customFieldValue6_CLBR","customFieldValue7_CLBR","customFieldValue8_CLBR","customFieldValue9_CLBR","customFieldValue10_CLBR","senderPM","projectContact2","domain","dateTime","rsvpurl","recipientGroupList","recipientGroupListComma","messageResponseDueLabel","responseDueTime","sentOnDate","estCompleteDate","estStartDate","messageName","responseDueShortTime","responseDueTimeZone","startDate","projectStatus","customFieldLabel11","customFieldValue11","customFieldLabel12","customFieldValue12","customFieldLabel13","customFieldValue13","customFieldLabel14","customFieldValue14","customFieldLabel15","customFieldValue15","customFieldLabel16","customFieldValue16","customFieldLabel17","customFieldValue17","customFieldLabel18","customFieldValue18","customFieldLabel19","customFieldValue19","customFieldLabel20","customFieldValue20","customFieldLabel21","customFieldValue21","customFieldLabel22","customFieldValue22","customFieldLabel23","customFieldValue23","customFieldLabel24","customFieldValue24","customFieldLabel25","customFieldValue25","customFieldLabel26","customFieldValue26","customFieldLabel27","customFieldValue27","customFieldLabel28","customFieldValue28","customFieldLabel29","customFieldValue29","customFieldLabel30","customFieldValue30","customFieldLabel31","customFieldValue31","customFieldLabel32","customFieldValue32","customFieldLabel33","customFieldValue33","customFieldLabel34","customFieldValue34","customFieldLabel35","customFieldValue35","customFieldLabel36","customFieldValue36","customFieldLabel37","customFieldValue37","customFieldLabel38","customFieldValue38","customFieldLabel39","customFieldValue39","customFieldValue26_CompanyName","customFieldValue26_ContactName","customFieldValue26_ContactTitle","customFieldValue26_Address26","customFieldValue26_Address2","customFieldValue26_City","customFieldValue26_StateProvince","customFieldValue26_PostalCode","customFieldValue26_Country","customFieldValue26_Phone","customFieldValue26_Fax","customFieldValue26_Cell","customFieldValue26_Email","customFieldValue27_CompanyName","customFieldValue27_ContactName","customFieldValue27_ContactTitle","customFieldValue27_Address27","customFieldValue27_Address2","customFieldValue27_City","customFieldValue27_StateProvince","customFieldValue27_PostalCode","customFieldValue27_Country","customFieldValue27_Phone","customFieldValue27_Fax","customFieldValue27_Cell","customFieldValue27_Email","customFieldValue11_CLBR","customFieldValue12_CLBR","customFieldValue13_CLBR","customFieldValue14_CLBR","customFieldValue15_CLBR","customFieldValue16_CLBR","customFieldValue17_CLBR","customFieldValue18_CLBR","customFieldValue19_CLBR","customFieldValue20_CLBR","customFieldValue21_CLBR","customFieldValue22_CLBR","customFieldValue23_CLBR","customFieldValue24_CLBR","customFieldValue25_CLBR","customFieldValue26_CLBR","customFieldValue27_CLBR","customFieldValue28_CLBR","customFieldValue29_CLBR","customFieldValue30_CLBR","customFieldValue31_CLBR","customFieldValue32_CLBR","customFieldValue33_CLBR","customFieldValue34_CLBR","customFieldValue35_CLBR","customFieldValue36_CLBR","customFieldValue37_CLBR","customFieldValue38_CLBR","customFieldValue39_CLBR","groupDueDates","userType395_CompanyName","userType395_ContactName","userType395_ContactTitle","userType395_Address","userType395_Address2","userType395_City","userType395_StateProvince","userType395_PostalCode","userType395_Country","userType395_Phone","userType395_Fax","userType395_Cell","userType395_Email","userType396_CompanyName","userType396_ContactName","userType396_ContactTitle","userType396_Address","userType396_Address2","userType396_City","userType396_StateProvince","userType396_PostalCode","userType396_Country","userType396_Phone","userType396_Fax","userType396_Cell","userType396_Email","ProjectInviteModal","onAddFromThisProject","onViewSelected","projectMessagingView","isShowAddParticipants","click .preview-invite","click .invite-send","click .invite-preview","click .invite-close","click .btn-add-participants-from-project","click .btn-add-participants-from-this-project","click .btn-detailed-search","click .btn-detailed-search-new","click .btn-simple-search","click .btn-quick-search","click .view-selected-contacts","click .preview-export","projectInvite","previewInvite","ProjectInvitePreviewModal","closeInvite","sendInvite","totalSize","sendFax","endpointCheck","isAddAllGroups","projectMessageSendOptions","sendCallback","endpointSend","nonPendingCount","addSelectedContacts","stats","unsentCount","renderContactStats","addParticipantsFromThisProject","addParticipantsFromProject","getProjectStatusList","AddParticipantsFromProjectModal","projectResponses","isReturnContactIds","simpleSearch","showUnionStatus","AddParticipantsModal","isDirectoryEnabled","isUnionStatusEnabled","addParticipantsById","detailedSearch","viewSelected","ProjectInvitesModal","click .project-invites-add-contacts","click .btn-remove-contact","click .project-invites-jump-step","click .remove-invite","click .invites-close","click .invites-send","selectedCompanies","contactTable","manageButtonStates","responseDueAsapCheckbox","responseDueInput","messageSubjectInput","messageTypeSelectPicker","responseTypeSelectPicker","defaultSendOptions","sendOptionsSelectPicker","messageBodyHTMLEditor","goToStep","sendOption","jumpStep","thisStep","thisStepHeader","addContacts","deleteText","contactCount","removeInvite","ResponseDueTime","projectMessages","ProjectMessagesResponse","messages","ProjectMessages","contactGroups","ProjectContactGroups","getContextMessage","contextMessage","sessionMessage","canChangeStatus","noResponseMessages","getChangeableMessages","ProjectMessage","ProjectContactGroup","getCompanyCustomField","getContactCustomField","ProjectParticipants","addButtonText","defaultDirectoryFilter","defaultZip","groupSelectorOptions","click .add-participants-cancel","click .add-participants-save","keyup .add-participants-zip","keydown .add-participants-radius","click .send-message-save","isWorkAreasEnabled","projectZip","fetchBidPackages","bp","zipChanged","directoryFilter","directoryFilterStr","unionFilterSelectPicker","locationFilter","locationTypeSelector","$radiusOuter","$boundariesOuter","isPrivate","hasGroupsLinked","hasBidPackages","selectedDirectoryValues","$publicA","$publicLi","$privateA","$privateLi","$bidPackageA","$bidPackageLi","groupSelectorPrivate","groupSelectorPublic","fnSelect","bidFormGroupIds","summary","BidFormsSummary","summaryItem","sendMessage","isSendMessage","publicGroups","privateGroups","canCrossStateBoundaries","locationType","isWorkAreas","isOfficeLocation","selectedUnionStatusValues","isNoLaborStatus","participantCount","click .add-participants-select-projects-continue","click .add-participants-select-trades-continue","click .add-participants-jump-step","ProjectSelector","excludeProjectIds","onProjectSelected","selectedProjects","renderSelectedProjectCount","dataTableHeaderData","isHideDeletedFilter","selectedProjectCount","completeProjectsStep","completeTradesStep","goToStepEvent","startStep","createGroupSelector","resLower","projectResponseFilterSelectPicker","renderSelectedGroupCount","selectedGroupCount","isCopyBidForms","responseFilter","participantsCopied","bidFormsCopied","contactsCopied","Project","isBase","_this43","Subscription","nda","ProjectNDA","user2","checkDownloadRequirements","fetchProjectMessageResponses","ProjectMessageResponseModal","onResponse","DownloadTermsModal","onAccept","updateResponse","_this44","Promise","resolve","reject","companyGroups","_this45","erpObjectFetched","linkERP","fetchVersions","Versions","att","sharedAttachments","privateAttachments","fnResult","resultAtt","isDeferred","createPsuedoFolders","forceRecursive","downloadAttachments","hasNonPrivate","fnCheck","folderAtt","OrderDownloadAdmin","attachFiles","detachFiles","messageResponses","fetchDailyReportSettings","dailyReportSettings","Settings","fetchBidFormSettings","bidFormSettings","fetchNDA","fetchPunchListItems","_this46","punchListItems","PunchlistItems","fetchPunchListCustomFields","_this47","punchlistCustomFields","PunchlistCustomFields","fetchRFICustomFields","rfiCustomFields","fetchActionItems","_this48","ActionItems","fetchActionItemCustomFields","actionItemCustomFields","ActionItemCustomFields","fetchSubmittalWorkflowTemplates","_this49","submittalWorkflowTemplates","WorkflowTemplates","fetchSubmittalSettings","_this50","submittalSettings","fetchSubmittalStatuses","_this51","submittalStatuses","Statuses","fetchSubmittalItemTypes","_this52","submittalItemTypes","ItemTypes","fetchSubmittalCustomFields","_this53","submittalCustomFields","SubmittalCustomField","fetchSubmittalTemplates","_this54","submittalTemplates","fetchActionItemTemplates","actionItemTemplates","fetchPunchlistTemplates","punchlistTemplates","fetchMeetingTemplates","meetingTemplates","fetchActionItemSettings","actionItemSettings","fetchPunchListSettings","punchlistSettings","fetchRFIs","rfis","rfiSettings","galleryPhotos","ProjectPhotos","_this55","Locations","fetchUserMessageTypes","userMessages","UserMessageTypes","fetchScheduleSettings","_this56","scheduleSettings","fetchSchedule","_this57","Schedule","fetchScheduleLookAheads","_this58","scheduleLookAheads","LookAheads","fetchScheduleNotifications","force","_this59","scheduleNotifications","fetchScheduleTemplates","scheduleTemplates","fetchAnnotationLayers","annotationLayers","Layers","deleteAllPunchLists","deleteAllActionItems","deleteAllScheduleTasks","pendingRequestedChanges","list","getMessageStatusList","storeUrl","appRoute","fetchSubJobs","_this60","subJobs","SubJobs","fetchCostCodes","_this61","costCodes","CostCodes","fetchCostTypes","_this62","costTypes","CostTypes","PUSH_COST_TYPES","allowedCostTypes","costType","fetchTaxCodes","_this63","taxCodes","TaxCodes","fetchUnitsOfMeasure","_this64","unitsOfMeasure","UnitsOfMeasure","fetchBudgetTimeStats","_this65","fetchBudget","_this66","Budget","fetchBudgetViews","_this67","budgetViews","BudgetViews","fetchBudgetSnapshots","_this68","snapshots","Snapshots","fetchCommitmentSettings","_this69","commitmentSettings","fetchCommitmentFieldSettings","_this70","commitmentFieldSettings","FieldSettings","fetchCommitmentTerms","_this71","commitmentTerms","Terms","fetchCommitmentCustomFields","_this72","commitmentCustomFields","fetchDirectCostCustomFields","_this73","directCostCustomFields","fetchMeetingCustomFields","_this74","meetingCustomFields","fetchMeetingSettings","_this75","meetingSettings","fetchCommitmentChangeOrderSettings","_this76","commitmentChangeOrderSettings","ChangeOrderSettings","fetchCommitmentChangeOrderFieldSettings","_this77","commitmentChangeOrderFieldSettings","ChangeOrderFieldSettings","fetchCommitmentChangeOrderCustomFields","_this78","commitmentCOCustomFields","ChangeOrderCustomFields","fetchPrimeContractFieldSettings","_this79","primeContractFieldSettings","fetchPrimeContractTerms","_this80","primeContractTerms","fetchPrimeContractSettings","_this81","primeContractSettings","fetchPrimeContractCustomFields","_this82","primeContractCustomFields","fetchPayableInvoiceSettings","_this83","payableInvoiceSettings","PayableInvoiceSettings","fetchPayableInvoiceFieldSettings","_this84","payableInvoiceFieldSettings","PayableInvoiceFieldSettings","fetchPayableInvoiceCustomFields","_this85","payableInvoiceCustomFields","PayableInvoiceCustomFields","fetchReceivableInvoiceSettings","_this86","receivableInvoiceSettings","ReceivableInvoiceSettings","fetchReceivableInvoiceCustomFields","_this87","receivableInvoiceCustomFields","ReceivableInvoiceCustomFields","fetchPrimeContractChangeOrderFieldSettings","_this88","primeContractChangeOrderFieldSettings","fetchPrimeContractChangeOrderSettings","_this89","primeContractChangeOrderSettings","fetchPrimeContractChangeOrderCustomFields","_this90","primeContractCOCustomFields","fetchChangeRequestSettings","_this91","changeRequestSettings","fetchChangeRequestCustomFields","_this92","changeRequestCustomFields","fetchBillingPeriodSettings","_this93","allowAutomate","billingPeriodSettings","BillingPeriodSettings","ProjectCustomField","ProjectSettings","isColumnSelected","ProjectInvitesSettings","setFavoriteFilter","getFavoriteFilter","Projects","isSimple","isBidding","customFieldIds","isMyProjects","isProjectInvites","singleProjectHistory","overallHistory","onGoToProject","keyup .input-history-search","click .link-project","click .btn-copy-access-key","click .btn-view-downloads","click .btn-show-message","getContextMenuItems","projectMessageId","projectMessageContactBroadcastId","historyTypeSelectPicker","renderHistory","$history","singleProjectData","renderSingleProjectHistory","overallData","renderOverallHistory","created","bidDueTime","bidDueTimeZone","broadcastStatus","broadcastErrorMessage","responded","statusesDatasets","responses","notResponded","cutoutPercentage","yAxes","clickedSegments","segment","stat","_index","responsesDataset","responsesColors","startDateLabel","finishDateLabel","statusFilter","dateTemp","emailSuccessCount","faxSuccessCount","emailFailedCount","faxFailedCount","goToProject","showProjectMessage","copyAccessKey","viewDownloads","ProjectParticipantDownloadHistoryModal","downloadedOn","dataTableColumns","change .select-project","ProjectSelectorDataTable","bidsDue","rDueText","displayName","selectProject","selectedProject","dtProject","selProject","ProjectSelectorModal","excludeProjects","ProjectSelectorInput","projectBadge","selectedProjectIds","click .project-select-input-add","click .project-select-input-delete","formGroup","renderSelectedProjects","newProjects","deleteProject","deletedProject","click .project-selector-clear-filters","projectStatusFilterPicker","ProjectAttachment","ProjectNDAs","PublicProjects","click .project-header","emptyMessage","projectClicked","regTabId","dodgeTooltip","click .btn-publish","BlueBookProject","projectStatePicker","projectGroups","newTime","publish","contactAddress","contactCity","contactState","contactZip","contactCountry","contactPhone","projectRole","projectAddress","projectCity","projectState","projectCountry","contactNameOverride","emailOverride","UploadParticipantBidDocumentsModal","click .save-attachments","Scopes","projectScopes","CopyScopesFromProjectModal","onCopy","click .copy-scopes-cancel","click .copy-scopes-save","ProjectStatus","ProjectStatuses","rawFileUploads","RawFileUpload","Register","click .btn-continue","register","isApprovalRequired","RegisterAuth","GenerateReportModal","reportOption","onDownload","click .modal-report-download","to","isOptionValid","isToValid","isFromValid","Resizable","_class22","coreFields","UserTypes","hasContact","leaveDirectory","_this94","eInt","Integration","fetchIntegrations","Integrations","fetchUserLimits","userLimits","fetchNDAs","ndas","bidPackageTemplates","fetchBidFormTemplates","bidFormTemplates","_this95","_this96","fetchInspectionTypes","_this97","inspectionTypes","inspections","Types","fetchInspectionResponseTypes","_this98","inspectionResponseTypes","ResponseTypes","fetchInspectionUserSettings","_this99","inspectionUserSettings","UserSettings","fetchPlanRoomSettings","planRoomSettings","PlanRoomSettings","fetchOrderingSettings","orderingSettings","OrderingSettings","fetchAddressBookSettings","addressBookSettings","AddressBookSettings","_this100","ActionItemCustomField","_this101","_this102","UserFieldSettings","_this103","_this104","fetchReceivableInvoiceFieldSettings","_this105","receivableInvoiceFieldSettings","ReceivableInvoiceFieldSettings","_this106","_this107","_this108","fetchDirectCostFieldSettings","_this109","directCostFieldSettings","DirectCostFieldSettings","_this110","fetchPayableInvoiceUserSettings","_this111","payableInvoiceUserSettings","PayableInvoiceUserSettings","fetchReceivableInvoiceUserSettings","_this112","receivableInvoiceUserSettings","ReceivableInvoiceUserSettings","_this113","UserCustomFields","fetchScreeningSettings","screeningSettings","addressBook","ProqualSettings","_this114","fetchSubmittalUserSettings","_this115","submittalUserSettings","SubmittalUserSettings","_this116","_this117","_this118","fetchScheduleCustomFields","ScheduleCustomFields","fetchUserTypes","_this119","_this120","_this121","scheduleTaskStatuses","TaskStatuses","fetchPrequalForm","_this122","prequalForms","Form","fnCallback","calendarSettings","_this123","_this124","smuid","_this125","fetchUsers","Providers","fetchDailyReportTemplates","SurveyTemplates","_this126","_this127","fetchCommitmentUserSettings","_this128","commitmentUserSettings","CommitmentUserSettings","_this129","fetchCommitmentChangeOrderUserSettings","_this130","commitmentChangeOrderUserSettings","ChangeOrderUserSettings","fetchDirectCostSettings","_this131","directCostSettings","_this132","fetchDirectCostUserSettings","_this133","directCostUserSettings","_this134","_this135","fetchPrimeContractUserSettings","_this136","primeContractUserSettings","PrimeContractUserSettings","_this137","fetchPrimeContractChangeOrderUserSettings","_this138","primeContractChangeOrderUserSettings","_this139","fetchChangeRequestUserSettings","_this140","changeRequestUserSettings","ChangeRequestUserSettings","sub","subscriptionChangedListeners","listenSubscriptionChanged","updateAutoRenew","userSeats","sharing","SharingModal","isEmailOnly","canEditSubject","preventExpiration","click .input-share-link,.btn-share-link-copy","change .cb-prevent-expire","urlLoader","renderPreventExpire","copyShareLink","linkCopiedText","urlChanged","allDrawings","$preventExpireAlert","signatures","SignatureSubmitModal","headerText","headerSubText","fetchSignature","click .signature-erase","click .signature-close","click .signature-submit","renderSignaturePad","fetchUserSignature","isNewSignature","signaturePad","fromDataURL","SignaturePad","resizeCanvas","isSubmitted","toDataURL","onErase","devicePixelRatio","offsetWidth","offsetHeight","scale","SignatureTermsModal","_class23","fitHorizontal","bootstrapSlider","_class24","selectedClass","multisortable","getSelected","StepIndicator","_class25","_this$options$steps","_this$options$activeS","steps","activeStep","_this141","statusClass","_PJQ$constants$subscr","names","EditSubscriptionModal","preventTrial","click .btn-submit-trial","forTrialOffer","activeSubscription","submitTrial","DisableAutoRenewModal","_class27","Key_Refresh_Token","setAccessToken","setRefreshToken","addBroadcastChannelListener","bc","BroadcastChannel","sessionStorage","updateCookies","onCookiesUpdated","cookieParams","broadcast","access_token","updateTokens","refresh_token","sessionData","expires_in","handleUnauthorized","BaseToolbar","$toolbarsContainer","$animate","ProfileSaveToolbar","hideWhenZero","click .btn-profile-save","click .btn-profile-cancel-save","workAreaCount","renderChangedCount","groupsCount","autoShowToolbar","profileChanged","newWorkCount","SettingsSaveToolbar","click .btn-settings-save","click .btn-settings-cancel-save","saveArray","renderToolbar","addSaveModel","saveModel","md","clearSaveModels","settingsCount","callbackCounter","click .btn-files-download","click .btn-files-share","click .toolbar-close","renderSelectedCount","fileCount","sharingModal","ExportSelectedToolbar","selectedCount","onExport","updateSelectedCount","newCount","_class28","sanitize","allowMultiple","$tmpl","popover","BaseTour","_class29","framework","showIfUnintendedOrphan","showProgressText","showProgressBar","tour","getCurrentStepIndex","onNext","setStep","orphan","previousStep","onPrev","Tour","click .btn-skip-tour","skipTour","UserMessage","userMessageType","updateViewed","UserMessageType","UserMessageThread","UserFieldSetting","getByUserType","UserCustomField","isCompany","assign","TypeError","ValidateEmail","weather","WeatherDay","WeatherHours","conditionIconUrl","iconId","minTempDisplay","minTemperature","maxTempDisplay","maxTemperature","WeatherHour","MAX_FORECAST_DAYS","WorkArea","isStateWorkArea","isCountyWorkArea","WorkAreas","queryParams","getExistingWorkArea","existingWorkArea","isStacked","isMapOnly","mapCenter","keyup .work-area-zip","keyup .work-area-radius","click .add-work-area-state-county","click .add-work-area-zip","click .delete-work-area","click .delete-all-work-areas","renderDeleteAllButtons","renderDataTables","setWorkAreaRadius","countryPicker","populateStateSelect","workAreaStateCountyInputChanged","populateCountySelect","countyPicker","getStates","getCounties","counties","stateVal","stateWorkArea","renderMapLayers","workAreaDataTable","subModel","renderStateLayers","renderCountyLayers","stateLayerGuid","removeMapObject","addKMLStatesLayer","countyLayerGuid","addKMLCountiesLayer","reCenter","workAreaRadiusInputChanged","workAreaZipInputChanged","stateWorkAreaId","countyWorkAreaId","addWorkAreaByStateCounty","addNewWorkAreas","workAreaArray","countyWorkArea","addWorkAreasByZipRadius","zipRadiusError","newWorkAreas","newWorkAreaStateCount","newWorkArea","SelectWorkAreasModal","selectedWorkAreas","showZipRadiusError","wasZipAdd","countiesChanged","statesChanged","newWorkAreasArray","existingStateCountyWorkAreas","deleteWorkArea","newContactWorkArea","workAreaIds","resetZipEntry","deleteWorkAreaEvent","deleteAllWorkAreas","deletedWorkAreas","click .select-all-work-areas","click .select-work-area","click .select-work-areas-save","workAreasDataTable","selectAllWorkAreas","selectWorkAreasChanged","selectWorkArea"],"mappings":"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CAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,6BACAw3B,UAAA,kCACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,UACAw3B,UAAA,WACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,UACAw3B,UAAA,WACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,QACAw3B,UAAA,UACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,cACAw3B,UAAA,cACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,aACAw3B,UAAA,YACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,4BACAw3B,UAAA,0BACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,yBACAw3B,UAAA,uBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,gBACAw3B,UAAA,eACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,gCACAw3B,UAAA,6BACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,wBACAw3B,UAAA,qBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,uBACAw3B,UAAA,qBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,iBACAw3B,UAAA,eACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,iBACAw3B,UAAA,gBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,gBACAw3B,UAAA,eACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,aACAw3B,UAAA,aACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,aACAw3B,UAAA,aACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,2BACAw3B,UAAA,iBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,gBACAw3B,UAAA,eACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,gBACAw3B,UAAA,eACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,iBACAw3B,UAAA,UACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,KACAw3B,UAAA,gBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,eACAw3B,UAAA,wBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,mBACAw3B,UAAA,4BACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,aACAw3B,UAAA,uBACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,qBACAw3B,UAAA,8BACAC,WAAA,EACAC,YAAA,GAEA,CACA13B,KAAA,cACAw3B,UAAA,cACAC,WAAA,EACAC,YAAA,IAGAC,YAAA,CACA,CACA33B,KAAA,WACAw3B,UAAA,YAEA,CACAx3B,KAAA,gBACAw3B,UAAA,kBAEA,CACAx3B,KAAA,SACAw3B,UAAA,UAEA,CACAx3B,KAAA,WACAw3B,UAAA,YAEA,CACAx3B,KAAA,eACAw3B,UAAA,eAEA,CACAx3B,KAAA,eACAw3B,UAAA,cAEA,CACAx3B,KAAA,gBACAw3B,UAAA,gBAEA,CACAx3B,KAAA,gBACAw3B,UAAA,gBAEA,CACAx3B,KAAA,WACAw3B,UAAA,WAEA,CACAx3B,KAAA,cACAw3B,UAAA,eAEA,CACAx3B,KAAA,cACAw3B,UAAA,iBAIAM,SAAA,CACAC,eAAA,CACA,CACA/3B,KAAA,YACAw3B,UAAA,UAEA,CACAx3B,KAAA,OACAw3B,UAAA,QAEA,CACAx3B,KAAA,QACAw3B,UAAA,SAEA,CACAx3B,KAAA,2BACAw3B,UAAA,kBAEA,CACAx3B,KAAA,KACAw3B,UAAA,iBAEA,CACAx3B,KAAA,eACAw3B,UAAA,yBAEA,CACAx3B,KAAA,cACAw3B,UAAA,gBAGAQ,kBAAA,CACA,CACAh4B,KAAA,YACAw3B,UAAA,UAEA,CACAx3B,KAAA,OACAw3B,UAAA,QAEA,CACAx3B,KAAA,QACAw3B,UAAA,SAGA,CACAx3B,KAAA,cACAw3B,UAAA,iBAIAS,YAAA,CACAC,WAAA,CACA,CACAl4B,KAAA,SACAw3B,UAAA,UAEA,CACAx3B,KAAA,cACAw3B,UAAA,cAEA,CACAx3B,KAAA,OACAw3B,UAAA,QAEA,CACAx3B,KAAA,aACAw3B,UAAA,aAEA,CACAx3B,KAAA,cACAw3B,UAAA,cAEA,CACAx3B,KAAA,UACAw3B,UAAA,UAEA,CACAx3B,KAAA,QACAw3B,UAAA,SAEA,CACAx3B,KAAA,cACAw3B,UAAA,eAEA,CACAx3B,KAAA,cACAw3B,UAAA,kBAMA/4B,IAAA+Q,UAAA2oB,0BAAA,CACAC,OAAA,CACAnD,MAAA,EACAU,UAAA,EACAC,UAAA,EACAC,YAAA,EACAC,QAAA,EACAC,eAAA,EACAC,WAAA,EACAC,QAAA,EACAb,SAAA,EACAc,SAAA,GACAC,KAAA,IAEAkC,YAAA,CACA1D,EAAA,QACAC,EAAA,YACAC,EAAA,YACAW,EAAA,cACAxW,EAAA,UACAyW,EAAA,iBACAiB,EAAA,aACAC,EAAA,UACA9X,EAAA,WACA+X,GAAA,WACA0B,GAAA,SAIA75B,IAAA+Q,UAAA+oB,UAAA,CACAC,qBAAA,CACAvD,MAAA,EACAwD,UAAA,EACAC,OAAA,EACAtD,SAAA,EACAC,SAAA,EACAc,KAAA,GAEAwC,0BAAA,CACAlC,EAAA,QACA9B,EAAA,eACAC,EAAA,SACAC,EAAA,WACAW,EAAA,WACAxW,EAAA,QAEA4Z,aAAA,CACAC,SAAA,EACAC,SAAA,GAEAC,wBAAA,CACA9D,MAAA,EACAwD,UAAA,EACAC,OAAA,EACAtD,SAAA,EACAC,SAAA,GAEA2D,6BAAA,CACAvC,EAAA,QACA9B,EAAA,eACAC,EAAA,SACAC,EAAA,WACAW,EAAA,YAEAyB,WAAA,CACAG,cAAA,gBAEAN,KAAA,CACAmC,iBAAA,kBACAC,oBAAA,sBAEAC,eAAA,CACA,cACA,QACA,eAIA16B,IAAA+Q,UAAA4pB,YAAA,CACAC,eAAA,CACAC,QAAA,EACAC,QAAA,EACAC,QAAA,GAEAC,oBAAA,CACA9E,EAAA,UACAC,EAAA,UACAC,EAAA,WAEA6E,iBAAA,CACAzE,MAAA,EACAoB,QAAA,EACAqC,OAAA,EACAtD,SAAA,GAEAuE,sBAAA,CACAhF,EAAA,QACAC,EAAA,UACAC,EAAA,SACAW,EAAA,YAEAyB,WAAA,CACA2C,wBAAA,uBACAC,0BAAA,0BAEA/C,KAAA,CACAgD,aAAA,gBAIAr7B,IAAA+Q,UAAAuqB,gBAAA,CACAC,UAAA,CACA3D,QAAA,UACA4D,QAAA,UACAC,OAAA,SACAC,aAAA,eACAC,QAAA,YAIA37B,IAAA+Q,UAAA6qB,OAAA,CACAC,YAAA,sCAGA77B,IAAA+Q,UAAA+qB,QAAA,CACAC,yBAAA,uCACAC,yBAAA,uCACAC,+BAAA,uCACAC,uCAAA,uCACAC,gCAAA,kCACAC,uCAAA,yCACAC,6BAAA,uCACAC,+BAAA,uCACAC,gBAAA,uCACAC,4BAAA,uCACAC,wBAAA,uCACAC,2BAAA,uCACAC,uBAAA,uCACAC,uBAAA,uCACAC,yBAAA,uCACAC,yBAAA,uBACAC,mCAAA,uCACAC,8BAAA,uCACAC,oCAAA,uCACAC,mCAAA,uCACAC,uCAAA,yCACAC,2BAAA,uCACAC,8BAAA,uCACAC,yBAAA,uCACAC,iCAAA,uCACAC,8BAAA,uCACAC,+BAAA,uCACAC,mCAAA,uCACAC,oCAAA,wCAGA39B,IAAA+Q,UAAA6sB,eAAA,CACAC,oBAAA,CACArH,MAAA,EACAU,UAAA,EACAC,UAAA,EACAC,YAAA,EACAC,QAAA,EACAC,eAAA,EACAC,WAAA,EACAC,QAAA,EACAb,SAAA,EACAc,SAAA,EACAC,KAAA,IAEAoG,yBAAA,CACA9F,EAAA,QACA9B,EAAA,YACAC,EAAA,YACAC,EAAA,cACAW,EAAA,UACAxW,EAAA,iBACAyW,EAAA,aACAiB,EAAA,UACAC,EAAA,WACA9X,EAAA,WACA+X,GAAA,QAEA4F,MAAA,CACAC,aAAA,EACAC,SAAA,GAEAC,WAAA,CACAlG,EAAA,eACA9B,EAAA,YAEAiI,cAAA,CACAC,QAAA,EACAC,OAAA,GAEAC,mBAAA,CACAtG,EAAA,UACA9B,EAAA,UAEAsC,WAAA,CACAG,cAAA,eACA4F,aAAA,SAEAlG,KAAA,CACAmG,gBAAA,kBAEAC,2BAAA,CACA7G,QAAA,CACAr2B,KAAA,UACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,EAAA,IAEAC,UAAA,CACAv2B,KAAA,YACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,EAAA,IAEAlB,SAAA,CACAp1B,KAAA,WACAs2B,SAAA,CAAA,MAKA73B,IAAA+Q,UAAA2tB,IAAA,CACAlG,WAAA,CACAG,cAAA,gBACAgG,UAAA,CACAnI,MAAA,EACAa,QAAA,EACA2C,UAAA,EACAC,OAAA,EACAtD,SAAA,EACAiI,OAAA,GAEAC,eAAA,CACA7G,EAAA,QACA9B,EAAA,UACAC,EAAA,YACAC,EAAA,SACAW,EAAA,WACAxW,EAAA,UAEA8X,KAAA,CACAyG,IAAA,QAIA9+B,IAAA+Q,UAAAooB,YAAA,CACA4F,eAAA,CACAC,eAAA,EACAC,YAAA,GAEAC,oBAAA,CACAhJ,EAAA,iBACAC,EAAA,eAEAgJ,iBAAA,CACA3I,MAAA,EACA4I,0BAAA,EACAC,wBAAA,EACA3I,kBAAA,EACA4I,UAAA,EACAC,kCAAA,EACAC,wBAAA,EACA7I,SAAA,EACA8I,qBAAA,EACAC,uBAAA,EACAC,iBAAA,GACAC,sBAAA,IAEAC,sBAAA,CACA7H,EAAA,QACA9B,EAAA,aACAC,EAAA,cACAC,EAAA,oBACAW,EAAA,YACAxW,EAAA,qBACAyW,EAAA,WACAiB,EAAA,WACAC,EAAA,WACA9X,EAAA,aACA+X,GAAA,OACA0B,GAAA,UAEAiG,wBAAA,CACAlI,QAAA,CACAr2B,KAAA,UACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,IAEAC,UAAA,CACAv2B,KAAA,YACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAEAkI,UAAA,CACAx+B,KAAA,YACAs2B,SAAA,CAAA,EAAA,EAAA,MAGAZ,kBAAA,CACAT,MAAA,EACAU,UAAA,EACAC,UAAA,EACAC,YAAA,EACAC,QAAA,EACAC,eAAA,EACAC,WAAA,EACAC,QAAA,EACAb,SAAA,EACAc,SAAA,EACAC,KAAA,IAEAK,uBAAA,CACAC,EAAA,QACA9B,EAAA,YACAC,EAAA,YACAC,EAAA,cACAW,EAAA,UACAxW,EAAA,iBACAyW,EAAA,aACAiB,EAAA,UACAC,EAAA,WACA9X,EAAA,WACA+X,GAAA,QAEAC,yBAAA,CACAR,QAAA,CACAr2B,KAAA,UACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,IAEAC,UAAA,CACAv2B,KAAA,YACAs2B,SAAA,CAAA,EAAA,EAAA,EAAA,EAAA,IAEAkI,UAAA,CACAx+B,KAAA,YACAs2B,SAAA,CAAA,KAGAW,WAAA,CACAwH,YAAA,aACArH,cAAA,gBAEAD,sBAAA,CACAC,cAAA,gBAEAN,KAAA,CACA4H,YAAA,cACA1H,cAAA,gBAEA2H,gCAAA,CACAC,SAAA,EACAC,GAAA,EACAC,GAAA,EACAC,GAAA,EACAC,KAAA,GAEAC,qCAAA,CACA,YACA,QACA,MACA,eACA,QAGAC,gBAAA,CACAC,QAAA,EACAC,OAAA,EACA/4B,KAAA,EACAg5B,SAAA,EACAC,KAAA,EACAC,QAAA,EACAC,MAAA,EACAC,QAAA,EACAC,KAAA,EACAC,SAAA,KAIAlhC,IAAA+Q,UAAA0K,MAAA,CACAC,mBAAA,4BAGA1b,IAAA+Q,UAAAowB,SAAAC,gBAAAC,sBAAA,CACAC,IAAA,MACAC,OAAA,SACAC,YAAA,aACAC,QAAA,UACAC,YAAA,cACAC,SAAA,WACAC,eAAA,iBACAC,YAAA,cACAC,eAAA,oBACAC,YAAA,cACAC,iBAAA,sBACAC,eAAA,oBACAC,YAAA,cACAC,QAAA,UACAC,IAAA,MACAC,UAAA,YACAC,WAAA,aACAC,aAAA,eACAC,WAAA,aACAC,WAAA,aACAC,aAAA,eACAC,MAAA,WACAC,iBAAA,oBACAC,YAAA,cACAC,SAAA,YAzBA,aA0BA,cA1BA1B,gBAAAC,sBAAA,kBA2BA,mBA3BAD,gBAAAC,sBAAA,WA4BA,YA5BAD,gBAAAC,sBAAA,WA6BA,eA7BAD,gBAAAC,sBAAA,gBA8BA,oBA9BAD,gBAAAC,sBAAA,kBA+BA,mBA/BAD,gBAAAC,sBAAA,QAgCA,SAhCAD,gBAAAC,sBAAA,WAiCA,YAjCAD,gBAAAC,sBAAA,YAkCA,aAlCAD,gBAAAC,sBAAA,WAmCA,YAnCAD,gBAAAC,sBAAA,SAoCA,UApCAD,gBAAAC,sBAAA,cAqCA,eArCAD,gBAAAC,sBAAA,iBAsCA,kBAtCAD,gBAAAC,sBAAA,cAuCA,eAvCAD,gBAAAC,sBAAA,YAwCA,aAxCAD,gBAAAC,sBAAA,WAyCA,YAzCAD,gBAAAC,sBAAA,cA0CA,eA1CAA,uBA6CArhC,IAAA+Q,UAAAgyB,WAAA,CACAC,gBAAA,KAGAhjC,IAAA+Q,UAAA0f,KAAA,CACAwS,kBAAA,EACAC,kBAAA,EACAC,MAAA,CACAlkB,UAAA,CACAmkB,iBAAA,sDACAC,eAAA,6CAKArjC,IAAA+Q,UAAAuyB,WAAA,CACAzL,SAAA,CACA0L,QAAA,EACAC,OAAA,EACAC,WAAA,EACAC,WAAA,EACAC,kBAAA,EACAC,QAAA,EACAhN,SAAA,EACAiN,eAAA,IAGA7jC,IAAA+Q,UAAA+yB,SAAA,CACAC,SAAA,CACAC,aAAA,eACAC,SAAA,WACAC,gBAAA,kBACAC,MAAA,QACAC,UAAA,cAIApkC,IAAA+Q,UAAAszB,aAAA,CACAC,WAAA,CACAC,IAAA,MACAvD,QAAA,UACAD,MAAA,QACAyD,KAAA,OACAC,MAAA,QACAxD,KAAA,OACAC,SAAA,WACAwD,KAAA,OACA/D,OAAA,SACAgE,KAAA,OACAC,YAAA,cACAC,aAAA,eACAC,SAAA,WACAC,OAAA,OACAn9B,KAAA,OACAg5B,SAAA,WACAoE,WAAA,aACAC,SAAA,aAMAjlC,IAAA+Q,UAAAm0B,SAAA,CACAb,aAAA,CACAC,WAAA,CACAtkC,IAAA+Q,UAAAszB,aAAAC,WAAAC,IACAvkC,IAAA+Q,UAAAszB,aAAAC,WAAAtD,QACAhhC,IAAA+Q,UAAAszB,aAAAC,WAAAvD,MACA/gC,IAAA+Q,UAAAszB,aAAAC,WAAArD,KACAjhC,IAAA+Q,UAAAszB,aAAAC,WAAApD,SACAlhC,IAAA+Q,UAAAszB,aAAAC,WAAAI,KACA1kC,IAAA+Q,UAAAszB,aAAAC,WAAA3D,OACA3gC,IAAA+Q,UAAAszB,aAAAC,WAAA18B,KACA5H,IAAA+Q,UAAAszB,aAAAC,WAAA1D,YAKA5gC,IAAA+Q,UAAAo0B,SAAA,CACAC,UAAA,CACAC,KAAA,YACAC,KAAA,aAEAC,MAAA,CACA/P,MAAA,aACAV,KAAA,YACAO,MAAA,aACAD,OAAA,cACAH,KAAA,aAEAuQ,aAAA,CACAC,QAAA,UACAC,MAAA,QACAC,KAAA,eACAC,UAAA,kBAEAC,aAAA,CACAJ,QAAA,UACAC,MAAA,QACAI,QAAA,gBACAC,IAAA,oBAEAC,gBAAA,CACAC,YAAA,qBACAC,QAAA,sBACAC,OAAA,UACAC,SAAA,cAIApmC,IAAA+Q,UAAAs1B,QAAA,CACAC,YAAA,CACAC,QAAA,kBACAC,QAAA,kBACAC,SAAA,mBACAC,OAAA,iBACAC,MAAA,iBAEAC,gBAAA,CACAC,QAAA,UACAC,SAAA,WACAC,QAAA,UACAC,QAAA,UACAC,SAAA,WACAC,SAAA,WACAC,QAAA,YAIAnnC,IAAA+Q,UAAAC,KAAA,CACAC,OAAA,CACAoE,WAAA,IACAnE,WAAA,IACAK,SAAA,KACAG,QAAA,MACAG,UAAA,OACAG,SAAA,aAIAhS,IAAA+Q,UAAAq2B,MAAA,CACAC,MAAA,CACAC,MAAA,QACAC,UAAA,WACAzC,SAAA,YAEA0C,UAAA,CACAC,IAAA,EACAC,OAAA,EACAC,YAAA,EACAC,UAAA,EACAC,OAAA,EACAjR,SAAA,EACAkR,eAAA,GAEAC,gBAAA,cACAC,gBAAA,CAAA,MAAA,OAAA,MAAA,MAAA,QAGAhoC,IAAA+Q,UAAAk3B,YAAA,CACAC,sBAAA,CACAC,SAAA,eACAC,cAAA,iBACAC,SAAA,WACAC,WAAA,gBACAC,WAAA,gBAEA1Q,SAAA,CACA4P,IAAA,EACAY,SAAA,EACAG,eAAA,EACAC,aAAA,EACAC,SAAA,GAEA9O,YAAA,CACA5B,EAAA,MACA9B,EAAA,eACAC,EAAA,iBACAC,EAAA,WACAW,EAAA,YAEA4R,aAAA,CACA3Q,EAAAh4B,IAAA+Q,UAAA8jB,OAAAY,KACAS,EAAAl2B,IAAA+Q,UAAA8jB,OAAAK,IACAiB,EAAAn2B,IAAA+Q,UAAA8jB,OAAAC,KACAsB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAQ,MACA0B,EAAA/2B,IAAA+Q,UAAA8jB,OAAAG,QAEA4T,WAAA,CACAC,IAAA,EACAC,OAAA,EACAC,KAAA,EACAC,SAAA,GAEAC,cAAA,CACAjR,EAAA,MACA9B,EAAA,SACAC,EAAA,OACAC,EAAA,YAEA8S,eAAA,CACAlR,EAAAh4B,IAAA+Q,UAAA8jB,OAAAQ,MACAa,EAAAl2B,IAAA+Q,UAAA8jB,OAAAO,OACAe,EAAAn2B,IAAA+Q,UAAA8jB,OAAAM,OACAiB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAK,KAEAmD,KAAA,CACAqJ,YAAA,gBAIA1hC,IAAA+Q,UAAAo4B,aAAA,CACAtR,SAAA,CACAuR,cAAA,EACA9J,UAAA,EACA+J,QAAA,EACAC,OAAA,GAEA1P,YAAA,CACA5B,EAAA,gBACA9B,EAAA,YACAC,EAAA,UACAC,EAAA,UAEAmT,kBAAA,CACAC,QAAA,EACAC,aAAA,EACAC,SAAA,GAEAC,kBAAA,CACAC,MAAA,CACAnF,MAAA,EACAxD,KAAA,EACA4I,MAAA,EACAC,UAAA,EACAC,gBAAA,EACAC,eAAA,GAEAC,UAAA,CACAjS,EAAA,aACA9B,EAAA,eACAC,EAAA,QACAC,EAAA,YACAW,EAAA,kBACAxW,EAAA,mBAGA2pB,eAAA,CACArS,SAAA,CACAJ,SAAA,EACAd,SAAA,GAEAiD,YAAA,CACA5B,EAAA,WACA9B,EAAA,cAKAl2B,IAAA+Q,UAAAo5B,SAAA,CACAC,cAAA,CACA5T,MAAA,EACA6T,UAAA,EACA1C,YAAA,EACA2C,UAAA,EACA1C,UAAA,GAEA2C,mBAAA,CACArU,EAAA,QACAC,EAAA,YACAC,EAAA,cACAW,EAAA,YACAxW,EAAA,aAEAiqB,oBAAA,CACAC,KAAA,EACA7L,OAAA,EACA8L,OAAA,GAEAC,yBAAA,CACAzU,EAAA,OACAC,EAAA,SACAC,EAAA,UAEAwU,0BAAA,CACA1U,EAAAl2B,IAAA+Q,UAAA8jB,OAAAQ,MACAc,EAAAn2B,IAAA+Q,UAAA8jB,OAAAK,IACAkB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAa,MAEAmV,sBAAA,CACAhC,IAAA,EACAC,OAAA,EACAC,KAAA,EACA+B,OAAA,GAEAC,2BAAA,CACA7U,EAAA,MACAC,EAAA,SACAC,EAAA,OACAW,EAAA,UAEAiU,4BAAA,CACA9U,EAAAl2B,IAAA+Q,UAAA8jB,OAAAQ,MACAc,EAAAn2B,IAAA+Q,UAAA8jB,OAAAO,OACAgB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAK,IACA6B,EAAA/2B,IAAA+Q,UAAA8jB,OAAAa,OAIA11B,IAAA+Q,UAAAk6B,WAAA,CACA/C,sBAAA,CACAC,SAAA,eACAC,cAAA,iBACAC,SAAA,WACAC,WAAA,gBACAC,WAAA,gBAEA1Q,SAAA,CACA4P,IAAA,EACAgB,aAAA,EACAD,eAAA,EACAE,SAAA,EACAL,SAAA,GAEAzO,YAAA,CACA5B,EAAA,MACA9B,EAAA,eACAC,EAAA,iBACAC,EAAA,WACAW,EAAA,YAEA4R,aAAA,CACA3Q,EAAAh4B,IAAA+Q,UAAA8jB,OAAAY,KACAS,EAAAl2B,IAAA+Q,UAAA8jB,OAAAK,IACAiB,EAAAn2B,IAAA+Q,UAAA8jB,OAAAC,KACAsB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAQ,MACA0B,EAAA/2B,IAAA+Q,UAAA8jB,OAAAG,QAEA4T,WAAA,CACAC,IAAA,EACAC,OAAA,EACAC,KAAA,EACAC,SAAA,GAEAC,cAAA,CACAjR,EAAA,MACA9B,EAAA,SACAC,EAAA,OACAC,EAAA,YAEA8S,eAAA,CACAlR,EAAAh4B,IAAA+Q,UAAA8jB,OAAAQ,MACAa,EAAAl2B,IAAA+Q,UAAA8jB,OAAAO,OACAe,EAAAn2B,IAAA+Q,UAAA8jB,OAAAM,OACAiB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAK,KAEAmD,KAAA,CACAoK,WAAA,eAIAziC,IAAA+Q,UAAAm6B,IAAA,CACAhD,sBAAA,CACAC,SAAA,cACAgD,QAAA,cACAC,iBAAA,mBACAC,eAAA,iBACAC,eAAA,iBACAC,mBAAA,sBACAC,eAAA,iBACAC,SAAA,cACAC,QAAA,WAEA7T,SAAA,CACArB,MAAA,EACAiU,KAAA,EACA7L,OAAA,EACA+M,YAAA,GAEA/R,YAAA,CACA5B,EAAA,QACA9B,EAAA,OACAC,EAAA,SACAC,EAAA,eAEAuS,aAAA,CACA3Q,EAAAh4B,IAAA+Q,UAAA8jB,OAAAY,KACAS,EAAAl2B,IAAA+Q,UAAA8jB,OAAAQ,MACAc,EAAAn2B,IAAA+Q,UAAA8jB,OAAAK,IACAkB,EAAAp2B,IAAA+Q,UAAA8jB,OAAAG,QAEAqD,KAAA,CACAuT,KAAA,SAIA5rC,IAAA+Q,UAAA86B,WAAA,CACA3D,sBAAA,CACA4D,QAAA,UACAC,WAAA,aACAC,QAAA,UACAC,YAAA,gBACAC,gBAAA,gBACAC,SAAA,WACAC,mBAAA,mBACAC,SAAA,WACAC,UAAA,YACAC,SAAA,WACAb,QAAA,UACAc,WAAA,gBAEAC,OAAA,CACAC,kBAAA,qBAEAC,cAAA,CACAC,UAAA,EACAC,WAAA,GAEAC,iBAAA,CACA9U,EAAAh4B,IAAA+Q,UAAA8jB,OAAAY,KACAS,EAAAl2B,IAAA+Q,UAAA8jB,OAAAC,KACAqB,EAAAn2B,IAAA+Q,UAAA8jB,OAAAQ,MACAe,EAAAp2B,IAAA+Q,UAAA8jB,OAAAK,IACA6B,EAAA/2B,IAAA+Q,UAAA8jB,OAAAa,MAEAqX,YAAA,CACAtF,IAAA,EACAnI,UAAA,EACA3I,SAAA,EACAc,SAAA,EACAC,KAAA,GAEAsV,gBAAA,CACAhV,EAAA,MACA9B,EAAA,YACAC,EAAA,WACAC,EAAA,WACAW,EAAA,QAEAsB,KAAA,CACAiK,WAAA,eAIAtiC,IAAA+Q,UAAAk8B,SAAA,CACA/E,sBAAA,CACAG,SAAA,WACA6E,gBAAA,mBACAC,SAAA,WACAC,cAAA,gBACAC,iBAAA,mBACAC,cAAA,gBACAC,gBAAA,mBAEAC,gBAAA,CACAC,YAAA,KACAC,aAAA,MAEAC,UAAA,CACA3V,EAAA,KACA9B,EAAA,KACAC,EAAA,KACAC,EAAA,MAEAlwB,MAAA,CACA0nC,SAAA,WACAC,SAAA,WACAC,UAAA,aAEAC,SAAA,CACAC,QAAA,CACAxE,QAAA,UACAyE,MAAA,QACAC,KAAA,OACAC,IAAA,MACAC,SAAA,WACAC,MAAA,WAKAruC,IAAA+Q,UAAAu9B,QAAA,CACAC,kBAAA,CACAC,QAAA,EACAC,SAAA,EACAC,UAAA,EACAC,WAAA,EACAC,iBAAA,EACAC,QAAA,EACAC,SAAA,EACAC,cAAA,ICx9EA/uC,IAAAmhC,QAAA,GAEAx/B,EAAA,WACA3B,IAAAiC,IAAA+sC,gBCHAhvC,IAAAivC,WAAA,CACAC,UAAA,IAGAlvC,IAAAivC,WAAAE,SAAA,WACA,SAAAC,EAAAC,EAAAC,GAAA,IAAAtpC,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA4qC,GACA5qC,KAAA6qC,OAAAA,EACA7qC,KAAA8qC,KAAAA,EACA9qC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAwpC,aAAA,IALA,OAAAC,aAAAL,EAAA,CAAA,CAAAhqC,IAAA,UAAAtB,MASA,WACA,IAAA4rC,EAuCA,OArCAA,EADA1vC,IAAAiC,IAAA+D,QAAA2pC,iBACA3vC,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACAA,SAAA,SACAG,MAAAU,KAAA6qC,QAEA,CACA1rC,SAAAa,KAAA8qC,KAAA,iBAAA9qC,KAAAwB,QAAAwpC,YAAAxvC,IAAAiC,IAAA2tC,YAKA5vC,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACAA,SAAAa,KAAAwB,QAAAwpC,YAAA,UAAA,YAEA,CACA7rC,SAAAa,KAAA6qC,QAEA,CACA1rC,SAAA,UAEA,CACAA,SAAAa,KAAA8qC,KAAA,iBAAA9qC,KAAAwB,QAAAwpC,YAAAxvC,IAAAiC,IAAA2tC,YAKA5vC,IAAAiC,IAAA+D,QAAA6pC,OACAH,EAAAA,EAAAtoC,eAGA,EAAAjF,EAAAC,KAAApC,IAAAiC,IAAA+D,QAAA8pC,QAAA9vC,IAAAiC,IAAA+D,QAAA8pC,OAAAJ,EAAA1vC,IAAAC,QAAA2D,WAAAyiB,eAAAqpB,GAAA,KAjDA,CAAAtqC,IAAA,QAAAtB,MAoDA,SAAAuZ,GACA,IAAA1Y,EAAAH,KAAAurC,UACA,GAAA/vC,IAAAivC,WAAAe,iBAAAd,UAAAvqC,GAAA,CACA,IAAAsrC,EAAAjwC,IAAAivC,WAAAe,iBAAAd,UAAAvqC,GAKA,OAJAH,KAAAqM,MAAAo/B,GACA,mBAAA5yB,GACAA,EAAA4yB,GAEAA,EAGAtuC,EAAA8B,KAAA,CACAkB,IAAAA,EACAE,OAAA,MACAqrC,SAAA,OACAh3B,QAAA/W,EAAAgC,KAAA,SAAA8B,GAEA,IAAAkqC,EAAA,CACAA,SAAAhuC,EAAAguC,SAAAlqC,GACA21B,OAAA31B,EACAmqC,iBAAA,mBAAAzuC,EAAAutC,UAAAvtC,EAAAutC,UAAAjpC,GAAA,MAEAzB,KAAAqM,MAAAs/B,GACAnwC,IAAAivC,WAAAe,iBAAAd,UAAAvqC,GAAAwrC,EACA,mBAAA9yB,GACAA,EAAA8yB,IACA3rC,UA9EA,CAAAY,IAAA,QAAAtB,MAmFA,SAAAqsC,GACA3rC,KAAA2rC,SAAAA,EAAAA,SACA3rC,KAAAo3B,OAAAuU,EAAAvU,OACAp3B,KAAA4rC,iBAAAD,EAAAC,mBAtFA,CAAAhrC,IAAA,SAAAtB,MAyFA,SAAAc,EAAAyY,GACA7Y,KAAA6rC,MAAAluC,EAAAgC,KAAA,SAAAgsC,GACA,mBAAA9yB,IACA7Y,KAAAwB,QAAAsqC,WACAjzB,EAAA1b,EAAAwuC,EAAAC,iBAAAG,OAAA3rC,KAGAyY,EAAA1b,EAAAwuC,EAAAA,SAAAvrC,GAAA,QAGAJ,WAnGA4qC,EAAA,GAuGApvC,IAAAivC,WAAAe,iBAAA,CACAd,UAAA,GACAsB,eAAA,SAAAC,EAAAC,EAAAxuC,EAAA0C,EAAAyY,GAAA,IAAArX,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACApK,KAAAmsC,cAAAD,EAAA9rC,EAAAzC,EAAAgC,KAAA,SAAAgsC,GACA3rC,KAAA+rC,OAAAE,EAAAN,EAAAjuC,EAAAmb,EAAArX,IACAxB,QAEAmsC,cAAA,SAAAD,EAAA9rC,EAAAyY,EAAArX,GACA,IAAAmqC,EAAAxuC,IACA,GAAA+uC,aAAA/uC,EAKA,OAJAwuC,EAAAxuC,EAAAQ,EAAAguC,SAAAO,EAAAzqC,OAAA9D,CAAAyC,GAAA,KACA,mBAAAyY,GACAA,EAAA8yB,GAEAA,EAEA,KAAAO,aAAA1wC,IAAAivC,WAAAE,UAUA,CAAA,GAAA,iBAAAuB,EAkBA,MAHA,mBAAArzB,GACAA,EAAA8yB,GAEAA,EAjBA,IAAA3rC,KAAA0qC,UAAAwB,GAAA,CACA,IAAAzqC,EAAA,QAAAtE,EAAA,IAAA+uC,GAAAzqC,OAAA,SACAzB,KAAA0qC,UAAAwB,GAAA,CACAP,SAAAhuC,EAAAguC,SAAAlqC,GACA21B,OAAA31B,GAOA,OAJAkqC,EAAAxuC,EAAA6C,KAAA0qC,UAAAwB,GAAAP,SAAAvrC,GAAA,KACA,mBAAAyY,GACAA,EAAA8yB,GAEAA,EArBA,GAAA3rC,KAAA0qC,UAAAwB,EAAAX,WAGA,OAFAW,EAAAH,OAAA3rC,EAAAyY,GAEA1b,EAAA+uC,EAAAL,QAAAF,SAAAvrC,GAAA,KAGA8rC,EAAAH,OAAA3rC,EAAAyY,IAwBAuzB,eAAA,SAAA1B,EAAA7xB,GACA,IAAAwzB,EAAA1uC,EAAAC,KAAAD,EAAA2uC,OAAA5B,EAAA,SAAAiB,GACA,OAAAA,aAAAnwC,IAAAivC,WAAAE,YAEA,GAAA,IAAA0B,EACAxzB,QAEA,CACA,IAAA0zB,EAAA,EACAC,EAAA,aACAD,IACAF,GACAxzB,KAEAlb,EAAAuhB,KAAAwrB,EAAA,SAAAiB,GACAA,aAAAnwC,IAAAivC,WAAAE,UACAgB,EAAAE,MAAAW,OAIAC,YAAA,SAAArV,EAAAh3B,GACA,OAAAjD,EAAAQ,EAAAguC,SAAA,QAAAvU,EAAA,SAAAz5B,CAAAyC,GAAA,KAAAqB,QAEAsqC,OAAA,SAAAE,EAAA9vC,EAAAuB,EAAAmb,EAAArX,GACAA,GAAAA,EAAAkrC,QACAhvC,EAAAgvC,QAAAvwC,GACAqF,GAAAA,EAAAlD,QACAZ,EAAAivC,YAAAxwC,GACA8vC,EACAvuC,EAAAoD,OAAA3E,GAEAuB,EAAA+D,KAAAtF,GACA,mBAAA0c,GACAA,EAAA1c,KC1LAX,IAAAwkB,OAAA,GAEAxkB,IAAAwkB,OAAA4sB,UAAAntB,SAAAC,MAAAzf,OAAA,CACA4sC,YAAA,KACAC,YAAA,GACA5lB,SAAA,GACA1lB,QAAA,GACAurC,QAAA,IACAC,SAAA,GACAC,YAAA,WACA,MAAA,MAAAjtC,KAAAb,YAEAA,SAAA,SAAAoB,GACA,MAAA,KAEA2sC,MAAA,WACA,OAAA,MAAAltC,KAAAlD,IAAA,IAAAkD,KAAAlD,IAAA2iB,SAAAC,MAAAre,UAAA6rC,MAAAniC,KAAA/K,OAEAmtC,QAAA,WACAntC,KAAAotC,IAAAzvC,EAAAupB,SAAAlnB,KAAAqtC,eAAArtC,KAAAstC,aACAttC,KAAAutC,gBAAA,GACAvtC,KAAAwtC,SAAA,GAEAC,WAAA,SAAAC,GACA,OAAA,MAAAA,EACAjuB,SAAAC,MAAAre,UAAAosC,WAAA1iC,KAAA/K,KAAA0tC,GAGA1tC,KAAAwtC,SAAA,EAAA7vC,EAAAC,KAAAoC,KAAAutC,kBAGA,MAHA5vC,EAAAka,KAAA7X,KAAAgtC,SAAA,SAAAW,EAAA/sC,GACA,IAAAgtC,EAAA5tC,KAAAY,GACA,OAAA,MAAAgtC,GAAA,mBAAAA,EAAAH,YAAAG,EAAAH,cACAztC,OAEA6tC,kBA/BA,WAgCA,OAAA,MAAA7tC,KAAA8tC,aAEA,MAFAnwC,EAAAka,KAAA7X,KAAA8tC,YAAA9tB,OAAA,SAAA+tB,GACA,OAAAA,EAAAb,WAGA/sC,IAAA,SAAAqB,EAAAnB,GACA,OAAA7E,IAAAC,QAAA2D,WAAA+gB,YAAA,mBAAAngB,KAAAb,SAAAa,KAAAb,SAAAqC,EAAAnB,GAAAL,KAAAb,SAAA,CACAqhB,QAAAxgB,KAAAguC,WAAAxsC,MAGAwsC,WAAA,SAAAxsC,GACA,IAAAgf,EACA,GAAAxgB,KAAAwB,QAAAysC,SAAA,MAAAzsC,GAAAA,EAAAysC,QACAztB,EAAAhlB,IAAA+Q,UAAAkU,SAAAK,WACA,GAAA9gB,KAAA6tC,qBAAA7tC,KAAAwB,QAAA+f,WAAA,MAAA/f,GAAAA,EAAA+f,UACAf,EAAAhlB,IAAA+Q,UAAAkU,SAAAG,WACA,GAAA5gB,KAAAwB,QAAA0sC,UAAA,MAAA1sC,GAAAA,EAAA0sC,SACA1tB,EAAAhlB,IAAA+Q,UAAAkU,SAAAC,WACA,CAAA,KAAA,EAAA/iB,EAAAC,KAAAoC,KAAAwB,QAAAgf,UAGA,OAAAhlB,IAAA+Q,UAAAkU,SAAAkP,IAFAnP,EAAAxgB,KAAAwB,QAAAgf,QAIA,OAAAA,GAEA2tB,gBAAA,SAAAb,EAAA9rC,KAEA4sC,YAAA,SAAAd,EAAA9rC,GACA,IAAA,IAAAxB,KAAAmuC,gBAAAb,EAAA9rC,GAGA,OAFA8rC,EAAAttC,KAAAqM,MAAAihC,EAAA9rC,GACAxB,KAAAqtC,eAAAC,EACA7tB,SAAAC,MAAAre,UAAA+sC,YAAArjC,KAAA/K,KAAAstC,EAAA9rC,IAGA6sC,WAAA,SAAA7sC,KAEA8sC,WAAA,SAAAC,EAAA/sC,IACA,IAAAxB,KAAAquC,WAAA7sC,KACAxB,KAAAwuC,kBAAA,GACAxuC,KAAAutC,gBAAA,GACAvtC,KAAAwtC,SAAA,EACAxtC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,GAAA,GAAA7D,EAAAupB,SAAAlnB,KAAAknB,SAAAlnB,KAAAknB,SAAA,GAAAlnB,KAAA8sC,cACA9sC,KAAAyuC,cAGAA,UAAA,aAEAC,WAAA,SAAAhB,GACA,IAAA9iC,EAAA5K,KAAAutC,gBAAAG,GACA,OAAA9iC,GAAA,MAEA+jC,MAAA,SAAAJ,GACAvuC,KAAA4uC,SACA5uC,KAAAqtC,eAAAkB,IAEAvuC,KAAAotC,IAAAptC,KAAAqM,MAAAkiC,IAEAvuC,KAAAwtC,SAAA,EACAxtC,KAAAutC,gBAAA,IAEAH,IAAA,SAAAM,EAAA9rC,EAAAJ,GACA,IAAAqtC,EAAA,GAWA,MAVA,iBAAAnB,EACAmB,EAAAnB,GAAA9rC,GAEAitC,EAAAnB,EACAlsC,EAAAI,GAEA,MAAAJ,IAAAA,EAAAstC,QAAAttC,EAAAutC,SAAA,MAAAvtC,EAAAqtC,SACA7uC,KAAAwtC,SAAA,EACAxtC,KAAAutC,gBAAA5vC,EAAAsC,OAAAD,KAAAutC,gBAAAvtC,KAAAutC,gBAAA,GAAAsB,IAEApvB,SAAAC,MAAAre,UAAA+rC,IAAAriC,KAAA/K,KAAA6uC,EAAArtC,IAEAwtC,KAAA,SAAA3uC,EAAAkuC,EAAA/sC,GACA,IAAAytC,EAAAtxC,EAAAuxC,MAAA1tC,GAEAA,EAAArB,IAAAH,KAAAG,IAAAqB,EAAA2tC,WAAA9uC,GACAmB,EAAA4tC,WAAAzxC,EAAAgC,KAAA,SAAAmE,GACAA,EAAA3D,IAAAH,KAAAG,IAAAqB,EAAA2tC,WAAA9uC,GACAmB,EAAA6tC,UACAvrC,EAAAurC,QAAA7tC,EAAA6tC,SAEA7zC,IAAAC,QAAA4oB,WAAAyB,WAAAhiB,EAAA9D,KAAAguC,WAAAxsC,KACAxB,MAGA,IAAAsvC,EAAAtvC,KACAsU,EAAA9S,EAAA8S,MACAI,EAAAlT,EAAAkT,QAwCA,OAvCAlT,EAAA8S,MAAA,SAAAxQ,GACA,IAAA4Z,EAAAtT,UACAmlC,EAAA,WAIA,IAHA,IAAA/tC,EAAAguC,QACA,IAAAh0C,IAAAi0C,aAAAjuC,EAAAkuC,kBAAAC,OAAA7rC,EAAAwrC,EAAAM,UAEA,mBAAAt7B,EACA,OAAAA,EAAAvJ,KAAA8T,MAAAvK,EAAA,CAAAtU,MAAA+N,OAAA8hC,mBAAAnyB,MAGA,MAAA5Z,EAAAqxB,SAAA,IAAA3zB,EAAAsuC,UAAAR,EAAAtB,WAAAxsC,KAAAhG,IAAA+Q,UAAAkU,SAAAK,MACAtlB,IAAAiC,IAAAkkB,aAAAouB,mBAAApyC,EAAAgC,KAAA,SAAAqwC,GACA,EAAAryC,EAAAC,KAAAoyC,GACAV,EAAAN,KAAA3uC,EAAAkuC,EAAA5wC,EAAAupB,SAAA,CACA4oB,UAAA,GACAb,IAEAM,KAEAvvC,OACA,MAAA8D,EAAAqxB,QAAAma,EAAAtB,WAAAxsC,KAAAhG,IAAA+Q,UAAAkU,SAAAkP,KAAA,oBAAA7rB,EAAAmsC,aACAz0C,IAAAiC,IAAAyyC,kBAEAX,MAKA,IAAA/tC,EAAAguC,SAAA,WAAAnvC,GAAA,WAAAA,IAAA,EAAA1C,EAAAC,KAAA0xC,EAAAa,cACA3uC,EAAAkT,QAAA,SAAA07B,GAKA,GAJA50C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAAvwB,IAAAC,QAAAgiB,cAAA5L,OAAA,uBAAAy9B,EAAAa,WAAA,WAAA9vC,EAAA,QAAA,aAGA,mBAAAqU,EACA,OAAAA,EAAA3J,KAAA8T,MAAAnK,EAAA,CAAA1U,MAAA+N,OAAA4P,MAAAtc,UAAAiJ,MAAAS,KAAAX,eAIAqV,SAAAC,MAAAre,UAAA2tC,KAAAjkC,KAAA/K,KAAAK,EAAAkuC,EAAA/sC,IAEAqqC,MAAA,SAAArqC,GACA,IAAA+uC,EAAA/uC,EAAAA,EAAAkT,QAAA,KACA87B,EAAA7yC,EAAAupB,SAAA,CACAxS,QAAA/W,EAAAgC,KAAA,SAAA4uC,EAAA3uC,GACAI,KAAAqtC,eAAAztC,EACAI,KAAAutC,gBAAA,GACAvtC,KAAAwtC,SAAA,EACAxtC,KAAAywC,WAAA,EACAzwC,KAAA4rB,QAAA,SACA,mBAAA2kB,GACAA,EAAAhC,EAAA3uC,IACAI,OACAwB,GAAA,IACA,OAAAie,SAAAC,MAAAre,UAAAwqC,MAAA9gC,KAAA/K,KAAAwwC,IAEAE,MAAA,SAAA7B,EAAArtC,GAGA,OAFAqtC,EAAAlxC,EAAAupB,SAAA2nB,GAAA,GAAA7uC,KAAAutC,iBACAvtC,KAAAutC,gBAAA,GACAvtC,KAAA2wC,KAAA9B,EAAAlxC,EAAAupB,SAAA,CAAAnmB,KAAA,QAAA2vC,OAAA,GAAAlvC,KAEAovC,IAAA,SAAA/B,EAAArtC,GAGA,OAFAqtC,EAAAlxC,EAAAupB,SAAA2nB,GAAA,GAAA7uC,KAAAutC,iBACAvtC,KAAAutC,gBAAA,GACAvtC,KAAA2wC,KAAA9B,EAAAlxC,EAAAupB,SAAA,CAAAnmB,KAAA,OAAAS,KAEAqvC,WAAA,SAAAzwC,GAAA,IAAAoB,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAAilC,EAAA,EAAAjlC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,IACApK,KAAA8wC,UAAA1wC,EAAAzC,EAAAupB,SAAA1lB,GAAA,GAAA,CAAAutC,SAAA,IAAAM,IAEAyB,UAAA,SAAA1wC,GAAA,IAAAoB,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAAilC,EAAA,EAAAjlC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,IACA5I,EAAAA,GAAA,GAGApB,IACAJ,KAAAotC,IAAAhtC,GAEAoB,EAAAutC,UACA/uC,KAAA+wC,UAAApzC,EAAAupB,SAAAlnB,KAAA+wC,UAAA/wC,KAAA+wC,UAAA,GAAA3wC,KAIA4wC,aAAAhxC,KAAAixC,aACAjxC,KAAAixC,YAAAC,WAAAvzC,EAAAgC,KAAA,WACA6B,EAAAutC,QACA/uC,KAAA0wC,MAAA1wC,KAAA+wC,UAAAvvC,GAEAxB,KAAA2wC,KAAA3wC,KAAA+wC,UAAAvvC,GAEAxB,KAAA+wC,UAAA,MACA/wC,MAAAqvC,IAEA8B,WAAA,aAEAR,KAAA,SAAArD,EAAA9rC,GACAxB,KAAAmxC,aACA,IAAAC,EAAApxC,KAAAqxC,gBACAC,EAAAtxC,KAAAuxC,iBACAC,EAAAhwC,GAAAA,EAAAkT,QAAA/W,EAAAgC,KAAA6B,EAAAkT,QAAA1U,WAAAqK,EA4BA,OA1BA7I,EAAA7D,EAAAupB,SAAA,CACAxS,QAAA/W,EAAAgC,KAAA,SAAA4uC,EAAA3uC,EAAA4wC,GACAxwC,KAAAutC,gBAAA,GACAvtC,KAAAwtC,SAAA,EACAxtC,KAAAyxC,UAAAlD,EAAA3uC,EAAA4wC,GACAgB,GACAA,EAAAjD,EAAA3uC,EAAA4wC,IAEAxwC,OACAwB,GAEA4vC,IACA,MAAA9D,EACA3vC,EAAAupB,SAAAomB,EAAA8D,GAEA9D,EAAA8D,GAEAE,IACA,MAAA9vC,EACA7D,EAAAupB,SAAA1lB,EAAA8vC,GAEA9vC,EAAA8vC,GAEA,MAAAtxC,KAAAixC,aACAD,aAAAhxC,KAAAixC,aAEAxxB,SAAAC,MAAAre,UAAAsvC,KAAA5lC,KAAA/K,KAAAstC,EAAA9rC,IAEAiwC,UAAA,aAGAJ,cAAA,WACA,OAAA,MAEAE,eAAA,WACA,OAAA,MAEAG,aAAA,SAAAzzB,GAgBA,OAfAtgB,EAAAuhB,KAAA1jB,IAAAC,QAAAgiB,cAAAO,YAAA,aAAAC,GAAA,SAAA3I,GACA,IAAA,IAAAA,EAAAgJ,MAAA1b,cAAAZ,QAAA,cAAA,CACA,IAAA2vC,EAAApvC,SAAA+S,EAAAgJ,MAAA1b,cAAAtE,QAAA,aAAA,KACA,GAAA,EAAAqzC,EAAA,CACA,IAAAC,EAAA5xC,KAAA6xC,oBAAAF,GACA1zB,EAAAA,EAAA3f,QAAAgX,EAAA+I,KAAA,MAAAuzB,EAAAA,EAAA,UAEA,IAAA,IAAAt8B,EAAAgJ,MAAA1b,cAAAZ,QAAA,cAAA,CACA,IAAA2vC,EAAApvC,SAAA+S,EAAAgJ,MAAA1b,cAAAtE,QAAA,aAAA,KACA,GAAA,EAAAqzC,EAAA,CACA,IAAAC,EAAA5xC,KAAA8xC,oBAAAH,GACA1zB,EAAAA,EAAA3f,QAAAgX,EAAA+I,KAAA,MAAAuzB,EAAAA,EAAA,OAGA5xC,MACAie,GAEA4zB,oBAAA,SAAA/0C,GACA,GAAAkD,KAAA6/B,aAAA,CACA,IAAAvqB,EAAAtV,KAAA6/B,aAAA3f,IAAApjB,GAIA,OAHA,MAAAwY,IACAA,EAAAtV,KAAA6/B,aAAAkS,UAAA,CAAAJ,YAAA70C,KAEAwY,EAAAA,EAAA4K,IAAA,aAAA,KAEA,OAAAviB,EAAAka,KAAA7X,KAAAkgB,IAAA,gBAAA,SAAA8xB,GACA,OAAAA,EAAAl1C,KAAAA,KAGAg1C,oBAAA,SAAAh1C,GACA,IAAA+iC,EAAA7/B,KAAAkgB,IAAA,gBAAAlgB,KAAAkgB,IAAA,gBAAAlgB,KAAAkgB,IAAA,qBACA5K,EAAA3X,EAAAka,KAAAgoB,EAAA,SAAAmS,GACA,OAAAA,EAAAl1C,KAAAA,IAOA,OALA,MAAAwY,IACAA,EAAA3X,EAAAka,KAAAgoB,EAAA,SAAAmS,GACA,OAAAA,EAAAL,cAAA70C,KAGAwY,EAAAA,EAAAhW,MAAA,MAEA2yC,WAAA,WACA,IAAAC,EAAAlyC,KAAAkgB,IAAA,kBACA,OAAA,MAAAgyB,GAAA,iBAAAA,EAAAD,WAAAC,EAAAD,WAAA,MAEAE,cAAA,WACA,IAAAD,EAAAlyC,KAAAkgB,IAAA,kBACA,OAAA,MAAAgyB,GAAA,iBAAAA,EAAA/c,OAAA+c,EAAA/c,OAAA35B,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAAlf,SAEAmf,YAAA,WACA,OAAA,EAAA50C,EAAAC,KAAAoC,KAAAiyC,eAEAO,WAAA,SAAAC,GACA,OAAA,QAMAj3C,IAAAk3C,YAAA,GAEAl3C,IAAAk3C,YAAAC,eAAAlzB,SAAAE,WAAA1f,OAAA,CACA6sC,YAAA,GACA5lB,SAAA,GACA1lB,QAAA,GACAurC,QAAA,IACA0D,WAAA,EACAtwC,IAAA,SAAAqB,EAAAnB,GACA,OAAA7E,IAAAC,QAAA2D,WAAA+gB,YAAA,mBAAAngB,KAAAb,SAAAa,KAAAb,SAAAqC,EAAAnB,GAAAL,KAAAb,SAAA,CACAqhB,QAAAxgB,KAAAguC,WAAAxsC,MAGAwsC,WAAA,SAAAxsC,GACA,IAAAgf,EACA,GAAAxgB,KAAAwB,QAAA0sC,UAAA,MAAA1sC,GAAAA,EAAA0sC,SACA1tB,EAAAhlB,IAAA+Q,UAAAkU,SAAAC,YACA,GAAA1gB,KAAAwB,QAAAysC,SAAA,MAAAzsC,GAAAA,EAAAysC,QACAztB,EAAAhlB,IAAA+Q,UAAAkU,SAAAK,WACA,GAAA9gB,KAAAwB,QAAA+f,WAAA,MAAA/f,GAAAA,EAAA+f,UACAf,EAAAxgB,KAAAwB,QAAAgf,YACA,CAAA,KAAA,EAAA7iB,EAAAC,KAAAoC,KAAAwB,QAAAgf,UAGA,OAAAhlB,IAAA+Q,UAAAkU,SAAAkP,IAFAnP,EAAAxgB,KAAAwB,QAAAgf,QAIA,OAAAA,GAEA2tB,gBAAA,SAAAnuB,EAAAxe,KAEA4sC,YAAA,SAAApuB,EAAAxe,GACA,IAAA,IAAAxB,KAAAmuC,gBAAAnuB,EAAAxe,GAEA,OADAwe,EAAAhgB,KAAAqM,MAAA2T,EAAAxe,GACAie,SAAAE,WAAAte,UAAA+sC,YAAArjC,KAAA/K,KAAAggB,EAAAxe,IAGA6sC,WAAA,SAAA7sC,KAEA8sC,WAAA,SAAAtuB,EAAAxe,IACA,IAAAxB,KAAAquC,WAAA7sC,KACAxB,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,GAAA,GAAA7D,EAAAupB,SAAAlnB,KAAAknB,SAAAlnB,KAAAknB,SAAA,GAAAlnB,KAAA8sC,cACA9sB,GAAA,EAAAA,EAAAtjB,QACAsD,KAAA4yC,IAAA5yB,EAAAhgB,KAAAwB,SACAxB,KAAAyuC,cAGAA,UAAA,aAEAoE,WAAA,SAAArxC,GACA,IAAAxB,KAAAywC,UACA,OAAAzwC,KAAA6rC,MAAArqC,IAEA0e,IAAA,SAAApjB,GACA,GAAA,UAAAtB,IAAAC,QAAAqW,cAAAC,YAAAjV,GAUA,OAAA2iB,SAAAE,WAAAte,UAAA6e,IAAAnV,KAAA/K,KAAAlD,GATA,IAAA8N,EAAA,GAOA,OANAjN,EAAAuhB,KAAApiB,EAAAa,EAAAgC,KAAA,SAAAmzC,GACA,IAAAvE,EAAA9uB,SAAAE,WAAAte,UAAA6e,IAAAnV,KAAA/K,KAAA8yC,GACAvE,GACA3jC,EAAAwT,KAAAmwB,IAEAvuC,OACA4K,GAIAihC,MAAA,SAAArqC,GACA,IAAA+uC,EAAA/uC,EAAAA,EAAAkT,QAAA,KACA87B,EAAA7yC,EAAAupB,SAAA,CACAxS,QAAA/W,EAAAgC,KAAA,SAAAqgB,EAAApgB,GACAI,KAAAywC,WAAA,EACAzwC,KAAA4rB,QAAA,SACA,mBAAA2kB,GACAA,EAAAvwB,EAAApgB,IACAI,OACAwB,GAAA,IACA,OAAAie,SAAAE,WAAAte,UAAAwqC,MAAA9gC,KAAA/K,KAAAwwC,IAEAuC,WAAA,SAAAvxC,GACAxB,KAAA6rC,MAAAluC,EAAAupB,SAAA1lB,GAAA,GAAA,CAAAmtC,OAAA,MAEAK,KAAA,SAAA3uC,EAAAkuC,EAAA/sC,GACA,IAAAytC,EAAAtxC,EAAAuxC,MAAA1tC,GAEAA,EAAArB,IAAAH,KAAAG,IAAAqB,EAAA2tC,WAAA9uC,GACAmB,EAAA4tC,WAAAzxC,EAAAgC,KAAA,SAAAmE,GACAA,EAAA3D,IAAAH,KAAAG,IAAAqB,EAAA2tC,WAAA9uC,GACAmB,EAAA6tC,UACAvrC,EAAAurC,QAAA7tC,EAAA6tC,SAEA7zC,IAAAC,QAAA4oB,WAAAyB,WAAAhiB,EAAA9D,KAAAguC,WAAAxsC,KACAxB,MAGA,IAAAsvC,EAAAtvC,KACAsU,EAAA9S,EAAA8S,MACAI,EAAAlT,EAAAkT,QAwCA,OAvCAlT,EAAA8S,MAAA,SAAAxQ,GACA,IAAA4Z,EAAAtT,UACAmlC,EAAA,WAIA,IAHA,IAAA/tC,EAAAguC,QACA,IAAAh0C,IAAAi0C,aAAAjuC,EAAAkuC,kBAAAC,OAAA7rC,EAAAwrC,EAAAM,UAEA,mBAAAt7B,EACA,OAAAA,EAAAvJ,KAAA8T,MAAAvK,EAAA,CAAAtU,MAAA+N,OAAA8hC,mBAAAnyB,MAGA,MAAA5Z,EAAAqxB,SAAA,IAAA3zB,EAAAsuC,UAAAR,EAAAtB,WAAAxsC,KAAAhG,IAAA+Q,UAAAkU,SAAAK,MACAtlB,IAAAiC,IAAAkkB,aAAAouB,mBAAApyC,EAAAgC,KAAA,SAAAqwC,GACA,EAAAryC,EAAAC,KAAAoyC,GACAV,EAAAN,KAAA3uC,EAAAkuC,EAAA5wC,EAAAupB,SAAA,CACA4oB,UAAA,GACAb,IAEAM,KAEAvvC,OACA,MAAA8D,EAAAqxB,QAAAma,EAAAtB,WAAAxsC,KAAAhG,IAAA+Q,UAAAkU,SAAAkP,KAAA,oBAAA7rB,EAAAmsC,aACAz0C,IAAAiC,IAAAyyC,kBAEAX,MAKA,IAAA/tC,EAAAguC,SAAA,WAAAnvC,GAAA,WAAAA,IAAA,EAAA1C,EAAAC,KAAA0xC,EAAAa,cACA3uC,EAAAkT,QAAA,SAAA07B,GAKA,GAJA50C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAAvwB,IAAAC,QAAAgiB,cAAA5L,OAAA,uBAAAy9B,EAAAa,WAAA,WAAA9vC,EAAA,QAAA,aAGA,mBAAAqU,EACA,OAAAA,EAAA3J,KAAA8T,MAAAnK,EAAA,CAAA1U,MAAA+N,OAAA4P,MAAAtc,UAAAiJ,MAAAS,KAAAX,eAIAqV,SAAAE,WAAAte,UAAA2tC,KAAAjkC,KAAA/K,KAAAK,EAAAkuC,EAAA/sC,IAEAmvC,KAAA,SAAAnvC,GACA,OAAAxB,KAAAgvC,KAAAxtC,GAAAA,EAAAovC,IAAA,SAAA,SAAA5wC,KAAAwB,IAEAwxC,iBAAA,WACA,IAAAC,EAAA,GAKA,OAJAt1C,EAAAuhB,KAAAlf,KAAAggB,OAAA,SAAAuuB,IACAA,EAAAd,cAAAc,EAAArB,UACA+F,EAAA70B,KAAAmwB,KAEA0E,KAMAz3C,IAAAkG,MAAA,GAEAlG,IAAAkG,MAAAwxC,SAAAzzB,SAAA0zB,KAAAlzC,OAAA,CACAuwC,KAAA,CACAvE,UAAA,EACAN,SAAA,KACAyH,qBAAA,KACAC,aAAA,GACAC,aAAA,EACAC,sBAAA,GAEAzG,YAAA,GACA5lB,SAAA,GACA1lB,QAAA,GACAgyC,cAAA,GACAC,OAAA,GACApF,WAAA,SAAA7sC,KAEA8sC,WAAA,SAAA9sC,GACA,IAAA,IAAAxB,KAAAquC,WAAA7sC,GAAA,CACA,IAAAkyC,EAAA/1C,EAAAupB,SAAAlnB,KAAA8sC,YAAA9sC,KAAA8sC,YAAA,GAAA9sC,KAAAwwC,MACAkD,EAAA/1C,EAAAupB,SAAAlnB,KAAAknB,SAAAlnB,KAAAknB,SAAA,GAAAwsB,GACA1zC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,GAAA,GAAAkyC,GACA,MAAA1zC,KAAAwzC,gBACAxzC,KAAA2zC,mBACA3zC,KAAAyzC,OAAA91C,EAAAupB,SAAAlnB,KAAAyzC,OAAAzzC,KAAAyzC,OAAA,GAAAzzC,KAAAwzC,eACAxzC,KAAA4zC,eAAA5zC,KAAAyzC,SAEAzzC,KAAA6zC,aAAAl2C,EAAAgC,KAAA,YACA,IAAAK,KAAA8zC,qBACA9zC,KAAA+rC,UAEA/rC,SAGA6zC,aAAA,SAAAh7B,GACA,IAAA6xB,EAAA1qC,KAAAwB,QAAA6xC,aAAArzC,KAAAwB,QAAA6xC,aAAA,GACA3I,EAAAqJ,UAAA/zC,KAAAwB,QAAAmqC,SACAnwC,IAAAivC,WAAAe,iBAAAY,eAAA1B,EAAA7xB,IAEAi7B,kBAAA,aAEAE,WAAA,WACA,OAAAh0C,KAAAwB,SAEAyyC,aAAA,aAGAlI,OAAA,WACA,KADA,EAAA3hC,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,KACApK,KAAAk0C,kBAAA,CAIA,IAAA,IAAAl0C,KAAAi0C,eAAA,CAEA,IAAA7zC,EADA,GAAA,MAAAJ,KAAAwB,QAAAmqC,UAAA,EAAAhuC,EAAAC,KAAAoC,KAAAtC,OAAA,IAAAsC,KAAAwB,QAAA+xC,qBAGAnzC,EADA,mBAAAJ,KAAAg0C,WACAh0C,KAAAg0C,kBACA,IAAAh0C,KAAAg0C,WACAh0C,KAAAg0C,WAEA,GAEAx4C,IAAAivC,WAAAe,iBAAAQ,eAAAhsC,KAAAwB,QAAAyqC,SAAAjsC,KAAAwB,QAAAmqC,SAAA3rC,KAAAtC,IAAA0C,EAAAzC,EAAAgC,KAAA,WAEA,GADAhC,EAAAgC,KAAAK,KAAAm0C,iBAAAn0C,MACAA,KAAAwB,QAAA8xC,YAAA,CACA,IAAAc,EAAAp0C,KAAA7C,EAAA,2BACA,EAAAQ,EAAAC,KAAAw2C,IACAA,EAAAC,UAGAr0C,KAAAk0C,mBAAA,MAAAl0C,KAAAwB,QAAA4xC,qBAKApzC,KAAAm0C,mBAJAn0C,KAAAtC,IAAA42C,WAAAt0C,KAAAwB,QAAA4xC,qBAAA,WACApzC,KAAAm0C,oBACAn0C,OAIAA,YAEAA,KAAAm0C,mBAEAn0C,KAAAk0C,mBAAA,EAEA,OAAAl0C,OAEAm0C,iBAAA,WACA,mBAAAn0C,KAAAwB,QAAA+yC,aACAv0C,KAAAwB,QAAA+yC,cAEAv0C,KAAAu0C,eAEAA,YAAA,aAGAC,kBAAA,SAAAvI,EAAAN,EAAA8I,EAAAT,EAAAxyC,GACA,IAAAkzC,EACA,mBAAAlzC,EACAkzC,EAAAlzC,EACAA,GAAA,mBAAAA,EAAAqX,WACA67B,EAAAlzC,EAAAqX,UAEArd,IAAAivC,WAAAe,iBAAAQ,eAAAC,EAAAN,EAAA8I,EAAAT,GAAA,GAAAU,EAAAlzC,IAEAmzC,YAAA,SAAAC,GACA,MAAA50C,KAAA60C,SACA70C,KAAA60C,OAAA,IAEA70C,KAAA60C,OAAAz2B,KAAAw2B,IAGAE,aAAA,SAAAj8B,GACA,mBAAAA,GACAA,KAEAtc,OAAA,SAAAsc,GACA7Y,KAAA80C,aAAAn3C,EAAAgC,KAAA,SAAAiL,IACA,IAAAA,IACA5K,KAAA+0C,gBACA/0C,KAAA2zC,mBACA3zC,KAAAtC,IAAAs3C,QACA,EAAAr3C,EAAAC,KAAAoC,KAAA60C,SACAl3C,EAAAuhB,KAAAlf,KAAA60C,OAAA,SAAAn3C,GACAA,EAAAs3C,UAIA,mBAAAn8B,GACAA,MAEA7Y,QAEAi1C,gBAAA,SAAA53C,GACAA,IACAA,EAAA43C,kBACA53C,EAAA63C,cAAA,MAOA15C,IAAAkG,MAAAyzC,UAAA35C,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACA6sC,YAAA,CACAnB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACA/W,OAAA,GACAovB,KAAA,GACAC,kBAAA,EACAC,YAAA,EACAC,aAAA,KACAC,gBAAA,EACAC,aAAA,KACAC,mBAAA,UACAC,oBAAA,EACAC,iBAAA,SACAC,uBAAA,YACAC,uBAAA,EACAC,oBAAA,GACAC,0BAAA,QACAC,YAAAt4C,EAAAu4C,KACAC,QAAAx4C,EAAAu4C,KACAE,KAAAz4C,EAAAu4C,KACA1nB,MAAA,KACA6nB,SAAA,KACAC,SAAA,KACAv4C,OAAA,KACAw4C,UAAA,KACAC,UAAA,KACAC,WAAA,EACAC,mBAAA,GAEAxvB,SAAA,GACA1lB,QAAA,GACAgyC,cAAA,CACAmD,kBAAA,cACAC,kBAAA,OACAC,yBAAA,cACAC,qBAAA,SAEArD,OAAA,GACAK,kBAAA,WACA9zC,KAAAwB,QAAA7D,EAAAupB,SAAAlnB,KAAAwB,QAAA,CACAu1C,KAAA,SAAAp5C,EAAAid,aAIA5a,KAAAg3C,WAAA,OACA,IAAAh3C,KAAAi3C,uBACAj3C,KAAAk3C,cACAl3C,KAAAm3C,sBAGAF,mBAAA,aAEAE,kBAAA,aAEAD,YAAA,WAOA,GANAl3C,KAAAo3C,UAAAj6C,EAAA,oBACA,IAAAQ,EAAAC,KAAAoC,KAAAo3C,aACAp3C,KAAAo3C,UAAAv3C,OAAA,gCACA1C,EAAA,QAAA2D,OAAAd,KAAAo3C,YAEAp3C,KAAAq3C,MAAAl6C,EAAA,qCACA6C,KAAAwB,QAAA6zC,iBAAA,CACA,IAAAiC,EAAAn6C,EAAA,uCACA6C,KAAAq3C,MAAAv2C,OAAAw2C,GACAt3C,KAAAg3C,WAAAM,QACA,GAAAt3C,KAAAwB,QAAA8zC,WAAA,CACA,IAAAp1C,EAAA/C,EAAA,eAAA6C,KAAAwB,QAAA+zC,aAAA,OACAv1C,KAAAq3C,MAAAv2C,OAAAZ,GACAF,KAAAg3C,WAAAh3C,KAAAq3C,YAEAr3C,KAAAg3C,WAAAh3C,KAAAq3C,OAEAr3C,KAAAo3C,UAAAt2C,OAAAd,KAAAq3C,OACAr3C,KAAAq3C,MAAAA,MAAA,CACAE,SAAA,IAAA55C,EAAAC,KAAAT,EAAA,0BAAA,SACAq6C,UAAA,EACAC,MAAA,IAGAz3C,KAAA7C,EAAA,iBAAAmD,KAAA,KAAAN,KAAAwB,QAAAu1C,MAEA/2C,KAAA03C,aAEAC,SAAA,WACA,MAAA,CACAtB,SAAAr2C,KAAAwB,QAAA60C,SACAC,SAAAt2C,KAAAwB,QAAA80C,SACA9nB,MAAAxuB,KAAAwB,QAAAgtB,QAGAopB,SAAA,SAAAC,GACA73C,KAAAq3C,MAAAx/B,KAAA,iBAAAha,IAAA,CACAi6C,YAAAD,EAAAxB,SACA0B,YAAAF,EAAAvB,SACA9nB,MAAAqpB,EAAArpB,SAGA2lB,iBAAA,WACA,GAAA,MAAAn0C,KAAAq3C,MAAA,CAQA,GAPAr3C,KAAA43C,SAAA53C,KAAA23C,YAOA33C,KAAAwB,QAAAi1C,UAAA,CAEA,IAAAxxC,EAAA,EAAA1C,SAAAvC,KAAAq3C,MAAAx/B,KAAA,iBAAAha,IAAA,cAAAS,QAAA,KAAA,KACA05C,EAAAh4C,KAAAq3C,MAAAx/B,KAAA,iBACAogC,EAAAj4C,KAAAq3C,MAAAx/B,KAAA,iBACAqgC,EAAAl4C,KAAAq3C,MAAAx/B,KAAA,mBACAsgC,EAAAn4C,KAAAq3C,MAAAx/B,KAAA,eAEA,EAAAla,EAAAC,KAAAs6C,KAEAjzC,GAAAkzC,EAAAC,cAAAF,EAAAE,cAGAD,EAAAD,GAIA,EAAAv6C,EAAAC,KAAAo6C,KACA/yC,GAAA+yC,EAAAI,eAIA,EAAAz6C,EAAAC,KAAAq6C,KACAhzC,GAAAgzC,EAAAG,eAGAD,EAAAt6C,IAAA,CACAw6C,aAAAv8C,OAAAw8C,YAAArzC,EAAA,KACAszC,aAAAz8C,OAAAw8C,YAAArzC,EAAA,KACAuzC,SAAA,cAGAx4C,KAAAq3C,MAAAx/B,KAAA,iBAAAha,IAAA,CACAw6C,aAAAr4C,KAAAwB,QAAA+0C,UACAgC,aAAAv4C,KAAAwB,QAAAg1C,UACAz4C,OAAAiC,KAAAwB,QAAAzD,SAIA,GAAAiC,KAAAwB,QAAAk1C,kBAAA,CACA,IAAA+B,EAAAt7C,EAAA,WAAA,CACAwd,MAAA,+DACAsM,MAAA,2BAEAwxB,EAAA33C,OAAA,gCACAd,KAAA7C,EAAA,kBAAA2D,OAAA23C,GAGAj9C,IAAAkG,MAAAwxC,SAAA7xC,UAAA8yC,iBAAAppC,KAAA/K,QAGA03C,UAAA,WACA,IAAAgB,EAAA,MAAA14C,KAAAq3C,MACAsB,EAAAp2C,SAAApF,EAAA,kBAAAU,IAAA,YACA+6C,EAAA,MACA5tC,MAAA2tC,KACAC,EAAAD,GAEAx7C,EAAA,oBAAA0a,KAAA,UAAAqH,KAAA,WACA,SAAA/hB,EAAA6C,MAAAnC,IAAA,YAAA,SAAAV,EAAA6C,MAAAnC,IAAA,UAAAiN,YAAAvI,SAAApF,EAAA6C,MAAAnC,IAAA,UAAAiN,YAAA8tC,IACAA,EAAAr2C,SAAApF,EAAA6C,MAAAnC,IAAA,UAAAiN,eAEA4tC,EACAv7C,EAAA,mBAAAU,IAAA,UAAA+6C,EAAA,KAEAz7C,EAAA,mBAAAU,IAAA,UAAA+6C,EAAA,IACA54C,KAAAq3C,MAAAx5C,IAAA,UAAA+6C,EAAA,MAGAC,YAAA,WACA,MAAA74C,KAAAq3C,QACAr3C,KAAAq3C,MAAAA,MAAA,QACAr3C,KAAAq3C,QACAr3C,KAAAq3C,MAAA96C,SACAyD,KAAAq3C,MAAA,MAEAr3C,KAAAzD,SACA,IAAAoB,EAAAC,KAAAT,EAAA,mBACAA,EAAA,mBAAAZ,UAEAyD,KAAA03C,YACAv6C,EAAAd,SAAA+4C,MAAAl7B,SAAA,eAEAla,KAAA84C,WACA94C,KAAA2zC,qBAGAoF,MAAA,WACA/4C,KAAA64C,cACA74C,KAAAm2C,WAEA2C,SAAA,WAAA,IAAAE,EACAh5C,KAAAwB,QAAAs3C,WACA1uC,WAAA4uC,EAAAh5C,KAAAwB,SAAAs3C,SAAAj6B,MAAAm6B,EAAA5uC,WAAApK,KAAAwB,QAAAs3C,SAAA94C,KAAAuuC,SAEA4H,QAAA,WAAA,IAAA8C,EACAj5C,KAAAwB,QAAA20C,UACA/rC,WAAA6uC,EAAAj5C,KAAAwB,SAAA20C,QAAAt3B,MAAAo6B,EAAA7uC,WAAApK,KAAAwB,QAAA20C,QAAAn2C,KAAAuuC,SAEA0H,YAAA,WAAA,IAAAiD,EACAl5C,KAAAwB,QAAAy0C,cACA7rC,WAAA8uC,EAAAl5C,KAAAwB,SAAAy0C,YAAAp3B,MAAAq6B,EAAA9uC,WAAApK,KAAAwB,QAAAy0C,YAAAj2C,KAAAuuC,SAEA6H,KAAA,WAAA,IAAA+C,EACAn5C,KAAAwB,QAAA40C,OACAhsC,WAAA+uC,EAAAn5C,KAAAwB,SAAA40C,KAAAv3B,MAAAs6B,EAAA/uC,WAAApK,KAAAwB,QAAA40C,KAAAp2C,KAAAuuC,WCxzBA/yC,IAAA49C,QAAA,GAEA59C,IAAA49C,QAAAC,WAAA55B,SAAA65B,OAAAr5C,OAAA,CACAs5C,OAAA,CACAC,GAAA,SAEAlL,WAAA,WAEA3wC,EAAAuhB,KAAA1jB,IAAAiC,IAAA87C,OAAA,SAAAE,GACAz5C,KAAAy5C,MAAAA,EAAAA,MAAAA,EAAA18C,KAAA08C,EAAA5gC,WACA7Y,OAEAg1C,MAAA,WACA,GAAAx5C,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,IACA,GAAA,MAAAthC,IAAAiC,IAAA0jB,SAAA3lB,IAAAiC,IAAA0jB,QAAAu4B,aAIA,CAEA,IAAAC,GAAA,EACAh8C,EAAAuhB,KAAAvhB,EAAA2uC,OAAA9wC,IAAAiC,IAAA87C,OAAA,SAAAK,GACA,OAAA,EAAAj8C,EAAAC,KAAAg8C,EAAAH,SACA,SAAAG,GACA,IAAAD,IAAA,IAAAh8C,EAAAqE,QAAA43C,EAAAH,MAAA,MAAA,mBAAAG,EAAA/gC,SAAA,CACA,IAAAghC,EAAA,GACAC,GAAA,EACAn8C,EAAAuhB,KAAA06B,EAAAH,MAAAn7C,QAAA,IAAA,IAAAwP,MAAA,KAAA,SAAAisC,GACA,GAAAD,EAAA,CACA,IAAAE,EAAAx+C,IAAAC,QAAA2D,WAAAujB,cAAAo3B,EAAAjsC,MAAA,MAAA,IACAksC,GAAA,EAAAr8C,EAAAC,KAAAo8C,GACAH,EAAAz7B,KAAA47B,GAGAF,GAAA,KAIAA,IACAF,EAAA/gC,SAAAgG,MAAA+6B,EAAAC,GACAF,GAAA,MAKAA,IACAn+C,IAAAiC,IAAA0jB,QAAA84B,WAAA,YACAj6C,KAAA2rB,SAAA,WAAA,CACAC,SAAA,EACAttB,SAAA,IAGA9C,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAA+Q,UAAAqjB,iBAAA,MAAAp0B,IAAAiC,IAAA0jB,QAAA+4B,MAAA,QAAA1+C,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,eACAlgB,KAAA2rB,SAAA,iBAAA,CACAC,SAAA,EACAttB,SAAA,IAIA0B,KAAA2rB,SAAA,WAAA,CACAC,SAAA,EACAttB,SAAA,UA7CA0B,KAAAm6C,qBAmDA,CACA,IAAAR,GAAA,EAcA,GAbA,WAAAh5C,QAAAnF,IAAAiC,IAAA28C,YACAz8C,EAAAuhB,KAAAvhB,EAAA2uC,OAAA9wC,IAAAiC,IAAA28C,UAAA,SAAAC,GACA,OAAA,EAAA18C,EAAAC,KAAAy8C,EAAAZ,SACA,SAAAY,GACA18C,EAAAka,KAAAwiC,EAAAZ,MAAA3rC,MAAA,KAAA,SAAAisC,GACA,IAAAC,EAAAx+C,IAAAC,QAAA2D,WAAAujB,cAAAo3B,EAAAz7C,QAAA,IAAA,KACA07C,GAAA,EAAAr8C,EAAAC,KAAAo8C,IAAA,mBAAAK,EAAAxhC,WACAwhC,EAAAxhC,SAAAmhC,GACAL,GAAA,QAKAA,EAAA,CACA,IAAAW,EAAA38C,EAAAka,KAAArc,IAAAiC,IAAA28C,UAAA,SAAAC,GACA,MAAA,YAAAA,EAAAt9C,OAEAu9C,GAAA,mBAAAA,EAAAzhC,SAEAyhC,EAAAzhC,WAEA,EAAAlb,EAAAC,KAAApC,IAAAiC,IAAA88C,cAOA58C,EAAAuhB,KAAA1jB,IAAAiC,IAAA88C,YAAA,SAAAC,GACA,mBAAAA,GACAA,SAOAC,aAAA,CACA,mBACA,SACA,SACA,cACA,cACA,gBACA,aACA,gBACA,gBACA,UACA,YAEAN,eAAA,WAAA,IAAA34C,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GASA,GARA,MAAA5I,GACAA,EAAAk5C,aACAl/C,IAAAiC,IAAAiuB,OAAAivB,YAAA,IAAA36C,KAAA46C,mBAIAz9C,EAAA,gBAAA09C,OACAr/C,IAAAiC,IAAAC,IAAAG,IAAA,MAAA,GACA,MAAArC,IAAAiC,IAAAq9C,QAAA,EAAAn9C,EAAAC,KAAApC,IAAAiC,IAAAq9C,OAAAC,OAAA,CACA,IAAAC,EAAAr9C,EAAAo0C,UAAAv2C,IAAAiC,IAAAq9C,OAAAC,MAAA,CAAAtB,MAAA,WACA,GAAA,MAAAuB,EAKA,YAJAh7C,KAAA2rB,SAAA,KAAAqvB,EAAAvB,MAAA,CACA7tB,SAAA,EACAttB,SAAA,IAMA0B,KAAA2rB,SAAA,SAAA,CACAC,SAAA,EACAttB,SAAA,KAGA28C,YAAA,WACAz/C,IAAAiC,IAAAiuB,OAAAC,SAAA,IAAA,CACAC,SAAA,KAGAsvB,QAAA,SAAAriC,EAAA6E,EAAA3gB,GAWA,GAVA,mBAAAo+C,IACAA,GAAA,OAAA,WAAA,CACAC,KAAA18C,SAAAykB,SAAAzkB,SAAAC,OAAAD,SAAAmkB,OAIArnB,IAAAiC,IAAAo2B,OACAr4B,IAAAiC,IAAAo2B,KAAA,IAAAr4B,IAAAkG,MAAA25C,QAAA7/C,IAAAiC,IAAAC,MAGAlC,IAAAiC,IAAAo2B,KAAAynB,YAAA,CACA,IAAAC,EAAA//C,IAAAiC,IAAAo2B,KAAAynB,YAAA95C,QAAA+5C,aAEA,GADA//C,IAAAiC,IAAAo2B,KAAAynB,YAAAT,OACAU,EAEA,YADA97B,SAAA65B,OAAAj4C,UAAA65C,QAAAnwC,KAAA/K,KAAA6Y,EAAA6E,EAAA3gB,GAIA,IAAAooB,EAAA3pB,IAAAC,QAAA2D,WAAAujB,cAAA,aACA,GAAA,EAAAhlB,EAAAC,KAAAunB,KACA3pB,IAAAiC,IAAA0jB,QAAAisB,IAAA,YAAAjoB,GACA,EAAAxnB,EAAAC,KAAA9B,OAAA4C,SAAAmkB,QAAA,EAAA/mB,OAAA4C,SAAAmkB,KAAA7gB,QAAA,MAAA,CACA,IAAAw5C,EAAA1/C,OAAA4C,SAAAmkB,KAAA/U,MAAA,KACA2tC,EAAAD,EAAA79C,EAAAC,KAAA49C,GAAA,GAAAvmC,cACAymC,EAAA,aACA,EAAAD,EAAAz5C,QAAA05C,IACAlgD,IAAAiC,IAAA0jB,QAAAisB,IAAA,YAAAqO,EAAAn9C,QAAAo9C,EAAA,KAKA,IAEAC,EAFAC,EAAAz+C,EAAA,iBACA,EAAAQ,EAAAC,KAAAg+C,KAGAD,EADAngD,IAAAiC,IAAA0jB,QAAAjB,IAAA,eAAA,MAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KACA1+C,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,cAEA,MAAA1kB,IAAAiC,IAAA0jB,QAAA0D,QACArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,cAGA,KAEA07B,EAAA18B,KAAA,WACA,IACA28B,EADA1+C,EAAA6C,MACAI,KAAA,aACA,EAAAzC,EAAAC,KAAAi+C,KACAl+C,EAAAka,KAAAgkC,EAAA/tC,MAAA,KAAA,SAAAguC,GACA,OAAAv5C,SAAAu5C,KAAAH,IAEAx+C,EAAA6C,MAAAga,YAAA,UAGA7c,EAAA6C,MAAAka,SAAA,cAMA,IAAAqL,EAAA/pB,IAAAC,QAAA2D,WAAAujB,cAAA,MAKA,GAJA,EAAAhlB,EAAAC,KAAA2nB,IACA/pB,IAAAiC,IAAA0jB,QAAAisB,IAAA,cAAA7nB,GAGA,EAAA5nB,EAAAC,KAAA9B,OAAAigD,cAAAh/C,IAAAjB,OAAAigD,YACA/7C,KAAA2rB,SAAA7vB,OAAAigD,YAAA,CACAnwB,SAAA,EACAttB,SAAA,QAHA,CAUA,IAAA09C,GAAA,IAAAj/C,EAAAiF,QAAA,WACAg2C,EAAA76C,EAAA,gBACA8+C,EAAAzgD,IAAAiC,IAAAC,IACA,GAAAs+C,GAAAxgD,IAAAiC,IAAA0jB,QAAAu4B,aACA15C,KAAA2rB,SAAA,GAAA,CACAC,SAAA,EACAttB,SAAA,QAHA,CAOA,GAAA09C,GAAAxgD,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,KAAAthC,IAAAiC,IAAA0jB,QAAAu4B,eAAA,IAAA15C,KAAAy6C,aAAAz4C,QAAAjF,EAAA6F,eAgCAo5C,GAAA,WAAAj/C,GAAA,WAAAA,GACAk/C,EAAAp+C,IAAA,MAAA,GACAm6C,EAAA6C,OACAoB,EAAApyB,UAAA,KAQAmuB,EAAAP,OACAwE,EAAAp+C,IAAA,MAAAm6C,EAAAj6C,WANAvC,IAAAiC,IAAA0jB,QAAAsvB,WACAj1C,IAAAiC,IAAA0jB,QAAA0qB,YAvCA,CAEA,GAAA,UAAA9uC,GAAA,MAAAvB,IAAAiC,IAAAq9C,QAAA,EAAAn9C,EAAAC,KAAApC,IAAAiC,IAAAq9C,OAAAC,OAAA,CACA,IAAAmB,EAAAv+C,EAAAo0C,UAAAv2C,IAAAiC,IAAAq9C,OAAAC,MAAA,CAAAoB,QAAA,IACA,GAAA,MAAAD,EAKA,YAJAl8C,KAAA2rB,SAAA,MAAAuwB,EAAAzC,MAAA,CACA7tB,SAAA,EACAttB,SAAA,IAMA,GAAA9C,IAAAiC,IAAA0jB,QAAAi7B,oBAAA,EAAAz+C,EAAAC,KAAAunB,IAAA,EAAAxnB,EAAAC,KAAA2nB,OACA,MAAA/pB,IAAAiC,IAAA0jB,QAAA0D,SAAA,EAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,WAMA,OALA+7B,EAAAp+C,IAAA,MAAA,QACAmC,KAAA2rB,SAAA,SAAA,CACAC,SAAA,EACAttB,SAAA,IAIA,GAAA,IAAAX,EAAAC,KAAAunB,IAAA,IAAAxnB,EAAAC,KAAA2nB,GAIA,YAHAvlB,KAAAm6C,eAAA,CACAO,YAAA,IAKA1C,EAAAP,OAuBA,IAAA4E,EAAA1+C,EAAAo0C,UAAAv2C,IAAAiC,IAAA87C,OAAA,CAAAx8C,KAAAA,IACA,MAAAs/C,IACA,mBAAAA,EAAA96C,MACAlF,SAAAkF,MAAA86C,EAAA96C,QAEA5D,EAAAC,KAAAy+C,EAAA96C,SACAlF,SAAAkF,MAAA86C,EAAA96C,QAIAke,SAAA65B,OAAAj4C,UAAA65C,QAAAnwC,KAAA/K,KAAA6Y,EAAA6E,EAAA3gB,MAGA69C,gBAAA,WACA,OAAA9+C,OAAA4C,SAAAmkB,KAAAvkB,QAAA,IAAA,OC3SA9C,IAAAkG,MAAA46C,WAAA,GAEA9gD,IAAAkG,MAAA46C,WAAAC,UAAA/gD,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACA6sC,YAAA,CACAnB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mBACAsW,aAAA,CACArtB,OAAA,IAAAxqB,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BAEAyf,aAAA,EACAC,WAAA,EACAC,aAAA,EACAC,gBAAA,EACAC,cAAA,EACAC,IAAA,sGACAC,WAAA,GACAC,gBAAA,KACAC,WAAA,KACAC,iBAAA,KACAC,aAAA,KACAC,YAAA,KACAC,YAAA,KACAC,QAAA,EACAC,WAAA,GACAC,MAAA,MACA/T,QAAA,KACAgU,WAAA,KACAC,mBAAA,KACAC,eAAA,KACAC,gBAAA,GACAC,YAAA,EACAC,eAAA,MACAC,iBAAA,KACAC,YAAA,KACAC,kBAAA,KACAC,iBAAA,KACAC,kBAAA,EACAC,oBAAA,EACAC,WAAA,EACAC,aAAA,KACAC,eAAA,cACAC,mBAAA,GAEA/K,cAAA,CACAgL,qBAAA,cACAC,0BAAA,SACAC,uBAAA,gBAEAC,kBAAA,SAAAC,GACA,OAAA,GAEAC,oBAAA,SAAAD,EAAAE,KAGAC,eAAA,SAAAH,KAGAI,kBAAA,SAAAJ,EAAAE,KAGAhL,kBAAA,WACA9zC,KAAAwB,QAAA7D,EAAAsC,OAAAD,KAAAwB,QAAA,CACAu1C,KAAAp5C,EAAAid,WACAiiC,IAAA78C,KAAAwB,QAAA67C,OAAAr9C,KAAAwB,QAAAq7C,IAAA,gDACAoC,SAAAthD,EAAAupB,SAAA,CACAg4B,WAAA,cACAC,WAAA,aACAC,SAAA,CACAC,SAAA,OACAC,KAAA,SAEAt/C,KAAAwB,QAAAy9C,SAAAj/C,KAAAwB,QAAAy9C,SAAA,MAGAj/C,KAAAwB,QAAA+9C,mBACAv/C,KAAAu/C,kBAAA,IAEAtL,aAAA,WAAA,IAAAuL,EAAAx/C,KACA,GAAA,EAAArC,EAAAC,KAAAoC,KAAAwB,QAAAg8C,YACA,GAAA,MAAAx9C,KAAAwB,QAAAgoC,QACA1tC,OAAA2jD,aAAAC,WAAA1/C,KAAAwB,QAAAg8C,YACA,EAAA7/C,EAAAC,KAAAoC,KAAAwB,QAAAgoC,UACA1tC,OAAA2jD,aAAAE,QAAA3/C,KAAAwB,QAAAg8C,WAAAx9C,KAAAwB,QAAAgoC,aAEA,CACA,IAAAA,EAAA1tC,OAAA2jD,aAAAG,QAAA5/C,KAAAwB,QAAAg8C,YACA,EAAA7/C,EAAAC,KAAA4rC,KACAxpC,KAAAwB,QAAAgoC,QAAAA,GAKA,IAAAqW,EAAA7/C,KAAAwB,QAAAs+C,aAAA9/C,KAAA8/C,YACAtW,EAAAxpC,KAAA+/C,aACA,MAAAvW,IACAxpC,KAAAwB,QAAAw+C,SAAA,CACAC,YAAAtiD,EAAAgC,KAAAK,KAAAkgD,iBAAAlgD,MACA69C,eAAA79C,KAAAwB,QAAAq8C,eAAA79C,KAAAwB,QAAAq8C,eAAA,MACAsC,QAAA,SAAAC,GAAA,IAAAC,EAAAC,EACA,GAAA,mBAAAT,EACA,OAAAA,EAAAO,EAAA5W,GAGA,IAAA+W,EAAAf,EAAAgB,mBACA,GAAA,MAAAD,EACA,OAAA,KAIA,IAAAE,EAAAjlD,IAAAC,QAAAqW,cAAA4uC,eAAAN,EAAA,QAAAC,EAAA,QAAAC,EAAAC,EAAA3B,OAAAx+C,YAAA,IAAAkgD,EAAAA,EAAAC,EAAA3B,OAAA+B,kBAAA,IAAAN,EAAAA,EAAAE,EAAA3B,OAAAlR,WACA,MAAA,mBAAA6S,EAAA3B,OAAAtgC,MACAiiC,EAAA3B,OAAAtgC,MAAA8hC,EAAA5W,GACA,mBAAA+W,EAAA3B,OAAA7S,OACAwU,EAAA3B,OAAA7S,OAAA0U,EAAA,UAAAL,GAGAK,MAAAA,EAAAA,EAAA,OAKAzM,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGAo/C,sBAAA,WACA,OAAA,MAAA5gD,KAAAwB,QAAAq/C,mBAAA7gD,KAAAwB,QAAAq/C,mBAAA,MAEAC,mBAAA,WACA,OAAA,MAAA9gD,KAAAwB,QAAAu/C,gBAAA/gD,KAAAwB,QAAAu/C,gBAAA,MAEAxM,YAAA,WACAv0C,KAAAghD,eAEA,IAAA1R,EAAAtvC,KACAihD,GAAA,EACA3R,EAAA5xC,IAAAye,IAAA,YACAmzB,EAAA5xC,IAAAob,GAAA,YAAA,eAAA,WACAmoC,GAAA,IAGA3R,EAAA5xC,IAAAob,GAAA,QAAA,eAAA,SAAAzb,GACA,IAAA+iD,EAAA9Q,EAAA4R,OAAA/jD,EAAA6C,OACAogD,GACAa,GACA3R,EAAA0N,WAAAoD,KAIA9Q,EAAA5xC,IAAAob,GAAA,oBAAA,eAAA,SAAAzb,GACA,IAAA+iD,EAAA9Q,EAAA4R,OAAA/jD,EAAA6C,OACAuZ,EAAApc,EAAAE,EAAAmc,QAEA,EAAA7b,EAAAC,KAAA0xC,EAAA9tC,QAAA88C,iBAAA/kC,EAAA4nC,GAAA7R,EAAA9tC,QAAA88C,iBAIA8B,IACA/iD,EAAA43C,kBACAgM,GACA3R,EAAA2N,iBAAAmD,MAMA9Q,EAAA5xC,IAAAob,GAAA,UAAA,WACAw2B,EAAA9tC,QAAA08C,kBACA5O,EAAA8R,qBAEA9R,EAAA6N,gBASAn9C,KAAAqhD,kBAEA,IAAAC,EAAAthD,KAAA8gD,qBACA,EAAAnjD,EAAAC,KAAA0jD,IACAthD,KAAAuhD,aAAAD,GAGA,IAAAE,EAAAxhD,KAAA4gD,wBACA,MAAAY,GAAA,EAAA7jD,EAAAC,KAAA4jD,EAAAC,UACAzhD,KAAA0hD,eAAAF,IAGAJ,mBAAA,WACAphD,KAAA7C,EAAA,qBAAAZ,SACAyD,KAAA7C,EAAA,wBAAAuvC,QAAA,iGAEA1sC,KAAA2hD,iBAAA,IAAAnmD,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,gBACA2kD,cAAA,EACAC,aAAA/hD,KAAAgiD,UAAA5G,OACA6G,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAgiD,UAAA5G,KAAA97C,GAAA4iD,KAAA,SACAliD,QAKA,IAFA,IAAAwB,EAAA,GACAu5C,EAAA/6C,KAAAgiD,UAAA5G,KAAA+G,OAAApH,MACAx1C,EAAA,EAAAA,EAAAw1C,EAAAx1C,IACA/D,GAAA,kBAAA+D,EAAA,WAAAA,EAAA,GAAA,YAEAvF,KAAA2hD,iBAAAjkD,IAAA+D,KAAAD,GACAxB,KAAA2hD,iBAAAS,UACApiD,KAAAgiD,UAAAlpC,GAAA,OAAAnb,EAAAgC,KAAA,WACAK,KAAA2hD,iBAAAU,SAAAriD,KAAAgiD,UAAA5G,SACAp7C,QAEAm9C,YAAA,WAGAn9C,KAAAwB,QAAA+8C,mBACAv+C,KAAAtC,IAAAma,KAAA,SAAAvX,KAAA,QAAA,yBAEA,mBAAAN,KAAAwB,QAAA27C,aACAn9C,KAAAwB,QAAA27C,YAAAn9C,KAAAgiD,YAKAhF,WAAA,SAAAoD,GACA,mBAAApgD,KAAAwB,QAAAw7C,YACAh9C,KAAAwB,QAAAw7C,WAAAoD,IAGAnD,iBAAA,SAAAmD,GACA,mBAAApgD,KAAAwB,QAAAy7C,kBACAj9C,KAAAwB,QAAAy7C,iBAAAmD,IAGAkC,kBAAA,WACA,mBAAAtiD,KAAAwB,QAAA8gD,mBACAtiD,KAAAwB,QAAA8gD,kBAAAtiD,KAAAA,KAAA7C,EAAA,gBAGAolD,sBAAA,aAGAzF,WAAA,WACA,MAAA,mBAAA98C,KAAAwB,QAAAs7C,WAAA98C,KAAAwB,QAAAs7C,aAAA98C,KAAAwB,QAAAs7C,YAEAkE,aAAA,WACAhhD,KAAAwB,QAAAo7C,cACA58C,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAArtB,OAAAhmB,KAAA7C,EAAA,cAAA6C,KAAA88C,aAAAn/C,EAAAgC,KAAA,WACAK,KAAA4zC,iBACA5zC,KAAAsiD,qBACAtiD,QAGAwiD,WAAA,WACA,GAAA,MAAAxiD,KAAAgiD,UAAA,CACA,IAAA5G,EAAAp7C,KAAAgiD,UAAA5G,OACAp7C,KAAAwB,QAAAihD,aAAA,MAAArH,EAAAA,EAAAp7C,KAAAwB,QAAA87C,WAAA,KAEA,GAAAt9C,KAAAwB,QAAAkhD,iBAAA,YAAA1iD,KAAAwB,QAAAkhD,gBAAAC,aACA,GAAA3iD,KAAAwB,QAAAkhD,gBAAAV,UAAA,CACA,IAAA5G,EAAAp7C,KAAAwB,QAAAkhD,gBAAAV,UAAAA,UAAA5G,OACAp7C,KAAAwB,QAAAkhD,gBAAAV,UAAAxgD,QAAAihD,aAAA,MAAArH,EAAAA,EAAAp7C,KAAAwB,QAAAkhD,gBAAAV,UAAAxgD,QAAA87C,WAAA,KACAt9C,KAAAwB,QAAAkhD,gBAAAV,UAAAxgD,QAAAkhD,gBAAAV,UAAAjW,eAGA/rC,KAAA+rC,UAGA6W,qBAAA,WACA,MAAA5iD,KAAAgiD,WAAA,MAAAhiD,KAAAgiD,UAAAa,YAAA,mBAAA7iD,KAAAgiD,UAAAa,WAAAC,SACA9iD,KAAAgiD,UAAAa,WAAAC,WAGAC,oBAAA,WACA,MAAA/iD,KAAAgiD,WAAA,MAAAhiD,KAAAgiD,UAAAa,YAAA,mBAAA7iD,KAAAgiD,UAAAa,WAAAG,QACAhjD,KAAAgiD,UAAAa,WAAAG,UAGA3B,gBAAA,WAAA,IAAA4B,EAAAjjD,KACAA,KAAAwB,QAAA0hD,gBAAA,GAEAljD,KAAAuiD,wBAEAviD,KAAAgiD,WACAhiD,KAAAgiD,UAAAmB,UAEA,MAAAnjD,KAAAwB,QAAAu7C,kBACA/8C,KAAAwB,QAAA7D,EAAAsC,OAAAD,KAAAwB,QAAA,CACAvC,KAAAtB,EAAAgC,KAAAK,KAAAojD,QAAApjD,MACAm/C,YAAA,EACAkE,YAAA,KAIA,MAAArjD,KAAAwB,QAAAs9C,SAAA,mBAAA9+C,KAAAsjD,aACAtjD,KAAAwB,QAAAs9C,QAAA9+C,KAAAsjD,cAGAtjD,KAAAujD,WAAA,GACA5lD,EAAAuhB,KAAAlf,KAAAwB,QAAAs9C,QAAA,SAAAF,EAAAr7C,GACA,EAAA5F,EAAAC,KAAAghD,EAAAr9C,SACAvB,KAAAujD,WAAA3E,EAAAr9C,MAAAqB,eAAAW,IAEAvD,MAEA,IAAAwjD,EAAAxjD,KAAAwB,QAAA+7C,MAQA,GAPAv9C,KAAAyjD,WAAAzjD,KAAA7C,EAAA,OAAA6C,KAAAwB,QAAAu1C,MAEA,IAAA/2C,KAAAwB,QAAA87C,aACAt9C,KAAAwB,QAAA67C,QAAA,GAGAr9C,KAAAtC,IAAAye,IAAA,YACA,EAAAxe,EAAAC,KAAAoC,KAAAwB,QAAAu8C,aAAA,CACA,IAAAzO,EAAAtvC,KACA0jD,EAAAloD,IAAAC,QAAA0qB,cAAAC,UAAAkpB,EAAA9tC,QAAAu8C,aACA,GAAA,EAAApgD,EAAAC,KAAA8lD,KACApU,EAAA9tC,QAAAmiD,MAAAC,KAAAv3C,MAAAq3C,GAEA,EAAApU,EAAA9tC,QAAAmiD,MAAAjnD,QAAA,CACA,IAAAmnD,EAAAvU,EAAA9tC,QAAAmiD,MAAA,GACAhmD,EAAA+C,QAAAmjD,KACAvU,EAAA9tC,QAAAmiD,MAAA,CAAArU,EAAA9tC,QAAAmiD,QAKArU,EAAA5xC,IAAAob,GAAA,WAAAnb,EAAAgC,KAAA,SAAAtC,EAAAymD,EAAAC,GACA,IAAAC,EAAA,GACArmD,EAAAuhB,KAAA6kC,EAAA,SAAAJ,GACAK,EAAA5lC,KAAA,CAAAulC,EAAAM,IAAAN,EAAAO,QAEA1oD,IAAAC,QAAA0qB,cAAAK,UAAA8oB,EAAA9tC,QAAAu8C,YAAA6F,KAAAO,UAAAH,KACAhkD,OAIA,GADAA,KAAAtC,IAAAye,IAAA,aACA,EAAAxe,EAAAC,KAAAoC,KAAAwB,QAAAy8C,kBAAA,CACA,IAAA3O,EAAAtvC,KACA0jD,EAAAloD,IAAAC,QAAA0qB,cAAAC,UAAAkpB,EAAA9tC,QAAAy8C,kBACA,EAAAtgD,EAAAC,KAAA8lD,KACApU,EAAA9tC,QAAA87C,WAAA/6C,SAAAmhD,IAGApU,EAAA5xC,IAAAob,GAAA,YAAAnb,EAAAgC,KAAA,SAAAtC,EAAAymD,EAAAC,GACAvoD,IAAAC,QAAA0qB,cAAAK,UAAA8oB,EAAA9tC,QAAAy8C,iBAAA8F,IACA/jD,OAGA,GAAAA,KAAAwB,QAAA48C,UACA,GAAA,mBAAAp+C,KAAAwB,QAAA4iD,OACApkD,KAAAyjD,WAAA3iD,OAAAd,KAAAwB,QAAA4iD,OAAApkD,WACA,CACA,IAAAqkD,EAAA,GACA1mD,EAAAuhB,KAAA,mBAAAlf,KAAAwB,QAAAs9C,QAAA9+C,KAAAwB,QAAAs9C,UAAA9+C,KAAAwB,QAAAs9C,QAAA,SAAAF,GACA,IAAA,IAAAA,EAAA0F,QAAA,CAAA,IAAAC,EACAN,EAAA,GACA,mBAAArF,EAAA4F,eACAP,EAAArF,EAAA4F,aAAAvB,EAAAzhD,QAAApB,OAEAikD,GAAA,QAAA,QAAAE,EAAAN,SAAA,IAAAM,EAAAA,EAAA,IAAA,WAGAvkD,KAAAyjD,WAAA3iD,OAAA,cAAAujD,EAAA,iBAGA,IASA/jD,EATAgvC,EAAAtvC,KACAykD,EAAAzkD,KAAA0kD,gBACAnE,EAAAvgD,KAAAwgD,mBACA,GAAA,MAAAD,IACAvgD,KAAAwB,QAAAmjD,WAAA,CAAA,CAAApE,EAAAh9C,MAAA,QAIA,MAAAg9C,EAAA3B,QAAA2B,EAAA3B,OAAAgG,cAAA,EAAAjnD,EAAAC,KAAA6mD,KAGAnkD,EADAigD,EAAA3B,OAAAlR,UACA6S,EAAA3B,OAAAlR,UACA/sC,QAAA4/C,EAAA3B,OAAA+B,YACAJ,EAAA3B,OAAA+B,WAEA,KAEA,EAAAhjD,EAAAC,KAAA0C,KAAA,CACA,IAAAukD,EAAA,GACAlnD,EAAAuhB,KAAAulC,EAAA,SAAAK,GACA,IAAAC,EAAA,mBAAAxE,EAAA3B,OAAA+B,WAAAJ,EAAA3B,OAAA+B,WAAAmE,GAAAA,EAAAxkD,GACA,EAAA3C,EAAAC,KAAAmnD,GACApnD,EAAAuhB,KAAA6lC,EAAA,SAAAC,GACA,GAAA,mBAAAF,EAAA5V,MAAA,CACA,IAAA+V,EAAAH,EAAA5V,QACA+V,EAAA7X,IAAA9sC,EAAA,CAAA0kD,IACAH,EAAAzmC,KAAA6mC,OACA,CACA,IAAAA,EAAAtnD,EAAAuxC,MAAA8V,GACAC,EAAA3kD,GAAA,CAAA0kD,GACAH,EAAAzmC,KAAA6mC,MAIAJ,EAAAzmC,KAAA0mC,KAGAL,EAAAI,EAKA7kD,KAAAgiD,UAAAhiD,KAAAyjD,WAAAlH,UAAA5+C,EAAAupB,SACA,CACA9mB,KAAAqkD,EACAS,YAAA,CACAl/B,OAAAhmB,KAAAwB,QAAAo8C,YAAA,MAAA59C,KAAAwB,QAAA2jD,gBACAf,OAAApkD,KAAAwB,QAAAo8C,YAAA59C,KAAAwB,QAAA48C,WAEAgH,aAAA,SAAAtB,EAAAuB,GAIA,mBAAA/V,EAAA9tC,QAAA4jD,cACA9V,EAAA9tC,QAAA4jD,aAAAr6C,KAAA/K,KAAA8jD,EAAAuB,IAGAC,WAAA3nD,EAAAgC,KAAAK,KAAAslD,WAAAtlD,MACAu9C,MAAA,SAAA3yB,GACA,IAAA9tB,EAAA8tB,EAAA44B,GACA,MAAA,iBAAA1mD,EAAAA,EAAAgO,WAAAhO,IAEAkD,KAAAwB,UAEAxB,KAAAulD,oBAEAvlD,KAAAwB,QAAA28C,oBACAn+C,KAAAwlD,wBAGAxlD,KAAAyjD,WAAA3qC,GAAA,UAAA,WACAw2B,EAAA9tC,QAAAikD,YAAA,IAGA,MAAAzlD,KAAAwB,QAAAu7C,iBACA/8C,KAAAyjD,WAAA3qC,GAAA,qBAAAnb,EAAAgC,KAAA,WACAK,KAAAu/C,kBAAA,GACAv/C,OAGA,IAAA0lD,EAAA1lD,KAAA7C,EAAA,sBACA,GAAA,EAAAQ,EAAAC,KAAA8nD,GAAA,CACAA,EAAAxrC,SAAA,mBACA,IAAAyrC,EAAAD,EAAA7tC,KAAA,UACA8tC,EAAAzrC,SAAA,eACA,IAAA1e,IAAAomD,OAAAC,aAAA,CACApN,GAAAkR,EACA7D,cAAA,EACAC,aAAA/hD,KAAAwB,QAAA87C,WACA2E,SAAAtkD,EAAAgC,KAAA,SAAAL,GACA,mBAAAU,KAAAwB,QAAAs8C,kBACA99C,KAAAwB,QAAAs8C,iBAAAx+C,IAEAU,QAIAA,KAAA4lD,SAAA5lD,KAAA7C,EAAA,OAAA6C,KAAAwB,QAAAu1C,KAAA,YACA/2C,KAAA6lD,cAEA7lD,KAAAwB,QAAAm7C,gBACA38C,KAAA4lD,SAAA/tC,KAAA,mBAAAiuC,QAAA5rC,SAAA,aAGA,EAAAvc,EAAAC,KAAAoC,KAAAwB,QAAAmjD,aACAhnD,EAAAuhB,KAAAlf,KAAAwB,QAAAmjD,WAAA,SAAA9kC,GACA7f,KAAAyjD,WAAA5rC,KAAA,sCAAAgI,EAAA,GAAA/U,WAAA,MAAAoP,SAAA,+BACAla,MAGA,IAAA+lD,EAAA,MAAA/lD,KAAAwB,QAAAsiD,SACAkC,EAAAhmD,KAAAwB,QAAAsiD,oBAAArkC,SAAAC,MACA1f,KAAAtC,IAAAob,GAAA,WAAAnb,EAAAgC,KAAA,SAAAtC,EAAAymD,EAAAC,GACA,GAAA/jD,KAAAyjD,WAAAnjD,KAAA,QAAAnD,EAAAE,EAAAmc,QAAAlZ,KAAA,MAKA,GADAjD,EAAA43C,kBACA8Q,EAAA,CACA,IAAAE,EACAC,EACApH,EAAA9+C,KAAAwB,QAAAs9C,QAGAoH,EAFAF,GACAC,EAAAjmD,KAAAwB,QAAAsiD,SAAA5jC,IAAA,WACAlgB,KAAAwB,QAAAsiD,SAAA5jC,IAAA,oBAEA+lC,EAAAjmD,KAAAwB,QAAAsiD,SAAAqC,QACAnmD,KAAAwB,QAAAsiD,SAAAsC,gBAGAzoD,EAAAuhB,KAAA4/B,EAAAnhD,EAAAgC,KAAA,SAAAi/C,EAAAr7C,GACAq7C,EAAA+B,aAAAsF,GACA1iD,GACAvD,OAEA,IAAAqmD,EAAAL,EAAAjC,EAAAA,EAAArnD,OAAA,GAAAqnD,EAAA,GACAuC,EAAAxH,EAAAuH,EAAAE,KACAJ,EAAA,MAAAG,EAAA3F,WAAA2F,EAAA3F,WAAA2F,EAAAlmD,KACAgmD,EAAA,QAAAC,EAAAnC,IACA+B,IAAAE,GAAAD,IAAAE,IACAJ,GACAhmD,KAAAwB,QAAAsiD,SAAA1W,IAAA,UAAA+Y,GACAnmD,KAAAwB,QAAAsiD,SAAA1W,IAAA,iBAAAgZ,GACApmD,KAAAwB,QAAAsiD,SAAA7W,eACAjtC,KAAAwB,QAAAsiD,SAAAnT,SAGA3wC,KAAAwB,QAAAsiD,SAAAqC,QAAAA,EACAnmD,KAAAwB,QAAAsiD,SAAAsC,eAAAA,GAEApmD,KAAAwmD,uBAGAxmD,KAAAwmD,eAAAzC,IAEA/jD,OAEA,MAAAA,KAAAwB,QAAAqhD,aACA7iD,KAAAtC,IAAAye,IAAA,qBACAnc,KAAAtC,IAAAob,GAAA,oBAAAnb,EAAAgC,KAAA,SAAAtC,EAAAymD,EAAAC,GAEA,GADA1mD,EAAA43C,kBACA8O,EAAA0C,OAAA,IAAAzmD,KAAAwB,QAAAqhD,WAAA6D,SAAA,CACA,IACAC,EACAC,EAFA9H,EAAA9+C,KAAAwB,QAAAs9C,QAcA,GATA8H,EAFA,WAAAjmD,QAAAX,KAAAwB,QAAAqhD,aACA8D,EAAA,EAAA3mD,KAAAwB,QAAAqhD,WAAAgE,iBAAA7mD,KAAAwB,QAAAqhD,WAAAgE,iBAAA,EACA,EAAA7mD,KAAAwB,QAAAqhD,WAAAiE,kBAAA9mD,KAAAwB,QAAAqhD,WAAAiE,kBAAA,GAEAH,EAAA,EAGAhpD,EAAAuhB,KAAA4/B,EAAA,SAAAmF,EAAA1gD,GACA,IAAAwjD,EAAA,MAAA9C,EAAA+C,KAAA/C,EAAA+C,KAAAzjD,EACA0gD,EAAA+C,KAAAjD,EAAAkD,QAAAF,KAEA,MAAA/mD,KAAAwB,QAAAsiD,SAAA,CACA,IAAAoD,EAAAvpD,EAAAshB,IAAAthB,EAAAwpD,OAAAxpD,EAAA2uC,OAAAwS,EAAA,SAAAF,GACA,IAAAwI,EAAAxI,EAAAoI,KAAA,EACA,OAAAL,EAAAS,GAAAA,GAAAzpD,EAAAC,KAAAkhD,GAAA8H,IACA,SAAAhI,GACA,OAAAA,EAAAoI,OACA,SAAApI,GACA,OAAAA,EAAA+B,aAEAqF,GACAhmD,KAAAwB,QAAAsiD,SAAA1W,IAAA,UAAA8Z,GACAlnD,KAAAwB,QAAAsiD,SAAAnT,QAEA3wC,KAAAwB,QAAAsiD,SAAAhF,QAAAoI,EAEAlnD,KAAAqnD,mBAAAH,GAGAlnD,KAAAqnD,mBAAA1pD,EAAAwpD,OAAArI,EAAA,SAAAF,GACA,OAAAA,EAAAoI,UAGAhnD,QAGA,EAAArC,EAAAC,KAAAoC,KAAAwB,QAAA88C,kBACAt+C,KAAAtC,IAAAye,IAAA,QAAAnc,KAAAwB,QAAA88C,gBACAt+C,KAAAtC,IAAAob,GAAA,QAAA9Y,KAAAwB,QAAA88C,eAAA3gD,EAAAgC,KAAAK,KAAAsnD,eAAAtnD,OAEAA,KAAAtC,IAAAye,IAAA,QAAA,oBACAnc,KAAAtC,IAAAob,GAAA,QAAA,mBAAAnb,EAAAgC,KAAAK,KAAAunD,mBAAAvnD,QAiBAA,KAAAwnD,wBACAxnD,KAAAynD,wBAEAjC,sBAAA,WACA,IAAAlW,EAAAtvC,KACA0nD,EAAApY,EAAAmU,WAAAj1B,QAGA,GAAA,MAAAxuB,KAAAwB,QAAAqhD,YAAA7iD,KAAAwB,QAAA28C,mBAAA,CACA,IAAA2F,EAAAxU,EAAA0S,UAAA8B,WAAA,GACA,GAAA,MAAAA,EACA,OAGA,IAAA6D,EAAA7D,EAAA8D,YACAC,EAAA1qD,EAAA2qD,GAAA9F,UAAA+F,WAAA1mD,UAAA2mD,aAEAhoD,KAAAyjD,WAAA5rC,KAAA,YAAAsE,IAAA,8CACAnc,KAAAyjD,WAAA5rC,KAAA,YAAAiB,GAAA,6CAAA,SAAAzb,GACAA,EAAA4qD,MAAA9qD,EAAA6C,MAAAiF,SAAAhH,KAEAd,EAAA6C,MAAAkoD,aAAA,EACA5Y,EAAA9tC,QAAAikD,YAAA,GAEAnW,EAAA9tC,QAAAikD,YAAA,EACAoC,EAAA98C,KAAA48C,EAAAtqD,EAAA2C,SAKAsvC,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAswC,UAAA,CACAC,QAAA,IACA18C,MAAA,SAAA28C,EAAAnnD,GACAouC,EAAA9tC,QAAAikD,YAAA,EAEAnW,EAAAmU,WAAA5rC,KAAA,YAAAqH,KAAA,WACAlf,KAAAsoD,iBAAA,QAAAhZ,EAAAiZ,cAAA,CAAAC,SAAA,MAEAlZ,EAAAmU,WAAA3qC,GAAA,wBAAAw2B,EAAAiZ,eAEAjZ,EAAAmZ,aAAA,GACAnZ,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAqH,KAAA,WACA,IAAAsP,EAAArxB,EAAA6C,MAAAwuB,QACA8gB,EAAAmZ,aAAArqC,KAAAoQ,GACArxB,EAAA6C,MAAAnC,IAAA,QAAA2wB,EAAA,QAGA8gB,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAqH,KAAA,WACA/hB,EAAA6C,MAAA6X,KAAA,MAAAqH,KAAA,SAAAviB,GACAQ,EAAA6C,MAAAnC,IAAA,QAAAyxC,EAAAmZ,aAAA9rD,GAAA,UAIA2yC,EAAAmU,WAAA5lD,IAAA,QAAA6pD,EAAA,OAEAgB,OAAA,SAAAL,EAAAnnD,GACA,IAAAynD,EAAAxrD,EAAA6C,MAAAuD,QACAqlD,EAAA1nD,EAAAtD,KAAA4wB,MACAq6B,EAAA1rD,EAAA6C,MACA8oD,EAAAxZ,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAwC,GAAAsuC,EAAA,GAEA,GAAAG,EAAApsD,OAAA,CACA,IAAAqsD,EAAAF,EAAAr6B,QAAAs6B,EAAAt6B,QACAw6B,EAAAD,EAAAH,EAzDA,GA2DAI,GACAH,EAAAhrD,IAAA,QAAA+qD,EAAA,MACAE,EAAAjrD,IAAA,QAAAmrD,EAAA,MAEA1Z,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAqH,KAAA,WACA/hB,EAAA6C,MAAA6X,KAAA,MAAAwC,GAAAsuC,GAAA9qD,IAAA,QAAA+qD,EAAA,MACAzrD,EAAA6C,MAAA6X,KAAA,MAAAwC,GAAAsuC,EAAA,GAAA9qD,IAAA,QAAAmrD,EAAA,UAGAH,EAAAhrD,IAAA,QAAAkrD,EApEA,GAoEA,MACAD,EAAAjrD,IAAA,QAAAorD,QAEA3Z,EAAAmU,WAAA5rC,KAAA,SAAAiuC,QAAAjuC,KAAA,MAAAqH,KAAA,WACA/hB,EAAA6C,MAAA6X,KAAA,MAAAwC,GAAAsuC,GAAA9qD,IAAA,QAAAkrD,EAxEA,GAwEA,MACA5rD,EAAA6C,MAAA6X,KAAA,MAAAwC,GAAAsuC,EAAA,GAAA9qD,IAAA,QAAAorD,aAKAC,KAAA,SAAAb,EAAAnnD,GACAouC,EAAA6Z,mBAEA7Z,EAAAmU,WAAA5rC,KAAA,YAAAqH,KAAA,WACAlf,KAAAopD,oBAAA,QAAA9Z,EAAAiZ,cAAA,CAAAC,SAAA,MAEAlZ,EAAAmU,WAAAtnC,IAAA,yBAEAmzB,EAAA9tC,QAAAikD,YAAA,MAIA4D,gBAAA,SAAAC,GAIA,IAAA1D,EAAA5lD,KAAA4lD,SACA2D,EAAAvpD,KAAAyjD,WAEA,GAAAmC,GAAA2D,EAAA,CAKA,IAAAC,EAAA,EAAA5D,EAAAlrC,QAAA,SAAAhe,OAGA6sD,EAAArB,aAAAtC,EAAAp3B,UAAAg7B,EACA5D,EAAA/nD,IAAA,aAAA,QAEA+nD,EAAA/nD,IAAA,aAAA,aAGA0qD,cAAA,SAAAlrD,GACAA,EAAAC,iBACAD,EAAA43C,kBACA53C,EAAAosD,4BAEAN,iBAAA,WACA,IAAAV,EAAA,GACAnZ,EAAAtvC,KACAA,KAAAyjD,WAAA5rC,KAAA,YAAAqH,KAAA,WACA,IAAAwqC,EAAAvsD,EAAA6C,MAAAwuB,QAAA8gB,EAAAmU,WAAAj1B,QAAA,IACAi6B,EAAArqC,KAAAsrC,KAGAluD,IAAAC,QAAA0qB,cAAAK,UAAAxmB,KAAAwB,QAAAw8C,kBAAA4F,KAAAO,UAAAsE,KAEAlD,kBAAA,WACA,GAAA,MAAAvlD,KAAAwB,QAAAw8C,kBAAA,CAIA,IAAA0F,EAAAloD,IAAAC,QAAA0qB,cAAAC,UAAApmB,KAAAwB,QAAAw8C,mBAEA0F,IAIAA,EAAAE,KAAAv3C,MAAAq3C,KAEAA,EAAAhnD,SAAAsD,KAAAyjD,WAAA5rC,KAAA,YAAAnb,SACAsD,KAAAyjD,WAAA5rC,KAAA,YAAAqH,KAAA,SAAAviB,GACAQ,EAAA6C,MAAAnC,IAAA,QAAA6lD,EAAA/mD,GAAA,OAEAqD,KAAAyjD,WAAA5rC,KAAA,YAAAqH,KAAA,WACA/hB,EAAA6C,MAAA6X,KAAA,MAAAqH,KAAA,SAAAviB,GACAQ,EAAA6C,MAAAnC,IAAA,QAAA6lD,EAAA/mD,GAAA,YAKAm4C,aAAA,WACA33C,EAAArB,QAAAqgB,IAAA,UAAAnc,KAAAwB,QAAAu1C,OAEA4S,UAAA,GACAvG,QAAA,SAAAhjD,EAAAyY,GACA,IAAA+wC,EAAA,EACAC,EAAAzpD,EAAA1D,OACA,GAAA,MAAA0D,EAAAsL,MACAk+C,EAAAxpD,EAAAsL,MAAAm+C,EAAA,OACA,GAAA,MAAA7pD,KAAAgiD,UAAA,CACA,IAAA8H,EAAA9pD,KAAAgiD,UAAA5G,KAAA+G,OACAyH,EAAAE,EAAA1O,KAAA,EAOA,GALAp7C,KAAAu/C,mBACAv/C,KAAAu/C,kBAAA,EACAv/C,KAAA2pD,UAAA,IAGA,MAAA3pD,KAAA2pD,UAAAC,EAAA,GAAA,CACA,IAAA5F,EAAA,GACArmD,EAAAuhB,KAAA9e,EAAAujD,MAAA,SAAAA,GACA,IAAAoG,EAAA3pD,EAAA0+C,QAAA6E,EAAA/E,QAAAx+C,KACA,EAAAzC,EAAAC,KAAAmsD,KAAA,IAAAA,EAAA/nD,QAAA,iBACA+nD,EAAAA,EAAAA,EAAAvnD,OAAAunD,EAAA/nD,QAAA,KAAA,IAEAgiD,EAAA5lC,KAAA,CACArhB,KAAAgtD,EACAC,UAAArG,EAAAO,QAGA,IAAA+F,EAAAjqD,KAAA2pD,UACA3pD,KAAAwB,QAAAu7C,gBAAA6M,EAAAC,EAAA7F,EAAArmD,EAAAgC,KAAA,SAAAuqD,EAAAC,GAEA,IAAAP,IACA5pD,KAAAoqD,UAAAD,GAEAF,EAAAL,EAAA,GAAA,CACAS,aAAArqD,KAAAoqD,UACAE,gBAAAtqD,KAAAoqD,UACAhqD,KAAA8pD,GAEArxC,EAAAoxC,EAAAL,EAAA,MACA5pD,WAEA6Y,EAAA7Y,KAAA2pD,UAAAC,EAAA,KAGAnC,qBAAA,WACA,mBAAAznD,KAAAwB,QAAAimD,sBACAznD,KAAAwB,QAAAimD,qBAAAznD,KAAAgiD,YAGAsB,WAAA,WACA,OAAAtjD,KAAAwB,QAAAs9C,SAEA0H,eAAA,WACA,IAAA+D,EAAA,mBAAAvqD,KAAAwB,QAAAglD,iBACA+D,EAAAvqD,KAAAwB,SAAAglD,eAAA3nC,MAAA0rC,EAAAngD,YAGAi9C,mBAAA,WACA,IAAAmD,EAAA,mBAAAxqD,KAAAwB,QAAA6lD,qBACAmD,EAAAxqD,KAAAwB,SAAA6lD,mBAAAxoC,MAAA2rC,EAAApgD,YAGAk7C,WAAA,SAAAlF,EAAAhgD,GACA,mBAAAJ,KAAAwB,QAAA8jD,YACAtlD,KAAAwB,QAAA8jD,WAAAlF,EAAAhgD,IAGA8gD,OAAA,SAAA1iC,GACA,GAAAxe,KAAAgiD,UAAA,CACA,GAAA,WAAArhD,QAAA6d,IAAAA,EAAA,GAAA,CACA,IAAApS,EAAAjP,EAAAqhB,GACA,EAAApS,EAAA1P,SACA8hB,EAAApS,GAWA,OAPAoS,aAAArhB,GACAqhB,EAAA2iC,GAAA,QACA3iC,EAAAA,EAAA9D,QAAA,OAEA8D,EAAA,IAAAA,EAAAle,KAAA,OACA,iBAAAke,GAAA,iBAAAA,IACAA,EAAA,IAAAA,EAAA1T,YACA9K,KAAAgiD,UAAA5B,IAAA5hC,GAEA,OAAA,MAEAisC,OAAA,SAAAjsC,GACA,MAAAxe,KAAAgiD,YACA,UAAAxmD,IAAAC,QAAAqW,cAAAC,YAAAyM,GACAxe,KAAAgiD,UAAAkI,KAAAtX,IAAAp0B,GAAA0jC,MAAA,GAEAliD,KAAAgiD,UAAA5B,IAAAxN,IAAAp0B,GAAA0jC,MAAA,KAIAwI,WAAA,SAAAtK,GACA,mBAAAA,EAAA7jD,SACA6jD,EAAApgD,KAAAkhD,OAAAd,IAGApgD,KAAAgiD,UAAA5B,IAAAA,GAAAuK,aAAAzI,QAEA0I,UAAA,SAAAxqD,GACAJ,KAAAwB,QAAApB,KAAAA,EACAJ,KAAAgiD,UAAApT,QACA5uC,KAAAgiD,UAAAkI,KAAAtX,IAAA5yC,KAAA0kD,iBACA1kD,KAAArB,UAEAksD,UAAA,SAAAzK,GAAA,IAAA0K,IAAA,EAAA1gD,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GACA,mBAAAg2C,EAAA7jD,SACA6jD,EAAApgD,KAAAkhD,OAAAd,IAGAA,EAAA7jD,SACAuuD,GACA9qD,KAAAoiD,UAGA,mBAAApiD,KAAAwB,QAAA07C,cACAl9C,KAAAwB,QAAA07C,aAAAkD,IAGA2K,cAAA,WACA,MAAA/qD,KAAAgiD,WACAhiD,KAAAgiD,UAAApT,SAGA8V,cAAA,WACA,MAAA,mBAAA1kD,KAAAwB,QAAAkjD,cAAA1kD,KAAAwB,QAAAkjD,cAAA1kD,KAAAA,KAAAwB,QAAApB,MAAAJ,KAAAwB,QAAApB,MAEA4qD,UAAA,SAAA1qD,GACA,GAAA,MAAAN,KAAAirD,QACA,OAAA,KAEA,IAAApzC,EAAA7X,KAAAirD,QAAA3qD,GACA,OAAAuX,GAAA,MAEAqzC,UAAA,SAAA5qD,EAAAhB,GACA,MAAAU,KAAAirD,UACAjrD,KAAAirD,QAAA,IAEAjrD,KAAAirD,QAAA3qD,GAAAhB,EACAU,KAAAssC,UAEAA,OAAA,WACA,MAAAtsC,KAAAgiD,YACA,MAAAhiD,KAAAwB,QAAAu7C,iBACA/8C,KAAAu/C,kBAAA,EACAv/C,KAAAgiD,UAAAE,SAEAliD,KAAAgiD,UAAApT,QACA5uC,KAAAmrD,aAAAnrD,KAAA0kD,gBACA1kD,KAAAgiD,UAAAkI,KAAAtX,IAAA5yC,KAAAmrD,cACAnrD,KAAArB,YAIAysD,aAAA,WACAprD,KAAAirD,QAAA,KACAjrD,KAAAghD,eACAhhD,KAAAssC,UAEA+e,mBAAA,WACA,IAAAC,EAAAtrD,KAAAgiD,UAAAkI,KAAA,CAAA5d,OAAA,YAAAlsC,OACAwK,EAAA,GAIA,OAHAjN,EAAAuhB,KAAAosC,EAAA,SAAAC,GACA3gD,EAAAwT,KAAAmtC,KAEA3gD,GAEA4gD,YAAA,SAAAnuD,GACA,IAAAN,EAAAI,EAAAE,EAAAgc,eAAAjZ,KAAA,QACAJ,KAAAwB,QAAAm8C,gBAAA5gD,IAAAiD,KAAAwB,QAAAm8C,gBAAA5gD,GACAiD,KAAAgiD,UAAAE,QAEAuJ,sBAAA,SAAA3uD,GACA,IAAA8N,EAAAjN,EAAA+tD,UAAA1rD,KAAAwB,QAAAs9C,QAAA,SAAAmF,GACA,OAAAA,EAAAvW,YAAA5wC,GAAAmnD,EAAAtD,aAAA7jD,IAEA,OAAA,IAAA8N,EAAA,KAAAA,GAEA41C,iBAAA,WACA,IAAAmL,EAAA3rD,KAAAyrD,sBAAAzrD,KAAA+/C,cAEA,OADAkE,IAAA,MAAA0H,EAAA3rD,KAAAwB,QAAAs9C,QAAA6M,GAAA,KACA1H,IAAA,CACArF,OAAAqF,IACA1gD,MAAAooD,GACA,MAEA5L,WAAA,WACA,YAAA,IAAA//C,KAAAwB,QAAAgoC,QAAAxpC,KAAAwB,QAAAgoC,QAAA,MAEAoiB,WAAA,SAAApiB,GACAxpC,KAAAwB,QAAAgoC,QAAAA,EAEA,EAAA7rC,EAAAC,KAAAoC,KAAAwB,QAAAg8C,cACA1hD,OAAA2jD,aAAAC,WAAA1/C,KAAA6rD,kBACA,EAAAluD,EAAAC,KAAA4rC,IACA1tC,OAAA2jD,aAAAE,QAAA3/C,KAAAwB,QAAAg8C,WAAAhU,IAIAxpC,KAAA+rC,UAEAmU,iBAAA,SAAAgK,EAAA5rC,GACA,GAAA,MAAAA,EAAA,CAIA,IAAAwtC,IAAA9rD,KAAAwB,QAAAm8C,gBAAAr/B,GAEA4rC,EAAA6B,QAAA7sC,KAAA,SAAA3B,GACAA,EAAA0J,MAAAzmB,QAAAsrD,EAAA,OAAA,KAGA,IAAAE,EAAA,GACA,IAAA,IAAAhsD,KAAAwB,QAAAi8C,mBAAA,CACA,IAAAwO,EAAAH,EAAA,iBAAA,kBACAE,EAAA,oBAAAj+C,OAAAuQ,EAAA,2DAAAvQ,OAAAk+C,EAAA,iCAIA,OAAA9uD,EAAA,SACA2D,OAAA,gBAAAopD,EAAApL,UAAA,GAAApiD,OAAA,mDAAAsvD,EAAA,gDAAAhsD,KAAA09C,eAAAp/B,EAAA4rC,GAAA,qBAAA5pD,KAAA,YAAAge,GACA2tC,YAAA,YAAAH,KAEApO,eAAA,SAAAp/B,EAAA4rC,GACA,MAAA,mBAAAlqD,KAAAwB,QAAAk8C,eACA19C,KAAAwB,QAAAk8C,eAAAp/B,EAAA4rC,GAGA,sDAAA5rC,EAAA,KAAA4rC,EAAAgC,QAAA,YAEA9J,QAAA,WAAA,IAAArhD,EAAA,EAAAqJ,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA,MAAApK,KAAAgiD,YACAhiD,KAAAgiD,UAAAkI,OAAAS,WAAA5pD,GACAf,KAAAmsD,OAAAprD,GACAf,KAAAm9C,gBAGAgP,OAAA,WAAA,IAAAprD,EAAA,EAAAqJ,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACApK,KAAAgiD,UAAAlD,QAAAqN,SAAAjK,KAAAnhD,IAEAqrD,cAAA,WACA,IAAAC,EAAArsD,KAAA7C,EAAA,qBACA,OAAA,EAAAkvD,EAAA3vD,OAAA2vD,EAAAzqD,MAAA,IAEAjD,OAAA,SAAA2tD,GAKA,GAJAA,EAAAtsD,KAAAosD,gBAIA,MAAApsD,KAAAwB,QAAAu7C,gBACA/8C,KAAAusD,iBAAAD,IACA,MAAAtsD,KAAAwsD,eACAxb,aAAAhxC,KAAAwsD,eAEAxsD,KAAAwsD,cAAAtb,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAu/C,kBAAA,EACAv/C,KAAAgiD,UAAArjD,OAAA2tD,GAAApK,OACAliD,KAAA6lD,eACA7lD,MAAA,UAEA,CACA,IAAAysD,GAAA,EACA,IAAA,IAAAH,EAAAtqD,QAAA,KAAA,CACA,IAAA0qD,EAAAJ,EAAAx+C,MAAA,KACA,GAAA,EAAAnQ,EAAAC,KAAA8uD,GAAA,CACA,IAAAC,EAAAD,EAAA,GACAE,EAAAF,EAAA,GACAG,EAAA7sD,KAAAujD,WAAAoJ,EAAA/pD,eACA,MAAAiqD,IACAJ,GAAA,EACAzsD,KAAAgiD,UAAArjD,OAAA,IAAAigD,OAAAiO,GAAAluD,OAAAiuD,GAAA1K,SAIAuK,IACAzsD,KAAAgiD,UAAAlD,UAAAngD,OAAA,IACAqB,KAAAgiD,UAAArjD,OAAA2tD,GAAApK,QAKA,IAAAvkD,EAAAC,KAAA0uD,IAAA,IAAA3uD,EAAAC,KAAAoC,KAAAmrD,eAAA,EAAAxtD,EAAAC,KAAAoC,KAAAwB,QAAApB,OACAJ,KAAA7C,EAAA,qBAAAsE,KAAAzB,KAAAwB,QAAAy9C,SAAA6N,aAEA9sD,KAAAwnD,wBACAxnD,KAAA6lD,cAEA7lD,KAAAusD,eAAAD,GAEAzG,YAAA,aAGAnE,eAAA,SAAAqL,GACA/sD,KAAAwB,QAAAq/C,mBAAAkM,EACA/sD,KAAAgtD,YAAA,IAAAxxD,IAAAyxD,MAAAC,YAAAvvD,EAAAupB,SAAAlnB,KAAAwB,QAAAq/C,mBAAA,CACApM,GAAAz0C,KAAA4lD,SACAuH,SAAA,yBACAC,iBAAA,EACAC,wBAAA,EACAC,iBAAA3vD,EAAAgC,KAAA,SAAAi1C,GACA,OAAA50C,KAAAkhD,OAAAtM,IACA50C,MACAutD,OAAA5vD,EAAAgC,KAAA,SAAAygD,GACAjjD,EAAAijD,EAAAoN,QAAAtzC,SAAA,gBACAla,MACAm2C,QAAAx4C,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,gBAAA6c,YAAA,gBACAha,UAGAuhD,aAAA,SAAA//C,GACA,IAAApB,EAAAJ,KAAAgiD,UAAA5hD,OACA,GAAA,IAAAzC,EAAAC,KAAAwC,GAAA,CAIA,IAAAkvC,EAAAtvC,KACAA,KAAAwB,QAAAu/C,gBAAAv/C,EAEAxB,KAAAwB,QAAAu/C,gBAAAyI,cACA,IAAAhuD,IAAAiyD,SAAAne,EAAA5xC,IAAAC,EAAAupB,SAAAlnB,KAAAwB,QAAAu/C,gBAAA,CACA3gD,KAAAA,EAAA,GAAAstD,WACAC,cAAA,YACAC,MAAA,kCACAC,YAAA,kCACAniD,MAAA,SAAA28C,EAAAnnD,GACA/D,EAAA6C,MAAA8tD,SAAA,qBAEAC,OAAA,SAAA1F,EAAAnnD,GACA,IAAA8Z,EAAA9Z,EAAA8Z,YACAgzC,EAAAhzC,EAAAizC,OACAC,EAAAlzC,EAAAskC,OACA6O,EAAAjtD,EAAAktD,OAEA,GAAAD,EAAAr2C,SAAA,aAAA,CACA,IAAA2G,EAAA0vC,EAAA/tD,KAAA,SACA,IAAA8tD,EAAAp2C,SAAA,eAAAo2C,EAAAp2C,SAAA,qBAAAo2C,EAAA9tD,KAAA,WAAAqe,EAEA,YADAzD,EAAA6/B,YAIA,GAAA,MAAAmT,EAAA5tD,KAAA,aAAA,IAAA4tD,EAAAtxD,OAEA,YADAse,EAAA6/B,OAKA7/B,EAAAy8B,QAEAyR,KAAA,SAAAb,EAAAnnD,GACA,IAEAmtD,EAFAF,EAAAjtD,EAAA4jD,KACArmC,EAAA0vC,EAAA/tD,KAAA,SAEA4tD,EAAAG,EAAAF,OAEA,GAAA,MAAAxvC,EAAA,CAEA,IAAAyvC,EAAAC,EAAA7O,OACA,IAAA4O,EAAAp2C,SAAA,eAAAo2C,EAAAp2C,SAAA,qBAAAo2C,EAAA9tD,KAAA,WAAAqe,EAEA,YADAthB,EAAA6C,MAAA8tD,SAAA,UAOA,GAAA,IAAArvC,GAAA,MAAAA,EACA,KAAAuvC,EAAAtxD,QAAA,CACA,IAAAsxD,EAAA5tD,KAAA,SAAA,CACAiuD,EAAAL,EAAA1tD,KAAA,MACA,MAEA0tD,EAAAA,EAAAC,YAGA,KAAAD,EAAAtxD,QAAA,CACA,GAAAsxD,EAAA5tD,KAAA,WAAAqe,EAAA,EAAA,CACA4vC,EAAAL,EAAA1tD,KAAA,MACA,MAEA0tD,EAAAA,EAAAC,OAIA,IAAAI,EAEA,YADAlxD,EAAA6C,MAAA8tD,SAAA,UAIAK,EAAA7tD,KAAA,iBAAA+tD,GAAAjuD,KAAA,YAAAiuD,GACA,IAKAvJ,EACAthD,EAHAtF,EAHAoxC,EAAAmU,WAAA5rC,KAAA,YAAAy0B,OAAA,WACA,OAAAnvC,EAAA6C,MAAAI,KAAA,eAAAiuD,IAAAlxD,EAAA6C,MAAA8X,SAAA,sBAEAvU,MAAA4qD,GAAA,EAeA,GAVAxwD,EAAAuhB,KAAA1d,EAAApB,KAAA,SAAAA,GACAA,EAAAkuD,MAAAH,EAAA7tD,KAAA,QACAwkD,EAAA1kD,GAGAA,EAAAkuD,MAAAD,IACA7qD,EAAApD,KAIA,MAAA0kD,GAAA,MAAAthD,GAAAtF,GAAA,EAEA,YADAf,EAAA6C,MAAA8tD,SAAA,UAIAxe,EAAAif,kBAAAzJ,EAAA5mD,EAAAsF,OACA,CACA,GAAA,MAAAwqD,EAAA5tD,KAAA,aAAA,IAAA4tD,EAAAtxD,OAEA,YADAS,EAAA6C,MAAA8tD,SAAA,UAIA,IAIA5vD,EAJAoxC,EAAAmU,WAAA5rC,KAAA,YAAAy0B,OAAA,WACA,OAAAnvC,EAAA6C,MAAAI,KAAA,eAGAmD,MAAA4qD,GAAA,EACArJ,EAAAnnD,EAAAka,KAAArW,EAAApB,KAAA,SAAAA,GAAA,OAAAA,EAAAkuD,MAAAH,EAAA7tD,KAAA,QAEA,GAAA,MAAAwkD,GAAA5mD,GAAA,EAEA,YADAf,EAAA6C,MAAA8tD,SAAA,UAIAxe,EAAAif,kBAAAzJ,EAAA5mD,EAAA,WAKA,IAAA1C,IAAAiyD,SAAAne,EAAAnyC,EAAA,SAAAQ,EAAAupB,SAAAlnB,KAAAwB,QAAAu/C,gBAAA,CACAyN,YAAA,WACApuD,KAAAA,EAAA,GAAAstD,WACAC,cAAA,YACAC,MAAA,cACAC,YAAA,cAGAniD,MAAA/N,EAAAgC,KAAA,SAAAirB,EAAAlC,GACA,IAAA+lC,EAAAnf,EAAAnyC,EAAA,SAAA,GAAAuxD,WACA/wD,EAAAuhB,KAAAwJ,EAAAo8B,KAAA,GAAA6J,SAAA,SAAAC,EAAArrD,GACApG,EAAAsxD,EAAAE,SAAAprD,IAAA,KACAqrD,EAAApgC,MAAArxB,EAAAsxD,EAAAE,SAAAprD,IAAA,GAAA0jB,MAAAuH,WAIA06B,KAAAvrD,EAAAgC,KAAA,SAAAirB,EAAAlC,GACA,IAAAmmC,EAAAnmC,EAAAo8B,KAAA,GAAAhoD,GACAgyD,EAAAttD,EAAApB,KAAA8f,IAAA2uC,GACA/E,EAAAxa,EAAA0S,UAAA5G,KAAA+G,OACA7S,EAAAnyC,EAAA,MAAAmvC,OAAA,eAAAptB,KAAA,SAAA3b,EAAA9B,GACA,IAAAstD,EAAAjF,EAAA1O,KAAA0O,EAAAptD,QAAA6G,EAAA,GACApG,EAAAsE,GAAA,GAAA3E,KACA+xD,GACAvf,EAAA0f,YAAAF,EAAAC,MAGA/uD,WAIAuuD,kBAAA,SAAAzJ,EAAAmK,EAAAC,GACA,mBAAAlvD,KAAAwB,QAAA+sD,mBACAvuD,KAAAwB,QAAA+sD,kBAAAzJ,EAAAmK,EAAAC,IAGAF,YAAA,SAAA5uD,EAAA+uD,GACA,MAAA/uD,GAAA,IAAAzC,EAAAC,KAAAoC,KAAAwB,QAAAu/C,gBAAA4M,iBAIAvtD,EAAAgtC,IAAAptC,KAAAwB,QAAAu/C,gBAAA4M,cAAAwB,IAEA,IAAAnvD,KAAAwB,QAAAu/C,gBAAAqO,YACAhvD,EAAAuwC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACA,MAAAK,KAAA0tD,YACA1tD,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,SAGAA,UAIAunD,mBAAA,SAAAlqD,GACA,IAAAiyC,EAAAtvC,KACAqvD,EAAA,IAAA1xD,EAAAC,KAAAoC,KAAAsvD,gBACAtvD,KAAAgiD,UAAAkI,OAAA11C,MAAA,WACA86B,EAAAigB,eAAAvvD,KAAAqvD,KAEArvD,KAAAwvD,uBAEAA,oBAAA,WACA,IAAAC,EAAAtyD,EAAA,oBACA,IAAAsyD,EAAA/yD,SAIA,EAAAiB,EAAAC,KAAAoC,KAAAsvD,gBAEAG,EAAAz1C,YAAA,kBAAAE,SAAA,mBAEAu1C,EAAAz1C,YAAA,mBAAAE,SAAA,oBAGAotC,eAAA,SAAAoI,EAAAC,GACA,IAAAp2C,EAAAo2C,EAAAxyD,EAAAwyD,EAAAxC,SAAAjD,MAAAryC,KAAA7X,KAAAwB,QAAA88C,gBAAAnhD,EAAAuyD,EAAAr2C,eAEAwV,GADAtV,EAAAnZ,KAAA,MACAmZ,EAAAmB,QAAA,OACA0lC,EAAApgD,KAAAkhD,OAAAryB,GACA7uB,KAAAuvD,eAAAnP,IAEAmP,eAAA,SAAAnP,GAAA,IAAA3I,EAAA,EAAArtC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAAwlD,EAAA,EAAAxlD,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA,MAAApK,KAAAsvD,iBACAtvD,KAAAsvD,eAAA,IAGA,IAAAzgC,EAAA1xB,EAAAijD,EAAAoN,QACA1I,EAAA1E,EAAAhgD,OACAtD,EAAAgoD,EAAA9kD,KAAAwB,QAAA+7C,OACAkS,EAAA5gC,EAAAhX,KAAA7X,KAAAwB,QAAA88C,gBACA7/B,EAAAoQ,EAAAzuB,KAAA,SACA,IAAA,IAAAq3C,IAAA2I,EAAAyP,MAAAC,WAAAjhC,EAAA/W,SAAA,UAAA9X,KAAAsvD,eAAAS,SAAAjzD,IAAA,CAEA,MAAAkD,KAAAwB,QAAA0hD,kBACAljD,KAAAwB,QAAA0hD,gBAAAvlD,EAAA2uC,OAAAtsC,KAAAwB,QAAA0hD,gBAAAvlD,EAAAgC,KAAA,SAAAqwD,GACA,OAAAA,EAAAxuD,QAAA6sD,WAAAvxD,GACAkD,QAGAogD,EAAAyP,MAAAhV,OACAhsB,EAAA7U,YAAA,SACAha,KAAAsvD,eAAAtvD,KAAAsvD,eAAAhjB,OAAA,SAAA2jB,GAAA,OAAAA,IAAAnzD,IACA2yD,EAAAz1C,YAAA,mBAAAE,SAAA,kBAEA,IAAAm0C,EAAAvJ,EAAA9kD,KAAAwB,QAAA+7C,OACA,GAAA,EAAA5/C,EAAAC,KAAAywD,GAAA,CACA,IAAA6B,EAAAlwD,KAAA7C,EAAA,gCAAAkxD,EAAA,2CAAAA,EAAA,2CAAAA,EAAA,MACA,EAAA1wD,EAAAC,KAAAsyD,IACAA,EAAA3zD,eAGA,IAAAk7C,IACAgY,EAAAz1C,YAAA,kBAAAE,SAAA,mBAEAla,KAAAmwD,gBAAA/P,EAAAtjD,EAAA2hB,EAAAA,EAAA,EAAA,GACAoQ,EAAA3U,SAAA,SACAla,KAAAsvD,eAAAlxC,KAAAthB,IAGA8yD,GACA5vD,KAAAowD,iBAAAhQ,GAEApgD,KAAAwvD,uBAEAY,iBAAA,SAAAhQ,GACA,mBAAApgD,KAAAwB,QAAA4uD,kBACApwD,KAAAwB,QAAA4uD,iBAAAhQ,IAGAoH,sBAAA,WACA,IAAA6I,EAAA,MAAArwD,KAAAsvD,gBAAAtvD,KAAAwB,QAAA6uD,UACA,GAAA,IAAA1yD,EAAAC,KAAAoC,KAAAsvD,iBAAAe,EAAA,CAGA,IAAA/gB,EAAAtvC,KACAA,KAAAgiD,UAAAkI,OAAA11C,MAAA,SAAA87C,EAAAC,EAAAC,GACA,IAEA1zD,EAFAkD,KACAI,OACAkvC,EAAA9tC,QAAA+7C,QACA8S,GAAA1yD,EAAA8yD,SAAAnhB,EAAAggB,eAAAxyD,KACAwyC,EAAAigB,eAJAvvD,MAIA,GAAA,OAIA0wD,eAAA,SAAAlgB,GACA,MAAA,mBAAAxwC,KAAAwB,QAAAkvD,eACA1wD,KAAAwB,QAAAkvD,eAAAlgB,GAEA,IAEAmgB,eAAA,SAAAngB,GACA,MAAA,mBAAAxwC,KAAAwB,QAAAmvD,eACA3wD,KAAAwB,QAAAmvD,eAAAngB,GAEA,IAEA2f,gBAAA,SAAA/P,EAAAiO,GAAA,IAAA5vC,EAAA,EAAArU,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,EACA,MAAApK,KAAAkwD,YACAlwD,KAAAkwD,UAAA,IAGAlwD,KAAAkwD,UAAAzxC,KACAze,KAAAkwD,UAAAzxC,GAAA,IAGA,IAAAmyC,EAAA5wD,KAAA6wD,gBAAAzQ,GACA,GAAA,MAAAwQ,EAAA,CACA,IAAAE,EAAAnzD,EAAAgC,KAAA,WAAA,IAAAoxD,EAAA/wD,KACAgxD,EAAAhxD,KAAAixD,mBAAA,CACAxyC,MAAAA,IAEA,GAAA,MAAAuyC,EAAA,CACA,IAAAd,EAAA,GAEAgB,EAAAlxD,KAAA0wD,eAAAtQ,GACA,GAAA,EAAAziD,EAAAC,KAAAszD,GAAA,CACA,IAAAC,EAAAnxD,KAAAgiD,UAAAlD,QAAA,YAAAoN,QACAgE,GAAA,8CAAAniD,OAAAojD,EAAA,+FAAApjD,OAAA0Q,EAAA,sBAAA1Q,OAAAsgD,EAAA,MAAAtgD,OAAAmjD,EAAA,SAGAN,EAAAQ,QAAA,SAAAtM,GACAoL,GAAAa,EAAAM,eAAAhD,EAAAvJ,EAAArmC,EAAAuyC,KAGA,IAAA5M,EAAApkD,KAAA2wD,eAAAvQ,GAUA,OATA,EAAAziD,EAAAC,KAAAwmD,KACA8L,GAAA,4CAAAniD,OAAA0Q,EAAA,sBAAA1Q,OAAAsgD,EAAA,MAAAtgD,OAAAq2C,EAAA,UAGA,EAAAzmD,EAAAC,KAAAszD,KACAhB,GAAA,2BAGA/yD,EAAAijD,EAAAoN,QAAA8D,MAAApB,GAIA,IAAAqB,EAAA,WAAAlD,EAAAvjD,WACA0mD,EAAAr0D,EAAA,iBAAAkxD,EAAA,OAAA,CACA1zC,MAAA42C,EAAA,SAEAnR,EAAAyP,MAAA2B,GAAA/Z,OACA,IAAAga,EAAAzxD,KAAA0xD,iBAAA,CACAjd,GAAA+c,EACApxD,KAAA5E,IAAAC,QAAAqW,cAAA0N,qBAAAoxC,GAAAA,EAAA5wC,OAAA4wC,EACAhU,cAAA,EACAyR,SAAAA,EACAsD,WAAAvR,EAAAhgD,SAEAJ,KAAAwB,QAAA0hD,gBAAAvlD,EAAA2uC,OAAAtsC,KAAAwB,QAAA0hD,gBAAAvlD,EAAAgC,KAAA,SAAAqwD,GACA,OAAAA,EAAAxuD,QAAA6sD,WAAAA,GACAruD,OACAA,KAAAwB,QAAA0hD,gBAAA9kC,KAAAqzC,IACAzxD,MAEAxE,IAAAC,QAAAqW,cAAAyN,gBAAAqxC,GACAA,EAAA/kB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WAEAmxD,KACA9wD,QAGA8wD,MAIAO,eAAA,SAAAhD,EAAAvJ,EAAArmC,GAAA,IAAAmzC,EAAA,EAAAxnD,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAA9L,EAAA,EAAA8L,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA,MAAAwnD,IACAA,EAAA5xD,KAAAixD,mBAAA,CACAxyC,MAAAA,KAIA,IAAA2hC,EAAA,uBAAAryC,OAAAsgD,EAAA,kBAAAtgD,OAAA0Q,EAAA,mBAAA1Q,OAAA+2C,EAAAwJ,IAAA,UAAAvgD,OAAA+2C,EAAAwJ,IAAA,wBAOA,GANAsD,EAAAR,QAAA,SAAAxS,EAAAr7C,GACA,IAAApH,EAAA,mBAAAyiD,EAAA7S,OAAA6S,EAAA7S,OAAA,KAAA,KAAA+Y,GAAA,GACA1E,GAAA,oBAAAryC,OAAA6wC,EAAApwB,OAAA,OAAA,MAAAzgB,OAAA5R,EAAA,WAEAikD,GAAA,QAEA9hD,EAAA,CACA,IAAAuzD,EAAA7xD,KAAA7C,EAAA,6BAAA2nD,EAAA9kD,KAAAwB,QAAA+7C,OAAA,MACA,EAAAsU,EAAAn1D,QACAm1D,EAAAllB,YAAAyT,GAMA,OAAAA,GAEA0R,kBAAA,SAAAjF,EAAA/H,EAAArmC,GACA,IAGAmgC,EAHA5+C,KAAAixD,mBAAA,CACAxyC,MAAAA,IAEAouC,GACA,GAAA,MAAAjO,EAAA,CAIA,IAAAziD,EAAA,mBAAAyiD,EAAA7S,OAAA6S,EAAA7S,OAAA,KAAA,KAAA+Y,GAAA,GACA+M,EAAA7xD,KAAA7C,EAAA,6BAAA2nD,EAAA9kD,KAAAwB,QAAA+7C,OAAA,MACA,GAAA,IAAAsU,EAAAn1D,OAAA,CAIA,IAAAq1D,EAAAF,EAAAh6C,KAAA,iBAAAg1C,EAAA,GAAA/hD,WAAA,KACA,IAAAinD,EAAAr1D,QAGAq1D,EAAAplB,YAAA,oBAAA5+B,OAAA6wC,EAAApwB,OAAA,OAAA,MAAAzgB,OAAA5R,EAAA,aAEA80D,mBAAA,SAAAzgB,GACA,MAAA,mBAAAxwC,KAAAwB,QAAAyvD,mBACAjxD,KAAAwB,QAAAyvD,mBAAAzgB,GAEA,MAEAkhB,iBAAA,SAAAlhB,GACA,MAAA,mBAAAxwC,KAAAwB,QAAAkwD,iBACA1xD,KAAAwB,QAAAkwD,iBAAAlhB,GAEA,MAEAqgB,gBAAA,SAAAzQ,GACA,MAAA,mBAAApgD,KAAAwB,QAAAqvD,gBACA7wD,KAAAwB,QAAAqvD,gBAAAzQ,GAEA,IAEA4R,UAAA,SAAA30D,GACA,IAAA40D,EAAA,WAAAt0D,EAAAid,WACAs3C,EAAA/0D,EAAA,UAAA,CACAmC,MAAAnC,EAAAE,EAAAgc,eAAAjZ,KAAA,SACA6mB,MAAA,8CACAnqB,GAAAm1D,IAEAjyD,KAAAtC,IAAAoD,OAAAoxD,GACAA,EAAA,GAAAC,SACA91D,SAAA+1D,YAAA,QACAF,EAAA31D,SACAf,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,iCAGAsmC,UAAA,SAAAh1D,GACA,IAAA40D,EAAA,WAAAt0D,EAAAid,WACAs3C,EAAA/0D,EAAA,UAAA,CACAmC,MAAAnC,EAAAE,EAAAgc,eAAAjZ,KAAA,SACA6mB,MAAA,8CACAnqB,GAAAm1D,IAEAjyD,KAAAtC,IAAAoD,OAAAoxD,GACAA,EAAA,GAAAC,SACA91D,SAAA+1D,YAAA,QACAF,EAAA31D,SACAf,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,kCC5+CAvwB,IAAAwkB,OAAA6f,aAAA,GACArkC,IAAAk3C,YAAA7S,aAAA,GACArkC,IAAAkG,MAAAm+B,aAAA,GAEArkC,IAAAC,QAAA62D,mBAAA,CACAC,gBAAA,SAAAxxD,EAAAzB,GAAA,IAAAkzD,EAAA,EAAApoD,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAAqoD,EAAA,EAAAroD,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAEA,GAAA,MAAArJ,GAAA,MAAAzB,GAAA,WAAAyB,GAAA,IAAApD,EAAAC,KAAA40D,GACA,MAAA,GAEA,IAAAE,EAAA3xD,EAAAkU,cACAkK,EAAA3jB,IAAAC,QAAAqW,cAAAC,YAAAzS,GACAsL,EAAA,GACA,OAAA8nD,GACA,KAAAl3D,IAAA+Q,UAAAszB,aAAAC,WAAArD,KACA,WAAAtd,EACAvU,EAAAtL,EACA,WAAA6f,IACAvU,EAAAuU,EAAArU,YAEA,MACA,KAAAtP,IAAA+Q,UAAAszB,aAAAC,WAAA3D,OACA,IAAAw2B,EAAA,SAAAC,GACA,GAAA,MAAAA,EACA,MAAA,GAEA,IAAAC,EACA,GAAA,iBAAAD,EACAC,EAAAD,OACA,GAAA,iBAAAA,EAAA,CACA,GAAA,IAAAj1D,EAAAC,KAAAg1D,GACA,MAAA,GAGA,GADAC,EAAAtwD,SAAAqwD,GACA5nD,MAAA6nD,GACA,MAAA,GAGA,IAAAC,EAAAN,EAAAtyC,IAAA2yC,GACA,GAAA,MAAAC,EAAA,CACA,GAAA,EAAAn1D,EAAAC,KAAAk1D,EAAA5yC,IAAA,UACA,OAAA4yC,EAAA5yC,IAAA,SACA,GAAA,EAAAviB,EAAAC,KAAAk1D,EAAA5yC,IAAA,SACA,OAAA4yC,EAAA5yC,IAAA,QAGA,MAAA,IAEA,GAAAuyC,EAAA,CACA,IAAAM,EAEAA,EADA,UAAA5zC,EACA7f,EACA,WAAA6f,EACA7f,EAAAwO,MAAA,KAEA,GAGA,IAAAklD,EAAA,GACAr1D,EAAAuhB,KAAA6zC,EAAA,SAAAH,GACA,IAAAK,EAAAN,EAAAC,GACA,EAAAj1D,EAAAC,KAAAq1D,IACAD,EAAA50C,KAAA60C,KAGAroD,EAAAooD,EAAAzwC,KAAA,UACA,CACA,IAAAqwC,EAQAhoD,EAAA,OANAgoD,EADA,WAAAzzC,EACA7f,EACA,WAAA6f,EACA5c,SAAAjD,GAEA,MAEA,GAAAqzD,EAAAC,GAEA,MACA,KAAAp3D,IAAA+Q,UAAAszB,aAAAC,WAAAI,KACA,IAAAgzB,EACA,GAAA,YAAA/zC,EACA+zC,EAAA5zD,OACA,GAAA,WAAA6f,EAAA,CACA,GAAA,IAAAxhB,EAAAC,KAAA0B,GACA,MAAA,GAEA,IAAA6zD,EAAA7zD,EAAAsD,cACAswD,EAAA,SAAAC,GAAA,QAAAA,OAEAD,EADA,WAAA/zC,EACA,IAAA7f,EAEA,KAGAsL,EADA,MAAAsoD,EACA,GAEAA,EAAA,MAAA,KAEA,MACA,KAAA13D,IAAA+Q,UAAAszB,aAAAC,WAAAC,IACA,KAAAvkC,IAAA+Q,UAAAszB,aAAAC,WAAAvD,MACA,KAAA/gC,IAAA+Q,UAAAszB,aAAAC,WAAAtD,QACA,IAAA42B,EASA,OAPAA,EADA,WAAAj0C,EACA7f,EACA,WAAA6f,EACA5c,SAAAjD,GAEA,OAGA0L,MAAAooD,GACAxoD,EAAA,GACA8nD,IAAAl3D,IAAA+Q,UAAAszB,aAAAC,WAAAC,IACAn1B,EAAAwoD,EAAAtoD,WACA4nD,IAAAl3D,IAAA+Q,UAAAszB,aAAAC,WAAAvD,MACA3xB,EAAApP,IAAAC,QAAAkZ,cAAAmC,eAAAs8C,GACAV,IAAAl3D,IAAA+Q,UAAAszB,aAAAC,WAAAtD,UACA5xB,EAAAwoD,EAAAtoD,WAAA,KAEA,MACA,KAAAtP,IAAA+Q,UAAAszB,aAAAC,WAAA18B,KACA,KAAA5H,IAAA+Q,UAAAszB,aAAAC,WAAA1D,SACA,IAAAi3B,EAEAA,EADA,SAAAl0C,EACA7f,EACA,WAAA6f,EACA,IAAA7c,KAAAhD,GAEA,KAGA,IACAuS,EADAyhD,EAAAZ,IAAAl3D,IAAA+Q,UAAAszB,aAAAC,WAAA1D,SAGAvqB,EADAyhD,EACA93D,IAAAC,QAAAwH,YAAAE,YAAAqB,UAEAhJ,IAAAC,QAAAwH,YAAAE,YAAAC,KAEAwH,EAAA,MAAAyoD,EAAA,GAAA73D,IAAAC,QAAAwH,YAAAC,cAAAmwD,EAAAxhD,GAAAyhD,GACA,MACA,QACA1oD,EAAAtL,EAEA,OAAAsL,IAMApP,IAAAwkB,OAAA6f,aAAA0zB,YAAA/3D,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,KACA2mB,gBAAA,WACA,OAAAh4D,IAAAk3C,YAAA7S,aAAA4zB,oBAEAC,oBAAA,SAAAlB,GACA,OAAA,IAAAxyD,KAAAwzD,kBAAA,CAAAhB,IAEAnmD,MAAA,SAAAkiC,GAwBA,OAvBA,MAAAA,GACA,MAAAA,EAAAikB,QACA,MAAAxyD,KAAAwyD,QACAxyD,KAAAwyD,QAAA7jB,MAAAJ,EAAAikB,UAEAxyD,KAAAwyD,QAAAxyD,KAAA0zD,oBAAAnlB,EAAAikB,SACAxyD,KAAAwyD,QAAA15C,GAAA,SAAAnb,EAAAgC,KAAA,WACAK,KAAAwtC,SAAA,GACAxtC,SASAA,KAAAwyD,QAAAxyD,KAAA0zD,sBACA1zD,KAAAwyD,QAAA15C,GAAA,SAAAnb,EAAAgC,KAAA,WACAK,KAAAwtC,SAAA,GACAxtC,QAGAuuC,GAEA4C,WAAA,WACAnxC,KAAAotC,IAAA,UAAAptC,KAAAwyD,QAAAxf,uBAIAx3C,IAAAwkB,OAAA6f,aAAA8zB,kBAAAn4D,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,OAKArxC,IAAAk3C,YAAA7S,aAAA+zB,aAAAp4D,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA6f,aAAA0zB,cAGA/3D,IAAAk3C,YAAA7S,aAAA4zB,mBAAAj4D,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA6f,aAAA8zB,oBAKAn4D,IAAAkG,MAAAm+B,aAAAg0B,iBAAAr4D,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsW,aAAA,CACAygB,MAAA,IAAAt4D,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BACAg3B,WAAA,IAAAv4D,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCAEAi3B,OAAA,KACAC,SAAA,GAEAngB,kBAAA,WAAA,IAAAogB,EAAAl0D,KACA,MAAAA,KAAAwB,QAAAwyD,SACAh0D,KAAAwB,QAAAyyD,QAAAj0D,KAAAwB,QAAAwyD,QAGAh0D,KAAAm0D,cAAA,GACA,MAAAn0D,KAAAwB,QAAA4yD,cACAp0D,KAAAwB,QAAA4yD,YAAA,KAGA,IAAAp0D,KAAAwB,QAAA6yD,eACA12D,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAA8zC,EAAAvwD,GAAA,IAAA+wD,EACAh1D,EAAA,QAAAg1D,EAAAR,EAAA5zC,IAAA,uBAAA,IAAAo0C,EAAAA,EAAA,GACAR,EAAA5zC,IAAA,eAAA1kB,IAAA+Q,UAAAszB,aAAAC,WAAA3D,QAAA23B,EAAA5zC,IAAA,eAAA1kB,IAAA+Q,UAAAszB,aAAAC,WAAAC,MACAzgC,EAAAiD,SAAAjD,GAEA0L,MAAA1L,KACAA,EAAA,OAIA,IAAAi1D,EAAA52D,EAAAka,KAAAq8C,EAAA1yD,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAg3D,EAAA5zC,IAAA,QAGA,OADA5gB,EAAA,MAAAA,EAAAA,EAAA,QAKA,MAAAi1D,EACAL,EAAA1yD,QAAA4yD,YAAAh2C,KAAA,CACAuzB,YAAAmiB,EAAA5zC,IAAA,eACAu0C,YAAAX,EAAA5zC,IAAA,eACAw0C,UAAAZ,EAAA5zC,IAAA,aACAy0C,WAAAb,EAAA5zC,IAAA,cACA5gB,MAAAA,EACAxC,GAAAg3D,EAAA5zC,IAAA,QAEA,MAAAq0C,EAAAj1D,QACAi1D,EAAAj1D,MAAAA,OAKAi1C,YAAA,WACA52C,EAAAuhB,KAAAvhB,EAAAwpD,OAAAnnD,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAA,MAAAA,EAAAruB,IAAA,aAAAquB,EAAAruB,IAAA,aAAAquB,EAAAzxC,KACA,SAAAg3D,GAEA,GAAA,KAAAA,EAAA5zC,IAAA,eAAA,CAIA,IAAA4zC,aAAAt4D,IAAAwkB,OAAAsf,SAAAs1B,oBAAAd,aAAAt4D,IAAAwkB,OAAAsf,SAAAu1B,sBAAA,IAAAf,EAAA5zC,IAAA,qBAAAlgB,KAAAwB,QAAAszD,QACA,OAAA,EAGA,IAAAC,EAAA/0D,KAAA7C,EAAA,uBAAA22D,EAAAh3D,GAAAgO,YACAkqD,EAAAx5D,IAAAivC,WAAAe,iBAAAW,cAAAnsC,KAAAwB,QAAA6xC,aAAAygB,MAAA,CACAvlB,MAAAulB,EACAM,YAAAp0D,KAAAwB,QAAA4yD,YACA/gB,aAAArzC,KAAAwB,QAAA6xC,aACA4gB,QAAAj0D,KAAAwB,QAAAyyD,QACAa,QAAA90D,KAAAwB,QAAAszD,UAEA,GAAA,EAAAn3D,EAAAC,KAAAm3D,GAAA,CACA,IAAAE,EAAAF,EAAA30D,KAAA,WACA20D,EAAApoB,YAAAqoB,GACA,EAAAr3D,EAAAC,KAAAq3D,IACAD,EAAAh7C,YAAA,mCAAAE,SAAA+6C,QAGAj1D,KAAA7C,EAAA,kBAAA2D,OAAAk0D,KAEAh1D,MACAA,KAAAk1D,oBAEAA,iBAAA,WACA,IAAA5lB,EAAAtvC,KACAA,KAAAm1D,oBAAA,GAEAn1D,KAAA7C,EAAA,0PAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAsb,EAAAxR,EAAA9J,KAAA,QACA,EAAAzC,EAAAC,KAAA8d,GACAxR,EAAA6Q,UAAAW,EAAA,CACAV,YAAA,KAEA9Q,EAAA4N,SAAA,sBACAtc,IAAAC,QAAAgc,aAAAyD,kBAAAhR,EAAA,GACAA,EAAA4N,SAAA,iBACAtc,IAAAC,QAAAgc,aAAAiF,iBAAAxS,GACAA,EAAA4N,SAAA,iBACAtc,IAAAC,QAAAgc,aAAA6E,iBAAApS,EAAA,GAAA,GACAA,EAAA4N,SAAA,gBACAtc,IAAAC,QAAAgc,aAAAqD,eAAA5Q,GAGAolC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAA,MAIAlK,KAAA7C,EAAA,iFAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAi1D,EAAA,IAAA75D,IAAAomD,OAAAC,aAAA,CACApN,GAAAvqC,EACA43C,cAAA53C,EAAA4N,SAAA,gBAAA5N,EAAA4N,SAAA,eACAmqC,SAAA,SAAA3iD,GACA4K,EAAA4N,SAAA,gBACAxY,EAAA,SAAAA,EAAAsD,eACA0sC,EAAAgmB,aAAAF,EAAA91D,MAIAgwC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,MAIAr1D,KAAA7C,EAAA,uEAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,WACAkzD,EAAAppD,EAAA4N,SAAA,mBACAu9C,EAAA,IAAA75D,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAvqC,EACAC,OAAA,EACAqrD,kBAAA,CACA3jD,OAAAyhD,OAAAjpD,EAAA7O,IAAAC,QAAAwH,YAAAE,YAAAC,KAAA6R,eAEAgtC,SAAA,SAAA3iD,GACAg0D,IACAh0D,EAAA9D,IAAAC,QAAAwH,YAAAC,cAAA5D,EAAA9D,IAAAC,QAAAwH,YAAAE,YAAAC,OAEAksC,EAAAgmB,aAAAF,EAAA91D,MAIAgwC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,MAIAr1D,KAAA7C,EAAA,4CAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SAKAd,EAJA3B,EAAAka,KAAAy3B,EAAA9tC,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAs4D,IAGA91D,MACAmzD,EAAAvoD,EAAA9J,KAAA,kBACAqyD,EACAnzD,EAAA,IAAA9D,IAAAk3C,YAAApT,SAAAm2B,SAAAn2D,GAAA0gB,OACA,MAAA1gB,IACAA,EAAA,IAAA9D,IAAAwkB,OAAAsf,SAAAo2B,QAAAp2D,IAGA,IAAA+1D,EAAA,IAAA75D,IAAAkG,MAAA49B,SAAAq2B,oBAAA,CACAlhB,GAAAvqC,EACAo/C,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAm2B,gBAAAt2D,EACAu2D,gBAAApD,EACAqD,YAAAxmB,EAAA9tC,QAAAyyD,QACA8B,YAAA,sBACA9T,SAAA,SAAA+T,GACA1mB,EAAAgmB,aAAAF,EAAAY,MAIA1mB,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,MAIAr1D,KAAA7C,EAAA,yCAAA+hB,KAAA,WACA,IAAA+2C,EAAA94D,EAAA6C,MACAo1D,EAAAa,EAAA71D,KAAA,SACAo0D,EAAA72D,EAAAka,KAAAy3B,EAAA9tC,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAs4D,IAEA,IAAA55D,IAAAomD,OAAAsU,WAAA,CACAzhB,GAAAwhB,EACAE,aAAA,IACApU,aAAA,EAAApkD,EAAAC,KAAA42D,EAAAl1D,OAAAk1D,EAAAl1D,MAAAhB,QAAA,kBAAA,QAAAk2D,EAAAl1D,MACA2iD,SAAA,SAAAmU,GACAA,IAAA5B,EAAAl1D,OACAgwC,EAAAgmB,aAAAF,EAAAgB,QAMAp2D,KAAA7C,EAAA,mCAAA+hB,KAAA,WAEA,IAAA/f,EACAk3D,EAAA,SAAAC,EAAAxoB,EAAA3uC,GACA,IAAAo3D,EACA/6D,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAC,yBACAJ,EAAA/6D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAC,wBAEA,IAAAE,EAAA,IAAAr7D,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAA6hB,EACAS,UAAAznB,EAAA9tC,QAAAyyD,QACA+C,UAAA1nB,EAAA9tC,QAAAyyD,QACAvG,WAAA5f,EACA3uC,SAAAA,EACAgoD,OAAAoP,EAAAA,EAAApP,OAAA,KACA8P,cAAAV,EAAAA,EAAApP,OAAA,MAAA,OAAA,KACA+P,UAAA,SAAApsB,GACA,IAAAqsB,EAAA,CAAArsB,EAAAztB,MACA,MAAAywB,GACAnwC,EAAAuhB,KAAA4uB,EAAA9tB,OAAA,SAAA+tB,GACA,EAAApwC,EAAAC,KAAAmwC,EAAA7tB,IAAA,UACAi3C,EAAA/4C,KAAA2vB,EAAA7tB,IAAA,WAIAovB,EAAAgmB,aAAAgB,EAAAl2D,KAAA,SAAA+2D,EAAA50C,KAAA,OAEA60C,SAAA,SAAAtsB,EAAAjyB,GACA,IAAAs+C,EAAA,GACAE,EAAA,GACA,MAAAvpB,IACAnwC,EAAAuhB,KAAA4uB,EAAA9tB,OAAA,SAAA+tB,GACA,EAAApwC,EAAAC,KAAAmwC,EAAA7tB,IAAA,UAAA4qB,EAAA5qB,IAAA,UAAA6tB,EAAA7tB,IAAA,QACAi3C,EAAA/4C,KAAA2vB,EAAA7tB,IAAA,SAEAm3C,EAAAj5C,KAAA2vB,KAGAD,EAAAvxC,OAAA86D,IAEA/nB,EAAAgmB,aAAAgB,EAAAl2D,KAAA,SAAA+2D,EAAA50C,KAAA,MACA1J,OAIAy2B,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAA2sD,KAKAvnB,EAAA9tC,QAAA+sC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,OACAp4D,EAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,kBAKA,IAAAm3D,EAAAn5D,EAAA6C,MACAo1D,EAAAkB,EAAAl2D,KAAA,SACAo0D,EAAA72D,EAAAka,KAAAy3B,EAAA9tC,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAs4D,IAGAZ,GAAA,EAAA72D,EAAAC,KAAA42D,EAAAl1D,OACA,IAAA9D,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,aAGAiB,KAAA,CACA+2D,MAAA3C,EAAAl1D,MAAA,iBAAAk1D,EAAAl1D,MAAAk1D,EAAAl1D,MAAAwO,MAAA,KAAA0mD,EAAAl1D,MAAA,QAEAG,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAiL,GACA,IAAAkjC,EAAA,IAAAtyC,IAAAk3C,YAAA9P,MAAA40B,MAAA5sD,GACAyrD,EAAAC,EAAAxoB,EAAA3uC,IACAa,OAEAq2D,EAAAC,EAAA,IAAA96D,IAAAk3C,YAAA9P,MAAA40B,MAAAr4D,KAKA,IAAA3D,IAAAi8D,OAAAz3D,KAAAtC,IAAA,KAAA,CACAg6D,cAAA,CACA,qBACA,yBAEAzV,SAAAtkD,EAAAgC,KAAA,SAAAg4D,EAAAjqB,EAAApuC,GACAq4D,EAAA7/C,SAAA,oBAAA6/C,EAAA7/C,SAAA,eAGA9X,KAAAs1D,aAAA/yD,SAAAmrC,GAAApuC,IACAU,SAGA43D,YAAA,SAAA9D,GAEA,IAAA+D,EAAA73D,KAAA7C,EAAA,yBAAA22D,EAAAh3D,GAAAgO,WAAA,MACA,GAAA,EAAAnN,EAAAC,KAAAi6D,GAAA,CACA,IAAAC,EAAAD,EAAAn9C,QAAA,gBACA85C,EAAA72D,EAAAo0C,UAAA/xC,KAAAwB,QAAA4yD,YAAA,CAAAt3D,GAAAg3D,EAAAh3D,KACAg7D,EAAAnJ,SAAA,eAAApyD,SACAyD,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA0gB,WAAA+D,EAAA,CACAvpB,MAAAulB,EACAU,WAAA,MAAAA,EAAAA,EAAAl1D,MAAA,KACA20D,aAAA,IAAAH,EAAA5zC,IAAA,sBAAAlgB,KAAAwB,QAAAyyD,QAAAj0D,KAAAwB,QAAAyyD,SAAAH,EAAA5zC,IAAA,uBAAAlgB,KAAAwB,QAAAyyD,SAAAj0D,KAAAwB,QAAAszD,YAIAzS,SAAA,SAAA0V,EAAAz4D,GACAU,KAAAs1D,aAAAyC,EAAAz4D,GAAA,GAEA,IAAAw0D,EAAA9zD,KAAA0tD,WAAAxtC,IAAA63C,GACA1C,EAAA13D,EAAAka,KAAA7X,KAAAm1D,oBAAA,SAAAE,GACA,OAAAA,EAAAv4D,KAAAi7D,IAGA,GAAA,MAAA1C,EAEA,OADAvB,EAAA5zC,IAAA,aAAAtd,eAEA,IAAA,SACAyyD,EAAAnrD,MAAAm4C,SAAA/iD,GACA,MACA,IAAA,QACA+1D,EAAAnrD,MAAAtI,IAAAtC,EAAA,KACA,MACA,IAAA,OACA,IAAA,MACA,IAAA,UACA,IAAA,QACA,IAAA,WACA+1D,EAAAnrD,MAAAtI,IAAAtC,GACA,MACA,IAAA,OACA,IAAA,WACA,IAAAsC,EAEAA,EADA,SAAApG,IAAAC,QAAAqW,cAAAC,YAAAzS,GACAA,EACA,EAAA3B,EAAAC,KAAA0B,GACA,IAAAgD,KAAAhD,GAEA,KAEA+1D,EAAAnrD,MAAAm4C,SAAAzgD,QAIA5B,KAAA43D,YAAA9D,IAGAwB,aAAA,SAAAyC,EAAAz4D,GAAA,IAAA04D,IAAA,EAAA5tD,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GACA6tD,EAAAt6D,EAAAo0C,UAAA/xC,KAAAwB,QAAA4yD,YAAA,CAAAt3D,GAAAi7D,IACAjE,EAAA9zD,KAAA0tD,WAAAxtC,IAAA63C,GACA,WAAAjE,EAAA5zC,IAAA,cAAA4zC,EAAA5zC,IAAA,sBACA5gB,EAAAiD,SAAAjD,IAEA,MAAA24D,GACAA,EAAA,CACAn7D,GAAAi7D,EACApmB,YAAAmiB,EAAA5zC,IAAA,eACA5gB,MAAAA,GAEAU,KAAAwB,QAAA4yD,YAAAh2C,KAAA65C,IAEAA,EAAA34D,MAAAA,EAGA,IAAA44D,EAAAv6D,EAAAo0C,UAAA/xC,KAAAm0D,cAAA,CAAAr3D,GAAAi7D,IACA,MAAAG,EACAA,EAAA54D,MAAAA,EAEAU,KAAAm0D,cAAA/1C,KAAA65C,GAEA,mBAAAj4D,KAAAwB,QAAAygD,UAAA+V,GACAh4D,KAAAwB,QAAAygD,SAAA8V,EAAAz4D,IAGA64D,UAAA,WACA,OAAAn4D,KAAAwB,QAAA4yD,aAEA1lB,WAAA,WACA,OAAA1uC,KAAAm0D,eAEAiE,SAAA,WACA,IAAAt+C,GAAA,EAqEA,OApEAnc,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAAriB,EAAAgC,KAAA,SAAAm0D,IACA9zD,KAAAwB,QAAAszD,UAAAhB,EAAA5zC,IAAA,eAAAlgB,KAAAwB,QAAAszD,SAAA,MAAAhB,EAAA5zC,IAAA,qBAAA4zC,EAAA5zC,IAAA,oBAAAlgB,KAAAwB,QAAAszD,UAAAhB,EAAA5zC,IAAA,eAAA,MAAA4zC,EAAA5zC,IAAA,qBAEAlgB,KAAAwB,QAAAszD,SAAAhB,EAAA5zC,IAAA,gBAIAviB,EAAAuhB,KAAAlf,KAAAm1D,oBAAAx3D,EAAAgC,KAAA,SAAA01D,GACA,IAAAD,EAAAC,EAAAv4D,GACAoN,EAAAmrD,EAAAnrD,MACA,GAAAkrD,IAAAtB,EAAAh3D,GACA,OAAAg3D,EAAA5zC,IAAA,aAAAtd,eACA,IAAA,OACA,IAAA,MACA,IAAA,UACA,IAAA,QACA,IAAA,WACApH,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA,IAAAA,EAAAtI,MAAAoB,OAAAtG,SACAlB,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA4P,GAAA,GAEA,MACA,IAAA,QACAte,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA,IAAAA,EAAAtI,MAAAoB,OAAAtG,QAAA,IAAA6F,SAAA2H,EAAAtI,MAAAoB,UACAxH,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA4P,GAAA,GAEA,MACA,IAAA,OACA5P,EAAAmuD,YACA,IAAA16D,EAAAC,KAAAsM,EAAAouD,cACApuD,EAAAquD,YACAz+C,GAAA,GAEA,MACA,IAAA,OACA,IAAA,WACA5P,EAAAmuD,iBACAhuD,IAAAH,EAAAouD,YAAA,MAAApuD,EAAAouD,aACApuD,EAAAquD,YACAz+C,GAAA,GAEA,MACA,IAAA,SACA5P,EAAAmuD,aACAnuD,EAAA1I,QAAAmzD,WAAA,IAAAh3D,EAAAC,KAAAsM,EAAAouD,YAAApuD,EAAAouD,YAAA,IAAApuD,EAAAouD,WAAA57D,UACAwN,EAAAquD,YACAz+C,GAAA,GAEA,MACA,IAAA,UACA5P,EAAAkuD,aACAt+C,GAAA,GACA,MACA,IAAA,SACA5P,EAAAsuD,aACAtuD,EAAA1I,QAAAksD,YAAA,GAAAxjD,EAAA1I,QAAAksD,WAAAhxD,SACAwN,EAAAquD,UAAA,wBACAz+C,GAAA,KAKA9Z,QACAA,OAEA8Z,KAIAte,IAAAkG,MAAAm+B,aAAA44B,uBAAAj9D,IAAAkG,MAAAm+B,aAAAg0B,iBAAA5zD,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsW,aAAA,CACAygB,MAAA,IAAAt4D,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCACAg3B,WAAA,IAAAv4D,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0CAEAs3B,eAAA,GAEA9f,YAAA,WACA52C,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAA8zC,GACA,IAAAkB,EAAAx5D,IAAAivC,WAAAe,iBAAAW,cAAAnsC,KAAAwB,QAAA6xC,aAAAygB,MAAA,CACAvlB,MAAAulB,EACAM,YAAAp0D,KAAAwB,QAAA4yD,YACA/gB,aAAArzC,KAAAwB,QAAA6xC,eAEArzC,KAAA7C,EAAA,kBAAA2D,OAAAk0D,IACAh1D,MACAA,KAAAk1D,oBAEAA,iBAAA,WACA,IAAA5lB,EAAAtvC,KACAA,KAAAm1D,oBAAA,GAEAn1D,KAAA7C,EAAA,iNAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAs4D,EAAAxuD,EAAA9J,KAAA,cACAsb,EAAAxR,EAAA9J,KAAA,QACA,EAAAzC,EAAAC,KAAA8d,GACAxR,EAAA6Q,UAAAW,EAAA,CACAV,YAAA,KAEA9Q,EAAA4N,SAAA,sBACAtc,IAAAC,QAAAgc,aAAAyD,kBAAAhR,EAAA,GACAA,EAAA4N,SAAA,iBACAtc,IAAAC,QAAAgc,aAAAiF,iBAAAxS,GACAA,EAAA4N,SAAA,gBACAtc,IAAAC,QAAAgc,aAAAqD,eAAA5Q,GAGAolC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAA,EACA3G,MAAAm1D,MAIA14D,KAAA7C,EAAA,4CAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAs4D,EAAAxuD,EAAA9J,KAAA,cAEAkvC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAA,EACA3G,MAAAm1D,MAIA14D,KAAA7C,EAAA,iFAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAs4D,EAAAxuD,EAAA9J,KAAA,cACAi1D,EAAA,IAAA75D,IAAAomD,OAAAC,aAAA,CACApN,GAAAvqC,EACA43C,cAAA53C,EAAA4N,SAAA,gBAAA5N,EAAA4N,SAAA,eACAmqC,SAAA,SAAA3iD,GACA4K,EAAA4N,SAAA,gBACAxY,EAAA,SAAAA,EAAAsD,eAEA0sC,EAAAgmB,aAAAF,EAAAsD,EAAAp5D,MAIAgwC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,EACA9xD,MAAAm1D,MAIA14D,KAAA7C,EAAA,oFAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAs4D,EAAAxuD,EAAA9J,KAAA,cACAkzD,EAAAppD,EAAA4N,SAAA,mBACAu9C,EAAA,IAAA75D,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAvqC,EACAC,OAAA,EACAqrD,kBAAA,CACA3jD,OAAAyhD,OAAAjpD,EAAA7O,IAAAC,QAAAwH,YAAAE,YAAAC,KAAA6R,eAEAgtC,SAAA,SAAA3iD,GAIAA,EAHAg0D,EAGAh0D,EAAAA,EAAAkjB,cAAA,KAFAljB,EAAA9D,IAAAC,QAAAwH,YAAAC,cAAA5D,EAAA9D,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,KAGAksC,EAAAgmB,aAAAF,EAAAsD,EAAAp5D,MAIAgwC,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,EACA9xD,MAAAm1D,MAIA14D,KAAA7C,EAAA,4CAAA+hB,KAAA,WACA,IAAAhV,EAAA/M,EAAA6C,MACAo1D,EAAAlrD,EAAA9J,KAAA,SACAs4D,EAAAxuD,EAAA9J,KAAA,cAKAd,EAJA3B,EAAAka,KAAAy3B,EAAA9tC,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAs4D,IAGA91D,MACAmzD,EAAAvoD,EAAA9J,KAAA,kBACAqyD,EACAnzD,EAAA,IAAA9D,IAAAk3C,YAAApT,SAAAm2B,SAAAn2D,GAAA0gB,OACA,MAAA1gB,IACAA,EAAA,IAAA9D,IAAAwkB,OAAAsf,SAAAo2B,QAAAp2D,IAGA,IAAA+1D,EAAA,IAAA75D,IAAAkG,MAAA49B,SAAAq2B,oBAAA,CACAlhB,GAAAvqC,EACAo/C,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAm2B,gBAAAt2D,EACAu2D,gBAAApD,EACAwB,QAAA3kB,EAAA9tC,QAAAyyD,QACA8B,YAAA,sBACA9T,SAAA,SAAA+T,GACA1mB,EAAAgmB,aAAAF,EAAAsD,EAAA1C,MAIA1mB,EAAA6lB,oBAAA/2C,KAAA,CAAAg3C,EAAAsD,EAAArD,IACA/lB,EAAA6lB,oBAAA/2C,KAAA,CACAthB,GAAAs4D,EACAlrD,MAAAmrD,EACA9xD,MAAAm1D,MAKA,IAAAl9D,IAAAi8D,OAAAz3D,KAAAtC,IAAA,KAAA,CACAg6D,cAAA,CACA,qBACA,yBAEAzV,SAAAtkD,EAAAgC,KAAA,SAAAg4D,EAAAjqB,EAAApuC,GACA,KAAAq4D,EAAA7/C,SAAA,kBAAA6/C,EAAA7/C,SAAA,oBAAA6/C,EAAA7/C,SAAA,eAAA,CAGA,IAAA4gD,EAAAn2D,SAAApF,EAAAw6D,GAAAv3D,KAAA,eACAJ,KAAAs1D,aAAA/yD,SAAAmrC,GAAAgrB,EAAAp5D,KACAU,SAGAs1D,aAAA,SAAAyC,EAAAW,EAAAp5D,GACA,IAAA24D,EAAAt6D,EAAAo0C,UAAA/xC,KAAAwB,QAAA4yD,YAAA,CAAAt3D,GAAAi7D,IACA,GAAA,MAAAE,EAAA,CACA,IAAAnE,EAAA9zD,KAAA0tD,WAAAxtC,IAAA63C,GAEAE,EAAA,CACAn7D,GAAAi7D,EACApmB,YAAAmiB,EAAA5zC,IAAA,eACA5gB,MAAA,IAAAo5D,EAAAp5D,EAAA,KACAq5D,OAAA,IAAAD,EAAAp5D,EAAA,MAEAU,KAAAwB,QAAA4yD,YAAAh2C,KAAA65C,QAEA,IAAAS,EACAT,EAAA34D,MAAAA,EAEA24D,EAAAU,OAAAr5D,EAGA,IAAA44D,EAAAv6D,EAAAo0C,UAAA/xC,KAAAm0D,cAAA,CAAAr3D,GAAAi7D,IACA,MAAAG,GACAA,EAAA54D,MAAA,IAAAo5D,EAAAp5D,EAAA44D,EAAA54D,MACA44D,EAAAS,OAAA,IAAAD,EAAAp5D,EAAA44D,EAAAS,QAEA34D,KAAAm0D,cAAA/1C,KAAA65C,GAGAA,EAAA34D,OAAA24D,EAAAU,SACA34D,KAAAwB,QAAA4yD,YAAAz2D,EAAA2uC,OAAAtsC,KAAAwB,QAAA4yD,YAAA,SAAAI,GACA,OAAAA,EAAA13D,KAAAi7D,IAEA/3D,KAAAm0D,cAAAx2D,EAAA2uC,OAAAtsC,KAAAm0D,cAAA,SAAAK,GACA,OAAAA,EAAA13D,KAAAi7D,KAIA,mBAAA/3D,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAA8V,EAAAz4D,IAGAs5D,iBAAA,WACA54D,KAAAwB,QAAA4yD,YAAA,GACAp0D,KAAAm0D,cAAA,GACAn0D,KAAA+rC,UAEA8sB,UAAA,SAAAzE,GACAp0D,KAAAwB,QAAA4yD,YAAAA,EACAp0D,KAAAm0D,cAAA,GACAn0D,KAAA+rC,UAEA+sB,eAAA,WACA,IAAAh/C,GAAA,EAuFA,OAtFAnc,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAAriB,EAAAgC,KAAA,SAAAm0D,GACAn2D,EAAAuhB,KAAAlf,KAAAm1D,oBAAAx3D,EAAAgC,KAAA,SAAA01D,GACA,IAAAD,EAAAC,EAAAv4D,GACA47D,EAAArD,EAAA9xD,MACA2G,EAAAmrD,EAAAnrD,MACA6uD,EAAA,KAEA,GAAA,IAAAL,GAEAtD,IAAAtB,EAAAh3D,GACA,OAAAg3D,EAAA5zC,IAAA,aAAAtd,eACA,IAAA,OACA,IAAA,SACA,IAAA,UACA,IAAA,UACA,IAAA,QACA,IAAA,OACA,IAAA,WAEA,MACA,IAAA,MACA,IAAA,QAEAm2D,EAAAp7D,EAAA2uC,OAAAtsC,KAAAm1D,oBAAA,SAAA6D,GACA,OAAAA,EAAAl8D,KAAAg3D,EAAAh3D,IAAA,IAAAk8D,EAAAz1D,QACA,GAAA2G,MAGA1O,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA1O,IAAAC,QAAAgc,aAAAoC,cAAAk/C,GAAA,GAGA,IAAAp7D,EAAAC,KAAAsM,EAAAtI,QAAA,EAAAjE,EAAAC,KAAAm7D,EAAAn3D,SACAkY,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,IAIA,IAAAvM,EAAAC,KAAAm7D,EAAAn3D,QAAA,EAAAjE,EAAAC,KAAAsM,EAAAtI,SACAkY,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAAk/C,GAAA,IAIA,EAAAp7D,EAAAC,KAAAsM,EAAAtI,QAAA,EAAAjE,EAAAC,KAAAm7D,EAAAn3D,QAAAW,SAAA2H,EAAAtI,OAAAW,SAAAw2D,EAAAn3D,SACAkY,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAA3P,GAAA,GACA1O,IAAAC,QAAAgc,aAAAoC,cAAAk/C,GAAA,IAEA,MACA,IAAA,OACA,IAAA,WAEAA,EAAAp7D,EAAA2uC,OAAAtsC,KAAAm1D,oBAAA,SAAA6D,GACA,OAAAA,EAAAl8D,KAAAg3D,EAAAh3D,IAAA,IAAAk8D,EAAAz1D,QACA,GAAA2G,MAGA1O,IAAAC,QAAAgc,aAAAoC,cAAA3P,EAAAxM,KAAA,GACAlC,IAAAC,QAAAgc,aAAAoC,cAAAk/C,EAAAr7D,KAAA,IAGAwM,EAAAouD,YAAAS,EAAAT,aACAx+C,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAA3P,EAAAxM,KAAA,KAIAq7D,EAAAT,YAAApuD,EAAAouD,aACAx+C,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAAk/C,EAAAr7D,KAAA,IAIAwM,EAAAouD,YAAAS,EAAAT,YAAApuD,EAAAouD,WAAAS,EAAAT,aACAx+C,GAAA,EACAte,IAAAC,QAAAgc,aAAAoC,cAAA3P,EAAAxM,KAAA,GACAlC,IAAAC,QAAAgc,aAAAoC,cAAAk/C,EAAAr7D,KAAA,MAMAsC,QACAA,OAEA8Z,KAIAte,IAAAkG,MAAAm+B,aAAAo5B,yBAAAz9D,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCACAy1B,QAAA,GACA0G,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,MAEAzC,OAAA,CACA2lB,wCAAA,YACAC,2CAAA,eACAC,oCAAA,gBACAC,qCAAA,SACAC,mCAAA,QAEAvlB,aAAA,WACAt2C,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACAA,EAAAkrB,cAAA97D,EAAAuxC,MAAAX,EAAAjB,cAGAttC,KAAAg0C,WAAA,CACAh0B,OAAAriB,EAAA2uC,OAAAtsC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,iBAIAq0B,YAAA,WACAv0C,KAAA7C,EAAA,+BAAAo/C,UAAA,CACA5b,UAAA,IAEA3gC,KAAA7C,EAAA,+BAAA2wD,SAAA,CACAF,MAAA,KACAC,YAAA,KACA6L,OAAA/7D,EAAAgC,KAAAK,KAAA25D,aAAA35D,SAGA25D,aAAA,WACA,IAAArqB,EAAAtvC,KACAA,KAAA7C,EAAA,+BAAA0a,KAAA,sBAAAqH,KAAA,SAAA3b,GACA,IAAA+qD,EAAAnxD,EAAA6C,MAAAI,KAAA,OACAkvC,EAAAoe,WAAAxtC,IAAA,CAAAouC,IAAAA,IACAlhB,IAAA,YAAA7pC,EAAA,MAGAq2D,UAAA,WACA55D,KAAA0tD,WAAA9a,IAAA,IAAAp3C,IAAAwkB,OAAA6f,aAAA8zB,kBAAA,CACAr0D,MAAA,GACA6vD,UAAAnvD,KAAA0tD,WAAA1tC,OAAAtjB,OAAA,KAEAsD,KAAA+rC,UAEA8tB,cAAA,SAAAx8D,GACA,IAAAixD,EAAAnxD,EAAAE,EAAAgc,eAAAqB,QAAA,MAAAta,KAAA,OACAJ,KAAA0tD,WAAAxtC,IAAA,CAAAouC,IAAAA,IACAlhB,IAAA,QAAAjwC,EAAAE,EAAAgc,eAAAzX,QAEAk4D,aAAA,SAAAz8D,GACA,IAAAixD,EAAAnxD,EAAAE,EAAAgc,eAAAqB,QAAA,MAAAta,KAAA,OACA0yD,EAAA9yD,KAAA0tD,WAAAxtC,IAAA,CAAAouC,IAAAA,IACAwE,EAAA5lB,QACAltC,KAAA0tD,WAAAnxD,OAAAu2D,GAEAA,EAAA1lB,IAAA,aAAA,GACAptC,KAAA+rC,UAEAguB,OAAA,WACAp8D,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACAA,EAAAjB,WAAA3vC,EAAAuxC,MAAAX,EAAAkrB,eACAlrB,EAAAkrB,cAAA,OAEAz5D,KAAAwB,QAAA03D,SAAAl5D,KAAA0tD,aAEA/c,KAAA,WACA3wC,KAAAwB,QAAA23D,OAAAn5D,KAAA0tD,eC/hCAlyD,IAAAkG,MAAAgpC,UAAA,GACAlvC,IAAAkG,MAAAgpC,UAAAsvB,mBAAAx+D,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAk9B,aAAA,MAEAxmB,OAAA,CACAymB,0BAAA,cACAC,2BAAA,cACAC,6BAAA,iBAEAtmB,kBAAA,WACA9zC,KAAAwB,QAAAksD,WAIA1tD,KAAA0tD,WAAA1tD,KAAAwB,QAAAksD,WAHA1tD,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAjK,SAAA4xB,UAKAr6D,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,QAAA1tD,KAAA+rC,QACA/rC,KAAA0tD,WAAA7hB,SAEAmI,WAAA,WACA,MAAA,CACA0Z,WAAA1tD,KAAA0tD,WACAuM,aAAAj6D,KAAAwB,QAAAy4D,eAGA1lB,YAAA,WACA,MAAAv0C,KAAA0tD,YAAA1tD,KAAA0tD,WAAAjd,YAGAzwC,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAAz0C,KAAA7C,EAAA,oBACAy/C,cAAA,EACAx8C,KAAAJ,KAAA0tD,WAAA1tC,OACAu9B,MAAA,MACAoG,MAAA,CAAA,EAAA,OACArG,WAAA,GACA2B,SAAA,CACA6N,YAAA,wCAEA7P,iBAAAt/C,EAAAgC,KAAA,SAAAygD,GACApgD,KAAAu6D,aAAAna,EAAAhgD,SACAJ,MACA6gD,mBAAA,CACAY,QAAA,CACA,CACA1kD,KAAA,OACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAAu6D,aAAAna,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,SACA09D,UAAA,EACAD,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA06D,eAAAta,IACApgD,SAIA8+C,QAAA,CACA,CACA1+C,KAAA,kBACAmB,MAAA,QACA,CACAnB,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,WACA,MAAA,0RACAK,MACAwuB,MAAA,aAKAqsC,YAAA,aAEAC,YAAA,SAAAz9D,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eAEAsyB,EADA3rC,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OACAta,OAEAJ,KAAAu6D,aAAA5uB,IAEA4uB,aAAA,SAAA5uB,KAEAovB,cAAA,SAAA19D,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA+mC,EAAApgD,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OACA1a,KAAA06D,eAAAta,IAEAsa,eAAA,SAAAta,GACA,IAAAzU,EAAAyU,EAAAhgD,OACA,IAAA5E,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,mBACAovB,KAAA,iDACAgiB,SAAAz5D,EAAAgC,KAAA,WACAK,KAAA0tD,WAAAnxD,OAAAovC,GACAA,EAAAwX,UACAnjD,KAAAgiD,UAAA6I,UAAAzK,IACApgD,WAKAxE,IAAAkG,MAAAgpC,UAAAwwB,iBAAA1/D,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsZ,SAAA,QACA8iB,OAAAx7D,EAAAu4C,KACAilB,aAAA,GAEA1nB,OAAA,CACA2nB,6BAAA,sBACAC,kBAAA,QAEApkB,mBAAA,WACAj3C,KAAAwB,QAAA+sC,QACAvuC,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAAyoB,SAAAkC,WAGAsJ,aAAA,WACAj0C,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACAv0C,KAAA7C,EAAA,wBAAAm+D,SAEAC,oBAAA,SAAAl+D,GACA,IAAAyc,EAAA,EAAAnc,EAAAC,KAAAoC,KAAA7C,EAAA,wBAAAyE,OACA5B,KAAA7C,EAAA,aAAAsb,KAAA,YAAAqB,GACAA,GAAA,KAAAzc,EAAA4b,SACAjZ,KAAA2wC,QAGAA,KAAA,WACA,IAAA6qB,EAAAx7D,KAAA7C,EAAA,wBAAAyE,MACA,IAAAjE,EAAAC,KAAA49D,KAIA,IAAAhgE,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAuuC,MAAAoC,KAAA,CACA5zC,KAAAy+D,GACA,CACA9mD,QAAA/W,EAAAgC,KAAA,WACAK,KAAA64C,cACA,mBAAA74C,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,QAEAvuC,YC1JAxE,IAAAyD,KAAA,GAEAzD,IAAAyD,KAAAC,QAAA,WACA,SAAAw8D,IAAA,IAAAl6D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA07D,GACA17D,KAAA27D,WAAAn6D,GAFA,OAAAypC,aAAAywB,EAAA,CAAA,CAAA96D,IAAA,aAAAtB,MAKA,WAAA,IAAAkC,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACApK,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAnB,OAAA,MACAqrC,SAAA,OACAkwB,YAAA,mBACAp7C,QAAAhlB,IAAA+Q,UAAAkU,SAAAkP,IACAyf,WAAAzxC,EAAAgC,KAAA,SAAAmE,GACAtI,IAAAC,QAAA4oB,WAAAyB,WAAAhiB,EAAA9D,KAAAguC,aAAAxsC,EAAA+iB,UACAvkB,MACAogB,UAAA,EACA5gB,QAAA,EACAyuC,SAAA,EACAC,UAAA,EACA2tB,cAAA,MAlBA,CAAAj7D,IAAA,aAAAtB,MAsBA,WAWA,OATAU,KAAAwB,QAAA0sC,SACA1yC,IAAA+Q,UAAAkU,SAAAC,OAEA1gB,KAAAwB,QAAAysC,QACAzyC,IAAA+Q,UAAAkU,SAAAK,MAGA9gB,KAAAwB,QAAAgf,UA/BA,CAAA5f,IAAA,OAAAtB,MAoCA,SAAAe,GACAA,IACAL,KAAAwB,QAAAnB,OAAAA,EAAA4U,eAEA,IAAAuL,EAAAxgB,KAAAguC,aACAhuC,KAAAwB,QAAArC,WACAa,KAAAwB,QAAArB,IAAA3E,IAAAC,QAAA2D,WAAA+gB,YAAAngB,KAAAwB,QAAArC,SAAA,CACAihB,SAAApgB,KAAAwB,QAAA4e,SACAI,QAAAA,KAIAxgB,KAAAwB,QAAApB,OACAJ,KAAAwB,QAAApB,KAAAwjD,KAAAO,UAAAnkD,KAAAwB,QAAApB,OAEA,IAAAwK,EAAA,CACAkxD,SAAA,KACApnD,QAAA,SAAAmE,GAEA,OADA7Y,KAAA87D,SAAAjjD,EACA7Y,MAEA+7D,MAAA,KACAr8D,KAAA,SAAAmZ,GAEA,OADA7Y,KAAA+7D,MAAAljD,EACA7Y,MAEAg8D,MAAA,KACA7vC,KAAA,SAAAtT,GAEA,OADA7Y,KAAAg8D,MAAAnjD,EACA7Y,OAmCA,OAhCA7C,EAAA8B,KAAAe,KAAAwB,SAAA9B,KAAA,WACA,mBAAAkL,EAAAmxD,MACAnxD,EAAAmxD,MAAAl9C,MAAAjU,EAAAR,WACA,mBAAAQ,EAAAkxD,UACAlxD,EAAAkxD,SAAAj9C,MAAAjU,EAAAR,aAEA+hB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GACA0c,IAAAhlB,IAAA+Q,UAAAkU,SAAAK,OAAA,MAAAhd,EAAAqxB,QAAAn1B,KAAAwB,QAAAq6D,aAGArgE,IAAAiC,IAAAkkB,aAAAouB,mBAAApyC,EAAAgC,KAAA,SAAAqwC,GAEA,EAAAryC,EAAAC,KAAAoyC,GACA7yC,EAAA8B,KAAAe,KAAAwB,SAAA9B,KAAA,WACA,mBAAAkL,EAAAmxD,OACAnxD,EAAAmxD,MAAAl9C,MAAAjU,EAAAR,aAEA+hB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GACA,mBAAA8G,EAAAoxD,OACApxD,EAAAoxD,MAAAn9C,MAAAjU,EAAAR,YAEApK,OAEA,mBAAA4K,EAAAoxD,OACApxD,EAAAoxD,MAAAn9C,MAAAjU,EAAAR,YAEApK,OAEA,mBAAA4K,EAAAoxD,OACApxD,EAAAoxD,MAAAn9C,MAAAjU,EAAAR,YAEApK,OACA4K,IApGA,CAAAhK,IAAA,MAAAtB,MAuGA,WACA,OAAAU,KAAAvB,KAAA,SAxGA,CAAAmC,IAAA,OAAAtB,MA2GA,WACA,OAAAU,KAAAvB,KAAA,UA5GA,CAAAmC,IAAA,QAAAtB,MA+GA,WACA,OAAAU,KAAAvB,KAAA,WAhHA,CAAAmC,IAAA,MAAAtB,MAmHA,WACA,OAAAU,KAAAvB,KAAA,SApHA,CAAAmC,IAAA,SAAAtB,MAuHA,WACA,OAAAU,KAAAvB,KAAA,cAxHAi9D,EAAA,GCFAlgE,IAAAygE,MAAA,WACA,SAAAC,EAAAx+D,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAk8D,GACAl8D,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAT,KAAA,UACAs9C,aAAA,GACA8d,KAAA,GACAC,WAAA,EACAnwB,UAAA,EACAowB,UAAA,EACAC,aAAA,EACA/1C,OAAA,KACAg2C,qBAAA,KACAt1C,MAAA,KACAu1C,UAAA,KACAntB,QAAA,OAEA,MAAArvC,KAAAwB,QAAA+kB,QAAA/qB,IAAAC,QAAA0qB,cAAAC,UAAApmB,KAAAwB,QAAA+kB,QACAvmB,KAAAnD,cAAAa,GAjBA,OAAAutC,aAAAixB,EAAA,CAAA,CAAAt7D,IAAA,gBAAAtB,MAoBA,SAAA5B,GACAsC,KAAAwB,QAAA86D,YAAAt8D,KAAAwB,QAAA86D,aAAA,MAAAt8D,KAAAwB,QAAA+kB,OACAvmB,KAAAy8D,OAAA/+D,EAEAsC,KAAAtC,IAAAP,EAAA,QAAA,CACAwd,MAAA3a,KAAAwB,QAAA68C,aAAA97B,KAAA,KAAA,gBAAAviB,KAAAwB,QAAAT,MAAA,MAAAf,KAAAwB,QAAAg7D,UAAA,UAAA,IACAv1C,MAAA,MAAAjnB,KAAAwB,QAAAylB,MAAAjnB,KAAAwB,QAAAylB,MAAA,KACAxlB,KAAAzB,KAAAwB,QAAA26D,MACAn8D,KAAAwB,QAAA86D,cACAt8D,KAAAtC,IAAAoD,OAAA3D,EAAA,2KACA6C,KAAAtC,IAAAma,KAAA,qBAAAiB,GAAA,QAAAnb,EAAAgC,KAAAK,KAAA08D,YAAA18D,QAEAA,KAAAwB,QAAAyqC,SACAjsC,KAAAy8D,OAAA37D,OAAAd,KAAAtC,KACAsC,KAAAwB,QAAA46D,UACAp8D,KAAAy8D,OAAA/vB,QAAA1sC,KAAAtC,KACAsC,KAAAwB,QAAA66D,SACAr8D,KAAAy8D,OAAAE,OAAA38D,KAAAtC,KAEAsC,KAAAy8D,OAAAh7D,KAAAzB,KAAAtC,KAEA,MAAAsC,KAAAwB,QAAAg7D,WAAA,EAAA7+D,EAAAC,KAAAoC,KAAAwB,QAAAg7D,UAAAI,IACA58D,KAAAtC,IAAA42C,WAAAt0C,KAAAwB,QAAAg7D,UAAAI,GAAA,WACA,EAAA58D,KAAAwB,QAAA6tC,SACArvC,KAAA68D,uBAEA78D,MAGA,EAAAA,KAAAwB,QAAA6tC,SACArvC,KAAA68D,wBAlDA,CAAAj8D,IAAA,sBAAAtB,MAuDA,WACA4xC,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAmjD,WACAnjD,MAAAA,KAAAwB,QAAA6tC,WA1DA,CAAAzuC,IAAA,UAAAtB,MA6DA,WACA,MAAAU,KAAAwB,QAAAg7D,WAAA,EAAA7+D,EAAAC,KAAAoC,KAAAwB,QAAAg7D,UAAAM,KACA98D,KAAAtC,IAAA42C,WAAAt0C,KAAAwB,QAAAg7D,UAAAM,IAAA,WACA98D,KAAAtC,IAAAnB,UACAyD,MAGAA,KAAAtC,IAAAnB,WApEA,CAAAqE,IAAA,cAAAtB,MAwEA,WACA,MAAAU,KAAAwB,QAAA+kB,QACA/qB,IAAAC,QAAA0qB,cAAAK,UAAAxmB,KAAAwB,QAAA+kB,QAAA,EAAAvmB,KAAAwB,QAAA+6D,0BA1EAL,EAAA,GCAA/+D,EAAA2qD,GAAA7nD,OAAA,CACAq0C,WAAA,SAAA9yC,EAAAqX,EAAAywC,GACA,IAAAkT,EAAAh7D,EAUA,GATA,WAAAb,QAAAa,KACAg7D,EAAAh7D,EAAAg7D,WAGA,mBAAA3jD,IACAA,EAAAlb,EAAAu4C,MAEAr9B,EAAAlb,EAAAgC,KAAAkZ,EAAAywC,GAAAtpD,WAEAqK,IAAA7I,EAAA3D,IACA,GAAA,MAAA2D,EAAA3D,IAAAE,QAAA,SAAAyD,EAAA3D,IAAAE,OAAA6E,cAAA,CAGA,IAAAm6D,EAAA/8D,KAAAo4C,cACA52C,EAAA3D,IAAAE,OAAAiC,KAAAnC,IAAA,SAAA,QAAAu6C,cACAp4C,KAAAjC,OAAAg/D,GAAAC,QAAAx7D,EAAA3D,IAAA,CACAo/D,SAAAt/D,EAAAgC,KAAA,WACAK,KAAAnC,IAAA,SAAA,QACAgb,KACA7Y,aAIAA,KAAAg9D,QAAAx7D,EAAA3D,IAAA2D,EAAA07D,SAAA17D,EAAA07D,SAAA,IAAArkD,OAGA,CACA,IAAAskD,EAAAX,EAAA55D,cACA,GAAA,YAAAu6D,GAAA,cAAAA,GAAA,WAAAA,GAAA,YAAAA,EAWA,OAVAn9D,KAAA8X,SAAA,WACA9X,KAAAnC,IAAA,CACA2C,QAAA,SACAwZ,YAAA,UAEAha,KAAA8X,SAAA,cACA9X,KAAAnC,IAAA,CACAu/D,QAAA,IACApjD,YAAA,aAEAmjD,GACA,IAAA,UACAn9D,KAAAq9D,QAAA77D,EAAA07D,SAAA17D,EAAA07D,SAAA,IAAArkD,GACA,MACA,IAAA,YACA7Y,KAAAs9D,UAAA97D,EAAA07D,SAAA17D,EAAA07D,SAAA,IAAArkD,GACA,MACA,IAAA,SACA7Y,KAAAu9D,OAAA/7D,EAAA07D,SAAA17D,EAAA07D,SAAA,IAAA,EAAArkD,GACA,MACA,IAAA,UACA7Y,KAAAu9D,OAAA/7D,EAAA07D,SAAA17D,EAAA07D,SAAA,IAAA,EAAArkD,OAIA,CACA,IAAA2kD,EAAA,SAAA/oB,GACA,IAAAgpB,EAAA,CACAjB,UAAA,eACAkB,WAAA,gBACAC,aAAA,kBACAC,gBAAA,sBAGA,IAAA,IAAAxxD,KAAAqxD,EACA,QAAApzD,IAAAoqC,EAAAxtB,MAAA7a,GACA,OAAAqxD,EAAArxD,GAVA,CAaA/P,SAAAQ,cAAA,SAGA,IAAA2/D,EAAA55D,cAAAZ,QAAA,OAAAhC,KAAA8X,SAAA,UACA9X,KAAAga,YAAA,WAEA,IAAAwiD,EAAA55D,cAAAZ,QAAA,OAAAhC,KAAA8X,SAAA,eACA9X,KAAAnC,IAAA,UAAA,GACAmC,KAAAga,YAAA,cAEAha,KAAAka,SAAA,YAAAsiD,GAAA1jD,GAAA0kD,EAAA,SAAAngE,GACAA,EAAAmc,SAAAxZ,OACA7C,EAAA6C,MAAAmc,IAAAqhD,IACA,IAAAhB,EAAA55D,cAAAZ,QAAA,QAKA7E,EAAA6C,MAAAka,SAAA,UAGA/c,EAAA6C,MAAAga,YAAA,YAAAwiD,GACA3jD,QAKA,OAAA7Y,QClGAxE,IAAAiC,IAAA,CZyCA2tC,QAAA,oBAAAyyB,UAAAA,UAAAlgE,EAAAid,WACAzd,OAAAA,oBAAAA,SAAAA,SAAAA,KAqDAA,QAAAA,CAuIAE,OAAAA,oBAAAA,OAAAA,OAAAA,KA2IA2jB,OAAA,oBAAA88C,SAAAA,SAAA,kCAUA/8C,SAAA,oBAAAg9C,WAAAA,WAAA,kCAkDApwD,WAAAA,oBAAAA,aAAAA,aAAAA,+BAGAA,iBAAAA,oBAAAA,aAAAA,aAAAA,+BAGAqwD,UAAA,oBAAAC,YAAAA,YAAA,KAIA9yB,iBAAA,oBAAA+yB,iBAAAA,iBAAA,KACA7yB,KAAA,oBAAAA,KAAAA,KAAA,KAwCA8yB,UAAA,GAEArjB,OAAA,KAwDAsjB,OAAA,GAsDA7jB,YAAA,GA2BAH,UAAA,GAMAb,OAAA,CAIA,CA0PAh4C,MAAA,UAqHAk4C,MAAA,SASA18C,KAAA,SAsDAM,SAAAA,WAEAA,IAAAA,IAAAA,QAAAA,aAmBA7B,IAAAiC,IAAAiuB,OAAAC,SAAA,GAAA,CAEAC,SAAA,IAnBAvuB,IAAAA,IAAAA,MAAAA,KAAAA,UAAAA,CAEAA,GAAAA,IAAAA,IAAAA,QA2BAA,CAEAA,MAAAA,UAEAo8C,MAAA,SAGA18C,KAAA,SAYAM,SAAAA,WAEAA,GAAAA,IAAAA,IAAAA,QAAAA,aAQA,CA4CA,IAAAghE,EAAA7iE,IAAAiC,IAAAiuB,OAAAC,SAAA,GAAA,CAwBApR,SAAAA,IA8FArQ,EAAAA,IAAAA,IAAAA,QAAAA,IAAAA,aAmQAmX,EAAAA,EAAAA,KAAAA,GA4DA7lB,IAAAC,QAAA+vB,eAAAC,kBAAAtG,EAAAxnB,EAAAgC,KAAA,SAAAysB,GAwNA,MAAAA,GAGAiyC,KAMAr+D,OAGAq+D,SA3sBAhhE,IAAAA,IAAAA,MAAAA,KAAAA,UAAAA,CAEAA,GAAAA,IAAAA,IAAAA,QAstBA,CAcAsqB,MAAAA,uBAGA8xB,MAAA,6BA0DA18C,KAAA,cAcA8b,SAAA,SAAAylD,GACA,IACAC,EADAC,EAAAhjE,IAAAC,QAAA2D,WAAAujB,cAAA,eAGA47C,EADA,EAAA5gE,EAAAC,KAAA0gE,GACA9iE,IAAA+Q,UAAAkyD,cAAAr5B,MAAAk5B,EAAArpD,eAGA,KA8KAzZ,IAAAiC,IAAA0jB,QAAAu4B,eGjgEAl+C,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAAq+C,EAAA/iE,IAAA+Q,UAAAkyD,cAAAr5B,MAAAs5B,MAAAljE,IAAAiC,IAAA0jB,QAAAm9C,aAAAxhE,IAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAAs5B,MASAljE,IAAAiC,IAAA0jB,QAAAw9C,YAAAJ,EAAA5gE,EAAAgC,KAAA,SAAAS,GAgDA,MAAAA,GAAA,MAAAA,EAAAk+D,aAMA9iE,IAAA60C,cAAAb,OAAAovB,YAAA,CAkBA7yC,QAAA,qFCxBAvwB,IAAA60C,cAAAb,OAAAc,cAAA,CAgBAhB,QAAAA,wBA4DAtvC,MAAArC,EAAAgC,KAAA,WA2HAnE,IAAAA,cAAAA,OAAAA,YAAAA,CA6FAuwB,QAAA,sFA+BA/rB,OA2IA80C,IAAAA,IAAAA,OAAAA,SAAAA,GAAAA,CA+BAt5C,SAAAA,KJ++CA,IAAAA,IAAAkG,MAAAuqB,KAAA4yC,UAAA,CAoBApqB,GAAAj5C,IAAAiC,IAAAC,IACA6gE,eAAAA,EACAC,YAAAA,MI75CA,CACAj9D,MAAA,YACAk4C,MAAA,YAEA18C,KAAA,YAQAkI,SAAAA,WAGAkzC,IAAAA,IAAAA,cAAAA,CAIA2mB,WAAA,iBC5sBAC,SAAA,SAAAh0C,EAAAtgB,GAoEA6vC,IAAAA,IAAAA,IAAAA,KAAAA,gBAAAA,QAAAA,CAIAzwB,UAAApf,EACAu0D,WAAAj0C,GACA,IAEAmlB,gBAAA,WACAvyC,IAAAA,IAAAA,QAAAA,KA8HA7B,OAAA4C,SAAAslB,KAAA,WAaAloB,OAAA4C,SAAAslB,KAAA,iBC3OAxoB,iBAAAA,SAAAA,GA+KA,IAAAyjE,EATA3vB,EAAAA,gBAAAA,OAQA9zC,IAAAiC,IAAAC,IAAAG,IAAA,MAAA,GAGAohE,EADAzjE,IAAAiC,IAAA+D,QAAA6pC,KACA,WAAA+P,EAAA,QAiDA,YAAA5/C,IAAAiC,IAAA0jB,QAAAjB,IAAA,YAAApV,WAAA,IAAAswC,EAAA,QAuJAj+C,EAAA8B,KAAA,CA2CAkB,IAAA8+D,EAAA,IAAAzjE,IAAAiC,IAAA2tC,QAEA/qC,OAAA,MA6JAqrC,SAAA,OACAh3B,QAAA/W,EAAAgC,KAAA,SAAA8B,GACAjG,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA7uC,EAAAsE,GAAAjG,IAAAiC,IAAAC,IAAA,KAAA,SAAA+2C,GACA,EAAA92C,EAAAC,KAAApC,IAAAiC,IAAAq9C,OAAAokB,YACA1jE,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,eAAA5/B,EAAA,gBAAA,CACA+hE,UAAA1jE,IAAAiC,IAAAq9C,OAAAokB,YAKA/hE,EAAAs3C,GAAA58B,KAAA,cAAAqH,KAAA,WACA,IAEAigD,EAFAhiE,EAAA6C,MAAAI,KAAA,QAEA0N,MAAA,KAkGA+lB,EAAAr4B,IAAAkG,MACA/D,EAAAuhB,KAAAigD,EAAA,SAAA3gD,GACAqV,EAAAA,EAAArV,KAWA,mBAAAqV,GA8EA,IAAAA,EAAA,CAiMA4gB,GAAAt3C,EAAA6C,MA4BAo/D,aAAAjiE,EAAA6C,MAAAI,KAAA,uBA8GAJ,SASAq/D,aAAA,SAAAC,GA8EAt/D,KAAAo6C,UAAAz8C,EAAA4hE,MAAAD,EAAAt/D,KAAAo6C,YA0FAklB,UAAA,SAAAA,GA8HAxO,UAAAA,IAAAA,QAAAA,cAAAA,YAAAA,KCl4CAwO,EAAA,CAAAA,IA4LA9jE,KAAAA,OAAAA,EAAAA,MAAAA,EAAAA,KAAAA,SAkBAy4D,gBAAAA,aAkvBAuL,sBAAA,WEv3BAhkE,KAAAA,aAAAA,IAAAA,IAAAA,aAAAA,CAEAkmB,YAAA5lB,OAAA4lB,YEnEA+9C,aAAA3jE,OAAA2jE,aACAC,UAAA,EAAA/hE,EAAAC,KAAA9B,OAAA6jE,sBAAA,IAAAr9D,KAAAxG,OAAA6jE,sBAAA,KCkEAC,SAAA,KAmGAp1B,YAAA,WACAxqC,KAAA6/D,kBAEA7/D,KAAAw/D,wBAEA1jE,OAAAgkE,QAAAhkE,OAAAgkE,OAAAC,iBAAAjkE,OAAAgkE,OAAAC,gBAAAC,WAAA,mBAAAlkE,OAAAgkE,OAAAC,gBAAAC,UAAAC,YACAnkE,OAAAgkE,OAAAC,gBAAAC,UAAAC,YAAA,CACAt7C,UAAAu7C,cAEApkE,OAAAqkE,SAAA,mBAAArkE,OAAAqkE,QAAAH,WACAlkE,OAAAqkE,QAAAH,UAAAE,aAwCA1kE,IAAAA,EAAAA,EAAAA,QC8CA,GDnCA4kE,EAAAt/D,OAAA,uEACAs/D,EAAAt/D,OAAA,mEAkJAtF,IAAAiC,IAAA+D,QAAA6pC,KA4DArrC,KAAAtC,IAAAP,EAAA,kBAAA6C,KAAAtC,IAAAP,EAAA,aC1bA3B,IAAAA,QAAAA,iBA8QA,MAAAA,IAAAiC,IAAAq9C,QAAA,EAAAn9C,EAAAC,KAAApC,IAAAiC,IAAAq9C,OAAAC,OAAA,CACAp9C,EAAAuhB,KAAA1jB,IAAAiC,IAAAq9C,OAAAC,MAAAp9C,EAAAgC,KAAA,SAAAy7C,GAEA5/C,IAAAiC,IAAA87C,OAAAn7B,KAAA,CACA7c,MAAA65C,EAAA75C,MACAk4C,MAAA,KAAA2B,EAAA3B,MACA18C,KAAA,UAAAq+C,EAAAr+C,KACA8b,SAAAlb,EAAAgC,KAAA,WACAK,KAAAqgE,iBAAAjlB,EAAAr+C,OACAiD,SAEAA,OA8yBA,IAAAg8C,GAAA,EA8EAn5B,EAAA/mB,OAAA4C,SAAAmkB,KAAAvkB,QAAA,IAAA,IAoNA,IAAAX,EAAAC,KAAAilB,GACAm5B,EAAA,MAAAr+C,EAAAo0C,UAAAv2C,IAAAiC,IAAAq9C,OAAAC,MAAA,CAAAoB,QAAA,KACA,IAAAt5B,EAAA7gB,QAAA,QACAg6C,EAAA,MAAAr+C,EAAAo0C,UAAAv2C,IAAAiC,IAAAq9C,OAAAC,MAAA,CAAAtB,MAAA52B,EAAAvkB,QAAA,KAAA,OAEA0B,KAAAsgE,YAAAtkB,QAEAh8C,KAAAsgE,aCn5BAxkE,OAAAykE,oBAAA,SAAAC,EAAArgE,GACAg7C,GAAA,OAAA,QAAA,EAAAx9C,EAAAC,KAAA4iE,GAAAA,EAAA,WAAA,QAAArgE,EAAA,CACAsgE,UAAA,SACAzsB,YAAAA,gBC1bAh0C,KAAA0gE,gBC8EAA,aAAA,WA+KA,IAAAC,EAAAxjE,EAAA,QAsHAwjE,EAAA7nD,GAAA,QAAA,sBAAA,SAAAzb,GAiDA,GAAA7B,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAAA,CAmEA,IAmFAC,EAnFAtnD,EAAApc,EAAAE,EAAAgc,eACAynD,EAAAvnD,EAAAmB,QAAA,6BAiCA5d,EAAAyc,EAAAnZ,KAAA,aAyFAygE,EAnCA,MAAArlE,IAAAiC,IAAA0jB,QAAA6D,QAmCA,IAAAxpB,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CAIAjkE,GAAAA,EACA+uB,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,KAwGA,IAAAtB,IAAAwkB,OAAAsf,SAAAo2B,QAAA,CAqBA54D,GAAAA,IChUA,IAAAtB,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CCpYAzyB,MAAAsyB,EAoGAI,QAAAA,IAAAA,IAAAA,QAAAA,QAWA9H,OAAA,WACA2H,EAAAjpD,KAAA,iBAAAskD,KAAA0E,EAAA3gD,IAAA,gBACA4gD,EAAAjpD,KAAA,iBAAAskD,KAAA0E,EAAA3gD,IAAA,sBA0BAygD,EAAA7nD,GAAA,QAAA,mBAAAnb,EAAAgC,KAAA,SAAAtC,GACA,IAAA6jE,EAAA/jE,EAAAE,EAAAgc,eA0FA4nD,EAAAA,EAAAA,KAAAA,SAyDAA,IAAAA,EAAAA,SAwEAA,EAAAA,EAAAA,KAAAA,UAyCAA,EAAAA,EAAAA,SAgBAA,UAAAA,UAAAA,UAAAA,EAAAA,OAUAA,EAAAA,GAAAA,SAOAA,IAAAA,cAAAA,OAAAA,cAAAA,CAGAl1C,QAAA,+BAOAk1C,OAQAA,EAAAA,GAAAA,QAAAA,kBAAAA,EAAAA,KAAAA,SAAAA,GAGAA,IAAAA,IAAAA,MAAAA,cAAAA,sBAAAA,CAcAA,aAAAA,EAAAA,EAAAA,eAAAA,SAAAA,YAsBAA,OAAAA,EAAAA,KAAAA,SAAAA,GAaAA,IAAAA,IAAAA,QAAAA,IAAAA,cAcAzlE,IAAAC,QAAA0lE,MAAAC,YAeAH,SAwFAA,OAMAA,EAAAA,GAAAA,QAAAA,mCAAAA,SAAAA,GAwNA,OArNA9jE,EAAA6C,MAAAs/C,OAAAxnC,SAAA,SAYA3a,EAAA6C,MAAAqhE,QAAA,kBAAAvb,QAAAjuC,KAAA,SAAAmC,YAAA,QA8BAmiD,EAAAA,MAAAA,KAAAA,kBAsFAlQ,YAAA,QA8BA9uD,EAAA6C,MAAA0a,QAAA,uBAAAk4B,IAAAz1C,EAAA6C,MAAA0a,QAAA,oBAAA5B,GAAA,qBAAA,SAAAzb,GAcAF,EAAA6C,MAAA6X,KAAA,oCAAAmC,YAAA,WAyCA,KAyBAsnD,SAAA,WAwEA,OAlEA,MAAAthE,KAAAuhE,UAAA,mBAAAA,WAMAvhE,KAAAuhE,SAAA,IAAAA,UA4DAvhE,KAAAuhE,UAoBAjB,WAAA,WAAA,IAAAkB,IAAA,EAAAp3D,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GAAAq3D,EAAA,EAAAr3D,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,EAkKAzM,EAAAA,IAAAA,QAAAA,WAAAA,cAAAA,aAkCA+jE,EAAAA,IAAAA,QAAAA,WAAAA,cAAAA,MAKAC,EAAA,oBAAAC,YAAAA,YAAA,KCjsCA5hE,KAAAmhB,QAAA,IAAA3lB,IAAAwkB,OAAA6hD,SAAAC,QAAA,CAGAn9C,UAAA,oBAAAu7C,YAAAA,YAAA,KAcA6B,aAAAA,oBAAAA,eAAAA,eAAAA,KAIAC,OAAA,oBAAAC,SAAAA,SAAA,KACAF,SAAAA,oBAAAA,WAAAA,WAAAA,KClBAvgE,YAAAA,EAAAA,EAAAA,KAAAA,GAAAA,EAAAA,KAoBAhG,UAAAA,EAAAA,EAAAA,KAAAA,GAAAA,EAAAA,IAmNAgmE,GAAA,EAAAxhE,KAAAmhB,QAAAjB,IAAA,UAkbA1kB,KAAAA,QAAAA,MAAAA,CAqKAA,OAAAA,EA+OAkZ,QAAA/W,EAAAgC,KAAAhC,EAAAgC,KAAA,WA0dA,IArdAnE,IAAAiC,IAAA+D,QAAA6pC,OAAA,IAAArrC,KAAAmhB,QAAAjB,IAAA,iBAAA,MAAAlgB,KAAAmhB,QAAA+4B,OAuKAl6C,KAAAmhB,QAAAisB,IAAA,eAAAptC,KAAAmhB,QAAA+4B,KAAAh6B,IAAA,iBAsKAlgB,KAAAmhB,QAAAisB,IAAA,SAAAptC,KAAAmhB,QAAA+4B,KAAAh6B,IAAA,YAwIAlgB,KAAAmhB,QAAAu4B,aAAA,CAmEAwoB,GAAAA,EAAAA,EAAAA,KAAAA,IAAAA,QAAAA,WAAAA,cAAAA,cAAAA,CA6CA,IAAAC,EAAAniE,KAAAmhB,QAAA+4B,KAAAh6B,IAAA,aACA,GAAA,EAAAiiD,EA0FA,OAxDA,IAAA3mE,IAAAkG,MAAA0gE,UAAAC,uBACAvmE,OAAAwmE,KAAA,kEAAAH,EAAAr3D,WAAA,UAgvBA,IAAA4W,EAAAlmB,IAAAiC,IAAAkkB,aAAAC,iBACA69C,EAAAjkE,IAAAiC,IAAAkkB,aAAA4gD,kBA+jCA5kE,GAAAA,KAAAA,QAAAA,IAAAA,gBAAAA,EAAAA,EAAAA,KAAAA,IAAAA,EAAAA,EAAAA,KAAAA,ICj6GA,YDsjHA6kE,KAAAA,QAAAA,oBAAAA,EAAAA,KAAAA,SAAAA,GAgDAxiE,KAAAyiE,SEvqHAngE,OCgCA9G,KAAAA,SC8EAwE,MAAAA,MAMAsU,MAAA3W,EAAAgC,KAAA,SAAA4uC,EAAA3jC,GAwJA,MAAAA,GAAA,IAAAA,EAAAuqB,OAmFAssC,EAAA,IAwCAA,IAqLAzhE,KAAAsgE,YAAA,EAAAmB,IAkYAjmE,KAAAA,SAqMA2D,QAsKAa,KAAAyiE,SA0GAC,cAAA,SAAAlhE,GA6GA,MAAAhG,IAAAiC,IAAA0jB,QAAA6D,QA0BAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA29C,yBAAAhlE,EAAAgC,KAAA,SAAAkgC,GAyCArkC,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,kBAgCA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA6a,aAAA,IAAArkC,IAAAk3C,YAAAhS,SAAAkiC,oBAAAjlE,EAAA2uC,OAAAzM,EAAA7f,OAAA,SAAA6iD,GA+BA,GAAAA,EAAA3iD,IAAA,mBAuIA,OAAA2iD,KAIArnE,IAAAiC,IAAA0jB,QAAA6D,QAAA6a,aAAA4Q,WAAA,GAiLA,MAAAj1C,IAAAiC,IAAA7B,WAoNAJ,IAAAiC,IAAA7B,UAAAW,SAsDAumE,EAAAA,cAAAA,MA+DAtnE,IAAAiC,IAAA7B,UAAA,IAAAJ,IAAAkG,MAAAqhE,IAAAC,aAAArlE,EAAAupB,SAAA1lB,GAAA,GAAA,CACAizC,GAAAj5C,IAAAiC,IAAAC,QCxwEAlC,QA4MAA,MAAAA,IAAAA,IAAAA,WA8FAA,IAAAiC,IAAA7B,UAAAW,SAMAf,IAAAiC,IAAA7B,UAAA,IAAAJ,IAAAkG,MAAAqhE,IAAAC,aAAArlE,EAAAupB,SAAA1lB,GAAA,GAAA,CAyBAizC,GAAAj5C,IAAAiC,IAAAC,SAaAulE,iBAAA,SAAAzoB,GACAx6C,KAAAu6C,YAAAn8B,KAAAo8B,IAoBAioB,MAAA,WACA,MAAAjnE,IAAAmhC,QAAAumC,gBAAAljE,KAAAmhB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyM,2BAiFA3nE,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAa,kBACAhiC,IAAAiC,IAAA4hE,aAAA7jE,IAAAmhC,QAAAumC,eAAA9oB,WAEA5+C,IAAAiC,IAAA6hE,UAAA9jE,IAAAmhC,QAAAumC,eAAA3pB,SA6FAv5C,KAAA0rB,OAAA,IAAAlwB,IAAA49C,QAAAC,WAYA55B,SAAA2D,QAAA1X,SAIA03D,KAAAA,OAAAA,UC5OA5nE,IAAAkG,MAAA25C,QAAA,WAgQA,SAAAgoB,EAAA3lE,GAAAqtC,gBAAA/qC,KAAAqjE,GAqPArjE,KAAAtC,IAAAA,EArfA,OAAAutC,aAAAo4B,EAAA,CAAA,CAAAziE,IAAA,aAAAtB,MA0gBA,SAAAu0B,EAAAryB,GACAxB,KAAAsjE,mBAuBA,IAAAC,EAAApmE,EAAA,SA2qBA,OAnpBA6C,KAAAtC,IAAAoD,OAAAyiE,IA2CAvjE,KAAAtC,IAAA6lE,GACArpD,SAAA,cAsPAla,KAAA6zB,KAAA,IAAAA,EAAAl2B,EAAAupB,SAAA1lB,GAAA,GAAA,CAwRAizC,GAAAz0C,KAAAtC,OAyFAsC,KAAA6zB,OA7sCA,CAAAjzB,IAAA,gBAAAtB,MCtSA,SAAAsB,EAAA4iE,GAoDA/gE,GAAAA,KAAAA,MAAAA,KAAAA,gBAAAA,IAAAA,MAAAA,QAAAA,gBAAAA,KAAAA,KAAAA,MAAAA,KAAAA,EAgBAA,KAAAA,KAAAA,YAAAA,OAYAH,CCmUAtC,KAAA6zB,gBAAAr4B,IAAAkG,MAAA+hE,QAAAC,gBClaA1jE,KAAAsjE,mBAKA,IAAAh0B,EAAAtvC,KAIAyjE,EAAA,IAAAjoE,IAAAwkB,OAAAyjD,QAAAC,eAAA,CAIAC,WAAA/iE,IAQA6iE,EAAA53B,MAAA,CAOAn3B,QAAA,WAEA1U,KAAA6zB,MAAA7zB,KAAA6zB,gBAAAr4B,IAAAkG,MAAA+hE,QAAAC,gBAAA1jE,KAAA6zB,KAAA0a,MAAAzxC,KAAA2mE,EAAA3mE,GACAkD,KAAA6zB,KAAA+vC,YAAAJ,IAEAl0B,EAAAg0B,mBACAh0B,EAAAu0B,WAAAroE,IAAAkG,MAAA+hE,QAAAC,eAAA,CACAjvB,GAAAnF,EAAA5xC,IACA6wC,MAAAk1B,EAIAG,YAAAJ,WH6QA,CAAA5iE,IAAA,2BAAAtB,MGpOAwkE,WAEA,GAAA9jE,KAAA6zB,MAAA7zB,KAAA6zB,gBAAAr4B,IAAAkG,MAAAo9B,WAAAilC,wBAoCA,CACA/jE,KAAAsjE,mBAWA9nE,IAAAA,EAAAA,KAWAwoE,EAAAA,IAAAA,IAAAA,YAAAA,WAAAA,iBAAAA,KAAAA,CAIAn/C,QAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAiCAo/C,aAAAA,IAAAA,IAAAA,QAAAA,YAAAA,QAAAA,eAAAA,IAAAA,IAAAA,QAAAA,YAAAA,QAAAA,eAAAA,IAAAA,IAAAA,QAAAA,IAAAA,kBAeAC,EAAAr4B,MAAA,CACAn3B,QAAA,WAcA46B,EAAAu0B,WAAAroE,IAAAkG,MAAAo9B,WAAAilC,mBAAA,CAgBArW,WAAAwW,KAOAvmE,MAAAA,SAAAA,EAAAA,GAKA,IAAAnC,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAA43C,0BAAA,CAGAxmE,MAAAA,EAoCAiN,OAAAA,UHiCA,CAAAhK,IAAA,oBAAAtB,MGkDA,SAAAkC,GACAxB,KAAAs7C,YAAA,IAAA9/C,IAAAkG,MAAA0iE,OAAAC,YAAA1mE,EAAAsC,OAAAuB,EAAA,CAQA20C,QAAAx4C,EAAAgC,KAAA,WAIA2vC,KAAAA,cAkBAtvC,KAAAs7C,YAAA,OC7SAt7C,WJ4NA,CAAAY,IAAA,mBAAAtB,MK6mBA,WAgBAU,KAAA6zB,OACA7zB,KAAA6zB,KAAAt3B,SACAyD,KAAA6zB,KAAA,UL/nBAwvC,EAAA,GbjUA7nE,IAAAwkB,OAAAiM,KAAA,GAGAzwB,IAAAk3C,YAAAzmB,KAAA,GAGAzwB,IAAAkG,MAAAuqB,KAAA,GAEAzwB,IAAAkG,MAAAuqB,KAAAq4C,OAAA9oE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,YAEA0W,OAAA,CACA8wB,0CAAA,eACAC,qBAAA,gBACAC,6BAAA,kBAEAzwB,WAAA,WACA,MAAA,CACA0wB,SAAA1kE,KAAA0kE,SACAljE,QAAAxB,KAAAwB,UAGAmjE,aAAA,SAAAtnE,GACA,GAAA,KAAAA,EAAAunE,MAQA,OAPAvnE,EAAAC,iBACA,MAAA9B,IAAAiC,IAAAkkB,cAAAnmB,IAAAiC,IAAAkkB,aAAAi+C,QACA5/D,KAAA6kE,cAGA7kE,KAAA8kE,UAEA,GAGAC,cAAA,WACA,MAAAvpE,IAAAiC,IAAAkkB,cAAAnmB,IAAAiC,IAAAkkB,aAAAi+C,QACA5/D,KAAA6kE,cAGA7kE,KAAA8kE,UAGAD,YAAA,WACA7kE,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,UAGA,IAAA8hB,EAAAjlE,KAAA7C,EAAA,gBAQA,GAPA8nE,EAAAxsD,KAAA,YAAA,GAGA,EAAAzY,KAAA7C,EAAA,mBAAAT,SAAAsD,KAAAklE,gBACAllE,KAAA0kE,SAAA1kE,KAAA7C,EAAA,mBAAAyE,OAGA5B,KAAAwB,QAAA2jE,QAAA,IAAAnlE,KAAAklE,cACA,IAAA1pE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACA,CACAI,UAAA,WACAD,MAAAU,KAAA0kE,cAGAxkD,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAS,GACAA,EAAAw/D,QACA9jE,OAAA4C,SAAAslB,KAAA5jB,EAAAglE,WAGAplE,KAAAklE,eAAA,EACAllE,KAAA+rC,WAEA/rC,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAK,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA,mBACAjsB,WAEA,CACA,IAAAslE,EAAAtlE,KAAA7C,EAAA,mBAAAyE,MACA,GAAA,IAAAjE,EAAAC,KAAAoC,KAAA0kE,WAAA,IAAA/mE,EAAAC,KAAA0nE,GACA,OAEA9pE,IAAAiC,IAAAkkB,aAAA4jD,iBAAAvlE,KAAA0kE,SAAAY,EAAA3nE,EAAAgC,KAAA,SAAA+U,EAAAJ,GACA,GAAAI,EAAA,CACA,IAAAyQ,EAAA3pB,IAAAiC,IAAA0jB,QAAAjB,IAAA,aACA,GAAA,EAAAviB,EAAAC,KAAAunB,GACA3pB,IAAAiC,IAAA0jB,QAAA0qB,MAAA,CACAn3B,QAAA,WACAlZ,IAAAC,QAAA+vB,eAAAC,kBAAAtG,EAAAxnB,EAAAgC,KAAA,SAAAysB,GACA,MAAAA,GACApsB,KAAAqlE,YAAAj5C,IAEApsB,cAIA,CACA,IAAA4iB,EAAA,IACApnB,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,KACA,EAAAn/B,EAAAC,KAAApC,IAAAiC,IAAAiuB,OAAAivB,eACA/3B,GAAApnB,IAAAiC,IAAAiuB,OAAAivB,YACAn/C,IAAAiC,IAAAiuB,OAAAivB,YAAA,KACA7+C,OAAA4C,SAAAJ,QAAAskB,IAEA9mB,OAAA4C,SAAA8mE,UAGA1pE,OAAA4C,SAAAkkB,OAIA,CAwBA,IAAAnI,EAtBA,GADAwqD,EAAAxsD,KAAA,YAAA,GACA,YAAAnE,GAAA,qBAAAA,EACA,IAAA9Y,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,gBACAG,MAAAc,KAAAqlE,uBAGAvlD,MAAAxgB,KAAA,SAAA0wC,GACA,IAAA50C,IAAAkG,MAAAuqB,KAAAy5C,mBAAA,CACAt1B,QAAAA,EACAu1B,WAAA,EACAC,oBAAA,MAEAz5C,KAAAxuB,EAAAgC,KAAA,WACAK,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA,mBACAjsB,YAMAya,EAFA,EAAA9c,EAAAC,KAAA0W,KAAA,WAAAA,EAAAW,eAAA,gBAAAX,EAAAW,gBACA,EAAAX,EAAAuxD,eACA,oCAAAvxD,EAAAuxD,eAAA/6D,WAAA,2CASA,EAAAnN,EAAAC,KAAA0W,GACA9Y,IAAAwwB,OAAAC,KAAA3X,EAAAW,eAGAzZ,IAAAwwB,OAAAC,KAAA,iBAEAjsB,KAAAwB,QAAA2jE,OACAnlE,KAAA0kE,SAAA,KACA1kE,KAAAklE,cAAA,KACAllE,KAAA8lE,UAAArrD,EACAza,KAAA+rC,UAGA/rC,KAAAqlE,YAAA5qD,KAIAza,SAGA8kE,OAAA,WACA9kE,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,UAGA,IAAA8hB,EAAAjlE,KAAA7C,EAAA,gBAOA,GANA8nE,EAAAxsD,KAAA,YAAA,GAEA,IAAA9a,EAAAC,KAAAoC,KAAA0kE,YACA1kE,KAAA0kE,SAAA1kE,KAAA7C,EAAA,mBAAAyE,OAGA5B,KAAAwB,QAAA2jE,QAAA,IAAAnlE,KAAAklE,cACA,IAAA1pE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACA,CACAI,UAAA,WACAD,MAAAU,KAAA0kE,cAGAxkD,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAS,GACAA,EAAAw/D,QACA9jE,OAAA4C,SAAAslB,KAAA5jB,EAAAglE,WAGAplE,KAAAklE,eAAA,EACAllE,KAAA+rC,WAEA/rC,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAK,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA,mBACAjsB,WAEA,CACA,IAAAslE,EAAAtlE,KAAA7C,EAAA,mBAAAyE,MACA,GAAA,IAAAjE,EAAAC,KAAAoC,KAAA0kE,WAAA,IAAA/mE,EAAAC,KAAA0nE,GACA,OAEA,IAAA9pE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAGAiB,KAAA,CACAskE,SAAA1kE,KAAA0kE,SACAY,SAAAA,KAEA7lE,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,GAAAA,EAAAsU,QAAA,CACA,IAAAqxD,EAAA/lE,KAAA7C,EAAA,mBAAAsb,KAAA,WACAjd,IAAAC,QAAA0qB,cAAAK,UAAA,cAAApmB,EAAAmmB,OAAAw/C,EAAA,EAAA,MACAvqE,IAAAC,QAAA0qB,cAAAK,UAAA,YAAApmB,EAAAukB,WAEA,IAAAqhD,EAAAroE,EAAAgC,KAAA,WACA,IAAAwlB,EAAA3pB,IAAAiC,IAAA0jB,QAAAjB,IAAA,aACA,GAAA,EAAAviB,EAAAC,KAAAunB,GACA3pB,IAAAiC,IAAA0jB,QAAA0qB,MAAA,CACAn3B,QAAA,WACAlZ,IAAAC,QAAA+vB,eAAAC,kBAAAtG,EAAAxnB,EAAAgC,KAAA,SAAAysB,GACA,MAAAA,GACApsB,KAAAqlE,YAAAj5C,IAEApsB,cAIA,CACA,IAAA4iB,EAAA,IACApnB,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,KACA,EAAAn/B,EAAAC,KAAApC,IAAAiC,IAAAiuB,OAAAivB,eACA/3B,GAAApnB,IAAAiC,IAAAiuB,OAAAivB,YACAn/C,IAAAiC,IAAAiuB,OAAAivB,YAAA,KACA7+C,OAAA4C,SAAAJ,QAAAskB,IAEA9mB,OAAA4C,SAAA8mE,UAGA1pE,OAAA4C,SAAAkkB,IAGA5iB,MAuCAgmE,QAGA,CAwBA,IAAAvrD,EAtBA,GADAwqD,EAAAxsD,KAAA,YAAA,GACA,YAAArY,EAAAkU,MACA,IAAA9Y,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,gBACAG,MAAAc,EAAAqlE,uBAGAvlD,MAAAxgB,KAAA,SAAA0wC,GACA,IAAA50C,IAAAkG,MAAAuqB,KAAAy5C,mBAAA,CACAt1B,QAAAA,EACAu1B,WAAA,EACAC,oBAAA,MAEAz5C,KAAAxuB,EAAAgC,KAAA,WACAK,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA,mBACAjsB,YAMAya,EAFA,WAAAra,EAAAkU,OACA,IAAAlU,EAAAylE,eACA,+DAEA,EAAAzlE,EAAAylE,eACA,oCAAAzlE,EAAAylE,eAAA/6D,WAAA,2CAGAtP,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,OAIA9Y,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,OAEAtU,KAAAwB,QAAA2jE,OACAnlE,KAAA0kE,SAAA,KACA1kE,KAAAklE,cAAA,KACAllE,KAAA8lE,UAAArrD,EACAza,KAAA+rC,WAGA/rC,KAAA0kE,SAAA,KACA1kE,KAAAqlE,YAAA5qD,MAIAza,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAA0kE,SAAA,KACA1kE,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAAg6C,WACA,IAAAzqE,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAC,aAAA,CACAlY,MAAA8X,EACAxhB,OAAAA,KAEA5K,SAGAkmE,eAAA,WACA,IAAA1qE,IAAAkG,MAAAuqB,KAAAk6C,2BAEAd,YAAA,SAAA/wD,GACAtU,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GACAzY,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAA7C,EAAA,oBAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,OAKA9Y,IAAAkG,MAAAuqB,KAAAm6C,gBAAA5qE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBAEA0W,OAAA,CACA4yB,4BAAA,mBACAC,0BAAA,kBACAC,gCAAA,UAEAC,gBAAA,SAAAnpE,GAAA,IAAAopE,EAAAzmE,KACA,GAAA,oBAAApE,WAAAyB,EAAA6G,cAAAwiE,eAAArpE,EAAA6G,cAAAwiE,cAAAl8C,QACA5uB,UAAA+pB,YAAAghD,MAAA,CACA5pE,KAAA,mBACAsxB,KAAA,SAAAu4C,GACA,GAAA,YAAAA,EAAA7E,MAAA,CACA1kE,EAAAC,iBACA,IAAAupE,EAAAxpE,EAAA6G,cAAAwiE,cAAAl8C,QAAA,cAEA0mB,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,qBAAAyE,IAAAilE,EAAAvoE,QAAA,SAAA,MACAmoE,GAAA,UAGAv1B,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,qBAAAyE,IAAA5B,KAAA7C,EAAA,qBAAAyE,MAAAtD,QAAA,SAAA,MACAmoE,GAAA,YAIA,GAAA3qE,OAAA4qE,eAAA5qE,OAAA4qE,cAAAl8C,QAAA,CACAntB,EAAAC,iBAGA,IAAAupE,EAAA/qE,OAAA4qE,cAAAl8C,QAAA,QACA0mB,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,qBAAAyE,IAAAilE,EAAAvoE,QAAA,SAAA,MACA0B,MAAA,OAGA8mE,iBAAA,SAAAzpE,GACA,GAAA,KAAAA,EAAAunE,MAQA,OAPA,MAAAppE,IAAAiC,IAAAkkB,cAAAnmB,IAAAiC,IAAAkkB,aAAAi+C,QACA5/D,KAAA6kE,cAGA7kE,KAAA8kE,SAEAznE,EAAAC,kBACA,GAGAwnE,OAAA,WACA9kE,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,UAGA,IAAAh+B,EAAAnlB,KAAA7C,EAAA,qBAAAyE,MACA,KAAAjE,EAAAC,KAAAunB,IAKAnlB,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GAEAjd,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,IACAthC,IAAAC,QAAA+vB,eAAAC,kBAAAtG,EAAAxnB,EAAAgC,KAAA,SAAAysB,GACA,MAAAA,GACApsB,KAAAqlE,YAAAj5C,GAEApsB,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,IACAzY,OAGA,IAAAxE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,MAEA,CACAA,SAAA,aACAG,MAAA6lB,OAGAjF,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAC,IACA,IAAAA,EAAAoC,QAAA,gBACAlG,OAAA4C,SAAAkB,GAEA,IAAAA,EAAAoC,QAAA,KACAlG,OAAA4C,SAAAkB,EAAAiC,UAAA,GAGA7B,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAAC,YAEAlsB,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAAg6C,WACAjmE,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GACA,IAAAjd,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAC,aAAA,CACAlY,MAAA8X,EACAxhB,OAAAA,KAEA5K,QA1CAA,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA86C,aA6CA1B,YAAA,SAAA/wD,GACAtU,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GACAzY,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAA7C,EAAA,+BAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,OAKA9Y,IAAAkG,MAAAuqB,KAAA+6C,UAAAxrE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,cACAsY,kBAAA,GAEA5B,OAAA,GACAc,YAAA,WACA,IAAA/4C,IAAAkG,MAAAuqB,KAAAg7C,KAAAtpE,EAAAupB,SAAAvpB,EAAAupE,KAAAlnE,KAAAwB,QAAA,YAAA,CACAizC,GAAAz0C,KAAA7C,EAAA,eACAoxC,MAAAvuC,KAAAuuC,YAKA/yC,IAAAkG,MAAAuqB,KAAAg7C,KAAAzrE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,QACAoqC,sBAAA,GACAlsB,aAAA,GAEApY,MAAA,CACAukC,QAAA,UACAC,QAAA,UACAC,eAAA,iBACAC,uBAAA,0BAEA9zB,OAAA,CACA+zB,0BAAA,eACAC,+BAAA,wBACAC,+BAAA,wBACAC,sBAAA,SACAC,0BAAA,eACAC,gCAAA,wBACAC,gCAAA,wBACAC,qBAAA,SACAC,iCAAA,sBACAC,sCAAA,uBACAC,6BAAA,iBAEAp0B,kBAAA,WACA,IAAAq0B,EAAA3sE,IAAAC,QAAA2D,WAAAujB,cAAA,OAAA,GACA,EAAAhlB,EAAAC,KAAAuqE,KACAnoE,KAAA8lE,UAAAtqE,IAAAwwB,OAAAC,KAAAk8C,EAAAlzD,gBAGAjV,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAAs3C,MAAAC,KAEA,IAAA6Q,EAAA5sE,IAAAiC,IAAA0jB,QAAA0D,QACA,MAAAujD,GACApoE,KAAAuuC,MAAAnB,IAAA,CACAi7B,YAAAD,EAAAloD,IAAA,eACAooD,YAAAF,EAAAloD,IAAA,eACAqoD,MAAAH,EAAAloD,IAAA,YAIA+zB,aAAA,WACA,MAAAj0C,KAAAwB,QAAAgnE,OACAxoE,KAAAwB,QAAAgnE,KAAAxoE,KAAA6iC,MAAAukC,UAGApzB,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACA/sC,QAAAxB,KAAAwB,QACAqhC,MAAA7iC,KAAA6iC,QAGA0R,YAAA,WACA,MAAAv0C,KAAA8lE,YACA9lE,KAAAyoE,kBAAAzoE,KAAA8lE,WACA9lE,KAAA8lE,UAAA,MAGA,IAAAtqE,IAAAi8D,OAAAz3D,KAAA7C,EAAA,iBAAA6C,KAAAuuC,MAAA,CACAmpB,cAAA,CACA,YAIAgR,aAAA,WACA1oE,KAAAwB,QAAAgnE,KAAAxoE,KAAA6iC,MAAAukC,QACApnE,KAAA+rC,UAEA48B,sBAAA,SAAAtrE,GACA,KAAAA,EAAA4b,SACAjZ,KAAA7C,EAAA,0BAAAm+D,SAGAsN,sBAAA,SAAAvrE,GACA,KAAAA,EAAA4b,UACA,MAAAzd,IAAAiC,IAAAkkB,cAAAnmB,IAAAiC,IAAAkkB,aAAAi+C,QACA5/D,KAAA6kE,cAGA7kE,KAAA8kE,WAIA2D,kBAAA,SAAAn0D,GACAtU,KAAA6oE,YAAA,IAAArtE,IAAAygE,MAAAj8D,KAAA7C,EAAA,4BAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,IAEAtU,KAAA7C,EAAA,iBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,YAEA2I,OAAA,WACA,IAAAJ,EAAA1kE,KAAA7C,EAAA,0BAAAyE,MACA0jE,EAAAtlE,KAAA7C,EAAA,0BAAAyE,MAEA,IAAAjE,EAAAC,KAAA8mE,IAAA,IAAA/mE,EAAAC,KAAA0nE,KAGAtlE,KAAA7C,EAAA,iBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,iBAEAn8D,KAAA6oE,aACA7oE,KAAA6oE,YAAA1lB,UAGA,IAAA3nD,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAGAiB,KAAA,CACAskE,SAAAA,EACAY,SAAAA,KAEA7lE,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACAA,EAAAsU,SACAlZ,IAAAC,QAAA0qB,cAAAK,UAAA,cAAApmB,EAAAmmB,QACA/qB,IAAAC,QAAA0qB,cAAAK,UAAA,YAAApmB,EAAAukB,WACA3kB,KAAAwB,QAAAy5C,YACAn/C,OAAA4C,SAAAslB,KAAA,IAGAtlB,SAAA8mE,UAIAxlE,KAAAyoE,kBAAAjtE,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,SAEAtU,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAyoE,kBAAAjtE,IAAAwwB,OAAAC,KAAAg6C,WACA,IAAAzqE,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAC,aAAA,CACAlY,MAAA8X,EACAxhB,OAAAA,KAEA5K,SAEA8oE,aAAA,WACA9oE,KAAAwB,QAAAgnE,KAAAxoE,KAAA6iC,MAAAwkC,QACArnE,KAAA+rC,UAEAg9B,sBAAA,SAAA1rE,GACA2C,KAAAgpE,qBACA,KAAA3rE,EAAA4b,SACAjZ,KAAA7C,EAAA,2BAAAm+D,SAGA2N,sBAAA,SAAA5rE,GACA2C,KAAAgpE,qBACA,KAAA3rE,EAAA4b,SACAjZ,KAAAkpE,UAGAF,mBAAA,WACA,IAAAG,EAAAxrE,EAAAC,KAAAoC,KAAA7C,EAAA,2BAAAyE,OACAwnE,EAAAzrE,EAAAC,KAAAoC,KAAA7C,EAAA,2BAAAyE,OACA5B,KAAA7C,EAAA,gBAAAsb,KAAA,WAAA,IAAA0wD,GAAA,IAAAC,IAEAF,OAAA,WACA,IAAAxE,EAAA1kE,KAAA7C,EAAA,2BAAAyE,MACA0jE,EAAAtlE,KAAA7C,EAAA,2BAAAyE,MAEA,IAAAjE,EAAAC,KAAA8mE,IAAA,IAAA/mE,EAAAC,KAAA0nE,KAGAtlE,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,iBAEAn8D,KAAAqpE,aACArpE,KAAAqpE,YAAAlmB,UAGA,IAAA3nD,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAGAiB,KAAA,CACAioE,YAAAroE,KAAAuuC,MAAAruB,IAAA,eACAooD,YAAAtoE,KAAAuuC,MAAAruB,IAAA,eACAqoD,MAAAvoE,KAAAuuC,MAAAruB,IAAA,SACAwkD,SAAAA,EACAY,SAAAA,KAEA7lE,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACAA,EAAAsU,SACAlZ,IAAAC,QAAA0qB,cAAAK,UAAA,cAAApmB,EAAAmmB,QACA/qB,IAAAC,QAAA0qB,cAAAK,UAAA,YAAApmB,EAAAukB,WACA3kB,KAAAwB,QAAAy5C,YACAn/C,OAAA4C,SAAAslB,KAAA,IAGAtlB,SAAA8mE,UAIAxlE,KAAAspE,kBAAA9tE,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,SAEAtU,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAspE,kBAAA9tE,IAAAwwB,OAAAC,KAAAs9C,kBACA,IAAA/tE,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAi9C,aAAA,CACAl1D,MAAA8X,EACAxhB,OAAAA,KAEA5K,SAEAspE,kBAAA,SAAAh1D,GACAtU,KAAAqpE,YAAA,IAAA7tE,IAAAygE,MAAAj8D,KAAA7C,EAAA,4BAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,IAEAtU,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,YAEAsN,oBAAA,WACAzpE,KAAAwB,QAAAgnE,KAAAxoE,KAAA6iC,MAAAykC,eACAtnE,KAAA+rC,UAEA29B,qBAAA,SAAArsE,GACA2C,KAAA2pE,4BACA,KAAAtsE,EAAA4b,SACAjZ,KAAA4pE,iBAGAD,0BAAA,WACA,IAAAR,EAAAxrE,EAAAC,KAAAoC,KAAA7C,EAAA,iCAAAyE,OACA5B,KAAA7C,EAAA,wBAAAsb,KAAA,WAAA,IAAA0wD,IAEAS,cAAA,WACA,IAAAlF,EAAA1kE,KAAA7C,EAAA,iCAAAyE,MAEA,IAAAjE,EAAAC,KAAA8mE,KAGA1kE,KAAA7C,EAAA,wBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,aAEAn8D,KAAA6pE,oBACA7pE,KAAA6pE,mBAAA1mB,UAGA3nD,IAAAC,QAAA67D,MAAAwS,kBAAApF,EAAA/mE,EAAAgC,KAAA,SAAAiL,GACAA,EAAA8J,QACA1U,KAAA+pE,6BAGA/pE,KAAAgqE,yBAAAp/D,EAAA0J,QAEAtU,SAEA+pE,2BAAA,WACA/pE,KAAAwB,QAAAgnE,KAAAxoE,KAAA6iC,MAAA0kC,uBACAvnE,KAAA+rC,UAEAi+B,yBAAA,SAAA11D,GACAtU,KAAA6pE,mBAAA,IAAAruE,IAAAygE,MAAAj8D,KAAA7C,EAAA,mCAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,IAEAtU,KAAA7C,EAAA,wBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,qBAIA3gE,IAAAkG,MAAAuqB,KAAAy5C,mBAAAlqE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,wBACAsY,kBAAA,EACAswB,WAAA,EACAC,oBAAA,GAEAnyB,OAAA,CACA+zB,0BAAA,aAEAvzB,aAAA,WACAj0C,KAAAwB,QAAAk1C,kBAAA12C,KAAAwB,QAAAmkE,UACA3lE,KAAAg0C,WAAA,CACAxyC,QAAAxB,KAAAwB,QACA8S,MAAAtU,KAAAwB,QAAA8S,MAAA9Y,IAAAwwB,OAAAC,KAAAjsB,KAAAwB,QAAA8S,OAAA9Y,IAAAwwB,OAAAC,KAAAjsB,KAAAwB,QAAA8S,OAAA9Y,IAAAwwB,OAAAC,KAAAs9C,iBAAA,OAGAh1B,YAAA,WACA,MAAAv0C,KAAAwB,QAAA4uC,SACA,IAAA50C,IAAAkG,MAAAuqB,KAAAg+C,cAAA,CACAx1B,GAAAz0C,KAAA7C,EAAA,wBACAizC,QAAApwC,KAAAwB,QAAA4uC,QACA85B,QAAAvsE,EAAAgC,KAAA,WACAK,KAAAwB,QAAA4uC,QAAA,KACApwC,KAAAwB,QAAAkT,SAAA,EACA1U,KAAA+rC,UACA/rC,SAIAmqE,UAAA,WACAnqE,KAAA64C,cACAr9C,IAAAiC,IAAAiuB,OAAAyuB,oBAKA3+C,IAAAkG,MAAAuqB,KAAAg+C,cAAAzuE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACA6sC,YAAA,CACAnB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBACAsW,aAAA,CACA+2B,qBAAA,IAAA5uE,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BAEAstC,oBAAA,GAEA52B,OAAA,CACA62B,8BAAA,kBACAC,4BAAA,iBAEAt2B,aAAA,WACAj0C,KAAAg0C,WAAA,CACAxyC,QAAAxB,KAAAwB,QACA4oE,qBAAApqE,KAAAwB,QAAA4uC,QAAApwC,KAAAwB,QAAA4uC,QAAAg6B,qBAAA,KACA91D,MAAAtU,KAAAwB,QAAA8S,MAAA9Y,IAAAwwB,OAAAC,KAAAjsB,KAAAwB,QAAA8S,OAAA9Y,IAAAwwB,OAAAC,KAAAjsB,KAAAwB,QAAA8S,OAAA9Y,IAAAwwB,OAAAC,KAAAs9C,iBAAA,OAGAh1B,YAAA,WACAv0C,KAAAwqE,6BAEAxqE,KAAA7C,EAAA,yBAAA,GAAAm+D,QACA,MAAAt7D,KAAAwB,QAAA4uC,SACApwC,KAAAyqE,6BAGAD,2BAAA,WACAxqE,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA+2B,qBAAApqE,KAAA7C,EAAA,0BAAA,CACAutE,OAAA1qE,KAAAwB,QAAA6oE,mBACAD,qBAAApqE,KAAAwB,QAAA4uC,QAAApwC,KAAAwB,QAAA4uC,QAAAg6B,qBAAA,QAGAK,0BAAA,WACA,IAAAE,EAAA3qE,KAAAwB,QAAA4uC,QAAAg6B,qBACAQ,EAAA5qE,KAAA7C,EAAA,yBAAAyE,MACAipE,GAAA,EAEAC,EAAA9qE,KAAA7C,EAAA,4BASA,GARA,GAAAQ,EAAAC,KAAAgtE,IACAC,GAAA,EACAC,EAAA5wD,SAAA,SAGA4wD,EAAA9wD,YAAA,SAGA2wD,EAAAI,iBAAA,CACA,IAAAC,EAAAhrE,KAAA7C,EAAA,2BACA0iB,EAAA+qD,EAAA98D,MAAA,IACA,IAAAnQ,EAAAC,KAAAiiB,IAAAA,EAAAorD,KAAA,SAAAC,EAAAvuE,EAAAiuB,GACA,OAAAA,EAAA1oB,YAAAgpE,KAAAvuE,KAEAkuE,GAAA,EACAG,EAAA9wD,SAAA,SAGA8wD,EAAAhxD,YAAA,QAIA,GAAA,EAAA2wD,EAAAQ,UAAA,CACA,IAAAC,EAAAprE,KAAA7C,EAAA,wBACAQ,EAAAC,KAAAgtE,GAAAD,EAAAQ,WACAN,GAAA,EACAO,EAAAlxD,SAAA,SAGAkxD,EAAApxD,YAAA,QAIA,GAAA,EAAA2wD,EAAAU,eAAA,CACA,IAAAC,EAAAtrE,KAAA7C,EAAA,2BACAQ,EAAAC,KAAApC,IAAAC,QAAAgiB,cAAAG,kBAAAgtD,IAAAD,EAAAU,gBACAR,GAAA,EACAS,EAAApxD,SAAA,SAGAoxD,EAAAtxD,YAAA,QAIA,GAAA,EAAA2wD,EAAAY,eAAA,CACA,IAAAC,EAAAxrE,KAAA7C,EAAA,2BACAQ,EAAAC,KAAApC,IAAAC,QAAAgiB,cAAAI,kBAAA+sD,IAAAD,EAAAY,gBACAV,GAAA,EACAW,EAAAtxD,SAAA,SAGAsxD,EAAAxxD,YAAA,QAIA,GAAA,EAAA2wD,EAAAc,aAAA,CACA,IAAAC,EAAA1rE,KAAA7C,EAAA,yBACAQ,EAAAC,KAAApC,IAAAC,QAAAgiB,cAAAK,gBAAA8sD,IAAAD,EAAAc,cACAZ,GAAA,EACAa,EAAAxxD,SAAA,SAGAwxD,EAAA1xD,YAAA,QAIA,GAAA,EAAA2wD,EAAAgB,iBAAA,CACA,IAAAC,EAAA5rE,KAAA7C,EAAA,8BACAQ,EAAAC,KAAApC,IAAAC,QAAAgiB,cAAAM,gBAAA6sD,IAAAD,EAAAgB,kBACAd,GAAA,EACAe,EAAA1xD,SAAA,SAGA0xD,EAAA5xD,YAAA,QAGAha,KAAA8Z,QAAA+wD,GAEAgB,gBAAA,SAAAxuE,GACA2C,KAAAyqE,4BACAzqE,KAAA7C,EAAA,uBAAAsb,KAAA,YAAAzY,KAAA8Z,SACA,KAAAzc,EAAA4b,SAAAjZ,KAAA8Z,SACA9Z,KAAA4pE,iBAGAA,cAAA,WACA,MAAA5pE,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,UAGAnjD,KAAA8Z,UAGA9Z,KAAA7C,EAAA,uBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,aAEA,IAAA3gE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,gBACAG,MAAAU,KAAAwB,QAAA4uC,QAAA/yB,QAGAjd,KAAA,CACAklE,SAAAtlE,KAAA7C,EAAA,yBAAAyE,SAEAnC,OAAAiV,QAAA/W,EAAAgC,KAAA,SAAAS,GACAA,EAAAsU,SACA1U,KAAAwB,QAAAkT,SAAA,EACA1U,KAAAwB,QAAA4uC,QAAA,KACApwC,KAAAkqE,YAGAlqE,KAAA7C,EAAA,uBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,mBACA,iBAAA/7D,EAAAkU,MACAtU,KAAAqlE,YAAA,4BAAArlE,KAAAwB,QAAA4uC,QAAAg6B,qBAAA0B,oBAAAhhE,WAAA,eAGA9K,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,UAGAtU,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAK,KAAAwB,QAAAkT,SAAA,EACA1U,KAAA+rC,UACA/rC,SAEAkqE,QAAA,WACA,mBAAAlqE,KAAAwB,QAAA0oE,QACAlqE,KAAAwB,QAAA0oE,UAGAlqE,KAAA+rC,UAGAs5B,YAAA,SAAA/wD,GACAtU,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAA7C,EAAA,oBAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,OAKA9Y,IAAAkG,MAAAuqB,KAAAk6C,0BAAA3qE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gCACAsY,kBAAA,EACAqB,mBAAA,GAEAjD,OAAA,CACAs4B,uCAAA,kBACAxB,4BAAA,iBAEAt2B,aAAA,WACAj0C,KAAAg0C,WAAA,CACAt/B,QAAA1U,KAAA0U,UAGA6/B,YAAA,WACA,IAAAy3B,EAAAhsE,KAAA7C,EAAA,kCACA,EAAAQ,EAAAC,KAAAouE,IACAA,EAAA,GAAA1Q,SAGA2Q,gBAAA,SAAA5uE,GACA2C,KAAA7C,EAAA,uBAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAAoC,KAAA7C,EAAA,kCAAAyE,QACA,KAAAvE,EAAA4b,SACAjZ,KAAA4pE,iBAGAA,cAAA,WACA,IAAAlF,EAAA1kE,KAAA7C,EAAA,kCAAAyE,MAEA,IAAAjE,EAAAC,KAAA8mE,KAGA1kE,KAAA7C,EAAA,uBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,aAEAn8D,KAAA6pE,oBACA7pE,KAAA6pE,mBAAA1mB,UAGA,IAAA3nD,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,yBAEA,CACA,CACAI,UAAA,eACAD,MAAA9D,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAA,eAAAj7D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAAAp7D,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAEA,CACA3gB,UAAA,WACAD,MAAAolE,OAGAjlE,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACAA,EAAAsU,SACA1U,KAAA0U,SAAA,EACA1U,KAAA+rC,UAGA/rC,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,SAEAtU,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAAs9C,kBACA,IAAA/tE,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAA2/C,oBAAA,CACA53D,MAAA8X,EACAxhB,OAAAA,KAEA5K,SAEAqlE,YAAA,SAAA/wD,GACAtU,KAAA6pE,mBAAA,IAAAruE,IAAAygE,MAAAj8D,KAAA7C,EAAA,mCAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,IAEAtU,KAAA7C,EAAA,uBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,qBAIA3gE,IAAAkG,MAAAuqB,KAAAkgD,UAAA3wE,IAAAkG,MAAAuqB,KAAAq4C,OAAArkE,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gBAEA0W,OAAA,CACA8wB,0CAAA,eACAC,qBAAA,gBACA4H,yBAAA,iBACA3H,6BAAA,kBAEA3wB,kBAAA,WACA,IAAAq0B,EAAA3sE,IAAAC,QAAA2D,WAAAujB,cAAA,OAAA,GACA,EAAAhlB,EAAAC,KAAAuqE,KACAnoE,KAAA8lE,UAAAtqE,IAAAwwB,OAAAC,KAAAk8C,EAAAlzD,gBAGAzZ,IAAAC,QAAAS,YAAA,wDACA8D,KAAAwB,QAAA2jE,MAAA3pE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2V,iBAEA93B,YAAA,WACA,MAAAv0C,KAAA8lE,YACA9lE,KAAAqlE,YAAArlE,KAAA8lE,WACA9lE,KAAA8lE,UAAA,MAGA9lE,KAAAwB,QAAA2jE,OAAA,EAAAxnE,EAAAC,KAAAoC,KAAA0kE,UACA1kE,KAAA7C,EAAA,mBAAA,GAAAm+D,QAGAt7D,KAAA7C,EAAA,mBAAA,GAAAm+D,QAGAt7D,KAAAssE,gBAAA,IAAA9wE,IAAAkG,MAAAuqB,KAAAm6C,gBAAA,CACA3xB,GAAAz0C,KAAA7C,EAAA,uBACAwuC,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BAGAvhC,IAAAiC,IAAA0jB,QAAAi7B,mBACAp8C,KAAAusE,kBAGAC,eAAA,WAEAhxE,IAAAiC,IAAA0jB,QAAAi7B,kBACAtgD,OAAA4C,SAAAslB,KAAA,wDAEAxoB,IAAAiC,IAAAiuB,OAAAC,SAAA,SAAA,CACAC,SAAA,KAIA2gD,eAAA,WACA,IAAAE,EAAAjxE,IAAAC,QAAAwwB,KAAAwgD,WACA,GAAA,EAAA9uE,EAAAC,KAAA6uE,GAAA,CACA,IAAAC,EAAAD,EAAAjnE,KAAAC,MAAAD,KAAAgY,SAAA7f,EAAAC,KAAA6uE,KACAzsE,KAAAw0C,mBAAA,EAAAk4B,EAAA1sE,KAAA7C,EAAA,yBAAA,GAAAQ,EAAAgC,KAAA,WACA,yBAAA+sE,EAAA5hC,MACA9qC,KAAA7C,EAAA,aAAAwvE,SAAA,CACA/4D,SAAA,KACAg5D,KAAA,cAGA5sE,WAKAxE,IAAAkG,MAAAuqB,KAAA4yC,UAAArjE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,eACAwhC,eAAA,KACAC,YAAA,MAEA/qB,OAAA,CACAs0B,qBAAA,SACA8E,yBAAA,iBACAC,iCAAA,aACAC,iCAAA,cAEAj5B,kBAAA,WACAt4C,IAAAC,QAAAS,YAAA,wDAEA8D,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAAs3C,MAAAC,KACA,IAAA6Q,EAAA5sE,IAAAiC,IAAA0jB,QAAA0D,QACA,MAAAujD,GACApoE,KAAAuuC,MAAAnB,IAAA,CACAi7B,YAAAD,EAAAloD,IAAA,eACAooD,YAAAF,EAAAloD,IAAA,eACA8sD,IAAA5E,EAAAloD,IAAA,OACAqoD,MAAAH,EAAAloD,IAAA,SACA+sD,MAAA7E,EAAAloD,IAAA,WAGA,EAAAviB,EAAAC,KAAApC,IAAAC,QAAA2D,WAAAujB,cAAA,QACA3iB,KAAAuuC,MAAAnB,IAAA,cAAA,GAGA,IAAA8/B,EAAA1xE,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAKA,OAJAp7D,IAAAiC,IAAA0jB,QAAAgsD,gBAAAD,GAAA,GAAAvvE,EAAAgC,KAAA,SAAAy+D,GACAp+D,KAAAo+D,OAAAA,EACAp+D,KAAA+rC,UACA/rC,QACA,GAEAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACA6vB,OAAAp+D,KAAAo+D,OACAG,eAAA,EAAAv+D,KAAAwB,QAAA+8D,eAAAv+D,KAAAwB,QAAA+8D,eAAA,OAGAhqB,YAAA,WACA,MAAAv0C,KAAAwB,QAAAg9D,cACAx+D,KAAAwB,QAAAg9D,YAAAhjE,IAAAC,QAAA2D,WAAAujB,cAAA,gBAEA,IAAAnnB,IAAAi8D,OAAAz3D,KAAAtC,IAAAsC,KAAAuuC,MAAA,CACAmpB,cAAA,CACA,SAEA0V,YAAAzvE,EAAAgC,KAAA,SAAAq1D,EAAA10D,EAAAsB,KAEA5B,QAGAxE,IAAAC,QAAAgc,aAAAqD,eAAA9a,KAAA7C,EAAA,iBAEA,IAAA3B,IAAAiC,IAAA0jB,QAAAjB,IAAA,aACA,IAAA1kB,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACAkwE,iBAAA,cACAC,OAAA,MAAA9xE,IAAAC,QAAA6xE,OAAAC,YACAtrB,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,cAAA9tC,GACA,QAAAA,EACAU,KAAA7C,EAAA,iBAAA6c,YAAA,UAGAha,KAAA7C,EAAA,iBAAA+c,SAAA,WAEAla,QAIA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,kBACAkwE,iBAAA,gBACAG,YAAA,EACA1rB,cAAA,EACA6S,YAAA,EACA3uC,OAAA,wJACAsnD,OAAA,MAAA9xE,IAAAC,QAAA6xE,OAAAC,YACAtrB,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,SAAA9tC,IACAU,MACA+hD,aAAApkD,EAAAshB,IAAAjf,KAAAuuC,MAAAruB,IAAA,UAAA,SAAA5B,GACA,OAAAA,EAAAmvD,YAIAztE,KAAA0tE,YAAA,IAAAlyE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,kBACAkwE,iBAAA,eACAtrB,aAAA,KACAE,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,UAAA9tC,EAAA2V,eACAjV,KAAAuuC,MAAAnB,IAAA,MAAA,IACAptC,KAAA2tE,kBACA3tE,QAEAA,KAAA2tE,iBAEAnyE,IAAAiC,IAAA0jB,QAAAi7B,mBACAp8C,KAAAusE,kBAGAA,eAAA,WACA,IAAAE,EAAAjxE,IAAAC,QAAAwwB,KAAAwgD,WACA,GAAA,EAAA9uE,EAAAC,KAAA6uE,GAAA,CACA,IAAAC,EAAAD,EAAAjnE,KAAAC,MAAAD,KAAAgY,SAAA7f,EAAAC,KAAA6uE,KACAzsE,KAAAw0C,mBAAA,EAAAk4B,EAAA1sE,KAAA7C,EAAA,yBAAA,MAGAywE,cAAA,WACA,IAAA9zD,GAAA,EACA+zD,EAAA,IAAAlwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,gBACA4tD,EAAA,IAAAnwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,gBACA6tD,EAAA,IAAApwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,aACA8tD,EAAA,IAAArwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,aACA+tD,EAAA,GAAAtwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,QACAguD,EAAA,IAAAvwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,UACAiuD,EAAA,IAAAxwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,UACAkuD,EAAA,IAAAzwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,gBACAmuD,EAAA,IAAA1wE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,WA+BA,OA7BA1kB,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA0wE,GACAryE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA2wE,GACAtyE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,gBAAA+wE,GACA1yE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,gBAAAgxE,GACA3yE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,cAAA8wE,GACAzyE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,0BAAA4wE,GACAvyE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,0BAAA6wE,GAEAH,GAAAC,GAAAC,GAAAC,GAAAE,GAAAC,GAAAF,IACAjuE,KAAAqlE,YAAA,0DACAvrD,GAAA,GAGA,IAAAte,IAAAiC,IAAA0jB,QAAAjB,IAAA,cACAkuD,IACApuE,KAAAqlE,YAAA,gCACAvrD,GAAA,GAEAte,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,wBAAAixE,GAEA,QAAApuE,KAAAuuC,MAAAruB,IAAA,iBACAmuD,IACAruE,KAAAqlE,YAAA,gCACAvrD,GAAA,GAEAte,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,kBAAAkxE,KAIAv0D,GAEA6zD,eAAA,WACA3tE,KAAAuuC,MAAAruB,IAAA,YACAlgB,KAAAuuC,MAAAnB,IAAA,UAAA,MAEA,IAAAxzB,EAAA,EAAAjc,EAAAC,KAAAoC,KAAA0tE,YAAApV,YAAAt4D,KAAA0tE,YAAApV,WAAA11D,cAAA,KAGApH,IAAAC,QAAAgc,aAAAwD,aAAAjb,KAAA7C,EAAA,cAAAyc,IAEAugC,eAAA,WACA3+C,IAAAiC,IAAAiuB,OAAAyuB,kBAEAm0B,WAAA,SAAAjxE,GACA,KAAAA,EAAA4b,SACAjZ,KAAAkpE,UAGA7D,YAAA,SAAA/wD,GACAtU,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GACAzY,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAA7C,EAAA,oBAAA,CACA4D,KAAA,SACAo7D,KAAA7nD,KAGA40D,OAAA,WAKA,GAJAlpE,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,UAGAnjD,KAAA4tE,gBAAA,CAIA5tE,KAAA7C,EAAA,gBAAAsb,KAAA,YAAA,GAEA,IAAA81D,EAAA,GACA,MAAAvuE,KAAAwB,QAAA+8D,gBACAgQ,EAAAnwD,KAAA,CACA7e,UAAA,iBACAD,MAAAU,KAAAwB,QAAA+8D,iBAGA,MAAAv+D,KAAAwB,QAAAg9D,aACA+P,EAAAnwD,KAAA,CACA7e,UAAA,cACAD,MAAAU,KAAAwB,QAAAg9D,cAGA,IAAAhjE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WAEAovE,GACAnuE,KAAAJ,KAAAuuC,QACA9uC,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,GAAAA,EAAAsU,QAIA,GAHAlZ,IAAAiC,IAAA0jB,QAAAisB,IAAA,YAAAhtC,EAAAukB,WACAnpB,IAAAC,QAAA0qB,cAAAK,UAAA,cAAApmB,EAAAmmB,QACA/qB,IAAAC,QAAA0qB,cAAAK,UAAA,YAAApmB,EAAAukB,WACAnpB,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,IAAA,CACA,IAAA3X,EAAA3pB,IAAAiC,IAAA0jB,QAAAjB,IAAA,aACA,EAAAviB,EAAAC,KAAAunB,GACA3pB,IAAAiC,IAAA0jB,QAAA0qB,MAAA,CACAn3B,QAAA,WACAlZ,IAAAC,QAAA+vB,eAAAC,kBAAAtG,EAAAxnB,EAAAgC,KAAA,SAAAysB,GACA,MAAAA,GACApsB,KAAAqlE,YAAAj5C,IAEApsB,UAIA,EAAArC,EAAAC,KAAAoC,KAAAwB,QAAAg9D,aACA1iE,OAAA4C,SAAA,qBAGA5C,OAAA4C,SAAA8mE,cAIA1pE,OAAA4C,SAAA,SAIAsB,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAA7rB,EAAAkU,SAEAtU,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAqlE,YAAA7pE,IAAAwwB,OAAAC,KAAAg6C,WACA,IAAAzqE,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAi9C,aAAA,CACAl1D,MAAA8X,EACAxhB,OAAAA,KAEA5K,WAIAxE,IAAAkG,MAAAuqB,KAAAuiD,iBAAAhzE,IAAAkG,MAAAuqB,KAAAg+C,cAAAhqE,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAstC,oBAAA,KAIA7uE,IAAAC,QAAAwwB,KAAA,CACAwgD,SAAA,WACA,MAAA,CASA,IAAAjxE,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BAIA0xC,uBAAA,WACA,GAAA,MAAAjzE,IAAAiC,IAAA0jB,QAAA0D,SAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,aASA,OAPA1kB,IAAAiC,IAAAC,IAAAwc,SAAA,UAEA,IAAA1e,IAAAkG,MAAAs5D,OAAA0T,WAAA,CACA1oD,OAAA,gBACAovB,KAAA,iCACAu5B,UAAAnzE,IAAA+Q,UAAAgyB,WAAAC,mBAEA,ICr4CAhjC,IAAAwkB,OAAA4uD,YAAA,GACApzE,IAAAwkB,OAAA4uD,YAAAjkC,SAAAnvC,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,aACAsD,WAAA,WACAhxC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,eAEA,CACAA,SAAA,YACAG,MAAAU,KAAAlD,KAEA,EAAAkD,KAAAkgB,IAAA,aAAA,CACA,CACA3gB,UAAA,YACAD,MAAAU,KAAAkgB,IAAA,eAEA,OAEA7T,MAAA,SAAAkiC,GACA,OAAAA,IAGA,MAAAA,EAAAqgC,YACA5uE,KAAA4uE,YAAA,IAAApzE,IAAAk3C,YAAAk8B,YAAAC,YAAAtgC,EAAAqgC,aAGA5uE,KAAA4uE,YAAA,MAGArgC,KAIA/yC,IAAAwkB,OAAA4uD,YAAAE,WAAAtzE,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,eACAsD,WAAA,cACAhxC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,cACAG,MAAAU,KAAAkgB,IAAA,oBAIA7T,MAAA,SAAAkiC,GACA,OAAAA,IAGAvuC,KAAAo+D,OAAA,IAAA5iE,IAAAk3C,YAAA0rB,OAAA2Q,OAAAxgC,EAAA6vB,QACAp+D,KAAA8tC,YAAA,IAAAtyC,IAAAk3C,YAAAk8B,YAAAI,YAAAzgC,EAAAT,cAEAS,GAEArB,MAAA,WACA,OAAAltC,KAAAlD,IAAA,GAEAmyE,eAAA,SAAAC,EAAAC,EAAAC,EAAAv2D,GACA7Y,KAAA8tC,YAAAa,QACA,MAAAugC,GACAvxE,EAAAuhB,KAAAvhB,EAAA0xE,KAAAH,GAAA,SAAAI,GACAtvE,KAAA8tC,YAAA8E,IAAA,CACA08B,QAAAA,KAEAtvE,MAGA,MAAAmvE,GACAxxE,EAAAuhB,KAAAvhB,EAAA0xE,KAAAF,GAAA,SAAAI,GACAvvE,KAAA8tC,YAAA8E,IAAA,CACA28B,UAAAA,KAEAvvE,MAGA,MAAAovE,GACAzxE,EAAAuhB,KAAAvhB,EAAA0xE,KAAAD,GAAA,SAAAI,GACAxvE,KAAA8tC,YAAA8E,IAAA,CACA68B,eAAAD,KAEAxvE,MAGAA,KAAA0wC,MAAA,CACA5C,YAAA9tC,KAAA8tC,YAAA8B,UACA,CACAl7B,QAAA/W,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,EAAA7Y,KAAA8tC,cAEA9tC,MACAsU,MAAA3W,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,EAAA,OAEA7Y,SAGAmxC,WAAA,WACAnxC,KAAAotC,IAAA,SAAAptC,KAAAo+D,OAAAxuB,UACA5vC,KAAAotC,IAAA,cAAAptC,KAAA8tC,YAAA8B,aAIAp0C,IAAAwkB,OAAA4uD,YAAArnC,WAAA/rC,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,IAEAzE,IAAAk3C,YAAAk8B,YAAA,GACApzE,IAAAk3C,YAAAk8B,YAAAC,YAAArzE,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4uD,YAAAE,WACA3vE,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA,EAAAU,KAAAwB,QAAAqqB,UAAA7rB,KAAAwB,QAAAqqB,UAAA,MAEA,CACA1sB,SAAA,oBAMA3D,IAAAk3C,YAAAk8B,YAAAI,YAAAxzE,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4uD,YAAArnC,aAGA/rC,IAAAk3C,YAAAk8B,YAAAvU,UAAA7+D,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4uD,YAAAjkC,SACAxrC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,eAEA,CACAA,SAAA,kBAMA3D,IAAAkG,MAAAktE,YAAA,GACApzE,IAAAkG,MAAAktE,YAAA5U,mBAAAx+D,IAAAkG,MAAAgpC,UAAAsvB,mBAAA/5D,OAAA,CACA6zC,kBAAA,WACA9zC,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAk8B,YAAAvU,UACAr6D,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,QAAA1tD,KAAA+rC,QACA/rC,KAAA0tD,WAAA7hB,SAEAgvB,YAAA,WACA,IAAAr/D,IAAAkG,MAAAgpC,UAAAwwB,iBAAA,CACA3sB,MAAA,IAAA/yC,IAAAwkB,OAAA4uD,YAAAjkC,SACAwuB,OAAAx7D,EAAAgC,KAAA,SAAAgsC,GACA3rC,KAAA0tD,WAAA9a,IAAAjH,GACA3rC,KAAAgiD,UAAAI,UACApiD,KAAAu6D,aAAA5uB,IACA3rC,SAGAu6D,aAAA,SAAA5uB,GACA,IAAAnwC,IAAAkG,MAAAktE,YAAAc,kBAAA,CACAnhC,MAAA5C,EACAwK,QAAAx4C,EAAAgC,KAAA,WACAK,KAAAgiD,UAAAI,WACApiD,MACAo3D,SAAAz5D,EAAAgC,KAAA,SAAAgsC,GACA,GAAA,EAAAA,EAAA7uC,GAAA,CACA,IAAAsjD,EAAApgD,KAAAgiD,UAAAd,OAAAvV,EAAA2iB,KACAtuD,KAAA0tD,WAAAnxD,OAAAovC,GACAA,EAAAwX,UACAnjD,KAAAgiD,UAAA6I,UAAAzK,KAEApgD,WAKAxE,IAAAkG,MAAAktE,YAAAc,kBAAAl0E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCACAuZ,SAAA,MACAG,WAAA,EACAN,QAAA,MAEA1C,OAAA,CACAk8B,wBAAA,iBACAC,mBAAA,QACAC,oBAAA,kBAEAC,eAAA,WACA9vE,KAAAuuC,MAAAmC,MAAA,CACAq/B,UAAA/vE,KAAA7C,EAAA,kBAAAsb,KAAA,cAGAw+B,mBAAA,WACAj3C,KAAAuuC,QACAvuC,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAA4uD,YAAAjkC,SAAA,CACAqlC,WAAAhwE,KAAAwB,QAAAwuE,cAIAhwE,KAAAs6D,SAAAt6D,KAAAuuC,MAAA,QAAAvuC,KAAA+rC,QACA/rC,KAAAuuC,MAAA1C,SAGAmI,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACAv0C,KAAAuuC,MAAAkC,WACA,IAAAj1C,IAAAomD,OAAAquB,gBAAA,CACAx7B,GAAAz0C,KAAA7C,EAAA,uBACA+yE,MAAA,OACA5wE,MAAAU,KAAAuuC,MAAAruB,IAAA,QACAi5C,OAAAx7D,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAmC,MAAA,CACA3zC,KAAAuC,KAEAU,QAIA,IAAAxE,IAAAkG,MAAAktE,YAAAuB,gBAAA,CACA17B,GAAAz0C,KAAA7C,EAAA,oBACAoxC,MAAAvuC,KAAAuuC,MACAmf,WAAA1tD,KAAAuuC,MAAAqgC,YACAoB,WAAAhwE,KAAAuuC,MAAAruB,IAAA,iBAGA64B,MAAA,WACA,mBAAA/4C,KAAAwB,QAAA20C,SACAn2C,KAAAwB,QAAA20C,QAAAn2C,KAAAuuC,QAGAmsB,eAAA,WACA,IAAAl/D,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,mBACAovB,KAAA,iDACAgiB,SAAAz5D,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA41D,UACAp3D,KAAAwB,QAAA41D,SAAAp3D,KAAAuuC,OAEAvuC,KAAA64C,eACA74C,WAKAxE,IAAAkG,MAAAktE,YAAAwB,uBAAA50E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,6BACAuZ,SAAA,MACAG,WAAA,EACAN,QAAA,MAEA1C,OAAA,CACAm8B,mBAAA,SAEA57B,WAAA,WACA,MAAA,CACAq8B,YAAArwE,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAA9E,IAAA,eAAA,KAGAq0B,YAAA,WACA,IAAA/4C,IAAAkG,MAAAktE,YAAAuB,gBAAA,CACA17B,GAAAz0C,KAAA7C,EAAA,wBACA0uB,UAAA7rB,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAA9E,IAAA,aAAA,KACA8E,QAAAhlB,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAA,QAGA+zB,MAAA,WACA,mBAAA/4C,KAAAwB,QAAA20C,SACAn2C,KAAAwB,QAAA20C,QAAA,CACAm6B,SAAA,OAMA90E,IAAAkG,MAAAktE,YAAAuB,gBAAA30E,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBAEA0W,OAAA,CACA88B,yBAAA,uBACAC,6BAAA,iBACAC,6BAAA,iBACAC,gCAAA,0BACAC,8BAAA,yBAEA78B,kBAAA,WACA9zC,KAAA0tD,YACA1tD,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,QAAA1tD,KAAA+rC,QACA/rC,KAAA+rC,UAEA/rC,KAAAwB,QAAAqqB,WACA7rB,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAk8B,YAAAC,YAAA,KAAA,CACAhjD,UAAA7rB,KAAAwB,QAAAqqB,YAEA7rB,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAA+rC,SACA/rC,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,QAAA1tD,KAAA+rC,SACA/rC,SAIAA,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAk8B,YAAAC,aAGAt6B,YAAA,WACAv0C,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAAz0C,KAAA7C,EAAA,sBACAiD,KAAAzC,EAAAwpD,OAAAnnD,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,eAEAq9B,MAAA,MACAoG,MAAA,CAAA,EAAA,OACA5C,gBAAA,CACA3gD,KAAAJ,KAAA0tD,WACAc,YAAA,sBAEAoiB,OAAA,EACAhzB,YAAA,EACAP,QAAA,EACAJ,iBAAAt/C,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA6wE,eAAAzwB,EAAAhgD,SACAJ,MACAi/C,SAAA,CACA6N,YAAA,2DAEAjM,mBAAA,CACAY,QAAA,CACA,CACA1kD,KAAA,OACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA6wE,eAAAzwB,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,SACA09D,UAAA,EACAD,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA8wE,iBAAA1wB,IACApgD,SAIA8+C,QAAA,CACA,CACA1+C,KAAA,uBACAmB,MAAA,GACAq5D,YAAA,EACAD,WAAA,EACArW,SAAA,EACAvY,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAAjkD,EAAA,GAKA,OAJA,MAAAiE,IACAjE,EAAA,0CAGAA,GACA6D,OAEA,CACAuB,MAAA,OACAnB,KAAA,mBAEA,CACAmB,MAAA,SACAnB,KAAA,oBACA2rC,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,GAAAA,EAAAge,QAAA,EAAAzgE,EAAAC,KAAAwiD,EAAAge,OAAAp+C,QAAA,CACA,IAAA+wD,EAAA,GAIA,OAHApzE,EAAAuhB,KAAAkhC,EAAAge,OAAAp+C,OAAA,SAAA1B,GACAyyD,EAAA3yD,KAAAE,EAAA4B,IAAA,gBAEA6wD,EAAAxuD,KAAA,MAEA,MAAA,KAGA,CACAniB,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,WACA,MAAA,gSACAK,MACAwuB,MAAA,YAKAwiD,qBAAA,WACA,IAAAC,EAAA,IAAAz1E,IAAAwkB,OAAA4uD,YAAAE,WAAA,CACAoC,aAAA,KACAn0E,KAAA,GACAqhE,OAAA,KACAvyC,UAAA7rB,KAAAwB,QAAAqqB,UACAmkD,WAAAhwE,KAAAwB,QAAAwuE,aAEAhwE,KAAA6wE,eAAAI,IAEAE,eAAA,WACA,IAAA31E,IAAAkG,MAAAktE,YAAAwC,oBAAA,CACApsD,QAAAhlB,KAAAwB,QAAAwjB,QACAqsD,SAAA1zE,EAAAgC,KAAA,SAAA0nC,GACArnC,KAAA0tD,WAAArmB,EACArnC,KAAA+rC,UACA/rC,SAGAsxE,eAAA,WACA,IAAA91E,IAAAkG,MAAAktE,YAAA2C,+BAAA,CACA7jB,WAAA1tD,KAAA0tD,WACA1oC,QAAAhlB,KAAAwB,QAAAwjB,WAGA6rD,eAAA,SAAAW,GACA,IAAAh2E,IAAAkG,MAAAktE,YAAA6C,oBAAA,CACAljC,MAAAijC,EACArY,OAAAx7D,EAAAgC,KAAA,SAAA+xE,EAAAxkC,GACAA,IACAltC,KAAA0tD,WAAA9a,IAAA8+B,GACA1xE,KAAAgiD,UAAAyI,OAAAinB,IAEA1xE,KAAAgiD,UAAAI,WACApiD,MACAm2C,QAAAx4C,EAAAgC,KAAA,SAAA+xE,GACAA,EAAAjkC,cACAikC,EAAA7lC,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAgiD,UAAAI,WACApiD,SAGAA,MACAo3D,SAAAz5D,EAAAgC,KAAA,SAAA+xE,GACA,IAAAtxB,EAAApgD,KAAAgiD,UAAAd,OAAAwwB,EAAApjB,KACAtuD,KAAA8wE,iBAAA1wB,IACApgD,SAGA2xE,sBAAA,SAAAt0E,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eAEAq4D,EADA1xE,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OACAta,OAEAJ,KAAA6wE,eAAAa,IAEAE,wBAAA,SAAAv0E,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA+mC,EAAApgD,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OACA1a,KAAA8wE,iBAAA1wB,IAEA0wB,iBAAA,SAAA1wB,GACA,IAAAsxB,EAAAtxB,EAAAhgD,OACA,IAAA5E,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,mBACAovB,KAAA,oDACAgiB,SAAAz5D,EAAAgC,KAAA,WACAK,KAAA0tD,WAAAnxD,OAAAm1E,GACAA,EAAAvuB,UACAnjD,KAAAgiD,UAAA6I,UAAAzK,IACApgD,WAKAxE,IAAAkG,MAAAktE,YAAA6C,oBAAAj2E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BACAuZ,SAAA,MACAH,QAAA,MAEA1C,OAAA,CACAm8B,mBAAA,QACAC,oBAAA,mBACAxU,kBAAA,QAMArnB,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACA,IAAA/4C,IAAAi8D,OAAAz3D,KAAAtC,IAAAsC,KAAAuuC,MAAA,CACAmpB,cAAA,CACA,QACA,cAGA,IAAAma,EAAAr2E,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACA4xD,EAAAt2E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,cACA,MAAA/xE,KAAAuuC,MAAA6vB,SACAp+D,KAAAuuC,MAAA6vB,OAAA,IAAA5iE,IAAAk3C,YAAA0rB,OAAA2Q,OAAA,GAAA,CACA+C,YAAAA,KAGA,IAAAt2E,IAAAkG,MAAA08D,OAAA4T,kBAAA,CACAv9B,GAAAz0C,KAAA7C,EAAA,uBACA80E,iBAAA,EACAH,YAAAA,EACAD,YAAAA,EACA/b,YAAA,EACAoc,UAAAlyE,KAAA7C,EAAA,oBACAg1E,eAAAnyE,KAAAuuC,MAAA6vB,OAAAp+C,OACAoyD,YAAAz0E,EAAAgC,KAAA,SAAAwyE,GACAnyE,KAAAuuC,MAAA6vB,OAAAzvB,MAAAwjC,GACAnyE,KAAAuuC,MAAAf,SAAA,GACAxtC,SAGA+4C,MAAA,WACA,mBAAA/4C,KAAAwB,QAAA20C,SACAn2C,KAAAwB,QAAA20C,QAAAn2C,KAAAuuC,OAEAvuC,KAAA64C,eAEAlI,KAAA,WACA,GAAA3wC,KAAAuuC,MAAAd,cAAAztC,KAAAuuC,MAAArB,QAAA,CACA,IAAAA,GAAA,EACAltC,KAAAuuC,MAAArB,UACAA,GAAA,GAEAltC,KAAAuuC,MAAAoC,KAAA,KAAA,CACAnB,QAAA,EACA96B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,MAAArB,GAEAltC,KAAA64C,eACA74C,aAIAA,KAAA64C,eAGAi4B,iBAAA,WACA,mBAAA9wE,KAAAwB,QAAA41D,UACAp3D,KAAAwB,QAAA41D,SAAAp3D,KAAAuuC,OAEAvuC,KAAA64C,iBAIAr9C,IAAAkG,MAAAktE,YAAAwC,oBAAA51E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCACAuZ,SAAA,IACA+6B,SAAA,MAEA59B,OAAA,CACA4+B,oBAAA,QAEAp7B,mBAAA,WACAz7C,IAAAiC,IAAA0jB,QAAAmxD,yBAAA30E,EAAAgC,KAAA,SAAA4yE,GACAvyE,KAAA0qC,UAAA6nC,EACAvyE,KAAA+rC,UACA/rC,QAEAg0C,WAAA,WACA,MAAA,CACAtJ,UAAA1qC,KAAA0qC,YAGA6J,YAAA,WACA,MAAAv0C,KAAA0qC,WAAA1qC,KAAA0qC,UAAA+F,YACAzwC,KAAAwyE,eAAA,IAAAh3E,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,oBACA8kD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAyyE,iBAAAzyE,KAAA0qC,UAAAxqB,IAAA5gB,IACAU,MACA8hD,cAAA,EACAurB,iBAAA,sBAKA18B,KAAA,WACA,IAAA72B,GAAA,EACA,MAAA9Z,KAAAyyE,kBACAzyE,KAAAwyE,eAAAja,YACAz+C,GAAA,GAGA9Z,KAAAwyE,eAAAna,YAIAv+C,GAIA,IAAAte,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,eAEA,CACAA,SAAA,SACAG,MAAAU,KAAAyyE,iBAAA31E,QAGA8zC,MAAAlxC,KAAA/B,EAAAgC,KAAA,SAAAC,GACA,GAAA,mBAAAI,KAAAwB,QAAA6vE,SAAA,CACA,IAAAzmE,EAAA,IAAApP,IAAAk3C,YAAAk8B,YAAAC,YAAAjvE,GACAgL,EAAA6lC,WAAA,EACAzwC,KAAAwB,QAAA6vE,SAAAzmE,GAEA5K,KAAA64C,cACAr9C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,mCAEA/rB,UAIAxE,IAAAkG,MAAAktE,YAAA2C,+BAAA/1E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCACAvO,MAAA,OAEAilB,OAAA,CACA4nB,kBAAA,QAEApkB,mBAAA,WACAj3C,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAA4uD,YAAAjkC,SAAA,CACA9e,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,KAGAtB,IAAAiC,IAAA0jB,QAAAmxD,yBAAA30E,EAAAgC,KAAA,SAAA4yE,GACAvyE,KAAA0qC,UAAA6nC,EACAvyE,KAAA+rC,UACA/rC,QAEAg0C,WAAA,WACA,MAAA,CACAtJ,UAAA1qC,KAAA0qC,UACAkkC,YAAA5uE,KAAA0tD,aAGAnZ,YAAA,WACA,MAAAv0C,KAAA0qC,WAAA1qC,KAAA0qC,UAAA+F,YACA,IAAAj1C,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,uBACAw3D,YAAA,EACA0Y,iBAAA,qBACAprB,SAAAtkD,EAAAgC,KAAA,SAAAL,KAEAU,QAGA,IAAAxE,IAAAomD,OAAA8wB,kBAAA,CACAj+B,GAAAz0C,KAAA7C,EAAA,wBACAw1E,OAAAh1E,EAAAshB,IAAAjf,KAAA0qC,UAAA1qB,OAAA,SAAA2rB,GACA,OAAAA,EAAAzrB,IAAA,cAKAywB,KAAA,WACA,IAAAiiC,EAAA5yE,KAAA7C,EAAA,wBACAJ,EAAA61E,EAAAhxE,MACA,GAAA,IAAAjE,EAAAC,KAAAb,EAAAiG,QAAA,CAKAxH,IAAAC,QAAAgc,aAAAoC,cAAA+4D,GAAA,GAGA,IAAAC,EAAA7yE,KAAA0qC,UAAAqH,UAAA,CAAAh1C,KAAAA,IACA+1E,EAAAn1E,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAnB,IAAA,CACArwC,KAAAA,IAEAiD,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACAK,KAAA64C,cACAr9C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,kCAEA/rB,SAEAA,MACA,MAAA6yE,EACA,IAAAr3E,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,qBACAovB,KAAA,6EACA49B,MAAAr1E,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAnB,IAAA,aAAAylC,EAAA/1E,IACAg2E,KACA9yE,QAIA8yE,SAhCAt3E,IAAAC,QAAAgc,aAAAoC,cAAA+4D,MAqCAp3E,IAAAkG,MAAAktE,YAAAqE,uBAAAz3E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACA2uC,gBAAA,EACAlqB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,6BACAm2C,UAAA,KACA/Z,OAAA,MAEA1lB,OAAA,CACA0/B,kCAAA,UAEAn/B,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAAozE,mBAAA,IAAA53E,IAAAkG,MAAAktE,YAAAyE,mBAAA,CACA5+B,GAAAz0C,KAAA7C,EAAA,0BACAm2E,wBAAA,EACAC,qBAAA51E,EAAAgC,KAAAK,KAAAwzE,yBAAAxzE,MACAglB,QAAAhlB,KAAAwB,QAAAwjB,WAGAwuD,yBAAA,SAAAC,GACAzzE,KAAA7C,EAAA,6BAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAA61E,EAAAC,MAIA,IAJA/1E,EAAAC,KAAAD,EAAAg2E,WAAAh2E,EAAAshB,IAAAw0D,EAAAG,SAAA,SAAApC,GACA,OAAAA,EAAA10E,KACAa,EAAAshB,IAAAw0D,EAAAI,SAAA,SAAArC,GACA,OAAAA,EAAA10E,QAEAkD,KAAAm5D,UAEAA,OAAA,WACA,mBAAAn5D,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAozE,mBAAA5oD,WAEAxqB,KAAA64C,iBAIAr9C,IAAAkG,MAAAktE,YAAAyE,mBAAA73E,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kCACAsW,aAAA,CACA8Z,SAAA,IAAA3xD,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBAEA6xC,YAAA,KACAkF,qBAAA,KACAC,sBAAA,KACAC,sBAAA,KACAC,oBAAA,KACAC,oBAAA,KACAX,qBAAA,KACAze,SAAA,EACAqf,mBAAA,EACAC,mBAAA,EACAC,gBAAA,EACAC,kBAAA,EACArgB,SAAA,EACAsgB,SAAA52E,EAAAu4C,KACA2f,gBAAA,EACA2e,cAAA,KACAC,iBAAA,EACAC,WAAA/2E,EAAAu4C,MAEAzC,OAAA,CACAkhC,4BAAA,oBACAC,2BAAA,eACAC,gCAAA,YACAC,4BAAA,oBACAC,4BAAA,mBACAC,sBAAA,eAEAzgC,YAAA,WACAv0C,KAAAi1E,iBAAA,GACAj1E,KAAA+zE,sBAAA,GACA,MAAA/zE,KAAAwB,QAAAotE,YACA5uE,KAAAk1E,iBAGAl1E,KAAAm1E,aAGAD,eAAA,WACA,MAAAl1E,KAAA0tD,WACA1tD,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAm1E,aACAn1E,QAGAA,KAAAwB,QAAAwjB,SACAhlB,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAk8B,YAAAC,YAAA,KAAA,CACAhjD,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,KAEAkD,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAm1E,aACAn1E,UAIAA,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAk8B,YAAAC,YACA7uE,KAAAm1E,cAGAA,UAAA,WACAn1E,KAAAwB,QAAA4zE,qBAAA,EACAp1E,KAAAq1E,mBAEAA,gBAAA,WACAr1E,KAAAs1E,UAIAt1E,KAAAu1E,oBAEA,mBAAAv1E,KAAAwB,QAAA0yE,qBACAl0E,KAAAwB,QAAA0yE,wBAGAqB,kBAAA,WACA,IAAAC,EAAAx1E,KAAA7C,EAAA,uBAAAyE,MAAAgB,cACAgsE,EAAA,GAEA,EAAAjxE,EAAAC,KAAA43E,GACA73E,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAAriB,EAAAgC,KAAA,SAAA4uC,IACA,EAAAA,EAAAruB,IAAA,QAAAtd,cAAAZ,QAAAwzE,IACA5G,EAAAxwD,KAAAmwB,IACAvuC,QAGAA,KAAA7C,EAAA,8BAAAsb,KAAA,YAAA,GACAm2D,EAAA5uE,KAAA0tD,WAAA1tC,QAGA,IAAA5f,EAAA,CACA4f,OAAA4uD,EACAptE,QAAAxB,KAAAwB,SAEAxB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA8Z,SAAAntD,KAAA7C,EAAA,2BAAAiD,EAAAzC,EAAAgC,KAAA,WACAK,KAAAwB,QAAA6yE,gBACAr0E,KAAA7C,EAAA,gCAAAud,QAAA,iCAAAmgC,OAEA76C,KAAAy1E,YAAA,GACAz1E,QAEAu4D,UAAA,SAAA99C,GACAza,KAAAq4D,YACAr4D,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAAtC,IAAA,CACAqD,KAAA,SACAs9C,aAAA,CAAA,cACA8d,KAAA1hD,EACA2hD,WAAA,KAGA/D,UAAA,WACAr4D,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,WAGAqiB,OAAA,SAAAxD,GACAhiE,KAAAk1E,kBAEAQ,wBAAA,SAAAlyE,GACA,OAAAA,EAAAkX,QAAA,WAAAN,SAAA,2BAEAu7D,kBAAA,SAAAt4E,GACA2C,KAAA41E,aAAAz4E,EAAAE,EAAAgc,eAAAe,SAAA,4BAEAw7D,aAAA,SAAAx+B,GACA,IAAAhvB,EAAAgvB,EAAAh9B,SAAA,wBACAg9B,EAAAt/B,SAAA,WACAs/B,EAAAp9B,YAAA,UACAoO,EAAApO,YAAA,gCACAoO,EAAAlO,SAAA,8BAGAk9B,EAAAl9B,SAAA,UACAkO,EAAApO,YAAA,4BACAoO,EAAAlO,SAAA,kCAGAsQ,QAAA,WACA,IAAAqrD,EAAA,GACAC,EAAA,GAeA,OAdAn4E,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAwxD,GACAA,EAAAtxD,IAAA,eACA41D,EAAA13D,KAAAozD,EAAAtxD,IAAA,iBAEAviB,EAAAuhB,KAAAsyD,EAAApT,OAAAp+C,OAAA,SAAA1B,GACAA,EAAA4B,IAAA,eACA21D,EAAAz3D,KAAAE,EAAA4B,IAAA,aAEAlgB,OACAA,MAEA,mBAAAA,KAAAwB,QAAAkzE,YACA10E,KAAAwB,QAAAkzE,WAAAmB,EAAAC,GAEA,CAAAD,SAAAA,EAAAC,cAAAA,IAEAC,iBAAA,SAAA14E,GACA,IAAA+lE,EAAApjE,KAAA01E,wBAAAv4E,EAAAE,EAAAgc,gBACA28D,EAAA74E,EAAAE,EAAAgc,eAAA8nC,GAAA,YACA+vB,EAAA/zE,EAAAE,EAAAgc,eAAAjZ,KAAA,kBACAoxE,EAAAxxE,KAAA0tD,WAAAxtC,IAAAgxD,GAGA9N,EAAAvrD,KAAA,uBACAurD,EAAAvrD,KAAA,iBAAAY,KAAA,UAAAu9D,GAEAxE,EAAApkC,IAAA,aAAA4oC,GACAr4E,EAAAuhB,KAAAsyD,EAAApT,OAAAp+C,OAAA,SAAA1B,GACAA,EAAA8uB,IAAA,aAAA4oC,IACAh2E,MAEAg2E,GAEA5S,EAAAtrD,SAAA,WACA9X,KAAA41E,aAAAxS,GAIApjE,KAAA7C,EAAA,2BAAAsb,KAAA,YAAA,EAAAzY,KAAA7C,EAAA,+BAAAT,SAEAsD,KAAAwqB,WAEAyrD,UAAA,WACA,IAAAC,EAAAl2E,KAAA7C,EAAA,iBACAg5E,EAAAn2E,KAAA7C,EAAA,uBACA6C,KAAA7C,EAAA,2BAAAsb,KAAA,YACA9a,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACAA,EAAAnB,IAAA,cAAA,GACAzvC,EAAAuhB,KAAAqvB,EAAA6vB,OAAAp+C,OAAA,SAAA1B,GACAA,EAAA8uB,IAAA,cAAA,IACAptC,OACAA,MACAk2E,EAAAz9D,KAAA,WAAA,GACA09D,EAAA19D,KAAA,WAAA,KAGA9a,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACAA,EAAAnB,IAAA,cAAA,GACAzvC,EAAAuhB,KAAAqvB,EAAA6vB,OAAAp+C,OAAA,SAAA1B,GACAA,EAAA8uB,IAAA,cAAA,IACAptC,OACAA,MACAk2E,EAAAz9D,KAAA,WAAA,GACA09D,EAAA19D,KAAA,WAAA,IAEAzY,KAAAwqB,WAEA4rD,YAAA,SAAA/4E,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACAo0D,EAAAl0D,EAAAnZ,KAAA,YACA8wE,EAAA33D,EAAAnZ,KAAA,eACAoxE,EAAAxxE,KAAA0tD,WAAAxtC,IAAAgxD,GACAmF,GAAA,EACA/3D,EAAA3gB,EAAAka,KAAA25D,EAAApT,OAAAp+C,OAAA,SAAA1B,GACA,OAAAA,EAAA4B,IAAA,aAAAutD,IAEAuI,EAAA74E,EAAAE,EAAAgc,eAAA8nC,GAAA,YACAm1B,EAAAt2E,KAAA7C,EAAA,2BAAA0a,KAAA,yBAAAq5D,EAAA,MAEA5yD,EAAA8uB,IAAA,aAAA4oC,GACAA,IAAAxE,EAAAtxD,IAAA,gBACAsxD,EAAApkC,IAAA,cAAA,GACAkpC,EAAA79D,KAAA,UAAAu9D,IAGAA,IACAr4E,EAAAuhB,KAAAsyD,EAAApT,OAAAp+C,OAAA,SAAA1B,GACAA,EAAA4B,IAAA,gBACAm2D,GAAA,KAIAA,IACAC,EAAA79D,KAAA,UAAAu9D,GACAxE,EAAApkC,IAAA,cAAA,KAGAptC,KAAA7C,EAAA,2BAAAsb,KAAA,YAAA,EAAAzY,KAAA7C,EAAA,+BAAAT,SACAsD,KAAAwqB,aAIAhvB,IAAAkG,MAAAktE,YAAA2H,sBAAA/6E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BACAm2C,UAAA,KACA/Z,OAAA,KACA7iB,SAAA,QACAtnB,cAAA,IAEAykB,OAAA,CACA+iC,0BAAA,kBACAC,iCAAA,iBAEAx/B,mBAAA,WACA,IAQAy/B,GAPA,MAAA12E,KAAAwB,QAAAwjB,QACAhlB,KAAAwB,QAAAwjB,QAAAwxC,YAGAh7D,IAAAiC,IAAA0jB,QAAAq1C,aAGAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAigB,qCACA,MAAAD,GAAA,EAAAA,IACA12E,KAAAwB,QAAAwtB,cAAA0nD,IAGA1iC,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAA42E,4BAAA,IAAAp7E,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,qBACA2kD,cAAA,EACA6S,YAAA,EACAkiB,iBAAA,EACA90B,aAAA,CAAA,EAAA,KAGA/hD,KAAA82E,aAAA,IAAAt7E,IAAAu7E,OAAA/2E,KAAA7C,EAAA,mCAAA,CACA65E,MAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,IAAA,KACAC,aAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,IAAA,KACA33E,MAAAU,KAAAwB,QAAAwtB,cACAizB,SAAAtkD,EAAAgC,KAAA,SAAA6e,GACAxe,KAAAk3E,UAAA14D,EAAA24D,WACAn3E,SAGAo3E,cAAA,WACAp3E,KAAAk3E,UAAA30E,SAAAvC,KAAA7C,EAAA,4BAAAyE,SAEAs1E,UAAA,SAAAzoD,GACAzjB,MAAAyjB,IAAAA,EAAA,EACAA,EAAA,EACA,IAAAA,IACAA,EAAA,KACAzuB,KAAA82E,aAAAz0B,SAAA5zB,GAEA,EAAAzuB,KAAA7C,EAAA,4BAAAyE,MAAAlF,QACAsD,KAAA7C,EAAA,4BAAAyE,IAAA6sB,IAEA4oD,gBAAA,WACA,IAAA77E,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,eACAG,MAAA,gBAEA,CACA,CACAC,UAAA,SACAD,MAAAU,KAAA82E,aAAAxe,YAEA,CACA/4D,UAAA,kBACAD,MAAA,IAAA3B,EAAAC,KAAAoC,KAAA42E,4BAAAte,YAAA,EAAAt4D,KAAA42E,4BAAAte,WAAA,QAGA74D,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,mBAAAJ,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAA/4D,GAEA,EAAAzC,EAAAC,KAAAwC,GACA5E,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,oCAIAvwB,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,+BAGA/rB,KAAA64C,eACA74C,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,iFAEA/rB,UC9kCAxE,IAAAwkB,OAAAs3D,QAAA,GAEA97E,IAAAwkB,OAAAs3D,QAAAC,YAAA/7E,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACAq4E,kBAAA,WACA,IAAAz6E,EAAAiD,KAAAkgB,IAAA,aAIA,OAHA,EAAAviB,EAAAC,KAAAoC,KAAAkgB,IAAA,eACAnjB,EAAA,IAAAiD,KAAAkgB,IAAA,aAEAnjB,GAEA4zC,KAAA,SAAA8mC,GAAA,IAAAjnC,EAAA,EAAApmC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACA,IAAA5O,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,aAGAiB,KAAAJ,KAAA4vC,WACAgB,MAAAlxC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,MAAAA,GAAA,MAAAA,EAAAk+D,eAEAt+D,KAAAotC,IAAA,CACAsqC,WAAA,KACAC,oBAAA,KACAC,mBAAA,OAGA,mBAAApnC,EAAAl8B,OACAk8B,EAAAl8B,MAAAlU,IAIA,MAAAA,EAAAy3E,aACA73E,KAAAqM,MAAAjM,EAAAy3E,aAGAr8E,IAAAiC,IAAA0jB,QAAA22D,oBAAA13E,EAAAk+D,cAEA,mBAAA9tB,EAAA97B,SACA87B,EAAA97B,QAAAtU,IAEAJ,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAS,GAEAJ,KAAAotC,IAAA,CACAsqC,WAAA,KACAC,oBAAA,KACAC,mBAAA,OAGA,mBAAApnC,EAAAl8B,OACAk8B,EAAAl8B,MAAAlU,IAEAJ,QAEAqM,MArDA,SAqDAkiC,GACA,IAAAA,EACA,OAAAA,EAEAvuC,KAAAstC,WAAAiB,KC5DA/yC,IAAAi8D,OAAA,WACA,SAAAsgB,EAAAr6E,EAAA8gB,GAAA,IAAAhd,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA+3E,GACA/3E,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAksC,UAAA,cACAgqB,cAAA,CACA,QACA,YAEAsgB,kBAAA,EACAvkC,OAAA,yBACAwkC,UAAA,EACAh2B,SAAA,KACAmrB,YAAA,KACA8K,yBAAA,EACAjkB,QAAA,KAEAjS,UAAA,KACAnV,YAAA,MACAsrC,uBAAA,MACAC,cAAA,KACApkE,WAAA,KAGAhU,KAAAy8D,OAAA/+D,EAEA,IAAA26E,EAAA78E,IAAAC,QAAAqW,cAAAC,YAAAyM,GAAA,GACA,uBAAA65D,GACAr4E,KAAAU,SAAA,EACAV,KAAAwe,IAAAA,EAAAwB,QACA,UAAAq4D,GACAr4E,KAAAU,SAAA,EACAV,KAAAwe,IAAAA,GAEA,kBAAA65D,GAAA,WAAAA,IACAr4E,KAAAs4E,cAAA,kBAAAD,EACAr4E,KAAAwe,IAAAA,GAGAxe,KAAAu4E,eAtCA,OAAAttC,aAAA8sC,EAAA,CAAA,CAAAn3E,IAAA,SAAAtB,MAyCA,WAAA,IAAAk5E,EAAAx4E,KACA,IAAA,IAAAA,KAAAwB,QAAAy2E,SACAj4E,KAAAy8D,OAAAtgD,IAAAnc,KAAAwB,QAAAiyC,YACA,CACA,IAAAnE,EAAAtvC,KACArC,EAAAuhB,KAAAlf,KAAAwB,QAAAk2D,cAAA,SAAA9iB,GACA4jC,EAAA/b,OAAA5kD,KAAA+8B,EAAA,IAAA4jC,EAAAh3E,QAAAksC,UAAA,KAAAxuB,KAAA,WACA/hB,EAAA6C,MAAAmc,IAAAmzB,EAAA9tC,QAAAiyC,eAhDA,CAAA7yC,IAAA,eAAAtB,MAsDA,WAAA,IAAAm5E,EAAAz4E,KAKA,GAJAA,KAAA04E,mBAAA,GAEA14E,KAAA24E,gBAEA,IAAA34E,KAAAwB,QAAAy2E,SACAj4E,KAAAy8D,OAAA3jD,GAAA9Y,KAAAwB,QAAAiyC,OAAAzzC,KAAAwB,QAAAk2D,cAAAn1C,KAAA,MAAA,SAAAllB,GACAo7E,EAAAG,aAAAz7E,EAAAE,EAAAmc,eAEA,CACA,IAAA81B,EAAAtvC,KACArC,EAAAuhB,KAAAlf,KAAAwB,QAAAk2D,cAAA,SAAA9iB,GACA6jC,EAAAhc,OAAA5kD,KAAA+8B,EAAA,IAAA6jC,EAAAj3E,QAAAksC,UAAA,KAAAxuB,KAAA,WACA,MAAAowB,EAAA9tC,QAAAyyD,SACA92D,EAAA6C,MAAAyY,KAAA,YAAA62B,EAAA9tC,QAAAyyD,SAGA3kB,EAAAupC,YAAA17E,EAAA6C,OACAsvC,EAAA9tC,QAAAw2E,kBAAA,MAAA1oC,EAAA9wB,MAAA8wB,EAAA5uC,SACA4uC,EAAAwpC,gBAAA37E,EAAA6C,cAzEA,CAAAY,IAAA,cAAAtB,MAgFA,SAAA5B,GACA,IAAAgwC,EAAA1tC,KAAA+4E,oBAAAr7E,GACA,GAAA,MAAAgwC,GAAA,EAAAA,EAAAhxC,OAAA,CACAgB,EAAA+a,KAAA,cAAA9a,EAAA8yD,SAAAzwD,KAAA04E,mBAAAhrC,IACA1tC,KAAA04E,mBAAAt6D,KAAAsvB,GAGA,IAAA4B,EAAAtvC,KACA,OAAAA,KAAAg5E,eAAAt7E,IACA,IAAA,OACAA,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACAnE,EAAA2S,SAAAvkD,EAAAgwC,EAAAhwC,EAAAkE,SAEA,MACA,IAAA,UACAlE,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACA,IAAAn0C,EAAA4Y,WAAAxa,EAAAkE,OACAtC,EAAA,iBAAAA,EAAA,IAAAA,EAAA,EACAgwC,EAAA2S,SAAAvkD,EAAAgwC,EAAApuC,KAEA,MACA,IAAA,SACA5B,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACAnE,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAU,oBAAAza,MAEA,MACA,IAAA,UACAA,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACAnE,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAW,qBAAA1a,GAAA,IAAA4xC,EAAA9tC,QAAA02E,4BAEA,MACA,IAAA,QACAx6E,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACAnE,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAc,mBAAA7a,MAEA,MACA,IAAA,QACAA,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACAnE,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAC,mBAAAha,EAAA8F,aAEA,MACA,IAAA,OAEA,MACA,IAAA,SACA9F,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACA,IAAAwlC,EAAAv7E,EAAA0C,KAAA,oBACAd,EAAA,MAAA25E,EAAAA,EAAA3gB,WAAA56D,EAAAkE,MACA0tC,EAAA2S,SAAAvkD,EAAAgwC,EAAApuC,KAEA,MACA,IAAA,OACA5B,EAAAob,GAAA9Y,KAAAwB,QAAAiyC,OAAA,WACA,IAAAylC,GAAA,IAAAx7E,EAAA0C,KAAA,iBACAwB,EAAAlE,EAAA+a,KAAA,WACA62B,EAAA2S,SAAAvkD,EAAAgwC,EAAAwrC,GAAAt3E,EAAAA,SAvIA,CAAAhB,IAAA,eAAAtB,MA8IA,WAAA,IAAA65E,EAAAn5E,KACAA,KAAA4hD,OAAA,CACAw3B,cAAA,GACAC,YAAA,GACAC,aAAA,GACAC,aAAA,GACAC,gBAAA,GACAC,iBAAA,GACAC,cAAA,GACAC,IAAA,IAEA35E,KAAA45E,mBAAA,GAEA,MAAA55E,KAAAwB,QAAAogD,QAIAjkD,EAAAuhB,KAAAlf,KAAAwB,QAAAogD,OAAA,SAAAi4B,EAAAnsC,GACA,mBAAAmsC,EAAA53B,UAAA,mBAAA43B,EAAAzM,cACA+L,EAAAS,mBAAAlsC,GAAA,CACAuU,SAAA43B,EAAA53B,SACAmrB,YAAAyM,EAAAzM,cAIA,IAAA1vE,EAAAy7E,EAAAW,oBAAApsC,GACA,GAAA,IAAAhwC,EAAAhB,OACA,OAAA,EAGA,IAAAo0D,EAAA,SAAAwF,GACA,MAAAujB,EAAAE,aACAZ,EAAAa,mBAAA1jB,EAAA5oB,EAAAmsC,EAAAE,cACA,MAAAF,EAAA/0E,WACAq0E,EAAAc,iBAAA3jB,EAAA5oB,EAAAmsC,EAAA/0E,YACA,MAAA+0E,EAAAK,YACAf,EAAAgB,kBAAA7jB,EAAA5oB,EAAAmsC,EAAAK,aACA,MAAAL,EAAAO,eACAjB,EAAAkB,qBAAA/jB,EAAA5oB,EAAAmsC,EAAAO,gBACA,MAAAP,EAAAS,gBACAnB,EAAAoB,sBAAAjkB,EAAA5oB,EAAAmsC,EAAAS,iBACA,MAAAT,EAAAW,aACArB,EAAAsB,mBAAAnkB,EAAA5oB,EAAAmsC,EAAAW,cACA,MAAAX,EAAAa,aACAvB,EAAAwB,kBAAArkB,EAAA5oB,EAAAmsC,EAAAa,cAGA,EAAAh9E,EAAAhB,OACAgB,EAAAwhB,KAAA,WACA4xC,EAAA3zD,EAAA6C,UAIA8wD,EAAApzD,IAGAm8E,EAAAe,WAAAl9E,EAAA+a,KAAA,aAAA9a,EAAA8yD,SAAA0oB,EAAAT,mBAAAhrC,IACAyrC,EAAAT,mBAAAt6D,KAAAsvB,QAvMA,CAAA9sC,IAAA,cAAAtB,MA4MA,SAAAouC,GAAA,IAAAoF,EAAA,EAAA1oC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KACA9J,EAAAotC,EAIA,OAHA,MAAAoF,IACAxyC,EAAAotC,EAAA,IAAAoF,GAEA9yC,KAAA4hD,OAAA+3B,IAAAr5E,KAjNA,CAAAM,IAAA,WAAAtB,MAoNA,SAAAouC,GAAA,IAAAmtC,EAAAC,EAAAhoC,EAAA,EAAA1oC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KACA,OAAA,QAAAywE,EAAA,QAAAC,EAAA96E,KAAA+6E,YAAArtC,EAAAoF,UAAA,IAAAgoC,OAAA,EAAAA,EAAA5wE,aAAA,IAAA2wE,EAAAA,EAAA,OArNA,CAAAj6E,IAAA,oBAAAtB,MAwNA,SAAA5B,EAAAgwC,EAAAstC,GAAA,IAAAC,EAAAC,EAAAC,EAAAn7E,KACAwe,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAGA,IAAA2tC,EAAAL,MAAAA,OAAA,EAAAA,EAAA/4B,SACAjiD,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAA23B,aAAA7rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAomD,OAAA05B,YAAA39E,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAhlB,KAAAwB,QAAAwjB,QACAivC,QAAA,MAAA+mB,EAAA/mB,QAAA+mB,EAAA/mB,QAAA,QAAAgnB,EAAAj7E,KAAAwB,QAAAyyD,eAAA,IAAAgnB,GAAAA,EACAl5B,aAAA,QAAAm5B,EAAAF,EAAAj5B,oBAAA,IAAAm5B,EAAAA,EAAA57E,EACA2iD,SAAA,SAAA3iD,GACA67E,EAAAl5B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAA/7E,KAGA07E,QAtPA,CAAAp6E,IAAA,uBAAAtB,MA0PA,SAAA5B,EAAAgwC,EAAAstC,GAAA,IAAAO,EAAAC,EAAAC,EAAAz7E,KACA,GAAA,MAAAA,KAAAwB,QAAAwjB,SAAA,MAAAg2D,EAAAh2D,QAAA,CAIA,IAAAxG,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAGA,IAAA2tC,EAAAL,MAAAA,OAAA,EAAAA,EAAA/4B,SACAjiD,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAA43B,gBAAA9rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAomD,OAAA85B,sBAAA/9E,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAhlB,KAAAwB,QAAAwjB,QACAivC,QAAA,MAAA+mB,EAAA/mB,QAAA+mB,EAAA/mB,QAAA,QAAAsnB,EAAAv7E,KAAAwB,QAAAyyD,eAAA,IAAAsnB,GAAAA,EACAx5B,aAAA,QAAAy5B,EAAAR,EAAAj5B,oBAAA,IAAAy5B,EAAAA,EAAAl8E,EACA2iD,SAAA,SAAA3iD,GACAm8E,EAAAx5B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAA/7E,KAGA07E,SA5RA,CAAAp6E,IAAA,wBAAAtB,MAgSA,SAAA5B,EAAAgwC,EAAAstC,GAAA,IAAAW,EAAAC,EAAAC,EAAAC,EAAAC,EAAA/7E,KACAwe,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAIA,IAAAlf,EAAAkf,EAAAkvB,GACA2qC,EAAA78E,IAAAC,QAAAqW,cAAAC,YAAAzS,GAAA,GACAouD,EAAA,KACA,MAAApuD,EAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAEA,uBAAA2qC,IACA3qB,EAAApuD,GAGA,IAAA+7E,EAAAL,MAAAA,OAAA,EAAAA,EAAA/4B,SACAjiD,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAA63B,iBAAA/rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAkG,MAAA49B,SAAAq2B,oBAAAh4D,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAhlB,KAAAwB,QAAAwjB,QACAivC,QAAA,MAAA+mB,EAAA/mB,QAAA+mB,EAAA/mB,QAAA,QAAA0nB,EAAA37E,KAAAwB,QAAAyyD,eAAA,IAAA0nB,GAAAA,EACA/lB,gBAAA,QAAAgmB,EAAA,QAAAC,EAAAb,EAAAplB,uBAAA,IAAAimB,EAAAA,EAAA,QAAAC,EAAApuB,SAAA,IAAAouB,OAAA,EAAAA,EAAA97D,cAAA,IAAA47D,EAAAA,EAAAt8E,EACA2iD,SAAA,SAAA3iD,GACAy8E,EAAAzD,eACA95D,EAAA4uB,IAAA,WAAA,GAGA2uC,EAAA95B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAA/7E,KAGA07E,IACA34B,SAAA,SAAA/iD,GACA,MAAAouD,EACAA,EAAA/e,MAAArvC,GAEAkf,EAAAkvB,GAAApuC,EAGAy8E,EAAAzD,gBACA95D,EAAAgvB,SAAA,QAlVA,CAAA5sC,IAAA,qBAAAtB,MAwVA,SAAA5B,EAAAgwC,EAAAstC,GAAA,IAAAgB,EAAAC,EAAAC,EAAA9xE,UAAA+xE,EAAAn8E,KACAwe,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAGA,IAAA2tC,EAAAL,MAAAA,OAAA,EAAAA,EAAA/4B,SACAjiD,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAAw3B,cAAA1rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAomD,OAAAC,aAAAlkD,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAu2D,QAAA,MAAA+mB,EAAA/mB,QAAA+mB,EAAA/mB,QAAA,QAAA+nB,EAAAh8E,KAAAwB,QAAAyyD,eAAA,IAAA+nB,GAAAA,EACAj6B,aAAA,QAAAk6B,EAAAjB,EAAAj5B,oBAAA,IAAAk6B,EAAAA,EAAA38E,EACA2iD,SAAA,SAAA3iD,GACA68E,EAAAl6B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAAx8D,WAAA,EAAAgxB,mBAAAzlC,MAGA4wE,QArXA,CAAAp6E,IAAA,mBAAAtB,MAyXA,SAAA5B,EAAAgwC,EAAAstC,GAAA,IAAAoB,EAAAC,EAAAC,EAAAC,EAAAv8E,KACAwe,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAGA,IAAA2tC,EAAA,QAAAe,EAAApB,SAAA,IAAAoB,OAAA,EAAAA,EAAAn6B,SAaA,OAZA+4B,EAAAr9E,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAu2D,QAAA,MAAA+mB,EAAA/mB,QAAA+mB,EAAA/mB,QAAA,QAAAooB,EAAAr8E,KAAAwB,QAAAyyD,eAAA,IAAAooB,GAAAA,EACAp6B,SAAA,SAAA3iD,GACAi9E,EAAAt6B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAA/7E,KAGA07E,IAEAxlB,oBACAwlB,EAAAxlB,kBAAA,CACA3jD,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,OAIA,IAAAo5E,EAAA,QAAAF,EAAAtB,EAAAxlB,kBAAAzT,oBAAA,IAAAu6B,EAAAA,EAAAh9E,EACA07E,EAAAxlB,kBAAAinB,YAAA,mBAAAD,EAAAA,EAAAh+D,GAAAg+D,EAGAx8E,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAAy3B,YAAA3rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAomD,OAAA2T,WAAAylB,OAjaA,CAAAp6E,IAAA,oBAAAtB,MAqaA,SAAA5B,EAAAgwC,EAAA8C,GAAA,IAAAksC,EAAAC,EAAAC,EAAA58E,KACAwe,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAGA,IAAA2tC,EAAA7qC,MAAAA,OAAA,EAAAA,EAAAyR,SACAjiD,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAA03B,aAAA5rC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAomD,OAAAi7B,YAAAl/E,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAqkD,aAAA,QAAA26B,EAAAlsC,EAAAuR,oBAAA,IAAA26B,EAAAA,EAAAp9E,EACAw9E,QAAA,mBAAAtsC,EAAAssC,QAAAtsC,EAAAssC,QAAAt+D,GAAAgyB,EAAAssC,QACA7oB,QAAA,MAAAzjB,EAAAyjB,QAAAzjB,EAAAyjB,QAAA,QAAA0oB,EAAA38E,KAAAwB,QAAAyyD,eAAA,IAAA0oB,GAAAA,EACA16B,SAAA,SAAA3iD,GACAs9E,EAAA36B,SAAAvkD,EAAAgwC,EAAApuC,GAEA,mBAAA+7E,GACAA,EAAA/7E,KAGAkxC,QAncA,CAAA5vC,IAAA,qBAAAtB,MAucA,SAAA5B,EAAAgwC,EAAA8C,GAAA,IAAAusC,EAAAC,EACAx+D,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAIA,IAAAlf,EAAAkf,EAAAkvB,GACA2qC,EAAA78E,IAAAC,QAAAqW,cAAAC,YAAAzS,GAAA,GACAouD,EAAA,KACA,MAAApuD,EAEAA,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAEA,uBAAA2qC,IACA3qB,EAAApuD,GAGA,IAAA29E,EAAAzsC,EAAA0mB,UACAgmB,EAAA1sC,EAAA4mB,SACAp3D,KAAA4hD,OAAA+3B,IAAAjsC,GAAA1tC,KAAA4hD,OAAA83B,cAAAhsC,GAAA,CACAxjC,MAAA,IAAA1O,IAAAkG,MAAAkhC,MAAAk0B,iBAAAn5D,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAgwD,WAAAA,EACAqJ,UAAA,MAAAvmB,EAAAumB,UAAAvmB,EAAAumB,UAAA,QAAAgmB,EAAA/8E,KAAAwB,QAAAyyD,eAAA,IAAA8oB,GAAAA,EACA/lB,UAAA,MAAAxmB,EAAAwmB,UAAAxmB,EAAAwmB,UAAA,QAAAgmB,EAAAh9E,KAAAwB,QAAAyyD,eAAA,IAAA+oB,GAAAA,EACA9lB,UAAAl3D,KAAAs4E,cAAA,WACA95D,EAAAgvB,SAAA,EAEA,mBAAAyvC,GACAA,EAAA39E,IAEA,KACA83D,SAAA,SAAArpB,EAAAl1B,GACA,EAAAk1B,EAAAjxC,GACAixC,EAAAX,IAAA,UAAA,GAEAW,EAAAoV,UAGA3kC,EAAAgvB,SAAA,EAEA,mBAAA0vC,GACAA,EAAA59E,GAGAuZ,MAEA23B,QA5fA,CAAA5vC,IAAA,sBAAAtB,MAggBA,SAAAgB,GACA,OAAAN,KAAAy8D,OAAA5kD,KAAA,IAAA7X,KAAAwB,QAAAksC,UAAA,KAAAptC,EAAA,QAjgBA,CAAAM,IAAA,2BAAAtB,MAogBA,SAAA5B,GACA,IAAAZ,EAAAY,EAAAgd,QAAA,EAAA/c,EAAAC,KAAAoC,KAAAwB,QAAA42E,eAAAp4E,KAAAwB,QAAA42E,cAAA,MAAA93E,KAAAN,KAAAwB,QAAA22E,wBACA,OAAAx6E,EAAAC,KAAAd,IAAA,EACA,KAEAa,EAAAka,KAAA7X,KAAAwe,IAAA,SAAAA,GACA,OAAAA,EAAAxe,KAAAwB,QAAAqrC,eAAA/vC,GACAkD,QA3gBA,CAAAY,IAAA,WAAAtB,MA8gBA,SAAAouC,EAAApuC,EAAA44D,GAAA,IAAAx6D,EAAA,EAAA0M,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAA+yE,IAAA,EAAA/yE,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GACA,GAAA,IAAAzM,EAAAC,KAAA8vC,GAAA,CAMA,IAAAxjC,EAAAlK,KAAA+6E,YAAArtC,GACA,GAAA1tC,KAAAU,QAAA,CACA,IAAAw3D,EAAA,CACA,GAAA,IAAAv6D,EAAAC,KAAAF,GACA,OAEAw6D,EAAAl4D,KAAAo7E,yBAAA19E,GAGA,GAAA,MAAAw6D,EACA,OAGA,mBAAAA,EAAA9qB,IACA8qB,EAAA9qB,IAAAM,EAAApuC,GAEA44D,EAAAxqB,GAAApuC,OAEA,MAAA4K,GAAA,mBAAAA,EAAAm4C,SACAn4C,EAAAm4C,SAAA/iD,GACAU,KAAAs4E,cACAt4E,KAAAwe,IAAA4uB,IAAAM,EAAApuC,GAEAU,KAAAwe,IAAAkvB,GAAApuC,EAGA69E,IACA,IAAAx/E,EAAAC,KAAAF,KACAA,EAAAsC,KAAA85E,oBAAApsC,IAGA,MAAAxjC,GAEA,EAAAvM,EAAAC,KAAAF,IACAsC,KAAA84E,gBAAAp7E,OAvjBA,CAAAkD,IAAA,kBAAAtB,MA4jBA,SAAA5B,GACA,IAAA8gB,EAAAxe,KAAAwe,IAKA,GAJAxe,KAAAU,UACA8d,EAAAxe,KAAAo7E,yBAAA19E,IAGA,MAAA8gB,EAAA,CAGA,IAAAlf,EAAA,KACAouC,EAAA1tC,KAAA+4E,oBAAAr7E,GAQA,GANA4B,EADA,mBAAAkf,EAAA0B,IACA1B,EAAA0B,IAAAwtB,GAEAlvB,EAAAkvB,GAIA,SADA1tC,KAAAg5E,eAAAt7E,GAGA4B,GADA,IAAA5B,EAAA0C,KAAA,kBACA,IAAAd,EAAAA,EAGA,GAAA,MAAAA,EACA,OAAAU,KAAAg5E,eAAAt7E,IACA,IAAA,OACA,IAAA,SACAA,EAAAkE,IAAAtC,GACA,MACA,IAAA,UACA5B,EAAAkE,IAAApG,IAAAC,QAAAkZ,cAAAe,eAAA,IAAA1V,KAAAwB,QAAA02E,wBAAA54E,EAAAA,EAAA,MACA,MACA,IAAA,OACA5B,EAAA+a,KAAA,UAAAnZ,GACA,MACA,IAAA,QACA5B,EAAAkE,IAAApG,IAAAC,QAAAkZ,cAAAS,kBAAA9V,IACA,MACA,IAAA,UAGA,IAAA,SAEA,MACA,IAAA,OACA,IAAA,WACA,IAAA,OAEA,MACA,IAAA,QACA5B,EAAAkE,IAAApG,IAAAC,QAAAkZ,cAAAmC,eAAAxX,EAAA,QA9mBA,CAAAsB,IAAA,eAAAtB,MAonBA,SAAA5B,GACA,IAAAgwC,EAAA1tC,KAAA+4E,oBAAAr7E,GACA4xC,EAAAtvC,KACA,GAAA,EAAArC,EAAAC,KAAA8vC,GACA,OAAA1tC,KAAAg5E,eAAAt7E,IACA,IAAA,OACA4xC,EAAA2S,SAAAvkD,EAAAgwC,EAAAhwC,EAAAkE,OACA,MACA,IAAA,UACA0tC,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAC,mBAAAha,GAAA,KACA,MACA,IAAA,SACA4xC,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAU,oBAAAza,IACA,MACA,IAAA,UACA4xC,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAW,qBAAA1a,GAAA,IAAA4xC,EAAA9tC,QAAA02E,0BACA,MACA,IAAA,QACA5oC,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAc,mBAAA7a,IACA,MACA,IAAA,QACA4xC,EAAA2S,SAAAvkD,EAAAgwC,EAAAlyC,IAAAC,QAAAgc,aAAAC,mBAAAha,EAAA8F,WACA,MACA,IAAA,QAEA,IAAA,OAEA,MACA,IAAA,OACA,IAAA,WAGA,MACA,IAAA,SAGA,IAAAy1E,EAAAv7E,EAAA0C,KAAA,gBACAd,EAAA,MAAA25E,EAAAA,EAAA3gB,WAAA56D,EAAAkE,MACA0tC,EAAA2S,SAAAvkD,EAAAgwC,EAAApuC,GACA,MACA,IAAA,OACA,IAAA45E,GAAA,IAAAx7E,EAAA0C,KAAA,iBACAwB,EAAAlE,EAAA+a,KAAA,WACA62B,EAAA2S,SAAAvkD,EAAAgwC,EAAAwrC,GAAAt3E,EAAAA,MA/pBA,CAAAhB,IAAA,sBAAAtB,MAqqBA,SAAA5B,GACA,OAAAA,EAAA4C,KAAAN,KAAAwB,QAAAksC,aAtqBA,CAAA9sC,IAAA,iBAAAtB,MAyqBA,SAAA5B,GACA,OAAAA,EAAAyjD,GAAA,SACAzjD,EAAAoa,SAAA,uBAAApa,EAAAoa,SAAA,kBAAApa,EAAAoa,SAAA,eACA,QACApa,EAAAoa,SAAA,eACA,QACApa,EAAAoa,SAAA,iBACA,UACApa,EAAAoa,SAAA,iBACA,SACApa,EAAAoa,SAAA,iBACA,UACApa,EAAAoa,SAAA,cACA,OACApa,EAAAoa,SAAA,eACA,QACA,aAAApa,EAAA4C,KAAA,QACA,OACA,MAAA5C,EAAA0C,KAAA,mBAAA1C,EAAAoa,SAAA,cACA,OAEA,OAEApa,EAAAyjD,GAAA,YACA,OACAzjD,EAAAyjD,GAAA,UACA,cADA,IAlsBA,CAAAvgD,IAAA,WAAAtB,MAusBA,SAAA5B,EAAAgwC,EAAApuC,GACA,GAAA,EAAAouC,EAAAhxC,OAAA,CACA,IAAA0gF,EAAAp9E,KAAA45E,mBAAAlsC,GACAwqB,EAAAl4D,KAAAwe,IACAxe,KAAAU,UACAw3D,EAAAl4D,KAAAo7E,yBAAA19E,IAGA,mBAAA0/E,MAAAA,OAAA,EAAAA,EAAAn7B,UACAm7B,EAAAn7B,SAAAvkD,EAAAgwC,EAAApuC,EAAA44D,GACA,mBAAAl4D,KAAAwB,QAAAygD,SACAjiD,KAAAwB,QAAAygD,SAAAvkD,EAAAgwC,EAAApuC,EAAA44D,GAEAl4D,KAAAqiD,SAAA3U,EAAApuC,EAAA44D,EAAAx6D,GAAA,GAGA,mBAAAsC,KAAAwB,QAAA4rE,aACAptE,KAAAwB,QAAA4rE,YAAA1vE,EAAAgwC,EAAApuC,EAAA44D,GAEA,mBAAAklB,MAAAA,OAAA,EAAAA,EAAAhQ,cACAgQ,EAAAhQ,YAAA1vE,EAAA4B,EAAA44D,MA3tBA,CAAAt3D,IAAA,eAAAtB,MAguBA,SAAAouC,GAAA,IAAA2vC,EAMAC,EALAzD,EAAA,MAAA75E,KAAAwB,QAAAogD,OAAA5hD,KAAAwB,QAAAogD,OAAAlU,GAAA,KACA7xB,EAAA,KACA,MAAAg+D,EAGA,OAFAh+D,EAAAg+D,EAAAh+D,aAGAA,EAAA,CACA2+B,KAAA,QAAA8iC,EAAAzD,EAAAzhB,gBAAA,IAAAklB,EAAAA,EAAA,OAGA,MAAAt9E,KAAAwB,QAAAwS,aACA6H,EAAA7b,KAAAwB,QAAAwS,WAAA05B,IAGA,OAAA,QAAA2vC,EAAAxhE,SAAA,IAAAwhE,EAAAA,EAAA,OA/uBA,CAAAz8E,IAAA,WAAAtB,MAkvBA,WAAA,IAAAi+E,EAAAv9E,KAAAwB,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAAozE,iBAAA,GACAluC,EAAAtvC,KACA4K,EAAA,CACAkP,SAAA,EACA2jE,gBAAA,GACAC,kBAAA,GACAz1C,OAAA,IAkEA,OAhEAjoC,KAAAU,SAGA/C,EAAAuhB,KAAAlf,KAAA04E,mBAAA,SAAAp4E,GACA,IAAAub,EAAA0hE,EAAAI,aAAAr9E,GACAhB,EAAAi+E,EAAAjF,cAAAiF,EAAA/+D,IAAA0B,IAAA5f,GAAAgvC,EAAA9wB,IAAAle,GACAwZ,GAAA,EACApc,EAAA,KACA,GAAA,mBAAAme,MAAAA,OAAA,EAAAA,EAAA2+B,MAAA,CACA,IAGAojC,EAIAC,EAPAC,EAAAjiE,EAAA2+B,KAAAl7C,EAAAi+E,EAAA/+D,KACA,GAAA,kBAAAs/D,EACAhkE,EAAAgkE,OAEAhkE,EAAA,QAAA8jE,EAAAE,MAAAA,OAAA,EAAAA,EAAAhkE,eAAA,IAAA8jE,GAAAA,EAGA,GAAA,EAAAjgF,EAAAC,KAAAkgF,MAAAA,OAAA,EAAAA,EAAA71C,SACA41C,EAAAjzE,EAAAq9B,QAAA7pB,KAAAS,MAAAg/D,EAAAhuC,mBAAAiuC,EAAA71C,aAEA,CAAA,IAAA81C,EACArgF,EAAA4xC,EAAAwqC,oBAAAx5E,GAGAy9E,EAAAliE,MAAAA,OAAA,EAAAA,EAAAmiE,MAEA,OADA1uC,EAAA0pC,eAAAt7E,IAEA,IAAA,OACA,IAAA,QACAoc,EAAA,EAAAnc,EAAAC,KAAA0B,GACA,MACA,IAAA,SACA,IAAA25E,EAAAv7E,EAAA0C,KAAA,oBACA,GAAA64E,GAAA,MAAA35E,EAAA,CAEA,IAAA2+E,EAAAtgF,EAAA+C,QAAApB,GACAwa,EAAA,MAAAnc,EAAAka,KAAAohE,EAAAz3E,QAAAgxD,QAAA,SAAAM,GACA,OAAAmrB,EAAAtgF,EAAA8yD,SAAAnxD,EAAAwzD,EAAAh2D,IAAAg2D,EAAAh2D,KAAAwC,SAGAwa,EAAA,iBAAAxa,GAAA,EAAA3B,EAAAC,KAAA0B,GAEA,MACA,QACAwa,EAAA,MAAAxa,GAKAwa,EACAlP,EAAA6yE,gBAAAr/D,KAAA9d,GAEAsK,EAAA8yE,kBAAAt/D,KAAA9d,IAGA,IAAAkB,EAAAg8E,kBACA,MAAA9/E,IACAA,EAAA4xC,EAAAwqC,oBAAAx5E,IAEA9E,IAAAC,QAAAgc,aAAAoC,cAAAnc,EAAAoc,MAKAlP,EAAAkP,QAAA,IAAAnc,EAAAC,KAAAgN,EAAA8yE,mBACA9yE,MA1zBAmtE,EAAA,GCAAv8E,IAAAiC,IAAAotC,SAAArvC,IAAA+Q,UAAAowB,QAAAG,MACAthC,IAAAmhC,QAAAuhD,SAAA,CACA3kC,OAAA,CACA,CACAE,MAAA,WACA18C,KAAA,WACA8b,SAAA,WACArd,IAAAiC,IAAAilE,cAAA,CACA5D,WAAA,iBAMAtjE,IAAAiC,IAAA6hE,UAAA9jE,IAAAmhC,QAAAuhD,SAAA3kC,SAGA/9C,IAAAkG,MAAAy8E,UAAA,GAEA3iF,IAAAkG,MAAAy8E,UAAAC,aAAA5iF,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAsuC,kBAAA,CACA6oB,QAAA,EACA5B,YAAA,IAAAn6E,KACAuP,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,KACAk7E,YAAA,EACAC,MAAA,CACA/xE,KAAA,eACAnK,KAAA,sBACAm8E,GAAA,oBACAC,KAAA,sBACAp/B,SAAA,sBACAC,KAAA,uBACA5wC,MAAA,oBACAkgC,MAAA,eACAmK,MAAA,iBAGAkJ,SAAAtkD,EAAAu4C,KACAwoC,iBAAA/gF,EAAAu4C,MAEAzC,OAAA,CACAkrC,YAAA,WACAC,YAAA,YAEAvwC,WAAA,SAAA7sC,GACAxB,KAAAtC,IAAAwc,SAAA,iBAEA,MAAA1Y,EAAAg0D,oBACAx1D,KAAAwB,QAAAg0D,kBAAA73D,EAAAupB,SAAA1lB,EAAAg0D,kBAAAh0D,EAAAg0D,kBAAA,GAAAx1D,KAAAknB,SAAAsuC,qBAGAjhB,YAAA,WACA,SAAA/4C,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAAg0D,kBAAAinB,eACAz8E,KAAA6+E,iBAAA7+E,KAAAwB,QAAAg0D,kBAAAinB,aAEAz8E,KAAAtC,IAAAohF,eAAA9+E,KAAAwB,QAAAg0D,mBACAx1D,KAAA++E,YAEA98B,SAAA,SAAA5kD,GACA2C,KAAA++E,WACA,MAAA/+E,KAAA6+E,kBAAA,IAAArjF,IAAAC,QAAAwH,YAAAsN,gBAAAlT,EAAAgF,KAAA28E,GAAAh/E,KAAA6+E,oBACAxhF,EAAAgF,KAAA28E,GAAAvwE,SAAA,EAAA,EAAA,EAAA,GACAzO,KAAA6+E,iBAAAxhF,EAAAgF,KAAA28E,GACAh/E,KAAAwB,QAAAygD,cAAA,IAAA5kD,EAAAgF,KAAA28E,GAAA,KAAA3hF,EAAAgF,KAAA28E,IACAh/E,KAAAi/E,wBAGAC,mBAAA,SAAAC,GACA,MAAAn/E,KAAAo/E,YACAp/E,KAAAo/E,YAAAzhF,EAAA2uC,OAAAtsC,KAAAo/E,YAAA,SAAAC,GACA,OAAA,IAAA7jF,IAAAC,QAAAwH,YAAAsN,gBAAA4uE,EAAA98E,KAAAg9E,EAAAh9E,QAIArC,KAAAo/E,YAAA,GAEAp/E,KAAAo/E,YAAAhhE,KAAA+gE,GACAn/E,KAAAs/E,mBAAAH,IAEAF,oBAAA,SAAAM,GACA,MAAAA,IACAv/E,KAAAo/E,YAAAG,GAGA5hF,EAAAuhB,KAAAlf,KAAAo/E,YAAA,SAAAI,GACAx/E,KAAAs/E,mBAAAE,IACAx/E,OAEAs/E,mBAAA,SAAAD,GACA,IAAA/tE,EAAA9V,IAAAC,QAAAwH,YAAAC,cAAAm8E,EAAAh9E,KAAA,cACAo9E,EAAAz/E,KAAA7C,EAAA,kBAAAmU,EAAA,MACAmuE,EAAA3nE,SAAA,WACA2nE,EAAA5hF,IAAA,mBAAAwhF,EAAAl2D,OAEA,MAAAk2D,EAAAK,WACAD,EAAA5hF,IAAA,QAAAwhF,EAAAK,WAEA,IAAAC,EAAAF,EAAA5nE,KAAA,kBAIA,GAHA,EAAAla,EAAAC,KAAA+hF,IACAA,EAAApjF,SAEA,MAAA8iF,EAAAl2D,MAAA,CACA,IAAAu2D,EAAA,GACA,MAAAL,EAAAK,YACAA,EAAA,UAAAL,EAAAK,UAAA,KAEA,IAAAE,EAAAziF,EAAA,SAAA,CACAwd,MAAA,gBACAsM,MAAA,qBAAAo4D,EAAAl2D,MAAA,IAAAu2D,IAEAE,EAAA9mE,GAAA,QAAA,SAAAzb,GACAA,EAAA43C,kBACA93C,EAAAE,EAAAgc,eAAAqB,QAAA,MAAAkR,QAAA,WAEA6zD,EAAA3+E,OAAA8+E,KAGAb,SAAA,WACA,IAAAc,EAAA7/E,KAAA8/E,sBACAh1E,EAAA,SAAAzI,GACA,OAAA7G,IAAAC,QAAAwH,YAAAC,cAAAb,EAAA,eAEA,MAAAw9E,GAAA,MAAA7/E,KAAA+/E,eAAAj1E,EAAA+0E,EAAAn0E,SAAAZ,EAAA9K,KAAA+/E,cAAAr0E,QAAAZ,EAAA+0E,EAAAj0E,OAAAd,EAAA9K,KAAA+/E,cAAAn0E,OACA5L,KAAA+/E,cAAAF,EACA7/E,KAAAwB,QAAAk9E,iBAAAmB,KAGAC,oBAAA,WACA,IAAAE,EAAAhgF,KAAA7C,EAAA,oBAAA0a,KAAA,UAAAiuC,QACAm6B,EAAAjgF,KAAA7C,EAAA,oBAAA0a,KAAA,UAAAqoE,OACA,OAAA,IAAAviF,EAAAC,KAAAoiF,IAAA,IAAAriF,EAAAC,KAAAqiF,GACA,KAEA,CACAv0E,MAAA,IAAApJ,KAAA09E,EAAA5/E,KAAA,QACAwL,IAAA,IAAAtJ,KAAA29E,EAAA7/E,KAAA,UAGA4P,QAAA,SAAA3N,GACArC,KAAA6+E,iBAAAx8E,EACArC,KAAAtC,IAAA0C,KAAA,kBAAAiC,KAAAA,GACArC,KAAAi/E,sBACAj/E,KAAA++E,cAIAvjF,IAAAkG,MAAAy8E,UAAAgC,aAAA3kF,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACAsW,aAAA,CACA+sC,YAAA,IAAA5kF,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBAEAk3B,SAAA,EACA+C,WAAA,EACAqpB,WAAA,KACAC,aAAA,KACAC,WAAA,MAEA9sC,OAAA,CACA+sC,uBAAA,kBACAC,yBAAA,oBACAC,2BAAA,oBACAC,iCAAA,qBAEApsC,YAAA,WACAv0C,KAAA4gF,gBAEAA,aAAA,WACA,IAAAC,EAAA,SAAAC,GACA,OAAAnjF,EAAAshB,IAAA6hE,EAAA,SAAAC,GACA,OAAApjF,EAAAupB,SAAA,CACA85D,cAAA,CACAzyC,MAAAwyC,EAAAxyC,MAAAwyC,EAAAxyC,MAAAwyC,EACAE,SAAA,MAAAF,EAAA7gE,IAAA,YAAA6gE,EAAA7gE,IAAA,YAAA6gE,GAEAx/E,MAAAw/E,EAAA7gE,IAAA,eAAA,yCAAA6gE,EAAA7gE,IAAA,SAAA6gE,EAAA7gE,IAAA,UACA6gE,EAAAzzC,eAIAttC,KAAAk+E,SAAA,IAAAiC,aAAAe,SAAAlhF,KAAA7C,EAAA,mBAAA,GAAAQ,EAAAupB,SAAAlnB,KAAAwB,QAAA,CACAzD,OAAA,SACAojF,QAAA,CAAA,UAAA,aACAC,YAAA,YACAt/C,YAAA,eACA58B,SAAA,QACA8gB,OAAA,CACA/nB,KAAA,GACAojF,OAAA,QACAC,MAAA,mBAEA7tC,OAAA,mBAAAzzC,KAAAwB,QAAA++E,WAAA5iF,EAAAgC,KAAA,SAAA2sC,EAAAzzB,GACA7Y,KAAAwB,QAAA++E,WAAAj0C,EAAA3uC,EAAAgC,KAAA,SAAAwe,GACAne,KAAA0tD,WAAAvvC,EACAtF,EAAAgoE,EAAA7gF,KAAA0tD,WAAA1tC,UACAhgB,QACAA,MAAA6gF,EAAA7gF,KAAA0tD,WAAA1tC,QACAuhE,YAAA5jF,EAAAgC,KAAAK,KAAAuhF,YAAAvhF,SAEAA,KAAAk+E,SAAAnyC,UAEAy1C,kBAAA,SAAAnkF,GACAF,EAAAE,EAAAgc,eAAAuS,QAAA,SACAvuB,EAAAC,kBAEAikF,YAAA,SAAAp/B,GACAniD,KAAAyhF,gBAAAt/B,GAEA,IAAAu/B,EAAAvkF,EAAAglD,EAAA1N,IACAitC,EAAAxnE,SAAA,kBACA,MAAAioC,EAAAkG,MAAAvrD,KACA4kF,EAAAphF,KAAA,UAAA6hD,EAAAkG,MAAAvrD,IACA4kF,EAAAphF,KAAA,QAAA6hD,EAAAkG,MAAA9mD,OAEA,mBAAAvB,KAAAwB,QAAA6+E,YACAqB,EAAA/hF,KAAA,WAAAhC,EAAAgC,KAAA,WACAK,KAAAwB,QAAA6+E,WAAArgF,KAAA2hF,QAAAx/B,EAAAkG,MAAAvrD,MACAkD,SAIAyhF,gBAAA,SAAAt/B,GACAniD,KAAAq0C,QAAA,IAAA74C,IAAAomF,QAAAzkF,EAAAglD,EAAA1N,IAAA,CACA9I,SAAA3rC,KAAAwB,QAAA6xC,aAAA+sC,YACAhpC,UAAAp3C,KAAAtC,IACAkuB,QAAA,QACAooB,WAAAr2C,EAAAgC,KAAA,WACA,MAAA,CACA4uC,MAAA4T,EAAAkG,MAAA24B,cAAAzyC,MACA9F,SAAAzoC,KAAAwB,QAAAinC,WAEAzoC,SAGA2hF,QAAA,SAAAE,GACA,IAAAC,EAAA9hF,KAAA0tD,WAAAxtC,IAAA2hE,GACA,OAAAC,EAAAvzC,MAAAuzC,EAAAvzC,MAAAuzC,GAEAC,gBAAA,SAAA1kF,GACA,IAAAwkF,EAAA1kF,EAAAE,EAAAgc,eAAAqB,QAAA,eAAAta,KAAA,UACAJ,KAAAgiF,SAAAhiF,KAAA2hF,QAAAE,KAEAG,SAAA,SAAAjB,GACA,mBAAA/gF,KAAAwB,QAAA6+E,YACArgF,KAAAwB,QAAA6+E,WAAAU,IAGAkB,kBAAA,SAAA5kF,GACA,IAAAwkF,EAAA1kF,EAAAE,EAAAgc,eAAAqB,QAAA,eAAAta,KAAA,UACAJ,KAAAkiF,WAAAliF,KAAA2hF,QAAAE,KAEAK,WAAA,SAAAnB,GACA,mBAAA/gF,KAAAwB,QAAA8+E,cACAtgF,KAAAwB,QAAA8+E,aAAAS,IAGAoB,kBAAA,WACA,MAAAniF,KAAAq0C,UACAr0C,KAAAq0C,QAAA93C,SACAyD,KAAAq0C,QAAA,SAKA74C,IAAAkG,MAAAy8E,UAAAiE,eAAA5mF,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,oBAEA0W,OAAA,CACA4uC,sBAAA,iBACAC,2BAAA,sBACAC,oBAAA,iBACAC,+BAAA,gBAEA1uC,kBAAA,WACAt4C,IAAAiC,IAAA0jB,QAAAwhD,yBAAA,KAAAhlE,EAAAgC,KAAA,SAAAkgC,GACA7/B,KAAAyiF,oBAAA5iD,EACArkC,IAAAiC,IAAA0jB,QAAAuhE,sBAAA/kF,EAAAgC,KAAA,SAAA0zB,GACArzB,KAAA2iF,aAAAtvD,EACA73B,IAAAiC,IAAA0jB,QAAAyhE,sBAAAjlF,EAAAgC,KAAA,SAAAkjF,GACA7iF,KAAA8jD,SAAA++B,EACA7iF,KAAA+rC,UACA/rC,QACAA,QACAA,QAEAg0C,WAAA,WACA,MAAA,CACA8P,SAAA9jD,KAAA8jD,WAGAvP,YAAA,WACA,MAAAv0C,KAAA8jD,WACA9jD,KAAAk+E,SAAA,IAAA1iF,IAAAkG,MAAAy8E,UAAAgC,aAAA,CACA1rC,GAAAz0C,KAAA7C,EAAA,oBACAojF,WAAA5iF,EAAAgC,KAAAK,KAAAugF,WAAAvgF,MACAqgF,WAAA1iF,EAAAgC,KAAA,SAAAohF,GACA/gF,KAAAgiF,SAAAjB,IACA/gF,MACAsgF,aAAA3iF,EAAAgC,KAAA,SAAAohF,GACA/gF,KAAAiiF,kBAAAlB,IACA/gF,MACAg3D,WAAA,MAIAupB,WAAA,SAAAj0C,EAAAzzB,GACA,IAAA1Z,EAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,aAEA,CACA,CACAI,UAAA,QACAD,MAAA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAgqC,EAAA5gC,OAAA,eAEA,CACAnM,UAAA,SACAD,MAAA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAgqC,EAAA1gC,KAAA,eAEA,CACArM,UAAA,UACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,kBAEA,CACA3gB,UAAA,cACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,sBAEA,CACA3gB,UAAA,QACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,wBAEA,CACA3gB,UAAA,aACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,8BAEA,CACA3gB,UAAA,WACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,yBAEA,CACA3gB,UAAA,YACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,0BAEA,CACA3gB,UAAA,eACAD,MAAAU,KAAA8jD,SAAA5jC,IAAA,0BAIA,IAAA1kB,IAAAyD,KAAAC,QAAA,CACAC,SAAAA,IACA+gB,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAC,GACAI,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAAyrC,UAAA2E,cAEA,IAAAC,EAAA,IAAAvnF,IAAAk3C,YAAAjK,SAAAu6C,MAAApjF,EAAAkhF,OACAnjF,EAAAuhB,KAAA6jE,EAAA/iE,OAAA,SAAAijE,GACA,IAAA9tD,EAAAn1B,KAAA2iF,aAAAziE,IAAA+iE,EAAA/iE,IAAA,aACA,MAAAiV,IACAA,EAAAn1B,KAAA2iF,aAAAO,cAEAD,EAAA9tD,OAAAA,EAEA,IAAA2sD,EAAAmB,EAAAE,kBACAC,EAAA,EAAAH,EAAA/iE,IAAA,UAAA+iE,EAAA/iE,IAAA,QAAA+iE,EAAA/iE,IAAA,QAAA,MAAA+iE,EAAA/iE,IAAA,eACA4hE,EAAA10C,IAAA,QAAAg2C,GACApjF,KAAA0tD,WAAA9a,IAAAkvC,IACA9hF,MAEArC,EAAAuhB,KAAAtf,EAAA6zC,OAAA,SAAAstC,GACA,IAAAqC,EAAArC,EAAAhkF,KAAA,MAAAgkF,EAAA1Q,YACA,EAAA1yE,EAAAC,KAAAoC,KAAA8jD,SAAA5jC,IAAA,2BACAviB,EAAAuhB,KAAAlf,KAAA8jD,SAAA5jC,IAAA,yBAAA,SAAAmjE,GACA,IAAAC,EAAA3lF,EAAAka,KAAAkpE,EAAAlhD,aAAA,SAAAmS,GACA,OAAAA,EAAAl1C,KAAAumF,IAEA,GAAA,MAAAC,EAAA,CACA,IAAAC,EAAAvjF,KAAAyiF,oBAAAviE,IAAAmjE,GACA,GAAA,MAAAE,EAAA,CACA,IAAAC,EAAA,GACA,SAAAD,EAAArjE,IAAA,aAEAsjE,EADA,EAAA7lF,EAAAC,KAAA0lF,EAAAhkF,OACA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAghF,EAAAhkF,OAAA,cAAA,GAGA,UAKA,aAAAikF,EAAArjE,IAAA,aAEAsjE,EADA,EAAA7lF,EAAAC,KAAA0lF,EAAAhkF,OACA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAghF,EAAAhkF,OAAA,uBAGA,UAMA,EAAA3B,EAAAC,KAAA0lF,EAAAhkF,SACAkkF,EAAAF,EAAAhkF,OAdA8jF,GAAA,iBAAAG,EAAArjE,IAAA,aAAA,cAAAsjE,KAoBAxjF,MAGA,IAAAyjF,EAAAjoF,IAAAC,QAAAwH,YAAAgH,gBAAA82E,EAAA0C,OAAA1C,EAAA0C,OAAA1C,EAAAr1E,OAAAq1E,EAAA2C,UACAr7B,EAAA,IAAA7sD,IAAAwkB,OAAAm+D,UAAAwF,aAAA,CACA7mF,IAAAa,EAAAid,WACA7d,KAAAgkF,EAAAhkF,KACA8uB,UAAAk1D,EAAAl1D,UACAwkD,YAAA0Q,EAAA1Q,YACA9uE,MAAA6hF,EACA13E,MAAAlQ,IAAAC,QAAAwH,YAAAgH,gBAAA82E,EAAAr1E,OAAAq1E,EAAA2C,UACAD,OAAA1C,EAAA0C,OAAAA,EAAA,KACA73E,IAAA63E,EACAG,OAAA7C,EAAA2C,SACAA,SAAA3C,EAAA2C,SACAG,gBAAA,MAAA9C,EAAA53D,MAAA43D,EAAA53D,MAAA,cAAA,qBACA26D,YAAA,MAAA/C,EAAA53D,MAAA43D,EAAA53D,MAAA,cAAA,uBAEAnpB,KAAA0tD,WAAA9a,IAAAyV,IACAroD,MACA6Y,EAAA7Y,KAAA0tD,aACA1tD,QAEA+jF,eAAA,WACA,IAAAC,EAAA,IAAAxoF,IAAAwkB,OAAAyoB,SAAAw7C,KAAA,CACAlnF,KAAA,GACAmgE,SAAA,EACAxxD,MAAA,KACA+3E,OAAA,KACAS,aAAA,EACAR,UAAA,EACAS,aAAA,EACAC,gBAAA,EACAC,MAAA,GACAlvD,OAAAn1B,KAAA2iF,aAAAO,eAEAljF,KAAAgiF,SAAAgC,IAEAM,oBAAA,WACA,IAAAN,EAAA,IAAAxoF,IAAAwkB,OAAAyoB,SAAAw7C,KAAA,CACAlnF,KAAA,GACAmgE,SAAA,EACAxxD,MAAA,KACA+3E,OAAA,KACAS,aAAA,EACAR,UAAA,EACAS,aAAA,EACAC,gBAAA,EACAC,MAAA,GACAlvD,OAAAn1B,KAAA2iF,aAAAO,eAEAljF,KAAAgiF,SAAAgC,IAEAhC,SAAA,SAAAjB,GACA,EAAAA,EAAAjkF,IAAAikF,EAAA7zC,QAEA,MAAAltC,KAAAuuC,OAAAwyC,EAAA7zC,SAAA,MAAA6zC,EAAA7gE,IAAA,aACA6gE,EAAA7zC,QAkBA,IAAA1xC,IAAAkG,MAAA+mC,SAAA87C,cAAA,CACA97C,SAAAzoC,KAAAuuC,MACAA,MAAAwyC,EACA1tD,SAAArzB,KAAA2iF,aACAxpB,OAAAx7D,EAAAgC,KAAA,SAAAohF,GACA/gF,KAAA+rC,UACA/rC,MACAo3D,SAAAz5D,EAAAgC,KAAA,WACAK,KAAAkiF,WAAAnB,IACA/gF,QA1BA+gF,EAAAl1C,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACA,IAAAnE,IAAAkG,MAAA+mC,SAAA87C,cAAA,CACA97C,SAAAzoC,KAAAuuC,MACAA,MAAAwyC,EACA1tD,SAAArzB,KAAA2iF,aACAxpB,OAAAx7D,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,MACAo3D,SAAAz5D,EAAAgC,KAAA,WACAK,KAAAkiF,WAAAnB,IACA/gF,SAEAA,QAkBAxE,IAAAiC,IAAAiuB,OAAAC,SAAA,YAAAo1D,EAAA7gE,IAAA,aAAApV,WAAA,aAAAi2E,EAAAjkF,GAAAgO,WAAA,CACA8gB,SAAA,IAKApwB,IAAAiC,IAAAiuB,OAAAC,SAAA,YAAAo1D,EAAA7gE,IAAA,aAAApV,WAAA,CACA8gB,SAAA,KAIAq2D,kBAAA,SAAAlB,GACA,IAAAvlF,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,mBACAovB,KAAA,6CACAgiB,SAAAz5D,EAAAgC,KAAA,WACAK,KAAAkiF,WAAAnB,IACA/gF,SAGAkiF,WAAA,SAAAnB,GACA/gF,KAAA0tD,WAAAnxD,OAAAwkF,GACAA,EAAA59B,QAAA,CACAzuC,QAAA/W,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,SAGAwkF,eAAA,WACA,IAAAC,EAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAA7C,EAAA,eAAA,CACA4D,KAAA,SACA2jF,YAAA,cAEA,IAAAlpF,IAAAwkB,OAAA2kE,UAAAC,OAAA,CACA7nF,KAAA,kBACA8nF,SAAA,aACAC,SAAA,CACArjF,KAAAzB,KAAAk+E,SAAAxgF,IAAAma,KAAA,mBAAAktE,aACA,WACAN,EAAAloF,YAGAyoF,aAAA,WACA,IAAAxpF,IAAAkG,MAAAy8E,UAAA8G,sBAAA,CACA12C,MAAAvuC,KAAA8jD,SACAqV,OAAAx7D,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,WAKAxE,IAAAkG,MAAAy8E,UAAA8G,sBAAAzpF,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BACAo8B,OAAA,MAEA1lB,OAAA,CACA4nB,kBAAA,QAEApkB,mBAAA,WACA,IAAAiuC,EAAAvnF,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAwhD,yBAAA,KAAAhlE,EAAAgC,KAAA,SAAAwlF,GACAnlF,KAAA6/B,aAAAslD,EACA3pF,IAAAiC,IAAA0jB,QAAAikE,qBAAAznF,EAAAgC,KAAA,SAAA0zB,GACArzB,KAAAqlF,gBAAAhyD,EACArzB,KAAA+rC,UACA/rC,QACAA,QACAA,MACA,MAAAA,KAAAuuC,MACA/yC,IAAAiC,IAAA0jB,QAAAyhE,sBAAAjlF,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAAuuC,MAAAuV,EACAohC,KACAllF,OAGAklF,KAGAlxC,WAAA,WACA,MAAA,CACAqxC,gBAAArlF,KAAAqlF,gBACAxlD,aAAAliC,EAAA2uC,OAAAtsC,KAAA6/B,aAAA7f,OAAA,SAAAgyB,GACA,IAAA0iB,EAAA1iB,EAAA9xB,IAAA,aAAAjL,cACA,MAAA,SAAAy/C,GAAA,QAAAA,IAEA4wB,iBAAA3nF,EAAA2uC,OAAAtsC,KAAA6/B,aAAA7f,OAAA,SAAAgyB,GACA,IAAA0iB,EAAA1iB,EAAA9xB,IAAA,aAAAjL,cACA,MAAA,SAAAy/C,GAAA,aAAAA,MAIAngB,YAAA,WACA,QAAA,IAAAv0C,KAAA6/B,aAAA,CACA,IAAArkC,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,oBACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,iBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,gBAAA9tC,IACAU,QAGA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,qBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,oBAAA9tC,IACAU,QAGA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,yBACAw3D,YAAA,EACA5S,aAAA/hD,KAAAuuC,MAAAruB,IAAA,uBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,sBAAA9tC,IACAU,QAGAxE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA6uB,2BACA,IAAA/pF,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,0BACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,uBACAy0C,YAAA,EACA1S,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,sBAAA9tC,IACAU,QAIA,IAAAwlF,EAAA,CACA9kD,SAAA1gC,KAAAuuC,MAAAruB,IAAA,6BACAulE,OAAAzlF,KAAAuuC,MAAAruB,IAAA,yBAEA,IAAA1kB,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,yBACA4kD,aAAAyjC,EACAE,WAAA,EACAzjC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,uBAAA9tC,EAAAmmF,OAAAnmF,EAAAmmF,OAAA,MACAzlF,KAAAuuC,MAAAnB,IAAA,4BAAA9tC,EAAAohC,SAAAphC,EAAAohC,SAAA,SACA1gC,QAGA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,0BACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,yBACAy0C,YAAA,EACA1S,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,wBAAA9tC,IACAU,UAIA2wC,KAAA,WACA3wC,KAAAuuC,MAAAd,aACAztC,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,4BAEA,mBAAA/rB,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,OAEAvuC,KAAA64C,eACA74C,QAIAA,KAAA64C,iBAMAr9C,IAAAwkB,OAAAm+D,UAAA,GACA3iF,IAAAwkB,OAAAm+D,UAAAwH,iBAAAnqF,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,SACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,iBAMA3D,IAAAwkB,OAAAm+D,UAAAwF,aAAAnoF,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAoM,MAAA,SAAAkiC,GAKA,OAJA,MAAAA,EAAAA,QACAvuC,KAAAuuC,MAAAA,EAAAA,OAGAA,KAIA/yC,IAAAk3C,YAAAyrC,UAAA,GACA3iF,IAAAk3C,YAAAyrC,UAAA2E,cAAAtnF,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAm+D,UAAAwF,eC7rBAnoF,IAAAoqF,OAAA,CACAv1D,OAAA,CACAw1D,OAAA,0BACAC,QAAA,0BACAC,UAAA,0BACAC,SAAA,4BAIAxqF,IAAAoqF,OAAAK,MAAA,WACA,SAAAC,EAAAxoF,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAkmF,GACAlmF,KAAAy8D,OAAA/+D,EACAsC,KAAAy8D,OAAAviD,SAAA,eACAla,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAgtB,MAAA,KACAzwB,OAAA,KACAooF,WAAA,EACA3rB,QAAA78D,EAAAu4C,OAEAl2C,KAAAomF,cAVA,OAAAn7C,aAAAi7C,EAAA,CAAA,CAAAtlF,IAAA,cAAAtB,MAaA,WAgBA,GAfA,EAAA3B,EAAAC,KAAAoC,KAAAtC,MACAsC,KAAAtC,IAAAnB,SAEAyD,KAAAwB,QAAAgtB,OAAAxuB,KAAAwB,QAAAzD,SACAiC,KAAAwB,QAAAA,QAAA7D,EAAAupB,SAAA,CACAm/D,qBAAA,GACArmF,KAAAwB,QAAAA,QAAAxB,KAAAwB,QAAAA,QAAA,KAEAxB,KAAAtC,IAAAP,EAAA,WAAA,CACAY,OAAAiC,KAAAwB,QAAAzD,OACAywB,MAAAxuB,KAAAwB,QAAAgtB,MACAvH,MAAA,4BAEAjnB,KAAAy8D,OAAA37D,OAAAd,KAAAtC,KAEA,aAAAsC,KAAAwB,QAAAT,KAAA6B,eAAA5C,KAAAwB,QAAA2kF,UAAA,CACA,IAAA9hF,EAAArE,KAAAwB,QAAA6C,MACA2G,MAAA3G,KACAA,EAAA1G,EAAA6lB,OAAAxjB,KAAAwB,QAAApB,KAAAkmF,SAAA,GAAAlmF,KAAA,SAAAmmF,EAAAhhF,GACA,OAAAA,EAAAghF,GACA,IAEAvmF,KAAAy8D,OAAA37D,OAAA3D,EAAA,WAAA,CACAwd,MAAA,iFACAsM,MAAA,6BAAAjnB,KAAAwB,QAAAzD,OAAA,GAAA+M,WAAA,MACAqxD,KAAA93D,KAIArE,KAAAwmF,MAAA,IAAAP,MAAAjmF,KAAAtC,IAAAsC,KAAAwB,SAEA,MAAAxB,KAAAwB,QAAAg5D,SACAx6D,KAAAtC,IAAAob,GAAA,QAAAnb,EAAAgC,KAAA,SAAAtC,GACA2C,KAAAwB,QAAAg5D,QAAAx6D,KAAAwmF,MAAAC,mBAAAppF,KACA2C,WAhDAkmF,EAAA,GAqDA1qF,IAAAkG,MAAAkkF,OAAA,GACApqF,IAAAkG,MAAAkkF,OAAAc,YAAAlrF,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAy/D,eAAA,EACAC,UAAA,YACAC,SAAA,EACAC,OAAA,KACAC,oBAAA,GAEAtzC,OAAA,CACAuzC,qBAAA,cAEAlzC,kBAAA,WACA9zC,KAAA0tD,WAAA1tD,KAAAwB,QAAAinC,SAAAq4C,MAEA9gF,KAAAinF,YAAA,CACAnzB,MAAA,MAAA9zD,KAAAwB,QAAAolF,UAAA5mF,KAAAwB,QAAAolF,UAAA,YACAM,IAAA,MAAAlnF,KAAAwB,QAAAqlF,SAAA7mF,KAAAwB,QAAAqlF,UAGAtyC,YAAA,WACAv0C,KAAAmnF,YACAnnF,KAAAonF,qBAEAC,cAAA,WACA,IAAAz8E,EAAA,CACAk2E,MAAA,GACAwG,MAAA,GACAC,aAAA,KACAC,aAAA,KACAC,WAAA,KACAC,kBAAA,GAEAC,EAAAnsF,IAAAC,QAAAwH,YAAA2M,kBAAA,IAAAtN,MAAA,GACAslF,EAAApsF,IAAAC,QAAAwH,YAAA2M,kBAAA,IAAAtN,KAAA,GA+DA,OA9DA3E,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAA+gE,GACA,IAAAr1E,EAAA,KACA,MAAAq1E,EAAA7gE,IAAA,WACAxU,EAAA,IAAApJ,KAAAy+E,EAAA7gE,IAAA,WACA,MAAAtV,EAAA28E,cAAA77E,EAAAd,EAAA28E,gBACA38E,EAAA28E,aAAA77E,IAEA,MAAAd,EAAA48E,cAAA97E,EAAAd,EAAA48E,gBACA58E,EAAA48E,aAAA97E,IAIA,IAAAE,EAAA,KAaA,GAZA,MAAAm1E,EAAA7gE,IAAA,YACAtU,EAAA,IAAAtJ,KAAAy+E,EAAA7gE,IAAA,YACA,MAAAtV,EAAA68E,YAAA77E,EAAAhB,EAAA68E,cACA78E,EAAA68E,WAAA77E,IAIAhB,EAAA88E,iBAAA98E,EAAA88E,kBACA,MAAAh8E,GAAA,MAAAE,GAAApQ,IAAAC,QAAAwH,YAAA4L,uBAAA84E,EAAAC,EAAAl8E,EAAAE,IACA,MAAAF,GAAAlQ,IAAAC,QAAAwH,YAAA0L,qBAAAg5E,EAAAC,EAAAl8E,IACA,MAAAE,GAAApQ,IAAAC,QAAAwH,YAAA0L,qBAAAg5E,EAAAC,EAAAh8E,GAEAm1E,aAAAvlF,IAAAwkB,OAAAyoB,SAAAw7C,KAAA,CACA,IAAA96D,EAAA43D,EAAA7gE,IAAA,eAAA,UAAA6gE,EAAA5rD,OAAA4rD,EAAA5rD,OAAAjV,IAAA,SAAA,UACA2nE,EAAA,CACA1rB,KAAA4kB,EAAA7gE,IAAA,QACA4nE,WAAA/G,EAAA7gE,IAAA,SAAA6gE,EAAA7gE,IAAA,SAAAtV,EAAA48E,aACAtqB,SAAA6jB,EAAA7gE,IAAA,eAAA,EAAA6gE,EAAA7gE,IAAA,YACApjB,GAAAikF,EAAA7gE,IAAA,UACAnf,KAAAggF,EAAA7gE,IAAA,eAAA,YAAA6gE,EAAA7gE,IAAA,iBAAA,UAAA,OACA+gE,SAAAF,EAAA7gE,IAAA,mBAAA,IACA1c,OAAAu9E,EAAA7gE,IAAA,kBAAA6gE,EAAA7gE,IAAA,mBAAA6gE,EAAA7gE,IAAA,UAAA6gE,EAAA7gE,IAAA,iBAAA6gE,EAAA7gE,IAAA,gBACA6nE,YAAAhH,EAAA7gE,IAAA,eAAA,eAAA,KACA6jC,QAAAg9B,EAAA7gE,IAAA,SACA8nE,WAAAjH,EAAA7gE,IAAA,iBAAA,GAAA,KACA+nE,YAAA,MAAAlH,EAAA7gE,IAAA,WAAA6gE,EAAA7gE,IAAA,iBACAiJ,MAAAA,EACAu2D,UAAAlkF,IAAAC,QAAA4sB,aAAAa,4BAAAC,GACA++D,cAAA/+D,EACAgmC,UAAA4xB,EAAA7gE,IAAA,cAEAtV,EAAAk2E,MAAA1iE,KAAAypE,KAEA7nF,MAEArC,EAAAuhB,KAAAlf,KAAAwB,QAAAinC,SAAA0/C,aAAAnoE,OAAA,SAAAooE,GACA,IAAAA,EAAAloE,IAAA,aAAA,CACA,IAAAmoE,EAAA,CACAvrF,GAAAsrF,EAAAloE,IAAA,gBACA1G,OAAA4uE,EAAAloE,IAAA,UACAyyD,OAAAyV,EAAAloE,IAAA,gBACAnf,KAAA8J,OAAAy9E,KAAA9sF,IAAA+Q,UAAAk8B,SAAAU,WAAAtxB,KAAA,SAAAjX,GAAA,OAAApF,IAAA+Q,UAAAk8B,SAAAU,UAAAvoC,KAAAwnF,EAAAloE,IAAA,UACAqoE,IAAAH,EAAAloE,IAAA,WAGAtV,EAAA08E,MAAAlpE,KAAAiqE,KAEAroF,MAEA4K,GAEA49E,gBAAA,SAAA3G,GAAA,IAAAjjC,EAAA,EAAAx0C,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,OACA,EAAAy3E,GAIA7hF,KAAAihE,MAAAwnB,IAAAC,cAAAC,UAAA9G,EAAAjjC,MAAAA,EAAAA,EAAA,SAEAuoC,UAAA,WACAnnF,KAAAihE,OACAjhE,KAAAihE,MAAA2nB,aAGA,IAAA3nB,EAAA4nB,MAAAC,oBACA9oF,KAAAihE,MAAAA,GAGA8nB,WAEA9nB,EAAAv2B,UAAAs+C,iBAAA,SAAA3mF,GAGA,GAAA,IAAAA,EAAA0N,UAAA,IAAA1N,EAAA0N,SACA,MAAA,qBAGAkxD,EAAAv2B,UAAAu+C,oBAAA,SAAAlI,EAAA1+E,GAMA,GAAA,IAAAA,EAAA0N,UAAA,IAAA1N,EAAA0N,SACA,MAAA,qBAKAkxD,EAAAioB,OAAAC,WAAA,EAGAloB,EAAAmoB,KAAA,WAGAnoB,EAAAioB,OAAAG,WAAA,EACApoB,EAAAioB,OAAAI,mBAAA,EAGAroB,EAAAsoB,YAAA,CACAzsF,GAAA,eACA0sF,SAAA,CACAr8E,KAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,MAMA,IAAAmiC,EAAAtvC,KACAihE,EAAAioB,OAAAO,aAAAC,WAAA,CACAjyC,KAAA,SAAA36C,EAAA8hD,EAAAsqC,EAAAluE,GACAA,EAAA2uE,UAAA,6GACAr6C,EAAAqyC,QAAA7kF,GAAA,IACA8sF,EAAAt6C,EAAAoe,WAAAxtC,IAAApjB,GACAwyC,EAAAu6C,SAAAD,EAAA1pE,IAAA,UAEAlgB,KAAA8E,WAAA,IAAAtJ,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAnF,EAAAnyC,EAAA,sBACA82D,SAAA,EACAuB,kBAAA,CACA3jD,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAAC,SACA03E,YAAAmN,EAAA1pE,IAAA,SAAA0pE,EAAA1pE,IAAA,SAAA,IAAA5d,KACAwnF,QAAA,aAAAlrC,EAAA7hD,KAAA6sF,EAAA1pE,IAAA,SAAA0pE,EAAAG,cACAC,kBAAA,CACAC,WAAA,eAAArrC,EAAA7hD,KAAA,OAAA,UAGAklD,SAAA,SAAA3iD,GACA,eAAAs/C,EAAA7hD,MACAuyC,EAAA2xB,MAAAwnB,IAAAC,cAAAC,UAAAiB,EAAA1pE,IAAA,UAAA,gBAKA26B,KAAA,SAAAjwB,GACA5qB,KAAA8E,WAAAvI,UAEA2tF,UAAA,SAAA5qF,EAAAxC,EAAA8hD,EAAA4O,GACA,IAAAo8B,EAAAt6C,EAAAoe,WAAAxtC,IAAA5gB,EAAAxC,IACAuF,EAAA,IAAAC,KAAAsnF,GAAAA,EAAA1pE,IAAA,SAAA0pE,EAAA1pE,IAAA,SAAA5gB,EAAAwoF,YACA,aAAAlpC,EAAA7hD,OACAsF,EAAA,IAAAC,KAAAsnF,GAAAA,EAAA1pE,IAAA,UAAA0pE,EAAA1pE,IAAA,UAAA5gB,EAAA6qF,SAAA,IAEA9nF,EAAAoM,SAAA,EAAA,EAAA,EAAA,GAEAzO,KAAA8E,WAAAu9C,SAAAhgD,IAEA+nF,UAAA,SAAAttF,EAAA8hD,EAAA4O,GACA,OAAAxtD,KAAA8E,WAAAwzD,YAEA+xB,WAAA,SAAA/qF,EAAAxC,EAAA8hD,EAAA4O,GACA,IAAA88B,EAAA,IAAAhoF,KAAA,eAAAs8C,EAAA7hD,KAAAuC,EAAAwoF,WAAAxoF,EAAA6qF,SAAA,GACAI,EAAA,IAAAjoF,KAAAtC,KAAA8E,WAAAwzD,YAKA,OAHAgyB,EAAA77E,SAAA,EAAA,EAAA,EAAA,GACA87E,EAAA97E,SAAA,EAAA,EAAA,EAAA,GAEA67E,EAAAr/E,YAAAs/E,EAAAt/E,WAAA3L,EAAA2oF,aAAA,MAAAjoF,KAAA8E,WAAAwzD,YAEAkyB,SAAA,SAAAlrF,EAAAxC,EAAA8hD,EAAA4O,GACA,OAAA,OAAAluD,GAEAqxC,KAAA,SAAA7zC,EAAA8hD,EAAA4O,GACA,IAAAuzB,EAAAzxC,EAAAqyC,QAAA7kF,GACA8sF,EAAAt6C,EAAAoe,WAAAxtC,IAAApjB,GAEA,GAAA,eAAA8hD,EAAA7hD,KACAgkF,EAAA+G,WAAAtsF,IAAAC,QAAAwH,YAAA2M,kBAAA,IAAAtN,KAAAtC,KAAA8E,WAAAwzD,YAAA,GAAAsxB,EAAA1pE,IAAA,gBAAA,GACA6gE,EAAAoJ,SAAA3uF,IAAAC,QAAAwH,YAAA2M,kBAAAmxE,EAAA+G,WAAA,EAAA/G,EAAA7jB,SAAA6jB,EAAA7jB,SAAA,GAAA0sB,EAAA1pE,IAAA,gBAAA,OACA,CACA,IAAAg9C,EAAA1hE,IAAAC,QAAAwH,YAAAsN,gBAAAvQ,KAAA8E,WAAAwzD,WAAAyoB,EAAA+G,YAAA8B,EAAA1pE,IAAA,gBAAA,GACA6gE,EAAAoJ,SAAA3uF,IAAAC,QAAAwH,YAAA2M,kBAAAmxE,EAAA+G,WAAA,EAAA5qB,EAAAA,EAAA,GAAA0sB,EAAA1pE,IAAA,gBAAA,GAGA,mBAAAovB,EAAA9tC,QAAAipF,aACAn7C,EAAA9tC,QAAAipF,YAAAb,EAAA7I,EAAAniC,EAAA7hD,MAAA,GAEAuyC,EAAA23C,aACA33C,EAAA0X,QAGAsU,MAAA,SAAA9N,GACA,IAAAtjD,EAAAolC,EAAAo7C,SAAAl9B,GAEAtjD,IAGAA,EAAAoxD,OACApxD,EAAAoxD,QAGApxD,EAAAioD,QACAjoD,EAAAioD,YAMA8O,EAAAioB,OAAAO,aAAAkB,eAAA,CACAlzC,KAAA,SAAA36C,EAAA8hD,EAAAsqC,EAAAluE,GACA,IAAA+lE,EAAAzxC,EAAAqyC,QAAA7kF,GACAwyC,EAAAu6C,SAAA9I,EAAA+G,YAEA9sE,EAAA2uE,UAAA,wEAEAO,UAAA,SAAA5qF,EAAAxC,EAAA8hD,EAAA4O,GACA,IAAAtjD,EAAAolC,EAAAo7C,SAAAl9B,GACAtjD,IACAA,EAAA5K,MAAAA,EAAA49D,WAGAktB,UAAA,SAAAttF,EAAA8hD,EAAA4O,GACA,IAAAtjD,EAAAolC,EAAAo7C,SAAAl9B,GACA,GAAAtjD,EACA,OAAAA,EAAA5K,OAAA,GAGA+qF,WAAA,SAAA/qF,EAAAxC,EAAA8hD,EAAA4O,GACA,IAAAo9B,EAAA5qF,KAAAoqF,UAAAttF,EAAA8hD,EAAA4O,GACA,OAAAq9B,OAAAvrF,EAAA49D,YAAA2tB,OAAAD,IAEAJ,SAAA,SAAAlrF,EAAAxC,EAAA8hD,EAAA4O,GACA,OAAAxiD,MAAAzI,SAAAjD,KAAA,EAAAA,GAEAqxC,KAAA,SAAA7zC,EAAA8hD,EAAA4O,GACA,IAAAuzB,EAAAzxC,EAAAqyC,QAAA7kF,GACA8sF,EAAAt6C,EAAAoe,WAAAxtC,IAAApjB,GAEAikF,EAAA7jB,SAAA36D,SAAAvC,KAAAoqF,UAAAttF,EAAA8hD,EAAA4O,IACAuzB,EAAAoJ,SAAA3uF,IAAAC,QAAAwH,YAAA2M,kBAAAmxE,EAAA+G,WAAA/G,EAAA7jB,UAAA0sB,EAAA1pE,IAAA,gBAAA,GAEA,mBAAAovB,EAAA9tC,QAAAipF,aACAn7C,EAAA9tC,QAAAipF,YAAAb,EAAA7I,EAAAniC,EAAA7hD,MAAA,GAEAuyC,EAAA23C,aACA33C,EAAA0X,QAGAsU,MAAA,SAAA9N,GACA,IAAAtjD,EAAAolC,EAAAo7C,SAAAl9B,GAEAtjD,IAGAA,EAAAoxD,OACApxD,EAAAoxD,QAGApxD,EAAAioD,QACAjoD,EAAAioD,YAMA8O,EAAAioB,OAAAO,aAAAqB,WAAA,CACArzC,KAAA,SAAA36C,EAAA8hD,EAAAsqC,EAAAluE,GACA,IAAA+lE,EAAAzxC,EAAAqyC,QAAA7kF,GACAwyC,EAAAu6C,SAAA9I,EAAA+G,YACA9sE,EAAA2uE,UAAA,oEAEA9uC,KAAA,aAEAqvC,UAAA,SAAA5qF,EAAAxC,EAAA8hD,EAAA4O,GACAle,EAAAo7C,SAAAl9B,GAAAluD,MAAAA,EAAA68D,MAEAiuB,UAAA,SAAAttF,EAAA8hD,EAAA4O,GACA,OAAAle,EAAAo7C,SAAAl9B,GAAAluD,OAAA,IAEA+qF,WAAA,SAAA/qF,EAAAxC,EAAA8hD,EAAA4O,GACA,IAAAo9B,EAAA5qF,KAAAoqF,UAAAttF,EAAA8hD,EAAA4O,GACA,OAAAluD,EAAA68D,OAAAyuB,GAEAJ,SAAA,SAAAlrF,EAAAxC,EAAA8hD,EAAA4O,GACA,OAAA,MAAAluD,GAEAqxC,KAAA,SAAA7zC,EAAA8hD,EAAA4O,GACA,IAAAuzB,EAAAzxC,EAAAqyC,QAAA7kF,GACA8sF,EAAAt6C,EAAAoe,WAAAxtC,IAAApjB,GAEAikF,EAAA5kB,KAAAn8D,KAAAoqF,UAAAttF,EAAA8hD,EAAA4O,GAEA,mBAAAle,EAAA9tC,QAAAipF,aACAn7C,EAAA9tC,QAAAipF,YAAAb,EAAA7I,EAAAniC,EAAA7hD,MAEAuyC,EAAA23C,aACA33C,EAAA0X,QAGAsU,MAAA,SAAA9N,GACA,IAAAtjD,EAAAolC,EAAAo7C,SAAAl9B,GAEAtjD,IAGAA,EAAAoxD,OACApxD,EAAAoxD,QAGApxD,EAAAioD,QACAjoD,EAAAioD,YAKA,IAAA44B,EAAA9pB,EAAAwnB,IAAAuC,WAAAC,kBAAA,CACAC,MAAA,MACAC,MAAA,MACAt5E,OAAA,SAEAu5E,EAAAnqB,EAAAwnB,IAAAuC,WAAAK,cAAA,CAAAJ,kBAAAF,IAEArB,EAAA,CACA3oF,KAAA,aACAuqF,OAAA,QAUAC,EAAA,CAAAxqF,KAAA,cAAAuqF,OAAA,OAAAP,UAAAK,GAGAnqB,EAAAioB,OAAApqC,QAAA,CACA,CAAA/hD,KAAA,MAAAmzE,MAAA,IAAA1hD,MAAA,GAAAmd,SAAAs1B,EAAAuqB,WAAA9iC,QAAA,GACA,CAAA3rD,KAAA,OAAAmzE,MAAA,OAAAub,MAAA,EAAAj9D,MAAA,IAAAk6B,QAAA,EAAAgjC,OATA,CACA3qF,KAAA,aACAuqF,OAAA,SAQA,CAAAvuF,KAAA,aAAAmzE,MAAA,QAAA1hD,MAAA,GAAAm9D,MAAA,SAAAjjC,QAAA,EAAAgjC,OAAAhC,GACA,CAAA3sF,KAAA,WAAAmzE,MAAA,SAAA1hD,MAAA,GAAAm9D,MAAA,SAAAjjC,QAAA,EAAAgjC,OAAAhC,GACA,CACA3sF,KAAA,WACAmzE,MAAA,WACA1hD,MAAA,GACAm9D,MAAA,SACAjjC,QAAA,EACAgjC,OAtBA,CACA3qF,KAAA,iBACAuqF,OAAA,QAqBAtkC,MAAA,GAEA,CACAjqD,KAAA,eAAAmzE,MAAA,MAAA1hD,MAAA,GAAAm9D,MAAA,OACAD,OAAAH,EAAA7iC,QAAA,EAAA/c,SAAA,SAAAo1C,GAGA,IAFA,IAAAuG,EAAAvG,EAAAxnE,QACAqyE,EAAA,GACAjvF,EAAA,EAAAA,EAAA2qF,EAAA5qF,OAAAC,IAAA,CACA,IAAAkvF,EAAA5qB,EAAA6qB,QAAAxE,EAAA3qF,IACAivF,EAAAxtE,KAAAgtE,EAAAv5E,OAAAg6E,IAEA,OAAAD,EAAArpE,KAAA,QAGA,CAAAxlB,KAAA,QAIAkkE,EAAAv2B,UAAAqhD,UAAApuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,OAAA/gF,KAAAgsF,kBAAAjL,GAAA,IACAA,EAAA5kB,MACAn8D,MAEAihE,EAAAv2B,UAAAuhD,eAAAtuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,GAAA/gF,KAAAgsF,kBAAAjL,IAAA,cAAAA,EAAAhgF,KACA,OAAAggF,EAAA5kB,MACAn8D,MAGAihE,EAAAv2B,UAAAwhD,YAAAvuF,EAAAgC,KAAA,SAAAmlD,GACA,OAAAA,EAAAqnC,MACA,6GAEA,gHAEAnsF,MAEAihE,EAAAv2B,UAAA0hD,eAAAzuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,MAAA,YAAAA,EAAAhgF,KACA,cAEA,IACAf,MAGAihE,EAAAv2B,UAAA2hD,UAAA1uF,EAAAgC,KAAA,SAAAmlD,GACA,OAAAA,EAAAmjC,YACA,6JACA,cAAAnjC,EAAA/jD,KACA,yIAEA,4GACAf,MAGAihE,EAAAv2B,UAAA4hD,WAAA,SAAA5gF,EAAAE,EAAAm1E,GACA,GAAA,YAAAA,EAAAhgF,KACA,MAAA,oBAKAkgE,EAAAioB,OAAAqD,aAAA,GAGAvsF,KAAAwB,QAAAmlF,gBACA1lB,EAAAioB,OAAAsD,cAAA,GAMAvrB,EAAAv2B,UAAA+hD,cAAA,SAAApqF,EAAAuoB,GACA,OAAAq2C,EAAAv2B,UAAAgiD,UAAA,IAAApqF,KAAAD,EAAAsqF,UAAA,KAIA1rB,EAAAioB,OAAA0D,qBAAA,EAGA3rB,EAAAioB,OAAA2D,UAAA7sF,KAAAwB,QAAAyyD,SAAAj0D,KAAAwB,QAAAsiD,SAAA5jC,IAAA,gBAGA+gD,EAAA6rB,YAAA,eAAAnvF,EAAAgC,KAAA,SAAAm0D,EAAA9J,EAAAxmD,GACA,IAAAupF,EAAA1wF,SAAA2wF,iBAAA,eAAA,GACAC,EAAA5wF,SAAA2wF,iBAAA,4BAAA,GACAE,EAAAH,EAAAI,wBAEAntF,KAAAotF,aAAA/wF,SAAAQ,cAAA,OACAowF,EAAAnsF,OAAAd,KAAAotF,cACAptF,KAAAotF,aAAAzD,UAAA,8EAEA3pF,KAAAotF,aAAAC,UAAAz6C,IAAA,eACA5yC,KAAAotF,aAAAnmE,MAAAnpB,IAAAovF,EAAAnvF,OAAA,EAAA,KACAiC,KAAAotF,aAAAnmE,MAAAhpB,KAAAivF,EAAA1+D,MAAA,KAGAyyC,EAAAqsB,aAAA,SAAAvM,GACA,GAAA9f,EAAAssB,WAAAC,SAAAzM,EAAAjkF,IAAA,cAAAikF,EAAAhgF,KAiBA,OAAA,EAhBA,IAAA0sF,EAAAxsB,EAAAysB,gBAAA3M,EAAAA,EAAA+G,WAAA/G,EAAAoJ,UACA11C,EAAAp4C,SAAAQ,cAAA,OACA8wF,EAAAnoF,KAAA4I,MAAA,IAAA2yE,EAAAE,UAYA,OAXAxsC,EAAAm5C,UAAA,iBACAn5C,EAAAk1C,UAAAgE,EAAA,IACAl5C,EAAAxtB,MAAAhpB,KAAAwvF,EAAAxvF,KAAAwvF,EAAAj/D,MAAA,EAAA,KACAimB,EAAAxtB,MAAAnpB,IAAA2vF,EAAA3vF,IAAA,GAAA,KAEA22C,EAAAxtB,MAAA48D,gBADA,MAAA8J,EACA,UACA,IAAAA,EACA,UAEA,UAEAl5C,IAMAwsB,EAAAqsB,aAAA,SAAAvM,GACA,GAAA,YAAAA,EAAAhgF,KAAA,CACA,IAAA0sF,EAAAxsB,EAAAysB,gBAAA3M,EAAAA,EAAA+G,WAAA/G,EAAAoJ,UACA11C,EAAAp4C,SAAAQ,cAAA,OAKA,OAJA43C,EAAAm5C,UAAA,oBACAn5C,EAAAxtB,MAAAhpB,KAAAwvF,EAAAxvF,KAAA,KACAw2C,EAAAxtB,MAAAnpB,IAAA2vF,EAAA3vF,IAAA,GAAA,KAEA22C,KAKAwsB,EAAAqsB,aAAA,SAAAvM,GACA,GAAA,YAAAA,EAAAhgF,KAAA,CACA,IAAA0sF,EAAAxsB,EAAAysB,gBAAA3M,EAAAA,EAAA+G,WAAA/G,EAAAoJ,UACA11C,EAAAp4C,SAAAQ,cAAA,OAKA,OAJA43C,EAAAm5C,UAAA,qBACAn5C,EAAAxtB,MAAAhpB,KAAAwvF,EAAAxvF,KAAAwvF,EAAAj/D,MAAA,GAAA,KACAimB,EAAAxtB,MAAAnpB,IAAA2vF,EAAA3vF,IAAA,GAAA,KAEA22C,MAGAz0C,OAGA,IAAA6tF,EAAA5sB,EAAA5+D,KAAAyrF,YAAA,YAGA7sB,EAAAv2B,UAAAqjD,UAAA,SAAA1rF,EAAA0+E,EAAAniC,GACA,OAAAmiC,EAAAkH,aACAlH,EAAA7jB,SAAA,EACA,IACA,aAAAte,GAAA,cAAAmiC,EAAAhgF,KACA8sF,EAAA,IAAAvrF,KAAAD,EAAAsqF,UAAA,IAEAkB,EAAAxrF,IAKA4+D,EAAAkgB,QAAA,CACA6M,eAAA,EACAC,QAAA,IAIA,IAAAC,EAAA,CACAC,OAAA,CACA,CACApxF,KAAA,MACAwvF,aAAA,GACA6B,iBAAA,GACA/3E,OAAA,CACA,CACAg4E,KAAA,OACAx8E,OAAA,SAAAxP,GAEA,OADA4+D,EAAA5+D,KAAAyrF,YAAA,QACAQ,CAAAjsF,KAGA,CACAgsF,KAAA,MACAE,KAAA,EACA18E,OAAA,SAAAxP,GACA,IACAyN,EADAmxD,EAAA5+D,KAAAyrF,YAAA,KACAQ,CAAAjsF,GACAmsF,EAAAnsF,EAAA0N,SACA,OAAA,IAAAy+E,GAAA,IAAAA,EAAA1+E,EAAAjO,UAAA,EAAA,GAAAiO,EAAA,IAEAjS,IAAA,SAAAwE,GACA,OAAA,IAAAA,EAAA0N,UAAA,IAAA1N,EAAA0N,SACA,oBAEA,OAKA,CACAhT,KAAA,OACAwvF,aAAA,GACA6B,iBAAA,IACA/3E,OAAA,CACA,CAAAg4E,KAAA,QAAAx8E,OAAA,SACA,CACAw8E,KAAA,OAAAE,KAAA,EAAA18E,OAAA,SAAAxP,GACA,IAAAisF,EAAArtB,EAAA5+D,KAAAyrF,YAAA,MACAW,EAAAxtB,EAAA5+D,KAAAuwC,IAAAvwC,EAAA,EAAA,OACA,OAAAisF,EAAAjsF,GAAA,IAAAisF,EAAAG,OAKA,CACA1xF,KAAA,QACAwvF,aAAA,GACA6B,iBAAA,GACA/3E,OAAA,CACA,CAAAg4E,KAAA,OAAAx8E,OAAA,MACA,CAAAw8E,KAAA,QAAAx8E,OAAA,QAGA,CACA9U,KAAA,UACAwvF,aAAA,GACA6B,iBAAA,GACA/3E,OAAA,CACA,CAAAg4E,KAAA,OAAAx8E,OAAA,MACA,CACAw8E,KAAA,UAAAE,KAAA,EAAA18E,OAAA,SAAAxP,GACA,MAAA,YAAAmD,KAAAC,MAAApD,EAAAyJ,WAAA,GAAA,OAKA,CACA/O,KAAA,OACAwvF,aAAA,GACA6B,iBAAA,GACA/3E,OAAA,CACA,CAAAg4E,KAAA,OAAAE,KAAA,EAAA18E,OAAA,SAIA68E,iBAAA,GAIAztB,EAAAwnB,IAAAkG,KAAAC,KAAAV,GAGAjtB,EAAAioB,OAAAliC,KAAAhnD,KAAAwB,QAAAmlF,cAGA1lB,EAAA2tB,KAAA5uF,KAAAwB,QAAAizC,GAAA,IAGA,IAAAo6C,EAAA7uF,KAAAqnF,gBAGA,GAFApmB,EAAA50D,MAAAwiF,GAEAA,EAAAnH,iBAAA,CACA,IAAAoH,EAAA7tB,EAAA8tB,YAAA,IAAAzsF,MACA2+D,EAAAlC,SAAA+vB,QACA,GAAA,MAAAD,EAAAtH,aAAA,CACA,IAAAuH,EAAA7tB,EAAA8tB,YAAAF,EAAAtH,cACAtmB,EAAAlC,SAAA+vB,GAIA9uF,KAAAinF,aACAjnF,KAAAgnD,OAGAhnD,KAAA0gE,eACA1gE,KAAAgvF,oBAEAhvF,KAAAwB,QAAAulF,oBACA/mF,KAAAivF,mBAAAjvF,KAAAwB,QAAAulF,qBAGAiI,kBAAA,WACA,GAAAhvF,KAAAkvF,YAAA,CACA,GAAA,MAAAlvF,KAAAmvF,cACA,OAGAnvF,KAAAihE,MAAAmuB,aAAApvF,KAAAmvF,eACAnvF,KAAAmvF,cAAA,SACA,CACA,MAAAnvF,KAAAmvF,gBACAnvF,KAAAihE,MAAAmuB,aAAApvF,KAAAmvF,eACAnvF,KAAAmvF,cAAA,MAIA,IAAAb,EAAAtuF,KAAAihE,MAAA5+D,KAAAyrF,YAAA7sB,MAAAioB,OAAAwD,WACA1sF,KAAAmvF,cAAAnvF,KAAAihE,MAAAouB,UAAA,CACAvH,WAAA,IAAAxlF,KACAzE,IAAA,eACAs+D,KAAA,QACA56D,MAAA+sF,EAAA,IAAAhsF,UAIA0pF,kBAAA,SAAAjL,EAAAuO,GACA,IAAAC,EAAAvvF,KAAAihE,MAAAysB,gBAAA3M,EAAAA,EAAA+G,WAAA/G,EAAAoJ,UAGA7gC,EADAjtD,SAAAQ,cAAA,UACA2yF,WAAA,MACAC,EAAApzF,SAAAqzF,uBAAA,sBAAA,GACA,GAAAD,EAAA,CACA,IAAAE,EAAAC,iBAAAH,GAAA,eACAI,EAAAD,iBAAAH,GAAA,aACAnmC,EAAAp7B,KAAA2hE,EAAA,IAAAF,EAEA,IAAAG,EAAA,EACAC,EAAAzmC,EAAA0mC,YAAAjP,EAAA5kB,MAAA3tC,MAIA,GAHA8gE,IACAQ,EAAAxmC,EAAA0mC,YAAAV,GAAA9gE,OAEAuhE,EAAA,GAAAR,EAAA/gE,OAAAshE,EAAA,GAAAP,EAAA/gE,MACA,OAAA,GAEAyhE,gBAAA,WACAjwF,KAAAkvF,aAAA,EAEAlvF,KAAAihE,MAAAv2B,UAAAqhD,UAAApuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,IAAAzvE,EAAA9V,IAAAC,QAAAwH,YAAAC,cAAA69E,EAAA+G,WAAAtsF,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,GAIA,MAHA,cAAA29E,EAAAhgF,OACAuQ,GAAA,MAAA9V,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAy+E,EAAAoJ,SAAA,GAAA3uF,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,IAEApD,KAAAgsF,kBAAAjL,EAAAzvE,GAAA,IACA,2GAAAyvE,EAAA5kB,KAAA,qEAAA7qD,EAAA,gBACAtR,MAEAA,KAAAihE,MAAAv2B,UAAAuhD,eAAAtuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,IAAAzvE,EAAA9V,IAAAC,QAAAwH,YAAAC,cAAA69E,EAAA+G,WAAAtsF,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,GAIA,GAHA,cAAA29E,EAAAhgF,OACAuQ,GAAA,MAAA9V,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAy+E,EAAAoJ,SAAA,GAAA3uF,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,IAEApD,KAAAgsF,kBAAAjL,EAAAzvE,IAAA,cAAAyvE,EAAAhgF,KACA,MAAA,qEAAAggF,EAAA5kB,KAAA,qEAAA7qD,EAAA,gBACAtR,MAEAA,KAAAgvF,oBAEAhvF,KAAAihE,MAAAl1B,UAEAmkD,iBAAA,WACAlwF,KAAAkvF,aAAA,EAEAlvF,KAAAihE,MAAAv2B,UAAAqhD,UAAApuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,OAAA/gF,KAAAgsF,kBAAAjL,GAAA,IACAA,EAAA5kB,MACAn8D,MAEAA,KAAAihE,MAAAv2B,UAAAuhD,eAAAtuF,EAAAgC,KAAA,SAAA+L,EAAAE,EAAAm1E,GACA,GAAA/gF,KAAAgsF,kBAAAjL,IAAA,cAAAA,EAAAhgF,KACA,OAAAggF,EAAA5kB,MACAn8D,MAEAA,KAAAgvF,oBAEAhvF,KAAAihE,MAAAl1B,UAEAokD,WAAA,WAIA,GAHAnwF,KAAAihE,MAAAioB,OAAAkH,WAAApwF,KAAAihE,MAAAioB,OAAAkH,UACApwF,KAAAihE,MAAAl1B,SAEA/rC,KAAAihE,MAAAioB,OAAAkH,UAAA,CACA,IACAlD,EADA7wF,SAAA2wF,iBAAA,eAAA,GACAG,wBACAntF,KAAAotF,aAAAnmE,MAAAnpB,IAAAovF,EAAAnvF,OAAA,EAAA,KACAiC,KAAAotF,aAAAnmE,MAAAhpB,KAAAivF,EAAA1+D,MAAA,KACAxuB,KAAAotF,aAAAzD,UAAA,kFACA,CACA,IACAuD,EADA7wF,SAAA2wF,iBAAA,oBAAA,GACAG,wBACAntF,KAAAotF,aAAAnmE,MAAAnpB,IAAAovF,EAAAnvF,OAAA,EAAA,KACAiC,KAAAotF,aAAAnmE,MAAAhpB,KAAA,MACA+B,KAAAotF,aAAAzD,UAAA,iFAGAjpB,aAAA,WAAA,IAAA2vB,EAAArwF,KAEAA,KAAAihE,MAAA6rB,YAAA,kBAAAnvF,EAAAgC,KAAA,WACA,IAAA2wF,EAAAtwF,KAAAihE,MAAAwnB,IAAAC,cAAA6E,WACA,aAAA+C,EAAAC,YACAD,EAAA5E,OAAA5mF,WAAA2yC,QAEAz3C,OAEAA,KAAAihE,MAAA6rB,YAAA,sBAAA,WACA,IAAA0D,EAAAH,EAAApvB,MAAAwvB,kBACA,MAAAD,EAAA1I,YAAA,MAAA0I,EAAArG,WAIAkG,EAAAnB,aACAmB,EAAApvB,MAAAioB,OAAApB,WAAAuI,EAAApvB,MAAAyvB,iBAAAF,EAAA1I,YAAA,EAAA,OACAuI,EAAApvB,MAAAioB,OAAAiB,SAAAkG,EAAApvB,MAAAyvB,iBAAAF,EAAArG,SAAA,EAAA,SAEAkG,EAAApvB,MAAAioB,OAAApB,WAAAuI,EAAApvB,MAAAyvB,iBAAAF,EAAA1I,YAAA,GAAA,OACAuI,EAAApvB,MAAAioB,OAAAiB,SAAAkG,EAAApvB,MAAAyvB,iBAAAF,EAAArG,SAAA,GAAA,WAKAnqF,KAAAihE,MAAA6rB,YAAA,mBAAAnvF,EAAAgC,KAAA,SAAA7C,GAEA,GAAA,OADAA,EAAAyF,SAAAzF,KACA,mBAAAkD,KAAAwB,QAAA6+E,WAeA,OAAA,EAdA,IAAAuJ,EAAA5pF,KAAA0tD,WAAAxtC,IAAApjB,GACA6zF,EAAA3wF,KAAA2hF,QAAA7kF,GACA,GAAA,MAAA8sF,EAEA5pF,KAAAwB,QAAA6+E,WAAAuJ,QAEA,GAAA,mBAAA5pF,KAAAwB,QAAAovF,UAAA,CACA,IAAA/3E,EAAAlb,EAAAgC,KAAA,SAAAiqF,GACA5pF,KAAAihE,MAAAwnB,IAAAC,cAAAC,UAAAiB,EAAA1pE,IAAA,UAAA,SACAlgB,MACAA,KAAAwB,QAAAovF,UAAAD,EAAA93E,KAKA7Y,OAGAA,KAAAihE,MAAA6rB,YAAA,kBAAAnvF,EAAAgC,KAAA,SAAAkxF,EAAAC,GAEA,OADA9wF,KAAAotF,aAAAnmE,MAAAhpB,KAAA6yF,EAAA,MACA,GACA9wF,OAGAA,KAAAihE,MAAAwnB,IAAAC,cAAAoE,YAAA,oBAAAnvF,EAAAgC,KAAA,SAAAoiE,GACA,IAAAgf,EAAA/gF,KAAA2hF,QAAA5f,EAAAjlE,IACA,QAAAikF,GAAA,aAAAhf,EAAAwuB,aAAAxP,EAAAkH,aAAA,YAAAlH,EAAAhgF,UAEAggF,GAAA,eAAAhf,EAAAwuB,YAAA,aAAAxuB,EAAAwuB,YAAA,YAAAxP,EAAAhgF,SAEAggF,GAAA,eAAAhf,EAAAwuB,YAAA,EAAA5yF,EAAAC,KAAAmjF,EAAAxnE,WACA/d,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAq6B,kCACA,MAAAv1F,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAq6B,qCAKA/wF,OAGAA,KAAAihE,MAAA6rB,YAAA,cAAAnvF,EAAAgC,KAAA,SAAAm0D,EAAA9J,EAAAxmD,GACAxD,KAAAihE,MAAAioB,OAAAsD,cAAA,EACA,QAAA14B,IACAA,EAAA,YACA9zD,KAAAihE,MAAAioB,OAAAsD,cAAA,EACAxsF,KAAAihE,MAAA8nB,WACA/oF,KAAAihE,MAAA50D,MAAArM,KAAAqnF,kBAEArnF,KAAAinF,YAAA,CACAnzB,MAAAA,EACAozB,IAAAl9B,GAEA,mBAAAhqD,KAAAwB,QAAAslF,QACA9mF,KAAAwB,QAAAslF,OAAA9mF,KAAAinF,aAEAjnF,KAAAihE,MAAAl1B,UACA/rC,OAGAA,KAAAihE,MAAA6rB,YAAA,UAAAnvF,EAAAgC,KAAA,SAAAqxF,GAIA,OAHAx1F,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAAilE,KAEA,GACAhxF,OAGAA,KAAAihE,MAAA6rB,YAAA,gBAAAnvF,EAAAgC,KAAA,SAAAohF,GACA,IAAAloE,EAAAlb,EAAAgC,KAAA,SAAAiqF,GACA5pF,KAAAihE,MAAAgwB,SAAArH,EAAA1pE,IAAA,WACAlgB,KAAAihE,MAAAwnB,IAAAC,cAAAC,UAAAiB,EAAA1pE,IAAA,UAAA,SACAlgB,MACAA,KAAAwB,QAAAovF,UAAA7P,EAAAloE,IACA7Y,OAGAA,KAAAihE,MAAA6rB,YAAA,oBAAAnvF,EAAAgC,KAAA,SAAA7C,EAAAgoD,GACA,IAAA8kC,EAAA5pF,KAAA0tD,WAAAxtC,IAAApjB,GACA,mBAAAkD,KAAAwB,QAAA8+E,cACAtgF,KAAAwB,QAAA8+E,aAAAsJ,IAEA5pF,OAGAA,KAAAihE,MAAA6rB,YAAA,aAAAnvF,EAAAgC,KAAA,SAAA7C,EAAA0rE,EAAAuY,EAAAnN,EAAAv2E,GACA,IAAAusF,EAAA5pF,KAAA0tD,WAAAxtC,IAAApjB,GACA8sF,IAIA7I,EAAA+G,WAAA8B,EAAAG,gBACAhJ,EAAA+G,WAAAlU,EAAAkU,WACA/G,EAAAoJ,SAAAvW,EAAAuW,UAIA,SAAA3hB,GAAA,EAAA7qE,EAAAC,KAAAmjF,EAAAxnE,WACA/d,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAq6B,kCACA,MAAAv1F,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAq6B,oCACAhQ,EAAA+G,WAAAlU,EAAAkU,WACA/G,EAAAoJ,SAAAvW,EAAAuW,YAEAnqF,OAEAA,KAAAihE,MAAA6rB,YAAA,eAAAnvF,EAAAgC,KAAA,SAAA7C,EAAA0c,GACA,IAAAunE,EAAA/gF,KAAA2hF,QAAA7kF,GACA,IAAAtB,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,QACAG,MAAAyhF,EAAAjkF,IAEA,CACAqC,SAAA,OACAG,MAAAyhF,EAAAmQ,aAAA,OAGAtgD,MAAAlxC,KAAA/B,EAAAgC,KAAA,WACA,IAAAsvD,EAAA8xB,EAAAmQ,aAAA,EACAC,EAAApQ,EAAA5xB,UACA,GAAAnvD,KAAA0tD,WAAA,CACA,IACA0jC,EADApxF,KAAA0tD,WAAAxtC,IAAApjB,GACAojB,IAAA,iBACAmxE,EAAA1zF,EAAAwpD,OAAAxpD,EAAA2uC,OAAAtsC,KAAA0tD,WAAA1tC,OAAA,SAAAy3D,GACA,QAAA,EAAA2Z,IAAA,MAAA3Z,EAAAv3D,IAAA,kBAAAu3D,EAAAv3D,IAAA,mBAAAkxE,IACA,SAAA3Z,GACA,IAAA6Z,EAAA7Z,EAAAv3D,IAAA,aACA,OAAAu3D,EAAA36E,GAAAgO,aAAAhO,EACAmyD,EACAA,EAAAkiC,GAAAliC,GAAAqiC,EACAA,EAAA,EACAH,EAAAliC,GAAAqiC,IAAAriC,EACAqiC,EAAA,EACAH,EAAAliC,GAAAA,EAAAqiC,EACAA,EAAA,EAEAA,IAEA3zF,EAAAuhB,KAAAmyE,EAAA,SAAA5Z,EAAA96E,GACA86E,EAAArqC,IAAA,YAAAzwC,EAAA,KAGAokF,EAAA5xB,UAAAF,GACAjvD,QACAA,OAGAA,KAAAihE,MAAA6rB,YAAA,qBAAAnvF,EAAAgC,KAAA,SAAA7C,EAAA0G,GAEA,OADAxD,KAAA2hF,QAAA7kF,GACA0G,SAAAA,GACAxD,OAGAA,KAAAihE,MAAA6rB,YAAA,kBAAAnvF,EAAAgC,KAAA,SAAA7C,EAAA0rE,EAAAnrE,GACA,IAAA0jF,EAAA/gF,KAAA2hF,QAAA7kF,GACA8sF,EAAA5pF,KAAA0tD,WAAAxtC,IAAApjB,GACA,mBAAAkD,KAAAwB,QAAAipF,aACAzqF,KAAAwB,QAAAipF,YAAAb,EAAA7I,GAEA/gF,KAAAinF,aACAjnF,KAAAgnD,QAEAhnD,OAGAA,KAAAihE,MAAA6rB,YAAA,iBAAAnvF,EAAAgC,KAAA,SAAA7C,EAAAgoD,GACA,IAAA8kC,EAAA5pF,KAAA0tD,WAAAxtC,IAAA3d,SAAAuiD,EAAAtrC,SACA,mBAAAxZ,KAAAwB,QAAA+vF,iBACAvxF,KAAAwB,QAAA+vF,gBAAA3H,EAAA9kC,IAEA9kD,OAGAA,KAAAihE,MAAA6rB,YAAA,oBAAAnvF,EAAAgC,KAAA,SAAA7C,EAAAgoD,GACA,IAAA8kC,EAAA5pF,KAAA0tD,WAAAxtC,IAAA3d,SAAAuiD,EAAAtrC,SACA,mBAAAxZ,KAAAwB,QAAA+vF,iBACAvxF,KAAAwB,QAAAgwF,mBAAA5H,EAAA9kC,IAEA9kD,QAEAgnD,KAAA,SAAAyqC,GACAzxF,KAAAihE,MAAAja,KAAA,MAAAyqC,EAAAA,EAAAzxF,KAAAinF,YAAAnzB,MAAA9zD,KAAAinF,YAAAC,MAEAvF,QAAA,SAAA7kF,GACA,OAAAkD,KAAAihE,MAAA0gB,QAAA7kF,IAEA40F,QAAA,WACA,OAAA1xF,KAAAihE,MAAAwnB,IAAAkG,KAAAgD,mBAEAC,OAAA,WACA5xF,KAAAihE,MAAAwnB,IAAAkG,KAAAiD,UAEAC,QAAA,WACA7xF,KAAAihE,MAAAwnB,IAAAkG,KAAAkD,WAEAnH,SAAA,SAAAl9B,GACA,OAAAA,EAAAskC,cAAA,UAEAb,SAAA,SAAAn0F,GACAkD,KAAAihE,MAAAgwB,SAAAn0F,IAEA+sF,SAAA,SAAAxnF,GACArC,KAAAihE,MAAA4oB,SAAAxnF,IAEA0vF,WAAA,SAAAj1F,GACAkD,KAAAihE,MAAA8wB,WAAAj1F,IAEAsqF,kBAAA,WACApnF,KAAAwB,QAAAq/C,mBAAA,CACAY,QAAA,CACA,CACA1kD,KAAA,eACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAApjB,GACAkD,KAAAgiF,SAAAjB,IACA/gF,OAEA,CACAjD,KAAA,eACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAApjB,GACAkD,KAAAgyF,kBAAAjR,IACA/gF,MACA8vD,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACAJ,KAAA0tD,WAAAxtC,IAAApjB,GACA,OAAAkD,KAAAwB,QAAAsiD,SAAA5jC,IAAA,iBACAlgB,OAEA,CACAjD,KAAA,sBACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAApjB,GACAkD,KAAAiyF,wBAAAlR,IACA/gF,MACA8vD,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAsiD,SAAA5jC,IAAA,iBACAlgB,OAEA,CACAjD,KAAA,2BACAy9D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAApjB,GACAkD,KAAAkyF,kBAAAnR,IACA/gF,MACA8vD,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WAEA,OAAA,EADAJ,KAAA0tD,WAAAxtC,IAAApjB,GACAojB,IAAA,mBAAAlgB,KAAAwB,QAAAsiD,SAAA5jC,IAAA,iBACAlgB,OAEA,CACAjD,KAAA,SACA09D,UAAA,EACAD,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAAtjD,EAAAsjD,EAAAhgD,KAAA,WACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAApjB,GACAkD,KAAAkiF,WAAAnB,IACA/gF,MACA8vD,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAsiD,SAAA5jC,IAAA,iBACAlgB,SAIAA,KAAAgtD,YAAA,IAAAxxD,IAAAyxD,MAAAC,YAAAvvD,EAAAupB,SAAAlnB,KAAAwB,QAAAq/C,mBAAA,CACApM,GAAAz0C,KAAA7C,EAAA,oBACAgwD,SAAA,uHACAG,iBAAA3vD,EAAAgC,KAAA,SAAAi1C,GACA,OAAAA,GACA50C,MACAutD,OAAA5vD,EAAAgC,KAAA,SAAAygD,KACApgD,MACAm2C,QAAAx4C,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,gBAAA6c,YAAA,gBACAha,UAGAgiF,SAAA,SAAAjB,GACA,mBAAA/gF,KAAAwB,QAAA6+E,YACArgF,KAAAwB,QAAA6+E,WAAAU,IAGAmR,kBAAA,SAAAnR,GACA,mBAAA/gF,KAAAwB,QAAA2wF,qBACAnyF,KAAAwB,QAAA2wF,oBAAApR,EAAA,IAGAkR,wBAAA,SAAAlR,GACA,IAAAvlF,IAAAkG,MAAAkkF,OAAAwM,iBAAA,CACAtR,MAAA9gF,KAAA0tD,WACAqzB,KAAAA,EACA/7D,QAAAhlB,KAAAwB,QAAAwjB,QACAyjB,SAAAzoC,KAAAwB,QAAAinC,SACA0wB,OAAAx7D,EAAAgC,KAAA,SAAAohF,EAAAqQ,GAAA,IAAAiB,EAAA,EAAAjoF,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA,mBAAApK,KAAAwB,QAAA2wF,qBACAnyF,KAAAwB,QAAA2wF,oBAAApR,EAAAqQ,EAAAiB,IAEAryF,SAGAgyF,kBAAA,SAAAjR,GACA,mBAAA/gF,KAAAwB,QAAA8wF,cACAtyF,KAAAwB,QAAA8wF,aAAAvR,IAGAkB,kBAAA,SAAA5kF,GACA,IAAAwkF,EAAA1kF,EAAAE,EAAAgc,eAAAqB,QAAA,eAAAta,KAAA,UACA2gF,EAAA/gF,KAAA0tD,WAAAxtC,IAAA2hE,GACA7hF,KAAAkiF,WAAAnB,IAEAmB,WAAA,SAAAnB,GACA,mBAAA/gF,KAAAwB,QAAA8+E,cACAtgF,KAAAwB,QAAA8+E,aAAAS,IAGAwR,QAAA,SAAA3I,EAAAv7B,GACA,IAAAw5B,EAAA,CACA1rB,KAAAytB,EAAA1pE,IAAA,QACA4nE,WAAA8B,EAAA1pE,IAAA,SACAg9C,SAAA0sB,EAAA1pE,IAAA,YACApjB,GAAA8sF,EAAA1pE,IAAA,UACAnf,KAAA6oF,EAAA1pE,IAAA,eAAA,YAAA0pE,EAAA1pE,IAAA,iBAAA,UAAA,OACA+gE,SAAA2I,EAAA1pE,IAAA,mBAAA,IACA1c,OAAAomF,EAAA1pE,IAAA,iBAAA0pE,EAAA1pE,IAAA,iBAAA0pE,EAAA1pE,IAAA,gBACA6nE,YAAA6B,EAAA1pE,IAAA,eAAA,eAAA,MAGAlgB,KAAAihE,MAAAsxB,QAAA1K,GAGAlqF,EAAAuhB,KAAA0qE,EAAAzB,aAAAnoE,OAAA,SAAAooE,GACA,GAAAA,EAAAloE,IAAA,YAAA0pE,EAAA1pE,IAAA,UAAA,CACA,IAAAmoE,EAAA,CACAvrF,GAAAsrF,EAAAloE,IAAA,gBACA1G,OAAA4uE,EAAAloE,IAAA,UACAyyD,OAAAyV,EAAAloE,IAAA,gBACAnf,KAAA,OAAAqnF,EAAAloE,IAAA,QAAA,IAAA,IACAqoE,IAAAH,EAAAloE,IAAA,WAGAlgB,KAAAwyF,QAAAnK,KAEAroF,OAEAwyF,QAAA,SAAAnK,GACAroF,KAAAihE,MAAAuxB,QAAAnK,IAEA4G,mBAAA,SAAAwD,GACAzyF,KAAAihE,MAAAioB,OAAAwJ,wBAAAD,EACAzyF,KAAAihE,MAAAl1B,UAEA4mD,aAAA,WACA,IAAAC,EAAA5yF,KAAAihE,MAAA4xB,iBACA7yF,KAAAihE,MAAA8nB,WACA/oF,KAAAihE,MAAA50D,MAAArM,KAAAqnF,iBACArnF,KAAAinF,aACAjnF,KAAAgnD,OAEAhnD,KAAAihE,MAAAlC,SAAA6zB,EAAA7nE,EAAA6nE,EAAAnoF,GACAzK,KAAAgvF,qBAEA8D,WAAA,SAAAlJ,GACA,IAAA7I,EAAA/gF,KAAAihE,MAAA0gB,QAAAiI,EAAA1pE,IAAA,WAKAsnE,EAHA7pF,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAA,MAAAA,EAAAruB,IAAA,WAEA,IAAA5d,KAAAkD,KAAAoT,IAAAiG,MAAArZ,KAAAqqC,mBAAA7vC,KAAA0tD,WAAA1tC,OAAAf,IAAA,SAAAsvB,GAAA,OAAA,IAAAjsC,KAAAisC,EAAAruB,IAAA,eAAA,IAAA5d,KAEAmsF,EAAA,IAAAnsF,KAAAsnF,EAAA1pE,IAAA,YACAuuE,EAAAA,EAAA99E,QAAA,IACAlC,SAAA,EAAA,EAAA,EAAA,GACAsyE,EAAA+G,WAAA,MAAA8B,EAAA1pE,IAAA,SAAA0pE,EAAA1pE,IAAA,SAAAsnE,EACAzG,EAAAoJ,SAAAsE,EACA1N,EAAA7jB,SAAA0sB,EAAA1pE,IAAA,YACA6gE,EAAAkH,YAAA,MAAA2B,EAAA1pE,IAAA,UAAA,MAAA0pE,EAAA1pE,IAAA,UAEAlgB,KAAAihE,MAAA6xB,WAAA/R,EAAAjkF,KAEAi2F,YAAA,SAAAl6E,GACA7Y,KAAAihE,OAGAjhE,KAAAgzF,kBAAAr1F,EAAAgC,KAAA,SAAAszF,GAAA,IAAAC,EAAAlzF,KACAA,KAAAiwF,kBACA/+C,WAAA,WACAgiD,EAAAjyB,MAAA8xB,YAAA,CACAh2F,MAAAvB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,WAAA,aACA8F,OAAA,smIAAA,MAAAxqB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAy8B,oCAAA33F,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAy8B,oCAAA,wIAAAF,EAAA,kLAAAz3F,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,QAAA,KAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,SAAA,IAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,OAAA,uBACA6N,KAAA,EACAqlE,OAAA53F,IAAAC,QAAA2D,WAAA+gB,YAAA,mBAAA,CACAK,QAAAhlB,IAAA+Q,UAAAkU,SAAAK,UAIAoyE,EAAAhD,mBACA,mBAAAr3E,GACAA,KAEA,IACA7Y,QAEAqzF,cAAA,SAAAx6E,GACA7Y,KAAAihE,OAGAjhE,KAAAgzF,kBAAAr1F,EAAAgC,KAAA,SAAAszF,GACAjzF,KAAAihE,MAAAoyB,cAAA,CACAt2F,MAAAvB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,WAAA,cACAozE,OAAA,cACAC,YAAA,EACAC,YAAA,eACAxuE,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACAiuE,QAAAA,EACAG,OAAA53F,IAAAC,QAAA2D,WAAA+gB,YAAA,mBAAA,CACAK,QAAAhlB,IAAA+Q,UAAAkU,SAAAK,UAGA,mBAAAjI,GACAA,KAEA7Y,QAEAyzF,YAAA,SAAA56E,GACA7Y,KAAAihE,OAGAjhE,KAAAgzF,kBAAAr1F,EAAAgC,KAAA,SAAAszF,GACAjzF,KAAAiwF,kBACAjwF,KAAAihE,MAAAwyB,YAAA,CACA12F,MAAAvB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,WAAA,aACA8F,OAAA,8kIAAA,MAAAxqB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAy8B,oCAAA33F,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAy8B,oCAAA,wIAAAF,EAAA,kLAAAz3F,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,QAAA,KAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,SAAA,IAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,OAAA,uBACAkpE,KAAA,WACAr7D,KAAA,EACAqlE,OAAA53F,IAAAC,QAAA2D,WAAA+gB,YAAA,mBAAA,CACAK,QAAAhlB,IAAA+Q,UAAAkU,SAAAK,UAGA9gB,KAAAkwF,mBACA,mBAAAr3E,GACAA,KAEA7Y,QAEAgzF,kBAAA,SAAAn6E,GACA,MAAA7Y,KAAAizF,QAKA,EAAAz3F,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,gBACA,IAAA1kB,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAA9D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,iBAEA,CACA/gB,SAAA,YAGA+gB,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAC,GACAI,KAAAizF,QAAArzF,EAAAO,IACA0Y,EAAAjZ,EAAAO,MACAH,OAEA6Y,EAAA,MApBAA,EAAA7Y,KAAAizF,UAuBAS,kBAAA,SAAA76E,GACA7Y,KAAAihE,MAAA0yB,oBAAA,CACA52F,MAAAvB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,WAAA,eAEA,mBAAArH,GACAA,KAGA+6E,kBAAA,SAAA/6E,GACA7Y,KAAAihE,MAAA2yB,kBAAA,CACA72F,MAAAvB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eAAA,WAAA,eAEA,mBAAArH,GACAA,OAKArd,IAAAkG,MAAAkkF,OAAAwM,iBAAA52F,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAvO,MAAA,MACA8nB,SAAA,IACA6iB,OAAAx7D,EAAAu4C,MAEAzC,OAAA,CACA4nB,kBAAA,OACAw4B,8BAAA,yBAEA5/C,aAAA,WACAj0C,KAAA8zF,cAAAn2F,EAAA2uC,OAAAtsC,KAAAwB,QAAAs/E,MAAA9gE,OAAA,SAAA+gE,GAEA,OADAA,EAAA7gE,IAAA,SAAA6gE,EAAA7gE,IAAA,SAAA6gE,GACA7gE,IAAA,kBACAlgB,MAEAA,KAAA+zF,WAAA/zF,KAAAwB,QAAAu/E,KACA/gF,KAAAg0C,WAAA,CACA8sC,MAAA9gF,KAAAwB,QAAAs/E,MAAA9gE,OACA+zE,WAAA/zF,KAAA+zF,aAGAx/C,YAAA,WACA,IAAAy/C,EAAAh0F,KAAAi0F,0BAEAj0F,KAAAk0F,mBAAA,IAAA14F,IAAAomD,OAAAC,aAAA,CACApN,GAAAt3C,EAAA,iCACAg3F,cAAA,EACA9mB,iBAAA,uBACA7a,QAAA70D,EAAAshB,IAAAthB,EAAA2uC,OAAAtsC,KAAAwB,QAAAs/E,MAAA9gE,OAAA,SAAA+gE,GACA,OAAApjF,EAAA8yD,SAAAujC,EAAAjT,EAAA7gE,IAAA,YAAA6gE,EAAA7gE,IAAA,YAAAlgB,KAAA+zF,WAAA7zE,IAAA,WAAA6gE,EAAA7gE,IAAA,YAAAlgB,KAAA+zF,WAAA7zE,IAAA,kBACAlgB,MAAA,SAAA+gF,GACA,MAAA,CACAjkF,GAAAikF,EAAA7gE,IAAA,UACAnjB,KAAAgkF,EAAA7gE,IAAA,WAGA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACA,IAAA80F,EAAAz2F,EAAAka,KAAA7X,KAAA8zF,cAAA,SAAAvlD,GACA,OAAAA,EAAAzxC,KAAAyF,SAAAjD,KAEAU,KAAAq0F,cACAr0F,KAAAq0F,aAAAlxC,UAGA,MAAAixC,IACAp0F,KAAAq0F,aAAA,IAAA74F,IAAAygE,MAAAj8D,KAAA7C,EAAA,oBAAA,CACA4D,KAAA,SACAo7D,KAAA,oHAGAn8D,KAAAoxF,cAAA9xF,EACAU,KAAA7C,EAAA,aAAAsb,KAAA,YAAA,IACAzY,SAGAi0F,wBAAA,WACA,IAAAK,EAAA,GACAC,EAAA52F,EAAAgC,KAAA,SAAA60F,GACA72F,EAAAuhB,KAAAlf,KAAAwB,QAAAs/E,MAAA9gE,OAAA,SAAA+gE,IACAA,EAAAA,EAAAxyC,MAAAwyC,EAAAxyC,MAAAwyC,GACA7gE,IAAA,mBAAAs0E,IACAF,EAAAl2E,KAAA2iE,EAAA7gE,IAAA,WACAq0E,EAAAxT,EAAA7gE,IAAA,eAGAlgB,MAGA,OADAu0F,EAAAv0F,KAAA+zF,WAAA7zE,IAAA,WACAo0E,GAEAG,sBAAA,WACA,IAAAzQ,EAAA,IAAAxoF,IAAAwkB,OAAAyoB,SAAAw7C,KAAA,CACAp4D,UAAA7rB,KAAA+zF,WAAA/zF,KAAA+zF,WAAA7zE,IAAA,aAAA,KACA8vD,WAAAhwE,KAAA+zF,WAAA/zF,KAAA+zF,WAAA7zE,IAAA,cAAA,OAEAlgB,KAAA00F,eAAA1Q,IAEA0Q,eAAA,SAAA3T,GACA,IAAAvlF,IAAAkG,MAAA+mC,SAAA87C,cAAA,CACAv/D,QAAAhlB,KAAAwB,QAAAwjB,QACAyjB,SAAAzoC,KAAAwB,QAAAinC,SACAksD,eAAA,EACApmD,MAAAwyC,EACA5nB,OAAAx7D,EAAAgC,KAAA,WACAohF,EAAApwC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,SAAA4uC,GACAvuC,KAAAoxF,cAAA7iD,EAAAruB,IAAA,UACAlgB,KAAAwB,QAAA23D,OAAA5qB,EAAA,MAAA,GACAvuC,KAAA2wC,QACA3wC,SAEAA,MACAm2C,QAAAx4C,EAAAgC,KAAA,WACAK,KAAA64C,eACA74C,SAGA2wC,KAAA,WACA,MAAA3wC,KAAAoxF,gBACApxF,KAAAwB,QAAA23D,OAAAn5D,KAAA+zF,WAAA/zF,KAAAoxF,eACApxF,KAAA64C,kBAKAr9C,IAAAkG,MAAAkkF,OAAAgP,kBAAAp5F,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAsW,aAAA,CACAwhD,UAAA,IAAAr5F,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBAEAvO,MAAA,MACA8nB,SAAA,KAEA7C,OAAA,CACAqhD,2BAAA,gBAEAvgD,YAAA,WACAv0C,KAAA+0F,mBAEAA,gBAAA,WACA/0F,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAwhD,UAAA70F,KAAA7C,EAAA,mBAAA,CACA03F,UAAA70F,KAAAwB,QAAAqzF,UAAA70E,UAGAg1E,aAAA,SAAA33F,GACA,IACAixD,EADAnxD,EAAAE,EAAAgc,eAAAqB,QAAA,kBACAta,KAAA,OACA60F,EAAAj1F,KAAAwB,QAAAqzF,UAAA30E,IAAAouC,GACA/f,EAAA,IAAA/yC,IAAAwkB,OAAAsf,SAAAo2B,QAAAu/B,GAEA,IAAAz5F,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAAA,OAKA/yC,IAAAwkB,OAAA4lE,OAAA,GACApqF,IAAAwkB,OAAA4lE,OAAAsP,UAAA15F,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAoM,MAAA,SAAAkiC,GAIA,OAHA,MAAAA,EAAAA,QACAvuC,KAAAuuC,MAAAA,EAAAA,OAEAA,KAIA/yC,IAAAk3C,YAAAkzC,OAAA,GACApqF,IAAAk3C,YAAAkzC,OAAAuP,WAAA35F,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4lE,OAAAsP,Ycl+CA15F,IAAAkG,MAAA0zF,SAAA,GACA55F,IAAAkG,MAAA0zF,SAAAC,aAAA75F,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAouE,QAAA,MAEA7hD,OAAA,CACA8hD,oBAAA,UACAC,qBAAA,iBACAC,mBAAA,iBACAC,mBAAA,kBAEAnhD,YAAA,WACAv0C,KAAAtC,IAAA03F,WACAp1F,KAAA21F,kBAEAL,QAAA,SAAAj4F,GACA,GAAA,mBAAA2C,KAAAwB,QAAA8zF,QAAA,CACA,IAAAx4F,EAAAO,EAAAF,EAAAE,EAAAmc,QAAAlZ,KAAA,MAAA,KACAN,KAAAwB,QAAA8zF,QAAAx4F,GAEAkD,KAAA21F,kBAEAA,eAAA,WACA31F,KAAA7C,EAAA,6BAAA+hB,KAAA,WACA,IAAA02E,EACA5vE,EAAA7oB,EAAA6C,MACAwZ,EAAAwM,EAAA5lB,KAAA,UACAy1F,EAAA14F,EAAAqc,GACAwM,EAAAnoB,IAAA,WAAA,YACA,IAAAF,EAAAC,KAAAooB,EAAAnO,KAAA,cACA+9E,EAAAz4F,EAAA,WAAA,CACAwd,MAAA,mFAEAqL,EAAAllB,OAAA80F,IAGAA,EAAA5vE,EAAAnO,KAAA,YAEA+9E,EAAA57E,YAAA67E,EAAA/9E,SAAA,QAAA,kBAAA,iBACA89E,EAAA17E,SAAA27E,EAAA/9E,SAAA,QAAA,gBAAA,wBCvCAtc,IAAA60B,OAAA,GAEA70B,IAAA60B,OAAAylE,YAAA,WACA,SAAAC,EAAAr4F,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA+1F,GACA/1F,KAAAtC,IAAAA,EACAsC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAqQ,OAAA,SAEA7R,KAAAg2F,aANA,OAAA/qD,aAAA8qD,EAAA,CAAA,CAAAn1F,IAAA,aAAAtB,MASA,WACAU,KAAAtC,IAAAu4F,YAAAj2F,KAAAwB,SAAAsX,GAAA,SAAAnb,EAAAgC,KAAA,SAAAtC,GACA,mBAAA2C,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAA5kD,EAAAiC,QAEAU,SAdA,CAAAY,IAAA,WAAAtB,MAiBA,WACA,OAAAU,KAAAtC,IAAAu4F,YAAA,cAlBA,CAAAr1F,IAAA,WAAAtB,MAqBA,SAAA6pB,GACA,OAAAnpB,KAAAtC,IAAAu4F,YAAA,WAAA9sE,OAtBA4sE,EAAA,GA0BAv6F,IAAA60B,OAAA6lE,kBAAA,WACA,SAAAC,EAAAz4F,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAm2F,GACAn2F,KAAAqwB,OAAA,CACA,CACAzH,IAAAptB,IAAA+Q,UAAA8jB,OAAAC,KACAvzB,KAAA,QAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAG,OACAzzB,KAAA,UAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAI,KACA1zB,KAAA,QAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAK,IACA3zB,KAAA,OAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAM,OACA5zB,KAAA,UAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAO,OACA7zB,KAAA,UAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAQ,MACA9zB,KAAA,SAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAU,KACAh0B,KAAA,QAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAY,KACAl0B,KAAA,QAEA,CACA6rB,IAAAptB,IAAA+Q,UAAA8jB,OAAAc,MACAp0B,KAAA,UAIAiD,KAAAtC,IAAAA,EACAsC,KAAAo2F,QAAA,KACAp2F,KAAAmpB,MAAA3nB,EAAA2nB,MAAA3nB,EAAA2nB,MAAAnpB,KAAAqwB,OAAA,GAAAzH,IACA5oB,KAAAwB,QAAAA,EACAxB,KAAA+rC,SAjDA,OAAAd,aAAAkrD,EAAA,CAAA,CAAAv1F,IAAA,WAAAtB,MAoDA,SAAA6pB,GACAnpB,KAAAmpB,MAAAA,EACAnpB,KAAA+rC,WAtDA,CAAAnrC,IAAA,SAAAtB,MAyDA,WACA,IAAAqsC,EAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gBACAvhC,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAAL,EAAA3rC,KAAAtC,IAAA,CACA2yB,OAAArwB,KAAAqwB,OACAlH,MAAAnpB,KAAAmpB,OACAxrB,EAAAgC,KAAA,SAAAjC,IACAsC,KAAAo2F,QAAA14F,GACAma,KAAA,eAAAiB,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAq2F,YAAAr2F,QACAA,SAjEA,CAAAY,IAAA,SAAAtB,MAoEA,WACAU,KAAAo2F,UACAp2F,KAAAo2F,QAAAt+E,SAAA,UACA9X,KAAAo2F,QAAAp8E,YAAA,UAGAha,KAAAo2F,QAAAl8E,SAAA,aA1EA,CAAAtZ,IAAA,OAAAtB,MA+EA,WACAU,KAAAo2F,SACAp2F,KAAAo2F,QAAAp8E,YAAA,YAjFA,CAAApZ,IAAA,OAAAtB,MAqFA,WACAU,KAAAo2F,SACAp2F,KAAAo2F,QAAAl8E,SAAA,YAvFA,CAAAtZ,IAAA,cAAAtB,MA2FA,SAAAjC,GACAA,EAAA43C,kBACAj1C,KAAAmpB,MAAAhsB,EAAAE,EAAAgc,eAAAjZ,KAAA,SACA,mBAAAJ,KAAAwB,QAAA80F,eACAt2F,KAAAwB,QAAA80F,cAAAt2F,KAAAmpB,OAEAnpB,KAAA66C,SAjGA,CAAAj6C,IAAA,SAAAtB,MAoGA,SAAAjC,GACA2C,KAAAo2F,SAAA,EAAAp2F,KAAAo2F,QAAA15F,QACAsD,KAAAo2F,QAAA75F,aAtGA45F,EAAA,GC5BA36F,IAAAkG,MAAA60F,SAAA,GAEA/6F,IAAAkG,MAAA60F,SAAAC,cAAAh7F,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qBACA05D,aAAA,KACAv9B,SAAA,MAEAzlB,OAAA,CACAijD,0BAAA,iBACAC,yBAAA,cAEAC,eAAA,WACA52F,KAAA7C,EAAA,oBAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAAoC,KAAA7C,EAAA,qBAAAyE,SAEAi1F,WAAA,WACA,mBAAA72F,KAAAwB,QAAAi1F,cACAz2F,KAAAwB,QAAAi1F,aAAAz2F,KAAA7C,EAAA,qBAAAyE,OAEA5B,KAAA64C,iBCnBAr9C,IAAAwkB,OAAA82E,UAAA,GAEAt7F,IAAAwkB,OAAA82E,UAAAC,WAAAv7F,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,mBhBNA3D,IAAAw7F,YAAA,CACAC,OAAA,CACAC,MADA,SACAC,GAKA,OAJAA,EAAAA,EAAAnwC,KAAA,SAAAp8B,EAAAlC,GACA,OAAAkC,EAAAlC,KAGAlF,OAAA,SAAAu+C,EAAAziE,GACA,IAAAsR,EAAAtR,EAAAyiE,EAAAq1B,UAGA,OAFAr1B,EAAAs1B,QAAAj5E,KAAApT,MAAA4F,GAAAtR,EAAAsR,GACAmxD,EAAAq1B,UAAA93F,EACAyiE,GACA,CACAs1B,QAAA,KACAA,SAEAC,UAfA,SAeAH,GACA,IAAA5jF,EAAA5V,EAAAC,KAAAu5F,GACA,OAAAA,EAAA3zE,OAAA,SAAAu+C,EAAAziE,EAAAiE,GA6BA,OA3BAA,IAAAgQ,EAAA,EACAwuD,EAAAq1B,YAAA93F,GAEA0L,MAAA+2D,EAAAq1B,aACAr1B,EAAAs1B,QAAAj5E,KAAA,EAAA2jD,EAAAw1B,SAAAx1B,EAAAw1B,SAAAzsF,WAAA,IAAAi3D,EAAAq1B,UAAAtsF,WAAAi3D,EAAAq1B,UAAAtsF,YACAi3D,EAAAw1B,SAAA,GAEAx1B,EAAAs1B,QAAAj5E,KAAA9e,EAAAwL,cAGAi3D,EAAAw1B,WACAx1B,EAAAs1B,QAAAj5E,KAAA2jD,EAAAw1B,SAAAzsF,WAAA,IAAAxL,EAAAwL,aAIAi3D,EAAAq1B,YAAA93F,EAEAyiE,EAAAw1B,WAEAvsF,MAAA+2D,EAAAq1B,aAGAr1B,EAAAs1B,QAAAj5E,KAAA,EAAA2jD,EAAAw1B,SAAAx1B,EAAAw1B,SAAAzsF,WAAA,IAAAi3D,EAAAq1B,UAAAtsF,WAAAi3D,EAAAq1B,UAAAtsF,YACAi3D,EAAAw1B,SAAA,GAGAx1B,EAAAq1B,UAAA93F,EACAyiE,GACA,CACAs1B,QAAA,GACAE,SAAA,IACAF,UAGAG,OAAA,ICtDAh8F,IAAAwkB,OAAAsf,SAAA,GACA9jC,IAAAk3C,YAAApT,SAAA,GACA9jC,IAAAkG,MAAA49B,SAAA,GAEA9jC,IAAAC,QAAA6jC,SAAA,CACAm4D,iBAAA,WAAA,IAAAj2F,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACA,MAAA5I,EAAAqjB,UACA,kBAAArpB,IAAAC,QAAAqW,cAAAC,YAAAvQ,EAAAqjB,SAAA,IACArjB,EAAA1E,GAAA,MAAA0E,EAAAqjB,QAAA3E,IAAA,MAAA1e,EAAAqjB,QAAA3E,IAAA,MAAA1e,EAAAqjB,QAAA/nB,GACA0E,EAAAk2F,gBAAA,MAAAl2F,EAAAqjB,QAAA3E,IAAA,eACA1e,EAAAzE,KAAAyE,EAAAqjB,QAAA3E,IAAA,eAEA1e,EAAAzE,KAAAyE,EAAAqjB,QAAA3E,IAAA,iBAEA1e,EAAA1E,GAAA0E,EAAAqjB,QAAA/nB,GACA0E,EAAAk2F,gBAAA,MAAAl2F,EAAAqjB,QAAAwjD,YACA7mE,EAAAzE,KAAAyE,EAAAqjB,QAAAwjD,YAEA7mE,EAAAzE,KAAAyE,EAAAqjB,QAAAyjD,cAIA,GAAA3qE,EAAAC,KAAA4D,EAAAzE,QAEAyE,EAAAzE,KAAA,qBAGA,IAAA46F,EAAAn8F,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAKA,OAJA+2B,GAAA,MAAAn8F,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,kBACAy3E,GAAA,GAGA,MAAAn2F,EAAA1E,IAAA,IAAA0E,EAAA1E,KACA,MAAAtB,IAAAiC,IAAA0jB,QAAA+4B,OAAA14C,EAAA1E,KAAAtB,IAAAiC,IAAA0jB,QAAA+4B,KAAAp9C,IACA66F,GAEA,yHAAA5pF,OAAAvM,EAAA1E,GAAAgO,WAAA,MAAAiD,OAAAvM,EAAAzE,KAAA,QAGA,SAAAyE,EAAAzE,KAAA,YAKAvB,IAAAwkB,OAAAsf,SAAAs4D,QAAAp8F,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAlD,OAIAqxC,gBAAA,SAAAb,GACAA,GAAA,MAAAA,EAAA8wB,QACAp+D,KAAA63F,iBAAAvqD,IAGAe,WAAA,WACAruC,KAAA8Y,GAAA,oBAAA,WACA,GAAA,MAAAtd,IAAAiC,IAAA0jB,QAAA,CACA,IAAA22E,EAAA93F,KAAAkgB,IAAA,cACA,MAAA43E,GACA93F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA93E,IAAA43E,GACA,OAAA93F,KAAA+3F,WACA/3F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAAljF,KAAAlD,GAAA,KAGAkD,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAAljF,KAAAlD,GAAA,OAKAuP,MAAA,SAAAkiC,GAGA,OAFAvuC,KAAA63F,iBAAAtpD,GACAvuC,KAAAi4F,oBAAA1pD,GACAA,GAEAspD,iBAAA,SAAAtpD,GACAvuC,KAAAs/B,SAAA,IAAA9jC,IAAAk3C,YAAApT,SAAAm2B,SAAAlnB,EAAAA,EAAAjP,SAAA,OAEA24D,oBAAA,SAAA1pD,GACAvuC,KAAA8tC,YAAA,IAAAtyC,IAAAk3C,YAAA9P,MAAA40B,MAAAjpB,EAAAA,EAAAT,YAAA,OAEAoqD,UAAA,WACA,IAAAttF,EAAA,GACAutF,EAAA,GASA,OARAx6F,EAAAuhB,KAAAlf,KAAAs/B,SAAAtf,OAAA,SAAA6E,GACAlnB,EAAAuhB,KAAA2F,EAAAu5C,OAAAp+C,OAAA,SAAA1B,IACA,IAAA65E,EAAAn2F,QAAAsc,EAAAxhB,MACAq7F,EAAA/5E,KAAAE,EAAAxhB,IACA8N,EAAAwT,KAAAE,QAIA1T,GAEAwtF,cAAA,SAAA9rD,GACA,IAAA1hC,GAAA,EAIA,OAHAjN,EAAAuhB,KAAAlf,KAAAs/B,SAAAtf,OAAA,SAAA6E,GACAja,EAAAA,GAAAia,EAAAuzE,cAAA9rD,KAEA1hC,GAEAumC,WAAA,WACAnxC,KAAAotC,IAAA,CACAU,YAAA9tC,KAAA8tC,YAAAkF,sBAGAqlD,eAAA,SAAAx/E,GAAA,IAAAy/E,EAAAt4F,KACA,MAAAA,KAAAkgB,IAAA,mBAAAlgB,KAAAu4F,sBA8BA1/E,EAAA7Y,KAAAkgB,IAAA,oBA7BAlgB,KAAAu4F,uBAAA,EACA,IAAA/8F,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,IAEA,CACAqC,SAAA,eAGA8uC,SAAA,IACA/tB,MAAAxgB,KAAA,SAAAU,GACA,MAAAA,GACAk4F,EAAAlrD,IAAA,CACAorD,eAAAp4F,GACA,CACA0uC,QAAA,IAGA,mBAAAj2B,GACAA,EAAAy/E,EAAAp4E,IAAA,qBAEAiM,KAAA,WACA,mBAAAtT,GACAA,EAAA,UAOAs5B,cAAA,WAAA,EAAA/nC,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAAA,IACA8nC,EAAAlyC,KAAAkgB,IAAA,kBACA,GAAA,MAAAgyB,EAkBA,OAAA,EAjBA,IAAAumD,EAAAz4F,KAAAkgB,IAAA,cACAiV,EAAA,iBAAA+c,EAAA/c,OAAA+c,EAAA/c,OAAA,EASA,OAPA,MAAAn1B,KAAAs/B,WACAm5D,EAAA96F,EAAAgb,IAAAhb,EAAA4hE,MAAA,CAAAk5B,GAAA96F,EAAAshB,IAAAjf,KAAAs/B,SAAAtf,OAAA,SAAA6E,GACA,IAAA4yD,EAAA5yD,EAAA3E,IAAA,cACA,OAAAu3D,EAAA,IAAAn1E,KAAAm1E,GAAA,UAIAtiD,IAAA35B,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAA9c,WACAL,IAAA35B,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAAngB,UACAsmE,EAAA,IAAAn2F,KAAA4vC,EAAAwmD,UACAl9F,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAAqmD,MAEAxjE,GAIAyjE,UAAA,SAAA//E,GACA7Y,KAAAlD,IAAA,IAAAkD,KAAAlD,IAIA,IAAAtB,IAAAyD,KAAAC,QAAA,CACAC,SAAA,gBAAA4O,OAAA/N,KAAAlD,GAAA,WACAmxC,SAAA,IACAxuC,OAAAC,KAAA/B,EAAAgC,KAAA,WACAK,KAAAotC,IAAA,iBAAA,MACA,mBAAAv0B,GACAA,GAAA,IAEA7Y,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GAEA,IAAAsoB,EADA,mBAAAvT,IAGAuT,EADA,MAAAtoB,EAAAuoB,aACAvoB,EAAAuoB,aAAAtrB,KAEA,KAEA8X,GAAA,EAAAuT,KAEApsB,UAIAxE,IAAAwkB,OAAAsf,SAAAo2B,QAAAl6D,IAAAwkB,OAAAsf,SAAAs4D,QAAA33F,OAAA,CACAinB,SAAA,CACAnmB,KAAA,WAEA5B,SAAA,SAAAqC,GACA,IAAA+sE,EAAA,GASA,OARA/sE,GACAA,EAAAq3F,SACAtqB,EAAAnwD,KAAA,CACA7e,UAAA,UACAD,OAAA,IAIA9D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,KAEAyxE,IAEAzE,kBAAA,SAAAjxD,GACArd,IAAAC,QAAA67D,MAAAwS,kBAAA9pE,KAAAkgB,IAAA,YAAA,SAAAtV,GACA,mBAAAiO,GACAA,EAAAjO,MAIAitF,iBAAA,SAAAtpD,GACA,GAAA,MAAAA,EAAA,CACA,IAAAuqD,EAAA94F,gBAAAxE,IAAAwkB,OAAAs3C,MAAAC,MAAAv3D,KAAAlD,GAAA,EACA,MAAAtB,IAAAiC,IAAA0jB,UACA,MAAAotB,EAAAupD,aACA93F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA93E,IAAAquB,EAAAupD,aAGA,MAAA93F,KAAA+3F,YACAe,GAAAt9F,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqiC,0CACA/4F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAA4V,GAEA,MAAA94F,KAAA+3F,WACAxpD,EAAAupD,WAAA93F,KAAA+3F,SAAAj7F,OAMA,MAAAyxC,EAAA2L,OACAl6C,KAAAk6C,KAAA,IAAA1+C,IAAAwkB,OAAAs3C,MAAAC,KAAAhpB,EAAA2L,OAGA,MAAAl6C,KAAAg5F,YACAh5F,KAAAi5F,gBAAA,IAAAz9F,IAAAk3C,YAAApT,SAAA45D,gBAAA3qD,EAAA0qD,kBAGA,MAAAj5F,KAAAo+D,OACAp+D,KAAAo+D,OAAA,IAAA5iE,IAAAk3C,YAAA0rB,OAAA2Q,OAAAxgC,EAAA6vB,OAAA,CACA0T,YAAAt2E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,iBAMA,MAAAxjC,EAAA6vB,SACA7vB,EAAA6vB,OAAA7vB,EAAA6vB,QAEAp+D,KAAAo+D,OAAAzvB,MAAA,EAAAhxC,EAAAC,KAAA2wC,EAAA6vB,QAAA7vB,EAAA6vB,OAAA,MACAp+D,KAAAo+D,OAAA58D,QAAAswE,YAAAt2E,IAAAiC,IAAA0jB,QAAA3lB,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,cAAA,GAGA/xE,KAAAm5F,UACAn5F,KAAAm5F,UAAAxqD,MAAAJ,EAAA4qD,WAEAn5F,KAAAm5F,UAAA,IAAA39F,IAAAk3C,YAAAymD,UAAAC,iBAAA7qD,EAAA4qD,UAAA,CACAE,UAAA9qD,EAAAzxC,SAGA,CACA,IAAAg8F,EAAA94F,gBAAAxE,IAAAwkB,OAAAs3C,MAAAC,MAAAv3D,KAAAlD,GAAA,GAEAg8F,GAAAt9F,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqiC,0CACA/4F,KAAA+3F,SAAA,MAAAv8F,IAAAiC,IAAA0jB,QAAA3lB,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAA4V,GAAA,MAIA94F,KAAAo+D,OAAA,IAAA5iE,IAAAk3C,YAAA0rB,OAAA2Q,OACA/uE,KAAAm5F,UAAA,IAAA39F,IAAAk3C,YAAAymD,UAAAC,mBAGAE,iBAAA,SAAAzgF,GACA,MAAA7Y,KAAAu5F,cACAv5F,KAAAu5F,YAAA,IAAA/9F,IAAAk3C,YAAApT,SAAAk6D,YAAA,KAAA,CACA30E,QAAA7kB,QAIAA,KAAAu5F,YAAA1tD,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAA7Y,KAAAu5F,cACAv5F,SAGAy5F,sBAAA,SAAA5gF,GACA,MAAA7Y,KAAAkgB,IAAA,0BAAAlgB,KAAA05F,wBA8BA7gF,EAAA7Y,KAAAkgB,IAAA,2BA7BAlgB,KAAA05F,yBAAA,EACA,IAAAl+F,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,qBAEA,CACA/gB,SAAA,eAGA8uC,SAAA,IACA/tB,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,MAAAA,GACAJ,KAAAotC,IAAA,CACAusD,sBAAAv5F,GACA,CACA0uC,QAAA,IAGA,mBAAAj2B,GACAA,EAAA7Y,KAAAkgB,IAAA,2BAEAlgB,OAAAmsB,KAAA,WACA,mBAAAtT,GACAA,EAAA,UAOAo5B,WAAA,WAAA,IACAC,EAMA,OAAA,OAJAA,EAHA,EAAA9nC,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAGApK,KAAAkgB,IAAA,yBAEAlgB,KAAAkgB,IAAA,oBAEA,iBAAAgyB,EAAAD,WAAAC,EAAAD,WAAA,MAEAE,cAAA,WAAA,IACAD,EAMA,GAAA,OAJAA,EAHA,EAAA9nC,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAGApK,KAAAkgB,IAAA,yBAEAlgB,KAAAkgB,IAAA,mBAWA,OAAA,EARA,IAAAiV,EAAA,iBAAA+c,EAAA/c,OAAA+c,EAAA/c,OAAA,EACA,OAAAA,IAAA35B,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAA9c,WACAL,IAAA35B,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAAngB,UACA,IAAA7vB,KAAAtC,KAAAkgB,IAAA,eAAA,IAAA5d,KAAA4vC,EAAAwmD,UACAl9F,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAAqmD,MAEAxjE,GAIAod,YAAA,WAAA,IAAAqnD,EAAA,EAAAxvF,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA,OAAA,EAAAzM,EAAAC,KAAAoC,KAAAiyC,WAAA2nD,KAEAC,uBAAA,SAAAhhF,GACA,IAAAihF,GAMAA,EALA95F,KAAAktC,QAKA,IAAA1xC,IAAAwkB,OAAA2F,YAAAo0E,kBAAA,CACAjC,WAAA,MAAA93F,KAAA+3F,SAAA/3F,KAAA+3F,SAAAj7F,GAAA,OALA,IAAAtB,IAAAwkB,OAAA2F,YAAAo0E,kBAAA,CACAj9F,GAAAkD,KAAAkgB,IAAA,SAOA2rB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAAihF,IACA95F,SAGAg6F,wBAAA,WAAA,IACAF,EADAjuE,EAAA,EAAAzhB,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAAyO,EAAA,EAAAzO,UAAA1N,OAAA0N,UAAA,QAAAC,GAQAyvF,EANA95F,KAAAktC,QAMA,IAAA1xC,IAAAwkB,OAAA2F,YAAAs0E,mBAAA,CACAnC,WAAA,MAAA93F,KAAA+3F,SAAA/3F,KAAA+3F,SAAAj7F,GAAA,OANA,IAAAtB,IAAAwkB,OAAA2F,YAAAs0E,mBAAA,CACAn9F,GAAAkD,KAAAkgB,IAAA,MACA2L,UAAAA,KAOAggB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAAihF,IACA95F,SAGAk6F,gCAAA,SAAArhF,GACA,IAAAshF,EAAA,MAMAA,EALAn6F,KAAAktC,QAKA,IAAA1xC,IAAAwkB,OAAAm6E,qBAAAC,2BAAA,CACAtC,WAAA93F,KAAAkgB,IAAA,gBALA,IAAA1kB,IAAAwkB,OAAAm6E,qBAAAC,2BAAA,CACAt9F,GAAAkD,KAAAkgB,IAAA,SAQA2rB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAAshF,IACAn6F,SAGAq6F,iCAAA,SAAAxuE,EAAAhT,GACA,IAAAshF,EAAA,MAOAA,EANAn6F,KAAAktC,QAMA,IAAA1xC,IAAAwkB,OAAAm6E,qBAAAG,4BAAA,CACAxC,WAAA93F,KAAAkgB,IAAA,cACA2L,UAAAA,IAPA,IAAArwB,IAAAwkB,OAAAm6E,qBAAAG,4BAAA,CACAx9F,GAAAkD,KAAAkgB,IAAA,MACA2L,UAAAA,KASAggB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAAshF,IACAn6F,SAGAu6F,WAAA,SAAA1hF,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,IAEA,CACAqC,SAAA,YAGAq7F,SAAA96F,KAAA/B,EAAAgC,KAAA,WACAK,KAAAy6F,OAAA,KACAz6F,KAAA0kE,SAAA,KACA1kE,KAAAk6C,KAAA,KACA,mBAAArhC,GACAA,KAEA7Y,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,KAEA5K,QAEA06F,YAAA,SAAA7hF,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,IAEA,CACAqC,SAAA,YAGAM,OAAAC,KAAA/B,EAAAgC,KAAA,SAAA4uC,GACA,mBAAA11B,GACAA,EAAA01B,IAEAvuC,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,KAEA5K,QAEA26F,SAAA,WACAn/F,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,IAEA,CACAqC,SAAA,aAIA07F,mBAAA,WACA,IAAAr/F,IAAAkG,MAAAg/B,SAAAo6D,+BAAA,CACAzB,UAAAr5F,KAAAkgB,IAAA,gBAGA66E,YAAA,SAAAliF,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,cAEA,CACA/gB,SAAA,eAGAM,OAAAC,KAAA/B,EAAAgC,KAAA,WACAkZ,KACA7Y,OAAAmsB,KAAA,SAAAroB,EAAAsoB,EAAAxhB,OAGAowF,YAAA,WACAx/F,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAlD,IAEA,CACAqC,SAAA,cAIAgyC,WAAA,WACA,IAAA8pD,EAAAj7F,KAAAkgB,IAAA,gCACA,GAAA,EAAAviB,EAAAC,KAAAq9F,GAAA,CACA,IAAAnyE,EAAA,GACAnrB,EAAAuhB,KAAA+7E,EAAA,SAAAplF,EAAAvW,GACAwpB,EAAA1K,KAAA,CACAuzB,YAAA97B,EACAvW,MAAAA,MAGAU,KAAAotC,IAAA,CACA8tD,yBAAApyE,EACAqyE,6BAAA,OAIA,IAAAC,EAAAp7F,KAAAkgB,IAAA,gCACA,GAAA,EAAAviB,EAAAC,KAAAw9F,GAAA,CACA,IAAAtyE,EAAA,GACAnrB,EAAAuhB,KAAAk8E,EAAA,SAAA97F,EAAAxC,GACAgsB,EAAA1K,KAAA,CACAthB,GAAAA,EACAwC,MAAAA,MAGAU,KAAAotC,IAAA,CACAiuD,yBAAAvyE,EACAqyE,6BAAA,OAIAn7F,KAAAo+D,QACAp+D,KAAAotC,IAAA,CACAgxB,OAAAzgE,EAAAshB,IAAAjf,KAAAo+D,OAAAp+C,OAAA,SAAA1B,GACA,MAAA,CACAmvD,QAAAnvD,EAAAxhB,GACAw+F,UAAAh9E,EAAA4B,IAAA,kBAMAlgB,KAAAm5F,WACAn5F,KAAAotC,IAAA,CACA+rD,UAAAx7F,EAAAshB,IAAAjf,KAAAm5F,UAAAn5E,OAAA,SAAAu7E,GACA,MAAA,CACAC,kBAAAD,EAAAz+F,GACA2+F,WAAAF,EAAAr7E,IAAA,cACAo7E,UAAAC,EAAAr7E,IAAA,kBAMA,MAAAlgB,KAAA+3F,UACA/3F,KAAAotC,IAAA,aAAAptC,KAAA+3F,SAAAj7F,KAGA+7F,QAAA,SAAAhgF,GACA7Y,KAAAotC,IAAA,kBAAAptC,KAAAi5F,gBAAAj5F,KAAAi5F,gBAAArpD,SAAA,MACA5vC,KAAA2wC,KAAA,KAAA,CACAxB,WAAA,CACA0pD,SAAA,GAEAnkF,QAAA/W,EAAAgC,KAAA,WACAK,KAAAotC,IAAA,sBAAA,GACAv0B,KACA7Y,MACAsU,MAAA3W,EAAAgC,KAAAkZ,EAAA7Y,SAGA07F,2BAAA,SAAAp8F,GACAU,KAAAstC,WAAA+tD,yBAAA19F,EAAA2uC,OAAAtsC,KAAAstC,WAAA+tD,yBAAA,SAAAM,GACA,OAAAr8F,EAAAxC,KAAA6+F,EAAA7+F,KAEAkD,KAAAstC,WAAA+tD,yBAAAj9E,KAAA9e,IAEAs8F,2BAAA,WACA57F,KAAAstC,WAAA4tD,yBAAAv9F,EAAA2uC,OAAAtsC,KAAAstC,WAAA4tD,yBAAA,SAAAS,GACA,OAAAr8F,MAAAxC,KAAA6+F,EAAA7+F,KAEAkD,KAAAstC,WAAA4tD,yBAAA98E,KAAA9e,QAEAu8F,kBAAA,eAKArgG,IAAAwkB,OAAAsf,SAAAw8D,gBAAAtgG,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,YAGArxC,IAAAwkB,OAAAsf,SAAA45D,gBAAA19F,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,OAGArxC,IAAAwkB,OAAAsf,SAAAs1B,mBAAAp5D,IAAAwkB,OAAA6f,aAAA0zB,YAAAtzD,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,sBACAG,MAAAU,KAAAlD,SAMAtB,IAAAwkB,OAAAsf,SAAAu1B,mBAAAr5D,IAAAwkB,OAAA6f,aAAA0zB,YAAAtzD,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,sBACAG,MAAAU,KAAAlD,SAMAtB,IAAAwkB,OAAAsf,SAAAy8D,aAAAvgG,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,iBACA1tC,SAAA,WACA,OAAA,EAAAxB,EAAAC,KAAAoC,KAAAkgB,IAAA,eACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,gBACAG,MAAAU,KAAAlD,MAGA,EAAAkD,KAAAkgB,IAAA,oBACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,qBAEA,CACA/gB,SAAA,SACAG,MAAAU,KAAAlD,WARA,KAeAtB,IAAAwkB,OAAAsf,SAAA08D,oBAAAxgG,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,eAMA3D,IAAAwkB,OAAAsf,SAAA28D,aAAAzgG,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAinB,SAAA,CACA+mB,SAAA,GAEApB,YAAA,YAIArxC,IAAAk3C,YAAApT,SAAA48D,qBAAA1gG,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAA08D,oBACA78F,SAAA,WACA,IAAAovE,EAWA,OATAA,EADA,EAAAvuE,KAAAwB,QAAA49D,aACA,CACA,CACA7/D,UAAA,eACAD,MAAAU,KAAAwB,QAAA49D,eAIA,KAEA5jE,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,WAEAovE,MAIA/yE,IAAAk3C,YAAApT,SAAAm2B,SAAAj6D,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAo2B,QACAv2D,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,eAIAg9F,iBAAA,SAAA7vD,GACA,IAAA8vD,EAAA5gG,IAAAk3C,YAAApT,SAAAm2B,WAKA,OAJA93D,EAAAuhB,KAAAlf,KAAAggB,OAAA,SAAAuuB,GACAA,EAAA6pD,cAAA9rD,IACA8vD,EAAAxpD,IAAArE,KAEA6tD,KAIA5gG,IAAAk3C,YAAApT,SAAA+8D,gBAAA7gG,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAo2B,QACAv2D,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,SAEA,CACA,CACAI,UAAA,aACAD,MAAAU,KAAAwB,QAAA86F,iBAMA9gG,IAAAk3C,YAAApT,SAAAk6D,YAAAh+F,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAw8D,gBACA38F,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAqjB,QAAA/nB,IAEA,CACAqC,SAAA,oBAMA3D,IAAAk3C,YAAApT,SAAAi9D,cAAA/gG,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAy8D,aACA58F,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,qBAEA,CACA/gB,SAAA,eAMA3D,IAAAk3C,YAAApT,SAAAk9D,oBAAAhhG,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAs1B,mBACApzD,QAAA,CACA49D,aAAA,MAEAjgE,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,wBAEA,CACA,CACAI,UAAA,eACAD,MAAAU,KAAAwB,QAAA49D,aAAAp/D,KAAAwB,QAAA49D,aAAA5jE,IAAAiC,IAAA0jB,QAAAjB,IAAA,sBAMA1kB,IAAAk3C,YAAApT,SAAAm9D,oBAAAjhG,IAAAk3C,YAAA7S,aAAA+zB,aAAA3zD,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAu1B,mBACArzD,QAAA,CACA49D,aAAA,MAEAjgE,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,wBAEA,CACA,CACAI,UAAA,eACAD,MAAA,EAAAU,KAAAwB,QAAA49D,aAAAp/D,KAAAwB,QAAA49D,aAAA5jE,IAAAiC,IAAA0jB,QAAAjB,IAAA,sBAMA1kB,IAAAk3C,YAAApT,SAAA45D,gBAAA19F,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAA45D,kBAGA19F,IAAAk3C,YAAApT,SAAAo9D,cAAAlhG,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAinB,SAAA,CACA+mB,SAAA,GAEAM,MAAA/yC,IAAAwkB,OAAAsf,SAAA28D,aACA98F,SAAA,WACA,IAAAovE,EAAA,GAMA,OALAvuE,KAAAwB,QAAAqqB,WACA0iD,EAAAnwD,KAAA,CACA7e,UAAA,YACAD,MAAAU,KAAAwB,QAAAqqB,YAEArwB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAA63F,WAEA,CACAl6F,SAAA,WAEAovE,MAIA/yE,IAAAkG,MAAA49B,SAAAq9D,oBAAAnhG,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qBACAsW,aAAA,CACAupD,IAAA,IAAAphG,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBAEAk3B,SAAA,EACA4oC,MAAA,KACA1jC,OAAA,KACAD,SAAA,KACA9B,SAAA,MAEA3jB,OAAA,CACAqpD,8BAAA,kBACAC,gCAAA,oBACAC,kEAAA,cACAC,kCAAA,cACAC,gCAAA,cACAC,yBAAA,aACAC,yBAAA,oBACAC,2BAAA,aACAC,iCAAA,oBACAC,uCAAA,sBACAC,0BAAA,SACAC,6BAAA,SACAC,2BAAA,OACAC,2CAAA,sBACAC,6BAAA,SACAC,yBAAA,kBAEA/pD,kBAAA,WAAA,IAAAgqD,EAAA99F,KACAA,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAEA,IAAA+4E,EAAA/9F,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAwxC,YAAAh7D,IAAAiC,IAAA0jB,QAAAq1C,YACAwnC,EAAAh+F,KAAAuuC,QAAAvuC,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MAEAv3D,KAAAwB,QAAAy8F,uBAEAj+F,KAAAwB,QAAAy8F,qBADAD,EACAD,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAwnC,4BAEAH,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAynC,gCAIA,EAAAn+F,KAAAwB,QAAA49D,cACA,MAAAp/D,KAAAwB,QAAAwjB,UACAhlB,KAAAwB,QAAA49D,aAAAp/D,KAAAwB,QAAAwjB,QAAA9E,IAAA,iBAIA,IAAArH,EAkCAi4C,EAAA,WACAktC,EACAxiG,IAAAiC,IAAA0jB,QAAAi9E,sBAAAN,EAAAt8F,QAAA49D,aAAAzhE,EAAAgC,KAAA,SAAA0+F,GACAr+F,KAAAq+F,iBAAAA,EACA7iG,IAAAiC,IAAA0jB,QAAAm9E,kBAAA3gG,EAAAgC,KAAA,SAAA4+F,GACAv+F,KAAAw+F,aAAAD,EACAv+F,KAAA+rC,UACA/rC,QACA89F,KAEAA,EAAA/xD,SACAvwC,IAAAiC,IAAA0jB,QAAAs9E,yBAAAX,EAAAt8F,QAAA49D,aAAAzhE,EAAAgC,KAAA,SAAAkgC,GACA7/B,KAAA0+F,oBAAA7+D,EACA7/B,KAAAy1E,YACAz1E,KAAA2+F,6BAEAb,IACAtiG,IAAAiC,IAAA0jB,QAAAy9E,yBAAAd,EAAAt8F,QAAA49D,aAAAzhE,EAAAgC,KAAA,SAAAkgC,GACA7/B,KAAA6+F,oBAAAh/D,EACA7/B,KAAAy1E,YACAz1E,KAAA8+F,6BAEAhB,MAxDAjlF,EA4DA,WAtCA,IAAAA,EAAAA,EAuCA,WACAilF,EAAAt8F,QAAAy8F,qBACAD,EACAxiG,IAAAiC,IAAA0jB,QAAA49E,uBAAAjB,EAAAt8F,QAAA49D,aAAAzhE,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAAg/F,kBAAAl7C,EACAgN,KACAgtC,IAEAtiG,IAAAiC,IAAA0jB,QAAA89E,0BAAAnB,EAAAt8F,QAAA49D,aAAAzhE,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAAg/F,kBAAAl7C,EACAgN,KACAgtC,IAGAhtC,KApDAt1D,IAAAiC,IAAA0jB,QAAA+9E,oBAAAvhG,EAAAgC,KAAA,SAAA0yC,GACAryC,KAAAm/F,eAAA9sD,EACA,MAAAryC,KAAAm/F,eACAn/F,KAAAuuC,MAAAkrD,sBAAA97F,EAAAgC,KAAA,WACAkZ,KACA7Y,OAEA6Y,KAEAilF,KA/BA,MAAAA,EAAAvvD,MACAuvD,EAAAvvD,MAAA,IAAA/yC,IAAAwkB,OAAAsf,SAAAo2B,QAAA,CACA54D,GAAAghG,EAAAt8F,QAAA63F,UACAz/E,QAAA,OAEA,IAAAjc,EAAAC,KAAAkgG,EAAAvvD,MAAAruB,IAAA,aACA49E,EAAAvvD,MAAAnB,IAAA,UAAA,MAGA0wD,EAAAvvD,MAAArB,SAAA4wD,EAAAvvD,MAAAkC,WAQAqtD,EAAAxjC,SAAAwjC,EAAAvvD,MAAA,OAAAuvD,EAAA/xD,QACAlzB,KARAilF,EAAAvvD,MAAA1C,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAs6D,SAAAt6D,KAAAuuC,MAAA,OAAAvuC,KAAA+rC,QACAlzB,KACAilF,MAiEA7pD,aAAA,WACA,IAAAwjC,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MACA,GAAA,MAAAkpC,GAAAz3E,KAAAwB,QAAAy8F,sBAAA,MAAAj+F,KAAAg/F,kBACA,OAAA,EAGAh/F,KAAAq/F,wBACAr/F,KAAAs/F,kBAEAt/F,KAAAs6D,SAAAmd,EAAA,kBAAA,WACAz3E,KAAA+rC,WAGA/rC,KAAAs6D,SAAAmd,EAAA,+BAAA,WACAz3E,KAAAu/F,mBAAA,IAEAv/F,KAAAu/F,mBAAA,EAEAv/F,KAAAwB,QAAAg+F,eAAAhkG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+oC,oBAEAC,UAAA,WAAA,IACAN,EADAO,EAAA3/F,KAQAg+F,GALAoB,EADA,MAAAp/F,KAAAo/F,QACAp/F,KAAAo/F,QAEAp/F,KAAAuuC,iBAGA/yC,IAAAwkB,OAAAs3C,MAAAC,MAAA6nC,aAAA5jG,IAAAwkB,OAAA8W,gBAAAiqC,gBAAA/gE,KAAAuuC,MAAAzxC,GAAA,EACA,GAAA,MAAAkD,KAAAm/F,iBAAAnB,EAAA,CAIA,IAAA4B,EAAA5/F,KAAAtC,IAAAgd,QAAA,kBACAklF,EAAA/nF,KAAA,cAAApW,KAAAjG,IAAAC,QAAA42C,IAAAwtD,YAAAT,EAAAjtD,gBAAAitD,EAAAl/E,IAAA,oBACA1kB,IAAAC,QAAA42C,IAAAytD,iBAAAF,EAAA/nF,KAAA,aAAA,CACAkoF,cAAA//F,KAAAm/F,eAAAa,mBAAAxkG,IAAA+Q,UAAA6lC,aAAAqP,QAAAw+C,cACA9qE,OAAAiqE,EAAAjtD,eAAA,GACA+tD,gBAAAlgG,KAAAm/F,eAAAa,mBAAAxkG,IAAA+Q,UAAA6lC,aAAAqP,QAAA0+C,iBAEAP,EAAA/nF,KAAA,iBAAAsE,MAAArD,GAAA,QAAA,WAAA,OAAA6mF,EAAAS,YACAR,EAAA/nF,KAAA,sBAAAsE,MAAArD,GAAA,QAAA,WAAA,OAAA6mF,EAAAU,gBACAT,EAAA/nF,KAAA,mBAAAsE,MAAArD,GAAA,QAAA,WAAA,OAAA6mF,EAAA/G,gBAEAwH,QAAA,WAAA,IAAAE,EAAAC,kBAAAC,sBAAAC,KAAA,SAAAC,IAAA,IAAAjpB,EAAAkpB,EAAAC,EAAA5gG,KAAA,OAAAwgG,sBAAAK,KAAA,SAAAC,GAAA,OAAA,OAAAA,EAAA7yC,KAAA6yC,EAAAxhD,MAAA,KAAA,EAAA,GACA,MAAAt/C,KAAAm/F,gBAAAn/F,KAAAm/F,eAAAa,mBAAAxkG,IAAA+Q,UAAA6lC,aAAAqP,QAAAw+C,cADA,CAAAa,EAAAxhD,KAAA,EAAA,MAAA,OAAAwhD,EAAAC,OAAA,UAAA,KAAA,EAKAtpB,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MACAoyD,EAAA,WACAC,EAAAzB,eAAA6B,WAAAvpB,EAAA,WACAj8E,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,0BAEA60E,EAAA70D,YAIA0rC,EAAAvqC,QACAltC,KAAA2wC,KAAA,WACAgwD,MAGAA,IApBA,KAAA,EAAA,IAAA,MAAA,OAAAG,EAAA53C,SAAAw3C,EAAA1gG,SAAA,OAAA,WAAA,OAAAsgG,EAAAzhF,MAAA7e,KAAAoK,YAAA,GAuBAi2F,YAAA,WAAA,IAAAY,EAAAjhG,KACAy3E,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MACA,MAAAvuC,KAAAm/F,gBAAA1nB,EAAAtlC,kBAAA32C,IAAA+Q,UAAA6lC,aAAAC,IAAAC,aAAA9c,WAIAx1B,KAAAm/F,eAAA+B,SAAAzpB,EAAA,WACAj8E,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sCAEAk1E,EAAAl1D,YAGA6sD,UAAA,WAAA,IAAAuI,EAAAnhG,KACA,MAAAA,KAAAm/F,gBAIA,IAAA3jG,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,kBACAovB,KAAA,qEACA49B,MAAA,WACA,IAAAyR,EAAA,IAAAjpF,IAAAigE,OAAA0lC,EAAAhkG,EAAA,mBACAs6E,EAAA,MAAA0pB,EAAA/B,QAAA+B,EAAA/B,QAAA+B,EAAA5yD,MACA4yD,EAAAhC,eAAAiC,aAAA3pB,EAAA,SAAA/iE,GACAA,IACA+vE,EAAAloF,SACAf,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,8BAEAo1E,EAAAp1D,gBAMAuzD,gBAAA,WACA,IAAA7nB,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MACAvuC,KAAAwB,QAAAswE,YAAA,MACA9xE,KAAAwB,QAAA6/F,UAAA,OACA7lG,IAAAiC,IAAA0jB,QAAA6D,SAEA,EAAAyyD,EAAA36E,KACAkD,KAAAwB,QAAA8/F,qBAAA9lG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA6qC,4BAIAvhG,KAAAwB,QAAAszD,SACA,EAAA2iB,EAAA36E,IAAAkD,KAAAwB,QAAAggG,aACAxhG,KAAAwB,QAAA8/F,qBAAA9lG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA6qC,4BAIAvhG,KAAAwB,QAAAigG,oBAAAjmG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAgrC,uBAEA1hG,KAAAwB,QAAAswE,YAAAt2E,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,cACA/xE,KAAAwB,QAAA6/F,UAAA7lG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAirC,wBAEA3hG,KAAAwB,QAAAigG,oBAAAjmG,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAgrC,uBACA1hG,KAAAwB,QAAAswE,YAAAt2E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,cACA/xE,KAAAwB,QAAA6/F,UAAA7lG,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAirC,uBAGA3hG,KAAAwB,QAAAszD,UAAAt5D,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,kDACA5hG,KAAAwB,QAAA6/F,UAAA,OAGAhC,sBAAA,WACAr/F,KAAAwB,QAAAqgG,mBAAA,EAEA,IAAApqB,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MAGA,GAFAvuC,KAAAwB,QAAAggG,YAAA,EACAxhG,KAAAwB,QAAAsgG,sBAAA,GACArqB,EAAAvqC,QAAA,CACA,IAAA60D,EAAA,MAAAvmG,IAAAiC,IAAA0jB,QAAA+4B,KAAA1+C,IAAAiC,IAAA0jB,QAAA+4B,KAAAp9C,GAAA,KACAklG,EAAA,MAAAxmG,IAAAiC,IAAA0jB,QAAA0D,QAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA/nB,GAAA,MACA,MAAAilG,GAAAtqB,EAAAv3D,IAAA,YAAA6hF,GACA,MAAAC,GAAAvqB,EAAAv3D,IAAA,eAAA8hF,KACAhiG,KAAAwB,QAAAggG,YAAA,GAGA,EAAA/pB,EAAA36E,KACAkD,KAAAwB,QAAAsgG,qBAAAtmG,IAAAiC,IAAA0jB,QAAAy/C,cAAA,gCAGA5gE,KAAAwB,QAAAszD,SAAA,EACA90D,KAAAwB,QAAAygG,kBAAA,EACAjiG,KAAAwB,QAAAyyD,SAAA,EACAj0D,KAAAwB,QAAA0gG,wBAAA,EACAliG,KAAAwB,QAAA2gG,qBAAA,EACAniG,KAAAwB,QAAA4gG,qBAAA,EACA,IAAApE,EAAAvmB,aAAAj8E,IAAAwkB,OAAAs3C,MAAAC,MAAAkgB,aAAAj8E,IAAAwkB,OAAA8W,gBAAAiqC,gBAAA0W,EAAA36E,GAAA,EACA26E,EAAAvqC,SACAltC,KAAAwB,QAAAyyD,SAAA,EACAj0D,KAAAwB,QAAA4gG,qBAAA,EACApiG,KAAAwB,QAAAszD,QAAA,EAAAt5D,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACAlgB,KAAAwB,QAAA0gG,uBAAAliG,KAAAwB,QAAAszD,SAAAt5D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,gCACA5gE,KAAAwB,QAAAsgG,sBAAA9D,GAAAxiG,IAAAiC,IAAA0jB,QAAAy/C,cAAA,gCACA5gE,KAAAwB,QAAAggG,YACAxhG,KAAAwB,QAAAyyD,SAAA,EACAj0D,KAAAwB,QAAA4gG,qBAAA,EACApiG,KAAAwB,QAAAszD,QAAAt5D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,4BAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAAAu9B,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBACAlgB,KAAAwB,QAAA0gG,uBAAAliG,KAAAwB,QAAAszD,SAAAt5D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,mCACAo9B,GAAAvmB,EAAA36E,GAAA,IAAAtB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,4BACA,EAAA6W,EAAA36E,IAAAtB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAAA,EAAA6W,EAAA36E,IAAAtB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,6BACA6W,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBACAlgB,KAAAwB,QAAAyyD,SAAA,EACAj0D,KAAAwB,QAAA2gG,oBAAA1qB,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACAlgB,KAAAwB,QAAA4gG,qBAAA,EACApiG,KAAAwB,QAAAszD,SAAA,MAAA90D,KAAAwB,QAAAwjB,SAAAhlB,KAAAwB,QAAAwjB,QAAA47C,cAAA,6BAAA6W,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACAlgB,KAAAwB,QAAAygG,kBAAAjE,GAAAvmB,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAAA1kB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,mBACA5gE,KAAAwB,QAAA0gG,uBAAAliG,KAAAwB,QAAAszD,SAAAt5D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,iCACA,KAAA6W,EAAAv3D,IAAA,kBACA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2rC,yBACAriG,KAAAwB,QAAAyyD,SAAA,GAEAj0D,KAAAwB,QAAA4gG,qBAAA,GAEApiG,KAAAwB,QAAAygG,kBAAAxqB,EAAAvqC,UAAAltC,KAAAwB,QAAAggG,aAAAxD,GAAAvmB,EAAAv3D,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAAA1kB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,mBAEA5gE,KAAAwB,QAAAs3F,cAAArhB,aAAAj8E,IAAAwkB,OAAAs3C,MAAAC,MAAAkgB,EAAA36E,GAAA,GAEAk3C,WAAA,WACA,MAAA,CACAsuD,UAAA,EAAAtiG,KAAAuuC,MAAAruB,IAAA,OAAAlgB,KAAAuuC,MAAArB,WAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MACAymC,OAAAh+F,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,KACAhpB,MAAAvuC,KAAAuuC,MACAypD,UAAAx8F,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,eAAAviG,KAAAwB,QAAAs3F,eACA0J,mBAAAhnG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqiC,yCAAA/4F,KAAAwB,QAAAs3F,cACA2I,oBAAAzhG,KAAAwB,QAAAigG,oBACAgB,kBAAA9kG,EAAAgC,KAAAK,KAAAyiG,kBAAAziG,MACA0iG,mBAAA/kG,EAAAgC,KAAAK,KAAA0iG,mBAAA1iG,MACAqhG,UAAArhG,KAAAwB,QAAA6/F,UAAArhG,KAAAwB,QAAA6/F,UAAA,EACAG,WAAAxhG,KAAAwB,QAAAggG,WACA3E,MAAA78F,KAAAwB,QAAAq7F,MACAgF,kBAAA7hG,KAAAwB,QAAAqgG,kBACA5tC,QAAAj0D,KAAAwB,QAAAyyD,QACAkuC,oBAAAniG,KAAAwB,QAAA2gG,oBACAC,oBAAApiG,KAAAwB,QAAA4gG,oBACA5D,aAAAx+F,KAAAw+F,aACA1pC,QAAA90D,KAAAwB,QAAAszD,QACAmtC,iBAAAjiG,KAAAwB,QAAAygG,iBACAC,uBAAAliG,KAAAwB,QAAA0gG,uBACAJ,qBAAA9hG,KAAAwB,QAAAsgG,qBACAzD,iBAAAr+F,KAAAq+F,iBACAmB,eAAAx/F,KAAAwB,QAAAg+F,iBAGAjrD,YAAA,WACA,MAAAv0C,KAAAuuC,QAAAvuC,KAAAuuC,MAAAkC,YAAAzwC,KAAAuuC,MAAArB,QACA,IAAA1xC,IAAAigE,OAAAz7D,KAAA7C,EAAA,iBAEA,MAAA6C,KAAAwB,QAAA49D,eACAp/D,KAAAwB,QAAA49D,aAAAp/D,KAAAuuC,MAAAruB,IAAA,iBAEAlgB,KAAA0/F,YACA1/F,KAAA2iG,kBAGAD,mBAAA,SAAAnuE,GACA,IAAAv0B,KAAAyiG,kBAAAluE,KAAAv0B,KAAAwB,QAAAyyD,QACA,OAAA,EAGA,IAAAj0D,KAAAwB,QAAAggG,YAAA,aAAAjtE,EACA,OAAA,EAEA,GAAA,MAAAv0B,KAAAg/F,kBAAA,CACA,IAAAjB,EAMA,OAJAA,EADA,MAAAviG,IAAAiC,IAAA0jB,QAAA6D,QACAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAEAh7D,IAAAiC,IAAA0jB,QAAAq1C,YAEAjiC,GACA,IAAA,cACA,IAAA,QACA,OAAA,EACA,IAAA,WACA,IAAA,WACA,IAAA,OACA,IAAA,QACA,OAAA,EACA,IAAA,UACA,OAAAv0B,KAAAwB,QAAAszD,SAAAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAksC,uBACA5iG,KAAAwB,QAAAszD,UAAAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAmsC,iDAAA9E,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,iDAAA7D,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAksC,uBACA,IAAA,MACA,OAAA5iG,KAAAwB,QAAAszD,SAAAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAosC,mBACA9iG,KAAAwB,QAAAszD,UAAAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAmsC,iDAAA9E,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,iDAAA7D,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAosC,mBACA,IAAA,QACA,OAAA9iG,KAAAwB,QAAAszD,SACAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAmsC,iDACA9E,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,iDAAA7D,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqsC,6BACA,IAAA,cACA,OAAA/iG,KAAAyiG,kBAAAluE,KAAAwpE,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAssC,yBACAhjG,KAAAwB,QAAAszD,SAAAipC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,iDACA,IAAA,SAEA,QADA5hG,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,QAIAwmC,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAusC,iCACAjjG,KAAAwB,QAAAggG,YAAAzD,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkrC,uDAEA,CACA,IAAAsB,EAAAljG,KAAAg/F,kBAAAjtD,UAAA,CAAAxd,UAAAA,IACA,GAAA,MAAA2uE,EACA,OAAAljG,KAAAwB,QAAAszD,QAAAouC,EAAAhjF,IAAA,mBAAAgjF,EAAAhjF,IAAA,qBAGA,OAAA,GAEAuiF,kBAAA,SAAAluE,GAEA,GAAA,UAAAA,GAAA,MAAAv0B,KAAAuuC,QAAAvuC,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MACA,OAAA,EACA,GAAAv3D,KAAAwB,QAAAggG,aAAA,aAAAjtE,GAAA,iBAAAA,GAAA,iBAAAA,GAAA,WAAAA,GACA,OAAA,EACA,IAAAv0B,KAAAwB,QAAAggG,YAAA,aAAAjtE,EACA,OAAA,EAGA,GAAA,MAAAv0B,KAAAg/F,kBAAA,CACA,IAAAjB,EAMAnzF,EACA,OALAmzF,EADA,MAAAviG,IAAAiC,IAAA0jB,QAAA6D,QACAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAEAh7D,IAAAiC,IAAA0jB,QAAAq1C,YAGAjiC,GACA,IAAA,SACA3pB,GAAAmzF,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAysC,0BACA,MACA,IAAA,cACAv4F,GAAA,IAAAmzF,EAAAnnC,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA0sC,sBACApjG,KAAAwB,QAAAszD,SACAlqD,GAAAmzF,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2sC,6BACAz4F,EAAAmzF,EAAAnnC,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA2sC,4BAGA,MACA,IAAA,kBACAz4F,GAAA,IAAAmzF,EAAAnnC,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA4sC,qCACAtjG,KAAAwB,QAAAszD,SAAAipC,EAAAnnC,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA6sC,8BACA,MACA,IAAA,SACA34F,IAAA5K,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MACA,MACA,QACA3sD,GAAA,EAEA,OAAAA,EAEA,IAAAs4F,EAAAljG,KAAAg/F,kBAAAjtD,UAAA,CAAAxd,UAAAA,IACA,OAAA,MAAA2uE,IACAljG,KAAAwB,QAAAggG,WAAA0B,EAAAhjF,IAAA,oBAAAgjF,EAAAhjF,IAAA,oBAKAyiF,cAAA,WAAA,IAAAa,EAAAC,EAAAC,EAAAC,EAAA3jG,KACA,IAAA,IAAAA,KAAAyiG,kBAAA,YAAA,CACA,IACAmB,IADA5jG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MAAAv3D,KAAAuuC,MAAAzxC,GAAA,IACAtB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqiC,wCAAA,KAAA,MAAA/4F,KAAAuuC,MAAAruB,IAAA,cAAAlgB,KAAAuuC,MAAAruB,IAAA,cAAA,KACAlgB,KAAA6jG,eAAA,IAAAroG,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,2BACAkwE,iBAAA,eACAvrB,cAAA,EACAC,aAAA/hD,KAAAuuC,MAAAwpD,SAAA/3F,KAAAuuC,MAAAwpD,SAAAj7F,GAAA8mG,EACA3hD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,aAAA9tC,GACAU,KAAAuuC,MAAAwpD,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA8L,QAAAxkG,IACAU,QAIA,IAAA0tE,EAAA,IAAAlyE,IAAAomD,OAAAmiD,YAAA,CACAtvD,GAAAz0C,KAAA7C,EAAA,uBACAyc,QAAA,QAAA4pF,EAAAxjG,KAAAuuC,MAAAruB,IAAA,kBAAA,IAAAsjF,EAAAA,EAAA,KACAzhD,aAAA,QAAA0hD,EAAAzjG,KAAAuuC,MAAAruB,IAAA,gBAAA,IAAAujF,EAAAA,EAAA,KACA7lG,KAAA,GACAqkD,SAAA,SAAA3iD,GACAqkG,EAAAp1D,MAAAnB,IAAA,QAAA9tC,MAIA,IAAA9D,IAAAomD,OAAAoiD,cAAA,CACAvvD,GAAAz0C,KAAA7C,EAAA,yBACA4kD,aAAA,QAAA2hD,EAAA1jG,KAAAuuC,MAAAruB,IAAA,kBAAA,IAAAwjF,EAAAA,EAAA,KACAh2B,YAAAA,EACAu2B,SAAAjkG,KAAA7C,EAAA,qBACA+mG,oBAAA1oG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAytC,gCACAvmG,KAAA,GACAqkD,SAAA,SAAA3iD,GACAqkG,EAAAp1D,MAAAnB,IAAA,UAAA9tC,MAIA,IAAA9D,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,kCACAkwE,iBAAA,eACAtrB,aAAA/hD,KAAAuuC,MAAAruB,IAAA,wBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,uBAAA,SAAA9tC,IACAU,QAGAA,KAAAwB,QAAAyyD,SACA,IAAAz4D,IAAAi8D,OAAAz3D,KAAAtC,IAAAsC,KAAAuuC,OAGA/yC,IAAAC,QAAAgc,aAAAqD,eAAA9a,KAAA7C,EAAA,wBACA3B,IAAAC,QAAAgc,aAAAqD,eAAA9a,KAAA7C,EAAA,sBACA3B,IAAAC,QAAAgc,aAAAqD,eAAA9a,KAAA7C,EAAA,uBAEA6C,KAAAokG,kBAAApkG,KAAAuuC,OACAvuC,KAAAqkG,aAAArkG,KAAAuuC,OACAvuC,KAAAskG,eAAAtkG,KAAAuuC,OAEA,EAAAvuC,KAAA7C,EAAA,iCAAAT,OACA,IAAAlB,IAAAkG,MAAA0zF,SAAAC,aAAA,CACA5gD,GAAAz0C,KAAA7C,EAAA,iCACAm4F,QAAA33F,EAAAgC,KAAA,SAAA7C,GACA,OAAAA,GACA,IAAA,kBACAkD,KAAAukG,gBACA,MACA,IAAA,oBACAvkG,KAAAwkG,mBACA,MACA,IAAA,+BACA,MAAAxkG,KAAAykG,aAAAzkG,KAAAykG,YAAAjjG,QAAA63F,YAAAr5F,KAAAuuC,MAAAzxC,GACA,MAAAkD,KAAAuuC,MAAA4qD,WACAn5F,KAAA0kG,kBAGA1kG,KAAAykG,YAAAriD,UAEA,MACA,IAAA,6BACApiD,KAAA2kG,6BAGA3kG,QAGAA,KAAA0kG,kBAGA1kG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,QAAA,EAAAv3D,KAAAuuC,MAAAzxC,IAAAkD,KAAAuuC,MAAArB,WACA,MAAAltC,KAAAuuC,MAAA6vB,QACAp+D,KAAA4kG,sBAGA5kG,KAAAwB,QAAA2gG,sBACAniG,KAAA2+F,4BACA3+F,KAAA8+F,+BAKA9+F,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,QAEA,MAAAv3D,KAAAuuC,MAAA6vB,QAAAp+D,KAAAyiG,kBAAA,WACAziG,KAAA4kG,sBAEA5kG,KAAAwB,QAAA2gG,qBACAniG,KAAA6kG,yBAEA7kG,KAAAwB,QAAAszD,SACA90D,KAAA8kG,aAIA9kG,KAAAy1E,YAAA,GAEA8uB,cAAA,WAYA,IAAA1/E,EAXA,GAAArpB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAAAplE,IAAAiC,IAAA0jB,QAAAm9C,aAAArkB,WAAA,qBAOA,GAAA,MAAAj6C,KAAA+kG,eAYA,OAJAlgF,EAHA7kB,KAAAuuC,MAAArB,QAGAvvC,EAAAka,KAAA7X,KAAAo/F,QAAA9/D,SAAAtf,OAAA,SAAAglF,GACA,OAAA,EAAAA,EAAAloG,KAHAkD,KAAAuuC,MAAAW,SAMA,CACA,IAAAI,EAAAtvC,KACAy3E,EAAA,MAAAz3E,KAAAo/F,QAAAp/F,KAAAo/F,QAAAp/F,KAAAuuC,MACAuiB,EAAA,WACAt1D,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAM,QAAA,8BAAAqS,EAAAnyC,EAAA,yBAAA,CACA8nG,QAAAxtB,EAAAwtB,QACAnwC,QAAAxlB,EAAA9tC,QAAAszD,QACAmtC,iBAAA3yD,EAAA9tC,QAAAygG,kBACA,SAAAxlC,GACAntB,EAAAnyC,EAAA,6CAAA2C,MAAA,WACAtE,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAulB,EAAA3E,IAAA,cAEA,CACA/gB,SAAA,WAEA,CACAA,SAAA,WAEA,CACA,CACAI,UAAA,eACAD,MAAA,EAAAm4E,EAAAwtB,QAAA/kF,IAAA,gBAAAu3D,EAAAwtB,QAAA/kF,IAAA,gBAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAA,eAAAj7D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAAAp7D,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAEA,CACA3gB,UAAA,UACAD,OAAA,QAKAgwC,EAAAnyC,EAAA,+CAAA2C,MAAA,WACAtE,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAulB,EAAA3E,IAAA,cAEA,CACA/gB,SAAA,WAEA,CACAA,SAAA,WAEA,CACA,CACAI,UAAA,eACAD,MAAA,EAAAm4E,EAAAwtB,QAAA/kF,IAAA,gBAAAu3D,EAAAwtB,QAAA/kF,IAAA,gBAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAA,eAAAj7D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAAAp7D,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAEA,CACA3gB,UAAA,UACAD,OAAA,QAKAgwC,EAAAy1D,cAAA,IAAAvpG,IAAAkG,MAAAujG,QAAAC,cAAA,CACAzwD,GAAAgoB,EAAA5kD,KAAA,6BACAi9C,QAAAxlB,EAAAf,MAAAruB,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBACA+zC,QAAAz4D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,mBACAsD,QAAA,IAAA1oE,IAAAk3C,YAAA5T,WAAAqmE,iBACAC,aAAA3oC,EAAA5kD,KAAA,mCACA2+C,YAAAh7D,IAAAiC,IAAA0jB,QAAAq1C,YACAjoB,MAAAkpC,EAAAwtB,QACApgF,QAAAA,EACAwgF,gBAAA,SAAAxgF,EAAAygF,GACAzgF,EAAA/nB,KAAAwyC,EAAAf,MAAAzxC,KACAwyC,EAAAf,MAAA6vB,OAAAv5C,EAAAu5C,OACA9uB,EAAAf,MAAA4qD,UAAAt0E,EAAAs0E,UACA7pD,EAAAf,MAAAnB,IAAAk4D,EAAA7sF,KAAA6sF,EAAAhmG,OACAm4E,EAAArqC,IAAAk4D,EAAA7sF,KAAA6sF,EAAAhmG,OACAgwC,EAAAqzD,kBAGA4C,2BAAA,SAAAD,GACA,MAAAh2D,EAAAk2D,yBAAA,MAAAF,GAAA,EAAAA,EAAAxoG,KACAa,EAAAuhB,KAAAowB,EAAAf,MAAAjB,WAAA+tD,yBAAA,SAAAoK,GACAA,EAAA3oG,KAAAwoG,EAAAxoG,KACA2oG,EAAAnmG,MAAAgmG,EAAAhmG,SAIAgwC,EAAAk2D,wBAAAnjD,SAAAijD,EAAAxoG,GAAAwoG,EAAAhmG,SAGAomG,2BAAA,SAAAJ,GACA,MAAAh2D,EAAAq2D,yBAAA,MAAAL,GAAA,EAAAA,EAAAxoG,KACAa,EAAAuhB,KAAAowB,EAAAf,MAAAjB,WAAA4tD,yBAAA,SAAAuK,GACAA,EAAA3oG,KAAAwoG,EAAAxoG,KACA2oG,EAAAnmG,MAAAgmG,EAAAhmG,SAIAgwC,EAAAq2D,wBAAAtjD,SAAAijD,EAAAxoG,GAAAwoG,EAAAhmG,cAMA,MAAAm4E,EAAAwtB,SAAAxtB,EAAAwtB,QAAAx0D,WAUAgnC,EAAAwtB,QAAApgF,QAAAA,EACAisC,MAVA2mB,EAAAwtB,QAAA,IAAAzpG,IAAAwkB,OAAAilF,QAAAW,QAAA,CACA/gF,QAAAA,IAEA4yD,EAAAwtB,QAAAp5D,MAAA,CACAn3B,QAAA,WACAo8C,cA1HA9wD,KAAA7C,EAAA,oBAAAZ,UAmIAioG,iBAAA,WACA,GAAAxkG,KAAAwB,QAAAszD,QAAA,CAOA,IAAAukC,EAAA,KACA,GAAAr5F,KAAAuuC,MAAArB,SAEA,GAAA,MAAAltC,KAAAo/F,QAAA,CACA,IAAAv6E,EAAAlnB,EAAAka,KAAA7X,KAAAo/F,QAAA9/D,SAAAtf,OAAA,SAAAglF,GACA,OAAA,EAAAA,EAAAloG,KAEA,MAAA+nB,IACAw0E,EAAAx0E,EAAA/nB,UANAu8F,EAAAr5F,KAAAuuC,MAAAzxC,GAUA,GAAA,MAAAkD,KAAA8+B,YAAA,MAAAu6D,EAAA,CACA,IAAA/pD,EAAAtvC,KACAA,KAAA8+B,WAAA,IAAAtjC,IAAAwkB,OAAA8e,WAAA+mE,gBAAA,CACAzmC,aAAA5jE,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACAm5E,UAAAA,IAEAr5F,KAAA8+B,WAAA+M,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACA,IAAAmmG,EAAA9lG,KAAA7C,EAAA,uBACA,EAAAQ,EAAAC,KAAAoC,KAAA8+B,WAAAzN,YACArxB,KAAA+lG,gBAAA,IAAAvqG,IAAAkG,MAAAo9B,WAAAknE,sBAAA,CACAvxD,GAAAqxD,EACAG,WAAAzqG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAwvC,qBACApxC,QAAAxlB,EAAA9tC,QAAAszD,QACAvmB,MAAAvuC,KAAA8+B,cAGAgnE,EAAA9wD,QACA,IAAAx5C,IAAAygE,MAAA6pC,EAAA,CACA3pC,KAAA,0EAGAn8D,cAtCAA,KAAA7C,EAAA,sBAAAZ,UA0CA4pG,oBAAA,WACA,IAAA3qG,IAAAkG,MAAA0kG,YAAAC,oBAAA,CACAhN,UAAAr5F,KAAAuuC,MAAAzxC,GACAwpG,OAAA3oG,EAAAgC,KAAA,WACAK,KAAA8+B,WAAA,KACA9+B,KAAAwkG,oBACAxkG,SAGA2kG,yBAAA,WAMA,IAAApuC,EALA/6D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,iCAGA,MAAA5gE,KAAAumG,gCAGA/qG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA8vC,4BACAjwC,EAAA/6D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA8vC,2BAEAxmG,KAAAumG,8BAAA,IAAA/qG,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAAz0C,KAAA7C,EAAA,sBACAuwD,WAAA1tD,KAAAuuC,MAAAT,YACAqZ,OAAAoP,EAAAA,EAAApP,OAAA,KACA8P,cAAAV,EAAAA,EAAApP,OAAA,MAAA,OAAA,KAEA+a,sBAAA,IACAnL,UAAAv7D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,2BACA6lC,gBAAA,EACAvvC,UAAAv5D,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,MACAo3D,SAAAz5D,EAAAgC,KAAA,SAAAouC,EAAAl1B,GACA,EAAAk1B,EAAAjxC,GACAixC,EAAAX,IAAA,aAAA,GAEAW,EAAAoV,UAEAnjD,KAAAuuC,MAAAf,SAAA,EACA30B,KACA7Y,WAIAokG,kBAAA,SAAA3sB,GACA,GAAAz3E,KAAAyiG,kBAAA,gBAAA,MAAAhrB,EAAA,CACA,IAAAivB,EAAA,GACAjvB,EAAAv3D,IAAA,YACAwmF,EAAAtoF,KAAA,SAEAq5D,EAAAv3D,IAAA,eACAwmF,EAAAtoF,KAAA,YAEAq5D,EAAAv3D,IAAA,qBACAwmF,EAAAtoF,KAAA,YAGA,IAAA5iB,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,8BACAkwE,iBAAA,eACA1Y,YAAA,EACAgyC,YAAA3mG,KAAAwB,QAAAyyD,QACAlS,aAAA2kD,EACAzkD,SAAAtkD,EAAAgC,KAAA,SAAAL,GAAA,IAAAsnG,EAAAC,EAAAC,EASAC,EAAAC,EAAAC,GARAxvB,EAAArqC,IAAA,CACA85D,SAAA,KAAA,QAAAN,EAAAtnG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,gBAAA,IAAA4kG,EAAAA,GAAA,GACAO,YAAA,KAAA,QAAAN,EAAAvnG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,mBAAA,IAAA6kG,EAAAA,GAAA,GACAO,kBAAA,KAAA,QAAAN,EAAAxnG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,mBAAA,IAAA8kG,EAAAA,GAAA,KAKA,MAAA9mG,KAAAo/F,UACAp/F,KAAAo/F,QAAAhyD,IAAA,CACA85D,SAAA,KAAA,QAAAH,EAAAznG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,gBAAA,IAAA+kG,EAAAA,GAAA,GACAI,YAAA,KAAA,QAAAH,EAAA1nG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,mBAAA,IAAAglG,EAAAA,GAAA,GACAI,kBAAA,KAAA,QAAAH,EAAA3nG,MAAAA,OAAA,EAAAA,EAAA0C,QAAA,mBAAA,IAAAilG,EAAAA,GAAA,MAGAjnG,UAIAqkG,aAAA,SAAA5sB,GACA,GAAAz3E,KAAAyiG,kBAAA,WAAA,MAAAhrB,EAAA,CACA,IAAA4vB,EAAA,GACA5vB,EAAAv3D,IAAA,oBACAmnF,EAAAjpF,KAAA,iBAEAq5D,EAAAv3D,IAAA,mBACAmnF,EAAAjpF,KAAA,gBAGA,IAAA5iB,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACAkwE,iBAAA,eACA1Y,YAAA,EACAgyC,YAAA3mG,KAAAwB,QAAAyyD,QACAlS,aAAAslD,EACAplD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAm4E,EAAArqC,IAAA,CACAk6D,iBAAA,IAAAhoG,EAAA0C,QAAA,iBACAulG,gBAAA,IAAAjoG,EAAA0C,QAAA,kBAKA,MAAAhC,KAAAo/F,SACAp/F,KAAAo/F,QAAAhyD,IAAA,CACAk6D,iBAAA,IAAAhoG,EAAA0C,QAAA,iBACAulG,gBAAA,IAAAjoG,EAAA0C,QAAA,mBAGAhC,UAIAskG,eAAA,SAAA7sB,GACA,GAAAz3E,KAAAyiG,kBAAA,oBAAA,MAAAhrB,EAAA,CACA,IAAA+vB,EAAA,GACA/vB,EAAAv3D,IAAA,UACAsnF,EAAAppF,KAAA,SAEAq5D,EAAAv3D,IAAA,WACAsnF,EAAAppF,KAAA,UAEAq5D,EAAAv3D,IAAA,UACAsnF,EAAAppF,KAAA,SAEAq5D,EAAAv3D,IAAA,UACAsnF,EAAAppF,KAAA,SAEAq5D,EAAAv3D,IAAA,YACAsnF,EAAAppF,KAAA,WAEAq5D,EAAAv3D,IAAA,UACAsnF,EAAAppF,KAAA,SAGA,IAAAopF,EAAA9qG,QACA8qG,EAAAppF,KAAA,MAEA,IAAA5iB,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,gCACAkwE,iBAAA,eACA1Y,YAAA,EACAgyC,YAAA3mG,KAAAwB,QAAAyyD,QACAlS,aAAAylD,EACAC,iBAAA,KACAxlD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAm4E,EAAArqC,IAAA,CACAs6D,OAAA,IAAApoG,EAAA0C,QAAA,SACA2lG,QAAA,IAAAroG,EAAA0C,QAAA,UACA4lG,OAAA,IAAAtoG,EAAA0C,QAAA,SACA6lG,OAAA,IAAAvoG,EAAA0C,QAAA,SACA8lG,SAAA,IAAAxoG,EAAA0C,QAAA,WACA+lG,QAAA,IAAAzoG,EAAA0C,QAAA,UACAgmG,QAAA,IAAA1oG,EAAA0C,QAAA,UACAimG,OAAA,IAAA3oG,EAAA0C,QAAA,WAKA,MAAAhC,KAAAo/F,SACAp/F,KAAAo/F,QAAAhyD,IAAA,CACAs6D,OAAA,IAAApoG,EAAA0C,QAAA,SACA2lG,QAAA,IAAAroG,EAAA0C,QAAA,UACA4lG,OAAA,IAAAtoG,EAAA0C,QAAA,SACA6lG,OAAA,IAAAvoG,EAAA0C,QAAA,SACA8lG,SAAA,IAAAxoG,EAAA0C,QAAA,WACA+lG,QAAA,IAAAzoG,EAAA0C,QAAA,UACAgmG,QAAA,IAAA1oG,EAAA0C,QAAA,UACAimG,OAAA,IAAA3oG,EAAA0C,QAAA,YAGAhC,UAIA4kG,oBAAA,WACA,IAAAsD,EAAAloG,KAAA7C,EAAA,wBACA,EAAAQ,EAAAC,KAAAsqG,KACA,MAAAloG,KAAAmoG,eACAnoG,KAAAmoG,cAAA5rG,SAGAyD,KAAAmoG,cAAA,IAAA3sG,IAAAkG,MAAA08D,OAAAgqC,cAAA,CACA3zD,GAAAz0C,KAAA7C,EAAA,wBACAk8F,UAAA,MAAAr5F,KAAAuuC,MAAAvuC,KAAAuuC,MAAAzxC,GAAA,KACAg1E,YAAA9xE,KAAAwB,QAAAswE,YACAD,YAAA7xE,KAAAwB,QAAA49D,aACA+S,eAAAnyE,KAAAuuC,MAAA6vB,OACAijC,UAAArhG,KAAAwB,QAAA6/F,UACAgH,kBAAAroG,KAAAwB,QAAA6mG,kBACAvzC,QAAA90D,KAAAwB,QAAAyyD,UAAAj0D,KAAAwB,QAAAggG,cAAAhmG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4xC,oBAAA9sG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2rC,wBACApuC,QAAAj0D,KAAAwB,QAAAyyD,QACAs0C,gBAAA5qG,EAAAgC,KAAAK,KAAAwoG,cAAAxoG,UAIAwoG,cAAA,SAAApoG,GACAJ,KAAAuuC,MAAAf,SAAA,GAEAs8B,kBAAA,WACA9pE,KAAAuuC,MAAAu7B,kBAAAnsE,EAAAgC,KAAA,WACAK,KAAA7C,EAAA,4BAAAud,QAAA,OACAjZ,KAAA,+FACAzB,QAEAyoG,kBAAA,WACA,MAAAzoG,KAAAuuC,MAAA2L,MACAl6C,KAAAuuC,MAAAgsD,WAAA58F,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,4CAEA/rB,KAAA+rC,UACA/rC,QAGA0oG,WAAA,WACA,IAAAltG,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAuuC,MAAAzxC,IAEA,CACAqC,SAAA,qBAGAM,OAAAC,KAAA/B,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sBAEA/rB,KAAA7C,EAAA,4BAAAZ,SACAyD,KAAA7C,EAAA,kBAAAwvC,YAAA,6FACA3sC,OAAAmsB,KAAA,SAAAroB,EAAAsoB,EAAAxhB,OAIA+9F,eAAA,WACA3oG,KAAAuuC,MAAAnB,IAAA,eAAAptC,KAAA7C,EAAA,mBAAAsb,KAAA,YACAzY,KAAA8kG,aAEAA,UAAA,WACA9kG,KAAAuuC,MAAAruB,IAAA,gBACAlgB,KAAA7C,EAAA,4BAAA+c,SAAA,UAEAla,KAAA7C,EAAA,4BAAA6c,YAAA,UAEAha,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAupD,IAAA58F,KAAA7C,EAAA,aAAA,CACAoxC,MAAAvuC,KAAAuuC,MACAiwD,aAAAx+F,KAAAw+F,cACA7gG,EAAAgC,KAAA,WACAK,KAAA4oG,gBAAA,IAAAptG,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,UACAmtD,iBAAA,mBACAvrB,cAAA,EACAG,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,SAAA9tC,IACAU,SAEAA,QAEA6kG,uBAAA,WACA,IAAA9vC,EAAA/0D,KAAA7C,EAAA,uBACA,GAAA,MAAA6C,KAAAq+F,kBACA,EAAA1gG,EAAAC,KAAAoC,KAAAq+F,iBAAAr+E,QAAA,CACAhgB,KAAA7C,EAAA,6BAAA6c,YAAA,UAKA,MAHArc,EAAAka,KAAA7X,KAAAq+F,iBAAAr+E,OAAA,SAAA6iD,GACA,OAAAA,EAAA3iD,IAAA,eACAlgB,OAEAA,KAAA7C,EAAA,8BAAAsE,KAAA,2BAAAjG,IAAA+Q,UAAA6qB,OAAAC,aAGA,IAAAwxE,EAAA,GACAlrG,EAAAuhB,KAAAlf,KAAAq+F,iBAAAr+E,OAAA,SAAA8zC,GACA,IAAAU,EAAA72D,EAAAka,KAAA7X,KAAAuuC,MAAAruB,IAAA,yBAAA,SAAAulF,GACA,OAAAA,GAAAA,EAAA3oG,KAAAg3D,EAAA5zC,IAAA,OACAlgB,MACA,GAAA,EAAArC,EAAAC,KAAAk2D,EAAA5zC,IAAA,mBAAA,MAAAs0C,GAAA,MAAAA,EAAAl1D,OAAA,iBAAAk1D,EAAAl1D,OAAA,kBAAAk1D,EAAAl1D,OAAA,IAAA3B,EAAAC,KAAA42D,EAAAl1D,QAAA,CACA,IAAAyiD,EACA,OAAA+R,EAAA5zC,IAAA,cACA,IAAA,SAGA,IAAA,iBACA6hC,EAAAx/C,SAAAuxD,EAAA5zC,IAAA,iBACA,MACA,IAAA,OACA6hC,EAAA,SAAA+R,EAAA5zC,IAAA,gBACA,MACA,QACA6hC,EAAA+R,EAAA5zC,IAAA,gBAIA,MAAAs0C,EACAA,EAAAl1D,MAAAyiD,EAEAyS,EAAA,CACA13D,GAAAg3D,EAAA5zC,IAAA,MACAyxB,YAAAmiB,EAAA5zC,IAAA,eACA5gB,MAAAyiD,GAIA,MAAAyS,GACAq0C,EAAAzqF,KAAAo2C,IAEAx0D,MACAA,KAAAuuC,MAAAnB,IAAA,CACA07D,sBAAAD,GACA,CACA/5D,QAAA,IAGA9uC,KAAA+oG,qBAAA,IAAAvtG,IAAAkG,MAAAm+B,aAAAg0B,iBAAA,CACApf,GAAAsgB,EACAD,SAAA,EACAd,OAAAh0D,KAAAwB,QAAAyyD,QACAvG,WAAA1tD,KAAAq+F,iBACAjqC,YAAAp0D,KAAAuuC,MAAAruB,IAAA,yBACA+hC,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,UAKA2+F,0BAAA,WACA,IAAA5pC,EAAA/0D,KAAA7C,EAAA,0BACA,GAAA,MAAA6C,KAAA0+F,sBAAA,EAAA1+F,KAAAuuC,MAAAzxC,IAAAkD,KAAAuuC,MAAArB,UAAA,EAAA6nB,EAAAr4D,QAGA,EAFAiB,EAAAC,KAAAD,EAAA2uC,OAAAtsC,KAAA0+F,oBAAA1+E,OAAAriB,EAAAgC,KAAA,SAAAm0D,GACA,OAAA9zD,KAAAwB,QAAAggG,YAAA1tC,EAAA5zC,IAAA,oBACAlgB,QAAA,CACAA,KAAA7C,EAAA,gCAAA6c,YAAA,UAKA,MAHArc,EAAAka,KAAA7X,KAAA0+F,oBAAA1+E,OAAA,SAAA6iD,GACA,OAAA7iE,KAAAwB,QAAAszD,SAAA+N,EAAA3iD,IAAA,eAAA2iD,EAAA3iD,IAAA,oBACAlgB,OAEAA,KAAA7C,EAAA,iCAAAsE,KAAA,8BAAAjG,IAAA+Q,UAAA6qB,OAAAC,aAGA,IAAA2xE,EAAA,MAAAxtG,IAAAiC,IAAA0jB,QAAA+4B,OAAAl6C,KAAAuuC,MAAAruB,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,iBAAAlgB,KAAAuuC,MAAArB,SACA,GAAA,MAAAltC,KAAA0+F,oBAAA,CACA,IAAAmK,EAAA,GACAlrG,EAAAuhB,KAAAlf,KAAA0+F,oBAAA1+E,OAAA,SAAA8zC,GACA,IAAAU,EAAA72D,EAAAka,KAAA7X,KAAAuuC,MAAAruB,IAAA,4BAAA,SAAAulF,GACA,OAAAA,GAAAA,EAAA3oG,KAAAg3D,EAAA5zC,IAAA,OACAlgB,MACA,GAAA,EAAArC,EAAAC,KAAAk2D,EAAA5zC,IAAA,mBAAA,MAAAs0C,GAAA,MAAAA,EAAAl1D,OAAA,iBAAAk1D,EAAAl1D,OAAA,kBAAAk1D,EAAAl1D,OAAA,IAAA3B,EAAAC,KAAA42D,EAAAl1D,QAAA,CACA,IAAAyiD,EACA,OAAA+R,EAAA5zC,IAAA,cACA,IAAA,SAGA,IAAA,iBACA6hC,EAAAx/C,SAAAuxD,EAAA5zC,IAAA,iBACA,MACA,IAAA,OACA6hC,EAAA,SAAA+R,EAAA5zC,IAAA,gBACA,MACA,QACA6hC,EAAA+R,EAAA5zC,IAAA,gBAIA,MAAAs0C,EACAA,EAAAl1D,MAAAyiD,EAEAyS,EAAA,CACA13D,GAAAg3D,EAAA5zC,IAAA,MACAyxB,YAAAmiB,EAAA5zC,IAAA,eACA5gB,MAAAyiD,GAIA,MAAAyS,GACAq0C,EAAAzqF,KAAAo2C,IAEAx0D,MACAA,KAAAuuC,MAAAnB,IAAA,CACAiuD,yBAAAwN,GACA,CACA/5D,QAAA,IAIA9uC,KAAAwlG,wBAAA,IAAAhqG,IAAAkG,MAAAm+B,aAAAg0B,iBAAA,CACApf,GAAAsgB,EACAD,QAAAk0C,EACAh1C,OAAAh0D,KAAAwB,QAAA4gG,oBACA10C,WAAA1tD,KAAA0+F,oBACAtqC,YAAAp0D,KAAAuuC,MAAAruB,IAAA,4BACA+hC,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,UAKA8+F,0BAAA,WACA,IAAA/pC,EAAA/0D,KAAA7C,EAAA,0BACA,GAAA,MAAA6C,KAAA6+F,qBAAA,EAAA9pC,EAAAr4D,QAGA,EAFAiB,EAAAC,KAAAD,EAAA2uC,OAAAtsC,KAAA6+F,oBAAA7+E,OAAAriB,EAAAgC,KAAA,SAAAm0D,GACA,OAAA9zD,KAAAwB,QAAAggG,YAAA1tC,EAAA5zC,IAAA,oBACAlgB,QAAA,CACAA,KAAA7C,EAAA,gCAAA6c,YAAA,UAKA,MAHArc,EAAAka,KAAA7X,KAAA6+F,oBAAA7+E,OAAA,SAAA6iD,GACA,OAAA7iE,KAAAwB,QAAAszD,SAAA+N,EAAA3iD,IAAA,eAAA2iD,EAAA3iD,IAAA,oBACAlgB,OAEAA,KAAA7C,EAAA,iCAAAsE,KAAA,8BAAAjG,IAAA+Q,UAAA6qB,OAAAC,aAGA,IAAA2xE,EAAA,MAAAxtG,IAAAiC,IAAA0jB,QAAA+4B,OAAAl6C,KAAAuuC,MAAAruB,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,iBAAAlgB,KAAAuuC,MAAArB,SACA,GAAA,MAAAltC,KAAA6+F,oBAAA,CACA,IAAAgK,EAAA,GACAlrG,EAAAuhB,KAAAlf,KAAA6+F,oBAAA7+E,OAAA,SAAA8zC,GACA,IAAAU,EAAA72D,EAAAka,KAAA7X,KAAAuuC,MAAAruB,IAAA,4BAAA,SAAAulF,GACA,OAAAA,GAAAA,EAAA3oG,KAAAg3D,EAAA5zC,IAAA,OACAlgB,MACA,GAAA,EAAArC,EAAAC,KAAAk2D,EAAA5zC,IAAA,mBAAA,MAAAs0C,GAAA,MAAAA,EAAAl1D,OAAA,iBAAAk1D,EAAAl1D,OAAA,kBAAAk1D,EAAAl1D,OAAA,IAAA3B,EAAAC,KAAA42D,EAAAl1D,QAAA,CACA,IAAAyiD,EACA,OAAA+R,EAAA5zC,IAAA,cACA,IAAA,SAGA,IAAA,iBACA6hC,EAAAx/C,SAAAuxD,EAAA5zC,IAAA,iBACA,MACA,IAAA,OACA6hC,EAAA,SAAA+R,EAAA5zC,IAAA,gBACA,MACA,QACA6hC,EAAA+R,EAAA5zC,IAAA,gBAIA,MAAAs0C,EACAA,EAAAl1D,MAAAyiD,EAEAyS,EAAA,CACA13D,GAAAg3D,EAAA5zC,IAAA,MACAyxB,YAAAmiB,EAAA5zC,IAAA,eACA5gB,MAAAyiD,GAIA,MAAAyS,GACAq0C,EAAAzqF,KAAAo2C,IAEAx0D,MACAA,KAAAuuC,MAAAnB,IAAA,CACA8tD,yBAAA2N,GACA,CACA/5D,QAAA,IAIA9uC,KAAA2lG,wBAAA,IAAAnqG,IAAAkG,MAAAm+B,aAAAg0B,iBAAA,CACApf,GAAAsgB,EACAD,QAAAk0C,EACAh1C,OAAAh0D,KAAAwB,QAAA4gG,oBACA10C,WAAA1tD,KAAA6+F,oBACAzqC,YAAAp0D,KAAAuuC,MAAAruB,IAAA,4BACA+hC,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,UAKA0kG,gBAAA,WACA,IAAAuE,EAAAjpG,KAAA7C,EAAA,4BACA,EAAAQ,EAAAC,KAAAqrG,KACAjpG,KAAAykG,YAAA,IAAAjpG,IAAAkG,MAAAy3F,UAAA+P,YAAA,CACAz0D,GAAAw0D,EACAv7C,WAAA1tD,KAAAuuC,MAAA4qD,UACAgQ,UAAA,EACAn1C,OAAAh0D,KAAAwB,QAAAyyD,QACAm1C,QAAA,EACA/P,UAAAr5F,KAAAuuC,MAAAzxC,GACAmlD,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,MACAo3D,SAAAz5D,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAf,SAAA,GACAxtC,UAIA2tE,eAAA,WACA,IAAA/zD,EAAA5Z,KAAAuuC,MAAAruB,IAAA,YAAA,EAAAlgB,KAAAuuC,MAAAruB,IAAA,WAAAxjB,OAAAsD,KAAAuuC,MAAAruB,IAAA,WAAAtd,cAAA,KACApB,EAAA,yCACA7D,EAAAuhB,KAAA1jB,IAAA+Q,UAAA0jB,OAAArW,GAAA,SAAAmoD,GACAvgE,GAAA,kBAAAugE,EAAAllD,aAAAja,cAAA,KAAAm/D,EAAAhlE,KAAA,cAEAiD,KAAA0tE,YAAAhwE,IAAA+D,KAAAD,GACAxB,KAAA0tE,YAAAtrB,UACApiD,KAAAuuC,MAAAruB,IAAA,UACAlgB,KAAA0tE,YAAArrB,SAAAriD,KAAAuuC,MAAAruB,IAAA,SAAAtd,eAEApH,IAAAC,QAAAgc,aAAAwD,aAAAjb,KAAA7C,EAAA,qBAAAyc,IAEAjY,YAAA,SAAAtE,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACAG,EAAA5X,IAAApG,IAAAC,QAAAkZ,cAAAS,kBAAAoE,EAAA5X,SAEA2T,YAAA,SAAAlY,GACA,OAAA,KAAAA,EAAA4b,WAAA,IAAA5b,EAAA8b,UAAA,IAAA9b,EAAA+b,UAGA5d,IAAAC,QAAAgc,aAAAlC,YAAAlY,IAGAgsG,gBAAA,WACA,IAAA7tG,IAAAkG,MAAAikB,YAAA2jF,uBAAA,CACA/6D,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,WAGAukF,kBAAA,WACA,IAAA/tG,IAAAkG,MAAAy4F,qBAAAqP,gCAAA,CACAj7D,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,WAGAykF,mBAAA,WACA,IAAAC,GAAA,EACAC,EAAA,KACA,GAAA3pG,KAAA0iG,mBAAA,eAAA,CACA,IAAAkH,EAAA5pG,KAAA7C,EAAA,yBACA,EAAAysG,EAAAltG,SACAlB,IAAAC,QAAAgc,aAAAoC,cAAA+vF,GAAA,GACA,IAAAjsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,kBACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA+vF,GAAA,GACAF,GAAA,IAKA,GAAA1pG,KAAA0iG,mBAAA,eAAA,CACA,IAAAmH,EAAA7pG,KAAA7C,EAAA,sBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAgwF,GAAA,GACA,IAAAlsG,EAAAC,KAAAoC,KAAA7C,EAAA,sBAAAyE,SACApG,IAAAC,QAAAgc,aAAAoC,cAAAgwF,GAAA,GACAH,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,SAAA,CACA,IAAAoH,EAAA9pG,KAAA7C,EAAA,uBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAiwF,GAAA,GACA,IAAAnsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,YACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAiwF,GAAA,GACAJ,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,SAAA,CACA,IAAAqH,EAAA/pG,KAAA7C,EAAA,uBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAkwF,GAAA,GACA,IAAApsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,YACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAkwF,GAAA,GACAL,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,QAAA,CACA,IAAAsH,EAAAhqG,KAAA7C,EAAA,sBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAmwF,GAAA,GACA,IAAArsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,WACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAmwF,GAAA,GACAN,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,OAAA,CACA,IAAAuH,EAAAjqG,KAAA7C,EAAA,qBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAowF,GAAA,GACA,IAAAtsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,UACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAowF,GAAA,GACAP,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,SAAA,CACA,IAAAwH,EAAAlqG,KAAA7C,EAAA,uBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAqwF,GAAA,GACA,IAAAvsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,YACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAqwF,GAAA,GACAR,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,YAAA,CACA,IAAAyH,EAAAnqG,KAAA7C,EAAA,2BACA3B,IAAAC,QAAAgc,aAAAoC,cAAAswF,GAAA,GACA,IAAAxsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,eACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAswF,GAAA,GACAT,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,YAAA,CACA,IAAA0H,EAAApqG,KAAA7C,EAAA,2BACA3B,IAAAC,QAAAgc,aAAAoC,cAAAuwF,GAAA,GACA,IAAAzsG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,eACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAuwF,GAAA,GACAV,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,QAAA,CACA,IAAA2H,EAAArqG,KAAA7C,EAAA,sBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAwwF,GAAA,GACA,IAAA1sG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,WACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAwwF,GAAA,GACAX,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,SAAA,CACA,IAAA4H,EAAAtqG,KAAA7C,EAAA,uBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAywF,GAAA,GACA,IAAA3sG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,YACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAywF,GAAA,GACAZ,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,OAAA,CACA,IAAA6H,EAAAvqG,KAAA7C,EAAA,qBACA3B,IAAAC,QAAAgc,aAAAoC,cAAA0wF,GAAA,GACA,IAAA5sG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,UACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA0wF,GAAA,GACAb,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,WAAA,CACA,IAAA8H,EAAAxqG,KAAA7C,EAAA,yBACA3B,IAAAC,QAAAgc,aAAAoC,cAAA2wF,GAAA,GACA,IAAA7sG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,cACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA2wF,GAAA,GACAd,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,kBAAA1iG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,UAAAv3D,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,iBAAA,EAAA/gE,KAAAuuC,MAAAruB,IAAA,OAAA,CACA,IAAAuqF,EAAAzqG,KAAA7C,EAAA,yDACA3B,IAAAC,QAAAgc,aAAAoC,cAAA4wF,GAAA,GACAzqG,KAAAuuC,MAAAruB,IAAA,YAAAlgB,KAAAuuC,MAAAruB,IAAA,eAAAlgB,KAAAuuC,MAAAruB,IAAA,sBACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA4wF,GAAA,GACAf,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,sBAAA1iG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,UAAAv3D,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,iBAAA,EAAA/gE,KAAAuuC,MAAAruB,IAAA,OAAA,CACA,IAAAwqF,EAAA1qG,KAAA7C,EAAA,6DACA3B,IAAAC,QAAAgc,aAAAoC,cAAA6wF,GAAA,GACA1qG,KAAAuuC,MAAAruB,IAAA,UAAAlgB,KAAAuuC,MAAAruB,IAAA,WAAAlgB,KAAAuuC,MAAAruB,IAAA,UAAAlgB,KAAAuuC,MAAAruB,IAAA,UAAAlgB,KAAAuuC,MAAAruB,IAAA,YAAAlgB,KAAAuuC,MAAAruB,IAAA,WACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA6wF,GAAA,GACAhB,GAAA,GAIA,GAAA1pG,KAAA0iG,mBAAA,aAAA1iG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,UAAAv3D,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,iBAAA,EAAA/gE,KAAAuuC,MAAAruB,IAAA,OAAA,CACA,IAAAyqF,EAAA3qG,KAAA7C,EAAA,6CACA3B,IAAAC,QAAAgc,aAAAoC,cAAA8wF,GAAA,GACA3qG,KAAAuuC,MAAAruB,IAAA,mBAAAlgB,KAAAuuC,MAAAruB,IAAA,qBACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA8wF,GAAA,GACAjB,GAAA,GAIA,GAAA1pG,KAAAyiG,kBAAA,eAAAziG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,UAAAv3D,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,iBAAA,EAAA/gE,KAAAuuC,MAAAruB,IAAA,OAAA,CACA,IAAA0qF,EAAA5qG,KAAA7C,EAAA,2BACA3B,IAAAC,QAAAgc,aAAAoC,cAAA+wF,GAAA,GACA5qG,KAAAuuC,MAAAruB,IAAA,gBACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA+wF,GAAA,GACAlB,GAAA,GAQA,GAJAA,IACAC,EAAA3pG,KAAA7C,EAAA,sBAGA,MAAA6C,KAAAmoG,gBACAnoG,KAAAmoG,cAAA9vC,YACAr4D,KAAA0iG,mBAAA,WAAA,IAAA/kG,EAAAC,KAAAoC,KAAAmoG,cAAA0C,gBAAAh3B,WAAA,CACA7zE,KAAAmoG,cAAA5vC,UAAA,oCACAmxC,GAAA,EAEA,IAAAoB,EAAA9qG,KAAA7C,EAAA,8BACA,EAAA2tG,EAAApuG,QACAouG,EAAAhzF,SAAA,SACAgzF,EAAA1wF,SAAA,gBAAAta,QAEA,MAAA6pG,IACAA,EAAAmB,IAEA,MAAAnB,IACAA,EAAA3pG,KAAA7C,EAAA,yBAKA,GAAA,MAAA6C,KAAAykG,cACAzkG,KAAAykG,YAAApsC,YACAr4D,KAAA0iG,mBAAA,cAEA,IAFA/kG,EAAAC,KAAAD,EAAA2uC,OAAAtsC,KAAAuuC,MAAA4qD,UAAAn5E,OAAA,SAAAu7E,GACA,OAAAA,EAAAr7E,IAAA,iBACA,CACAwpF,GAAA,EAEA,IAAAqB,EAAA/qG,KAAA7C,EAAA,iCACA,EAAA4tG,EAAAruG,QACAquG,EAAAjzF,SAAA,SACAizF,EAAA3wF,SAAA,gBAAAta,QAEA,MAAA6pG,IACAA,EAAAoB,IAEA,MAAApB,IACAA,EAAA3pG,KAAA7C,EAAA,6BAGA6C,KAAAykG,YAAAlsC,UAAA,wCAIA,MAAA,CACAyyC,OAAAtB,EACAC,UAAAA,IAGAsB,WAAA,WACAjrG,KAAAuuC,MAAA28D,OAAAvtG,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,kBAEA/rB,KAAA+rC,UACA/rC,QAEAmrG,oBAAA,WACAnrG,KAAA2wC,KAAA,MAAA,GAAA,IAEAA,KAAA,SAAAtzC,EAAA+tG,EAAAC,EAAAxyF,GACA,IAAA6wF,GAAA,EACAC,EAAA,KAIAlvF,EAAA,uDACA,GAAAza,KAAAwB,QAAAyyD,QAAA,CACA,IAAAmE,EAAAp4D,KAAAypG,qBAMA,GALArxC,EAAA4yC,QACAtB,GAAA,EACAC,EAAAvxC,EAAAuxC,WAGA3pG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,KAAA,CACA,GAAAv3D,KAAAuuC,MAAArB,QAAA,CACA,IAAA8+B,EAAAhsE,KAAA7C,EAAA,mBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAmyD,GAAA,GACA,IAAAruE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,eACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAmyD,GAAA,GACA09B,GAAA,EACA,MAAAC,IACAA,EAAA39B,IAIA,IAAAs/B,EAAAtrG,KAAA7C,EAAA,mBACA3B,IAAAC,QAAAgc,aAAAoC,cAAAyxF,GAAA,GACA,IAAA3tG,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,eACA1kB,IAAAC,QAAAgc,aAAAoC,cAAAyxF,GAAA,GACA5B,GAAA,EACA,MAAAC,IACAA,EAAA2B,IAKA,IAAAC,EAAAvrG,KAAA7C,EAAA,gBACAquG,EAAAxrG,KAAA7C,EAAA,eACA3B,IAAAC,QAAAgc,aAAAoC,cAAA0xF,GAAA,GACA/vG,IAAAC,QAAAgc,aAAAoC,cAAA2xF,GAAA,GACAxrG,KAAAuuC,MAAAruB,IAAA,YAAAlgB,KAAAuuC,MAAAruB,IAAA,YACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA0xF,GAAA,GACA/vG,IAAAC,QAAAgc,aAAAoC,cAAA2xF,GAAA,GACA9B,GAAA,EACAC,EAAA3pG,KAAA7C,EAAA,gBAEAsd,EAAA,uDAKA,GAAAza,KAAAwB,QAAA4gG,oBAAA,CACA,GAAApiG,KAAA2lG,0BACA3lG,KAAA2lG,wBAAAvtC,WAAA,CACA,IAAAqzC,EAAAzrG,KAAA7C,EAAA,2CACAsuG,EAAA3zF,SAAA,SACA2zF,EAAArxF,SAAA,gBAAAta,QACA4pG,GAAA,EACA,MAAAC,IACAA,EAAA3pG,KAAA2lG,wBAAAjoG,KAIA,GAAAsC,KAAAwlG,0BACAxlG,KAAAwlG,wBAAAptC,WAAA,CACA,IAAAqzC,EAAAzrG,KAAA7C,EAAA,2CACAsuG,EAAA3zF,SAAA,SACA2zF,EAAArxF,SAAA,gBAAAta,QACA4pG,GAAA,EACA,MAAAC,IACAA,EAAA3pG,KAAAwlG,wBAAA9nG,KAKA,GAAAsC,KAAA+oG,uBACA/oG,KAAA+oG,qBAAA3wC,WAAA,CACA,IAAAqzC,EAAAzrG,KAAA7C,EAAA,wCACAsuG,EAAA3zF,SAAA,SACA2zF,EAAArxF,SAAA,gBAAAta,QACA4pG,GAAA,EACA,MAAAC,IACAA,EAAA3pG,KAAA+oG,qBAAArrG,MAMA,GAAAgsG,EASA,OARA,IAAAluG,IAAAygE,MAAAj8D,KAAA7C,EAAA,qBAAA,CACA4D,KAAA,SACAo7D,KAAA1hD,SAGA,MAAAkvF,GACA3pG,KAAA++D,SAAA4qC,EAAA1kG,SAAAnH,MAMA,GAFAkC,KAAA7C,EAAA,qBAAA63C,SAEAh1C,KAAAwB,QAAAggG,YAAAxhG,KAAAuuC,MAAAf,QAAA,CAUA,IAAAk+D,EAAA1rG,KAAAuuC,MAAA6vB,OACAutC,EAAA3rG,KAAAuuC,MAAAruB,IAAA,4BACA0rF,EAAA5rG,KAAAuuC,MAAAruB,IAAA,4BACA2rF,EAAA7rG,KAAAuuC,MAAAruB,IAAA,yBACAlgB,KAAAuuC,MAAAruB,IAAA,MAAA,GAAAlgB,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,MACA,MAAAv3D,KAAAmoG,eACAnoG,KAAAuuC,MAAA6vB,OAAAzvB,MAAA3uC,KAAAmoG,cAAA0C,gBAAAlxB,KAGA35E,KAAAuuC,MAAAnB,IAAA,wBAAA,MAAAptC,KAAA+oG,qBAAA/oG,KAAA+oG,qBAAAr6D,aAAA,OACA1uC,KAAAuuC,MAAAzxC,GAAA,IACA,MAAAkD,KAAAmoG,eACAnoG,KAAAuuC,MAAA6vB,OAAAzvB,MAAA3uC,KAAAmoG,cAAA0C,gBAAAlxB,KAEA35E,KAAAuuC,MAAAnB,IAAA,2BAAA,MAAAptC,KAAAwlG,wBAAAxlG,KAAAwlG,wBAAA92D,aAAA,MACA1uC,KAAAuuC,MAAAnB,IAAA,2BAAA,MAAAptC,KAAA2lG,wBAAA3lG,KAAA2lG,wBAAAj3D,aAAA,OAGA,IAAA+1C,EAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA+vC,EAAAltC,KAAAuuC,MAAArB,QACAA,GAAAltC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8rF,oBAAAC,oBACA/rG,KAAAuuC,MAAAnB,IAAA,CACA4+D,uBAAAX,EACAY,0BAAA,IAIA,IAAAC,EAAA,IAAA1wG,IAAAk3C,YAAAymD,UAAAC,iBACAgS,GACAztG,EAAAuhB,KAAAlf,KAAAuuC,MAAA4qD,UAAAn5E,OAAAriB,EAAAgC,KAAA,SAAA47F,GACAA,EAAAr7E,IAAA,cACAgsF,EAAAt5D,IAAA,IAAAp3C,IAAAwkB,OAAAm5E,UAAAgT,gBAAA,CACAvyF,QAAA2hF,EAAAr7E,IAAA,WACA6hD,MAAAw5B,EAAAr7E,IAAA,SACAksF,OAAA7Q,EAAAr7E,IAAA,UACAo7E,WAAA,EACAG,WAAAF,EAAAr7E,IAAA,kBAGAlgB,OAGAA,KAAAuuC,MAAAoC,KAAA,KAAA,CACAnB,QAAA,EACA96B,QAAA/W,EAAAgC,KAAA,SAAA4uC,EAAAnuC,GACA,GAAAgrG,EA4BA,OA3BAprG,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAA8rF,oBAAAC,mBAAA,CACAlgF,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GACAu8F,UAAA,EACAgT,iBAAArsG,KAAAuuC,MAAAruB,IAAA,oBACAmoD,YAAAroE,KAAAuuC,MAAAruB,IAAA,eACAk/C,aAAA5jE,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBACAosF,SAAAtsG,KAAAuuC,MAAAruB,IAAA,YACAqsF,SAAAvsG,KAAAuuC,MAAAruB,IAAA,YACAssF,KAAAxsG,KAAAuuC,MAAAruB,IAAA,QACA6hD,MAAA/hE,KAAAuuC,MAAAruB,IAAA,SACAtG,QAAA5Z,KAAAuuC,MAAAruB,IAAA,WACA8sD,IAAAhtE,KAAAuuC,MAAAruB,IAAA,OACA+sD,MAAAjtE,KAAAuuC,MAAAruB,IAAA,SACAusF,IAAAzsG,KAAAuuC,MAAAruB,IAAA,OACAk+C,OAAAstC,EACArQ,yBAAAsQ,EACAzQ,yBAAA0Q,EACA9C,sBAAA+C,IAEA7rG,KAAAuuC,MAAA6vB,OAAAstC,EACA1rG,KAAAuuC,MAAA4qD,UAAA+S,OAEA,mBAAAlsG,KAAAwB,QAAAkrG,SACA1sG,KAAAwB,QAAAkrG,SAAA1sG,KAAAuuC,OAEAvuC,KAAA+rC,UAKA,IAAAhgB,EAAA,6BACA/rB,KAAAwB,QAAAggG,YACAz1E,EAAA,+BAEA/rB,KAAAu/F,mBACA/jG,IAAAiC,IAAA0jB,QAAA04E,uBAAA,WACAr+F,IAAAiC,IAAA7B,UAAA+wG,qBAIA3sG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAGAh1C,EAFAmhB,GACA1xC,IAAAiC,IAAA0jB,QAAA6D,QAAA8R,gBAAA8b,IAAA5yC,KAAAuuC,OACA,sCAEA,qCAEAvuC,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8rF,oBAAAC,mBAGAhgF,EAFAmhB,GACA1xC,IAAAiC,IAAA0jB,QAAA6D,QAAA4nF,aAAAh6D,IAAA5yC,KAAAuuC,OACA88D,EAAA,qCAAA,8BAEA,6BAEArrG,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,OAGAxrC,EAFAmhB,GACA1xC,IAAAiC,IAAA0jB,QAAAm2C,MAAA1kB,IAAA5yC,KAAAuuC,OACA,2BAEA,2BAIA/yC,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAAA,IAGA,mBAAA/rB,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,MAAArB,GAGA,mBAAAr0B,GACAA,GAAA,IAEA7Y,MACAsU,MAAA3W,EAAAgC,KAAA,SAAA4uC,EAAA3uC,GAMA,GALA,mBAAAiZ,GACAA,GAAA,GAGA4rE,EAAAloF,SACAqD,EAAAysB,cAAAzsB,EAAAysB,aAAAN,QAAA,CACA,GAAA,+BAAAnsB,EAAAysB,aAAAN,QAkCA,YAjCAvwB,IAAAiC,IAAA0jB,QAAAm9C,aAAAuuC,gBAAAlvG,EAAAgC,KAAA,SAAAmtG,GACA,IACAC,EACA,OAFAvxG,IAAAiC,IAAA0jB,QAAAm9C,aAEAxhE,IACA,KAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAA4nE,MACAD,EAAAD,EAAAG,MACA,MACA,KAAAzxG,IAAA+Q,UAAAkyD,cAAAr5B,MAAA8nE,IACAH,EAAAD,EAAAK,IACA,MACA,KAAA3xG,IAAA+Q,UAAAkyD,cAAAr5B,MAAAgoE,WACAL,EAAAD,EAAAO,WACA,MACA,QACAN,EAAA,EAGA,IAAAO,EAAA,IAAA9xG,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,wBACAovB,KAAA,wFAAA55C,IAAAC,QAAAkZ,cAAAmC,eAAAi2F,EAAA,GAAA,GAAA,gDACA/5B,MAAAr1E,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAosF,gBAAA/xG,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,aAAA,EAAAviB,EAAAgC,KAAA,WACA2tG,EAAAz0D,cACA74C,KAAA2wC,QACA3wC,MAAArC,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,8EAEA/rB,KAAA64C,eACA74C,QACAA,SAEAA,OAEA,GAAA,gBAAAJ,EAAAysB,aAAAN,QAkCA,YAjCA,IAAAvwB,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,eACAovB,KAAA,gHACA49B,MAAAr1E,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAnB,IAAA,4BAAA,GACAq3C,EAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACA,IAAAosB,EAAA,6BACAmhB,IACA1xC,IAAAiC,IAAA0jB,QAAA6D,QAAA4nF,aAAAh6D,IAAA5yC,KAAAuuC,OACAxiB,EAAAs/E,EAAA,qCAAA,8BAEA7vG,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAAA,IAEA,mBAAA/rB,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,MAAArB,GAGA,mBAAAr0B,GACAA,GAAA,IAEA7Y,MACAsU,MAAA,WACAmwE,EAAAloF,SACAf,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,qBAGA/rB,OACAA,QAGA,GAAA,oBAAAJ,EAAAysB,aAAAN,QAMA,OALA,IAAAvwB,IAAAygE,MAAAj8D,KAAA7C,EAAA,qBAAA,CACA4D,KAAA,SACAo7D,KAAA,+CAEA3gE,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,oBAAA,GAIA3B,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,oBAEA/rB,YAzNA,mBAAAA,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,QA2NAwwB,SAAA,SAAAt0D,GACA,mBAAAzK,KAAAwB,QAAAu9D,SACA/+D,KAAAwB,QAAAu9D,SAAAt0D,GAEAzK,KAAAtC,IAAAs/D,QAAA,CACAnzC,UAAApf,GACA,MAGAsvD,OAAA,WACA/5D,KAAAuuC,MAAAf,SAAAxtC,KAAAwB,QAAAyyD,QACA,IAAAz4D,IAAAkG,MAAAs5D,OAAAwyC,aAAA,CACAxnF,OAAA,kBACAovB,KAAA,+BACA+jB,OAAAx7D,EAAAgC,KAAA,WACAK,KAAA2wC,QACA3wC,MACAytG,WAAA9vG,EAAAgC,KAAA,WACAK,KAAAuuC,MAAApB,UACA,mBAAAntC,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,SAAAl5D,KAAAuuC,QAEAvuC,QAEA,mBAAAA,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,SAAAl5D,KAAAuuC,QAGAisD,OAAA,WACA,IAAAzuE,EAAA,gDACA/rB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAs3C,MAAAC,KACAxrC,EAAA,6CACA/rB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eACAh1C,EAAA,iEACA/rB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8rF,oBAAAC,qBACAhgF,EAAA,0EAEA,IAAAvwB,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,mBACAovB,KAAArpB,EACAqrC,SAAAz5D,EAAAgC,KAAA,WACAK,KAAAuuC,MAAA4U,UACAnjD,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,gBAAA,MAAAvlE,IAAAiC,IAAA0jB,QAAA6D,QAAA8R,iBACAt7B,IAAAiC,IAAA0jB,QAAA6D,QAAA8R,gBAAAv6B,OAAAyD,KAAAuuC,MAAAzxC,IACAivB,EAAA,kEACA/rB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA8rF,oBAAAC,qBACAvwG,IAAAiC,IAAA0jB,QAAA6D,QAAA4nF,aAAArwG,OAAAyD,KAAAuuC,MAAAzxC,IACAivB,EAAA,0EAEA,mBAAA/rB,KAAAwB,QAAA41D,UACAp3D,KAAAwB,QAAA41D,SAAAp3D,KAAAuuC,QAEAvuC,WAKAxE,IAAAkG,MAAA49B,SAAA0hC,qBAAAxlE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BACAk3B,SAAA,EACA5d,SAAA,IACAC,SAAA,KACAo3D,kBAAA,EACA7Q,MAAA,KACAzlC,SAAAz5D,EAAAu4C,KACAgjB,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,MAEAzC,OAAA,CACAqpD,8BAAA,kBACAC,gCAAA,oBACAC,kEAAA,cACAC,kCAAA,cACAK,iCAAA,oBACAE,0BAAA,SACAC,6BAAA,SACAC,2BAAA,OACAiQ,4CAAA,sBACAhQ,2CAAA,sBACAC,6BAAA,UAEA3mD,mBAAA,WACA,MAAAj3C,KAAAuuC,QACAvuC,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAAsf,SAAAo2B,QAAA,CACA54D,GAAAkD,KAAAwB,QAAA63F,aAGAr5F,KAAAs6D,SAAAt6D,KAAAuuC,MAAA,OAAAvuC,KAAA+rC,QACA/rC,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,MAAAkC,UAEAzwC,KAAAy1E,YACAz1E,KAAA+rC,SAFA/rC,KAAAuuC,MAAA1C,SAKAoI,aAAA,WACAz4C,IAAAkG,MAAA49B,SAAAq9D,oBAAAt7F,UAAAg+F,sBAAAt0F,KAAA/K,OAEAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAizD,WAAAxhG,KAAAwB,QAAAggG,WACAkM,iBAAA1tG,KAAAwB,QAAAksG,iBACAE,YAAA5tG,KAAAwB,QAAAosG,YAAA5tG,KAAAwB,QAAAosG,YAAA,SACA35C,QAAAj0D,KAAAwB,QAAAyyD,QACAmuC,oBAAApiG,KAAAwB,QAAA4gG,oBACAP,kBAAA7hG,KAAAwB,QAAAqgG,kBACA/sC,QAAA90D,KAAAwB,QAAAszD,QACAotC,uBAAAliG,KAAAwB,QAAA0gG,yBAGA2L,sBAAA,WACA,OAAA,MAAA7tG,KAAAuuC,QAAAvuC,KAAAuuC,MAAArB,SAAAltC,KAAAuuC,MAAAkC,YAEAq9D,kBAAA,WACA,OAAA9tG,KAAA7C,EAAA,gBAEAo3C,YAAA,WACA,GAAAv0C,KAAA6tG,wBAAA,CACA,IAAAE,EAAA/tG,KAAA8tG,oBACAt9D,EAAA7yC,EAAAsC,OAAAD,KAAAguG,sBAAA,CACAv5D,GAAAs5D,EACAx6F,IAAAw6F,EAAArxG,OACAqiE,SAAAphE,EAAAgC,KAAA,SAAA8K,GACAtN,EAAA,aAAA6/D,QAAA,CACAnzC,UAAApf,GACA,MACAzK,MACA0sG,SAAA/uG,EAAAgC,KAAA,SAAA4uC,GACAvuC,KAAAuuC,MAAAA,EACAvuC,KAAA+rC,UACA/rC,MACAm5D,OAAAx7D,EAAAgC,KAAA,SAAA4uC,EAAArB,IACA,KADA,EAAA9iC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA6jG,eAAA,IACAA,eACAjuG,KAAA64C,cAEA,mBAAA74C,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAA5qB,EAAArB,IAEAltC,MACAk5D,SAAAv7D,EAAAgC,KAAA,SAAA4uC,IACA,KADA,EAAAnkC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA6jG,eAAA,IACAA,eACAjuG,KAAA64C,cAEA,mBAAA74C,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,SAAA3qB,IAEAvuC,MACAo3D,SAAAz5D,EAAAgC,KAAA,SAAA4uC,IACA,KADA,EAAAnkC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA6jG,eAAA,IACAA,eACAjuG,KAAA64C,cAEA,mBAAA74C,KAAAwB,QAAA41D,UACAp3D,KAAAwB,QAAA41D,SAAA7oB,IAEAvuC,QAEAA,KAAAkuG,SAAA,IAAAluG,KAAAmuG,mBAAA,CAAA39D,KAGA29D,iBAAA,WACA,OAAA3yG,IAAAkG,MAAA49B,SAAAq9D,qBAEAqR,oBAAA,WACA,MAAA,CACAz/D,MAAAvuC,KAAAuuC,MACA8I,MAAAr3C,OAGAqpG,gBAAA,WACArpG,KAAAkuG,SAAA7E,mBAEAE,kBAAA,WACAvpG,KAAAkuG,SAAA3E,qBAEA6E,OAAA,WACApuG,KAAAkuG,SAAAv9D,KAAA,MAAA,IAEAw6D,oBAAA,WAAA,IAAAkD,GACAA,EAAAruG,KAAAkuG,UAAA/C,oBAAAtsF,MAAAwvF,EAAAjkG,YAEAumC,KAAA,WAAA,IAAA29D,GACAA,EAAAtuG,KAAAkuG,UAAAv9D,KAAA9xB,MAAAyvF,EAAAlkG,YAEA2vD,OAAA,WAAA,IAAAw0C,GACAA,EAAAvuG,KAAAkuG,UAAAn0C,OAAAl7C,MAAA0vF,EAAAnkG,YAEAowF,OAAA,WAAA,IAAAgU,GACAA,EAAAxuG,KAAAkuG,UAAA1T,OAAA37E,MAAA2vF,EAAApkG,cAIA5O,IAAAkG,MAAA49B,SAAAmvE,oBAAAjzG,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBACAm8B,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,KACAw4D,aAAA,KACAC,WAAA,KACAC,iBAAA,EACAC,oBAAA,EACAC,gBAAA,KACAj5C,gBAAA,EACAv2B,SAAA,KACAyvE,aAAA,EACAzlD,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACA4W,SAAA,QACA7nB,MAAA,OACA8nB,SAAA,SACA04D,eAAA,KACAC,0BAAA,EACAC,cAAA,KACAC,kBAAA,EACAC,WAAA,EACAC,oBAAA,EACAC,iBAAA,EACAC,eAAA,QAEA97D,OAAA,CACA+7D,yBAAA,gBACAC,gCAAA,SACAC,8BAAA,OACAC,wBAAA,gBACAC,sCAAA,oBACAC,oDAAA,yBACAC,gDAAA,qBACAC,uCAAA,cACAC,2CAAA,iBACAC,2CAAA,iBACAC,6BAAA,qBAEAj5D,mBAAA,WAMA,GALAj3C,KAAAwB,QAAAwjB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA,KACAhlB,KAAAwB,QAAAszD,UAAA90D,KAAAwB,QAAAwjB,SAAAhlB,KAAAwB,QAAAwjB,QAAA47C,cAAA,2BACA5gE,KAAA41D,gBAAA51D,KAAAwB,QAAAq0D,eAAA,KAAA,GAEA71D,KAAAwB,QAAA8nD,UACA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MACA,MAAA3/B,KAAAs3D,OACAt3D,KAAAs3D,MAAA,IAAA97D,IAAAk3C,YAAA4kB,MAAA64C,MACAnwG,KAAAs6D,SAAAt6D,KAAAs3D,MAAA,OAAAt3D,KAAA+rC,QACA/rC,KAAAs3D,MAAAzrB,SAEA7rC,KAAAs6D,SAAAt6D,KAAAs3D,MAAA,OAAAt3D,KAAA+rC,aAMA,GAHA/rC,KAAAwB,QAAA89B,WACAt/B,KAAAs/B,SAAAt/B,KAAAwB,QAAA89B,UAEA,MAAAt/B,KAAAs/B,SAAA,CACA,IAAA8wE,EAAA,GACAC,EAAA1yG,EAAAgC,KAAA,SAAA2wG,GACA,OAAAA,GACA,KAAA90G,IAAA+Q,UAAA+yB,SAAAC,SAAAC,aACA,OAAAhkC,IAAAiC,IAAA0jB,QAAA6D,QAAA4nF,aACA,KAAApxG,IAAA+Q,UAAA+yB,SAAAC,SAAAG,gBACA,OAAAlkC,IAAAiC,IAAA0jB,QAAA6D,QAAA8R,gBACA,KAAAt7B,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACA,QACA,OAAA,IAAAjkC,IAAAk3C,YAAApT,SAAAm2B,WAEAz1D,MACAA,KAAAuwG,iBAAA,EACA,UAAA/0G,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAA8nD,SACA3rD,EAAAuhB,KAAAlf,KAAAwB,QAAA8nD,QAAA,SAAAgnD,GACAF,EAAAhyF,KAAAiyF,EAAAC,IAEAA,IAAA90G,IAAA+Q,UAAA+yB,SAAAC,SAAAC,eACAx/B,KAAAuwG,iBAAA,IAEAvwG,OAEAA,KAAAs/B,SAAA+wE,EAAArwG,KAAAwB,QAAA8nD,SAEAtpD,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAC,eACAx/B,KAAAuwG,iBAAA,IAIA,IAAAC,EAAA7yG,EAAAgC,KAAA,WAAA,IAAA8wG,EAAAzwG,KACA,GAAA,EAAArC,EAAAC,KAAAwyG,GAAA,CACApwG,KAAAs/B,SAAA,IAAA9jC,IAAAk3C,YAAApT,SAAAm2B,UACA,SAAAyvB,EAAA3hF,GACA5F,EAAAC,KAAAwyG,GAAA7sG,EACA6sG,EAAA7sG,GAAAsoC,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,SAAA+wG,GACA1wG,KAAAs/B,SAAAsT,IAAA89D,EAAA1wF,QACAklE,EAAA3hF,EAAA,IACAktG,KAGAA,EAAA1kE,SAGAm5C,CAAA,QACAllF,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,UAAAz/B,KAAAs/B,SAAAmR,YACAzwC,KAAAs/B,SAAAuM,QACA7rC,KAAAs6D,SAAAt6D,KAAAs/B,SAAA,eAAA3hC,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,OAEAA,KAAAs6D,SAAAt6D,KAAAs/B,SAAA,OAAA3hC,EAAAgC,KAAA,WACAK,KAAAgiD,UAAAI,QAAA,SACApiD,SAEAA,MAEAA,KAAAuwG,gBACAvwG,KAAAwB,QAAAwjB,QAAA2rF,mBAAAhzG,EAAAgC,KAAA,SAAA0zB,GACArzB,KAAAqlF,gBAAAhyD,EACAm9E,KACAxwG,OAEAwwG,SAGAxwG,KAAAs6D,SAAAt6D,KAAAs/B,SAAA,eAAA3hC,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,OAEAA,KAAAs6D,SAAAt6D,KAAAs/B,SAAA,OAAA3hC,EAAAgC,KAAA,WACAK,KAAAgiD,UAAAI,QAAA,SACApiD,QAIAi0C,aAAA,WACAj0C,KAAAwB,QAAA0tG,cACAlvG,KAAAwB,QAAAD,MAAAvB,KAAAwB,QAAA0tG,cAEAlvG,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MACA3/B,KAAAwB,QAAAD,MAAA,cACAvB,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAG,gBACA1/B,KAAAwB,QAAAD,MAAA,yBACAvB,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAC,aACAx/B,KAAAwB,QAAAD,MAAA,yBACAvB,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAK,UACA5/B,KAAAwB,QAAAD,MAAA,iBAEAvB,KAAAwB,QAAAD,MAAA,iBAIAvB,KAAAwB,QAAAq0D,iBACA71D,KAAAwB,QAAAD,OAAA,KAEAvB,KAAAg0C,WAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACA,IAAAuK,EAAA,GACA9+C,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MAEAmf,EAAA,CACA,CACA1+C,KAAA,gBACAmB,MAAAvB,KAAAwB,QAAA8tG,gBAAA,2NAAA,GACA30C,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAAwwD,GAAA,EAUA,OATA,MAAA5wG,KAAA41D,kBAEAg7C,EADA5wG,KAAAwB,QAAAq0D,gBAAA,MAAA71D,KAAA41D,gBACA51D,KAAA41D,gBAAA94D,KAAAsD,EAIA,MAFAzC,EAAAka,KAAA7X,KAAA41D,gBAAA,SAAA/wC,GACA,OAAAzkB,IAAAykB,EAAA/nB,MAIA,0GAAA8zG,EAAA,YAAA,IAAA,4BAAAxwD,EAAAlgC,IAAA,iBAAA,WAAA,IAAA,uFACAlgB,OAEA,CACAuB,MAAA,SACAnB,KAAA,sBACAouB,MAAA,OACAud,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GAOA,OALA,IAAAhgD,EACA,6EAEA,iFAKA,CACAmB,MAAA,OACAitB,MAAA,QACAmsC,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA23C,EAMA,OAJAA,EADA,MAAA33C,EAAA23C,SACA33C,EAAA23C,SAEAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAA9iC,EAAAlgC,IAAA,MAAA,GAEA,SAAAnf,EACAg3F,EAAA73E,IAAA,aAEA,sBAAA63E,EAAA73E,IAAA,SAAA,MAAA63E,EAAA73E,IAAA,QAAA,WACAlgB,OAEA,CAAAI,KAAA,yBAAAmB,MAAA,gBACA,CAAAnB,KAAA,mBAAAmB,MAAA,WAGAu9C,EAAA,CACA,CACA1+C,KAAA,gBACAmB,MAAAvB,KAAAwB,QAAA8tG,gBAAA,2NAAA,GACA30C,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAAwwD,GAAA,EAAAjK,GAAA,EA6BA,OA3BA,MAAA3mG,KAAA41D,kBAEAg7C,EADA5wG,KAAAwB,QAAAq0D,eACA71D,KAAA41D,gBAAA94D,KAAAsD,EAIA,MAFAzC,EAAAka,KAAA7X,KAAA41D,gBAAA,SAAA/wC,GACA,OAAAzkB,IAAAykB,EAAA/nB,MAKAsjD,EAAAlgC,IAAA,iBACAymF,GAAA,EACA3mG,KAAAwB,QAAAstG,kBACA9uG,KAAAwB,QAAAq0D,eACA71D,KAAAwB,QAAAstG,gBAAAhyG,KAAAsD,IACAumG,GAAA,QAKAt8F,IAFA1M,EAAAka,KAAA7X,KAAAwB,QAAAstG,gBAAA,SAAA+B,GACA,OAAAA,EAAA/zG,KAAAsD,MAGAumG,EADAiK,GAAA,IAMA,2GAAAA,EAAA,UAAA,KAAAjK,EAAA,YAAA,IAAA,8GACA3mG,OAEA,CACAI,KAAA,WACAmB,MAAA,OACAitB,MAAA,QACAmsC,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA23C,EAMA,OAJAA,EADA,MAAA33C,EAAA23C,SACA33C,EAAA23C,SAEAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA9U,WAAA9iC,EAAAlgC,IAAA,MAAA,GAEA,SAAAnf,EACAg3F,EAAA73E,IAAA,aAEA,sBAAA63E,EAAA73E,IAAA,SAAA,MAAA63E,EAAA73E,IAAA,QAAA,WACAlgB,OAEA,CAAAI,KAAA,yBAAAmB,MAAA,gBACA,CAAAnB,KAAA,yBAAAmB,MAAA,gBACA,CAAAnB,KAAA,mBAAAmB,MAAA,UAGA,MAAAvB,KAAAqlF,iBACAvmC,EAAA1gC,KAAA,CACAhe,KAAA,oBACAmB,MAAA,SACAitB,MAAA,OACAud,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAAjrB,EAAA,EAAAx3B,EAAAC,KAAAwC,GAAAA,EAAA6U,cAAA,UACA,MAAA,sBAAAjV,KAAA8wG,eAAA37E,GAAA,KAAAA,EAAA,WACAn1B,SAKAA,KAAAwB,QAAAutG,cACAjwD,EAAA1gC,KAAA,CAAAhe,KAAA,sBAAAmB,MAAA,YACAu9C,EAAA1gC,KAAA,CAAAhe,KAAA,kBAAAmB,MAAA,SACAu9C,EAAA1gC,KAAA,CAAAhe,KAAA,mBAAAmB,MAAA,WAGA,IACAnB,EA+GA43F,EACA+Y,EACAC,EAlHAj0D,EAAA,KAEA/8C,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAsd,EAAAp/C,EAAAgC,KAAA,SAAAiqD,EAAAC,EAAA7F,EAAAnrC,GACA,IAAA8qC,EAAAK,EAAA,GACA,IAAAxoD,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,aACA,CACA,CACAI,UAAA,SACAD,MAAAU,KAAA7C,EAAA,qBAAAyE,MACAygB,gBAAA,GAEA,CACA9iB,UAAA,OACAD,MAAAsqD,GAEA,CACArqD,UAAA,WACAD,MAAAuqD,GAEA,CACAtqD,UAAA,UACAD,MAAAqkD,EAAA5mD,MAEA,CACAwC,UAAA,iBACAD,MAAAqkD,EAAAqG,WAEA,CACAzqD,UAAA,YACAD,MAAAU,KAAAgiD,UAAAhiD,KAAAgiD,UAAAgtD,eAAA,KACA3sF,gBAAA,GAEA,CACA9iB,UAAA,YACAD,MAAAU,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KACAulB,gBAAA,OAGAnC,MAAAxL,QAAA/W,EAAAgC,KAAA,SAAAS,GACA,IAAA6wG,EAAA,IAAAz1G,IAAAk3C,YAAApT,SAAAm2B,SAAAr1D,EAAAk/B,UACAzmB,EAAAo4F,EAAAjxF,OAAA5f,EAAAgqD,YACApqD,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GACA+U,KACA7Y,QACAA,MACAA,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAK,UACAmd,EAAAp/C,EAAAgC,KAAA,SAAAiqD,EAAAC,EAAA7F,EAAAnrC,GACA,IAAA8qC,EAAAK,EAAA,GACA,IAAAxoD,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,oBACA,CACA,CACAI,UAAA,SACAD,MAAAU,KAAA7C,EAAA,qBAAAyE,MACAygB,gBAAA,GAEA,CACA9iB,UAAA,OACAD,MAAAsqD,GAEA,CACArqD,UAAA,WACAD,MAAAuqD,GAEA,CACAtqD,UAAA,UACAD,MAAAqkD,EAAA5mD,MAEA,CACAwC,UAAA,iBACAD,MAAAqkD,EAAAqG,WAEA,CACAzqD,UAAA,YACAD,MAAAU,KAAAgiD,UAAAhiD,KAAAgiD,UAAAgtD,eAAA,KACA3sF,gBAAA,GAEA,CACA9iB,UAAA,YACAD,MAAAU,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KACAulB,gBAAA,OAGAnC,MAAAxL,QAAA/W,EAAAgC,KAAA,SAAAS,GACA,IAAA6wG,EAAA,IAAAz1G,IAAAk3C,YAAApT,SAAAm2B,SAAAr1D,EAAA02F,WACAj+E,EAAAo4F,EAAAjxF,OAAA5f,EAAAgqD,YACApqD,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GACA+U,KACA7Y,QACAA,MAEAI,EAAAJ,KAAAkxG,kBAGA,EAAAvzG,EAAAC,KAAAwC,IAAAJ,KAAAwB,QAAA4tG,YACAhvG,EAAAzC,EAAA2uC,OAAAlsC,EAAA,SAAAmuC,GACA,OAAA,EAAAA,EAAAruB,IAAA,cACAlgB,OAGA,EAAArC,EAAAC,KAAAwC,IAAAJ,KAAAwB,QAAA6tG,qBACAjvG,EAAAzC,EAAA2uC,OAAAlsC,EAAA,SAAAmuC,GACA,OAAA,MAAAA,EAAAruB,IAAA,cACAlgB,OAWAgxG,EAJAhxG,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,OACAq4D,EAAAx8F,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,GACAwO,EAAA,qCACA,IAAApzG,EAAAC,KAAAwC,IAAA,EAAAzC,EAAAC,KAAAoC,KAAAs3D,MAAAt3C,QACA,oCAEA,kDAEAhgB,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAC,cACAw4D,EAAAx8F,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,GACAwO,EAAA,gDACA,IAAApzG,EAAAC,KAAAwC,IAAA,EAAAzC,EAAAC,KAAAoC,KAAAs/B,SAAAtf,QACA,+CAEA,uDAEAhgB,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAG,iBACAs4D,EAAAx8F,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,iBACAwO,EAAA,gDACA,IAAApzG,EAAAC,KAAAwC,KAAA,MAAAJ,KAAAs/B,UAAA,EAAA3hC,EAAAC,KAAAoC,KAAAs/B,SAAAtf,SACA,+CAEA,wDAIAg4E,EADAh4F,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAjkC,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,GAEA5kG,EAAA4hE,MAAA/jE,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,iBAAA/mG,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,IAEAwO,EAAA,wCACA,IAAApzG,EAAAC,KAAAwC,KAAA,MAAAJ,KAAAs/B,UAAA,EAAA3hC,EAAAC,KAAAoC,KAAAs/B,SAAAtf,SACA,uCAEA,yCAIAhgB,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA49B,SAAA6xE,uBAAA,CACA18D,GAAAz0C,KAAA7C,EAAA,wBACAiD,KAAAA,EACAo8C,aAAA,EACAmH,MAAA3jD,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MAAA,CAAA,EAAA,OAAA,CAAA,EAAA,OACAmf,QAAAA,EACAkwD,eAAAhvG,KAAAwB,QAAAwtG,eACAC,yBAAAjvG,KAAAwB,QAAAytG,yBACAnyD,WAAA,CACAk7C,UAAAA,EACA3S,gBAAArlF,KAAAqlF,gBACA+rB,aAAApxG,KAAAuwG,gBACAjnD,QAAAtpD,KAAAwB,QAAA8nD,QACAwL,QAAA90D,KAAAwB,QAAAszD,SAEA7V,SAAA,CACAoyD,WAAAL,EACAlkD,YAAAikD,GAEAh0D,gBAAAA,EACAuI,WAAA3nD,EAAAgC,KAAAK,KAAAslD,WAAAtlD,SAGA8wG,eAAA,SAAA/zG,GACA,IAAAo4B,EAAAx3B,EAAAka,KAAA7X,KAAAqlF,gBAAA,SAAAlwD,GACA,OAAAA,EAAAp4B,KAAAkY,gBAAAlY,EAAAkY,gBAGA,OAAA,MAAAkgB,EAAAA,EAAA0uD,gBAAA,QAEAytB,cAAA,WACAtxG,KAAAwB,QAAA8nD,QAAAtpD,KAAAwB,QAAA8nD,UAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SAAAjkC,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MAAAnkC,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAz/B,KAAA+rC,UAEAmlE,gBAAA,WACA,IAAA5xE,EAAA,GAoBA,GAnBA,MAAAt/B,KAAAs3D,OAAA,EAAAt3D,KAAAs3D,MAAA56D,SACA4iC,EAAA3hC,EAAA4hE,MAAAjgC,EAAAt/B,KAAAs3D,MAAAt3C,SACA,MAAAhgB,KAAAs/B,UAAA,EAAAt/B,KAAAs/B,SAAA5iC,SACA4iC,EAAA3hC,EAAA4hE,MAAAjgC,EAAAt/B,KAAAs/B,SAAAtf,SAEAhgB,KAAAwB,QAAAktG,eAEApvE,EADAt/B,KAAAwB,QAAAq0D,eACAl4D,EAAA2uC,OAAAhN,EAAA3hC,EAAAgC,KAAA,SAAAklB,GACA,OAAAA,EAAA/nB,KAAAkD,KAAAwB,QAAAktG,aAAA5xG,IACAkD,OAEArC,EAAA2uC,OAAAhN,EAAA3hC,EAAAgC,KAAA,SAAAklB,GACA,OAEA,MAFAlnB,EAAAka,KAAA7X,KAAAwB,QAAAktG,aAAA,SAAA6C,GACA,OAAAA,EAAAz0G,KAAA+nB,EAAA/nB,MAEAkD,QAIAA,KAAAwB,QAAAmtG,YAAAhxF,MAAAjd,QAAAV,KAAAwB,QAAAmtG,aAAA,EAAAhxG,EAAAC,KAAAoC,KAAAwB,QAAAmtG,YAAA,CACA,IAAA6C,EAAAxxG,KAAAwB,QAAAmtG,WAAA1vF,IAAA,SAAAspD,GAAA,OAAAA,EAAA3lE,gBACA08B,EAAA3hC,EAAA2uC,OAAAhN,EAAA,SAAAza,GAAA,IAAA4sF,EACAC,EAAA,QAAAD,EAAA5sF,EAAA3E,IAAA,gBAAA,IAAAuxF,OAAA,EAAAA,EAAA7uG,cACA,OAAA4uG,EAAAzhD,SAAA2hD,KAIA,OAAApyE,GAEAgmB,WAAA,SAAAlF,EAAAhgD,EAAAuxG,GACAvxG,EAAAktC,WAAAskE,eACAz0G,EAAAijD,GAAAviD,IAAA,CAAAg0G,QAAA,+CAEAC,kBAAA,SAAAz0G,GACA,IACA24E,EADA74E,EAAAE,EAAAgc,eACAZ,KAAA,WAKAzY,KAAA41D,gBAHAogB,EAGAh2E,KAAAkxG,kBAFAlxG,KAAAwB,QAAAuwG,gBAAA,KAAA,GAKA/xG,KAAA7C,EAAA,mBAAAsb,KAAA,UAAAu9D,GACAh2E,KAAA7C,EAAA,yBAAAsb,KAAA,WAAA,MAAAzY,KAAA41D,iBAAA,IAAAj4D,EAAAC,KAAAoC,KAAA41D,mBAEAo8C,cAAA,SAAA30G,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACAu3F,EAAAp3F,EAAAf,KAAA,WACAzY,KAAAwB,QAAAq0D,gBACA71D,KAAA7C,EAAA,mBAAA80G,IAAAz4F,GAAAf,KAAA,WAAA,GAEA,IAAArY,EAAAJ,KAAAgiD,UAAAA,UAAA5B,IAAA5mC,EAAA6nD,QAAA,OAAAjhE,OACAwwG,EACA5wG,KAAAwB,QAAAq0D,eACA71D,KAAA41D,gBAAAx1D,EAEAJ,KAAA41D,gBAAAx3C,KAAAhe,GAEAJ,KAAAwB,QAAAq0D,eACA71D,KAAA41D,gBAAA,KAEA51D,KAAA41D,gBAAAj4D,EAAAqC,KAAA41D,iBAAAtpB,OAAA,SAAAwY,GACA,OAAAA,EAAAxX,WAAAxwC,KAAAsD,EAAAktC,WAAAxwC,KAGAkD,KAAA7C,EAAA,yBAAAsb,KAAA,WAAA,MAAAzY,KAAA41D,iBAAA,IAAAj4D,EAAAC,KAAAoC,KAAA41D,mBAEAs8C,uBAAA,WACAlyG,KAAAwB,QAAAwjB,QAAAmtF,kBAAAx0G,EAAAgC,KAAA,SAAAitG,GACA,IAAApxG,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnvE,SAAAstE,EACA8B,aAAA1uG,KAAAs/B,SAAAtf,OACAspC,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAC,aACAq2B,gBAAA,EACAu8C,SAAA,6CACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GAAA,IAAAq8C,EAAAryG,KACAA,KAAAs/B,SAAAgzE,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACA,WACAu1G,EAAAtmE,YAEA/rC,SAEAA,QAEAuyG,mBAAA,WAAA,IAAAC,EAAAxyG,KACA7C,EAAA,uCAAAZ,SACA,IAAAiF,EAAA,CACA23D,OAAA,SAAAs5C,EAAAryG,GACAoyG,EAAAlzE,SAAAgzE,qBAAAG,EAAA,WACAD,EAAAzmE,YAGA+iE,gBAAAnxG,EAAAshB,IAAAjf,KAAAs/B,SAAAtf,OAAA,SAAA6E,GACA,OAAAA,EAAA/nB,MAIAtB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAg8C,2BACAlxG,EAAA8zC,YAAA,EACA9zC,EAAA+zC,aAAA,KACA/zC,EAAAmxG,qBAAA,EACAnxG,EAAAoxG,oBAAA,GAGA,IAAAp3G,IAAAkG,MAAAg/B,SAAAmyE,6BAAArxG,IAEAsxG,YAAA,WACA,IAAAt3G,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnlD,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAo2B,gBAAA,EACA7wC,QAAAhlB,KAAAwB,QAAAwjB,QACAotF,SAAA,yCACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GAAA,IAAA+8C,EAAA/yG,KACAA,KAAAs/B,SAAAgzE,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACA,WACAi2G,EAAAhnE,YAEA/rC,SAGAgzG,eAAA,aAGAC,eAAA,WACA,IAAAz3G,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnlD,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MACAk2B,gBAAA,EACA64C,aAAA1uG,KAAAs/B,SAAAtf,OACAoyF,SAAA,6CACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GAAA,IAAAk9C,EAAAlzG,KACAA,KAAAs/B,SAAAgzE,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACA,WACAo2G,EAAAnnE,YAEA/rC,SAGAmzG,kBAAA,WACA,IAAA33G,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA,IAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CACAl1C,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,GACA8c,QAAApe,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA08C,8BAAA53G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA08C,8BAAA,UAIAC,eAAA,WACA,IAAA73G,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA,IAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CACAl1C,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,QAIA6zC,KAAA,WACA,IAAA93B,EAAAlb,EAAAgC,KAAA,WACAK,KAAAwB,QAAA23D,OAAAn5D,KAAA41D,iBACA51D,KAAA64C,eACA74C,MAEAA,KAAAwB,QAAAotG,gBACA,IAAApzG,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA9D,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,IAEA,CACAqC,SAAA,cAEAiB,KAAA,CACAk8F,WAAAt8F,KAAAwB,QAAAq0D,eAAA,CAAA71D,KAAA41D,iBAAAj4D,EAAAshB,IAAAjf,KAAA41D,gBAAA,SAAAA,GACA,OAAAA,EAAA11C,IAAA,eAEAozF,kBAAA,GACAC,gBAAA,MAEA9zG,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,EAAAA,EAAA7B,QAAA7B,OACA,IAAAlB,IAAAkG,MAAAg/B,SAAA8yE,0BAAA,CACApzG,KAAAA,EAAA7B,QACAk1G,WAAA91G,EAAAgC,KAAA,WAEAhC,EAAAuhB,KAAA9e,EAAA7B,QAAAZ,EAAAgC,KAAA,SAAAklB,GACA7kB,KAAAwB,QAAAq0D,gBAAAhxC,EAAAw0E,YAAAr5F,KAAA41D,gBAAA11C,IAAA,aACAlgB,KAAA41D,gBAAA,KACA51D,KAAAwB,QAAAq0D,iBACA71D,KAAA41D,gBAAAj4D,EAAA2uC,OAAAtsC,KAAA41D,gBAAAj4D,EAAAgC,KAAA,SAAAi2D,GACA,OAAAA,EAAA11C,IAAA,eAAA2E,EAAAw0E,WACAr5F,SAEAA,OAEA6Y,KACA7Y,QAGA6Y,KAEA7Y,OAAAmsB,KAAA,cAGAtT,KAGAkhD,OAAA,WACA/5D,KAAAwB,QAAA03D,cAIA19D,IAAAkG,MAAA49B,SAAA6xE,uBAAA31G,IAAAkG,MAAA46C,WAAAC,UAAAt8C,OAAA,CACAinB,SAAA,CACAmsB,aAAA,CACArtB,OAAA,IAAAxqB,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCAEAiyE,eAAA,KACAC,0BAAA,GAEAx7D,OAAA,CACAgL,0BAAA,SACAi1D,2BAAA,eACAC,sCAAA,gBAEApxD,sBAAA,WACAviD,KAAAwB,QAAAwtG,iBACAhvG,KAAAgvG,eAAAhvG,KAAAwB,QAAAwtG,gBAEAhvG,KAAA4zG,aAAA,IAAAp4G,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,oBACA8kD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACA,IAIAu0G,EAGAC,EAPAC,EAAAz0G,EAAA,gBACA00G,EAAA10G,EAAA,iBAEAU,KAAAgvG,eAAA,GACA,EAAArxG,EAAAC,KAAAm2G,MACAF,EAAA7zG,KAAAgvG,gBAAA5wF,KAAAS,MAAAg1F,EAAAhkE,mBAAAkkE,IAEA,EAAAp2G,EAAAC,KAAAo2G,KACAF,EAAA9zG,KAAAgvG,gBAAA5wF,KAAAS,MAAAi1F,EAAAjkE,mBAAAmkE,IAGAh0G,KAAAi0G,oBAAA30G,EAAA,cAEAU,KAAAssC,UACAtsC,MACA0lF,WAAA,EACA/wB,YAAA,EACAgyC,WAAA3mG,KAAAwB,QAAAytG,yBACAltD,aAAA/hD,KAAAgvG,eACA3hC,iBAAA,gBAGA3oB,cAAA,WACA,GAAA,IAAA/mD,EAAAC,KAAAoC,KAAAgvG,iBAAA,IAAArxG,EAAAC,KAAAoC,KAAAi0G,sBAAA,IAAAt2G,EAAAC,KAAAoC,KAAAk0G,cACA,OAAAl0G,KAAAwB,QAAApB,KAGA,IAAA7B,EAAAyB,KAAAwB,QAAApB,KAgBA,OAfA,EAAAzC,EAAAC,KAAAoC,KAAAgvG,kBACAzwG,EAAAZ,EAAA2uC,OAAA/tC,EAAA,SAAA6hD,GACA,OAAAziD,EAAA8yD,SAAAzwD,KAAAgvG,eAAA5uD,EAAA23C,SAAAj7F,GAAAgO,aACA9K,OAGA,EAAArC,EAAAC,KAAAoC,KAAAk0G,gBACA31G,EAAAZ,EAAA2uC,OAAA/tC,EAAA,SAAA6hD,GAEA,OADAziD,EAAA8yD,SAAAzwD,KAAAk0G,aAAA,IACA,IAAAv2G,EAAAC,KAAAwiD,EAAAge,OAAAp+C,SAEA,MAFAriB,EAAAka,KAAAuoC,EAAAge,OAAAp+C,OAAAriB,EAAAgC,KAAA,SAAA2e,GACA,OAAA3gB,EAAA8yD,SAAAzwD,KAAAk0G,aAAA51F,EAAAxhB,KACAkD,QACAA,OAGA,EAAArC,EAAAC,KAAAoC,KAAAi0G,qBACAt2G,EAAA2uC,OAAA/tC,EAAA,SAAA6hD,GACA,IAAA+zD,EAAA/zD,EAAAlgC,IAAA,UAIA,OAHA,IAAAviB,EAAAC,KAAAu2G,KACAA,EAAA,WAEA,EAAAx2G,EAAAC,KAAAu2G,IAAAx2G,EAAA8yD,SAAAzwD,KAAAi0G,oBAAAE,EAAAl/F,gBACAjV,MAEAzB,GAGA6yG,aAAA,WACA,IAAA51G,IAAAkG,MAAA0kG,YAAAgO,kBAAA,CACAjiC,eAAAnyE,KAAAk0G,aACAG,SAAA12G,EAAAgC,KAAA,SAAAy+D,GACAp+D,KAAAs0G,mBAAAl2C,GACAp+D,KAAAssC,UACAtsC,SAGAs0G,mBAAA,SAAAl2C,GACAp+D,KAAAk0G,aAAA91C,EAEA,IAAAm2C,EAAA52G,EAAAC,KAAAwgE,GACAp+D,KAAA7C,EAAA,uBAAAg/D,MAAA,EAAAo4C,EAAAA,EAAAzpG,WAAA,OAAA,YAEA+6C,YAAA,WACA7lD,KAAA7C,EAAA,iCAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAAoC,KAAA7C,EAAA,0BAAAyE,QAAA,IAAAjE,EAAAC,KAAAoC,KAAAgvG,iBAAA,IAAArxG,EAAAC,KAAAoC,KAAAi0G,sBAAA,IAAAt2G,EAAAC,KAAAoC,KAAAk0G,gBAEA9oD,aAAA,WACAprD,KAAAgvG,eAAA,KACAhvG,KAAAi0G,oBAAA,KACAj0G,KAAAs0G,mBAAA,MACAt0G,KAAA4zG,aAAAY,cACAx0G,KAAA7C,EAAA,0BAAAyE,IAAA,IACA5B,KAAAssC,YAIA9wC,IAAAkG,MAAA49B,SAAAq2B,oBAAAn6D,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBACAsW,aAAA,CACAohE,aAAA,IAAAj5G,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCAEAuC,SAAA,KACAs2B,gBAAA,KACAk5C,gBAAA,KACAj5C,gBAAA,EACA6+C,wBAAA,EACAxiC,UAAA,KACAyiC,MAAAh3G,EAAAu4C,KACA+L,SAAAtkD,EAAAu4C,KACAkhB,SAAAz5D,EAAAu4C,KACAoT,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAG,gBACAq2B,YAAA,uBACAthC,YAAA,EACAqhC,WAAA,KACA0M,qBAAA,EACAoyC,mBAAA,KACAC,YAAA,EACAC,OAAAn3G,EAAAu4C,KACAi5D,kBAAA,EACAxX,gBAAA,KACA1jC,SAAA,EACAm7C,WAAA,EACAC,oBAAA,EACAE,eAAA,MAEA97D,OAAA,CACAshE,4BAAA,gBACAC,kCAAA,OACAC,qCAAA,iBAEAhhE,aAnCA,WAoCAj0C,KAAA41D,gBAAA51D,KAAAwB,QAAAo0D,gBAAA51D,KAAAwB,QAAAo0D,gBAAA51D,KAAAwB,QAAAq0D,eAAA,KAAA,GAEA71D,KAAAwB,QAAAq0D,gBAAA,MAAA71D,KAAA41D,iBAAA,UAAAp6D,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAA41D,mBACA51D,KAAA41D,gBAAA,CAAA51D,KAAA41D,kBAGA,MAAA51D,KAAAwB,QAAAs0D,aACA91D,KAAAwB,QAAAyyD,SAAAj0D,KAAAwB,QAAAs0D,aAGAvhB,YA9CA,WA+CA,GAAA,MAAAv0C,KAAAwB,QAAA0wE,WAAAlyE,KAAAwB,QAAAyyD,QACAj0D,KAAAwB,QAAA0wE,UAAA/1D,MAAArD,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAk1G,KAAAl1G,YACA,GAAAA,KAAAwB,QAAAyyD,QAAA,CACA,IAAAie,EAAA/0E,EAAA,iJACA6C,KAAAwB,QAAAkzG,wBACA10G,KAAAtC,IAAAgd,QAAA,eAAA7C,KAAA,SAAA/W,OAAAoxE,GACAA,EAAAp5D,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAk1G,KAAAl1G,QAEAA,KAAA6X,KAAA,iCAAA/W,OAAAoxE,GAIA,GAAAlyE,KAAAwB,QAAAqzG,WAAA,CACA,IAAAvlE,EAAAtvC,KACAsvC,EAAA6lE,kBAAA,IAAA35G,IAAAiyD,SAAAne,EAAAnyC,EAAA,wBAAA,CACAqxD,YAAA,WACAZ,MAAA,4BACAC,YAAA,4BACAinD,OAAAn3G,EAAAgC,KAAA,WAEA,IAAAy1G,EAAA,GACA9lE,EAAAnyC,EAAA,6BAAA+hB,KAAA,SAAA0L,EAAAlC,GACA,IAAAtoB,EAAAjD,EAAAurB,GAAAtoB,KAAA,aACAg1G,EAAAh3F,KAAAhe,KAEAkvC,EAAA9tC,QAAAszG,OAAAM,IACAp1G,QAIAA,KAAAq1G,yBAEAC,cAAA,SAAAj4G,GACA,IAAAP,EAAAK,EAAAE,EAAAmc,QAAAkB,QAAA,6BAAAta,KAAA,aACAykB,EAAAlnB,EAAAka,KAAA7X,KAAA41D,gBAAA,SAAA/wC,GACA,OAAAA,EAAA/nB,KAAAA,IAEA,mBAAAkD,KAAAwB,QAAA+zG,iBACAv1G,KAAAwB,QAAA+zG,gBAAA1wF,IAGA2wF,cAAA,SAAAn4G,GACA,IAAAixD,EAAAnxD,EAAAE,EAAAmc,QAAAkB,QAAA,6BAAAta,KAAA,OACA,GAAAJ,KAAAwB,QAAAq0D,eACA71D,KAAAwB,QAAA41D,SAAAp3D,KAAA41D,gBAAA,MACA51D,KAAAwB,QAAAygD,SAAA,MACAjiD,KAAA41D,gBAAA,SACA,CACA,IAAA6/C,EAAA93G,EAAAka,KAAA7X,KAAA41D,gBAAA,SAAA/wC,GACA,OAAAA,EAAAypC,MAAAA,IAEA,MAAAmnD,IACAz1G,KAAA41D,gBAAAj4D,EAAA2uC,OAAAtsC,KAAA41D,gBAAA,SAAA/wC,GACA,OAAAA,EAAAypC,MAAAA,IAEAtuD,KAAAwB,QAAA41D,SAAAq+C,EAAAz1G,KAAA41D,iBACA51D,KAAAwB,QAAAygD,SAAAjiD,KAAA41D,kBAGA51D,KAAAq1G,yBAEAH,KAAA,WAAA,IAAAQ,EAAA11G,KACAA,KAAAmtD,SAAA,IAAA3xD,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnvE,SAAAt/B,KAAAwB,QAAA89B,SACA8vE,UAAApvG,KAAAwB,QAAA4tG,UACAC,mBAAArvG,KAAAwB,QAAA6tG,mBACAX,aAAA1uG,KAAAwB,QAAAm0G,eAAA,KAAA31G,KAAA41D,gBACAk5C,gBAAA9uG,KAAAwB,QAAAstG,gBACAxlD,QAAAtpD,KAAAwB,QAAA8nD,QACA6lD,iBAAAnvG,KAAAwB,QAAA2tG,iBACAJ,YAAA/uG,KAAAwB,QAAAghE,oBACA3M,eAAA71D,KAAAwB,QAAAq0D,eACA05C,eAAAvvG,KAAAwB,QAAA+tG,eACAp2C,OAAA,SAAA83C,GACA,IAAA2E,EAAAF,EAAAl0G,QAAAm0G,iBAAAD,EAAAl0G,QAAAq0D,gBACA+/C,EAAAF,EAAA9/C,iBAAAx3C,KAAAS,MAAA+2F,EAAA/lE,mBAAAohE,IAEAyE,EAAA9/C,gBAAA8/C,EAAAl0G,QAAAq0D,eAAAo7C,EAAAtzG,EAAA4hE,MAAAm2C,EAAA9/C,gBAAAq7C,GAEAyE,EAAAL,wBACAK,EAAAl0G,QAAAmzG,MAAA1D,EAAAyE,EAAA9/C,iBACA8/C,EAAAl0G,QAAAygD,SAAAyzD,EAAA9/C,qBAIAy/C,sBAAA,WACA,IAMAQ,EACAC,EAPA11G,EAAAJ,KAAA41D,iBACA51D,KAAA41D,iBAAA51D,KAAAwB,QAAAq0D,iBACAz1D,EAAA,CAAAJ,KAAA41D,kBAEA,IAAAj4D,EAAAC,KAAAwC,IACAJ,KAAA7C,EAAA,wBAAAsE,KAAA,wDAAAzB,KAAAwB,QAAAu0D,YAAA,WAIA+/C,EADA,mBAAA91G,KAAAwB,QAAAozG,mBACA50G,KAAAwB,QAAAozG,mBAAAx0G,GAEAJ,KAAAwB,QAAAozG,mBAAA50G,KAAAwB,QAAAozG,mBAAA,GAGA50G,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAohE,aAAAz0G,KAAA7C,EAAA,wBACA,CACA6iB,OAAA5f,EACAw0G,mBAAAkB,EACAjgD,eAAA71D,KAAAwB,QAAAq0D,eACAkgD,qBAAA/1G,KAAAwB,QAAAu0G,qBACAC,QAAA,QAAAH,EAAA71G,KAAAwB,QAAAm2F,uBAAA,IAAAke,EAAAA,EAAA71G,KAAAwB,QAAAyyD,QACAA,QAAAj0D,KAAAwB,QAAAyyD,YAIAmE,SAAA,WACA,OAAA,EAAAz6D,EAAAC,KAAAoC,KAAA41D,mBAGA51D,KAAA7C,EAAA,wBAAAsE,KAAA,gEACA,MAKAjG,IAAAkG,MAAA49B,SAAA22E,mBAAAz6G,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAY,YAAA,wBACA8Y,SAAA,QACA6/D,OAAA,GACAC,SAAA,KACAC,uBAAA,GAEA3iE,OAAA,CACA4iE,4BAAA,qBACAC,oBAAA,qBAEA/hE,YAAA,WACA,IAAA/4C,IAAAomD,OAAAC,aAAA,CACAwrB,iBAAA,gBACA54B,GAAAz0C,KAAA7C,EAAA,kBACA8kD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAA,GAAA,UAAAA,EAAAsD,cACA5C,KAAA7C,EAAA,iBAAA6c,YAAA,UAEAha,KAAA7C,EAAA,iBAAA+c,SAAA,UAEAla,KAAAu2G,UAAAj3G,IACAU,QAGAA,KAAAwB,QAAA40G,uBACAp2G,KAAA7C,EAAA,wBAAA6c,YAAA,WAEAw8F,mBAAA,SAAAn5G,GACA2C,KAAAu2G,UAAAp5G,EAAAE,EAAAgc,eAAAzX,QAEA20G,UAAA,SAAAL,GACAl2G,KAAAwB,QAAA00G,OAAAA,EACAl2G,KAAA7C,EAAA,eAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAAoC,KAAAwB,QAAA00G,UAEAO,kBAAA,WACA,IAAAj7G,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAA63F,WAEA,CACAl6F,SAAA,YAGAiB,KAAA,CACAyrB,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAA,KACAo5G,OAAAl2G,KAAAwB,QAAA00G,OACAQ,kBAAA12G,KAAA7C,EAAA,8BAAAsb,KAAA,cAEAhZ,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACA,mBAAAJ,KAAAwB,QAAA20G,UACAn2G,KAAAwB,QAAA20G,SAAAn2G,KAAA7C,EAAA,8BAAAsb,KAAA,YAGAzY,KAAA64C,cAEAr9C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,mCAEA/rB,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAA64C,cAEAr9C,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,6BAGA,IAAAvwB,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAoqF,eAAA,CACAriG,MAAA8X,EACAxhB,OAAAA,KAEA5K,UgBt1HAxE,IAAAwkB,OAAAsf,SAAAs3E,oBAAAp7G,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAinB,SAAA,CACA3F,WAAA,GAEAsrB,YAAA,wBACA1tC,SAAA,SAAAgwC,GACA,IAAAo/B,EAAA,GAqBA,OApBA,MAAAp/B,IACAA,EAAA0nE,UACAtoC,EAAAnwD,KAAA,CACA7e,UAAA,YACAD,OAAA,IAEA6vC,EAAA2nE,MACAvoC,EAAAnwD,KAAA,CACA7e,UAAA,OACAD,OAAA,IAIA6vC,EAAA4nE,cACAxoC,EAAAnwD,KAAA,CACA7e,UAAA,eACAD,OAAA,KAIA9D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,UACAG,MAAAU,KAAAlD,KAEAyxE,IAEAliE,MAAA,SAAAkiC,GAEA,OADAvuC,KAAA8+C,QAAA,IAAAtjD,IAAAk3C,YAAApT,SAAA03E,2BAAAzoE,EAAAA,EAAAuQ,QAAA,MACAvQ,KAIA/yC,IAAAk3C,YAAApT,SAAA23E,qBAAAz7G,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAAs3E,oBACAz3G,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,gBAMA3D,IAAAwkB,OAAAsf,SAAA43E,0BAAA17G,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,QACAxgC,MAAA,SAAAkiC,GAIA,OAHAA,GAAA,MAAAA,EAAAs0B,cACA7iE,KAAA6iE,YAAA,IAAArnE,IAAAwkB,OAAA6f,aAAA0zB,YAAAhlB,EAAAs0B,cAEAt0B,KAIA/yC,IAAAk3C,YAAApT,SAAA03E,2BAAAx7G,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAsf,SAAA43E,4BAGA17G,IAAAkG,MAAA49B,SAAA63E,oBAAA37G,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBACAsZ,SAAA,MACAC,SAAA,MACA8gE,cAAA,MAEA3jE,OAAA,CACA4jE,6BAAA,iBACAhlC,oBAAA,SACAilC,oBAAA,UAEAtjE,WAAA,WACA,MAAA,CACAojE,cAAAp3G,KAAAwB,QAAA41G,gBAGA7iE,YAAA,WACA,MAAAv0C,KAAA0tD,YACA1tD,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAApT,SAAA23E,qBACAj3G,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAu3G,YACAv3G,SAGAA,KAAAu3G,YAGAA,SAAA,WACA,MAAAv3G,KAAAwB,QAAA41G,cACAp3G,KAAAw3G,mBAEAx3G,KAAAy3G,4BAGAA,yBAAA,WACA,IAAA9/F,EAAA3X,KAAA7C,EAAA,8BACA,IAAA3B,IAAAkG,MAAA49B,SAAAo4E,4BAAA,CACAjjE,GAAA98B,EACA+1C,WAAA1tD,KAAA0tD,WACAiqD,yBAAAh6G,EAAAgC,KAAA,SAAAqE,GACAA,EAAA6nC,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAgY,EAAAq9B,QACA,IAAAx5C,IAAAigE,OAAA9jD,GACA3X,KAAAwB,QAAA41G,cAAApzG,EACAhE,KAAA+rC,UACA/rC,SAEAA,SAGAw3G,iBAAA,WACA,IAAA7/F,EAAA3X,KAAA7C,EAAA,8BACA6C,KAAA0rF,OAAA,IAAAlwF,IAAAkG,MAAA49B,SAAAs4E,yBAAA,CACAnjE,GAAA98B,EACA42B,MAAAvuC,KAAAwB,QAAA41G,cACAS,OAAAl6G,EAAAgC,KAAA,WACAK,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAwB,QAAA41G,cAAA,KACAp3G,KAAA+rC,UACA/rC,SAEAA,MACAk5D,SAAAv7D,EAAAgC,KAAA,WACAK,KAAAy3G,4BACAz3G,SAGA83G,eAAA,WACAt8G,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,WAEA,CACAA,SAAA,gBAIA44G,OAAA,WACA/3G,KAAA0rF,OAAAqsB,UAEAh+C,OAAA,WACA/5D,KAAAwB,QAAA41G,cAAA,KACAp3G,KAAA+rC,YAIAvwC,IAAAkG,MAAA49B,SAAAo4E,4BAAAl8G,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCAEA0W,OAAA,CACAukE,oCAAA,mBACAC,sCAAA,sBAEAhkE,aAAA,WACAj0C,KAAAg0C,WAAA,CACA0Z,WAAA1tD,KAAA0tD,aAGAnZ,YAAA,WACAv0C,KAAAk4G,gBACAl4G,KAAAy6E,sBAEAy9B,cAAA,WACAv6G,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACAA,EAAAnB,IAAA,oBAAA5xC,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAisC,EAAAruB,IAAA,eAAA1kB,IAAAC,QAAAwH,YAAAE,YAAAqB,cAGAxE,KAAAm4G,iBAAA,IAAA38G,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAAz0C,KAAA7C,EAAA,sCACAiD,KAAAJ,KAAA0tD,WAAA1tC,OACAi/B,SAAA,CACA6N,YAAA,gDAEAlQ,cAAA,EACAkC,QAAA,CACA,CAAA1+C,KAAA,sBAAAmB,MAAA,aACA,CAAAnB,KAAA,wBAAAmB,MAAA,eACA,CAAAnB,KAAA,+BAAAmB,MAAA,eACA,CACAA,MAAA,GACAitB,MAAA,OACAmsC,WAAA,EACAC,YAAA,EACA7uB,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,IAAAjrB,EAAAirB,EAAAlgC,IAAA,UACA,OAAA,IAAAiV,EACA,uEACA,IAAAA,EACA,qEAEA,2QAKA8nB,iBAAAt/C,EAAAgC,KAAA,SAAAygD,GACA,IAAAg4D,EAAAh4D,EAAAhgD,OACA,IAAAg4G,EAAAl4F,IAAA,WACAlgB,KAAAwB,QAAAm2G,yBAAAS,IAEAp4G,SAGAy6E,mBAAA,WACAz6E,KAAAw6E,aAAA,IAAAh/E,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAAz0C,KAAA7C,EAAA,gCACAgC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,aAGAk5G,oBAAA,EACAnhD,UAAAv5D,EAAAgC,KAAA,WACAK,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAk4G,iBACAl4G,SAEAA,SAGAs4G,iBAAA,SAAAj7G,GACA,IAAA+iD,EAAApgD,KAAAm4G,iBAAAj3D,OAAA/jD,EAAAE,EAAAgc,eAAAgoD,QAAA,OACArhE,KAAAwB,QAAAm2G,yBAAAv3D,EAAAhgD,SAEAm4G,mBAAA,SAAAl7G,GACA,IAAA+iD,EAAApgD,KAAAm4G,iBAAAj3D,OAAA/jD,EAAAE,EAAAgc,eAAAgoD,QAAA,OACAr9D,EAAAo8C,EAAAhgD,OAEA4D,EAAAm/C,UACAnjD,KAAA0tD,WAAAnxD,OAAAyH,GACAo8C,EAAA7jD,SACAyD,KAAAm4G,iBAAA/1D,aAIA5mD,IAAAkG,MAAA49B,SAAAs4E,yBAAAp8G,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iCAEA0W,OAAA,CACA+kE,wBAAA,YACAC,0CAAA,YACAC,yBAAA,aACAC,6BAAA,gBACAC,oBAAA,mBACAC,qBAAA,cACAC,mBAAA,kBACAC,4BAAA,oBACAC,8BAAA,sBACAC,qBAAA,oBACAC,2BAAA,mBACAC,6BAAA,2BACAC,gCAAA,wBAEA7kE,YAAA,WACA/4C,IAAAiC,IAAA0jB,QAAAgsD,gBAAA,KAAAxvE,EAAAgC,KAAA,SAAAy+D,GACAp+D,KAAAo+D,OAAAA,EAEAzgE,EAAAuhB,KAAAlf,KAAAuuC,MAAAruB,IAAA,QAAAviB,EAAAgC,KAAA,SAAAygD,GACAziD,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,GAAA5kG,EAAAgC,KAAA,SAAAo4F,IACA,EAAAp6F,EAAAC,KAAAwiD,EAAAO,WAAAm3C,aAAAC,EAAA73E,IAAA,QAAAtd,gBAAAw9C,EAAAO,WAAAm3C,WAAAl1F,cAAAI,QACA+0F,EAAA73E,IAAA,gBAAA3d,SAAA69C,EAAAO,WAAAm3C,eACA13C,EAAAO,WAAAm3C,WAAAC,EAAA73E,IAAA,gBACAlgB,QACAA,OAEAA,KAAAq5G,0BACAr5G,OAEAA,KAAAtC,IAAAgd,QAAA,UAAA7C,KAAA,iBAAAiB,GAAA,SAAAnb,EAAAgC,KAAAK,KAAAs5G,uBAAAt5G,QAEAu5G,UAAA,SAAAl8G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA+mC,EAAApgD,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACA1a,KAAAgiD,UAAA6I,UAAAzK,GACApgD,KAAAuuC,MAAAnB,IAAA,OAAAzvC,EAAA2uC,OAAAtsC,KAAAuuC,MAAAruB,IAAA,QAAA,SAAAs5F,GACA,OAAAA,EAAAj2G,QAAA68C,EAAAhgD,OAAAmD,UAGAgS,YAAA,SAAAlY,GACA,OAAA7B,IAAAC,QAAAgc,aAAAlC,YAAAlY,IAEAo8G,iBAAA,SAAAp8G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAJ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAArgD,GAAAiZ,EAAA3X,OAEA83G,gBAAA,SAAAr8G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAggD,EAAApgD,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAi/F,EAAAp3G,SAAAgX,EAAA3X,OACAw+C,EAAAhgD,OAAAugD,WAAArgD,GAAA0K,MAAA2uG,GAAA,EAAAA,GAEAC,kBAAA,SAAAv8G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAJ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAArgD,GAAAiZ,EAAA3X,OAEAi4G,oBAAA,SAAAx8G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAyxD,EAAAt4C,EAAAmB,QAAA,MACA0lC,EAAApgD,KAAAgiD,UAAAd,OAAA2Q,GACAj4C,EAAAL,EAAA3X,MAEA,GAAAgY,IAAAwmC,EAAAhgD,OAAAugD,WAAArgD,GAAA,CACA,IAAAgqG,EAAAz4C,EAAAh6C,KAAA,gBACAiiG,EAAA95G,KAAA+5G,gBAAAngG,EAAA0wF,EAAA1oG,OACA0oG,EAAAt1D,QACAs1D,EAAAxpG,OAAAg5G,GAEAt+G,IAAAC,QAAAgc,aAAAwD,aAAA42C,EAAAh6C,KAAA,cAAA+B,GAGAwmC,EAAAhgD,OAAAugD,WAAArgD,GAAAsZ,GAEAogG,mBAAA,SAAAC,GACA,IAAAz4G,EAAA,yCAMA,OAJA7D,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA62E,UAAAuK,gBAAA,GAAA5kG,EAAAgC,KAAA,SAAAo4F,GACAv2F,GAAA,YAAAy4G,IAAAliB,EAAA73E,IAAA,cAAA,WAAA,IAAA,WAAA63E,EAAA73E,IAAA,cAAA,KAAA63E,EAAA73E,IAAA,QAAA,aACAlgB,OAEAwB,GAEA04G,qBAAA,SAAA78G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACArZ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAA,WAAApnC,EAAA3X,OAEAm4G,gBAAA,SAAAngG,EAAAugG,GACA,IAAA34G,EAAA,yCAKA,OAJA7D,EAAAuhB,KAAA1jB,IAAA+Q,UAAA0jB,OAAA,IAAAtyB,EAAAC,KAAAgc,GAAA,KAAAA,EAAAhX,eAAA,SAAAm/D,GACA,IAAAq4C,EAAAr4C,EAAAllD,aAAAja,cACApB,GAAA,YAAA24G,IAAAC,GAAAD,IAAAp4C,EAAAhlE,KAAA6F,cAAA,WAAA,IAAA,WAAAw3G,EAAA,KAAAr4C,EAAAllD,aAAA5H,cAAA,cAEAzT,GAEA64G,kBAAA,SAAAh9G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAJ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAArgD,GAAA9E,IAAAC,QAAAkZ,cAAAY,YAAAgE,EAAA3X,QAEA04G,iBAAA,SAAAj9G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAJ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAArgD,GAAA,SAAAiZ,EAAA3X,OAEA24G,yBAAA,SAAAl9G,GACA,IAAAkc,EAAApc,EAAAE,EAAAgc,eACA/Y,EAAAiZ,EAAAnZ,KAAA,UACAJ,KAAAgiD,UAAAd,OAAA3nC,EAAAmB,QAAA,OACAta,OAAAugD,WAAArgD,GAAAiZ,EAAA3X,OAEAqyC,aAAA,WACAj0C,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAisE,eAAA,SAAA57D,GACA,IAAApwB,EAAA,KACA,OAAAowB,EAAA1+B,IAAA,aAAAtd,eACA,IAAA,cACA,IAAA,cACA4rB,EAAA,QACA,MACA,IAAA,QACAA,EAAA,QACA,MACA,IAAA,QACAA,EAAA,QACA,MACA,IAAA,WACA,IAAA,WACAA,EAAA,QACA,MACA,IAAA,QACAA,EAAA,QACA,MACA,IAAA,SACAA,EAAA,QAIA,GAAA,MAAAA,EACA,OAAAowB,EAAA1+B,IAAA,QAAAtd,eACA,IAAA,SACA4rB,EAAA,OACA,MACA,IAAA,MACAA,EAAA,OACA,MACA,IAAA,OACAA,EAAA,OACA,MACA,IAAA,QAGA,IAAA,OACAA,EAAA,QACA,MACA,IAAA,UACA,IAAA,SACA,IAAA,YACAA,EAAA,OACA,MACA,IAAA,QACA,IAAA,UACA,IAAA,MACAA,EAAA,OACA,MACA,IAAA,WACAA,EAAA,OAIA,OAAAA,GAEA6qF,uBAAA,WACAr5G,KAAAy6G,gBAAA,GACA,IAAA37D,EAAA,GACA47D,GAAA,EACA/8G,EAAAuhB,KAAAlf,KAAAuuC,MAAAuQ,QAAA9+B,OAAA,SAAA4+B,GACA,IAAA+7D,EAAAn/G,IAAAC,QAAAqW,cAAAgN,uBAAA8/B,EAAA1+B,IAAA,cACA4+B,EAAA1gC,KAAA,CACAhe,KAAA,cAAAu6G,EACAp5G,MAAAq9C,EAAA1+B,IAAA,QACAsO,MAAAxuB,KAAAw6G,eAAA57D,GACA7S,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,GAAA,SAAAr/C,GAAA,SAAAA,EACA,OAAAX,EAEA,IAAA8J,EACA4P,GAAA,EACA,OAAA8kC,EAAA1+B,IAAA,QAAAtd,eACA,IAAA,SACA,GAAA,MAAAg8C,EAAAikB,YAAA,CACA,IAAArhE,EAAA,qCACA7D,EAAAuhB,KAAA0/B,EAAAikB,YAAArQ,QAAAxyC,OAAA,SAAA8yC,GACA,IAAA+gB,EAEAA,EADA,UAAAr4E,IAAAC,QAAAqW,cAAAC,YAAA3R,GACAA,IAAA,IAAAA,EAAA4B,QAAA8wD,EAAAh2D,IAEAsD,IAAA0yD,EAAAh2D,GAEA0E,GAAA,YAAAqyE,EAAA,WAAA,IAAA,WAAA/gB,EAAAh2D,GAAA,KAAAg2D,EAAA5yC,IAAA,cAAA,cAGAhW,EAAA,6EAAAywG,EAAA,mDAAA/7D,EAAAikB,YAAA3iD,IAAA,oBAAA,wBAAA,IAAA,KACAhW,GAAA1I,EACA0I,GAAA,YACAA,GAAA,SAEA,MACA,IAAA,OACAA,EAAA,wDAAAywG,EAAA,KACAzwG,GAAA,yCACAA,GAAA,0BAAA,IAAA9J,EAAA,WAAA,IAAA,gBACA8J,GAAA,2BAAA,IAAA9J,EAAA,WAAA,IAAA,gBACA8J,GAAA,YACA,MACA,IAAA,QACA,IAAAiwG,EAAA,MAAA/5G,EAAAA,EAAAwC,cAAA,GACAsH,EAAA,wDACAA,GAAAlK,KAAA+5G,gBAAA35D,EAAAO,WAAA/mC,QAAAugG,GACAjwG,GAAA,YACA,MACA,IAAA,WACAA,EAAA,4DACAA,GAAAlK,KAAAg6G,mBAAA55D,EAAAO,WAAAm3C,YACA5tF,GAAA,YACA,MACA,IAAA,MACA4P,IAAA,EAAAnc,EAAAC,KAAAwC,KAAA5E,IAAAC,QAAAuY,WAAAE,YAAA9T,IACA8J,EAAA,2BAAA9J,EAAA,8BAAAu6G,EAAA,8CAAA7gG,EAAA,GAAA,0BAAA,aAAA,MAAA1Z,EAAAA,EAAA,IAAA,KACA,MACA,IAAA,UACA,IAAAwZ,EAAA,MAAAxZ,EAAAA,EAAAwC,cAAA,GACAsH,EAAA,4BAAA9J,EAAA,qDAAAu6G,EAAA,yBAAA,OAAA/gG,EAAA,WAAA,IAAA,mCAAA,OAAAA,EAAA,WAAA,IAAA,yBACA,MACA,IAAA,MACA1P,EAAA,2BAAA9J,EAAA,gCAAAu6G,EAAA,4CAAA,MAAAv6G,EAAAA,EAAA,IAAA,KACA,MACA,IAAA,QACA0Z,GAAA,EACA,QAAA8kC,EAAA1+B,IAAA,aAAAtd,eAAA,UAAAg8C,EAAA1+B,IAAA,aAAAtd,gBACAkX,EAAA,EAAAnc,EAAAC,KAAAwiD,EAAAO,WAAA4nB,QAAA,EAAA5qE,EAAAC,KAAAwiD,EAAAO,WAAA8rD,KACAiO,EAAAA,IAAA5gG,GAEA5P,EAAA,uCAAA9J,EAAA,mBAAAu6G,EAAA,qCAAA7gG,EAAA,GAAA,0BAAA,aAAA,MAAA1Z,EAAAA,EAAA,IAAA,KACA,MACA,IAAA,SACA,IAAAw6G,EAAA56G,KAAA66G,oBAAAz6G,GACA06G,EAAA,EAAAn9G,EAAAC,KAAAg9G,EAAAG,WACA/6G,KAAAy6G,gBAAA98G,EAAA4hE,MAAAv/D,KAAAy6G,gBAAAG,EAAAG,WACA7wG,EAAA,wDAAA4wG,EAAA,yBAAA,IAAA,4CAAA16G,EAAA,0CAAAzC,EAAAC,KAAAg9G,EAAAI,SAAAlwG,WAAA,qBACAgwG,IACA5wG,GAAA,mDAAA9J,EAAA,UAEA8J,GAAA,SACA,MACA,IAAA,UACA,IAAA+wG,EAAA,MAAA76G,EAAAA,EAAA0N,MAAA,KAAA,GACA5D,EAAA,0CAAA9J,EAAA,2CAAAzC,EAAAC,KAAAq9G,GAAAnwG,WAAA,qBACA,MACA,IAAA,YACAZ,EAAA,kEAAAvM,EAAAC,KAAAwC,GAAA0K,WAAA,qBACA,MACA,IAAA,OACA,QACA,IAAAowG,EAAA96G,EAEA,GADA0Z,GAAA,EACA,QAAA8kC,EAAA1+B,IAAA,aAAAtd,eAAA,UAAAg8C,EAAA1+B,IAAA,aAAAtd,cAAA,CACA,GAAA,UAAAg8C,EAAA1+B,IAAA,aAAAtd,eAAA,MAAAs4G,IAAA,IAAAA,EAAAl5G,QAAA,OAAA,IAAAk5G,EAAAl5G,QAAA,KAAA,CAEAk5G,EADA,WACAz8G,KAAAy8G,GAAA,GAGAphG,EAAA,EAAAnc,EAAAC,KAAAs9G,IAAA,EAAAv9G,EAAAC,KAAAwiD,EAAAO,WAAA8rD,KACAiO,EAAAA,IAAA5gG,EAEA5P,EAAA,uCAAA9J,EAAA,mBAAAu6G,EAAA,oCAAA7gG,EAAA,GAAA,0BAAA,aAAA,MAAAohG,EAAAA,EAAA,IAAA,KAGA,OAAAhxG,GACAlK,SAEAA,MACA8+C,EAAA1gC,KAAA,CACA7c,MAAA,GACA45G,eAAA,sHACAxgD,WAAA,EACAC,YAAA,IAGAj9D,EAAAuhB,KAAAlf,KAAAuuC,MAAAruB,IAAA,QAAA,SAAAkgC,GACA,MAAAA,EAAAO,WAAAyd,SAAA,IAAAhe,EAAAO,WAAAyd,OAAAp8D,QAAA,OAAA,IAAAo+C,EAAAO,WAAAyd,OAAAp8D,QAAA,OACAo+C,EAAAO,WAAAyd,OAAAhe,EAAAO,WAAAyd,OAAA,OAIA,IAAA7U,EAAAvpD,KAAA7C,EAAA,qCACAmyC,EAAAtvC,KACAA,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAA8U,EACAhM,MAAA,QACA69D,WAAA,EACAx+D,cAAA,EACAx8C,KAAAJ,KAAAuuC,MAAAruB,IAAA,QACA4+B,QAAAA,EACAnC,gBAAA,EACAQ,YAAA,WACA3hD,IAAAC,QAAAgc,aAAAqD,eAAAyuC,EAAA1xC,KAAA,iBACA0xC,EAAA1xC,KAAA,0BAAAqH,KAAA,WACA,IAAA5e,EAAAnD,EAAA6C,MAAAI,KAAA,UACA,IAAA5E,IAAAomD,OAAAC,aAAA,CACApN,GAAAt3C,EAAA6C,MACA20D,YAAA,EACA1S,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAgwC,EAAA0S,UAAAd,OAAA/jD,EAAA6C,MAAAqhE,QAAA,OACAjhE,OAAAugD,WAAArgD,GAAAhB,GACAU,UAIAupD,EAAA1xC,KAAA,MAAAqH,KAAA,SAAA3b,GACA,IAAAq7C,EAAAtP,EAAAf,MAAAuQ,QAAA9+B,OAAAzc,GACA,MAAAq7C,GACAzhD,EAAA6C,MAAAnC,IAAA,YAAAyxC,EAAAkrE,eAAA57D,MAIA,IAAAy8D,EAAA,EAAA19G,EAAAC,KAAA0xC,EAAAmrE,iBACA,IAAAY,GAAAX,IAAA,MAAAprE,EAAAgsE,YAAA,CACA,IAAAvvF,EAAA,GAIA,GAHA2uF,IACA3uF,GAAA,mGAEAsvF,EAAA,CACA,EAAA19G,EAAAC,KAAAmuB,KACAA,GAAA,SAEA,IAAAwvF,EAAA//G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA8kD,aACAzvF,GAAA,mLAAAwvF,GAAA,UAAA,6DAGAjsE,EAAAgsE,YAAA,IAAA9/G,IAAAygE,MAAA3sB,EAAA5xC,IAAA,CACAqD,KAAA,UACAo7D,KAAApwC,EACAqwC,WAAA,QAMA,IAAAnkB,EAAAj4C,KAAAtC,IAAAgd,QAAA,kBAAA7C,KAAA,iBAEA,GADAogC,EAAApgC,KAAA,mBAAAtb,SACA,EAAAoB,EAAAC,KAAAoC,KAAAy6G,iBAAA,CACA,IAAAc,EAAA//G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA8kD,aACAt6C,EAAA/jE,EAAA,aAAA,CACA4D,KAAA,SACA4Z,MAAA,8BACAwhD,KAAA,QAAAo/C,GAAA,YAEAtjE,EAAAvL,QAAAw0B,GACAA,EAAApoD,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAy7G,UAAAz7G,SAGA07G,cAAA,SAAAr+G,GACA,IACA+C,EADAJ,KAAAgiD,UAAAd,OAAA/jD,EAAAE,EAAAgc,eAAAqB,QAAA,OACAta,OACAstD,EAAA,IAAAlyD,IAAAk3C,YAAAymD,UAAAC,iBAEAz7F,EAAAuhB,KAAAlf,KAAAuuC,MAAAruB,IAAA,aAAA,SAAAq7E,IACA,IAAAn7F,EAAAugD,WAAAw4C,UAAAn3F,QAAAu5F,EAAAE,aACA/tC,EAAA9a,IAAA,IAAA8a,EAAAnf,MAAAgtD,MAIA,IAAA//F,IAAAkG,MAAAy3F,UAAAwiB,iBAAA,CACAjuD,WAAAA,EACAyL,OAAAx7D,EAAAgC,KAAA,SAAAi8G,GACAx7G,EAAAugD,WAAAw4C,UAAAx7F,EAAAshB,IAAA28F,EAAA57F,OAAA,SAAAu7E,GACA,OAAAA,EAAAr7E,IAAA,gBAEAlgB,KAAAgiD,UAAAI,WACApiD,SAGA66G,oBAAA,SAAAz6G,GACA,IAAA2wE,EACAnmE,EAAA,CACAowG,QAAA,GACAD,UAAA,IAgCA,OA7BAhqC,EADA,IAAApzE,EAAAC,KAAAwC,GACA,IACA,IAAAA,EAAA4B,QAAA,KACA5B,EAAA0N,MAAA,MACA,IAAA1N,EAAA4B,QAAA,KACA5B,EAAA0N,MAAA,KAEA,CAAA1N,GAEAzC,EAAAuhB,KAAA6xD,EAAA,SAAA8qC,GACA,GAAA,MAAAA,GAAA,IAAAl+G,EAAAC,KAAAi+G,EAAA74G,QAAA,CAIA,IAAA84G,EAAAD,EAAAj5G,cAAAI,OACA,GAEA,MAFArF,EAAAka,KAAA7X,KAAAo+D,OAAAp+C,OAAA,SAAA1B,GACA,OAAAA,EAAA4B,IAAA,aAAAtd,gBAAAk5G,IAEAlxG,EAAAowG,QAAA58F,KAAAy9F,OACA,CACA,IAAAE,EAAAp+G,EAAAka,KAAA7X,KAAAg8G,SAAA,SAAA/8F,GACA,OAAA,MAAAA,EAAAX,OAAAW,EAAA48F,YAAAA,IAEA,MAAAE,EACAnxG,EAAAowG,QAAA58F,KAAA29F,EAAAz9F,MAAA4B,IAAA,eACA,IAAAtV,EAAAmwG,UAAA/4G,QAAA65G,IACAjxG,EAAAmwG,UAAA38F,KAAAy9F,MAGA77G,MACA4K,GAEAqxG,WAAA,SAAA5+G,GACA,IACA+C,EADAJ,KAAAgiD,UAAAd,OAAA/jD,EAAAE,EAAAgc,eAAAqB,QAAA,OACAta,OACA60E,EAAA,GACA2lC,EAAA56G,KAAA66G,oBAAAz6G,EAAAugD,WAAAyd,QACAzgE,EAAAuhB,KAAA07F,EAAAI,QAAA,SAAAa,GACA,IAAAv9F,EAAA3gB,EAAAka,KAAA7X,KAAAo+D,OAAAp+C,OAAA,SAAA1B,GACA,OAAAA,EAAA4B,IAAA,aAAAtd,gBAAAi5G,EAAA74G,OAAAJ,gBAEA,MAAA0b,GACA22D,EAAA72D,KAAAE,EAAAxhB,KAEAkD,MACA,IAAAxE,IAAAkG,MAAA08D,OAAA89C,kBAAA,CACAC,gBAAA,CACAlnC,iBAAAA,GAEA9b,OAAAx7D,EAAAgC,KAAA,SAAAy+D,GACAh+D,EAAAugD,WAAAyd,OAAAzgE,EAAAshB,IAAAm/C,EAAAyV,SAAA,SAAAv1D,GACA,OAAAA,EAAA4B,IAAA,eACAqC,KAAA,KACAviB,KAAAgiD,UAAAI,WACApiD,SAGAy7G,UAAA,WACA,IAAAjgH,IAAAkG,MAAA49B,SAAA88E,eAAA,CACAJ,SAAAh8G,KAAAg8G,SACAjrC,WAAA/wE,KAAAy6G,gBACAthD,OAAAx7D,EAAAgC,KAAA,SAAAsf,GACAjf,KAAAg8G,SAAA/8F,EACAjf,KAAA+rC,UACA/rC,SAGAq8G,YAAA,aAGAC,eAAA,WACA,OAAA,IAAAt8G,KAAAtC,IAAAgd,QAAA,UAAA7C,KAAA,iBAAAY,KAAA,YAEA6gG,uBAAA,WACA,IAAAiD,EAAAv8G,KAAAtC,IAAAgd,QAAA,UAAA7C,KAAA,wBACA7X,KAAAs8G,iBACAC,EAAAviG,YAAA,UAEAuiG,EAAAriG,SAAA,WAGA69F,OAAA,SAAAyE,GACA,IAAA7rE,EAAAhzC,EAAAgC,KAAA,WACA,IAAAuhE,EAAAlhE,KAAAtC,IAAAgd,QAAA,UAAA7C,KAAA,2BACA,IAAArc,IAAAigE,OAAAz7D,KAAAgiD,UAAAtkD,KACAwjE,EAAAzoD,KAAA,YAAA,GAEA,MAAAzY,KAAAg8G,UACAr+G,EAAAuhB,KAAAlf,KAAAuuC,MAAAruB,IAAA,QAAA,SAAAkgC,GACA,IAAAw6D,EAAA56G,KAAA66G,oBAAAz6D,EAAAO,WAAAyd,QACAq+C,EAAA,GACA9+G,EAAAuhB,KAAA07F,EAAAI,QAAA,SAAA0B,IACA,IAAAD,EAAAz6G,QAAA06G,IACAD,EAAAr+F,KAAAs+F,KAIA/+G,EAAAuhB,KAAA07F,EAAAG,UAAA,SAAA2B,IACA,IAAAD,EAAAz6G,QAAA06G,IACAD,EAAAr+F,KAAAs+F,KAGA,EAAA/+G,EAAAC,KAAA6+G,KACAr8D,EAAAO,WAAAyd,OAAAq+C,EAAAl6F,KAAA,OAEAviB,MAGA,IAAA62G,EAAA72G,KAAAs8G,iBACAt8G,KAAAuuC,MAAAoC,KAAA,CACAkmE,UAAAA,EACA8F,UAAA9F,GAAA72G,KAAAtC,IAAAgd,QAAA,UAAA7C,KAAA,kBAAAY,KAAA,WACAyxC,KAAAlqD,KAAAuuC,MAAAruB,IAAA,SACA,CACAmvB,QAAA,IACAF,WAAAxxC,EAAAsC,OAAAu8G,EAAA,CACAzF,aAAA/2G,KAAA7C,EAAA,qBAAAsb,KAAA,aAEA+2B,QAAA,EACA96B,QAAA/W,EAAAgC,KAAA,SAAA4uC,EAAAnuC,GACA5E,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,8CAEA,mBAAA/rB,KAAAwB,QAAAq2G,QACA73G,KAAAwB,QAAAq2G,UAEA73G,SAEAA,MACA,GAAA,MAAAw8G,GAAAA,EAAA3F,UAmBAlmE,QAnBA,CACA,IAAAisE,EAAA,EACAj/G,EAAAuhB,KAAAlf,KAAAuuC,MAAAruB,IAAA,QAAA,SAAA2E,GACA,IAAAlnB,EAAAC,KAAAinB,EAAA87B,WAAA4nB,QAAA,IAAA5qE,EAAAC,KAAAinB,EAAA87B,WAAA8rD,MACAmQ,MAGA,EAAAA,EACA,IAAAphH,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,sBACAovB,KAAA,sGACA49B,MAAAr1E,EAAAgC,KAAA,WACAgxC,KACA3wC,QAGA2wC,QAQAn1C,IAAAkG,MAAA49B,SAAAu9E,oBAAArhH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yCACA+/E,OAAA,KACAC,YAAA,MAEAtpE,OAAA,CACAupE,uBAAA,YACAC,kBAAA,OACA3F,oBAAA,UAEAT,UAAA,WACA,mBAAA72G,KAAAwB,QAAAu7G,cACA/8G,KAAAwB,QAAAu7G,cACA/8G,KAAA64C,gBAGAi+D,KAAA,WACA,mBAAA92G,KAAAwB,QAAAs7G,SACA98G,KAAAwB,QAAAs7G,SACA98G,KAAA64C,gBAGAkhB,OAAA,WACA,mBAAA/5D,KAAAwB,QAAA03D,WACAl5D,KAAAwB,QAAA03D,WACAl5D,KAAA64C,kBAKAr9C,IAAAkG,MAAA49B,SAAA88E,eAAA5gH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCAEA0W,OAAA,CACA4nB,kBAAA,QAEApkB,mBAAA,WACA,MAAAj3C,KAAAwB,QAAAw6G,WACAh8G,KAAAwB,QAAAw6G,SAAA,GACAr+G,EAAAuhB,KAAAlf,KAAAwB,QAAAuvE,WAAA,SAAA8qC,GACA77G,KAAAwB,QAAAw6G,SAAA59F,KAAA,CACAthB,GAAAa,EAAAid,WACAihG,UAAAA,EACAv9F,MAAA,QAEAte,OAGAxE,IAAAiC,IAAA0jB,QAAAgsD,gBAAA,KAAAxvE,EAAAgC,KAAA,SAAAy+D,GACAp+D,KAAAo+D,OAAAA,EACAp+D,KAAA+rC,UACA/rC,QAEAg0C,WAAA,WACA,MAAA,CACAgoE,SAAAh8G,KAAAwB,QAAAw6G,SACA59C,OAAAp+D,KAAAo+D,SAGA7pB,YAAA,WACA/4C,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA8kD,aACA79G,EAAAuhB,KAAAlf,KAAAwB,QAAAw6G,SAAA,SAAA/8F,GAAA,IAAAi+F,EACA,IAAA1hH,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,2BAAA8hB,EAAAniB,GAAAgO,WAAA,MACAi3C,aAAA,QAAAm7D,EAAAj+F,EAAAX,aAAA,IAAA4+F,OAAA,EAAAA,EAAApgH,GACAuwE,iBAAA,eACA8mB,cAAA,EACAlyC,SAAAtkD,EAAAgC,KAAA,SAAA8tE,GACAxuD,EAAAX,MAAAte,KAAAo+D,OAAAl+C,IAAAutD,IACAztE,SAEAA,OAEA2wC,KAAA,WACA,mBAAA3wC,KAAAwB,QAAA23D,SACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAwB,QAAAw6G,UACAh8G,KAAA64C,kBC93BAr9C,IAAAwkB,OAAAm9F,UAAA,GAEA3hH,IAAAwkB,OAAAm9F,UAAAC,UAAA5hH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,cACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,kBAMA3D,IAAAkG,MAAA07G,UAAA5hH,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,eAEA0W,OAAA,CACA4pE,0BAAA,YAEAvpE,kBAAA,aAEAG,aAAA,WACAj0C,KAAAg0C,WAAA,IAEAO,YAAA,WACA/4C,IAAAC,QAAAgc,aAAAqD,eAAA9a,KAAA7C,EAAA,sBAEAmgH,SAAA,WACA,IAAAr1E,EAAA,EAEAzsC,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA,GACA,GAAA6C,KAAA7C,EAAA,sBAAAyE,MAAAoB,OAAAtG,SACAlB,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA,GACA8qC,KAGAzsC,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA,GACA,GAAA6C,KAAA7C,EAAA,sBAAAyE,MAAAoB,OAAAtG,SACAlB,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,uBAAA,GACA8qC,KAGA,IAAAs1E,EAAA/hH,IAAAC,QAAAuY,WAAAG,cAAAnU,KAAA7C,EAAA,oBAAAyE,OACApG,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,oBAAAogH,EAAA7oG,SACA6oG,EAAA7oG,SACAuzB,IAEA,IAAAglC,EAAAzxE,IAAAC,QAAAkZ,cAAAY,YAAAvV,KAAA7C,EAAA,oBAAAyE,OAEA,GAAA,GAAAqmC,EAAA,CAEA,IAAAsG,EAAA,IAAA/yC,IAAAwkB,OAAAm9F,UAAAC,UACA9zD,EAAA,mBACAtpD,KAAA3B,mBAAA,oBACAirD,EAAAtpD,KAAA3B,mBAAA,mBAEAkwC,EAAAnB,IAAA,UAAAkc,GACA/a,EAAAnB,IAAA,cAAAptC,KAAA7C,EAAA,sBAAAyE,OACA2sC,EAAAnB,IAAA,cAAAptC,KAAA7C,EAAA,sBAAAyE,OACA2sC,EAAAnB,IAAA,QAAA6/B,GACA1+B,EAAAnB,IAAA,QAAAptC,KAAA7C,EAAA,oBAAAyE,OACA2sC,EAAAnB,IAAA,UAAAptC,KAAA7C,EAAA,sBAAAyE,OAEA2sC,EAAAoC,KAAA,KAAA,CACAj8B,QAAA,WACA5Y,OAAA4C,SAAAslB,KAAA,0DAIAhkB,KAAA7C,EAAA,sBAAAyE,IAAA,IACA5B,KAAA7C,EAAA,sBAAAyE,IAAA,IACA5B,KAAA7C,EAAA,oBAAAyE,IAAA,IACA5B,KAAA7C,EAAA,oBAAAyE,IAAA,IACA5B,KAAA7C,EAAA,sBAAAyE,IAAA,MAGAvD,mBAAA,SAAAtB,GACAA,EAAAA,EAAAuB,QAAA,OAAA,OAAAA,QAAA,OAAA,OACA,IAEAC,EADA,IAAAC,OADA,SAAAzB,EAAA,aAEA0B,KAAA3C,OAAA4C,SAAAC,QACA,OAAA,MAAAJ,EACA,GAEAK,mBAAAL,EAAA,GAAAD,QAAA,MAAA,SfpFAgE,KAAAk7G,YAAA,SAAAtxG,EAAAC,GACA,IACAsxG,EAAAvxG,EAAAjB,UAEAyyG,EADAvxG,EAAAlB,UACAwyG,EACA,OAAAj4G,KAAA4I,MAAAsvG,EAJA,QAOAp7G,KAAAjB,UAAAsP,QAAA,SAAAxD,GACA,IAAA9K,EAAA,IAAAC,KAAAtC,KAAA2sF,WAEA,OADAtqF,EAAA2N,QAAA3N,EAAA4N,UAAA9C,GACA9K,GgBZA7G,IAAAmiH,UAAA,WACA,SAAAC,EAAAlgH,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA49G,GACA,IAAAtuE,EAAAtvC,KACAsvC,EAAA5xC,IAAAA,EACA4xC,EAAA9tC,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAq8G,WAAA,WACA30D,KAAA,WACA5Z,EAAAwlE,YAGA,EAAAn3G,EAAAC,KAAA0xC,EAAA5xC,MACA4xC,EAAA5xC,IAAAogH,UAAAxuE,EAAA9tC,SAXA,OAAAypC,aAAA2yE,EAAA,CAAA,CAAAh9G,IAAA,SAAAtB,MAeA,WACA,mBAAAU,KAAAwB,QAAAszG,QACA90G,KAAAwB,QAAAszG,aAjBA8I,EAAA,GAsBApiH,IAAAuiH,UAAA,WACA,SAAAC,EAAAtgH,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAg+G,GACA,IAAA1uE,EAAAtvC,KACAsvC,EAAA5xC,IAAAA,EACA4xC,EAAA9tC,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAq8G,WAAA,WACA30D,KAAA,WACA5Z,EAAAwlE,YAGA,EAAAn3G,EAAAC,KAAA0xC,EAAA5xC,MACA4xC,EAAA5xC,IAAAugH,UAAA3uE,EAAA9tC,SAXA,OAAAypC,aAAA+yE,EAAA,CAAA,CAAAp9G,IAAA,SAAAtB,MAeA,WACA,mBAAAU,KAAAwB,QAAAszG,QACA90G,KAAAwB,QAAAszG,aAjBAkJ,EAAA,GjBtBAxiH,IAAAkG,MAAA6mE,MAAA,GAEA/sE,IAAAkG,MAAA6mE,MAAA21C,kBAAA1iH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAsW,aAAA,CACA8qE,WAAA,IAAA3iH,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBAEA/W,OAAA,aACAo4F,UAAA,EACAC,QAAA,GACAllD,OAAA,KACAmlD,WAAA,KACAplD,SAAA,KACA5iB,SAAA,UAEA7C,OAAA,CACA8qE,4BAAA,gBACAC,4BAAA,cACAC,4BAAA,cACAC,0BAAA,OACAC,4BAAA,SACAC,0BAAA,iBACAC,iCAAA,qBAEA5nE,mBAAA,WACAj3C,KAAA8+G,iBAAA,GACA9+G,KAAA++G,iBAAA,GACA/+G,KAAAg/G,UAAA,MAEAhrE,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAAi/G,WAAA,IAAAzjH,IAAAomD,OAAAsU,WAAA,CACAzhB,GAAAz0C,KAAA7C,EAAA,eACAg5D,aAAA,IACA+oD,cAAA,EACAj9D,SAAAtkD,EAAAgC,KAAA,SAAAy2D,KAEAp2D,SAGAm/G,YAAA,SAAA9hH,GACA2C,KAAAg/G,UAAA7hH,EAAAE,EAAAgc,eAAAjZ,KAAA,cACA,MAAAJ,KAAAo/G,sBACAp/G,KAAAo/G,qBAAA7iH,SAEAyD,KAAAo/G,qBAAA,IAAA5jH,IAAAkG,MAAA6mE,MAAA82C,oBAAA,CACA5qE,GAAA,OAAAz0C,KAAAg/G,UAAAh/G,KAAA7C,EAAA,sBAAA6C,KAAA7C,EAAA,sBACAmiH,eAAA,OAAAt/G,KAAAg/G,UAAAh/G,KAAA8+G,iBAAA9+G,KAAA++G,iBACApgH,OAAAqB,KAAAu/G,qBACAv6F,QAAAhlB,KAAAwB,QAAAwjB,QACA2vF,MAAAh3G,EAAAgC,KAAA,SAAA4oE,GACAvoE,KAAAw/G,SAAAj3C,IACAvoE,SAGAy/G,eAAA,SAAApiH,GACA,KAAA,EAAA2C,KAAA7C,EAAAE,EAAAmc,QAAAkB,QAAA,kBAAAhe,QAAA,CAKA,IAAA8c,EAAArc,EAAAE,EAAAmc,QACAkmG,EAAAviH,EAAAE,EAAAmc,OAAAmmG,eAEA,MAAA3/G,KAAAg/G,WACAxlG,EAAA1B,SAAA,kBACA4nG,EAAA5nG,SAAA,kBACA0B,EAAA1B,SAAA,uBACA0B,EAAA1B,SAAA,wBACA0B,EAAA1B,SAAA,sBACA0B,EAAA1B,SAAA,wBACA9X,KAAAo/G,qBAAA7iH,SACAyD,KAAAg/G,UAAA,QAGAO,mBAAA,WACA,OAAA,MAAAv/G,KAAAg/G,UAAAh/G,KAAA7C,EAAA,wCAAA6C,KAAAg/G,UAAA,MAAAp9G,MAAAgB,cAAA5C,KAAA7C,EAAA,uBAAAyE,MAAAgB,eAEAg9G,cAAA,WACA5/G,KAAAo/G,qBAAAQ,cAAA5/G,KAAAu/G,uBAEAM,qBAAA,WACA,IAAAC,EAAAniH,EAAAC,KAAAoC,KAAA8+G,kBAAAnhH,EAAAC,KAAAoC,KAAA++G,kBACA/+G,KAAA7C,EAAA,oBAAAsE,KAAAq+G,EAAAh1G,YAAA,IAAAg1G,EAAA,aAAA,iBAEAC,kBAAA,SAAA1iH,GAAA,IAAA2iH,EAAAhgH,KAEAigH,EADA9iH,EAAAE,EAAAgc,eACAjZ,KAAA,cAEA,IAAA5E,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAE,WAAA,OAAAsR,EAAAjgH,KAAA8+G,iBAAA9+G,KAAA++G,iBACA3M,SAAA,+BAAArkG,OAAA,OAAAkyG,EAAA,KAAA,KAAA,SACA32D,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAG,gBACAyvE,kBAAA,EACAJ,aAAA,EACAl5C,gBAAA,EACA05C,eAAA,MACAp2C,OAAA,SAAA83C,GACA+O,EAAAhB,UAAAiB,EACAtiH,EAAAuhB,KAAA+xF,EAAA,SAAApsF,GACA,IAAA0jD,EAAA1jD,EAAA3E,IAAA,SAAAtd,cACA,IAAAjF,EAAAC,KAAA2qE,KAIA,OAAA03C,EACAD,EAAAlB,iBAAA1gG,KAAAmqD,GAEAy3C,EAAAjB,iBAAA3gG,KAAAmqD,GAEAy3C,EAAAR,SAAAj3C,GAAA,MAEAy3C,EAAAhB,UAAA,SAIAQ,SAAA,SAAAj3C,EAAA23C,GACAlgH,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA8qE,WAAAn+G,KAAA7C,EAAA,2CAAA6C,KAAAg/G,UAAA,MAAA,CACAz2C,MAAAA,IAEAvoE,KAAA7C,EAAA,uBAAAyE,IAAA,IACA5B,KAAA7C,EAAA,qBAAAsb,KAAA,YAAA,GACAzY,KAAA6/G,uBAEAK,GACAlgH,KAAA7C,EAAA,wCAAA6C,KAAAg/G,UAAA,MAAA1jD,SAGA6kD,YAAA,SAAA9iH,GACA,IAAA+iH,EAAAjjH,EAAAE,EAAAgc,eAAAqB,QAAA,gBACA2lG,EAAAljH,EAAAE,EAAAgc,eAAAqB,QAAA,0BAAAta,KAAA,cACAkgH,EAAA,OAAAD,EAAArgH,KAAA8+G,iBAAA9+G,KAAA++G,iBACAuB,EAAA3iH,EAAA4iH,QAAAD,EAAAF,EAAAhgH,KAAA,SAAAwC,eAEA,OAAAy9G,EACArgH,KAAA8+G,iBAAAwB,EAEAtgH,KAAA++G,iBAAAuB,EAEAF,EAAA7jH,SACAyD,KAAA4/G,gBACA5/G,KAAA7C,EAAA,qBAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAA0iH,IACAtgH,KAAA6/G,wBAEAznD,SAAA,WACA,OAAA,GAEAooD,KAAA,WAAA,IAAAC,EAAAzgH,KACA0gH,EAAA1gH,KAAA7C,EAAA,wBACAiD,EAAA,CACAugH,SAAA3gH,KAAA8+G,iBACA8B,SAAA5gH,KAAA++G,iBACAV,QAAAqC,EAAA9+G,MACAwzC,KAAAp1C,KAAAi/G,WAAA3mD,YAGAuoD,EAAA,EAAAljH,EAAAC,KAAAwC,EAAAi+G,SACA7iH,IAAAC,QAAAgc,aAAAoC,cAAA6mG,EAAAG,GACAA,IAIA,mBAAA7gH,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAA/4D,GACAJ,KAAA64C,eACA,mBAAA74C,KAAAwB,QAAA88G,YACA,IAAA9iH,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAwB,QAAA88G,WAAAl+G,EAAA,WACAqgH,EAAA5nE,iBAGA74C,KAAA64C,gBAGAkhB,OAAA,WACA,mBAAA/5D,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,cAKA19D,IAAAkG,MAAA6mE,MAAA82C,oBAAA7jH,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,+BACAsW,aAAA,CACAxuB,QAAA,IAAArpB,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBAEAp+B,OAAA,IAEA80C,OAAA,CACAqtE,uBAAA,YAEAhtE,kBAAA,WACA9zC,KAAAs/G,eAAAt/G,KAAAwB,QAAA89G,eACAt/G,KAAA+rC,UAEAwI,YAAA,WACA,GAAA,MAAAv0C,KAAAwB,QAAAwjB,QAAA,CACA,IAAA+7F,EAAA,IAAAvlH,IAAAigE,OAAAz7D,KAAA7C,EAAA,0BACA6C,KAAAwB,QAAAwjB,QAAAg8F,qBAAArjH,EAAAgC,KAAA,SAAAm3B,GACA92B,KAAAs/B,SAAAxI,EACAiqF,EAAAxkH,SACAyD,KAAA4/G,cAAA5/G,KAAAwB,QAAA7C,SACAqB,YAEAA,KAAAs/B,SAAA,IAAA9jC,IAAAk3C,YAAApT,SAAAm2B,SACAz1D,KAAA4/G,cAAA5/G,KAAAwB,QAAA7C,SAGAihH,cAAA,SAAAqB,GACA,IACAC,EADA50D,EAAA,MAAA20D,EAAAA,EAAA,GAGAC,EADA,EAAAvjH,EAAAC,KAAA0uD,GACA3uD,EAAA2uC,OAAAtsC,KAAAs/B,SAAAtf,OAAAriB,EAAAgC,KAAA,SAAAklB,GACA,IAAA0jD,EAAA1jD,EAAA3E,IAAA,SAAAtd,cACA,OAAA,IAAAjF,EAAAC,KAAA2qE,KAAA,IAAA5qE,EAAAqE,QAAAhC,KAAAs/G,eAAA/2C,MAIA,IAAA1jD,EAAA3E,IAAA,eAAAtd,cAAAZ,QAAAsqD,KAAA,IAAAic,EAAAvmE,QAAAsqD,KACAtsD,OAEArC,EAAA2uC,OAAAtsC,KAAAs/B,SAAAtf,OAAAriB,EAAAgC,KAAA,SAAAklB,GACA,IAAA0jD,EAAA1jD,EAAA3E,IAAA,SAAAtd,cACA,OAAA,EAAAjF,EAAAC,KAAA2qE,KAAA,IAAA5qE,EAAAqE,QAAAhC,KAAAs/G,eAAA/2C,IACAvoE,OAGA,IAAAmhH,EAAAnhH,KAAA7C,EAAA,oBACAikH,EAAA5lH,IAAAC,QAAAuY,WAAAG,cAAAm4C,GAAA53C,QACA0sG,GAAA,IAAAzjH,EAAAC,KAAAsjH,IACAlhH,KAAA7C,EAAA,6BAAA2D,OAAA3D,EAAA,QAAA,CACAg/D,KAAA7P,KAEAtsD,KAAA7C,EAAA,mCAAAiD,KAAA,QAAAksD,GACAtsD,KAAA7C,EAAA,6BAAAsE,KAAA6qD,EAAA,GAAAr3C,eACAjV,KAAA7C,EAAA,sBAAAg/D,KAAA7P,GACA60D,EAAAnnG,YAAA,WAEAmnG,EAAAjnG,SAAA,UAGA,IAAAmnG,EAAArhH,KAAA7C,EAAA,yBACAmkH,EAAAthH,KAAA7C,EAAA,+BACAkkH,EAAArsE,QACA,EAAAr3C,EAAAC,KAAAsjH,IACAvjH,EAAAuhB,KAAAvhB,EAAAwpD,OAAA+5D,EAAA,SAAAr8F,GACA,OAAAA,EAAA3E,IAAA,iBACAviB,EAAAgC,KAAA,SAAAklB,GACA7kB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAxuB,QAAAw8F,EAAA,CACA9yE,MAAA1pB,KAEA7kB,OAEAshH,EAAAtnG,YAAA,WAEAsnG,EAAApnG,SAAA,UAGA,IAAAqnG,EAAAvhH,KAAA7C,EAAA,4BACAikH,GAAA,EAAAzjH,EAAAC,KAAAsjH,GACAK,EAAArnG,SAAA,UAEAqnG,EAAAvnG,YAAA,WAGAwlG,SAAA,SAAAniH,GACA,IAAAkrE,EAAAprE,EAAAE,EAAAgc,eAAAqB,QAAA,kBAAAta,KAAA,SACAJ,KAAAs/G,eAAAlhG,KAAAmqD,EAAA3lE,eACA5C,KAAA4/G,gBACA,mBAAA5/G,KAAAwB,QAAAmzG,OACA30G,KAAAwB,QAAAmzG,MAAApsC,MkBnRA/sE,IAAAwkB,OAAAwhG,eAAA,GACAhmH,IAAAwkB,OAAAwhG,eAAAC,cAAAjmH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,kBACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,iBACAG,MAAAU,KAAAlD,SAOAtB,IAAAk3C,YAAA8uE,eAAA,GACAhmH,IAAAk3C,YAAA8uE,eAAAE,eAAAlmH,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAuB,QAAA,CACAmgH,gBAAA,GAEApzE,MAAA/yC,IAAAwkB,OAAAwhG,eAAAC,cACAtiH,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,mBAEA,CACA,CACAI,UAAA,iBACAD,MAAAU,KAAAwB,QAAAmgH,qBC7BAnmH,IAAAwwB,OAAA,CACAC,KAAA,CACA21F,SAAA,8EACAC,cAAA,8EACA96C,WAAA,mCACA76C,UAAA,uBACA2S,eAAA,+CACAijF,OAAA,+DACAC,YAAA,mCACAC,mBAAA,qBACAC,cAAA,8CACAh8C,UAAA,wEACAi8C,gBAAA,yBACA34C,iBAAA,wEACA44C,iBAAA,uCACAC,aAAA,mCACAC,aAAA,kFAIA7mH,IAAAi0C,aAAA,WACA,SAAA6yE,IAAA,IAAA9gH,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAsiH,IACA9gH,EAAA,MAAAA,EAAAA,EAAA,IACA+gH,SAAA5kH,EAAAupB,SAAA1lB,EAAA+gH,SAAA/gH,EAAA+gH,SAAA,GAAA,CACA/uF,EAAA,CACAgvF,aAAA,CACAzhH,KAAA,QACAgrB,QAAA,6EACA02F,aAAA,IAGAC,IAAA,CACAC,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAG,IAAA,CACAJ,aAAA,CACAzhH,KAAA,QACAgrB,QAAA,gDAGA82F,IAAA,CACAF,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAK,IAAA,CACAH,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAM,IAAA,CACAJ,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAO,IAAA,CACAL,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAQ,IAAA,CACAN,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAS,IAAA,CACAP,gBAAA,EACAlkG,MAAA,QACA+jG,aAAA,CACAz2F,QAAA,oBACA02F,aAAA,IAGAU,QAAA,CACAR,gBAAA,KAIA3iH,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,GAAA,GAAA,IA9EA,OAAAypC,aAAAq3E,EAAA,CAAA,CAAA1hH,IAAA,SAAAtB,MAiFA,SAAA8wC,EAAAhwC,GACA,IAAAgjH,EAAApjH,KAAAwB,QAAA+gH,SAAAnyE,EAAAjb,QACA,GAAA,MAAAiuF,IACAA,EAAAT,gBAAA,YAAA,oBAAAU,OAAA,YAAA1iH,QAAA0iH,UACAA,OAAAC,eAAA,SAAA/pF,GACA,IAAAgqF,EAAA,EACA,MAAA/nH,IAAAiC,IAAA0jB,QAAA0D,QACA0+F,EAAA/nH,IAAAiC,IAAA0jB,QAAA0D,QAAA/nB,GAEA,MAAAtB,IAAAiC,IAAA0jB,QAAA+4B,OACAqpE,GAAA/nH,IAAAiC,IAAA0jB,QAAA+4B,KAAAp9C,IAEAy8B,EAAAiqF,QAAA,CAAA1mH,GAAAymH,IACAhqF,EAAAkqF,SAAAL,EAAA3kG,MAAA2kG,EAAA3kG,MAAA,WACA8a,EAAAmqF,SAAA,aAAAtzE,EAAAjb,QACAoE,EAAAmqF,SAAA,eAAAtzE,EAAAH,cACA1W,EAAAmqF,SAAA,OAAAtjH,GACAijH,OAAAM,eAAAvzE,EAAAjb,OAAArqB,WAAA,KAAAslC,EAAAjwC,OAIA,MAAAijH,EAAAZ,cAAA,CACA,IAAAoB,EAAA,MAAAR,EAAAQ,SAAAR,EAAAQ,SAAA,OACAR,EAAAZ,aAAAz2F,QAAAvwB,IAAAC,QAAAgiB,cAAA5L,OAAAuxG,EAAAZ,aAAAz2F,QAAA63F,GACA,YAAAR,EAAA3kG,OAAA,YAAA2kG,EAAAZ,aAAAzhH,KACAvF,IAAA60C,cAAAb,OAAAq0E,cAAAT,EAAAZ,cAGAhnH,IAAA60C,cAAAb,OAAAovB,YAAAwkD,EAAAZ,mBA7GAF,EAAA,GjBlBA9mH,IAAAwkB,OAAA8jG,gBAAA,GAEAtoH,IAAAwkB,OAAA8jG,gBAAAC,eAAAvoH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACA,OAAAa,KAAAwB,QAAAwjB,QACAxpB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA9D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,cAEA,CACA/gB,SAAA,qBAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,wBAUA3D,IAAAkG,MAAAoiH,gBAAA,GAEAtoH,IAAAkG,MAAAoiH,gBAAAE,gBAAAxoH,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qBAEA0W,OAAA,GAGAK,kBAAA,YACA9zC,KAAAuuC,OAAAvuC,KAAAwB,QAAAwjB,SAAAhlB,KAAAuuC,MAAAkC,UAQAzwC,KAAA+rC,SAPA/rC,KAAAuuC,MAAA1C,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,SAOAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,UAGAuvB,YAAA,WACA,IAAA/4C,IAAAi8D,OAAAz3D,KAAA7C,EAAA,aAAA6C,KAAAuuC,MAAA,CACAypC,kBAAA,EACAtgB,cAAA,CACA,SAEA0V,YAAAzvE,EAAAgC,KAAA,WACAK,KAAAiiD,YACAjiD,SAGAiiD,SAAA,WACA,mBAAAjiD,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAAuuC,UAKA/yC,IAAAkG,MAAAoiH,gBAAAG,qBAAAzoH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BACAsZ,SAAA,KAEA7C,cAAA,CACA6nB,kBAAA,OACAi8C,oBAAA,UAEAtjE,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,UAGAuvB,YAAA,WACA,IAAA/4C,IAAAkG,MAAAoiH,gBAAAE,gBAAA,CACAvvE,GAAAz0C,KAAA7C,EAAA,qBACA6nB,QAAAhlB,KAAAwB,QAAAwjB,QACAupB,MAAAvuC,KAAAuuC,SAGAoC,KAAA,WACA3wC,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,SAAAmkH,GACAtoH,IAAAiC,IAAA0jB,QAAA6D,QAAAooB,IAAA,kBAAA02E,EAAAl0E,UACAp0C,IAAAiC,IAAA7B,UAAA+wG,kBACAnxG,IAAAiC,IAAA7B,UAAAolD,eACAhhD,KAAA64C,eACA74C,SAGA+5D,OAAA,WACA/5D,KAAA64C,iBC/GAr9C,IAAAonC,MAAA,CACAshF,iBAAA,SAAAp2E,EAAA9oB,EAAAxjB,GACA,IAAA2iH,EAAA3oH,IAAAC,QAAAqW,cAAAC,YAAA+7B,GAAA,GACA,GAAA,uBAAAq2E,GAAA,UAAAA,EAAA,CACA,IAAAC,EAAA,GACAC,EAAA1mH,EAAA0xE,KAAA1xE,EAAAshB,IAAAthB,EAAA2uC,OAAA,UAAA63E,EAAAr2E,EAAAA,EAAA9tB,OAAA,SAAA+tB,GACA,OAAAA,EAAA7tB,IAAA,cAAA,MAAA6tB,EAAA7tB,IAAA,UACA,SAAA6tB,GACA,OAAAA,EAAA7tB,IAAA,gBAEAviB,EAAAuhB,KAAAmlG,EAAA,SAAAC,GACAF,EAAAE,GAAA3mH,EAAAshB,IAAAthB,EAAA2uC,OAAA,UAAA63E,EAAAr2E,EAAAA,EAAA9tB,OAAA,SAAA+tB,GACA,OAAAA,EAAA7tB,IAAA,eAAAokG,IACA,SAAAC,GACA,OAAAA,EAAArkG,IAAA,YAIA,IAuBA/gB,EAvBAovE,EAAA,GACA/sE,IACAA,EAAAgjH,QACAj2C,EAAAnwD,KAAA,CACA7e,UAAA,SACAD,MAAAkC,EAAAgjH,SAGAhjH,EAAAijH,OACAl2C,EAAAnwD,KAAA,CACA7e,UAAA,QACAD,MAAAkC,EAAAijH,QAIAjjH,EAAAkjH,oBACAn2C,EAAAnwD,KAAA,CACA7e,UAAA,cACAD,MAAAkC,EAAAkjH,sBAOAvlH,EADA,MAAA6lB,EACAxpB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA0lB,EAAAloB,IAEA,CACAqC,SAAA,YAEA,CACAA,SAAA,cAEAovE,GAEA/yE,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,cAEAovE,GAEA,IAAAnuE,EAAA,CACAgkH,SAAAA,EACAO,UAAAhnH,EAAAshB,IAAAthB,EAAA2uC,OAAA,UAAA63E,EAAAr2E,EAAAA,EAAA9tB,OAAA,SAAA+tB,GACA,OAAAA,EAAA7tB,IAAA,eACA,SAAA6tB,GACA,OAAAA,EAAA7tB,IAAA,WAGA1kB,IAAAonC,MAAAgiF,cAAAzlH,EAAAiB,QAEA,IAAA5E,IAAAwkB,OAAA6kG,SAAAC,QAAA,CACAv1C,WAAAzhC,EAAA5tB,IAAA,WACA7C,KAAAywB,EAAA5tB,IAAA,UACA6kG,YAGAH,cAAA,SAAAzlH,EAAAiB,EAAA4kH,GAAA,IAAAC,EAAA,EAAA76G,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACA5O,IAAAonC,MAAAsiF,sBACA,IAAAv6C,EAAA,IAAAnvE,IAAAyD,KAAAC,QAAA,CACAC,SAAAA,EACAiB,KAAAA,EACAZ,QAAA,EACAyuC,QAAAg3E,KAGAt6C,EADA,MAAAvqE,EACAuqE,EAAAlrE,OAEAkrE,EAAAzqD,OAEAxgB,KAAA/B,EAAAgC,KAAA,SAAAolH,GACA,mBAAAC,GACAA,IAEAhlH,KAAAmlH,eAAAJ,IACA/kH,OAAAmsB,KAAA,SAAAi5F,GACA5pH,IAAAonC,MAAAyiF,mBAAA,CACAlmH,SAAAA,EACAmV,MAAA8wG,EAAAn1E,kBAIAk1E,eAAA,SAAAJ,GACA,IAAAO,EACAC,EACAC,EAAA,OAEA,GAAAhqH,IAAAiC,IAAA0jB,SAAA3lB,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAA+Q,UAAAqjB,iBAAAp0B,IAAAiC,IAAA+D,QAAAkuB,eACA,MAAAl0B,IAAAiC,IAAA0jB,QAAA+4B,MACA,MAAA1+C,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAAA,CACA,IAAA2E,EAAArpB,IAAAiC,IAAA0jB,QAAA0D,QACAgxD,EAAAr6E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA+uD,mBAEA,GAAA,MAAA5vC,EAAA,CAGA,GAFAA,EAAAA,EAAA/nE,MAAA,KAEA,MAAA+W,IAAAA,EAAA4rB,UAMA,YALA5rB,EAAAgnB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAmlH,eAAAJ,IACA/kH,QAKA,MAAA6kB,GACAlnB,EAAAuhB,KAAA2F,EAAAu5C,OAAAp+C,OAAA,SAAA1B,GACA3gB,EAAA8yD,SAAAolB,EAAAv3D,EAAA4B,IAAA,WAAApV,cAEA06G,EAAA,YAEAxlH,MAGAslH,EAAA,GACAC,GAAA,OAEAD,EAAA,KACAC,GAAA,EAEAR,EAAAW,SAAAX,EAAA5kH,OAAA4kH,EAAAY,QAAAZ,EAAAa,WAAAN,GAAA,GAAA,MAAAA,GACA9pH,IAAAonC,MAAAg4D,aAAAmqB,EAAA5kH,IAAA,CACA0lH,YAAA,IAGAd,EAAAY,MACA,IAAAnqH,IAAAkG,MAAAkhC,MAAAkjF,iBAAA,CACAv3E,MAAA,IAAA/yC,IAAAwkB,OAAA4iB,MAAAmjF,QAAAhB,GACAO,eAAAA,EACAC,UAAAA,EACAC,UAAAA,IAEAT,EAAAa,UACA,IAAApqH,IAAAkG,MAAAkhC,MAAAojF,qBAAA,CACAz3E,MAAA,IAAA/yC,IAAAwkB,OAAA6kG,SAAAoB,gBAAAlB,GACAO,eAAAA,EACAC,UAAAA,EACAC,UAAAA,IAGA,IAAAhqH,IAAAkG,MAAAkhC,MAAAsjF,kBAAA,CACA33E,MAAA,IAAA/yC,IAAAwkB,OAAA4iB,MAAAujF,KAAApB,MAKAM,mBAAA,SAAAjlH,GACA,IAAA5E,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAA65F,qBAAAhmH,IAEAw6F,aAAA,SAAAz6F,GAAA,IAAAqB,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACA5O,IAAAonC,MAAAsiF,uBACA,IAAA1jH,EAAAqkH,aACArkH,EAAA6e,kBAAA,GACA7e,EAAA+e,oBAAA,KACA/e,EAAAysC,QACAzsC,EAAAgf,QAAAhlB,IAAA+Q,UAAAkU,SAAAK,OACA,IAAAtf,EAAAhC,SACAgC,EAAAgf,QAAAhlB,IAAA+Q,UAAAkU,SAAAG,OAEAzgB,EAAA3E,IAAAC,QAAA2D,WAAA+gB,YAAAhgB,EAAAqB,IAEA1F,OAAAwmE,KAAAniE,EAAA3E,IAAA+Q,UAAAq2B,MAAAW,kBAEA2hF,oBAAA,WACA,IAAAmB,EAAAlpH,EAAA,IAAA3B,IAAA+Q,UAAAq2B,MAAAW,iBASA,OARA,IAAA5lC,EAAAC,KAAAyoH,KACAA,EAAAlpH,EAAA,YAAA,CACAL,GAAAtB,IAAA+Q,UAAAq2B,MAAAW,gBACAxmC,KAAAvB,IAAA+Q,UAAAq2B,MAAAW,gBACA5oB,MAAA,WAEAxd,EAAA,QAAA2D,OAAAulH,IAEAA,IAKA7qH,IAAAwkB,OAAA4iB,MAAA,GACApnC,IAAAwkB,OAAA4iB,MAAAujF,KAAA3qH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,UACA7qB,YAAA,WAmDA,OAjDAhiB,KAAAkgB,IAAA,YACA,EAAAviB,EAAAC,KAAAoC,KAAAkgB,IAAA,SACA,CACA,CACA/gB,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,UAIA,CACA,CACA/gB,SAAA,UACAG,MAAAU,KAAAkgB,IAAA,gBAKA,EAAAviB,EAAAC,KAAAoC,KAAAkgB,IAAA,SACAlgB,KAAAkgB,IAAA,WAAA,EACA,CACA,CACA/gB,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,UAIA,CACA,CACA/gB,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,UAIA,EAAAviB,EAAAC,KAAAoC,KAAAkgB,IAAA,QACA,CACA,CACA/gB,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,SAIA,CACA,CACA/gB,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,cAOA/gB,SAAA,SAAAgwC,GACA,IAAAo/B,EAMA,OAJAA,EADA,MAAAp/B,GAAA,MAAAA,EAAAo/B,OACAp/B,EAAAo/B,OAEA,GAEA/yE,IAAAC,QAAA2D,WAAAC,iBAAAW,KAAAgiB,cAAAusD,IAEA+3C,UAAA,SAAA18D,GAEA,OAAApuD,IAAAC,QAAA2D,WAAAiiB,YAAA7lB,IAAAC,QAAA2D,WAAAC,iBAAA1B,EAAA4hE,MAAAv/D,KAAAgiB,cAAA,CAAA,CACA7iB,SAAA,EAAAxB,EAAAC,KAAAoC,KAAAkgB,IAAA,SAAA,SAAA,cAEA,CACA,CACA3gB,UAAA,aACAD,MAAA,EAAAsqD,EAAAA,EAAA,MAEA,GAAA,GAAA,IAEA28D,UAAA,SAAA3lH,GACA,OAAApF,IAAAC,QAAA2D,WAAA+gB,YAAA3kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAA,EAAA3B,EAAAC,KAAAgD,GAAAA,EAAAZ,KAAAkgB,IAAA,UAEA,CACAM,QAAAhlB,IAAA+Q,UAAAkU,SAAAK,SAGA0lG,aAAA,WACA,IAAAC,EAAAzmH,KAAAkgB,IAAA,YACA,OAAA,EAAAviB,EAAAC,KAAA6oH,GACAA,EAEA,EAAA9oH,EAAAC,KAAAoC,KAAAkgB,IAAA,QACAlgB,KAAAumH,YAAA,aAEAvmH,KAAA0mH,SAGAC,QAjGA,WAkGA,OAAA3mH,KAAAkgB,IAAA,YACAviB,EAAA6lB,OAAAxjB,KAAA4mH,uBAAA,SAAArgC,EAAAz7C,GACA,OAAAy7C,EAAAz7C,EAAA67E,WACA,GAEA3mH,KAAAkgB,IAAA,SAGA2mG,eAAA,WACArrH,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,YAEA,CACA/gB,SAAA,cAIA2nH,gBAAA,SAAAv+C,GACA,IAAA/sE,IAAAwkB,OAAA4iB,MAAAmkF,oBAAA,CACA1pG,KAAArd,KAAAkgB,IAAA,QACAqoD,MAAAA,IACA53B,QAEAo0E,SAAA,WACA,IAAA5kH,EAAAH,KAAAkgB,IAAA,OACA,IAAAviB,EAAAC,KAAAuC,IAAA,EAAAxC,EAAAC,KAAAoC,KAAAkgB,IAAA,UACA/f,EAAAH,KAAAumH,YAAA,aAGA,EAAA5oH,EAAAC,KAAAuC,GACA3E,IAAAonC,MAAAg4D,aAAAz6F,EAAA,CACA0lH,YAAA,EACArmH,QAAA,IAEA,EAAA7B,EAAAC,KAAAoC,KAAAkgB,IAAA,UACA1kB,IAAAonC,MAAAg4D,aAAAp/F,IAAAC,QAAA2D,WAAAC,iBAAAW,KAAAgiB,eAAA,YAAA,CACAxiB,QAAA,KAIAwnH,KAAA,SAAApkF,EAAAphC,EAAAqX,GACA,IAAA01D,EAAA,GACA,MAAA/sE,EAAAwjB,SACAupD,EAAAnwD,KAAA,CACA7e,UAAA,YACAD,MAAAkC,EAAAwjB,QAAAloB,KAIAkD,KAAAkgB,IAAA,YACA,IAAA1kB,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,YAEA,CACA/gB,SAAA,WAEAovE,GACAnuE,KAAA,CACA6mH,UAAAtpH,EAAAshB,IAAA2jB,EAAA,SAAAkI,GACA,OAAAA,EAAA5qB,IAAA,gBAGA0wB,MAAAlxC,KAAA/B,EAAAgC,KAAA,SAAAunH,GACAvpH,EAAAuhB,KAAAgoG,EAAA,SAAAC,GACA,IAAAC,EAAAzpH,EAAAka,KAAA+qB,EAAA,SAAAkI,GACA,OAAAA,EAAA5qB,IAAA,aAAAinG,EAAA73C,UAEA,MAAA83C,GACAA,EAAAh6E,IAAA,WAAA+5E,EAAAE,WAEArnH,MACA6Y,EAAA+pB,IACA5iC,OAEA6Y,EAAA+pB,IAGA0kF,KAAA,SAAA1kF,EAAAphC,EAAAqX,GACA,IAAA01D,EAAA,GACA,MAAA/sE,EAAAwjB,SACAupD,EAAAnwD,KAAA,CACA7e,UAAA,YACAD,MAAAkC,EAAAwjB,QAAAloB,KAIAkD,KAAAkgB,IAAA,YACA,IAAA1kB,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,YAEA,CACA/gB,SAAA,WAEAovE,GACAnuE,KAAA,CACA6mH,UAAAtpH,EAAAshB,IAAA2jB,EAAA,SAAAkI,GACA,OAAAA,EAAA5qB,IAAA,gBAGA0wB,MAAAlxC,KAAA/B,EAAAgC,KAAA,SAAA4nH,GACA1uG,EAAA0uG,IACAvnH,OAEA6Y,EAAA+pB,IAGAugB,QAAA,SAAA3hD,GAIA,OAHAxB,KAAAkgB,IAAA,aACAlgB,KAAAwnH,uBAEA/nG,SAAAC,MAAAre,UAAA8hD,QAAAp4C,KAAA/K,KAAAwB,IAEAgmH,qBAAA,WACA7pH,EAAAuhB,KAAAlf,KAAA4mH,uBAAAjpH,EAAAgC,KAAA,SAAAmrC,GACAA,EAAA5qB,IAAA,aACA4qB,EAAA08E,uBAEA,MAAAxnH,KAAA0tD,YACA1tD,KAAA0tD,WAAAnxD,OAAAuuC,IAEA9qC,QAEAynH,kBAAA,SAAAziG,EAAAnM,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA0lB,EAAAloB,IAEA,CACAqC,SAAA,cACAG,MAAAU,KAAAkgB,IAAA,SAEA,CACA/gB,SAAA,cAGAq7F,SAAA96F,KAAAmZ,IAEAxM,MAAA,SAAAkiC,GAeA,OAdA,MAAAA,IACA,MAAAA,EAAA3tC,MACA2tC,EAAApuC,IAAAH,KAAAumH,UAAAh4E,EAAA3tC,KAAA,YACA2tC,EAAAk4E,SAAAzmH,KAAAumH,UAAAh4E,EAAA3tC,KAAA,cAGA,MAAA2tC,EAAAzrC,YACAyrC,EAAAzrC,UAAA,IAAAR,KAAAisC,EAAAzrC,YAGA,MAAAyrC,EAAA61E,WACApkH,KAAAokH,SAAA,IAAA5oH,IAAAk3C,YAAA9P,MAAA40B,MAAAjpB,EAAA61E,YAGA71E,GAEAm5E,QAAA,SAAA7uG,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAAW,KAAAgiB,eAAA,WACAxiB,QAAA,IACAC,OAAAC,KAAAmZ,GAAAsT,KAAAxuB,EAAAgC,KAAA,WACAnE,IAAAonC,MAAAyiF,mBAAA,CACAv6E,KAAA9qC,KACAsU,MAAA,4BAEAtU,QAEA2nH,YAAA,SAAA9uG,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAiB,IAAAH,KAAAkgB,IAAA,SACAA,MAAAxgB,KAAAmZ,GAAAsT,KAAAxuB,EAAAgC,KAAA,WACAnE,IAAAonC,MAAAyiF,mBAAA,CACAv6E,KAAA9qC,KACAsU,MAAA,4BAEAtU,QAEA4nH,UAAA,WACA,IAAAC,EAAArsH,IAAAC,QAAAqsH,YAAAC,aAAA/nH,KAAAkgB,IAAA,SACA,MAAA,QAAA2nG,GAAA,SAAAA,GAAA,QAAAA,GAEAG,QAAA,WACA,OAAArqH,EAAA8yD,SAAAj1D,IAAA+Q,UAAAq2B,MAAAY,gBAAAhoC,IAAAC,QAAAqsH,YAAAC,aAAA/nH,KAAAkgB,IAAA,WAEA+nG,mBAAA,WACA,OAAAjoH,KAAAkgB,IAAA,QAAA5hB,QAAA0B,KAAA+nH,eAAA,KAEAA,aAAA,WACA,IAAAt/B,EAAAzoF,KAAAkgB,IAAA,QAAApS,MAAA,KAAAo6G,MACA,MAAA,KAAAz/B,EAAAA,EAAA,IAAAA,GAEArgE,KAAA,WAAA,IACAA,EADA+/F,EAAA,EAAA/9G,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAEA,GAAApK,KAAAkgB,IAAA,YACAkI,EAAA,cAGA,OADAA,EAAA,OACA5sB,IAAAC,QAAAqsH,YAAAC,aAAA/nH,KAAAkgB,IAAA,UACA,IAAA,MACA,IAAA,MACA,IAAA,MACA,IAAA,MACA,IAAA,KACA,IAAA,MACA,IAAA,OACAkI,EAAA,aACA,MACA,IAAA,MACA,IAAA,MACA,IAAA,OACA,IAAA,MACA,IAAA,MACA,IAAA,MACA,IAAA,MACA,IAAA,OACAA,EAAA,aACA,MACA,IAAA,MACA,IAAA,MACA,IAAA,OACA,IAAA,MACA,IAAA,MACA,IAAA,MACA,IAAA,OACAA,EAAA,aACA,MACA,IAAA,MACAA,EAAA,WACA,MACA,IAAA,MACA,IAAA,OACAA,EAAA,aACA,MACA,IAAA,MACA,IAAA,OACAA,EAAA,YACA,MACA,IAAA,MACA,IAAA,OACAA,EAAA,kBACA,MACA,IAAA,MACAA,EAAA,WACA,MACA,IAAA,MACA,IAAA,MACA,IAAA,KACA,IAAA,KACA,IAAA,MACAA,EAAA,eACA,MACA,IAAA,MACA,IAAA,OACA,IAAA,MACAA,EAAA,WAIA,OAAA+/F,EAAA,aAAA,IAAA,UAAA//F,GAEAw+F,qBAAA,WAAA,IAAAwB,EAAA,EAAAh+G,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAAAkiC,EAAA,EAAAliC,UAAA1N,OAAA0N,UAAA,QAAAC,EACA,OAAArK,KAAA0tD,WAAAk5D,qBAAA5mH,KAAAooH,EAAA97E,IAEA+7E,uBAAA,WAAA,IAAA7mH,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAAk+G,WAAA,GAAAzvG,EAAA,EAAAzO,UAAA1N,OAAA0N,UAAA,QAAAC,EACA,IAAA7O,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACA,CACAI,UAAA,WACAD,MAAAU,KAAAkgB,IAAA,SAEA,CACA3gB,UAAA,YACAD,MAAAkC,GAAAA,EAAA8mH,eAIApoG,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAijC,GACA,MAAA5iC,KAAA0tD,YACA1tD,KAAA0tD,WAAA9a,IAAAhQ,EAAA,CACAkM,QAAA,IAGA9uC,KAAAywC,WAAA,EACA53B,EAAA7Y,KAAA0tD,WAAAxtC,IAAAviB,EAAAshB,IAAA2jB,EAAA,SAAAkI,GACA,OAAAA,EAAAwkC,aAEAtvE,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACAiO,EAAA,OACA7Y,QAEAuoH,sBAAA,WACA,IAAAlB,EAAArnH,KAAAkgB,IAAA,YACA,OAAA,MAAAlgB,KAAA0tD,YAAA,EAAA25D,EAIArnH,KAAA0tD,WAAA86D,MAAA,CAAAnB,SAAAA,IAHA,CAAArnH,OAKAyoH,gBAAA,WAAA,IAAAH,EAAA,EAAAl+G,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAAAs+G,EAAA,EAAAt+G,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KAAAu+G,EAAA,EAAAv+G,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KACAi9G,EAAArnH,KAAAkgB,IAAA,YACA,GAAAooG,EAAA,CASA,GARA,MAAAI,IACArB,EAAAqB,EAAAxoG,IAAA,aAGA,MAAAyoG,IACAA,EAAA,IAGA,MAAAtB,EAAA,CACA,IAAAuB,EAAA5oH,KAAA0tD,WAAA3b,UAAA,CACAu9B,QAAA+3C,IAEA,GAAA,MAAAuB,EAEA,OADAD,EAAAvqG,KAAAwqG,GACA5oH,KAAAyoH,gBAAAH,EAAAM,EAAAD,GAGA,OAAAA,EAGA,OAAA,MAAA3oH,KAAA0tD,WACA,KAGA1tD,KAAA0tD,WAAA3b,UAAA,CACAu9B,QAAA+3C,KAGAwB,SAAA,WACA,GAAA,MAAA7oH,KAAA0tD,WACA,OAAA,EAKA,IAFA,IAAA1uD,EAAAgB,KAAAyoH,kBACAK,EAAA,EACA,MAAA9pH,GACA8pH,IACA9pH,EAAAA,EAAAypH,kBAEA,OAAAK,KAIAttH,IAAAwkB,OAAA4iB,MAAAmjF,QAAAvqH,IAAAwkB,OAAA4iB,MAAAujF,KAAAlmH,OAAA,CACA4sC,YAAA,OACA1tC,SAAA,WACA,OAAA3D,IAAAiC,IAAA+D,QAAA28D,SACA3iE,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,OACAG,MAAAU,KAAAkgB,IAAA,WAKA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,OACAG,MAAAU,KAAAkgB,IAAA,YAIAmuB,WAAA,SAAA7sC,GACAhG,IAAAiC,IAAA+D,QAAA28D,WACA38D,EAAAysC,SAAA,IAGA86E,iBAAA,WACA,OAAA/oH,KAAAb,WAAA,aAEA4lH,SAAA,WACA,IAAA5kH,EAAAH,KAAAkgB,IAAA,OACA,IAAAviB,EAAAC,KAAAuC,IAAA,EAAAxC,EAAAC,KAAAoC,KAAAkgB,IAAA,UACA/f,EAAAH,KAAAumH,YAAA,aAGA,EAAA5oH,EAAAC,KAAAuC,GACA3E,IAAAonC,MAAAg4D,aAAAz6F,EAAA,CACA0lH,YAAA,EACArmH,QAAA,EACAyuC,QAAAzyC,IAAAiC,IAAA+D,QAAA28D,WAGA3iE,IAAAonC,MAAAgiF,cAAA5kH,KAAAb,WAAA,CAAAg4D,MAAAn3D,KAAAkgB,IAAA,UAAA,KAAA1kB,IAAAiC,IAAA+D,QAAA28D,WAGA2oD,gBAAA,SAAAv+C,GACA,IAAA/sE,IAAAwkB,OAAA4iB,MAAAomF,oBAAA,CACA3rG,KAAArd,KAAAkgB,IAAA,QACAqoD,MAAAA,IACA53B,QAEAopB,OAAA,WACA/5D,KAAAkgB,IAAA,aACAlgB,KAAAotC,IAAA,SAAA5xC,IAAA+Q,UAAAq2B,MAAAI,UAAAI,WACA,IAAA5nC,IAAAyD,KAAAC,QAAA,CACAC,SAAAa,KAAAb,SAAA,YACAq7F,aAKAh/F,IAAAwkB,OAAA4iB,MAAAomF,oBAAAxtH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,wBACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,OACAG,MAAAU,KAAAkgB,IAAA,SAEA,CACA/gB,SAAA,sBAMA3D,IAAAwkB,OAAA4iB,MAAAmkF,oBAAAvrH,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,iBACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,SAEA,CACA/gB,SAAA,sBAOA3D,IAAAk3C,YAAA9P,MAAA,GAEApnC,IAAAk3C,YAAA9P,MAAA40B,MAAAh8D,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4iB,MAAAujF,KACAhnH,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACA,CACAI,UAAA,WACAD,MAAAU,KAAAwB,QAAAxB,KAAAwB,QAAA6lH,SAAA,QAGA4B,MAAA,SAAA7oH,EAAA4kB,EAAAnM,GACA,IAAA1Z,EAGAA,EAFA,MAAA6lB,EACAhlB,KAAAwB,QAAA0nH,SACA,aAAAlkG,EAAAloB,GAAAgO,WAAA,gBAEA,aAAAka,EAAAloB,GAAAgO,WAAA,qBAGA,eAEA,IAAAtP,IAAAyD,KAAAC,QAAA,CACAC,SAAAA,EACAiB,KAAA,CACAi+G,QAAA,MAAAj+G,EAAAA,EAAAi+G,QAAA,KACA8K,OAAA,MAAA/oH,EAAAA,EAAA+oH,OAAA,KACAhyD,MAAAx5D,EAAAshB,IAAAjf,KAAAggB,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,aAGAzgB,OAAAC,KAAA,SAAAU,GACA,mBAAAyY,GACAA,EAAAzY,KAEA+rB,KAAA,WACAtT,OAGAksG,SAAA,WAGA,MAFApnH,EAAAka,KAAA7X,KAAAggB,OAAA,SAAA+tB,GACA,OAAAA,EAAA7tB,IAAA,eAGA1kB,IAAAonC,MAAAshF,iBAAAlkH,KAAAggB,QAEA,IAAAxkB,IAAAwkB,OAAA4iB,MAAAmjF,QAAA,CACA5uD,MAAAx5D,EAAAshB,IAAAjf,KAAAggB,OAAA,SAAA8qB,GACA,OAAAA,EAAA5qB,IAAA,YAEA6kG,YAGAqE,mBAAA,WACA,OAAAppH,KAAAwoH,MAAA,CAAAnB,SAAA,KAEAgC,gBAAA,WAEA,GAAA,MADArpH,KAAAkgB,KAAA,GACA,CACA,IAAAopG,EAAA,IAAA9tH,IAAAwkB,OAAA4iB,MAAAujF,KAAA,CACA72C,SAAA,EACA+3C,SAAA,EACAtqH,KAAA,SACAwsH,UAAA,IAEAvpH,KAAA4yC,IAAA02E,GACA3rH,EAAAuhB,KAAAlf,KAAAggB,OAAAriB,EAAAgC,KAAA,SAAA4uC,IACA,IAAAA,EAAAruB,IAAA,YAAA,MAAAviB,EAAAka,KAAA7X,KAAAggB,OAAA,SAAAwpG,GACA,OAAAA,EAAAtpG,IAAA,aAAAquB,EAAAruB,IAAA,eAEAquB,EAAAnB,IAAA,YAAA,IAEAptC,OAGA,OAAArC,EAAAka,KAAA7X,KAAAggB,OAAA,SAAAuuB,GACA,OAAA,IAAAA,EAAAruB,IAAA,cAAA,IAAAquB,EAAAruB,IAAA,cAGAupG,iBAAA,WACA,OAAA9rH,EAAAka,KAAA7X,KAAAggB,OAAA,SAAAuuB,GACA,OAAA,IAAAA,EAAAruB,IAAA,aAAA,EAAAquB,EAAAruB,IAAA,cAGAwpG,yBAAA,WACA,IAAAC,EAAA3pH,KAAAwoH,MAAA,CAAAnB,SAAA,IACA,GAAA,EAAA1pH,EAAAC,KAAA+rH,GACA,OAAAA,EAEA,IAAA/+G,EAAA,GAIA,OAHAjN,EAAAuhB,KAAAyqG,EAAA,SAAAC,GACAh/G,EAAAwT,KAAAS,MAAAjU,EAAAilC,mBAAA7vC,KAAA4mH,qBAAAgD,MACA5pH,MACA4K,GAEAi/G,wBAAA,SAAAlB,GAAA,IAAAnnH,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAAk+G,WAAA,GAAAzvG,EAAA,EAAAzO,UAAA1N,OAAA0N,UAAA,QAAAC,EACA,IAAA7O,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACA,CACAI,UAAA,YACAD,MAAA3B,EAAAshB,IAAAthB,EAAA2uC,OAAAq8E,EAAA,SAAA3pH,GACA,OAAAA,EAAAkhB,IAAA,cACA,SAAApN,GACA,OAAAA,EAAAoN,IAAA,WAGA,CACA3gB,UAAA,YACAD,MAAAkC,GAAAA,EAAA8mH,eAIApoG,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAijC,GACA5iC,KAAA4yC,IAAAhQ,EAAA,CACAkM,QAAA,IAEAj2B,EAAA7Y,KAAAkgB,IAAAviB,EAAAshB,IAAA2jB,EAAA,SAAAkI,GACA,OAAAA,EAAAztB,UAEArd,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACAiO,EAAA,OACA7Y,QAEA4mH,qBAAA,SAAA5nH,GAAA,IAAAopH,EAAA,EAAAh+G,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAAAkiC,EAAA,EAAAliC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA0/G,WAAA,EAAAC,aAAA,GACA,GAAA,MAAA/qH,IAAAA,EAAAkhB,IAAA,YACA,MAAA,GAGA,GAAAkoG,EAAA,CACA,IAAAx9G,EAAA,GAYA,OAXAjN,EAAAuhB,KAAAlf,KAAAwoH,MAAA,CAAAnB,SAAAroH,EAAAkhB,IAAA,aAAA,SAAA6tB,GACAA,EAAA7tB,IAAA,aACAosB,EAAAy9E,aACAn/G,EAAAwT,KAAA2vB,GAGAnjC,EAAAjN,EAAA4hE,MAAA30D,EAAA5K,KAAA4mH,qBAAA74E,EAAAq6E,EAAA97E,KACAA,EAAAw9E,WACAl/G,EAAAwT,KAAA2vB,IAEA/tC,MACA4K,EAEA,IAAA49G,EAAA,CACAnB,SAAAroH,EAAAkhB,IAAA,YAQA,OANAosB,EAAAy9E,YACAvB,EAAAe,UAAA,EACAj9E,EAAAw9E,YACAtB,EAAAe,UAAA,GAGAvpH,KAAAwoH,MAAAA,IAGArlE,QAAA,SAAAtqC,GACA,IAAAmxG,EAAAhqH,KAAAypH,mBACAQ,EAAAD,EAAAA,EAAA9pG,IAAA,WAAA,KACAF,EAAAriB,EAAA2uC,OAAAtsC,KAAAggB,OAAAriB,EAAAgC,KAAA,SAAA4uC,GACA,OAAAA,EAAAruB,IAAA,aAAA+pG,GACAjqH,OACA,IAAAxE,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WAGAiB,KAAA,CACA6mH,UAAAtpH,EAAAshB,IAAAe,EAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,gBAGAs6E,SAAA96F,KAAA/B,EAAAgC,KAAA,WACAkZ,GAAA,IACA7Y,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAkZ,GAAA,IACA7Y,UAIAxE,IAAAk3C,YAAA9P,MAAAsnF,UAAA1uH,IAAAk3C,YAAA9P,MAAA40B,MAAAv3D,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4iB,MAAAujF,KACAhnH,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SAEA,CACAA,SAAA,QACAG,MAAAU,KAAAwB,QAAA2jB,gBAOA3pB,IAAAkG,MAAAkhC,MAAA,GAEApnC,IAAAkG,MAAAkhC,MAAAunF,aAAA3uH,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACA59B,SAAA,SACA43D,WAAA,EACAC,WAAA,EACAozD,eAAA,SACA/R,oBAAA,EACAgS,mBAAA,EACAC,kBAAA,KACAC,mBAAA,qCACAC,gBAAA,EACAC,UAAA,EACAC,QAAA/sH,EAAAu4C,KACAghB,UAAAv5D,EAAAu4C,KACAy0E,OAAAhtH,EAAAu4C,KACA00E,YAAA,EACAC,UAAA,EACA9zE,KAAA,MAEAtD,OAAA,CACAq3E,kCAAA,0BAEAC,uBAAA,SAAA1tH,GACAA,EAAA43C,kBAEA,mBAAAj1C,KAAAwB,QAAAwpH,wBACAhrH,KAAAwB,QAAAwpH,0BAGAC,OAAA,SAAAroF,GACA,IAAAsoF,EAAA/rH,EAGAA,EAFAa,KAAAwB,QAAAqpH,UACAK,EAAA1vH,IAAA+Q,UAAAkU,SAAAK,MACA,aAEAoqG,EADAlrH,KAAAwB,QAAAopH,WACApvH,IAAA+Q,UAAAkU,SAAAG,MAGAplB,IAAA+Q,UAAAkU,SAAAkP,IAFA3vB,KAAAwB,QAAArC,UAMA,IAAAyL,EAAApP,IAAAC,QAAA2D,WAAA+gB,YAAAhhB,EAAA,CACAqhB,QAAA0qG,IAIA,GAFAtgH,KAAA,IAAAA,EAAA5I,QAAA,KAAA,IAAA,KAAA,UAAAhC,KAAAwB,QAAAu1C,KAEA,IAAAp5C,EAAAC,KAAAglC,GAAA,CACA,IAAAkI,EAAAlI,EAAA,GACA,GAAA,EAAAjlC,EAAAC,KAAAktC,EAAAqgF,WAAArgF,EAAAqgF,WAAArgF,EAAA/tC,KAAA,CACA,IAAAquH,EAAAtgF,EAAAqgF,SAAA7sH,QAAA,IAAAwsC,EAAA/tC,KAAA,IACA,EAAAY,EAAAC,KAAAwtH,KACAxgH,GAAA,OAAA6X,mBAAA2oG,KAIA,OAAAxgH,GAEAqpC,aAAA,WACA,OAAAj0C,KAAAwB,QAAAu1C,OACA/2C,KAAAwB,QAAAu1C,KAAAv7C,IAAAC,QAAA4hB,QAEA,MAAArd,KAAA0tD,aACA1tD,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAA9P,MAAA40B,QAGAxjB,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,QACAksD,WAAA1tD,KAAA0tD,WACA3W,KAAA,cAAA/2C,KAAAwB,QAAAu1C,OAGAxC,YAAA,WACAv0C,KAAAwB,QAAAw1D,YACAh3D,KAAAwB,QAAA4oH,eAAA,IACApqH,KAAAwB,QAAA+iB,QAAA/oB,IAAAC,QAAA4oB,WAAAC,aAEA,IAAA+mG,EAAA1tH,EAAAshB,IAAAjf,KAAAwB,QAAA8oH,kBAAA,SAAAzC,GACA,MAAA,IAAAA,EAAAjlH,gBAWA,GATA5C,KAAAwB,QAAA8pH,gBAAA3tH,EAAAupB,SAAAlnB,KAAAwB,QAAA,CACArB,IAAAxC,EAAAgC,KAAAK,KAAAirH,OAAAjrH,MACAurH,qBAAAvrH,KAAAtC,IAAA,GACA8tH,YAAA,KACAC,cAAA,EAAA9tH,EAAAC,KAAAytH,GAAAA,EAAA9oG,KAAA,KAAA,OAGAviB,KAAA0rH,iBAEA1rH,KAAAwB,QAAAu1D,UAAA,CACA,IAAA40D,EAAA,mBAAA3rH,KAAAwB,QAAAwpH,uBACA/yE,EAAA96C,EAAA,wBACA6C,KAAAtC,IAAAoD,OAAAm3C,GAEA,EAAAt6C,EAAAC,KAAAoC,KAAAwB,QAAA8oH,oBACAryE,EAAAn3C,OAAA3D,EAAA,SAAA,CACAwd,MAAA,0BACA7Z,OAAA,wCAAAd,KAAAwB,QAAA8oH,kBAAA/nG,KAAA,MAAAviB,KAAAwB,QAAAoqH,UAAAD,EAAA,KAAA,MAGA3rH,KAAAwB,QAAAoqH,UACA3zE,EAAAn3C,OAAA3D,EAAA,SAAA,CACAwd,MAAA,0BACA7Z,OAAA,+BAAAd,KAAAwB,QAAAoqH,UAAAD,EAAA,KAAA,MAGAA,GACA1zE,EAAAn3C,OAAA3D,EAAA,SAAA,CACAwd,MAAA,0BACA7Z,OAAA,mHAIA4qH,eAnHA,WAoHA,EAAA1rH,KAAA7C,EAAA,eAAA6C,KAAAwB,QAAAu1C,MAAAr6C,SACAsD,KAAA6rH,SAAA,IAAAC,SAAA,eAAA9rH,KAAAwB,QAAAu1C,KAAA/2C,KAAAwB,QAAA8pH,iBACAtrH,KAAA6rH,SAAA/yG,GAAA,WAAAnb,EAAAgC,KAAA,SAAAmrC,GACA9qC,KAAAwB,QAAA62G,oBACAr4G,KAAA+rH,WAAAjhF,GAEA,YAAAA,EAAA3V,OACAn1B,KAAAk3D,UAAApsB,GACA,UAAAA,EAAA3V,SACA,EAAAx3B,EAAAC,KAAAoC,KAAAwB,QAAA8pH,gBAAAG,iBAAA9tH,EAAA8yD,SAAAzwD,KAAAwB,QAAA8pH,gBAAAG,cAAA,SAAA5D,GACA,OAAA/8E,EAAA/tC,KAAA6F,cAAAZ,QAAA6lH,OAEA7nH,KAAA+rH,WAAAjhF,GACA9qC,KAAAu4D,UAAA,8CAGAv4D,KAAA0qH,QAAA5/E,KAEA9qC,OACAA,KAAA6rH,SAAA/yG,GAAA,OAAAnb,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAmpH,QACA3qH,KAAAwB,QAAAmpH,UAEA3qH,SAGAu4D,UAAA,SAAA99C,GAAA,IAAA40B,EAAA,EAAAjlC,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,IAcA,OAbApK,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAA7C,EAAA,gBAAA,CACA4D,KAAA,SACAs9C,aAAA,CAAA,uBAAA,aAAA,SAAA,SAAA,qBACAp3B,MAAA,2BACAk1C,KAAA1hD,EACAwxB,UAAA,EACAuwB,UAAA,CACAI,GAAA,SACAE,IAAA,WAEAztB,QAAAA,IAGArvC,KAAAglE,YAEAgnD,YAAA,WACA,OAAA,MAAAhsH,KAAA6rH,UAAA,EAAAluH,EAAAC,KAAAoC,KAAA6rH,SAAAI,kBAAAtuH,EAAAC,KAAAoC,KAAA6rH,SAAAK,sBAEA1zD,WAAA,WACA,MAAAx4D,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,WAGA4oE,WAAA,SAAAjhF,GACA,MAAA9qC,KAAA6rH,UACA7rH,KAAA6rH,SAAAE,WAAAjhF,GAGA,MAAA9qC,KAAA0tD,YAAA,MAAA5iB,EAAAyD,OACAvuC,KAAA0tD,WAAAnxD,OAAAuuC,EAAAyD,QAGAm8E,QAAA,SAAAtqH,GACAJ,KAAAwB,QAAAkpH,QAAAtqH,IAEA82D,UAAA,SAAA92D,GAAA,IAAA+rH,EACAhuG,EAAAylC,KAAAv3C,MAAAjM,EAAA0D,IAAAlE,UACAue,EAAAphB,KAAA,QAAAovH,EAAAhuG,EAAA0mE,gBAAA,IAAAsnC,EAAAA,EAAAhuG,EAAAphB,KACAiD,KAAAwB,QAAA01D,UAAA/4C,EAAA/d,MAIA5E,IAAAkG,MAAAkhC,MAAAk0B,iBAAAt7D,IAAAkG,MAAAkhC,MAAAunF,aAAAlqH,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsW,aAAA,CACA+4E,SAAA,IAAA5wH,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BACAsvF,SAAA,IAAA7wH,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BAEA9V,MAAA,OACAqlG,YAAA,EACAC,SAAA,EACAptH,SAAA,SACA43D,WAAA,EACAC,WAAA,EACAg/C,SAAA,EACAoU,eAAA,SACA/R,oBAAA,EACAgS,mBAAA,EACAC,kBAAA,KACAC,mBAAA,qCACA9jB,gBAAA,EACA+lB,2BAAA,EACAhC,gBAAA,EACAC,UAAA,EACAgC,eAAA,EACA/B,QAAA/sH,EAAAu4C,KACAghB,UAAAv5D,EAAAu4C,KACAw2E,mBAAA/uH,EAAAu4C,KACAy0E,OAAAhtH,EAAAu4C,KACAkhB,SAAA,KACA0L,YAAAnlE,EAAAu4C,KACAgsB,sBAAA,IACAyqD,mBAAA,EACA/B,YAAA,EACAC,UAAA,EACA+B,UAAA,EACAC,aAAA,EACAC,aAAAnvH,EAAAu4C,KACAoT,QAAA,KACAyjE,UAAA,KACAC,mBAAA,KACAC,mBAAA,EACAC,iBAAA,KACAj2D,cAAA,OACA20D,SAAA,KACAuB,cAAA,MAEA15E,OAAA,CACA25E,4BAAA,WACAC,uBAAA,cACAC,+BAAA,eACAC,6BAAA,aACAC,sBAAA,mBACAC,wBAAA,WACAC,sBAAA,cACAC,uCAAA,+BACA7C,kCAAA,0BAEA8C,iBAAA,SAAAvwH,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAEA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,cAEA/hF,EAAAntC,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,SAEA,MADAuuB,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAEA,OAAA,EAGA,OAAA,KAIA,IAAA5E,IAAAkG,MAAAkhC,MAAAirF,kBAAA,CACAt/E,MAAAzD,EACAgjF,qBAAA9tH,KAAA0tD,WAAA1tD,KAAA0tD,WAAAtf,YAAA,KACA+qB,OAAAx7D,EAAAgC,KAAA,SAAAijC,GACA,IAAAmrF,EAAA,MAAAnrF,EAAA,GAAA1iB,IAAA,sBAAAlgB,KAAA0tD,WAAAxtC,IAAA0iB,EAAA,GAAA1iB,IAAA,uBAAA,KAEA,MAAA6tG,GACAA,EAAA3J,SAAAxxE,IAAAhQ,GAGA5iC,KAAA0tD,WAAA9a,IAAAhQ,GACA5iC,KAAAwB,QAAAsrH,cACA9sH,KAAAwB,QAAAsrH,gBAEA9sH,SAGA8zC,kBAAA,WACA9zC,KAAAwB,QAAAu1C,KAAAv7C,IAAAC,QAAA4hB,OAEA,IAAA0gF,EAAA,KACA,MAAAviG,IAAAiC,IAAA0jB,QAAA6D,QACA+4E,EAAAviG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YACA,MAAAh7D,IAAAiC,IAAA0jB,UACA48E,EAAAviG,IAAAiC,IAAA0jB,QAAAq1C,aAEA,MAAAunC,IACA/9F,KAAAwB,QAAA8qH,WAAAvuB,EAAAtnC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAs3D,8BAGAtC,eAvGA,WAwGA1rH,KAAAwB,QAAA+qH,SACAvsH,KAAA7C,EAAA,gBAAA+c,SAAA,qBAGA,SAAAla,KAAAwB,QAAAylB,MAAArkB,cACA5C,KAAA7C,EAAA,gBAAA+c,SAAA,oBAEAla,KAAA7C,EAAA,gBAAA+c,SAAA,oBAGAla,KAAAwB,QAAAu1D,YACA/2D,KAAA6rH,SAAA,IAAAC,SAAA9rH,KAAA7C,EAAA,eAAA6C,KAAAwB,QAAAu1C,MAAA,GAAAp5C,EAAAsC,OAAAD,KAAAwB,QAAA8pH,gBAAA,CACAM,SAAA5rH,KAAAwB,QAAAoqH,SACAqC,iBAAAtwH,EAAAgC,KAAA,SAAAmrC,GACA9qC,KAAA+rH,WAAAjhF,GACA9qC,KAAAu4D,UAAA,2BACAv4D,MACAkuH,UAAAvwH,EAAAgC,KAAA,SAAAmrC,GACA,GAAA9qC,KAAAwB,QAAAoqH,UAAAjuH,EAAAC,KAAAD,EAAA2uC,OAAAtsC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,YAAAquB,EAAAruB,IAAA,cACAlgB,QAAAA,KAAAwB,QAAAoqH,SAGA,OAFA5rH,KAAA+rH,WAAAjhF,QACA9qC,KAAAu4D,UAAA,0BAGA,IAYAw1D,EAZAI,EAAA,IAAAnuH,KAAA0tD,WAAAnf,MAAA,CACAxxC,KAAA+tC,EAAA/tC,KACAo4B,OAAA,YAGA,MAAA35B,IAAAiC,IAAA0jB,QAAA0D,QACAspG,EAAA/gF,IAAA,YAAA5xC,IAAAiC,IAAA0jB,QAAA0D,QAAA+qB,UACA,MAAAp0C,IAAAiC,IAAA0jB,QAAA+4B,MACAi0E,EAAA/gF,IAAA,YAAA5xC,IAAAiC,IAAA0jB,QAAA+4B,KAAAtK,UAGA5vC,KAAAwB,QAAA4sH,iBAUA,OAPAL,EADA,mBAAA/tH,KAAAwB,QAAA6sH,oBACAruH,KAAAwB,QAAA6sH,oBAAAF,GAEAxwH,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAA8qB,GACA,OAAAA,EAAA5qB,IAAA,UAAAiuG,EAAAjuG,IAAA,UAAA4qB,EAAA5qB,IAAA,YACA,MAAA4qB,EAAA5qB,IAAA,uBAAA4qB,EAAA5qB,IAAA,wBAAA4qB,EAAAhuC,QAIAqxH,EAAA/gF,IAAA,qBAAA2gF,EAAAjxH,MAIAqxH,EAAArjF,KAAAA,GACAyD,MAAA4/E,EACAnuH,KAAA0tD,WAAA9a,IAAAu7E,GACArjF,EAAAwjF,gBAAAtuH,KAAAuuH,WAAAJ,EAAA,SAAAnuH,KAAAwB,QAAAylB,MAAArkB,eACAkoC,EAAAwjF,gBAAAp0G,SAAA,oBACA4wB,EAAA0jF,eAAA1jF,EAAAwjF,gBAAA,IACAtuH,MACAyuH,UAAA,SAAA3jF,EAAA47E,GACA,MAAA57E,EAAAwjF,iBACAxjF,EAAAwjF,gBAAAz2G,KAAA,uBAAAvX,KAAA,MAAAomH,IAGAgI,eAAA,SAAA5jF,EAAAm2C,GAWA,GAVAn2C,EAAAwjF,gBAAAt0G,YAAA,UAEA8wB,EAAAyD,MAAAruB,IAAA,YAAA4qB,EAAA3V,SACA2V,EAAAyD,MAAAnB,IAAA,SAAAtC,EAAA3V,QACAn1B,KAAAwB,QAAAkrH,mBAAA5hF,IAMA,cAAAA,EAAA3V,QAAA8rD,EAAA,KAAA,YAAAn2C,EAAA3V,OAAA,CACA2V,EAAA6jF,aAAAnpH,KAAAopH,KAAA3tC,GACA,IAAAzyD,EAAAsc,EAAA6jF,aAAA7jH,WAAA,IACAggC,EAAAwjF,gBAAAz2G,KAAA,wCAAAha,IAAA,QAAA2wB,GAAA/sB,KAAA+sB,KAGAi4B,KAAA9oD,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAmpH,QACA3qH,KAAAwB,QAAAmpH,UAEA3qH,MACAi9D,SAAAt/D,EAAAgC,KAAA,SAAAmrC,GAGA,GAFAA,EAAAyD,MAAAnB,IAAA,SAAAtC,EAAA3V,QACAn1B,KAAAwB,QAAAkrH,mBAAA5hF,GACA,YAAAA,EAAA3V,OAAA,CACA2V,EAAAwjF,gBAAAt0G,YAAA,aAAAE,SAAA,YAEA4wB,EAAAyD,MAAAm4E,QAAA57E,EAAA+jF,QACA,IACAC,EAAAC,EAAAC,EAOAC,EAAAC,EAAAC,EAUAC,EAlBAxvH,EAAAgkD,KAAAv3C,MAAAy+B,EAAAhnC,IAAAlE,UACA,GAAAI,KAAAwB,QAAAqpH,UAAA,WAAA7qH,KAAAwB,QAAArC,WAAAa,KAAAwB,QAAAqpH,SACA//E,EAAAyD,MAAAnB,IAAA,CACAiiF,SAAAzvH,EAAAyvH,SACAtyH,KAAA,QAAA+xH,EAAA,QAAAC,EAAAnvH,EAAA7C,YAAA,IAAAgyH,EAAAA,EAAAnvH,EAAAilF,gBAAA,IAAAiqC,EAAAA,EAAA,QAAAE,EAAApvH,EAAA0vH,gBAAA,IAAAN,OAAA,EAAAA,EAAAnqC,UACA,CACA/1C,QAAA,SAGAhE,EAAAyD,MAAAnB,IAAA,CACApuC,OAAAY,EAAAZ,OACAjC,KAAA,QAAAkyH,EAAA,QAAAC,EAAAtvH,EAAA7C,YAAA,IAAAmyH,EAAAA,EAAAtvH,EAAAilF,gBAAA,IAAAoqC,EAAAA,EAAA,QAAAE,EAAAvvH,EAAA0vH,gBAAA,IAAAH,OAAA,EAAAA,EAAAtqC,UACA,CACA/1C,QAAA,IAIA,IAAA9uC,KAAAwB,QAAAqpH,UAAA,WAAA7qH,KAAAwB,QAAArC,SAEA,UAAA3D,IAAAC,QAAAqW,cAAAC,YAAAnS,GACAjC,EAAAuhB,KAAAtf,EAAA,SAAA2vH,GACAA,EAAAhG,SACAvpH,KAAA0tD,WAAA9a,IAAA28E,GAEAH,EAAAG,GAEAvvH,MAEAovH,EAAAxvH,EAEAkrC,EAAAyD,MAAAnB,IAAAgiF,EAAA,CACAtgF,QAAA,IAIA,EAAAhE,EAAAyD,MAAAzxC,IACAguC,EAAAwjF,gBAAAz2G,KAAA,0BAAAmC,YAAA,UAGAha,KAAAk3D,UAAApsB,QACA,GAAA,UAAAA,EAAA3V,OAAA,CACA,GAAA,EAAAx3B,EAAAC,KAAAoC,KAAAwB,QAAA8pH,gBAAAG,iBAAA9tH,EAAA8yD,SAAAzwD,KAAAwB,QAAA8pH,gBAAAG,cAAA,SAAA5D,GACA,OAAA/8E,EAAA/tC,KAAA6F,cAAAZ,QAAA6lH,KAEA7nH,KAAA+rH,WAAAjhF,GACA9qC,KAAAu4D,UAAA,iDACA,CACA,IAAAi3D,EAAA1kF,EAAAyD,MAAAruB,IAAA,YAEA,GADAsvG,EAAA,MAAAA,EAAAA,EAAA,GAEA1kF,EAAAwjF,gBAAAt0G,YAAA,aAAAE,SAAA,WAEA4wB,EAAAyD,MAAAnB,IAAA,UAAA,GACA,IAAA+4E,KAAA,CAAAr7E,GAAAA,EAAA/tC,KAAA,CAAAgE,KAAA+pC,EAAA/pC,OACAf,KAAA6rH,SAAA4D,WAAA3kF,IAIA9qC,KAAA0qH,QAAA5/E,KAEA9qC,UAKAA,KAAA0vH,eAEAA,YAvQA,WAwQA1vH,KAAAwB,QAAAu1D,WACA/2D,KAAA2vH,sBAGAhyH,EAAAuhB,KAAAvhB,EAAAwpD,OAAAxpD,EAAA2uC,OAAAtsC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,eACAviB,EAAAgC,KAAA,SAAA4uC,GACA,OAAAvuC,KAAAwB,QAAA2lD,OACA5Y,EAAAruB,IAAAlgB,KAAAwB,QAAA2lD,QAEAnnD,KAAAwB,QAAAy1D,eAAA,QAAAj3D,KAAAwB,QAAAy1D,cAAAr0D,cACA2rC,EAAAzxC,IAEAyxC,EAAAzxC,IACAkD,OAAArC,EAAAgC,KAAA,SAAA4uC,GACA,IAAAqhF,EAAArhF,EAGAvuC,KAAAwB,QAAAqrH,cACA,MAAAt+E,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,QACA4vG,EAAAjyH,EAAAib,IAAA21B,EAAA61E,SAAApkG,OAAA,SAAAkrD,GAAA,OAAAA,EAAAhrD,IAAA,aACA,EAAAquB,EAAAruB,IAAA,aACA0vG,EAAA,OAIA,MAAAA,GACA5vH,KAAAuuH,WAAAqB,IAEA5vH,OACAxE,IAAAiC,IAAA6jE,WAAA5H,UAEA60D,WAxSA,SAwSAzjF,GAAA,IACA+kF,EADAzzD,EAAA,EAAAhyD,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAGAylH,EADA,SAAA7vH,KAAAwB,QAAAylB,MAAArkB,cACA5C,KAAAwB,QAAA6xC,aAAAg5E,SAEArsH,KAAAwB,QAAA6xC,aAAA+4E,SAEA,IAkBA3vD,EAlBAqzD,EAAAt0H,IAAAivC,WAAAe,iBAAAW,cAAA0jF,EAAA,CACAthF,MAAAzD,EACA6hF,kBAAA3sH,KAAAwB,QAAAmrH,kBACA31D,UAAAh3D,KAAAwB,QAAAw1D,UACAg/C,QAAAh2G,KAAAwB,QAAAw0G,QACAgS,QAAAl9E,EAAAk9E,UACAvB,SAAA37E,EAAA07E,eACAtkD,sBAAAliE,KAAAwB,QAAA0gE,sBACA0qD,SAAA5sH,KAAAwB,QAAAorH,SACAC,YAAA7sH,KAAAwB,QAAAqrH,YACAzI,SAAApkH,KAAAwB,QAAA4iH,SAAApkH,KAAAwB,QAAA4iH,SAAA,OAmBA,OAjBApkH,KAAAwB,QAAAu1D,YAAA/2D,KAAA7C,EAAA,eAAA2a,SAAA,oBACAg4G,EAAA51G,SAAA,UACAla,KAAA2vH,oBAAAhyH,EAAAgC,KAAA,WACAmwH,EAAA91G,YAAA,WACAha,QAIAy8D,EADAz8D,KAAAwB,QAAA8qH,YAAA,EAAAxhF,EAAAhuC,GACAkD,KAAA7C,EAAA,6BAEA6C,KAAA7C,EAAA,oBAEAi/D,EACAK,EAAA/vB,QAAAojF,GAEArzD,EAAA37D,OAAAgvH,GAEAA,GAEAH,oBAAA,WAAA,IAAA92G,EAAA,EAAAzO,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAAzM,EAAAu4C,KACA65E,EAAA/vH,KAAA7C,EAAA,eACA6yH,EAAA,iBACAC,EAAA,CACAlyH,OAAA,QAGAiC,KAAAwB,QAAAirH,gBACAwD,EAAA3uC,MAAA,SAEAthF,KAAAwB,QAAA8qH,YAAA,EAAAtsH,KAAA0tD,WAAAhxD,QAEA,MAFAsD,KAAA0tD,WAAA3b,UAAA,SAAAhE,GACA,OAAAA,EAAAb,WAEAltC,KAAA7C,EAAA,gBAAA6c,YAAA,gBACA+1G,EAAAj4G,SAAA,kBAYAe,IAXAk3G,EAAA71G,SAAA81G,GAAAhzD,QAAAizD,EAAA,IAAAtyH,EAAAgC,KAAA,WACAowH,EAAAlyH,IAAAoyH,GAAAxuH,KAAA,mHACAzB,KAAAwB,QAAAirH,gBACAsD,EAAAG,WAAA,QACAH,EAAAlyH,IAAA,QAAA,SAEA,MAAAgb,GACAA,KAEA7Y,OAAAka,SAAA81G,KAKAD,EAAAtuH,KAAA,iCACA,MAAAoX,GACAA,MAIAs3G,6BAAA,SAAA9yH,GACA,IAAA7B,IAAAkG,MAAAg/B,SAAA0vF,iBAAA,CACAj3D,OAAAx7D,EAAAgC,KAAA,SAAAijC,GACAjlC,EAAAuhB,KAAA0jB,EAAA,SAAAkI,GACA,IAAAqjF,EAAA,IAAA3yH,IAAAwkB,OAAA4iB,MAAAujF,KAAAr7E,EAAA8E,UACAu+E,EAAAjuG,IAAA,cACA,EAAAiuG,EAAAjuG,IAAA,cACAiuG,EAAA/gF,IAAA,WAAA+gF,EAAAjuG,IAAA,cAEAiuG,EAAA/gF,IAAA,eAAA,MACAptC,KAAA0tD,WAAA9a,IAAAu7E,GACAnuH,KAAAwB,QAAA01D,UAAAi3D,KAEAnuH,MACAA,KAAA+rC,UACA/rC,SAGAqwH,SAAA,SAAAhzH,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAGA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,aACAlvH,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,QAAA,CACA,IAAAswG,EAAA/hF,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QACA,GAAA,MAAAkwH,EAEA,OADAxlF,EAAAwlF,GACA,EAGA,OAAA,IAIA90H,IAAAiC,IAAAo2B,KAAA08F,kBAAA,CACAhiF,MAAAzD,EACA4iB,WAAA1tD,KAAA0tD,WACAsJ,UAAAh3D,KAAAwB,QAAAw1D,UACAI,SAAAz5D,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,SAGAwwH,YAAA,SAAAnzH,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAgBA,GAbA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,aACAlvH,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,QAAA,CACA,IAAAswG,EAAA/hF,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QACA,GAAA,MAAAkwH,EAEA,OADAxlF,EAAAwlF,GACA,EAGA,OAAA,IAIAxlF,EAAA5qB,IAAA,WAAA,EAAA,CACA,IAAAqkG,EAAA,IAAA/oH,IAAAwkB,OAAA6kG,SAAAC,QAAA,CACAv1C,WAAAzkC,EAAA5qB,IAAA,aAEAqkG,EAAA14E,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACA,IAAAnE,IAAAkG,MAAAmjH,SAAA4L,cAAA,CACAliF,MAAAg2E,EACAj7D,QAAAtpD,KAAAwB,QAAA8nD,QACAyjE,UAAA/sH,KAAAwB,QAAAurH,UACA2D,sBAAA,EACAC,cAAA,EACA1D,kBAAAjtH,KAAAwB,QAAAyrH,kBACAD,mBAAAhtH,KAAAwB,QAAAwrH,mBACAE,iBAAA,MAAAltH,KAAAwB,QAAA0rH,iBAAAltH,KAAAwB,QAAA0rH,iBAAAltG,OAAA,QAEAhgB,aAGA,IAAAxE,IAAAkG,MAAAkhC,MAAAguF,WAAA,CACAriF,MAAAzD,KAIA8vD,aAAA,SAAAv9F,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAgBA,GAbA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,aACAlvH,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,QAAA,CACA,IAAAswG,EAAA/hF,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QACA,GAAA,MAAAkwH,EAEA,OADAxlF,EAAAwlF,GACA,EAGA,OAAA,IAIA,MAAAxlF,EAAAs5E,UAAA,EAAAzmH,EAAAC,KAAAktC,EAAAs5E,SAAApkG,QAIA,OAHA8qB,EAAAs5E,SAAAj9D,OAAA,SAAA+jB,GACA,OAAAA,EAAApuE,KACA,GACAioH,WAEAj6E,EAAAi6E,YAEA8L,YAAA,WACA7wH,KAAA0tD,WAAAq3D,YAEA+L,gBAAA,SAAAzzH,GACA2C,KAAAwB,QAAA4iH,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,yBAAAta,KAAA,QACA2kH,YAEAgM,SAAA,SAAA1zH,GAAA,IAAA2zH,EAAAhxH,KACA8qC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAGA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,cACA/hF,EAAAntC,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,SAEA,MADAuuB,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAEA,OAAA,EAGA,OAAA,KAIA,IAAA5E,IAAAkG,MAAA2lC,WAAA4pF,gBAAA,CACA1iF,MAAAzD,EACAomF,YAAA,EACAxjE,WAAA1tD,KAAA0tD,WACAyjE,cAAA,EACAh4D,OAAA,WACA63D,EAAAjlF,SAEA,mBAAAilF,EAAAxvH,QAAA2rH,eACA6D,EAAAxvH,QAAA2rH,cAAAriF,OAKAsmF,WAAA,SAAA/zH,GACA,IAAAg0H,EAAAl0H,EAAAE,EAAAgc,eAAAqB,QAAA,iBACAowB,EAAA9qC,KAAA0tD,WAAAxtC,IAAAmxG,EAAAjxH,KAAA,QAGA,MAAA0qC,GAAA9qC,KAAAwB,QAAAqrH,cACA/hF,EAAAntC,EAAAka,KAAA7X,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,GAAA,MAAAA,EAAA61E,UAAA,EAAAzmH,EAAAC,KAAA2wC,EAAA61E,SAAApkG,SAEA,MADAuuB,EAAA61E,SAAAlkG,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QAEA,OAAA,EAGA,OAAA,KAIA,mBAAAJ,KAAAwB,QAAA41D,SACAp3D,KAAAwB,QAAA41D,SAAAtsB,EAAAntC,EAAAgC,KAAA,WACA0xH,EAAA90H,SACAyD,KAAAwB,QAAAshE,eACA9iE,QAEA8qC,EAAAqY,UACAkuE,EAAA90H,SACAyD,KAAAwB,QAAAshE,kBAKAtnE,IAAAkG,MAAAkhC,MAAAkjF,iBAAAtqH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsW,aAAA,CACAl3C,QAAA,IAAAX,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,+BAEAu0F,sBAAA,IACAhM,eAAA,MAEA7xE,OAAA,CACA89E,6BAAA,cACAC,0BAAA,WACAC,mBAAA,eACAC,2BAAA,aAEAz6E,mBAAA,WACA,EAAAj3C,KAAAwB,QAAA8jH,iBACAtlH,KAAA2xH,WAAA,EACA3xH,KAAA4xH,YAAA1gF,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA2xH,WAAA,EACA,IAAAx8F,EAAAn1B,KAAAuuC,MAAAruB,IAAA,WACAlgB,KAAAuuC,MAAAruB,IAAA,YAAAiV,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAA5Q,UAAA+C,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAM,iBACAtjC,KAAA6xH,cACA7xH,KAAA8xH,iBAEA9xH,MAAA,IAAAA,KAAAwB,QAAA8jH,kBAGAtxE,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAg3E,UAAAvlH,KAAAwB,QAAA+jH,UACAC,UAAAxlH,KAAAwB,QAAAgkH,YAGAjxE,YAAA,WACAv0C,KAAA+xH,gBACA/xH,KAAAgyH,kBAEAA,eAAA,WACA,IAAA78F,EAAAn1B,KAAAuuC,MAAAruB,IAAA,WACAlgB,KAAAuuC,MAAAruB,IAAA,YAAAiV,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAA5Q,UAAA+C,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAM,eAMAnO,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAC,KAAA9N,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAE,QAAA/N,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAG,YACAnjC,KAAAiyH,mBAAA/gF,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAuuC,MAAA1C,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAAgyH,kBACAhyH,MACAmsB,KAAAxuB,EAAAgC,KAAA,SAAA4uC,EAAA3jC,GACA5K,KAAAuuC,MAAAnB,IAAA,SAAA5xC,IAAA+Q,UAAAq2B,MAAAI,UAAAK,QACArjC,KAAA+xH,gBACAv2H,IAAAonC,MAAAyiF,mBAAA,CACA92E,MAAAA,EACA3jC,OAAAA,KAEA5K,SAEAA,MAAAA,KAAAwB,QAAA8vH,uBACAn8F,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAI,WAAAjO,IAAA35B,IAAA+Q,UAAAq2B,MAAAI,UAAAK,QACArjC,KAAA+xH,gBAtBA/xH,KAAA2xH,UACA3xH,KAAA+xH,gBAEA/xH,KAAA6xH,eAsBAE,cAAA,WACA,IAAAG,EAAA,GACA,MAAA12H,IAAAiC,IAAA0jB,QAAA+4B,KACAg4E,EAAA12H,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,SACA,MAAA1kB,IAAAiC,IAAA0jB,QAAA0D,UACAqtG,EAAA12H,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,UAEAlgB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAl3C,QAAA6D,KAAA7C,EAAA,qBAAA,CACAoxC,MAAAvuC,KAAAuuC,MACA2jF,aAAAA,EACAP,UAAA3xH,KAAA2xH,WACAh0H,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAruB,IAAA,YAAA1kB,IAAA+Q,UAAAq2B,MAAAI,UAAAI,WAAApjC,KAAAuuC,MAAAruB,IAAA,YAAA1kB,IAAA+Q,UAAAq2B,MAAAI,UAAAK,OACArjC,KAAA7C,EAAA,sBAAAg/D,KAAA,SAEA,IAAA3gE,IAAAigE,OAAAz7D,KAAA7C,EAAA,eAAA,CACA4D,KAAA,WAGAf,QAEA6xH,YAAA,WACA7xH,KAAA+5D,QAAA/5D,KAAAmyH,aACAnyH,KAAAmyH,YAAA,EAEAnyH,KAAAuuC,MAAAw2E,WAEA/kH,KAAAwB,QAAA+jH,UACAvlH,KAAA+xH,gBAEA/xH,KAAA64C,gBAIAu5E,aAAA,WACApyH,KAAA7C,EAAA,qBAAAsb,KAAA,WAAAzY,KAAA7C,EAAA,cAAAyE,MAAAI,QAAA,MAAA,IAEAqwH,SAAA,WACAryH,KAAA8xH,eACA9xH,KAAAuuC,MAAAu4E,gBAAA9mH,KAAA7C,EAAA,cAAAyE,QAEA0wH,UAAA,WAGAtyH,KAAA8xH,eACA9xH,KAAAuuC,MAAAruB,IAAA,YAAA1kB,IAAA+Q,UAAAq2B,MAAAI,UAAAG,aAEAnjC,KAAAuuC,MAAAwrB,UAGA+3D,aAAA,WACA9xH,KAAA+5D,QAAA,EACA,MAAA/5D,KAAAiyH,oBACAjhF,aAAAhxC,KAAAiyH,oBAEA,MAAAjyH,KAAA4xH,aACA5gF,aAAAhxC,KAAA4xH,gBAKAp2H,IAAAkG,MAAAkhC,MAAAsjF,kBAAA1qH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAsW,aAAA,CACAl3C,QAAA,IAAAX,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iCAGA0W,OAAA,CACA8+E,4BAAA,kBAEAh+E,YAAA,WACAv0C,KAAA+xH,iBAEAA,cAAA,WACA/xH,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAl3C,QAAA6D,KAAA7C,EAAA,eAAA,CACAoxC,MAAAvuC,KAAAuuC,OACA5wC,EAAAgC,KAAA,WACA,IAAAnE,IAAAigE,OAAAz7D,KAAA7C,EAAA,gBAAA,CACA4D,KAAA,UAEAf,KAAAuuC,MAAAruB,IAAA,WACAlgB,KAAA46F,eACA56F,KAAAuuC,MAAAruB,IAAA,cAAA,EAAAviB,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,QACAlgB,KAAA2nH,cAEA3nH,KAAAuuC,MAAAm5E,QAAA/pH,EAAAgC,KAAA,WACAK,KAAA46F,gBACA56F,QAEAA,QAEA46F,aAAA,WACA56F,KAAAwyH,WACAxyH,KAAAuuC,MAAAw2E,WACA/kH,KAAA64C,gBAGA8uE,YAAA,WACAz2E,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAo5E,YAAAhqH,EAAAgC,KAAA,SAAAS,GACAJ,KAAAuuC,MAAAnB,IAAAhtC,GACAA,EAAAslH,QAGA1lH,KAAA46F,eAFA56F,KAAA2nH,eAIA3nH,QACAA,MAAA,MAEAyyH,eAAA,WACAzyH,KAAAwyH,UAAA,KAIAh3H,IAAAkG,MAAAkhC,MAAAojF,qBAAAxqH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BACAsW,aAAA,CACAl3C,QAAA,IAAAX,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mCAEAu0F,sBAAA,IACAhM,eAAA,MAEA7xE,OAAA,CACAi/E,iCAAA,cACAC,8BAAA,WACAC,uBAAA,eACAC,+BAAA,aAEA57E,mBAAA,WACA,EAAAj3C,KAAAwB,QAAA8jH,iBACAtlH,KAAA2xH,WAAA,EACA3xH,KAAA4xH,YAAA1gF,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA2xH,WAAA,EACA,IAAAx8F,EAAAn1B,KAAAuuC,MAAAruB,IAAA,UACAlgB,KAAAuuC,MAAAruB,IAAA,YAAAiV,IAAA35B,IAAA+Q,UAAAs4G,SAAAiO,eAAA1gG,WACApyB,KAAAkkH,mBACAlkH,KAAA8xH,iBAEA9xH,MAAA,IAAAA,KAAAwB,QAAA8jH,kBAGAtxE,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAg3E,UAAAvlH,KAAAwB,QAAA+jH,UACAC,UAAAxlH,KAAAwB,QAAAgkH,YAGAjxE,YAAA,WACAv0C,KAAA+xH,gBACA/xH,KAAA+yH,uBAEAA,oBAAA,WACA,IAAA59F,EAAAn1B,KAAAuuC,MAAAruB,IAAA,UACAlgB,KAAAuuC,MAAAruB,IAAA,YAAAiV,IAAA35B,IAAA+Q,UAAAs4G,SAAAiO,eAAA1gG,SACApyB,KAAA2xH,UACA3xH,KAAA+xH,gBAEA/xH,KAAAkkH,mBAEA/uF,IAAA35B,IAAA+Q,UAAAs4G,SAAAiO,eAAA5vF,QAAA/N,IAAA35B,IAAA+Q,UAAAs4G,SAAAiO,eAAA3vF,YACAnjC,KAAAiyH,mBAAA/gF,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAuuC,MAAA1C,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAK,KAAA+yH,uBACA/yH,MACAmsB,KAAAxuB,EAAAgC,KAAA,SAAA4uC,EAAA3jC,GACA5K,KAAAuuC,MAAAnB,IAAA,SAAA5xC,IAAA+Q,UAAAs4G,SAAAiO,eAAAzvF,QACArjC,KAAA+xH,gBACAv2H,IAAAonC,MAAAyiF,mBAAA,CACA92E,MAAAA,EACA3jC,OAAAA,KAEA5K,SAEAA,MAAAA,KAAAwB,QAAA8vH,uBACAn8F,IAAA35B,IAAA+Q,UAAAs4G,SAAAiO,eAAAzvF,QACArjC,KAAA+xH,iBAGAA,cAAA,WACA,IAAAG,EAAA,GACA,MAAA12H,IAAAiC,IAAA0jB,QAAA+4B,KACAg4E,EAAA12H,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,SACA,MAAA1kB,IAAAiC,IAAA0jB,QAAA0D,UACAqtG,EAAA12H,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,UAEAlgB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAl3C,QAAA6D,KAAA7C,EAAA,eAAA,CACAoxC,MAAAvuC,KAAAuuC,MACA2jF,aAAAA,EACAP,UAAA3xH,KAAA2xH,WACAh0H,EAAAgC,KAAA,WACAK,KAAAuuC,MAAAruB,IAAA,YAAA1kB,IAAA+Q,UAAAs4G,SAAAiO,eAAAzvF,QACArjC,KAAA7C,EAAA,0BAAAg/D,KAAA,UAEAn8D,QAEAkkH,iBAAA,WACAlkH,KAAA+5D,QAAA/5D,KAAAmyH,aACAnyH,KAAAmyH,YAAA,EAEAnyH,KAAAuuC,MAAAw2E,WACA/kH,KAAAwB,QAAA+jH,UACAvlH,KAAA+xH,gBAEA/xH,KAAA64C,gBAIAu5E,aAAA,WACApyH,KAAA7C,EAAA,yBAAAsb,KAAA,WAAAzY,KAAA7C,EAAA,kBAAAyE,MAAAI,QAAA,MAAA,IAEAqwH,SAAA,WACAryH,KAAA8xH,eACA9xH,KAAAuuC,MAAAu4E,gBAAA9mH,KAAA7C,EAAA,kBAAAyE,QAEA0wH,UAAA,WAGAtyH,KAAA8xH,eACA9xH,KAAAuuC,MAAAruB,IAAA,YAAA1kB,IAAA+Q,UAAAq2B,MAAAI,UAAAG,aAEAnjC,KAAAuuC,MAAAwrB,UAGA+3D,aAAA,WACA9xH,KAAA+5D,QAAA,EACA,MAAA/5D,KAAAiyH,oBACAjhF,aAAAhxC,KAAAiyH,uBAKAz2H,IAAAkG,MAAAkhC,MAAAowF,kBAAAx3H,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAA/b,MAAA,gBACAqyG,oBAAA,GACApb,OAAAl6G,EAAAu4C,KACA01E,SAAA,MAEAn4E,OAAA,CACAy/E,kBAAA,QAEAj8E,mBAAA,WACAj3C,KAAA4iC,MAAA,IAAApnC,IAAAk3C,YAAA9P,MAAA40B,OAEAxjB,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAAw6E,aAAA,IAAAh/E,IAAAkG,MAAAkhC,MAAAk0B,iBAAAn5D,EAAAupB,SAAA,CACAutB,GAAAz0C,KAAA7C,EAAA,4BACAuwD,WAAA1tD,KAAA4iC,MACAzjC,SAAA,MAAAa,KAAAwB,QAAAwjB,QAAAxpB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,cACAG,MAAA,MAAAU,KAAAwB,QAAAxC,OAAAgB,KAAAwB,QAAAxC,OAAAkhB,IAAA,WAAA,QAEA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAA,MAAAU,KAAAwB,QAAAxC,OAAAgB,KAAAwB,QAAAxC,OAAAkhB,IAAA,WAAA,QAGAoqG,kBAAAtqH,KAAAwB,QAAA8oH,kBACAsB,SAAA5rH,KAAAwB,QAAAoqH,SACA3kG,MAAA,OACAiwC,UAAAv5D,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA0sH,mBAAA/uH,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA2qH,OAAAhtH,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA8iE,YAAAnlE,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,OACAA,KAAAwB,QAAAyxH,uBAEAE,YAAA,WACA,IAAAC,EAAA,EACAC,EAAA,EACA3+G,EAAA,EACA4+G,EAAA,EACA31H,EAAAuhB,KAAAlf,KAAA4iC,MAAA5iB,OAAA,SAAA8qB,GACA,OAAAA,EAAA5qB,IAAA,WACA,IAAA,SACAkzG,IACA,MACA,IAAA,YACAC,IACA,MACA,IAAA,UACA3+G,IACA,MACA,IAAA,QACA4+G,IAIA,IAAAC,EAAAp2H,EAAA,2CAAAi2H,EAAAtoH,WAAA,WACA,IAAAsoH,GACAG,EAAAr5G,SAAA,0BAGA,IAAAs5G,EAAAr2H,EAAA,6CAAAk2H,EAAAvoH,WAAA,WACA,IAAAuoH,GACAG,EAAAt5G,SAAA,0BAGA,IAKA9Z,EALAqzH,EAAAt2H,EAAA,6CAAAuX,EAAA5J,WAAA,WACA,IAAA4J,GACA++G,EAAAv5G,SAAA,0BAKA9Z,EADA,IAAAkzH,EACA,CAAAC,EAAAC,EAAAC,GAEA,CAAAF,EAAAC,EAAAC,EAAAt2H,EAAA,qCAAAm2H,EAAAxoH,WAAA,YAGA9K,KAAA7C,EAAA,wBAAA63C,QAAAl0C,OAAAV,IACAJ,OAEAN,KAAA,WACAM,KAAAw6E,aAAAwxC,cACA,IAAAxwH,IAAAkG,MAAAyzC,UAAA,CACAnvB,OAAA,kBACAovB,KAAA,wFACAI,gBAAA,EACAG,oBAAA,EACAG,uBAAA,EACAC,oBAAA,cACAC,0BAAA,SACAC,YAAAt4C,EAAAgC,KAAA,WACAK,KAAA64C,eACA74C,SAGAA,KAAA64C,cACA,mBAAA74C,KAAAwB,QAAAq2G,QACA73G,KAAAwB,QAAAq2G,OAAA73G,KAAA4iC,MAAA5iB,UAIA+5C,OAAA,WACA/5D,KAAA64C,iBAIAr9C,IAAAkG,MAAAkhC,MAAA8wF,qBAAAl4H,IAAAkG,MAAAkhC,MAAAowF,kBAAA/yH,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BACAuZ,SAAA,SAEA7C,OAAA,CACAkgF,6BAAA,cACAC,oBAAA,UAEA38E,mBAAA,WACA,MAAAj3C,KAAAwB,QAAAwjB,UACAhlB,KAAAwB,QAAAwjB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SAGAhlB,KAAA4iC,MAAA,IAAApnC,IAAAk3C,YAAA9P,MAAA40B,OAEAvjB,aAAA,WACAj0C,KAAAg0C,WAAA,CACAq7E,SAAArvH,KAAAqvH,SACA7tH,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACA,MAAAv0C,KAAAqvH,WACArvH,KAAAw6E,aAAA,IAAAh/E,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAAz0C,KAAA7C,EAAA,oBACAuwD,WAAA1tD,KAAA4iC,MACAgoF,YAAA,EACA3jG,MAAA,OACAiwC,UAAAv5D,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA0sH,mBAAA/uH,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA2qH,OAAAhtH,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,MACA8iE,YAAAnlE,EAAAgC,KAAAK,KAAAmzH,YAAAnzH,UAIAmzH,YAAA,WACA,IAAAU,EAAA,EAAAl2H,EAAAC,KAAAoC,KAAA7C,EAAA,wBAAAyE,OAEAkyH,EAAA,EADAn2H,EAAAC,KAAAoC,KAAA4iC,MAAA5iB,QAGAozG,EAAA,EACAC,EAAA,EACA3+G,EAAA,EACA/W,EAAAuhB,KAAAlf,KAAA4iC,MAAA5iB,OAAA,SAAA+tB,GACA,OAAAA,EAAA7tB,IAAA,WACA,IAAA,SACAkzG,IACA,MACA,IAAA,YACAC,IACA,MACA,IAAA,UACA3+G,IAIA,IAAA6+G,EAAAp2H,EAAA,2CAAAi2H,EAAAtoH,WAAA,WACA,IAAAsoH,GACAG,EAAAr5G,SAAA,0BAGA,IAAAs5G,EAAAr2H,EAAA,6CAAAk2H,EAAAvoH,WAAA,WACA,IAAAuoH,GACAG,EAAAt5G,SAAA,0BAIA,IAAAu5G,EAAAt2H,EAAA,wCAAAuX,EAAA5J,WAAA,WACA,IAAA4J,GACA++G,EAAAv5G,SAAA,0BAGAla,KAAA7C,EAAA,wBAAA63C,QAAAl0C,OAAA,CAAAyyH,EAAAC,EAAAC,KACAzzH,MACAA,KAAA7C,EAAA,eAAAsb,KAAA,YAAAo7G,IAAAC,GAAA9zH,KAAAw6E,aAAAwxC,gBAEA5uH,OAAA,WACA,IAAA22H,EAAA,CACAh3H,KAAAiD,KAAA7C,EAAA,wBAAAyE,MACAyiF,MAAArkF,KAAA7C,EAAA,yBAAAyE,MACAksC,YAAA9tC,KAAA4iC,MAAAgN,UAEA,IAAAp0C,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,eAGAiB,KAAA2zH,IAEAt0H,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACAJ,KAAAqvH,SAAAjvH,EAAAivH,SACA,MAAArvH,KAAAwB,QAAAwjB,SACAhlB,KAAAwB,QAAAwjB,QAAAooB,IAAA,SAAA,QAEAptC,KAAA+rC,UACA/rC,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACA5K,KAAAqvH,SAAA,EACArvH,KAAA+rC,SACA,IAAAvwC,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAynG,iBAAA,CACA5zH,KAAA2zH,EACAz/G,MAAA8X,EACAxhB,OAAAA,KAEA5K,UAIAxE,IAAAkG,MAAAkhC,MAAAqxF,uBAAAz4H,IAAAkG,MAAAkhC,MAAAunF,aAAAlqH,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAsW,aAAA,CACA+4E,SAAA,IAAA5wH,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,2BACAsvF,SAAA,IAAA7wH,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BAEA9V,MAAA,OACAslG,SAAA,EACAptH,SAAA,SACA43D,WAAA,EACAC,WAAA,EACAg/C,SAAA,EACAoU,eAAA,SACA/R,oBAAA,EACAiS,kBAAA,KACAC,mBAAA,qCACAC,gBAAA,EACAC,UAAA,EACAC,QAAA/sH,EAAAu4C,KACAghB,UAAAv5D,EAAAu4C,KACAw2E,mBAAA/uH,EAAAu4C,KACAy0E,OAAAhtH,EAAAu4C,KACAkhB,SAAA,KACA0L,YAAAnlE,EAAAu4C,KACAgsB,sBAAA,IACAyqD,mBAAA,EACA/B,YAAA,EACAgC,UAAA,EACAC,aAAA,GAEAp5E,OAAA,CACA25E,4BAAA,WACAE,+BAAA,eACAC,6BAAA,aACA2G,sBAAA,sBAEApgF,kBAAA,WACA,MAAA9zC,KAAA0tD,aACA1tD,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAA9P,MAAA40B,QAGAk0D,eA1CA,WA2CA1rH,KAAAwB,QAAA+qH,SACAvsH,KAAA7C,EAAA,gBAAA+c,SAAA,qBAGA,SAAAla,KAAAwB,QAAAylB,MAAArkB,cACA5C,KAAA7C,EAAA,gBAAA+c,SAAA,oBAEAla,KAAA7C,EAAA,gBAAA+c,SAAA,oBAGAla,KAAA6rH,SAAA,IAAAC,SAAA,eAAA9rH,KAAAwB,QAAAu1C,KAAAp5C,EAAAsC,OAAAD,KAAAwB,QAAA8pH,gBAAA,CACA4C,UAAAvwH,EAAAgC,KAAA,SAAAmrC,GACA,IAAAqjF,EAAA,IAAAnuH,KAAA0tD,WAAAnf,MAAA,CACAxxC,KAAA+tC,EAAA/tC,KACAo4B,OAAA,WAGA,MAAA35B,IAAAiC,IAAA0jB,QAAA0D,QACAspG,EAAA/gF,IAAA,YAAA5xC,IAAAiC,IAAA0jB,QAAA0D,QAAA+qB,UACA,MAAAp0C,IAAAiC,IAAA0jB,QAAA+4B,MACAi0E,EAAA/gF,IAAA,YAAA5xC,IAAAiC,IAAA0jB,QAAA+4B,KAAAtK,WAGAu+E,EAAArjF,KAAAA,GACAyD,MAAA4/E,EACAnuH,KAAA0tD,WAAA9a,IAAAu7E,GACArjF,EAAAwjF,gBAAAtuH,KAAAuuH,WAAAJ,EAAA,SAAAnuH,KAAAwB,QAAAylB,MAAArkB,eACAkoC,EAAAwjF,gBAAAp0G,SAAA,oBACA4wB,EAAA0jF,eAAA1jF,EAAAwjF,gBAAA,IACAtuH,MACAyuH,UAAA,SAAA3jF,EAAA47E,GACA,MAAA57E,EAAAwjF,iBACAxjF,EAAAwjF,gBAAAz2G,KAAA,uBAAAvX,KAAA,MAAAomH,IAGAgI,eAAA,SAAA5jF,EAAAm2C,GAWA,GAVAn2C,EAAAwjF,gBAAAt0G,YAAA,UAEA8wB,EAAAyD,MAAAruB,IAAA,YAAA4qB,EAAA3V,SACA2V,EAAAyD,MAAAnB,IAAA,SAAAtC,EAAA3V,QACAn1B,KAAAwB,QAAAkrH,mBAAA5hF,IAMA,cAAAA,EAAA3V,QAAA8rD,EAAA,KAAA,YAAAn2C,EAAA3V,OAAA,CACA2V,EAAA6jF,aAAAnpH,KAAAopH,KAAA3tC,GACA,IAAAzyD,EAAAsc,EAAA6jF,aAAA7jH,WAAA,IACAggC,EAAAwjF,gBAAAz2G,KAAA,wCAAAha,IAAA,QAAA2wB,GAAA/sB,KAAA+sB,KAGAi4B,KAAA9oD,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAmpH,QACA3qH,KAAAwB,QAAAmpH,UAEA3qH,MACAi9D,SAAAt/D,EAAAgC,KAAA,SAAAmrC,GACA,GAAA,YAAAA,EAAA3V,OAAA,CACA2V,EAAAwjF,gBAAAt0G,YAAA,aAAAE,SAAA,YAEA4wB,EAAAyD,MAAAm4E,QAAA57E,EAAA+jF,QACA,IAkBAO,EAlBAxvH,EAAAgkD,KAAAv3C,MAAAy+B,EAAAhnC,IAAAlE,UAiBA,GAhBAI,KAAAwB,QAAAqpH,SACA//E,EAAAyD,MAAAnB,IAAA,CACAiiF,SAAAzvH,EAAAyvH,SACAtyH,KAAA6C,EAAAilF,UACA,CACA/1C,QAAA,IAGAhE,EAAAyD,MAAAnB,IAAA,CACApuC,OAAAY,EAAAZ,OACAjC,KAAA6C,EAAA0vH,SAAAzqC,UACA,CACA/1C,QAAA,KAIA9uC,KAAAwB,QAAAqpH,UAAA,WAAA7qH,KAAAwB,QAAArC,SAEA,UAAA3D,IAAAC,QAAAqW,cAAAC,YAAAnS,GACAjC,EAAAuhB,KAAAtf,EAAA,SAAA2vH,GACAA,EAAAhG,SACAvpH,KAAA0tD,WAAA9a,IAAA28E,GAEAH,EAAAG,GAEAvvH,MAEAovH,EAAAxvH,EAEAkrC,EAAAyD,MAAAnB,IAAAgiF,EAAA,CACAtgF,QAAA,IAIA,EAAAhE,EAAAyD,MAAAzxC,IACAguC,EAAAwjF,gBAAAz2G,KAAA,0BAAAmC,YAAA,UAGAha,KAAAk3D,UAAApsB,QACA,GAAA,UAAAA,EAAA3V,OACA,GAAA,EAAAx3B,EAAAC,KAAAoC,KAAAwB,QAAA8pH,gBAAAG,iBAAA9tH,EAAA8yD,SAAAzwD,KAAAwB,QAAA8pH,gBAAAG,cAAA,SAAA5D,GACA,OAAA/8E,EAAA/tC,KAAA6F,cAAAZ,QAAA6lH,KAEA7nH,KAAA+rH,WAAAjhF,GACA9qC,KAAAu4D,UAAA,iDACA,CACA,IAAAi3D,EAAA1kF,EAAAyD,MAAAruB,IAAA,YAEA,GADAsvG,EAAA,MAAAA,EAAAA,EAAA,GAEA1kF,EAAAwjF,gBAAAt0G,YAAA,aAAAE,SAAA,WAEA4wB,EAAAyD,MAAAnB,IAAA,UAAA,GACA,IAAA+4E,KAAA,CAAAr7E,GAAAA,EAAA/tC,KAAA,CAAAgE,KAAA+pC,EAAA/pC,OACAf,KAAA6rH,SAAA4D,WAAA3kF,MAIA9qC,SAGAA,KAAAwB,QAAAu1D,WACA/2D,KAAA7C,EAAA,oBAAAZ,SAGAyD,KAAA0vH,eAEAA,YA5KA,WA6KA1vH,KAAAwB,QAAAu1D,WACA/2D,KAAA2vH,sBAGAhyH,EAAAuhB,KAAAvhB,EAAAwpD,OAAAxpD,EAAA2uC,OAAAtsC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,eACA,SAAAquB,GACA,OAAAA,EAAAruB,IAAA,aACAviB,EAAAgC,KAAA,SAAA4uC,GACAvuC,KAAAuuH,WAAAhgF,IACAvuC,OACAxE,IAAAiC,IAAA6jE,WAAA5H,UAEA60D,WA1LA,SA0LAzjF,GAAA,IACA+kF,EADAzzD,EAAA,EAAAhyD,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAGAylH,EADA,SAAA7vH,KAAAwB,QAAAylB,MAAArkB,cACA5C,KAAAwB,QAAA6xC,aAAAg5E,SAEArsH,KAAAwB,QAAA6xC,aAAA+4E,SAEA,IAmBA3vD,EAnBAqzD,EAAAt0H,IAAAivC,WAAAe,iBAAAW,cAAA0jF,EAAA,CACAthF,MAAAzD,EACA6hF,kBAAA3sH,KAAAwB,QAAAmrH,kBACA31D,UAAAh3D,KAAAwB,QAAAw1D,UACAg/C,QAAAh2G,KAAAwB,QAAAw0G,QACAgS,QAAAl9E,EAAAk9E,UACAvB,SAAA37E,EAAA07E,eACAtkD,sBAAAliE,KAAAwB,QAAA0gE,sBACA0qD,SAAA5sH,KAAAwB,QAAAorH,SACAC,YAAA7sH,KAAAwB,QAAAqrH,YACAzI,SAAAt5E,EAAAqpF,YAAArpF,EAAAqpF,YAAA,OAoBA,OAlBAn0H,KAAAwB,QAAAu1D,YAAA/2D,KAAA7C,EAAA,eAAA2a,SAAA,oBACAg4G,EAAA51G,SAAA,UACAla,KAAA2vH,oBAAAhyH,EAAAgC,KAAA,WACAmwH,EAAA91G,YAAA,WACAha,QAKAy8D,EADAz8D,KAAAwB,QAAA8qH,YAAA,EAAAxhF,EAAAhuC,GACAkD,KAAA7C,EAAA,6BAEA6C,KAAA7C,EAAA,oBAEAi/D,EACAK,EAAA/vB,QAAAojF,GAEArzD,EAAA37D,OAAAgvH,GAEAA,GAEAH,oBAAA,WAAA,IAAA92G,EAAA,EAAAzO,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAAzM,EAAAu4C,KACA65E,EAAA/vH,KAAA7C,EAAA,eACA6yH,EAAA,iBACAC,EAAA,CACAlyH,OAAA,QAKA,MAFAiC,KAAA0tD,WAAA3b,UAAA,SAAAhE,GACA,OAAAA,EAAAb,WAGAltC,KAAA7C,EAAA,gBAAA6c,YAAA,gBACA+1G,EAAAj4G,SAAA,kBAQAe,IAPAk3G,EAAA71G,SAAA81G,GAAAhzD,QAAAizD,EAAA,IAAAtyH,EAAAgC,KAAA,WACAowH,EAAAlyH,IAAAoyH,GAAAxuH,KAAA,mHACA,MAAAoX,GACAA,KAEA7Y,OAAAka,SAAA81G,KAKAD,EAAAtuH,KAAA,iCACA,MAAAoX,GACAA,MAIAw3G,SAAA,SAAAhzH,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QACA5E,IAAAiC,IAAAo2B,KAAA08F,kBAAA,CACAhiF,MAAAzD,EACA4iB,WAAA1tD,KAAA0tD,cAGAktC,aAAA,SAAAv9F,GACA2C,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,iBAAAta,KAAA,QACA2kH,YAEAqM,WAAA,SAAA/zH,GACA,IAAAg0H,EAAAl0H,EAAAE,EAAAgc,eAAAqB,QAAA,iBACAowB,EAAA9qC,KAAA0tD,WAAAxtC,IAAAmxG,EAAAjxH,KAAA,QACA,mBAAAJ,KAAAwB,QAAA41D,SACAp3D,KAAAwB,QAAA41D,SAAAtsB,EAAAntC,EAAAgC,KAAA,WACA0xH,EAAA90H,SACAyD,KAAAwB,QAAAshE,eACA9iE,QAEA8qC,EAAAqY,UACAkuE,EAAA90H,SACAyD,KAAAwB,QAAAshE,kBAKAtnE,IAAAkG,MAAAkhC,MAAAwxF,gBAAA54H,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qBACAsW,aAAA,CACAghF,aAAA,IAAA74H,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,oCAEAu3F,oBAAA,EACAv+D,YAAA,qBAEAtiB,OAAA,CACA8gF,gCAAA,QAEAzgF,kBAZA,WAaA9zC,KAAAwB,QAAA8yH,qBACAt0H,KAAAwB,QAAAmqC,SAAA3rC,KAAAwB,QAAA6xC,aAAAghF,cAGA,IAAAniD,EAAA/0E,EAAA,+IACA6C,KAAAtC,IAAAgd,QAAA,eAAA7C,KAAA,SAAA/W,OAAAoxE,GACAA,EAAAp5D,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAk1G,KAAAl1G,OAEAA,KAAAw0H,cAAAx0H,KAAAwB,QAAAgzH,cAAAx0H,KAAAwB,QAAAgzH,cAAA,IAEAxgF,WAAA,WACA,MAAA,CACAwgF,cAAAx0H,KAAAw0H,gBAGAtf,KAAA,WACA,IAAA15G,IAAAkG,MAAAkhC,MAAA6xF,aAAA92H,EAAAupB,SAAAlnB,KAAAwB,QAAA26G,gBAAA,CACAn3F,QAAAhlB,KAAAwB,QAAAwjB,QACA0vG,sBAAA/2H,EAAAshB,IAAAjf,KAAAw0H,cAAA,SAAA1pF,GACA,OAAAA,EAAAwjB,MAEAZ,WAAA1tD,KAAAwB,QAAAksD,WACAyL,OAAAx7D,EAAAgC,KAAA,SAAAijC,GACA5iC,KAAAw0H,cAAAx0H,KAAAwB,QAAAmzH,cAAAh3H,EAAA2uC,OAAA1J,EAAA,SAAAkI,GACA,OAAAA,EAAA5qB,IAAA,cACA0iB,EAEA5iC,KAAA+rC,SAEA,mBAAA/rC,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAAw0H,gBAEAx0H,UAGAo4D,SAAA,WACA,OAAA,EAAAz6D,EAAAC,KAAAoC,KAAAw0H,iBAGAx0H,KAAA7C,EAAA,sBAAAsE,KAAA,gEACA,MAKAjG,IAAAkG,MAAAkhC,MAAAirF,kBAAAryH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAvO,MAAA,MACA8nB,SAAA,KAEA7C,OAAA,CACAmhF,8BAAA,kBACAv5D,kBAAA,QAEApnB,aAAA,WACAj0C,KAAAokH,SAAAzmH,EAAA4hE,MAAAv/D,KAAAuuC,MAAA61E,SAAApkH,KAAAuuC,MAAA61E,SAAApkG,OAAA,GAAA,CAAAhgB,KAAAuuC,QAEA,MAAAvuC,KAAA8tH,uBACA9tH,KAAA8tH,qBAAAtyH,IAAAk3C,YAAA9P,MAAA40B,OAGAx3D,KAAA60H,YAAA,IAAA70H,KAAA8tH,qBAEA9tH,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACAv0C,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAAz0C,KAAA7C,EAAA,kBACAiD,KAAAJ,KAAAokH,SACAxnE,cAAA,EACAW,MAAA,MACAF,QAAA,EACAsG,MAAA,CAAA,EAAA,QACA1E,SAAA,CACA6N,YAAA,qBAEAhO,QAAA,CACA,CACAv9C,MAAA,UACAnB,KAAA,qBACA2rC,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,OAAAhgD,MAAAA,EAAAA,EAAA,IAGA,CACAmB,MAAA,OACAnB,KAAA,mBAEA,CACAmB,MAAA,WACAnB,KAAA,uBACA2rC,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,OAAA,MAAAA,EAAAlgC,IAAA,aACA,GAGA1kB,IAAAC,QAAAwH,YAAAC,cAAAk9C,EAAAlgC,IAAA,aAAA1kB,IAAAC,QAAAwH,YAAAE,YAAAC,QAGA,CACAhD,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,OACAud,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,MAAA,kEAAAA,EAAAkO,IAAA,iGACAtuD,UAKAA,KAAAw6E,aAAA,IAAAh/E,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAAz0C,KAAA7C,EAAA,2BACAuwD,WAAA1tD,KAAA60H,YACA5tG,MAAA,OACA8vC,UAAA,IAAA/2D,KAAA60H,YAAAn4H,OACAs6D,WAAA,EACA89D,aAAA,EACAzc,oBAAA,EACAn2C,sBAAA,IACA9K,SAAAz5D,EAAAgC,KAAA,SAAAouC,EAAAl1B,GACA,EAAAk1B,EAAAjxC,GACAixC,EAAAX,IAAA,aAAA,GAEAW,EAAAoV,UAEAnjD,KAAAuuC,MAAAf,SAAA,EACA30B,KACA7Y,SAGA8wH,gBAAA,SAAAzzH,GACAM,EAAAo0C,UAAA/xC,KAAAokH,SAAA,CAAA91D,IAAAnxD,EAAAE,EAAAgc,eAAAjZ,KAAA,SACA2kH,YAEAp0E,KAAA,WAAA,IAAAokF,EAAA/0H,KACArC,EAAAuhB,KAAAlf,KAAA60H,YAAA70G,OAAA,SAAAg1G,GACAA,EAAA5nF,IAAA,CACA6nF,mBAAAF,EAAAxmF,MAAAruB,IAAA,gBACAkrB,QAAA2pF,EAAA3Q,SAAA1nH,OAAA,EACAoG,UAAA,IAAAR,OAEAyyH,EAAAxmF,MAAA61E,SAAAxxE,IAAAoiF,KAGAh1H,KAAAwB,QAAA23D,OAAAn5D,KAAA60H,YAAA70G,QACAhgB,KAAA64C,iBAIAr9C,IAAAC,QAAAqsH,YAAA,CACAC,aAAA,SAAAmN,GACA,OAAAA,EAAAA,EAAApnH,MAAA,KAAAo6G,MAAAtlH,cAAA,MAEAuyH,mBAJA,SAIAC,GAAA,IAAAC,IAAA,EAAAjrH,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GACAkrH,EAAAD,EAAA,IAAA,KACA,GAAA7vH,KAAAE,IAAA0vH,GAAAE,EACA,OAAAF,EAAA,KAMA,IAJA,IAAAG,EAAAF,EACA,CAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,MACA,CAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,OACAG,GAAA,EAEAJ,GAAAE,IACAE,EACAhwH,KAAAE,IAAA0vH,IAAAE,GAAAE,EAAAD,EAAA74H,OAAA,IACA,OAAA04H,EAAAr/G,QAAA,GAAA,IAAAw/G,EAAAC,KAIAh6H,IAAAmhC,QAAAiG,MAAA,CACA2W,OAAA,CACA,CACAE,MAAA,yBACA18C,KAAA,aACA8b,SAAA,SAAAsM,GACA,IAAAyd,EAAA,IAAApnC,IAAAk3C,YAAA9P,MAAAsnF,UAAA,KAAA,CACA/kG,UAAAA,IAEAyd,EAAAiJ,MAAA,CACAn3B,QAAA,WACA,IAAAlZ,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACAA,SAAA,aAEA,CACA,CACAI,UAAA,UACAD,MAAAsjC,EAAA5iB,OAAA,GAAAE,IAAA,gBAGAA,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAmkD,GACA,IAAAnsC,EAAAxa,EAAA,QAAA,CACAwd,MAAA,QAEAnf,IAAAiC,IAAAC,IAAA+D,KAAAkW,GACAha,EAAAuhB,KAAA0jB,EAAA5iB,OAAA,SAAA+tB,GACAA,EAAA7tB,IAAA,cACA6tB,EAAA0C,WAAA,KAGAj1C,IAAAiC,IAAAo2B,KAAAgwC,WAAAroE,IAAAkG,MAAAg/B,SAAAsuC,YAAA,CACAv6B,GAAA98B,EACA+1C,WAAA9qB,EACAkyB,SAAA,EACA2gE,cAAA3xE,KAEA9jD,QAGAsU,MAAA,SAAAlU,EAAAR,GACA,IAAA+X,EAAAxa,EAAA,QAAA,CACAwd,MAAA,QAEAnf,IAAAiC,IAAAC,IAAA+D,KAAAkW,GACA,QAAA/X,EAAAysB,aAAAN,QACApU,EAAAlW,KAAA,wnBASA,WAAA7B,EAAAysB,aAAAN,QACApU,EAAAlW,KAAA,sqBAUAkW,EAAAlW,KAAA,skBAiBAjG,IAAAiC,IAAA6hE,UAAA9jE,IAAAmhC,QAAAiG,MAAA2W,QC5tFA/9C,IAAAwkB,OAAAo+C,OAAA,GAEA5iE,IAAAwkB,OAAAo+C,OAAAs3D,MAAAl6H,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,UACA1tC,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,SACAG,MAAAU,KAAAlD,SAOAtB,IAAAk3C,YAAA0rB,OAAA,GAEA5iE,IAAAk3C,YAAA0rB,OAAA2Q,OAAAvzE,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAinB,SAAA,CACA4qD,YAAA,GAEAvjC,MAAA/yC,IAAAwkB,OAAAo+C,OAAAs3D,MACAv2H,SAAA,WACA,IAAAA,EAAA,CACA,CACAA,SAAA,WAyBA,OAtBA,EAAAa,KAAAwB,QAAAwgE,OACA7iE,EAAA,CACA,CACAA,SAAA,QACAG,MAAAU,KAAAwB,QAAAwgE,QAEA,CACA7iE,SAAA,WAIA,MAAAa,KAAAwB,QAAAwjB,UACA7lB,EAAA,CACA,CACAA,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,YAIA3D,IAAAC,QAAA2D,WAAAC,iBAAAF,IAEAsvC,UAAA,WACAzuC,KAAA8Y,GAAA,OAAA9Y,KAAA21H,kBAAA31H,OAEA21H,kBAAA,SAAA1gD,GACA,EAAAt3E,EAAAC,KAAAoC,KAAAggB,SACAriB,EAAAuhB,KAAAlf,KAAAggB,OAAAriB,EAAAgC,KAAA,SAAA4uC,GACA,MAAA0mC,IACA,IAAAA,EAAAjzE,QAAAusC,EAAAzxC,IACAyxC,EAAAnB,IAAA,cAAA,GAOAmB,EAAAnB,IAAA,cAAA,IAGAptC,QAGA41H,kBAAA,SAAA3gD,GACAt3E,EAAAuhB,KAAA,iBAAA+1D,EAAA,CAAAA,GAAAA,EAAA,SAAAxH,GACA,IAAAnvD,EAAAte,KAAAkgB,IAAAutD,GACA,MAAAnvD,GACAA,EAAA8uB,IAAA,cAAA,IAEAptC,OAEA61H,qBAAA,SAAA5gD,GACAt3E,EAAAuhB,KAAA,iBAAA+1D,EAAA,CAAAA,GAAAA,EAAA,SAAAxH,GACA,IAAAnvD,EAAAte,KAAAkgB,IAAAutD,GACA,MAAAnvD,GACAA,EAAA8uB,IAAA,cAAA,IAEAptC,OAEA81H,kBAAA,SAAAC,GACA,EAAAp4H,EAAAC,KAAAoC,KAAAggB,SACAriB,EAAAuhB,KAAAlf,KAAAggB,OAAAriB,EAAAgC,KAAA,SAAA4uC,IACA,IAAAwnF,EAAA/zH,QAAAusC,EAAAzxC,IACAyxC,EAAAnB,IAAA,cAAA,GAEAmB,EAAAnB,IAAA,cAAA,IACAptC,QAGAg2H,wBAAA,WAAA,IAAAC,EAAA,EAAA7rH,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACA,EAAAzM,EAAAC,KAAAoC,KAAAggB,SACAriB,EAAAuhB,KAAAlf,KAAAggB,OAAAriB,EAAAgC,KAAA,SAAA4uC,IACA,IAAA0nF,EAAAj0H,QAAAusC,EAAAzxC,KACAyxC,EAAAnB,IAAA,cAAA,GACAmB,EAAAnB,IAAA,YAAA,KAGAmB,EAAAnB,IAAA,cAAA,GACAmB,EAAAnB,IAAA,YAAA,KAEAptC,QAGAk2H,YAAA,WACA,IAAArgD,EAAA,GAIA,OAHAl4E,EAAAuhB,KAAAlf,KAAAggB,OAAA,SAAAuuB,GACAsnC,EAAAz3D,KAAAmwB,EAAAzxC,MAEA+4E,GAEAsgD,kBAAA,WACA,IAAAhkD,EAAA,IAAA32E,IAAAk3C,YAAA0rB,OAAA2Q,OAAA,GAAA,CACA+C,YAAA9xE,KAAAwB,QAAAswE,YAAA9xE,KAAAwB,QAAAswE,YAAAt2E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,gBAMA,OAJAp0E,EAAAuhB,KAAAlf,KAAAggB,OAAA,SAAAuuB,GACAA,EAAAruB,IAAA,eACAiyD,EAAAv/B,IAAArE,KAEA4jC,GAEAikD,iBAAA,SAAAhlB,GACA,IAAAxmG,EAAA,KAoEA,OAnEA,IAAA5K,KAAAwB,QAAAswE,YACAlnE,EAAA,MAAAwmG,EAAApxG,KAAAggB,OAAAriB,EAAA2uC,OAAAtsC,KAAAggB,OAAA,SAAAuuB,GACA,OAAA,MAAA5wC,EAAAka,KAAAu5F,EAAA,CAAAt0G,GAAAyxC,EAAAzxC,OAGA,EAAAkD,KAAAwB,QAAAswE,cACAlnE,EAAA,GACAjN,EAAAuhB,KAAAlf,KAAAggB,OAAA,SAAAuuB,GACA,GAAA,OAAA6iE,GAAA,MAAAzzG,EAAAka,KAAAu5F,EAAA,CAAAt0G,GAAAyxC,EAAAzxC,KAAA,CACA,IAAAu5H,EAAA9nF,EAAAruB,IAAA,oBACAo2G,EAAA,GACA,IAAA34H,EAAAC,KAAAy4H,KACAA,EAAA,aAEA,IAAAr2H,KAAAwB,QAAAswE,cACAwkD,EAAAD,EAAAvoH,MAAA,KAAA,GACAuoH,EAAAA,EAAAvoH,MAAA,KAAA,GAEA,IAAAnQ,EAAAC,KAAA04H,KACAA,EAAA,cAIA,IAAAC,EAAA54H,EAAAka,KAAAjN,EAAA,SAAA0T,GACA,OAAAA,EAAAvhB,OAAAs5H,IAEA,GAAA,MAAAE,EACA,GAAA,IAAAv2H,KAAAwB,QAAAswE,YAAA,CACA,IAAA0kD,EAAA74H,EAAAka,KAAA0+G,EAAAl1D,QAAA,SAAA79D,GACA,OAAAA,EAAAzG,OAAAu5H,IAEA,MAAAE,EACAA,EAAAp4D,OAAAhgD,KAAAmwB,GAGAgoF,EAAAl1D,QAAAjjD,KAAA,CACArhB,KAAAu5H,EACAl4D,OAAA,CAAA7vB,UAKAgoF,EAAAn4D,OAAAhgD,KAAAmwB,QAIA,IAAAvuC,KAAAwB,QAAAswE,YACAlnE,EAAAwT,KAAA,CACArhB,KAAAs5H,EACAh1D,QAAA,CACA,CACAtkE,KAAAu5H,EACAl4D,OAAA,CAAA7vB,OAMA3jC,EAAAwT,KAAA,CACArhB,KAAAs5H,EACAj4D,OAAA,CAAA7vB,OAKAvuC,OAEA4K,KAKApP,IAAAkG,MAAA08D,OAAA,GAEA5iE,IAAAkG,MAAA08D,OAAAgqC,cAAA5sG,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BACAsW,aAAA,CACA8Z,SAAA,IAAA3xD,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,mBAEAqhC,OAAA,KACAm9C,WAAA,KACA1pC,YAAA,KACAC,YAAA,KACAu2B,mBAAA,EACAouB,gBAAA,KACAxhD,iBAAA,KACA8gD,iBAAA,KACA5jD,eAAA,KACAukD,eAAA,KACAnuB,gBAAA,KACAzzC,SAAA,EACA6hE,gBAAA,EACArjD,wBAAA,EACAa,mBAAA,EACAC,mBAAA,EACAC,gBAAA,EACAC,kBAAA,EACAsiD,kBAAA,EACAC,2BAAA,EACAC,kBAAA,EACA7iE,SAAA,EACA8iE,eAAA,EACAxiD,SAAA52E,EAAAu4C,KACA2f,gBAAA,EACAwrC,UAAA,KACA7sB,cAAA,MAEA/gC,OAAA,CACAujF,sBAAA,eACApiD,2BAAA,eACAqiD,6BAAA,eACAC,0BAAA,YACAC,6BAAA,eACAniD,sBAAA,gBACAoiD,sBAAA,oBACAC,+BAAA,sBACAC,yBAAA,kBAEAxjF,kBAAA,WACA,EAAA9zC,KAAAwB,QAAA6/F,YACArhG,KAAAwB,QAAA2yE,mBAAA,EACAn0E,KAAAwB,QAAAo1H,kBAAA,IAGAriF,YAAA,WACAv0C,KAAAu3H,mBAAA,EACAv3H,KAAAwB,QAAAqwE,YAAA7xE,KAAAwB,QAAAm1H,eAAAn7H,IAAA+Q,UAAAsjB,aAAA7vB,KAAAwB,QAAAqwE,YACA,MAAA7xE,KAAAwB,QAAA48D,OACAp+D,KAAAk4F,YAGAl4F,KAAAm1E,aAGA3P,OAAA,SAAAxD,GACA,iBAAAA,IACAhiE,KAAAwB,QAAAqwE,YAAA7P,GAEAhiE,KAAAk4F,aAEAA,UAAA,WACA18F,IAAAiC,IAAA0jB,QAAAgsD,gBAAAntE,KAAAwB,QAAAqwE,YAAAl0E,EAAAgC,KAAA,SAAAy+D,GACAp+D,KAAAwB,QAAA48D,OAAAA,EAAAxuB,SACA5vC,KAAAm1E,aACAn1E,QAEAm1E,UAAA,WACAn1E,KAAAwB,QAAAg2H,gBAAA,EACAx3H,KAAAy3H,cAEAA,WAAA,WACA,IAAAz3H,KAAAs1E,QAAA,CAIA,IAAAlX,EAAA,MAAAp+D,KAAAwB,QAAA48D,OAAAp+D,KAAAwB,QAAA48D,OAAA5iE,IAAAiC,IAAA0jB,QAAAi9C,OAAA,EAAAp+D,KAAAwB,QAAAqwE,YAAA7xE,KAAAwB,QAAAqwE,aAAA,GAAAjiC,SACA,GAAA5vC,KAAAwB,QAAAqwE,cAAAr2E,IAAA+Q,UAAAsjB,aACA7vB,KAAAwB,QAAAswE,YAAA,OAEA,GAAA9xE,KAAAwB,QAAA6mG,kBAAA,CACA,IAAA,IAAA1rG,EAAA,EAAAA,EAAAgB,EAAAC,KAAAwgE,GAAAzhE,IAAA,CACA,IAAA2hB,EAAA8/C,EAAAzhE,GACA,GAAA,EAAAgB,EAAAC,KAAA0gB,EAAAo5G,kBAAA,CACA,IAAA,IAAAp5G,EAAAo5G,iBAAA11H,QAAA,KAAA,CAEAhC,KAAAwB,QAAAswE,YAAA,EACA,MAEA9xE,KAAAwB,QAAAswE,YAAA,IAGA9xE,KAAAwB,QAAAswE,YAAA,IAIAn0E,EAAAuhB,KAAAk/C,EAAAzgE,EAAAgC,KAAA,SAAA2e,KAEAte,YAEA,GAAA,MAAAA,KAAAwB,QAAAswE,YAAA,CACA,IAAAA,EAAAt2E,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAqb,cACA/xE,KAAAwB,QAAAswE,YAAAA,GAAA,EAGA,GAAA,MAAA9xE,KAAAwB,QAAA+5G,WAAA,CACA,IAAAA,EAAA//G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA8kD,aACAx7G,KAAAwB,QAAA+5G,WAAA,iBAAAA,EAAAA,EAAA34G,cAAA,SAQA,GALA5C,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAA0rB,OAAA2Q,OAAA3Q,EAAA,CACA0T,YAAA9xE,KAAAwB,QAAAswE,YACA9P,OAAAhiE,KAAAwB,QAAAqwE,cAGA,EAAAl0E,EAAAC,KAAAoC,KAAAwB,QAAAyzE,kBAEAj1E,KAAA0tD,WAAAioE,kBAAA31H,KAAAwB,QAAAyzE,sBAEA,CAIAj1E,KAAA23H,qBAAA,GACA,IAAA1iD,EAAA,GACA,EAAAt3E,EAAAC,KAAAoC,KAAAwB,QAAA2wE,iBACAx0E,EAAAuhB,KAAAlf,KAAAwB,QAAA2wE,eAAAnyD,OAAA,SAAA1B,GACA22D,EAAA72D,KAAAE,EAAAxhB,IAIAkD,KAAAwB,QAAAszD,SAAAx2C,EAAA4B,IAAA,aAAA,KAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBACAlgB,KAAA23H,qBAAAv5G,KAAAE,EAAAxhB,KAEAkD,MAEAA,KAAA0tD,WAAAioE,kBAAA1gD,GAIAj1E,KAAAwB,QAAAyyD,QAKA,EAAAj0D,KAAAwB,QAAA63F,WAAA,EAAA17F,EAAAC,KAAAoC,KAAA23H,wBACA33H,KAAA43H,kCACA53H,KAAA0tD,WAAAsoE,wBAAAh2H,KAAA23H,uBANA33H,KAAA0tD,WAAAooE,kBAAAn4H,EAAAshB,IAAAjf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAAA,EAAAzxC,MAUA,EAAAa,EAAAC,KAAAoC,KAAAwB,QAAAu0H,mBACA/1H,KAAA0tD,WAAAooE,kBAAA91H,KAAAwB,QAAAu0H,kBAEA/1H,KAAA63H,eAAA73H,KAAA0tD,WAAAyoE,oBAAAn2G,OAEAhgB,KAAA83H,gBACA93H,KAAA+3H,eAEA,EAAAp6H,EAAAC,KAAAoC,KAAAwB,QAAAyzE,mBAAAj1E,KAAAwB,QAAAu1H,gBAAA,IAAA/2H,KAAAwB,QAAAyzE,iBAAAjzE,QAAA,IACAhC,KAAA7C,EAAA,oBAAAsb,KAAA,WAAA,GAEA,mBAAAzY,KAAAwB,QAAAk1H,gBACA12H,KAAAwB,QAAAk1H,mBAGAoB,cAAA,WACA,EAAAn6H,EAAAC,KAAAoC,KAAA23H,uBACA33H,KAAA7C,EAAA,wBAAA2D,OAAA,0CAEAd,KAAAwB,QAAA8xE,yBACAtzE,KAAA4zG,aAAA,IAAAp4G,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACA8kD,SAAAtkD,EAAAgC,KAAAK,KAAA+3H,aAAA/3H,MACAqtE,iBAAA,aACA2qD,cAAA,MAIAD,aAAA,WACA,IAAAviD,EAAAx1E,KAAA7C,EAAA,iBAAAyE,MAAAgB,cACAq1H,EAAAj4H,KAAAwB,QAAA8xE,uBAAAtzE,KAAA4zG,aAAAt7C,WAAA11D,cAAA,GACAs1H,EAAA,KACAC,EAAA,KACA/5D,EAAA,GAEA,WAAA65D,EAAAr1H,cACAu1H,GAAA,EAEA,aAAAF,EAAAr1H,cACAs1H,GAAA,EAEA,eAAAD,EAAAr1H,gBACAs1H,GAAA,GAEA,EAAAv6H,EAAAC,KAAA43E,IAAA,MAAA0iD,GAAA,MAAAC,GAAA,EAAAx6H,EAAAC,KAAAoC,KAAAwB,QAAAi1H,kBACAz2H,KAAA7C,EAAA,wBAAAsb,KAAA,YAAA,GACA9a,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAAriB,EAAAgC,KAAA,SAAA4uC,GACA,IAAA5wC,EAAAC,KAAAoC,KAAAwB,QAAAi1H,mBAAA,IAAAz2H,KAAAwB,QAAAi1H,gBAAAz0H,QAAAusC,EAAAzxC,KACA,MAAAq7H,GAAA5pF,EAAAruB,IAAA,cAAAi4G,GAAA,OAAAD,GAAA3pF,EAAAruB,IAAA,gBAAAg4G,MAAA,EAAA3pF,EAAAruB,IAAA,aAAAtd,cAAAZ,QAAAwzE,KAAA,EAAAjnC,EAAAruB,IAAA,oBAAAtd,cAAAZ,QAAAwzE,KACApX,EAAAhgD,KAAAmwB,IAEAvuC,SAGAA,KAAA7C,EAAA,wBAAAsb,KAAA,YAAA,GACA2lD,EAAAp+D,KAAA0tD,WAAA1tC,QAGA,IAAA5f,EAAA,CACA4f,OAAAhgB,KAAA0tD,WAAA0oE,iBAAAh4D,GACA58D,QAAAxB,KAAAwB,QACA+1H,kBAAAv3H,KAAAu3H,mBAEAv3H,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA8Z,SAAAntD,KAAA7C,EAAA,qBAAAiD,EAAAzC,EAAAgC,KAAA,WACAK,KAAAo4H,sBACAp4H,KAAAy1E,YAAA,EAAAz1E,KAAAwB,QAAAswE,aAAA9xE,KAAAwB,QAAA8yE,kBACAt0E,KAAAq4H,wBAEAr4H,KAAAs4H,qBACAt4H,KAAAwB,QAAA6yE,gBACAr0E,KAAA7C,EAAA,0BAAAud,QAAA,2BAAAmgC,OAEA76C,KAAAy1E,YAAA,EAEAz1E,KAAAu4H,kBACAv4H,QAEAs4H,mBAAA,WACA,IAAAhpF,EAAAtvC,KACAA,KAAA7C,EAAA,wBAAA+hB,KAAA,WAKA,IAAAkkD,EAAA9zB,EAAAomC,wBAAAv4E,EAAA6C,OACA7C,EAAA6C,MAAAyY,KAAA,WAAA62B,EAAA9tC,QAAAq1H,4BAAAzzD,EAAAtrD,SAAA,WAAA,EAAAna,EAAAC,KAAAwlE,EAAAvrD,KAAA,oCAAA,IAAAla,EAAAC,KAAAwlE,EAAAvrD,KAAA,sCAAAo6F,IAAA,kBAEAjyG,KAAAwB,QAAA2yE,mBAAAn0E,KAAAwB,QAAAq1H,2BAAA72H,KAAAwB,QAAAo1H,kBACA52H,KAAA7C,EAAA,qBAAAsb,KAAA,aAAA,EAAAzY,KAAA7C,EAAA,gCAAAT,UAGA07H,mBAAA,WACA,IAAA9oF,EAAAtvC,KACAA,KAAA7C,EAAA,wBAAA+hB,KAAA,WACA/hB,EAAA6C,MAAAyY,KAAA,UAAA,IAAA9a,EAAAC,KAAA0xC,EAAAomC,wBAAAv4E,EAAA6C,OAAA6X,KAAA,iBAAAo6F,IAAA,gBAEAjyG,KAAA7C,EAAA,qBAAAsb,KAAA,YAAA,EAAAzY,KAAA7C,EAAA,+BAAAT,UAEAk7H,gCAAA,WACA,IAAAp8H,IAAAygE,MAAAj8D,KAAAtC,IAAA,CACAy+D,KAAA,yBAAAn8D,KAAAwB,QAAA+5G,WAAA34G,cAAA,kPACAw5D,WAAA,KAGAo8D,eAAA,SAAA/qD,GACA,OAAAztE,KAAA7C,EAAA,wBAAAswE,EAAA3iE,WAAA,OAEAutH,sBAAA,WACA,EAAAr4H,KAAAwB,QAAAswE,aACAn0E,EAAAuhB,KAAAlf,KAAA0tD,WAAAyoE,oBAAAn2G,OAAA,SAAA1B,GACA,IAAA8kD,EAAApjE,KAAAw4H,eAAAl6G,EAAAxhB,IAAA4d,QAAA,0BACA0oD,EAAAtrD,SAAA,WACA9X,KAAA41E,aAAAxS,GAEA,IAAApjE,KAAAwB,QAAAswE,cACA1O,EAAAA,EAAA5/D,SAAAkX,QAAA,2BACA5C,SAAA,WACA9X,KAAA41E,aAAAxS,IAGApjE,OAGA01E,wBAAA,SAAAlyE,GACA,OAAAA,EAAAkX,QAAA,WAAAN,SAAA,2BAEAq+G,kBAAA,SAAAhC,GACAz2H,KAAAwB,QAAAi1H,gBAAAA,EACAz2H,KAAA+3H,gBAEAW,aAAA,SAAAr7H,GACA,IAAAs7H,EAAAx7H,EAAAE,EAAAgc,eAAAjZ,KAAA,MACAw4H,EAAAj7H,EAAAo0C,UAAA/xC,KAAAwB,QAAAgzE,cAAA,CAAA13E,GAAA67H,IAEA,MAAAC,GAAA,mBAAAA,EAAA//G,UACA+/G,EAAA//G,SAAA7Y,OAGAorD,aAAA,WACAprD,KAAA7C,EAAA,iBAAAyE,IAAA,IACA5B,KAAAwB,QAAA8xE,wBACAtzE,KAAA4zG,aAAAY,cAEAx0G,KAAA+3H,gBAEA9hD,UAAA,SAAAwb,GACA,kBAAAA,GACAzxF,KAAA7C,EAAA,qBAAAsb,KAAA,UAAAg5E,GAEA,IAAAvb,EAAAl2E,KAAA7C,EAAA,gCACA6C,KAAA7C,EAAA,qBAAAsb,KAAA,YACAzY,KAAAu3H,mBAAA,EACAv3H,KAAA0tD,WAAAkoE,kBAAAj4H,EAAAshB,IAAAi3D,EAAA,SAAA/jB,GACA,OAAAh1D,EAAAg1D,GAAA/xD,KAAA,cAEA81E,EAAAz9D,KAAA,WAAA,KAGAzY,KAAAu3H,mBAAA,EACAv3H,KAAA0tD,WAAAmoE,qBAAAl4H,EAAAshB,IAAAi3D,EAAA,SAAA/jB,GACA,OAAAh1D,EAAAg1D,GAAA/xD,KAAA,cAEA81E,EAAAz9D,KAAA,WAAA,IAEAzY,KAAAuoG,mBAEAswB,eAAA,SAAAx7H,GACA2C,KAAAu3H,kBAAAv3H,KAAA7C,EAAA,oBAAAsb,KAAA,YAEAqgH,aAAA,SAAAz7H,GACA,IAAA2C,KAAAwB,QAAAo1H,iBAAA,CAEA,IAAAxzD,EAAApjE,KAAA01E,wBAAAv4E,EAAAE,EAAAgc,gBACA28D,EAAA74E,EAAAE,EAAAgc,eAAA8nC,GAAA,YAIA+0B,EAAA,GACAl2E,KAAAwB,QAAAq1H,2BACA3gD,EAAA9S,EAAAvrD,KAAA,yBAAAo6F,IAAA,aACA7uC,EAAAvrD,KAAA,sDAAAo6F,IAAA,aAAAx5F,KAAA,UAAAu9D,KAGAE,EAAA9S,EAAAvrD,KAAA,iBAAAo6F,IAAA,aACA7uC,EAAAvrD,KAAA,sCAAAo6F,IAAA,aAAAx5F,KAAA,UAAAu9D,IAGAA,GAEA5S,EAAAtrD,SAAA,WACA9X,KAAA41E,aAAAxS,GAGAA,EAAAA,EAAAvrD,KAAA,0BACA,EAAAla,EAAAC,KAAAwlE,IACAA,EAAAtrD,SAAA,WACA9X,KAAA41E,aAAAxS,GAGApjE,KAAA0tD,WAAAkoE,kBAAAj4H,EAAAshB,IAAAi3D,EAAA,SAAA/jB,GACA,OAAAh1D,EAAAg1D,GAAA/xD,KAAA,eAIAJ,KAAA0tD,WAAAmoE,qBAAAl4H,EAAAshB,IAAAi3D,EAAA,SAAA/jB,GACA,OAAAh1D,EAAAg1D,GAAA/xD,KAAA,cAGAJ,KAAAuoG,oBAGAwwB,aAAA,SAAAljD,GACA71E,KAAAwB,QAAAyyD,SAAA,EAAAt2D,EAAAC,KAAAi4E,KACAl4E,EAAAuhB,KAAA22D,EAAA,SAAApI,GACAztE,KAAAo2E,YAAA3I,GAAA,GAAA,GAAA,IACAztE,MACAA,KAAAwB,QAAA+yE,WACAv0E,KAAAuoG,oBAGAywB,cAAA,SAAA37H,GACA,GAAA2C,KAAAwB,QAAAyyD,QAAA,CACA,IAAA9B,EAAAh1D,EAAAE,EAAAgc,eACAo0D,EAAAtb,EAAA/xD,KAAA,WACAwwG,EAAAz+C,EAAAhR,GAAA,YACAnhD,KAAAo2E,YAAA3I,EAAAmjC,GAAA,KAGAx6B,YAAA,SAAA3I,EAAAmjC,GAAA,IAAAqoB,EAAA,EAAA7uH,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GAAA0kC,EAAA,EAAA1kC,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACApK,KAAAwB,QAAAyyD,SAAA,EAAAwZ,IACAmjC,GACA5wG,KAAAwB,QAAAq0D,gBACA71D,KAAA0tD,WAAAioE,oBAEA31H,KAAA0tD,WAAAkoE,kBAAAnoD,IAGAztE,KAAA0tD,WAAAmoE,qBAAApoD,GAGAwrD,GACAj5H,KAAAw4H,eAAA/qD,GAAAh1D,KAAA,UAAAm4F,GAGA9hE,IACA9uC,KAAAwB,QAAA+yE,WACAv0E,KAAAuoG,qBAIAA,gBAAA,WACAvoG,KAAAu4H,iBACAv4H,KAAAo4H,qBACA,mBAAAp4H,KAAAwB,QAAA+mG,iBACAvoG,KAAAwB,QAAA+mG,gBAAAvoG,KAAA6qG,kBAGA0tB,eAAA,WACA,GAAA,MAAAv4H,KAAAwB,QAAA6/F,UACA,OAAA,EAGA,IAAAz2F,EAAA5K,KAAAwB,QAAA6/F,WAAArhG,KAAA6qG,gBAAAh3B,SAAAn3E,OAWA,OAVAkO,EACAjN,EAAAuhB,KAAAlf,KAAA7C,EAAA,iCAAA6C,KAAA7C,EAAA,+BAAA,SAAAmhB,GACAnhB,EAAAmhB,GAAA7F,KAAA,YAAA,KAGAzY,KAAAwB,QAAAyyD,SACAt2D,EAAAuhB,KAAAlf,KAAA7C,EAAA,0BAAA,SAAAmhB,GACAnhB,EAAAmhB,GAAA7F,KAAA,YAAA,KAGA7N,GAEA+qE,kBAAA,SAAAt4E,GACA2C,KAAA41E,aAAAz4E,EAAAE,EAAAgc,eAAAe,SAAA,4BAEAw7D,aAAA,SAAAx+B,GACA,IAAAhvB,EAAAgvB,EAAAh9B,SAAA,kBACAg9B,EAAAt/B,SAAA,WACAs/B,EAAAp9B,YAAA,UACAoO,EAAApO,YAAA,gCACAoO,EAAAlO,SAAA,8BAIAk9B,EAAAA,EAAAxE,IAAAwE,EAAAv/B,KAAA,2BACAuQ,EAAAA,EAAAwqB,IAAAwE,EAAAv/B,KAAA,mBACAu/B,EAAAl9B,SAAA,UACAkO,EAAApO,YAAA,4BACAoO,EAAAlO,SAAA,iCAEAla,KAAAs4H,sBAEAztB,cAAA,WACA,IAAA14B,EAAAnyE,KAAA0tD,WAAAyoE,oBAAAn2G,OACA,GAAAhgB,KAAAwB,QAAAq0D,eACA,OAAA,EAAAl4D,EAAAC,KAAAu0E,GAAAA,EAAA,GAAA,KAGAnyE,KAAAwB,QAAAu1H,eAAA/2H,KAAA7C,EAAA,oBAAAsb,KAAA,YACA05D,EAAA/zD,KAAA,IAAA5iB,IAAAwkB,OAAAo+C,OAAAs3D,MAAA,CACAjoD,QAAA,KAIA,IAAAyrD,EAAAv7H,EAAA2uC,OAAA6lC,EAAA,SAAA7zD,GACA,OAAA3gB,EAAAo0C,UAAA/xC,KAAA63H,eAAA,CAAA/6H,GAAAwhB,EAAAxhB,MACAkD,MACAm5H,EAAAx7H,EAAA4hE,MAAA,GAAAv/D,KAAA63H,gBAeA,OAbAl6H,EAAAuhB,KAAAizD,EAAA,SAAA7zD,GACA3gB,EAAAo0C,UAAAonF,EAAA,CAAAr8H,GAAAwhB,EAAAxhB,MACAq8H,EAAA/6G,KAAAE,KAEA3gB,EAAAuhB,KAAAi6G,EAAAx7H,EAAAgC,KAAA,SAAA2e,GACA3gB,EAAAo0C,UAAA/xC,KAAA63H,eAAA,CAAA/6H,GAAAwhB,EAAAxhB,OAAAa,EAAAo0C,UAAAogC,EAAA,CAAAr1E,GAAAwhB,EAAAxhB,KACAwhB,EAAA8uB,IAAA,aAAA,GAEA9uB,EAAA8uB,IAAA,aAAA,IACAptC,OACAA,KAAAwB,QAAA4nG,SACAppG,KAAA63H,eAAA1lD,GAEA,CACA0B,SAAA1B,EACAuB,IAAAwlD,EACAtlD,SAAA5zE,KAAA63H,eACAl+C,IAAAw/C,IAIAC,oBAAA,WACA,IAAA59H,IAAAkG,MAAA08D,OAAAi7D,yBAAA,CACAhgC,UAAAr5F,KAAAwB,QAAA63F,UACAj7B,OAAAp+D,KAAA0tD,cAGA6K,UAAA,SAAA99C,GACAza,KAAAq4D,YACAr4D,KAAAglE,WAAA,IAAAxpE,IAAAygE,MAAAj8D,KAAAtC,IAAA,CACAqD,KAAA,SACAs9C,aAAA,CAAA,cACA8d,KAAA1hD,EACA2hD,WAAA,KAGA/D,UAAA,WACAr4D,KAAAglE,YACAhlE,KAAAglE,WAAA7hB,WAGA5mD,OAAA,WAEA,OADAyD,KAAAs1E,SAAA,EACA95E,IAAAkG,MAAAwxC,SAAA7xC,UAAA9E,OAAAwO,KAAA/K,SAIAxE,IAAAkG,MAAA08D,OAAAi7D,yBAAA79H,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,+BACAo8B,OAAAx7D,EAAAu4C,MAEAzC,OAAA,CACA6lF,mCAAA,UAEA/kF,YAAA,WACA,IAAAglF,EAAA57H,EAAA6qH,MAAAxoH,KAAAwB,QAAA48D,OAAA+3D,oBAAAvmF,SAAA,CAAA4pF,UAAA,IACA77H,EAAAuhB,KAAAq6G,EAAA,SAAAE,GACAA,EAAA9yB,YAAA,IAEA3mG,KAAAmoG,cAAA,IAAA3sG,IAAAkG,MAAA08D,OAAAgqC,cAAA,CACA3zD,GAAAz0C,KAAA7C,EAAA,mBACAihE,OAAAm7D,EACAjmD,wBAAA,EACAi1B,gBAAA5qG,EAAAgC,KAAAK,KAAA05H,oBAAA15H,QAEAA,KAAA05H,oBAAA15H,KAAAmoG,cAAA0C,kBAEA6uB,oBAAA,SAAAC,GACA35H,KAAA7C,EAAA,8BAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAA+7H,EAAA9lD,YAEA+lD,OAAA,WACA,IAAAC,EAAA,IAAAr+H,IAAAk3C,YAAA0rB,OAAA2Q,OAAA/uE,KAAAmoG,cAAA0C,gBAAAh3B,UAAAjkC,SACA,IAAAp0C,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAA63F,WAEA,CACAl6F,SAAA,UAEA,CACAA,SAAA,YAGAiB,KAAA,CACAg+D,OAAAy7D,EACAhuG,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAA,QAEA2C,OAAAC,KAAA/B,EAAAgC,KAAA,WACA,IAAAm6H,EAAAn8H,EAAAC,KAAAi8H,GACAr+H,IAAA60C,cAAA0pF,kBAAA,CACA/zG,OAAA,kBACAw8F,aAAAsX,EAAAhvH,WAAA,kIACAyb,OAAA/qB,IAAA+Q,UAAA+qB,QAAAG,kCAGAj8B,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA+tG,EAAAhvH,WAAA,oCAGA9K,OAAAmsB,KAAA,WACA3wB,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,6DAOAvwB,IAAAkG,MAAA08D,OAAA89C,kBAAA1gH,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACA2uC,gBAAA,EACAlqB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAm2C,UAAA,KACA/Z,OAAA,MAEA1lB,OAAA,CACAumF,4BAAA,UAEAhmF,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAAwB,QAAA26G,gBAAAx+G,EAAAupB,SAAAlnB,KAAAwB,QAAA26G,gBAAA,CACA1nE,GAAAz0C,KAAA7C,EAAA,mBACAm2E,wBAAA,EACAi1B,gBAAA5qG,EAAAgC,KAAAK,KAAA05H,oBAAA15H,QAEAA,KAAAmoG,cAAA,IAAA3sG,IAAAkG,MAAA08D,OAAAgqC,cAAApoG,KAAAwB,QAAA26G,kBAEAud,oBAAA,SAAAC,GACA35H,KAAA7C,EAAA,uBAAAsb,KAAA,WAAA,IAAA9a,EAAAC,KAAA+7H,EAAAjmD,MAIA,IAJA/1E,EAAAC,KAAAD,EAAAg2E,WAAAh2E,EAAAshB,IAAA06G,EAAA/lD,SAAA,SAAAt1D,GACA,OAAAA,EAAAxhB,KACAa,EAAAshB,IAAA06G,EAAA9lD,SAAA,SAAAv1D,GACA,OAAAA,EAAAxhB,QAEAkD,KAAAwB,QAAA26G,gBAAAtmD,gBACA71D,KAAAm5D,UAGAA,OAAA,WACA,mBAAAn5D,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAmoG,cAAA0C,iBAEA7qG,KAAA64C,iBAIAr9C,IAAAkG,MAAA08D,OAAA4T,kBAAAx2E,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBACAsW,aAAA,CACA4mF,WAAA,IAAAz+H,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,+BAEAo1C,eAAA,KACAF,iBAAA,EACAC,UAAA,KACApc,YAAA,EACAsc,YAAAz0E,EAAAu4C,KACAgkF,aAAA,GAEAzmF,OAAA,CACA0mF,iCAAA,SACAC,mCAAA,cACAC,yBAAA,iBAEArmF,WAAA,WACA,MAAA,CACA8hB,WAAA91D,KAAAwB,QAAAs0D,aAGA7hB,aAvBA,WAwBAj0C,KAAAwB,QAAAywE,kBACAjyE,KAAAwB,QAAAmqC,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iCAEA,EAAAp/B,EAAAC,KAAAoC,KAAAwB,QAAA0wE,YACAlyE,KAAAwB,QAAA0wE,UAAAp5D,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAs6H,OAAAt6H,QAIAA,KAAAmyE,eAAAnyE,KAAAwB,QAAA2wE,eAAAnyE,KAAAwB,QAAA2wE,eAAA,IAEA59B,YAlCA,WAmCAv0C,KAAAu6H,wBAEAC,YAAA,WACA,IAAA19H,EAAA+C,OAAAwoD,MAAA7uC,QAAAkB,QAAA,2BAAAta,KAAA,YAEAJ,KAAAmyE,eAAAx0E,EAAAqC,KAAAmyE,gBAAA7lC,OAAA,SAAAwY,GACA,OAAAA,EAAAhoD,KAAAA,IAGAkD,KAAAwB,QAAA4wE,YAAApyE,KAAAmyE,gBAEAnyE,KAAAu6H,wBAEAD,OAAA,WACAt6H,KAAAmtD,SAAA,IAAA3xD,IAAAkG,MAAA08D,OAAA89C,kBAAA,CACAC,gBAAA,CACAtqC,YAAA7xE,KAAAwB,QAAAqwE,YACAoD,iBAAAt3E,EAAAshB,IAAAjf,KAAAmyE,eAAA,SAAA5jC,GACA,OAAAA,EAAAjB,WAAAmgC,UAEAqE,YAAA9xE,KAAAwB,QAAAswE,aAEA3Y,OAAAx7D,EAAAgC,KAAA,SAAAS,GACAJ,KAAAmyE,eAAAx0E,EAAA4hE,MAAAv/D,KAAAmyE,eAAA/xE,EAAAszE,KACA1zE,KAAAu6H,uBACAv6H,KAAAwB,QAAA4wE,YAAApyE,KAAAmyE,iBACAnyE,SAGAu6H,qBAAA,WACA,IAAAn6H,EAEAA,EADAJ,KAAAwB,QAAA04H,aAAA,EAAAv8H,EAAAC,KAAAoC,KAAAmyE,gBACAx0E,EAAAghB,KAAA3e,KAAAmyE,eAAAsoD,UAAA98H,EAAAC,KAAAoC,KAAAmyE,gBAAA,GAAAsoD,UAGAz6H,KAAAmyE,eAGA,IAAAx0E,EAAAC,KAAAwC,GACAJ,KAAA7C,EAAA,sBAAAsE,KAAA,sFAGAzB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA4mF,WAAAj6H,KAAA7C,EAAA,sBACA,CACA6iB,OAAA5f,EACA01D,WAAA91D,KAAAwB,QAAAs0D,aAIA91D,KAAAwB,QAAA04H,aAAA,EAAAv8H,EAAAC,KAAAoC,KAAAmyE,iBACAnyE,KAAA7C,EAAA,sBAAA2D,OAAA,6GAAAnD,EAAAC,KAAAoC,KAAAmyE,gBAAA,GAAA,sBAGAuoD,cAAA,WACA,IAAAt6H,EAAAJ,KAAAmyE,eAAAsoD,UAEA,IAAA98H,EAAAC,KAAAwC,GACAJ,KAAA7C,EAAA,sBAAAsE,KAAA,iFAGAzB,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAA4mF,WAAAj6H,KAAA7C,EAAA,sBACA,CACA6iB,OAAA5f,EACA01D,WAAA91D,KAAAwB,QAAAs0D,gBgB/5BAt6D,IAAAkG,MAAA0hB,QAAA,GAEA5nB,IAAAkG,MAAA0hB,QAAAu3G,qBAAAn/H,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BACAvO,MAAA,IACA8nB,SAAA,MACAI,mBAAA,GAEAjD,OAAA,CACAmnF,+BAAA,uBACAC,iCAAA,sBAEA5jF,mBAAA,WAAA,IAAA6jF,EAAAv6B,kBAAAC,sBAAAC,KAAA,SAAAs6B,IAAA,IAAAC,EAAAh7H,KAAA,OAAAwgG,sBAAAK,KAAA,SAAAo6B,GAAA,OAAA,OAAAA,EAAAhtE,KAAAgtE,EAAA37E,MAAA,KAAA,EAAA,GACAt/C,KAAAywC,WAAA,EAEA,MAAAzwC,KAAAwB,QAAAosD,MACA5tD,KAAA4tD,MAAA5tD,KAAAwB,QAAAosD,MAEA5tD,KAAA4tD,MAAA,GAGA,MAAA5tD,KAAA0tD,YAAA1tD,KAAA0tD,WAAAjd,UATA,CAAAwqF,EAAA37E,KAAA,EAAA,MAAA,OAAA27E,EAAA37E,KAAA,EAUAt/C,KAAA0tD,WAAA7hB,QAVA,KAAA,EAWAluC,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAA8kC,GACAk2E,EAAAptE,MAAAxvC,KAAA,CACA7d,OAAAukD,EAAAo2E,gBACAC,YAAAr2E,EAAAs2E,iBACA/4H,KAAAyiD,EAAA5kC,IAAA,aACAm7G,OAAAv2E,EAAA5kC,IAAA,cAhBA,KAAA,EAqBAlgB,KAAAywC,WAAA,EACAzwC,KAAA+rC,SAtBA,KAAA,EAAA,IAAA,MAAA,OAAAkvF,EAAA/xE,SAAA6xE,EAAA/6H,SAAA,OAAA,WAAA,OAAA86H,EAAAj8G,MAAA7e,KAAAoK,YAAA,GAwBAmqC,YAAA,WACA,IAAA/4C,IAAAkG,MAAA0hB,QAAAk4G,gBAAA,CACA7mF,GAAAz0C,KAAA7C,EAAA,kBACAywD,MAAA5tD,KAAA4tD,SAGA5Z,WAAA,WACA,MAAA,CACAxyC,QAAAxB,KAAAwB,QACAivC,UAAAzwC,KAAAywC,cAKAj1C,IAAAkG,MAAA0hB,QAAAk4G,gBAAA9/H,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,oBACAsW,aAAA,IAEAW,WAAA,WACA,MAAA,CACA4Z,MAAA5tD,KAAAwB,QAAAosD,QAGArZ,YAAA,ef7DA/4C,IAAAomD,OAAA,GAEApmD,IAAAomD,OAAA25E,YAAA//H,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACA6sC,YAAA,CACAnB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gBACAz9B,MAAA,GACA4wE,MAAA,GACA3uE,MAAA,GACAi6H,kBAAA,GACAC,yBAAA,GACAC,uBAAA,GACAC,eAAA,OACAC,aAAA,EACA3nE,SAAA,EACA4nE,gBAAA,EACAC,kBAAA,EACAC,YAAAp+H,EAAAu4C,KACAgjB,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,MAEAzC,OAAA,CACAuoF,wBAAA,OACAC,0BAAA,SACAC,wBAAA,OACAC,kBAAA,WACAC,sBAAA,YAEAC,UAAA,GACAvoF,kBAAA,WAEA9zC,KAAAqiD,SAAAriD,KAAAs4D,aAEArkB,aAAA,WACAj0C,KAAAs8H,oBACAt8H,KAAAg0C,WAAA,CACA10C,MAAAU,KAAAuyD,kBACAyB,OAAAh0D,KAAAg0D,OACAqoE,UAAAr8H,KAAAq8H,UACA76H,QAAAxB,KAAAwB,UAGA86H,kBAAA,aAGA/nF,YAAA,WACAv0C,KAAAg0D,QACAh0D,KAAA7C,EAAA,aAAAm+D,QAAAnJ,SAEAnyD,KAAAu8H,oBAEAA,iBAAA,aAGAhqE,gBAAA,WACA,MAAA,mBAAAvyD,KAAAwB,QAAA+wD,gBAAAvyD,KAAAwB,QAAA+wD,gBAAAvyD,KAAAwB,QAAAlC,OAAAU,KAAAwB,QAAAlC,OAEAg5D,SAAA,WACA,OAAAt4D,KAAAwB,QAAAlC,OAEA+iD,SAAA,SAAA/iD,GACAU,KAAAwB,QAAAlC,MAAAA,GAEA2iD,SAAA,SAAA5kD,GACAA,GAAA,KAAAA,EAAAunE,MACA5kE,KAAA2wC,OAIA3wC,KAAAqiD,SAAAriD,KAAA7C,EAAA,aAAAyE,QAEAm6H,YAAA,WACA,mBAAA/7H,KAAAwB,QAAAu6H,aACA/7H,KAAAwB,QAAAu6H,eAGA7mB,KAAA,WACAl1G,KAAA+7H,cACA/7H,KAAAg0D,QAAA,EACAh0D,KAAA+rC,UAEAguB,OAAA,WACA/5D,KAAAwB,QAAA03D,SAAAl5D,KAAAs4D,YACAt4D,KAAAg0D,QAAA,EACAh0D,KAAA+rC,UAEA4E,KAAA,WACA3wC,KAAAwB,QAAA23D,OAAAn5D,KAAAs4D,YACAt4D,KAAAg0D,QAAA,EACAh0D,KAAA+rC,YAIAvwC,IAAAomD,OAAA46E,oBAAAhhI,IAAAomD,OAAA25E,YAAAt7H,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBACA7mB,OAAA,GAEAmmH,UAAA,WACA9nF,YAAA,WACA,GAAAv0C,KAAAg0D,OAAA,CACA,IAAAsC,EAAAt2D,KAAA7C,EAAA,aACA3B,IAAAC,QAAAgc,aAAAyD,kBAAAo7C,EAAAt2D,KAAAwB,QAAA0U,QACA,MAAAlW,KAAAwB,QAAAlC,QACAU,KAAAwB,QAAAlC,MAAA,GAEAg3D,EAAA10D,IAAA,IAAA5B,KAAAwB,QAAA0U,OAAAlW,KAAAwB,QAAAlC,MAAA,IAAAU,KAAAwB,QAAAlC,OACAg3D,EAAAgF,QAAAnJ,WAGAlQ,SAAA,SAAA5kD,GACA,IAAAib,EAAAnb,EAAAE,EAAAgc,eAAAzX,MAAAtD,QAAA,KAAA,KACAsD,EAAAW,SAAA/G,IAAAC,QAAAkZ,cAAAY,YAAA+C,IASA,OARAtN,MAAApJ,GAKAA,EAAA,EAJA,IAAA5B,KAAAwB,QAAA0U,SACAtU,GAAA,KAKA5B,KAAAqiD,SAAAzgD,GACAA,KAIApG,IAAAomD,OAAAquB,gBAAAz0E,IAAAomD,OAAA25E,YAAAt7H,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBAEAs/F,UAAA,SAGA7gI,IAAAomD,OAAA66E,wBAAAjhI,IAAAomD,OAAA25E,YAAAt7H,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,8BACAsW,aAAA,CACAqpF,aAAA,IAAAlhI,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qCAGAs/F,UAAA,SACAC,kBAAA,WACAt8H,KAAAwB,QAAAo6H,cACA57H,KAAAwB,QAAAmqC,SAAA3rC,KAAAwB,QAAA6xC,aAAAqpF,cAEA18H,KAAAwB,QAAAm7H,oBAAA,MAAA38H,KAAAwB,QAAAm7H,oBAAA38H,KAAAwB,QAAAm7H,oBAAA,IAEAJ,iBAAA,WACA,IAAA/gI,IAAAomD,OAAAC,aAAAlkD,EAAAsC,OAAAD,KAAAwB,QAAAm7H,oBAAA,CACAloF,GAAAz0C,KAAA7C,EAAA,mBACA4kD,aAAA/hD,KAAAwB,QAAAlC,MACA2iD,SAAAtkD,EAAAgC,KAAA,SAAAL,GAEA,IAAAs9H,GADA58H,KAAAwB,QAAAlC,MAAAA,EACA,mBAAAU,KAAAwB,QAAAygD,YACA26E,EAAA58H,KAAAwB,SAAAygD,SAAApjC,MAAA+9G,EAAAxyH,YAEApK,UAGA+7H,YAAA,WAAA,IAAAc,EAAA78H,KACA,GAAA,mBAAAA,KAAAwB,QAAAs7H,WAAA,CACA,IAAAhsE,EAAA,SAAA0B,GACA,UAAAh3D,IAAAC,QAAAqW,cAAAC,YAAAygD,KACAqqE,EAAAr7H,QAAAm7H,oBAAAnqE,QAAAA,EACAqqE,EAAA9wF,WAEAymB,EAAAxyD,KAAAwB,QAAAs7H,WAAA,SAAAx3B,GACAx0C,EAAAw0C,KAEAx0C,EAAA0B,GAGA,OAAAh3D,IAAAomD,OAAA25E,YAAAl6H,UAAA06H,YAAAl9G,MAAA7e,KAAAoK,YAEAmoD,gBAAA,WACA,GAAA,MAAAvyD,KAAAwB,QAAAlC,OAAA,EAAA3B,EAAAC,KAAAoC,KAAAwB,QAAAm7H,oBAAAnqE,SAAA,CACA,IAAAuqE,EAAAp/H,EAAAka,KAAA7X,KAAAwB,QAAAm7H,oBAAAnqE,QAAA70D,EAAAgC,KAAA,SAAAmzD,GACA,OAAAA,EAAAh2D,KAAAkD,KAAAwB,QAAAlC,OACAU,OACA,GAAA,MAAA+8H,EACA,OAAAA,EAAAhgI,UAEA,GAAA,EAAAY,EAAAC,KAAAoC,KAAAwB,QAAAw7H,qBACA,OAAAh9H,KAAAwB,QAAAw7H,oBAEA,MAAA,SAIAxhI,IAAAomD,OAAAq7E,oBAAAzhI,IAAAomD,OAAA25E,YAAAt7H,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,yBACAz9B,MAAA,GACA4wE,MAAA,GACAgtD,SAAA,GACAjpE,SAAA,EACAunE,kBAAA,GACAC,yBAAA,GACAC,uBAAA,GACAK,YAAAp+H,EAAAu4C,KACAgjB,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,MAEAmmF,UAAA,WACAp6E,SAAA,SAAA5kD,GACA2C,KAAAqiD,SAAAllD,EAAAE,EAAAgc,eAAAzX,UAIApG,IAAAomD,OAAAu7E,gBAAA3hI,IAAAomD,OAAA25E,YAAAt7H,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,qBACAz9B,MAAA,GACA4wE,MAAA,GACAgtD,SAAA,GACAjpE,SAAA,EACAunE,kBAAA,GACAC,yBAAA,GACAC,uBAAA,GACAK,YAAAp+H,EAAAu4C,KACAgjB,SAAAv7D,EAAAu4C,KACAijB,OAAAx7D,EAAAu4C,KACAknF,gBAAA,cACA36H,WAAAjH,IAAAC,QAAAwH,YAAAE,YAAAqB,WAEA63H,UAAA,OACA9nF,YAAA,WACA,EAAA52C,EAAAC,KAAAoC,KAAA7C,EAAA,YAAA0a,KAAA,gBACA7X,KAAAq9H,WAAAr9H,KAAA7C,EAAA,YAAA0a,KAAA,aACA,IAAArc,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAz0C,KAAAq9H,WACA7nE,kBAAA,CACA3jD,OAAA7R,KAAAwB,QAAAiB,aAAAjH,IAAAC,QAAAwH,YAAAE,YAAAC,KAAA5H,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,KAAA5H,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAAN,UACAi4E,YAAAz8E,KAAAs4D,gBAKAjW,SAAA,SAAA/iD,GACA,WAAA9D,IAAAC,QAAAqW,cAAAC,YAAAzS,GACAU,KAAAwB,QAAAlC,MAAA,IAAAgD,KAAAhD,GAEAU,KAAAwB,QAAAlC,MAAAA,GAEA2iD,SAAA,SAAA5kD,GACA2C,KAAAqiD,SAAAhlD,EAAAgF,KAAA28E,KAEAzsB,gBAAA,WACA,IAAAjzD,EAAAU,KAAAs4D,WACA,OAAA,MAAAh5D,EAAAU,KAAAwB,QAAA07H,SAAA1hI,IAAAC,QAAAwH,YAAAC,cAAA5D,EAAAU,KAAAwB,QAAAiB,eAIAjH,IAAAomD,OAAA8wB,kBAAAl3E,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACA9mB,KAAA,KACAk9H,oBAAA,KACA3qD,OAAA,GACArzE,MAAA,KACAi1E,SAAA52E,EAAAu4C,MAEAzC,OAAA,CACA8pF,MAAA,WAEAhpF,YAAA,WACAv0C,KAAAtC,IAAAoa,SAAA,oBACA9X,KAAAtC,IAAAwc,SAAA,mBAGAla,KAAAw9H,cAEAx9H,KAAAy9H,aAAAz9H,KAAAtC,IAAA+/H,aAAA9/H,EAAAupB,SAAAlnB,KAAAwB,QAAA,CACA2wD,OAAAx0D,EAAAgC,KAAAK,KAAAmyD,OAAAnyD,MACA+tD,OAAApwD,EAAAgC,KAAAK,KAAA+tD,OAAA/tD,SAGA,IAAAsvC,EAAAtvC,KACAA,KAAAy9H,aAAAr9H,KAAA,mBAAAs9H,YAAA,SAAAC,EAAA/vE,GACAjwD,EAAAuhB,KAAA0uC,EAAAjwD,EAAAgC,KAAA,SAAAmlD,GACA9kD,KAAA49H,gBAAAD,EAAA74E,IACA9kD,OACA7C,EAAAwgI,GAAAzjH,SAAA,yBAEAla,KAAAy9H,aAAAr9H,KAAA,mBAAAy9H,YAAA,WACA79H,KAAA89H,KAAAlpF,QAAAsT,WAAA5Y,EAAA5xC,IAAAwqD,eAGA,MAAAloD,KAAAwB,QAAAlC,OACAU,KAAAqiD,SAAAriD,KAAAs4D,aAGAklE,YAAA,WACA,UAAAhiI,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAApB,OAAA,MAAAJ,KAAAwB,QAAA87H,sBACAt9H,KAAAwB,QAAAmxE,OAAA,GACAh1E,EAAAuhB,KAAAlf,KAAAwB,QAAApB,KAAAzC,EAAAgC,KAAA,SAAAo+H,GACA/9H,KAAAwB,QAAAmxE,OAAAv0D,KAAApe,KAAAg+H,iBAAAD,KACA/9H,SAGAi+H,aAAA,SAAAz/G,GACA,MAAAA,IACAA,EAAApe,MAAAJ,KAAAwB,QAAA87H,qBACAt9H,KAAAwB,QAAApB,KAAAoe,EAAApe,KACAJ,KAAAw9H,eACA,UAAAhiI,IAAAC,QAAAqW,cAAAC,YAAAyM,EAAAm0D,UACA3yE,KAAAwB,QAAAmxE,OAAAn0D,EAAAm0D,SAGA3yE,KAAAy9H,cACAz9H,KAAAtC,IAAA+/H,aAAA,SAAA,SAAAz9H,KAAAwB,QAAAmxE,SAGAra,SAAA,WACA,OAAAt4D,KAAAtC,IAAAkE,OAEAygD,SAAA,SAAA/iD,GACAU,KAAAtC,IAAAkE,IAAAtC,IAEA8iD,QAAA,SAAA/kD,GACAF,EAAAE,EAAAgc,eAAAokH,aAAA,WAEAS,QAAA,SAAA7gI,GAGA,IAAAM,EAAAC,KAAAoC,KAAAtC,IAAAkE,QACAsvC,WAAAvzC,EAAAgC,KAAA,WACAK,KAAAoiD,QAAA/kD,IACA2C,MAAA,MAGA+tD,OAAA,SAAA1wD,EAAA6D,GACA,mBAAAlB,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAA9kD,EAAAE,EAAAgc,eAAAzX,QAGAuwD,OAAA,SAAA90D,EAAA6D,GACA,IAAAqY,EAAApc,EAAAE,EAAAmc,QACAD,EAAA3X,IAAAV,EAAA4jD,KAAAxlD,OACAia,EAAAqS,QAAA,SACA,mBAAA5rB,KAAAwB,QAAA+yE,UACAv0E,KAAAwB,QAAA+yE,SAAA,CACAj1E,MAAA4B,EAAA4jD,KAAAxlD,MACAgW,MAAA,UAAA9Z,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAApB,MAAAzC,EAAAka,KAAA7X,KAAAwB,QAAApB,KAAAzC,EAAAgC,KAAA,SAAAo+H,GACA,OAAA/9H,KAAAg+H,iBAAAD,GAAAn7H,gBAAA1B,EAAA4jD,KAAAxlD,MAAAsD,eACA5C,OAAA,KACA3C,EAAAA,KAIA2gI,iBAAA,SAAAD,GACA,IAAAnzH,EAAA,kBAAApP,IAAAC,QAAAqW,cAAAC,YAAAgsH,GAAA,GAAAA,EAAA79G,IAAAlgB,KAAAwB,QAAA87H,qBAAAS,EAAA/9H,KAAAwB,QAAA87H,qBACA,OAAA1yH,GAAA,MAIApP,IAAAomD,OAAA2T,WAAA/5D,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAsuC,kBAAA,CACAinB,YAAA,KACA0hD,kBAAA,EACAtsH,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAAN,UACA+5E,MAAA,CACA/xE,KAAA,eACAnK,KAAA,sBACAm8E,GAAA,oBACAC,KAAA,sBACAp/B,SAAA,sBACAC,KAAA,uBACA5wC,MAAA,oBACAkgC,MAAA,eACAmK,MAAA,gBAEAqlF,YAAA,EACAt0C,SAAA,GAEAu0C,aAAA,GACAC,iBAAA,EACAC,YAAA,EACAt8E,SAAAtkD,EAAAu4C,KACAsoF,OAAA7gI,EAAAu4C,KACAuoF,gBAAA,EACAC,gBAAA,EACAzqE,SAAA,EACA/uD,UAAA,IAAA5C,MAAAsL,mBAAA,QAAA,CAAA+wH,aAAA,UAAA7wH,MAAA,KAAA,IAEA2lC,OAAA,CACAmrF,UAAA,SACAjgD,YAAA,YAEAtwC,WAAA,SAAA7sC,GACA,GAAA,MAAAA,EAAAg0D,kBAAA,CASA,GARAx1D,KAAAwB,QAAAg0D,kBAAA73D,EAAAupB,SAAA1lB,EAAAg0D,kBAAAh0D,EAAAg0D,kBAAA,GAAAx1D,KAAAknB,SAAAsuC,mBAEAx1D,KAAA6+H,WAAA7+H,KAAAwB,QAAAg0D,kBAAAs0B,SACA,MAAA9pF,KAAAwB,QAAAg0D,kBAAAinB,aAAA,EAAA9+E,EAAAC,KAAAoC,KAAAtC,IAAAkE,SACA5B,KAAAwB,QAAAg0D,kBAAAinB,YAAAz8E,KAAAtC,IAAAkE,MACA5B,KAAAtC,IAAAkE,IAAA,KAGA,iBAAA5B,KAAAwB,QAAAg0D,kBAAAinB,aAAA,EAAA9+E,EAAAC,KAAAoC,KAAAwB,QAAAg0D,kBAAAinB,aAAA,CACAz8E,KAAAwB,QAAA8xD,YACAtzD,KAAAwB,QAAAg0D,kBAAAinB,YAAAn+E,QAAA,YAAA,IAGA,IAAAwgI,EAAAA,EAAAtjI,IAAAC,QAAAwH,YAAAgH,gBAAAjK,KAAAwB,QAAAg0D,kBAAAinB,YAAAz8E,KAAAwB,QAAAg0D,kBAAA3jD,SAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,MACA4H,MAAA8zH,EAAA7zH,YAGAjL,KAAAwB,QAAAg0D,kBAAAinB,YAAA,KACAz8E,KAAAV,MAAA,MAHAU,KAAAV,MAAAw/H,MAKA,SAAAtjI,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAAg0D,kBAAAinB,aACAz8E,KAAAV,MAAAU,KAAAwB,QAAAg0D,kBAAAinB,YAEAz8E,KAAAV,MAAA,KAEAU,KAAAwB,QAAAg0D,kBAAAinB,YAAAz8E,KAAAV,OAGAU,KAAAtC,IAAAoa,SAAA,aAAA9X,KAAAtC,IAAA+a,KAAA,eACAjX,EAAAyyD,SAAA,GAGAzyD,EAAA+8H,aACA/8H,EAAAg0D,kBAAA3jD,OAAA,MAGA,IAAAlU,EAAAC,KAAAoC,KAAAwB,QAAA0D,YACAlF,KAAAwB,QAAA0D,UAAA,IAAA5C,MAAAsL,mBAAA,QAAA,CAAA+wH,aAAA,UAAA7wH,MAAA,KAAA,KAGAymC,YAAA,WAAA,IAAAwqF,EAAA/+H,KAEA,GADAA,KAAAtC,IAAA+a,KAAA,YAAAzY,KAAAwB,QAAAyyD,SACAj0D,KAAAwB,QAAAk9H,gBAAA1+H,KAAAwB,QAAAyyD,QAAA,CACAj0D,KAAAtC,IAAA4zD,MAAA,+CAEA,IAAAhvD,MAAA8Q,oBACApT,KAAAg/H,eAAA,IAAAxjI,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAAtC,IAAA8F,SAAAqU,KAAA,cACAkqC,aAAA/hD,KAAAwB,QAAA0D,SACAivF,cAAA,EACA3hC,QAAAxyD,KAAAi/H,2BACAtqE,YAAA,EACA7S,cAAA,EACAG,SAAA,SAAA3iD,GACAy/H,EAAAv9H,QAAA0D,SAAA5F,EACA,mBAAAy/H,EAAAv9H,QAAA09H,kBACAH,EAAAv9H,QAAA09H,iBAAAH,EAAAv9H,QAAA0D,kBAIA,IAAAlF,KAAAwB,QAAAi9H,gBAAAz+H,KAAAwB,QAAAk9H,kBAAA1+H,KAAAszD,cAAAtzD,KAAAwB,QAAA+8H,YAAA,CACA,IAAAY,EAAAhiI,EAAA,QAAA,CACAwd,MAAA,uBACA7Z,OAAA3D,EAAA,SAAA,CACAwd,MAAA,qBACAwhD,KAAAn8D,KAAAwB,QAAA0D,WACAlF,KAAAtC,IAAA4zD,MAAA6tE,GAGAn/H,KAAA8+E,eAAA9+E,KAAAtC,IAAAohF,eAAA9+E,KAAAo/H,oBAEAp/H,KAAAtC,IAAAob,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAk+H,QAAAl+H,QAEAo/H,iBAAA,WACA,OAAAzhI,EAAAupB,SAAA,CACAm4G,mBAAAr/H,KAAAs/H,yBACAt/H,KAAAwB,QAAAg0D,oBAEA+pE,YAAA,SAAApsH,GACA,IAAAxV,EAAAC,KAAAuV,IAAA,MAAAnT,KAAAg/H,iBAIAh/H,KAAAwB,QAAA0D,SAAAiO,EACAnT,KAAAg/H,eAAA38E,SAAAlvC,KAEA8rH,yBAAA,WACA,OAAAthI,EAAAshB,IAAAthB,EAAAwpD,OAAA3rD,IAAAC,QAAAwH,YAAAkC,UAAA,SAAAD,GACA,OAAAA,EAAAD,SACA,SAAAC,GACA,MAAA,CACApI,GAAAoI,EAAAU,KACArE,MAAA2D,EAAAU,KACA7I,KAAA,OAAAvB,IAAAC,QAAAwH,YAAAmC,2BAAAF,EAAAD,QAAA,KAAAC,EAAAnI,SAIAyiI,gBAAA,SAAAlgI,GACAU,KAAAwB,QAAA68H,aAAA/+H,EAEA,IAAA25E,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAAz3E,QAAAxB,KAAAo/H,qBAGAE,sBAAA,WACA,IACAI,EADAC,EAAA,GACA3/H,KAAAwB,QAAA88H,kBACAoB,EAAAC,GAAAvhH,KAAAS,MAAA6gH,EAAA,CAAA,EAAA,IAKA,OAHA,EAAA/hI,EAAAC,KAAAoC,KAAAwB,QAAA68H,gBACAsB,EAAAhiI,EAAA4hE,MAAAogE,EAAA3/H,KAAAwB,QAAA68H,eAEA,EAAA1gI,EAAAC,KAAA+hI,IAAAA,GAEArsE,WAAA,WACA,OAAA,IAAAtzD,KAAAwB,QAAAg0D,kBAAA3jD,OAAA7P,QAAA,OAAA,IAAAhC,KAAAwB,QAAAg0D,kBAAA3jD,OAAA7P,QAAA,MAEAk8H,QAAA,WACA,IAAA5lH,EAAAtY,KAAAtC,IAAAkE,MACAg+H,EAAA,KACApkI,IAAAC,QAAAwH,YAAAoO,aAAAiH,KACAsnH,EAAApkI,IAAAC,QAAAwH,YAAAgH,gBAAAqO,IAEAtY,KAAA6/H,YAAAD,IAEA39E,SAAA,SAAA5kD,GACAA,EAAAgF,MACArC,KAAA6/H,YAAAxiI,EAAAgF,KAAA28E,KAGAw/C,OAAA,WACA,mBAAAx+H,KAAAwB,QAAAg9H,QACAx+H,KAAAwB,QAAAg9H,OAAAx+H,OAEA66C,KAAA,WACA,IAAAo+B,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAAp+B,QAGApD,KAAA,WACA,IAAAwhC,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAAxhC,QAGAooF,YAAA,SAAAD,GACA,IAAAE,GAAA,EACAxsE,EAAAtzD,KAAAszD,aACAirE,EAAAv+H,KAAAwB,QAAA+8H,WACA,GAAA,MAAAv+H,KAAAV,MACAwgI,GAAA,OACA,IAAAxsE,GAAAirE,IAAA,IAAA/iI,IAAAC,QAAAwH,YAAAkN,YAAAyvH,EAAA,IAAAt9H,KAAAtC,KAAAV,QACAwgI,GAAA,OACA,IAAAxsE,EAAA,CACA,IAAAysE,EAAAvkI,IAAAC,QAAAwH,YAAAC,cAAAlD,KAAAV,MAAA9D,IAAAC,QAAAwH,YAAAE,YAAAC,WACA,IAAA28H,GAAAA,IAAAvkI,IAAAC,QAAAwH,YAAAC,cAAA08H,EAAApkI,IAAAC,QAAAwH,YAAAE,YAAAC,QACA08H,GAAA,GAIAA,IACAxsE,GAAAirE,GAAA,MAAAqB,GACAA,EAAAnxH,SAAA,EAAA,EAAA,EAAA,GAEAzO,KAAAV,MAAAsgI,EAEA,mBAAA5/H,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,cAAA,IAAA29E,EAAA,KAAAA,KAIA98E,QAAA,WACA9iD,KAAAtC,IAAA+a,KAAA,YAAA,IAEA4pC,SAAA,SAAA80B,GAEA,GAAA,QADAn3E,KAAAV,MAAA63E,GAEAn3E,KAAAtC,IAAAkE,IAAA,QACA,CACA,IAAAq3E,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAA52B,SAAA80B,KAIA6oD,iBAAA,SAAA7oD,GAGA,GAAA,QADAn3E,KAAAV,MAAA63E,GAEAn3E,KAAAtC,IAAAkE,IAAA,QACA,CACA5B,KAAA8+E,eAAA3iE,IAAA,aAEA,IAAA88D,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAA52B,SAAA80B,GAGAn3E,KAAA8+E,eAAAhmE,GAAA,YAAA9Y,KAAAiiD,SAAAtiD,KAAAK,SAGAs4D,SAAA,WACA,OAAAt4D,KAAAV,OAEAu/H,WAAA,SAAAv/H,GAAA,IAAA2gI,EACAn2C,EAAAxqF,EACAwqF,IACA,iBAAAA,IACAA,EAAA,IAAAxnF,KAAAwnF,IAGAA,EAAAtuF,IAAAC,QAAAwH,YAAAC,cAAA4mF,EAAAtuF,IAAAC,QAAAwH,YAAAE,YAAAC,OAGApD,KAAAwB,QAAAg0D,kBAAAs0B,QAAA,QAAAm2C,EAAAn2C,SAAA,IAAAm2C,GAAAA,EAEA,IAAAhnD,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAA6Q,QAAA9pF,KAAAwB,QAAAg0D,kBAAAs0B,UAGAo2C,gBAAA,SAAAC,EAAA7gI,GACAU,KAAAwB,QAAAg0D,kBAAA2qE,GAAA7gI,EACA,IAAA25E,EAAAj5E,KAAAy/H,YACA,MAAAxmD,GACAA,EAAAz3E,QAAAxB,KAAAwB,QAAAg0D,oBAGAiqE,UAAA,WACA,OAAA,MAAAz/H,KAAA8+E,eAAA9+E,KAAA8+E,eAAA1+E,KAAA,kBAAA,MAEAm4D,UAAA,SAAA99C,GACAjf,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAAtC,KAAA,EAAA,CACA+c,UAAAA,KAGA49C,UAAA,WACA78D,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAAtC,KAAA,MAIAlC,IAAAomD,OAAAw+E,uBAAA,WACA,SAAAC,EAAA3iI,EAAAsiB,GAAA,IAAAxe,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAqgI,GACArgI,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAm7H,oBAAA,GACA2D,eAAA,KACAzzF,YAAA,QAGA,IAAAlvC,EAAAC,KAAAoC,KAAAwB,QAAA8+H,kBAIAtgI,KAAAtC,IAAAA,EACAsC,KAAAggB,OAAAA,EAEAhgB,KAAAugI,QAAA,GACAvgI,KAAAwgI,eAhBA,OAAAv1F,aAAAo1F,EAAA,CAAA,CAAAz/H,IAAA,cAAAtB,MAmBA,WACAU,KAAAygI,eACAzgI,KAAAugI,QAAA,GAEA,IAAAjxF,EAAAtvC,KACAA,KAAAtC,IAAAma,KAAA7X,KAAAwB,QAAA8+H,gBAAAphH,KAAA,WACA,IAAAqvB,EAAA,KACAzxC,EAAAK,EAAA6C,MAAA0a,QAAA,MAAApa,KAAA,MAOA,GANA,EAAA3C,EAAAC,KAAAd,KACAyxC,EAAA5wC,EAAAka,KAAAy3B,EAAAtvB,OAAA,SAAAuuB,GAAA,IAAAmyF,EACA,OAAA,QAAAA,EAAAnyF,EAAAe,EAAA9tC,QAAAqrC,oBAAA,IAAA6zF,OAAA,EAAAA,EAAA51H,cAAAhO,GACAkD,OAGA,MAAAuuC,EAAA,CACA,IAAAwT,EAAAzS,EAAA9tC,QAAAm7H,oBAAA56E,cAAA,mBAAAzS,EAAA9tC,QAAAm7H,oBAAA56E,aAAAzS,EAAA9tC,QAAAm7H,oBAAA56E,aAAAxT,GAAA,KACAiC,EAAA7yC,EAAAupB,SAAA,CACAutB,GAAAt3C,EAAA6C,MACA+hD,aAAAA,GAAA,WACA,OAAA,EAAApkD,EAAAC,KAAA0xC,EAAA9tC,QAAAm/H,gBACA,kBAAAnlI,IAAAC,QAAAqW,cAAAC,YAAAw8B,GAAA,GACAA,EAAAruB,IAAAovB,EAAA9tC,QAAAm/H,gBACApyF,EAAAe,EAAA9tC,QAAAm/H,gBAEA,MAEAnuE,QAAA,WACA,IAAAA,EAAAljB,EAAA9tC,QAAAm7H,oBAAAnqE,QACA,MAAA,mBAAAA,EACAA,EAAAjkB,GAEAikB,GAEAm0C,WAAA,WACA,IAAAi6B,EAAAtxF,EAAA9tC,QAAAm7H,oBAAAh2B,WACA,MAAA,mBAAAi6B,EACAA,EAAAryF,GAEAqyF,GAEA3+E,SAAA,SAAA3iD,GACA,mBAAAgwC,EAAA9tC,QAAAygD,UACA3S,EAAA9tC,QAAAygD,SAAA1T,EAAAjvC,KAGAgwC,EAAA9tC,QAAAm7H,qBACArtF,EAAAixF,QAAAhyF,EAAA+f,KAAA,IAAA9yD,IAAAomD,OAAAC,aAAArR,QAjEA,CAAA5vC,IAAA,iBAAAtB,MAsEA,SAAAxC,GACA,OAAAkD,KAAAugI,QAAAzjI,KAvEA,CAAA8D,IAAA,eAAAtB,MA0EA,WACA3B,EAAAuhB,KAAAlf,KAAAugI,QAAA,SAAAtnD,GACAA,EAAA18E,WAEAyD,KAAAugI,QAAA,KA9EA,CAAA3/H,IAAA,SAAAtB,MAiFA,WACAU,KAAAygI,mBAlFAJ,EAAA,GAsFA7kI,IAAAomD,OAAAi/E,qBAAA,WACA,SAAAC,EAAApjI,EAAAsiB,GAAA,IAAAxe,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA8gI,GACA9gI,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAu/H,kBAAA,GACAT,eAAA,KACAzzF,YAAA,QAGA,IAAAlvC,EAAAC,KAAAoC,KAAAwB,QAAA8+H,kBAIAtgI,KAAAtC,IAAAA,EACAsC,KAAAggB,OAAAA,EAEAhgB,KAAAugI,QAAA,GACAvgI,KAAAwgI,eAhBA,OAAAv1F,aAAA61F,EAAA,CAAA,CAAAlgI,IAAA,cAAAtB,MAmBA,WACAU,KAAAygI,eACAzgI,KAAAugI,QAAA,GAEA,IAAAjxF,EAAAtvC,KACAA,KAAAtC,IAAAma,KAAA7X,KAAAwB,QAAA8+H,gBAAAphH,KAAA,WACA,IAAAqvB,EAAA,KACAzxC,EAAAK,EAAA6C,MAAA0a,QAAA,MAAApa,KAAA,MAOA,GANA,EAAA3C,EAAAC,KAAAd,KACAyxC,EAAA5wC,EAAAka,KAAAy3B,EAAAtvB,OAAA,SAAAuuB,GAAA,IAAAyyF,EACA,OAAA,QAAAA,EAAAzyF,EAAAe,EAAA9tC,QAAAqrC,oBAAA,IAAAm0F,OAAA,EAAAA,EAAAl2H,cAAAhO,GACAkD,OAGA,MAAAuuC,EAAA,CACA,IAAAi3C,EAAA,kBAAAhqF,IAAAC,QAAAqW,cAAAC,YAAAw8B,GAAA,GAAAA,EAAAruB,IAAAovB,EAAA9tC,QAAAm/H,gBAAApyF,EAAAe,EAAA9tC,QAAAm/H,gBACAM,EAAA,IAAA3+H,KAAAkjF,GACAh1C,EAAA7yC,EAAAupB,SAAA,CACAutB,GAAAt3C,EAAA6C,MACAiiD,SAAA,SAAA3iD,GACA,mBAAAgwC,EAAA9tC,QAAAygD,UACA3S,EAAA9tC,QAAAygD,SAAA1T,EAAAjvC,IAGAk2D,kBAAA73D,EAAAupB,SAAA,CACAu1D,YAAAwkD,aAAA3+H,OAAA0I,MAAAi2H,EAAAh2H,WAAAg2H,EAAA,MACA3xF,EAAA9tC,QAAAu/H,kBAAAvrE,oBACAlmB,EAAA9tC,QAAAu/H,mBACAzxF,EAAAixF,QAAAhyF,EAAA+f,KAAA,IAAA9yD,IAAAomD,OAAA2T,WAAA/kB,QA/CA,CAAA5vC,IAAA,iBAAAtB,MAoDA,SAAAxC,GACA,OAAAkD,KAAAugI,QAAAzjI,KArDA,CAAA8D,IAAA,eAAAtB,MAwDA,WACA3B,EAAAuhB,KAAAlf,KAAAugI,QAAA,SAAAtnD,GACAA,EAAA18E,WAEAyD,KAAAugI,QAAA,KA5DA,CAAA3/H,IAAA,SAAAtB,MA+DA,WACAU,KAAAygI,mBAhEAK,EAAA,GAoEAtlI,IAAAomD,OAAAC,aAAArmD,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACA+6B,SAAAtkD,EAAAu4C,KACAgrF,OAAAvjI,EAAAu4C,KACAsoF,OAAA7gI,EAAAu4C,KACAjvB,MAAA,cACAomD,iBAAA,eACA8zD,cAAA,eACAp/E,aAAA,KACAq/E,aAAA,EACAzsE,YAAA,EACAgyC,YAAA,EACAjhB,WAAA,EACA27C,qBAAA,EACArJ,cAAA,EACAl2E,cAAA,EACAqyC,cAAA,EACAmtC,gBAAA,EACAh0D,QAAA,EACAtnD,QAAA,EACAu7G,sBAAA,EACA95B,iBAAA,KACA5wB,iBAAA,EACA2qD,4BAAA,EACAC,sBAAA,EACAxtE,SAAA,GAEAxgB,OAAA,CACAiuF,oBAAA,WACAC,mBAAA,WACAC,iBAAA,UAEA9tF,kBAAA,WACA9zC,KAAAwB,QAAA2yF,cACAn0F,KAAAtC,IAAA4C,KAAA,mBAAA,QAGA,EAAAN,KAAAwB,QAAAigI,uBACAzhI,KAAAtC,IAAA4C,KAAA,4BAAA,WAAAN,KAAAwB,QAAAigI,uBAEAzhI,KAAAwB,QAAA8/H,gBACAthI,KAAAtC,IAAAwc,SAAA,kBAGAla,KAAAtC,IAAAoa,SAAA,aAAA9X,KAAAtC,IAAA+a,KAAA,eACAzY,KAAAwB,QAAAyyD,SAAA,GAGA,EAAAj0D,KAAAtC,IAAAhB,QACAsD,KAAAtC,IAAA0C,KAAA,mBAAAJ,MAGAA,KAAAtC,IAAA+a,KAAA,YAAAzY,KAAAwB,QAAAyyD,UAEAhgB,aAAA,WAAA,IAAA4tF,EAAA7hI,KAKA8hI,EAAAnkI,EAAAC,KAAAoC,KAAA7C,EAAA,YAAAmvC,OAAA,WACA,YAAAjiC,IAAAlN,EAAA6C,MAAAI,KAAA,eAEA2hI,EAAA,EAAAD,EAeA,GAdA9hI,KAAAwB,QAAA6/H,oBAAArhI,KAAAwB,QAAAkkF,WAAA1lF,KAAAwB,QAAAmzD,YAAA,IAAAmtE,EAEA9hI,KAAAwB,QAAAmzD,WAAA30D,KAAAwB,QAAAmzD,YAAA30D,KAAAtC,IAAAoa,SAAA,aAAA9X,KAAAtC,IAAA+a,KAAA,aAAAspH,GAAA/hI,KAAAwB,QAAA6/H,oBACArhI,KAAAtC,IAAA+a,KAAA,WAAAzY,KAAAwB,QAAAmzD,YAGA30D,KAAAwB,QAAAmlG,WAAA3mG,KAAAwB,QAAAmlG,YAAA3mG,KAAAtC,IAAAoa,SAAA,aAAA9X,KAAAtC,IAAA+a,KAAA,YACAzY,KAAAtC,IAAA+a,KAAA,WAAAzY,KAAAwB,QAAAmlG,YAEA3mG,KAAAwB,QAAAgxD,SACAxyD,KAAAgiI,cAAAhiI,KAAAwB,QAAAgxD,SAIA,MAAAxyD,KAAAwB,QAAAugD,aAAA,CACA,IAAAzS,EAAAtvC,KACAA,KAAAtC,IAAAma,KAAA,UAAAqH,KAAA,WACA,GAAA/hB,EAAA6C,MAAAM,KAAA,aAAA,aAAAnD,EAAA6C,MAAAM,KAAA,YAAAsC,cAAA,CAEA,MAAA0sC,EAAA9tC,QAAAugD,eACAzS,EAAA9tC,QAAAugD,aAAAzS,EAAA9tC,QAAAmzD,WAAA,GAAA,IAGA,IAAA/yD,EAAAzE,EAAA6C,MAAAM,KAAA,SACA,IAAAgvC,EAAA9tC,QAAAmzD,WAIA,OADArlB,EAAA9tC,QAAAugD,aAAAngD,GACA,EAHA0tC,EAAA9tC,QAAAugD,aAAA3jC,KAAAxc,MA0CA,OAjCA5B,KAAAtC,IAAAukI,aAAAtkI,EAAAupB,SAAA,CACAsrC,QAAA,mBAAAxyD,KAAAwB,QAAAgxD,QAAAxyD,KAAAwB,QAAAgxD,UAAAxyD,KAAAwB,QAAAgxD,SACAxyD,KAAAwB,UAEAxB,KAAAy8D,OAAAz8D,KAAAtC,IAAAgd,QAAA,qBACA1a,KAAAwB,QAAAmlG,aAAA,mBAAA3mG,KAAAwB,QAAAmlG,YAAA3mG,KAAAwB,QAAAmlG,eACA3mG,KAAAy8D,OAAA5kD,KAAA,oBAAAmC,YAAA,aAGAha,KAAAy8D,OAAA5kD,KAAA,oBAAAqH,KAAA,WACA,IAAA84B,EAAA76C,EAAA6C,MACA,IAAArC,EAAAC,KAAAo6C,EAAAngC,KAAA,SAAApW,SACAu2C,EAAA99B,SAAA,YAIAla,KAAAkiI,YAAA,EACAliI,KAAAy8D,OAAA7pB,IAAA5yC,KAAAy8D,OAAA5kD,KAAA,2BACAsE,IAAA,yCAAArD,GAAA,wCAAA,SAAAzb,GACAwkI,EAAAK,YAAA,IAGAliI,KAAAy8D,OAAA5kD,KAAA,0BAAAsE,IAAA,SAAArD,GAAA,QAAA,SAAAzb,IACAwkI,EAAAK,YAAAL,EAAAM,eACAN,EAAA71E,SAGA61E,EAAAK,YAAA,IAGAliI,KAAAqiD,SAAA,mBAAAriD,KAAAwB,QAAAugD,aAAA/hD,KAAAwB,QAAAugD,eAAA/hD,KAAAwB,QAAAugD,cAAA,GAEA/hD,KAAAu0C,eACA,GAEA6tF,qBAAA,SAAA9jH,GACA,GAAAte,KAAAwB,QAAA6/H,oBACA,OAAA,EAGA,GAAA,EAAA1jI,EAAAC,KAAA0gB,GAAA,CACA,IAAA+jH,EAAAriI,KAAA7C,EAAA,uBAAAmhB,EAAA,MACA,GAAA,EAAA3gB,EAAAC,KAAAykI,GACA,OAAA,IAAAA,EAAAjiI,KAAA,YAGA,OAAA,GAEAk4D,SAAA,WACA,IAAAh5D,EAAA,KACAgwC,EAAAtvC,KAGA,GAAAA,KAAAwB,QAAAkkF,UACApmF,EAAA,GACAU,KAAA7C,EAAA,mBAAA+hB,KAAA,WACA,IAAAojH,EAAAnlI,EAAA6C,MAAA4B,MACA,QAAAyI,IAAAi4H,EAAA,CACA,GAAAhzF,EAAA9tC,QAAAsgD,eACAwgF,EAAA//H,SAAA+/H,GACAt3H,MAAAs3H,IACA,OAGA,IAAAC,EAAAjzF,EAAAkzF,wBAAArlI,EAAA6C,OACAyiI,EAAAnzF,EAAA8yF,qBAAAG,GACA,MAAAjjI,EAAAijI,GACAjjI,EAAAijI,GAAAE,EAAA,CAAAH,GAAAA,EACAG,GACAnjI,EAAAijI,GAAAnkH,KAAAkkH,WAMA,GADAhjI,EAAAU,KAAAtC,IAAAukI,aAAA,OACAjiI,KAAAwB,QAAAsgD,aAAA,CACA,IAAA3iC,EAAA3jB,IAAAC,QAAAqW,cAAAC,YAAAzS,GACA,GAAA,UAAA6f,EAAA,CACA,IAAAg4D,EAAA,GACAx5E,EAAAuhB,KAAA5f,EAAA,SAAAojI,GACA,IAAAC,EAAApgI,SAAAmgI,GACA13H,MAAA23H,GAGAxrD,EAAA/4D,KAAAskH,GAFAvrD,EAAA/4D,KAAAukH,KAIArjI,EAAA63E,OACA,GAAA,WAAAh4D,EAAA,CACA,IAAAi0C,EAAA7wD,SAAAjD,GAIAA,EAHA0L,MAAAooD,GAGA,KAFAA,GAOA,OAAA,MAAA9zD,GAAA,UAAAqB,QAAArB,IAAA,IAAAA,EAAA5C,OACA,KAGA,MAAA4C,GAAAU,KAAAwB,QAAAmzD,WAAA,GAAAr1D,GAEAkjI,wBAAA,SAAArC,GACA,IAAAyC,EAAAzC,EAAAzlH,QAAA,YAAAta,KAAA,QACA,OAAAzC,EAAAC,KAAAglI,IAAA,EAAA,UAAAA,GAEAvgF,SAAA,SAAA/iD,EAAAujI,EAAAC,GAEA,GADA9iI,KAAAo3F,UAAA93F,EACAU,KAAAwB,QAAAkkF,WACA,GAAA,WAAA/kF,QAAArB,GAAA,CACA,IAAAyjI,EAAA,GACAplI,EAAAuhB,KAAA5f,EAAA,SAAAgf,GACA,iBAAAA,EACAykH,EAAA3kH,KAAAE,GACA,UAAA3d,QAAA2d,IACA3gB,EAAAuhB,KAAAZ,EAAA,SAAA0kH,GACAD,EAAA3kH,KAAA4kH,OAIAhjI,KAAAtC,IAAAukI,aAAA,MAAAc,SAGA,GAAA/iI,KAAAwB,QAAAmzD,WAAA,CACA,IAAAouE,EAAA,GACA5jH,EAAA3jB,IAAAC,QAAAqW,cAAAC,YAAAzS,GACA,WAAA6f,EACA4jH,EAAA3kH,KAAA9e,GACA,UAAA6f,IACA4jH,EAAAzjI,GAGAujI,IACAE,EAAAplI,EAAA4hE,MAAAwjE,EAAA/iI,KAAAs4D,aAGAt4D,KAAAtC,IAAAukI,aAAA,MAAAc,QAEA/iI,KAAAtC,IAAAma,KAAA,kBAAA,MAAAvY,EAAA,GAAAA,EAAAwL,YAAA,MAAA2N,KAAA,aAAAqqH,EACA9iI,KAAAtC,IAAAukI,aAAA,MAAA,MAAA3iI,EAAA,KAAAA,EAAAwL,YAEA9K,KAAAtC,IAAAukI,aAAA,MAAA,MAIAjiI,KAAAtC,IAAAukI,aAAA,UAEAjiI,KAAAwB,QAAA+/H,uBAAAvhI,KAAAwB,QAAAmzD,YACA30D,KAAAijI,kBAGAhtD,UAAA,WACAj2E,KAAAwB,QAAAmzD,YACA30D,KAAAtC,IAAAukI,aAAA,cAEAztB,YAAA,WACAx0G,KAAAwB,QAAAmzD,WACA30D,KAAAtC,IAAAukI,aAAA,eAEAjiI,KAAAqiD,SAAA,IAAA,IAEA2J,OAAA,WACAhsD,KAAAtC,IAAAukI,aAAA,WAEAE,YAAA,WACA,OAAAniI,KAAAy8D,OAAA3kD,SAAA,SAEA+iC,KAAA,WACA76C,KAAAtC,IAAAukI,aAAA,SAEAxqF,KAAA,WACAz3C,KAAAtC,IAAAukI,aAAA,SAEAj/E,OAAA,WACAhjD,KAAAwB,QAAAmlG,YAAA,EACA3mG,KAAAtC,IAAA+a,KAAA,YAAA,GAAAuB,YAAA,YACAha,KAAAtC,IAAAgd,QAAA,qBAAA7C,KAAA,oBAAAmC,YAAA,aACAha,KAAAoiD,WAEAU,QAAA,WACA9iD,KAAAwB,QAAAmlG,YAAA,EACA3mG,KAAAtC,IAAA+a,KAAA,YAAA,GACAzY,KAAAoiD,WAEA4/E,cAAA,SAAAxvE,GAAA,IAAA0wE,EAAAljI,KACAA,KAAAwB,QAAAgxD,QAAAA,EACAxyD,KAAAtC,IAAAs3C,QAEA,IAAAmuF,GAAA,EACAC,EAAA,SAAAtwE,GAAA,IAAAuwE,EACAp8G,EAAA,QAAAo8G,EAAAvwE,EAAA7rC,aAAA,IAAAo8G,EAAAA,EAAA,GAKA,GAJA,MAAAH,EAAA1hI,QAAA8hI,cACAr8G,GAAA,2BAAAi8G,EAAA1hI,QAAA8hI,aAGA,iBAAAxwE,EAEA,OADAqwE,GAAA,EACAhmI,EAAA,WAAA,CACAmC,MAAAwzD,EACAqJ,KAAArJ,EACA7rC,MAAAA,IAEA,GAAA,WAAAtmB,QAAAmyD,GAeA,MAAA,GAdAqwE,EAAAA,GAAA,iBAAArwE,EAAAh2D,GAEA,IAAA0zC,EAAA,CACAlxC,MAAAwzD,EAAAh2D,GACAymI,eAAAzwE,EAAA/1D,KACAkqB,MAAAA,EACAu8G,eAAA1wE,EAAA2wE,QACA7C,UAAA,IAAA9tE,EAAA8tE,UAKA,OAHA,EAAAjjI,EAAAC,KAAAk1D,EAAAvxD,SACAivC,EAAAjvC,MAAAuxD,EAAAvxD,OAEApE,EAAA,WAAAqzC,GAAA/uC,KAAAqxD,EAAA/1D,OAKAY,EAAAuhB,KAAA,mBAAAszC,EAAAA,IAAAA,EAAA,SAAAM,GACA,GAAA,MAAAA,EACA9yD,KAAAtC,IAAAoD,OAAA3D,EAAA,WAAA,CACAg/D,KAAAn8D,KAAAwB,QAAA6rE,iBACAuzD,UAAA,UAEA,GAAA,MAAA9tE,EAAAN,QAAA,CAAA,IAAAkxE,EAEArB,EAAAllI,EAAA,yBAAA,QAAAumI,EAAA5wE,EAAAh2D,UAAA,IAAA4mI,EAAAA,EAAA,IAAA,YAAA5wE,EAAA/1D,KAAA,iBACAY,EAAAuhB,KAAA4zC,EAAAN,QAAA,SAAAmxE,GACAtB,EAAAvhI,OAAAsiI,EAAAO,KACA3jI,MACAA,KAAAtC,IAAAoD,OAAAuhI,QAEAriI,KAAAtC,IAAAoD,OAAAsiI,EAAAtwE,KAEA9yD,MACAA,KAAAoiD,WAEApiD,KAAAwB,QAAAsgD,cAAAqhF,IACAnjI,KAAAwB,QAAAsgD,cAAA,IAGA8hF,uBAAA,SAAAC,GACA7jI,KAAAwB,QAAA6rE,iBAAAw2D,EACA7jI,KAAAtC,IAAAgd,QAAA,qBAAA7C,KAAA,kBAAApW,KAAAzB,KAAAwB,QAAA6rE,mBAEAjrB,QAAA,WACApiD,KAAAtC,IAAAukI,aAAA,WACAjiI,KAAAqiD,SAAAriD,KAAAo3F,YAEAn1C,SAAA,SAAAoG,EAAAy7E,GACA,GAAA,EAAAnmI,EAAAC,KAAAoC,KAAAtC,OAAAsC,KAAAwB,QAAAmzD,WAAA,CACA,IAAAgD,EAAAx6D,EAAAkrD,EAAAhvC,eACArZ,KAAAtC,IAAAukI,aAAA,MAAAtqE,EAAAsqE,aAAA,QACAjiI,KAAAtC,IAAAukI,aAAA,UAGAjiI,KAAAo3F,UAAAp3F,KAAAs4D,WAEA,IAAA+pE,EAAAllI,EAAA6C,KAAAtC,IAAAma,KAAA,UAAAisH,IAAAppH,QAAA,YACAo4C,EAAA31D,EAAA6C,KAAAtC,IAAAma,KAAA,UAAAisH,IAAAxjI,KAAA,SAQA,GAPAN,KAAAwB,QAAAsgD,eACAgR,EAAAvwD,SAAAuwD,GACA9nD,MAAA8nD,KACAA,EAAA,OAIA9yD,KAAAwB,QAAAmzD,WAAA,CACA,GAAA,EAAAh3D,EAAAC,KAAAoC,KAAAwB,QAAAimG,kBAAA,CACA,IAAAA,EAAA,GACA,UAAAjsG,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAwB,QAAAimG,kBACAA,EAAAznG,KAAAwB,QAAAimG,iBAEAA,EAAArpF,KAAApe,KAAAwB,QAAAimG,kBAEAznG,KAAAwB,QAAAkkF,WACA,IAAA/nF,EAAAqE,QAAAylG,EAAA30C,IACAn1D,EAAAuhB,KAAAmjH,EAAAxqH,KAAA,UAAAla,EAAAgC,KAAA,SAAAwgI,GACA,IAAA4D,EAAAxhI,SAAApF,EAAAgjI,GAAA7/H,KAAA,UACAyjI,IAAAjxE,IACA9yD,KAAAo3F,UAAAirC,EAAAjiI,KAAA,SAAAzC,EAAA2uC,OAAAtsC,KAAAo3F,UAAAirC,EAAAjiI,KAAA,SAAA,SAAA0kD,GACA,OAAAA,IAAAi/E,MAGA/jI,OAGAA,KAAAo3F,WAAA,IAAAz5F,EAAAqE,QAAAylG,EAAA30C,GAAA,CAAAA,GAAAn1D,EAAA2uC,OAAAtsC,KAAAo3F,UAAA,SAAAtyC,GACA,OAAA,IAAAnnD,EAAAqE,QAAAylG,EAAA3iD,KAIA9kD,KAAAqiD,SAAAriD,KAAAo3F,WAWA,GAPAp3F,KAAAwB,QAAAq1E,iBACA,IAAAl5E,EAAAC,KAAAoC,KAAAo3F,aACAp3F,KAAAo3F,UAAA,CAAAtkC,GACA9yD,KAAAqiD,SAAAriD,KAAAo3F,YAIAp3F,KAAAwB,QAAAggI,4BAAA,aAAAa,EAAAjiI,KAAA,WAAA,CACA,IAAA4jI,GAAA,EACAhkI,KAAAwB,QAAAkkF,UACA,IAAA/nF,EAAAC,KAAAoC,KAAAo3F,UAAAirC,EAAAjiI,KAAA,YACAJ,KAAAo3F,UAAAirC,EAAAjiI,KAAA,SAAA,CAAA0yD,GACA9yD,KAAAqiD,SAAAriD,KAAAo3F,aAGAz5F,EAAAuhB,KAAAmjH,EAAAxqH,KAAA,UAAAla,EAAAgC,KAAA,SAAAwgI,IACA,IAAAngI,KAAAo3F,UAAAp1F,QAAAO,SAAApF,EAAAgjI,GAAA7/H,KAAA,aACA0jI,GAAA,IACAhkI,OAEAgkI,IACAhkI,KAAAo3F,UAAAh5E,KAAA00C,GACA9yD,KAAAqiD,SAAAriD,KAAAo3F,cAUA,GAJAp3F,KAAAwB,QAAA+/H,uBAAAvhI,KAAAwB,QAAAmzD,YACA30D,KAAAijI,iBAGAjjI,KAAAwB,QAAAkkF,YAAA1lF,KAAAwB,QAAA6/H,oBAAA,CACA,IAAA/iH,EAAA+jH,EAAAjiI,KAAA,QACA,GAAA,EAAAzC,EAAAC,KAAA0gB,GACAte,KAAAoiI,qBAAA9jH,KAEAte,KAAAo3F,UAAA94E,GAAAw0C,EACA9yD,KAAAqiD,SAAAriD,KAAAo3F,YAKAp3F,KAAAwB,QAAAygD,SAAAjiD,KAAAo3F,YAEA6sC,SAAA,WACAjkI,KAAAwB,QAAA0/H,UAEA1C,OAAA,WACAx+H,KAAAwB,QAAAg9H,UAEAyE,eAAA,WACA,IAAAiB,EAAAlkI,KAAA7C,EAAA,mBAAA2oD,QACA38B,EAAA,UACA,EAAAxrB,EAAAC,KAAAsmI,KACA/6G,EAAA+6G,EAAArmI,IAAA,UAEAmC,KAAA7C,EAAA,kBAAAU,IAAA,QAAAsrB,IAEAovC,UAAA,SAAA99C,GACAjf,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAAtC,KAAA,EAAA,CACA+c,UAAAA,KAGA49C,UAAA,WACA78D,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAAtC,KAAA,MAIAlC,IAAAomD,OAAAmiD,YAAAvoG,IAAAomD,OAAAC,aAAA5hD,OAAA,CACA6zC,kBAAA,WACA9zC,KAAAwB,QAAAw2H,cAAA,GAEAzjF,YAAA,WACAv0C,KAAAmkI,aAAAnkI,KAAAwB,QAAAoY,UAEAyoC,SAAA,SAAA/iD,EAAAujI,EAAAC,GACAtnI,IAAAomD,OAAAC,aAAAxgD,UAAAghD,SAAAt3C,KAAA/K,KAAAV,EAAAujI,EAAAC,IAEAqB,aAAA,SAAAvqH,GACA5Z,KAAAtC,IAAAma,KAAA,UAAAtb,SAEA,IAAAi2D,EAAA,GACA,GAAA54C,EACA,GAAA,OAAAA,EAAAhX,cACA4vD,EAAA70D,EAAAshB,IAAAzjB,IAAA+Q,UAAA0jB,OAAA3J,GAAA,SAAA6tF,GACA,MAAA,CACAr3G,GAAAq3G,EAAAt3F,aAAA5H,cACAlY,KAAAo3G,EAAAp3G,aAGA,GAAA,OAAA6c,EAAAhX,cACA4vD,EAAA70D,EAAAshB,IAAAzjB,IAAA+Q,UAAA0jB,OAAAC,GAAA,SAAAikF,GACA,MAAA,CACAr3G,GAAAq3G,EAAAt3F,aAAA5H,cACAlY,KAAAo3G,EAAAp3G,YAGA,CACA,IAAAqnI,EAAAzmI,EAAAka,KAAArc,IAAA+Q,UAAAyjB,uBAAA,SAAA1S,GACA,OAAAA,EAAAvgB,OAAA6c,IAEAwqH,IACA5xE,EAAA70D,EAAAshB,IAAAmlH,EAAAn0G,OAAA,SAAAkkF,GACA,MAAA,CACAr3G,GAAAq3G,EACAp3G,KAAAo3G,EACA5yG,MAAA4yG,MAOAn0G,KAAAgiI,cAAAxvE,MAIAh3D,IAAAomD,OAAA05B,YAAA9/E,IAAAomD,OAAAC,aAAA5hD,OAAA,CACA6zC,kBAAA,WAKA,OAJA9zC,KAAAwB,QAAA6rE,iBAAA,eACArtE,KAAAwB,QAAAsgD,cAAA,EACA9hD,KAAAwB,QAAA2yF,cAAA,EACAn0F,KAAAwB,QAAA5D,KAAA,GACApC,IAAAomD,OAAAC,aAAAxgD,UAAAyyC,kBAAA/oC,KAAA/K,OAEAu0C,YAAA,WAAA,IAAA8vF,EAAArkI,KACA,GAAA,MAAAA,KAAAwB,QAAAwjB,QAkBA,OAjBAhlB,KAAAwB,QAAAwjB,QAAAs/G,YAAA,SAAAlmE,GACA,IAAAmmE,EAAA5mI,EAAA6rC,QAAA40B,EAAAp+C,OAAA,SAAA1B,GACA,OAAAA,EAAA4B,IAAA,sBAEAmkH,EAAA7iI,QAAAgxD,QAAA70D,EAAAshB,IAAAslH,EAAA,SAAAC,EAAA9M,GACA,MAAA,CACA36H,KAAA26H,EACAllE,QAAA70D,EAAAshB,IAAAulH,EAAA,SAAAlmH,GACA,MAAA,CACAxhB,GAAAwhB,EAAAxhB,GACAC,KAAAuhB,EAAA4B,IAAA,mBAKAmkH,EAAArC,cAAAqC,EAAA7iI,QAAAgxD,WACA,IACA,EAEAh3D,IAAAiC,IAAA0jB,QAAAgsD,gBAAA,KAAA,SAAA/O,GACA,IAAAmmE,EAAA5mI,EAAA6rC,QAAA40B,EAAAp+C,OAAA,SAAA1B,GACA,OAAAA,EAAA4B,IAAA,sBAEAmkH,EAAA7iI,QAAAgxD,QAAA70D,EAAAshB,IAAAslH,EAAA,SAAAC,EAAA9M,GACA,MAAA,CACA36H,KAAA26H,EACAllE,QAAA70D,EAAAshB,IAAAulH,EAAA,SAAAlmH,GACA,MAAA,CACAxhB,GAAAwhB,EAAAxhB,GACAC,KAAAuhB,EAAA4B,IAAA,mBAKAmkH,EAAArC,cAAAqC,EAAA7iI,QAAAgxD,cAMAh3D,IAAAomD,OAAA85B,sBAAAlgF,IAAAomD,OAAAC,aAAA5hD,OAAA,CACA6zC,kBAAA,WAIA,OAHA9zC,KAAAwB,QAAA6rE,iBAAA,kBACArtE,KAAAwB,QAAAsgD,cAAA,EACA9hD,KAAAwB,QAAA2yF,cAAA,EACA34F,IAAAomD,OAAAC,aAAAxgD,UAAAyyC,kBAAA/oC,KAAA/K,OAEAu0C,YAAA,WAAA,IAAAkwF,EAAAzkI,KACA,GAAA,MAAAA,KAAAwB,QAAAwjB,QAKA,OAJAhlB,KAAAwB,QAAAwjB,QAAA0/G,eAAA,SAAAC,GACAF,EAAAjjI,QAAAgxD,QAAAmyE,EAAAC,iBACAH,EAAAzC,cAAAyC,EAAAjjI,QAAAgxD,YAEA,KAKAh3D,IAAAomD,OAAAoiD,cAAAxoG,IAAAomD,OAAAC,aAAA5hD,OAAA,CACA6zC,kBAAA,WACA9zC,KAAAwB,QAAAw2H,cAAA,GAEAzjF,YAAA,WACA,IAAAswF,EAAA,CACA9nI,KAAA,GACAy1D,QAAA,IAEAsyE,EAAA,CACA/nI,KAAA,GACAy1D,QAAA,IAEAxyD,KAAAwB,QAAA0iG,qBACA2gC,EAAAryE,QAAAp0C,KAAA,CACAthB,GAAA,KACAC,KAAA,gBACAwE,MAAA,OAGAsjI,EAAAryE,QAAAp0C,KAAA,CACAthB,GAAA,KACAC,KAAA,SACAwE,MAAA,OAGA5D,EAAAuhB,KAAA1jB,IAAA+Q,UAAAyjB,uBAAA,SAAApW,GACAkrH,EAAAtyE,QAAAp0C,KAAA,CACAthB,GAAA8c,EAAA7c,KACAA,KAAA6c,EAAA7c,KACAwE,MAAAqY,EAAA7c,QAEAiD,OAEArC,EAAAuhB,KAAA1jB,IAAA+Q,UAAAwjB,UAAA,SAAAnW,GACAirH,EAAAryE,QAAAp0C,KAAA,CACAthB,GAAA8c,EAAA3E,cACAlY,KAAA6c,EAAA3E,cACA1T,MAAAqY,EAAA3E,iBAEAjV,MAGAA,KAAAgiI,cAAA,EAAArkI,EAAAC,KAAAknI,GAAA,CAAAD,EAAAC,GAAAD,EAAAryE,SAEAxyD,KAAAoiD,WAEApiD,KAAAwB,QAAAksE,aAAA1tE,KAAAwB,QAAAyiG,WACAjkG,KAAA+kI,qBAAA/kI,KAAAwB,QAAAksE,YAAA1tE,KAAAwB,QAAAyiG,WAGA5hD,SAAA,SAAA/iD,EAAAujI,EAAAC,GACAtnI,IAAAomD,OAAAC,aAAAxgD,UAAAghD,SAAAt3C,KAAA/K,KAAAV,EAAAujI,EAAAC,GACA9iI,KAAAwB,QAAAksE,aACA1tE,KAAAwB,QAAAksE,YAAAy2D,aAAA7kI,IAGAylI,qBAAA,SAAAr3D,EAAAu2B,GACA,IAAA+gC,EAAAhlI,KAAAwB,QAAAygD,SACAjiD,KAAAwB,QAAAygD,SAAA,SAAAroC,GACA8zD,aAAAlyE,IAAAomD,OAAAmiD,aACAr2B,EAAAy2D,aAAAvqH,GAEAqqF,EAAA9iD,GAAA,WACA8iD,EAAAriG,IAAA,IACApG,IAAAC,QAAAgc,aAAAwD,aAAAgpF,EAAArqF,IAEA,mBAAAorH,GACAA,EAAAprH,IAGAqqF,EAAA9iD,GAAA,UACA3lD,IAAAC,QAAAgc,aAAAwD,aAAAgpF,EAAAjkG,KAAAs4D,eAKA98D,IAAAomD,OAAAsU,WAAA16D,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACA+6B,SAAAtkD,EAAAu4C,KACA6L,aAAA,KACA4kD,YAAA,EACAuY,cAAA,EACA+lB,OAAAtnI,EAAAu4C,KACAigB,aAAA,KAEA1iB,OAAA,GACAQ,aAAA,aAEAM,YAAA,WACA,IAAA2wF,EAAAvnI,EAAAgC,KAAA,SAAA2pD,GAgBA,OAfAnsD,EAAAgoI,WAAAjkI,GAGAu3C,OAAA,CACA2d,SAAA,SACA/hB,QAAA,oCACAv0C,MAAAnC,EAAAgC,KAAA,WACA2pD,EAAA87E,OAAA,oBACA,IAAA5pI,IAAAomD,OAAAsU,WAAAmvE,sBAAA,CACA35C,OAAA1rF,KAAAtC,IAAAynI,WACA77E,QAAAA,KAEAtpD,QAGA+rC,UACA/rC,MAEAslI,EAAA,CACAC,QAAA,EACAxnI,OAAAiC,KAAAwB,QAAA20D,aACAqvE,WAAA,EACAC,UAAA,CACAxjF,SAAAtkD,EAAAgC,KAAA,SAAAy2D,EAAAsvE,GACA,GAAA,mBAAA1lI,KAAAwB,QAAAygD,SAAA,CAEA,IACA,IAAAx4B,EAAAtsB,EAAAi5D,GACA,EAAAz4D,EAAAC,KAAA6rB,IAAA,IAAA9rB,EAAAC,KAAA6rB,EAAA0yC,OAAA79D,QAAA,OAAA,OACA83D,EAAA,IAEA,MAAAhqC,IAEApsB,KAAAwB,QAAAygD,SAAAmU,KAEAp2D,OAEA2lI,QAAA,CACA,CAAA,QAAA,CAAA,UACA,CAAA,aAAA,CAAA,OAAA,SAAA,YAAA,UACA,CAAA,OAAA,CAAA,aACA,CAAA,YAAA,CAAA,aACA,CAAA,aAAA,CAAA,UACA,CAAA,OAAA,CAAA,KAAA,KAAA,cACA,CAAA,QAAA,CAAA,UACA,CAAA,SAAA,CAAA,OACA,CAAA,OAAA,CAAA,aACA,CAAA,SAAA,CAAA,WAEAC,OAAA5lI,KAAAwB,QAAAyjI,QAGAjlI,KAAAwB,QAAA09G,eACAomB,EAAAxoD,QAAA,CACA9sC,MAAAk1F,IAIAllI,KAAAtC,IAAAynI,WAAAG,GAEAtlI,KAAAwB,QAAAugD,cACA/hD,KAAAqiD,SAAAriD,KAAAwB,QAAAugD,eAEAuW,SAAA,WACA,OAAAt4D,KAAAtC,IAAAynI,WAAA,SAEA9iF,SAAA,SAAA/iD,GACAU,KAAAtC,IAAAynI,WAAA,OAAA7lI,IAEAumI,WAAA,SAAAvmI,GACAU,KAAAtC,IAAAynI,WAAA,YAAA7lI,IAEA0jD,OAAA,WACAhjD,KAAAtC,IAAAynI,WAAA,WAEAriF,QAAA,WACA9iD,KAAAtC,IAAAynI,WAAA,cAIA3pI,IAAAomD,OAAAsU,WAAAmvE,sBAAA7pI,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBACAsZ,SAAA,MACAiT,QAAA,MAEA7V,OAAA,CACAqyF,sBAAA,UACAC,iCAAA,eAEAC,YAAA,SAAA3oI,GAEA2C,KAAA64C,cACA74C,KAAAwB,QAAA8nD,QAAA87E,OAAA,uBACAplI,KAAAwB,QAAA8nD,QAAA87E,OAAA,gBACAplI,KAAAwB,QAAA8nD,QAAA87E,OAAA,oBAAAjoI,EAAAE,EAAAgc,eAAA8iD,SAEAhmB,QAAA,WACAn2C,KAAA64C,iBAIAr9C,IAAAomD,OAAAi7B,YAAArhF,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAkpG,sBAAA,EACAnpD,QAAA,GACA/6B,aAAA,KACAE,SAAAtkD,EAAAu4C,KACAgwF,cAAA,KACAzvF,WAAA,EACA0vF,UAAA,EACAC,iBAAA,EACAnyE,SAAA,GAEAxgB,OAAA,CACA4yF,gCAAA,YAEAvyF,kBAAA,WACA9zC,KAAAV,WAAA,IAAAU,KAAAwB,QAAAugD,aAAA/hD,KAAAwB,QAAAugD,aAAA,MAEA9N,aAAA,WACAj0C,KAAAg0C,WAAA,CACAxyC,QAAAxB,KAAAwB,UAGA+yC,YAAA,WACAv0C,KAAAsmI,gBAEAA,aAAA,WACA,IAAAh3F,EAAAtvC,KACAA,KAAA7C,EAAA,2BAAA+hB,KAAA,WACA/hB,EAAA6C,MAAAI,KAAA,WAAAkvC,EAAAhwC,OAAA,SAAAnC,EAAA6C,MAAAI,KAAA,UAAA,MAAAkvC,EAAAhwC,MACAgwC,EAAA9tC,QAAAykI,qBACA9oI,EAAA6C,MAAAga,YAAA7c,EAAA6C,MAAAI,KAAA,kBAAA8Z,SAAA/c,EAAA6C,MAAAI,KAAA,gBAAA8Z,SAAA,UAEA/c,EAAA6C,MAAAga,YAAA,YAAAE,SAAA,sBAAAA,SAAA,UAGAo1B,EAAA9tC,QAAAykI,qBACA9oI,EAAA6C,MAAAka,SAAA/c,EAAA6C,MAAAI,KAAA,kBAAA4Z,YAAA7c,EAAA6C,MAAAI,KAAA,gBAAA4Z,YAAA,UAEA7c,EAAA6C,MAAAka,SAAA,YAAAF,YAAA,sBAAAE,SAAA,aAKA+nC,SAAA,SAAA5kD,GACA2C,KAAAV,MAAAnC,EAAAE,EAAAgc,eAAAjZ,KAAA,SACAJ,KAAAsmI,eACA,mBAAAtmI,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAAV,QAGAg5D,SAAA,WACA,OAAAt4D,KAAAV,OAEA+iD,SAAA,SAAA/iD,EAAAinI,GACAvmI,KAAAV,MAAAA,EACAU,KAAAsmI,eACAC,GAAA,mBAAAvmI,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAAV,UAKA9D,IAAAomD,OAAA4kF,WAAAhrI,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,eACA+4B,YAAA,GAEAriB,OAAA,CACAgzF,kBAAA,iBAEA3yF,kBAAA,WACA9zC,KAAA0mI,OAAA1mI,KAAAwB,QAAAklI,OACA,MAAA1mI,KAAA0mI,SACA1mI,KAAA0mI,OAAA,IAGA1yF,WAAA,WACA,MAAA,CACA0yF,OAAA1mI,KAAA0mI,OACA5wE,WAAA91D,KAAAwB,QAAAs0D,aAGA6wE,cAAA,SAAAtpI,GACA2C,KAAA4mI,UAAArkI,SAAAvC,KAAA7C,EAAAE,EAAAgc,eAAAjZ,KAAA,WACA,mBAAAJ,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAA0mI,SAGAE,UAAA,SAAAF,GAEA1mI,KAAA0mI,OADA,MAAAA,EACA,EAEAA,EAEA1mI,KAAA+rC,YAIAvwC,IAAAomD,OAAAilF,UAAArrI,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,cACA+4B,YAAA,GAEAriB,OAAA,CACAqzF,sBAAA,cAEAhzF,kBAAA,WACA9zC,KAAAmN,KAAAnN,KAAAwB,QAAAugD,aACA,MAAA/hD,KAAAmN,OACAnN,KAAAmN,KAAA,IAGA6mC,WAAA,WACA,MAAA,CACA7mC,KAAAnN,KAAAmN,OAGA45H,iBAAA,SAAA1pI,GACA2C,KAAAgnI,6BAEAC,WAAA,SAAA5pI,GACA,IAAA6pI,EAAA/pI,EAAAE,EAAAgc,eACA6tH,EAAApvH,SAAA,YACAovH,EAAAltH,YAAA,YAEAktH,EAAAhtH,SAAA,YAGA,IAAAtY,EAAA,EACA5B,KAAA7C,EAAA,0BAAA+hB,KAAA,WACAtd,GAAAW,SAAApF,EAAA6C,MAAAI,KAAA,YAEAJ,KAAAmN,KAAAvL,EAEA5B,KAAA+rC,SAEA,mBAAA/rC,KAAAwB,QAAAygD,UACAjiD,KAAAwB,QAAAygD,SAAAjiD,KAAAmN,OAGAmrD,SAAA,WACA,OAAAt4D,KAAAmN,QgBxqDA,oBAAAo0D,UACA,SAAA4lE,EAAA30H,GACA,IAAAkW,EAAAlW,EAAAxV,qBAAA,QAAA,GACAsR,EAAAkE,EAAA3V,cAAA,UACAquE,EAAA,yBAAAi8D,EAAA,UAAA,SACA74H,EAAA84H,aAAA,QAAA,IACA94H,EAAAi4C,KAAA,iBAAAzqD,OAAAurI,aAAAvrI,OAAAurI,aAAA,mDAAA,aAAAn8D,EAAA,UACAxiD,EAAAzrB,YAAAqR,GANA,CAOAxS,OAAAO,UfRA,IAAAoG,WAAA,WACA,IAAAutC,EAAA,iEACA9qC,EAAA,uIACAoiI,EAAA,cACAhiI,EAAA,SAAA1D,EAAA2R,GAGA,IAFA3R,EAAAZ,OAAAY,GACA2R,EAAAA,GAAA,EACA3R,EAAAlF,OAAA6W,GAAA3R,EAAA,IAAAA,EACA,OAAAA,GAIA,OAAA,SAAAS,EAAAqZ,EAAA9J,GACA,IAAA21H,EAAA9kI,WAUA,GAPA,GAAA2H,UAAA1N,QAAA,mBAAAmO,OAAAxJ,UAAAyJ,SAAAC,KAAA1I,IAAA,KAAArG,KAAAqG,KACAqZ,EAAArZ,EACAA,OAAAgI,GAIAhI,EAAAA,EAAA,IAAAC,KAAAD,GAAA,IAAAC,KACA0I,MAAA3I,GAAA,MAAAmlI,YAAA,gBAKA,SAHA9rH,EAAA1a,OAAAumI,EAAAE,MAAA/rH,IAAAA,GAAA6rH,EAAAE,MAAA,UAGAn9H,MAAA,EAAA,KACAoR,EAAAA,EAAApR,MAAA,GACAsH,GAAA,GAGA,IAAAjU,EAAAiU,EAAA,SAAA,MACAY,EAAAnQ,EAAA1E,EAAA,UACA+pI,EAAArlI,EAAA1E,EAAA,SACA6M,EAAAnI,EAAA1E,EAAA,WACA8M,EAAApI,EAAA1E,EAAA,cACA8U,EAAApQ,EAAA1E,EAAA,WACA0U,EAAAhQ,EAAA1E,EAAA,aACA2Q,EAAAjM,EAAA1E,EAAA,aACAgqI,EAAAtlI,EAAA1E,EAAA,kBACAiqI,EAAAh2H,EAAA,EAAAvP,EAAA+Q,oBACAy0H,EAAA,CACAr1H,EAAAA,EACAs1H,GAAAxiI,EAAAkN,GACAL,IAAAo1H,EAAAQ,KAAAC,SAAAN,GACAx1H,KAAAq1H,EAAAQ,KAAAC,SAAAN,EAAA,GACAl9H,EAAAA,EAAA,EACAy9H,GAAA3iI,EAAAkF,EAAA,GACA09H,IAAAX,EAAAQ,KAAAI,WAAA39H,GACA49H,KAAAb,EAAAQ,KAAAI,WAAA39H,EAAA,IACA69H,GAAArnI,OAAAyJ,GAAAH,MAAA,GACAg+H,KAAA79H,EACAkI,EAAAF,EAAA,IAAA,GACA81H,GAAAjjI,EAAAmN,EAAA,IAAA,IACAA,EAAAA,EACA+1H,GAAAljI,EAAAmN,GACAJ,EAAAA,EACAupB,GAAAt2B,EAAA+M,GACA/D,EAAAA,EACAm6H,GAAAnjI,EAAAgJ,GACAo6H,EAAApjI,EAAAqiI,EAAA,GACAA,EAAAriI,EAAA,GAAAqiI,EAAAniI,KAAA4I,MAAAu5H,EAAA,IAAAA,GACAv7H,EAAAqG,EAAA,GAAA,IAAA,IACAk2H,GAAAl2H,EAAA,GAAA,KAAA,KACAQ,EAAAR,EAAA,GAAA,IAAA,IACAm2H,GAAAn2H,EAAA,GAAA,KAAA,KACAd,EAAAC,EAAA,OAAA5Q,OAAAqB,GAAAiT,MAAApQ,IAAA,CAAA,KAAAgjH,MAAA5pH,QAAAgpI,EAAA,IACAM,GAAA,EAAAA,EAAA,IAAA,KAAAtiI,EAAA,IAAAE,KAAAC,MAAAD,KAAAE,IAAAkiI,GAAA,IAAApiI,KAAAE,IAAAkiI,GAAA,GAAA,GACAiB,EAAA,CAAA,KAAA,KAAA,KAAA,MAAA,EAAAr2H,EAAA,GAAA,GAAAA,EAAA,IAAAA,EAAA,IAAA,IAAAA,EAAA,KAGA,OAAAkJ,EAAApd,QAAA0xC,EAAA,SAAA84F,GACA,OAAAA,KAAAjB,EAAAA,EAAAiB,GAAAA,EAAAx+H,MAAA,EAAAw+H,EAAApsI,OAAA,MA1EA,GAgHA,SAAAqsI,eAAAxgE,GAGA,IAAAygE,EAAA,yJACAlvH,GAAA,EACA,IAAA,IAJAyuD,EAAAA,EAAAjqE,QAAA,OAAA,KAIA0D,QAAA,MAEA,IADA,IAAAinI,EAAA1gE,EAAAz6D,MAAA,KACAnR,EAAA,EAAAA,EAAAssI,EAAAvsI,OAAAC,IACA,IAAAqsI,EAAAhtI,KAAAitI,EAAAtsI,IAAA,CACAmd,GAAA,EACA,YAKAA,EAAAkvH,EAAAhtI,KAAAusE,GAEA,OAAAzuD,EAGA,SAAAovH,eAAA3gE,GAGA,IAAAygE,EAAA,yJACAlvH,GAAA,EACA,IAAA,IAJAyuD,EAAAA,EAAAjqE,QAAA,OAAA,KAIA0D,QAAA,MAEA,IADA,IAAAinI,EAAA1gE,EAAAz6D,MAAA,KACAnR,EAAA,EAAAA,EAAAssI,EAAAvsI,OAAAC,IACA,IAAAqsI,EAAAhtI,KAAAitI,EAAAtsI,IAAA,CACAmd,GAAA,EACA,YAKAA,EAAAkvH,EAAAhtI,KAAAusE,GAEA,OAAAzuD,EArEArX,WAAAglI,MAAA,CACAtkB,QAAA,2BACAgmB,UAAA,SACAC,WAAA,cACAC,SAAA,eACAC,SAAA,qBACAC,UAAA,UACAC,WAAA,aACAC,SAAA,eACAC,QAAA,aACAC,QAAA,WACAC,YAAA,wBACAC,eAAA,gCAIApnI,WAAAslI,KAAA,CACAC,SAAA,CACA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MACA,SAAA,SAAA,UAAA,YAAA,WAAA,SAAA,YAEAG,WAAA,CACA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MACA,UAAA,WAAA,QAAA,QAAA,MAAA,OAAA,OAAA,SAAA,YAAA,UAAA,WAAA,aAKA7lI,KAAAjB,UAAAwQ,OAAA,SAAA6J,EAAA9J,GACA,OAAAnP,WAAAzC,KAAA0b,EAAA9J,IgB7GApW,IAAAigE,OAAA,WACA,SAAAquE,EAAApsI,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA8pI,GACA9pI,KAAAtC,IAAAA,EACAsC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAkjF,YAAA,aACA3jF,KAAAf,KAAAtC,IAAAyjD,GAAA,WAAA,SAAA,OAEAnhD,KAAA4uF,OAPA,OAAA3jD,aAAA6+F,EAAA,CAAA,CAAAlpI,IAAA,OAAAtB,MAUA,WACA,OAAAU,KAAA+pI,UAAAnnI,eACA,IAAA,SACA5C,KAAAgqI,YAAA7sI,EAAA,SAAA,CACA8pB,MAAA,gCACAk1C,KAAAn8D,KAAAwB,QAAAkjF,cAEA1kF,KAAAtC,IAAAwc,SAAA,wBAAAzB,KAAA,YAAA,GAEA,IAAA9a,EAAAC,KAAAoC,KAAAwB,QAAAkjF,aACA1kF,KAAAtC,IAAAwc,SAAA,iBAEAla,KAAAtC,IAAAsc,YAAA,iBAGAha,KAAAtC,IAAAgvC,QAAA1sC,KAAAgqI,aACA,MACA,IAAA,aACAhqI,KAAAtC,IAAAma,KAAA,KAAAqC,SAAA,UACAla,KAAAtC,IAAAwc,SAAA,wBAAAzB,KAAA,YAAA,GAEA,IAAA9a,EAAAC,KAAAoC,KAAAwB,QAAAkjF,aACA1kF,KAAAtC,IAAAwc,SAAA,iBAEAla,KAAAtC,IAAAsc,YAAA,iBAGAha,KAAAgqI,YAAA7sI,EAAA,SAAA,CACA8pB,MAAA,gCACAk1C,KAAAn8D,KAAAwB,QAAAkjF,cAEA1kF,KAAAtC,IAAAgvC,QAAA1sC,KAAAgqI,aACA,MACA,IAAA,QACAhqI,KAAAtC,IAAAwc,SAAA,UACA,MACA,IAAA,QACAla,KAAAtC,IAAAwc,SAAA,sCACA,MACA,QACAla,KAAAtC,IAAAwc,SAAA,4BAlDA,CAAAtZ,IAAA,UAAAtB,MAuDA,WACA,OAAAU,KAAAwB,QAAAT,KAAAf,KAAAwB,QAAAT,KAAA,KAxDA,CAAAH,IAAA,SAAAtB,MA2DA,WACA,WAAAU,KAAA+pI,UAAAnnI,eACA5C,KAAAgqI,YAAAztI,SACAyD,KAAAtC,IAAAG,IAAA,QAAA,IAAAmc,YAAA,yBAAAvB,KAAA,YAAA,IACA,eAAAzY,KAAA+pI,UAAAnnI,eACA5C,KAAAgqI,YAAAztI,SACAyD,KAAAtC,IAAAsc,YAAA,yBAAAvB,KAAA,YAAA,GACAzY,KAAAtC,IAAAma,KAAA,KAAAmC,YAAA,WAEAha,KAAAtC,IAAAsc,YAAA,UAAAA,YAAA,sBApEA8vH,EAAA,GCAAtuI,IAAA8wB,QAAA,CACAC,eAAA,CACA09G,mBAAA,qBACAz9G,aAAA,eACAg9C,aAAA,eACA0C,oBAAA,sBACA/H,0BAAA,4BACA+lE,uBAAA,yBACAC,oBAAA,sBACAC,2BAAA,6BACAC,yBAAA,2BACAC,4BAAA,8BACAC,kCAAA,oCACAC,eAAA,iBACApkB,qBAAA,uBACAqkB,kBAAA,oBACAC,mBAAA,qBACAC,cAAA,gBACAC,kCAAA,oCACA5W,iBAAA,mBACArd,eAAA,mBAIAn7G,IAAA8wB,QAAA7H,MAAA,WACA,SAAAomH,EAAAtqI,EAAAH,GAAA,IAAAoB,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA6qI,GACA7qI,KAAAO,OAAAA,EACAP,KAAAI,KAAAA,EACAJ,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAspI,cAAA,EACAC,QAAA,EACA5xE,OAAAx7D,EAAAu4C,OAEAl2C,KAAAwB,QAAAupI,QACA/qI,KAAA2wC,OAVA,OAAA1F,aAAA4/F,EAAA,CAAA,CAAAjqI,IAAA,OAAAtB,MAaA,WACA,WAAA9D,IAAAC,QAAAqW,cAAAC,YAAA/R,KAAAI,QACAJ,KAAAI,KAAA,CACAA,KAAAJ,KAAAI,OAGAJ,KAAAwB,QAAAspI,eACA9qI,KAAAI,KAAAzC,EAAAupB,SAAAlnB,KAAAI,KAAA,CACA4qI,YAAAlvI,OAAA4C,SAAAslB,QAGA,IAAAxoB,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WAEA,CACAA,SAAA,WAGAiB,KAAA,CACA6qI,YAAAjrI,KAAAO,OACAH,KAAAJ,KAAAI,QAEAX,OAAAC,KAAA/B,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,OACAA,WAxCA6qI,EAAA,GhBxBArvI,IAAA0vI,KAAA,GAEA1vI,IAAA0vI,KAAAC,UAAA,WACA,SAAAC,EAAA1tI,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAorI,GACAprI,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACA6pI,MAAA,OAAA1tI,EAAAid,WACA+zE,KAAA,EACAtN,OAAA,IAAAiqD,OAAAJ,KAAAK,OAAA,SAAA,UACAC,UAAAF,OAAAJ,KAAAO,UAAAC,UAEA1rI,KAAAtC,IAAAA,EACAsC,KAAAtC,IAAA4C,KAAA,KAAAN,KAAAwB,QAAA6pI,OACArrI,KAAA2rI,UAVA,OAAA1gG,aAAAmgG,EAAA,CAAA,CAAAxqI,IAAA,UAAAtB,MAaA,WACAU,KAAA4rI,WAAA,GACA5rI,KAAAif,IAAA,IAAAqsH,OAAAJ,KAAAW,IAAA7rI,KAAAtC,IAAA,GAAA,CACAixF,KAAA3uF,KAAAwB,QAAAmtF,KACAtN,OAAArhF,KAAAwB,QAAA6/E,OACAmqD,UAAAxrI,KAAAwB,QAAAgqI,UACAM,gBAAA,kBAnBA,CAAAlrI,IAAA,YAAAtB,MAuBA,SAAAysI,EAAAC,GAAA,IAAAxqI,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACAtN,EAAAa,EAAAid,WACAqzE,EAAA,IAAAq9C,OAAAJ,KAAAe,OAAA,CACA/tI,SAAA,IAAAotI,OAAAJ,KAAAK,OAAAQ,EAAAC,GACA/sH,IAAAjf,KAAAif,IACA1d,MAAAC,EAAAD,MACAi7D,UAAA8uE,OAAAJ,KAAAgB,UAAAC,OAGA,GADAnsI,KAAA4rI,WAAA9uI,GAAAmxF,EACA,EAAAtwF,EAAAC,KAAA4D,EAAA4qI,mBAAA,CACA,IAAAC,EAAA,IAAAf,OAAAJ,KAAAoB,WAAA,CACAnwI,QAAAqF,EAAA4qI,oBAEAn+C,EAAAs+C,YAAA,QAAA,WACAF,EAAA/pE,KAAAtiE,KAAAif,IAAAgvE,QArCA,CAAArtF,IAAA,oBAAAtB,MA0CA,SAAA2wB,GACA,IAAAnzB,EAAAa,EAAAid,WACA2rC,EAAA/qD,IAAAC,QAAA2D,WAAAiiB,YAAA,yBAAA4O,EAAA1N,KAAA,MAAA,GAAA,GAAA,GAMA,OALAviB,KAAA4rI,WAAA9uI,GAAA,IAAAwuI,OAAAJ,KAAAsB,SAAAjmF,EAAA,CACAkmF,qBAAA,EACAC,kBAAA,EACAztH,IAAAjf,KAAAif,MAEAniB,IAlDA,CAAA8D,IAAA,sBAAAtB,MAqDA,SAAAqtI,GACA,IAAA7vI,EAAAa,EAAAid,WACAgyH,EAAApxI,IAAAw7F,YAAAC,OAAAK,UAAA97F,IAAAw7F,YAAAC,OAAAC,MAAAy1C,IACApmF,EAAA/qD,IAAAC,QAAA2D,WAAAiiB,YAAA,4BAAAurH,EAAArqH,KAAA,MAAA,GAAA,GAAA,GAMA,OALAviB,KAAA4rI,WAAA9uI,GAAA,IAAAwuI,OAAAJ,KAAAsB,SAAAjmF,EAAA,CACAkmF,qBAAA,EACAC,kBAAA,EACAztH,IAAAjf,KAAAif,MAEAniB,IA9DA,CAAA8D,IAAA,kBAAAtB,MAiEA,SAAAxC,GACA,IAAAuiB,EAAArf,KAAA4rI,WAAA9uI,GACA,MAAAuiB,GACAA,EAAAwtH,OAAA,QApEA,CAAAjsI,IAAA,SAAAtB,MAwEA,WACAgsI,OAAAJ,KAAA7iF,MAAAz8B,QAAA5rB,KAAAif,IAAA,YAzEA,CAAAre,IAAA,YAAAtB,MA4EA,SAAA+hF,GACArhF,KAAAif,IAAA6tH,UAAAzrD,KA7EA,CAAAzgF,IAAA,UAAAtB,MAgFA,SAAAqvF,GACA3uF,KAAAif,IAAA8tH,QAAAp+C,OAjFAy8C,EAAA,GAqFA5vI,IAAAkG,MAAAsrI,SAAAxxI,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,aACAkwG,QAAA,EACAC,UAAA,EACAC,UAAA,GAEA15F,OAAA,CACA25F,wBAAA,YACAC,yBAAA,YACAC,4BAAA,sBACA7uF,0BAAA,SACAC,uBAAA,gBAEA5K,kBAdA,WAeA,MAAA9zC,KAAA0tD,aACA1tD,KAAA0tD,WAAA,IAAAlyD,IAAAk3C,YAAA4kB,MAAA64C,MAAA,KAAA,CACA+8B,SAAAltI,KAAAwB,QAAA0rI,YAIAltI,KAAA6/B,aAAA,KACA7/B,KAAAwB,QAAAivC,UAgBAzwC,KAAA+rC,SAfA/rC,KAAA0tD,WAAA7hB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAi9E,sBAAA5iG,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBAAAviB,EAAAgC,KAAA,SAAAkgC,GACA7/B,KAAA6/B,aAAAA,EACA7/B,KAAAwB,QAAAivC,WAAA,EACAzwC,KAAA+rC,SAEA,mBAAA/rC,KAAAwB,QAAA+rI,SACAvtI,KAAAwB,QAAA+rI,WAEAvtI,QACAA,SAOAi0C,aAAA,WACAj0C,KAAAg0C,WAAA,CACAk5F,SAAAltI,KAAAwB,QAAA0rI,SACA1rI,QAAAxB,KAAAwB,QACAksD,WAAA1tD,KAAA0tD,YAEA1tD,KAAAwtI,SAAA,GACA7vI,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,MAAAA,EAAAjB,WAAAwqD,YAAA,OAAAvpD,EAAAjB,WAAAwqD,YACA93F,KAAAwB,QAAA2rI,WAAA5+F,EAAAjB,WAAA6/F,UACAntI,KAAAwtI,SAAApvH,KAAAmwB,IAEAvuC,OAEAu0C,YAAA,WACA,IAAAuK,EAAA,GAaAA,EAXA9+C,KAAAwB,QAAA0rI,UACAltI,KAAAytI,mBAAA,IAAAjyI,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACA4kD,aAAA,CAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IACA4S,YAAA,EACA7S,cAAA,EACAG,SAAAtkD,EAAAgC,KAAA,WACAK,KAAA0tI,uBACA1tI,QAGA,CACA,CACAI,KAAA,yBACAmB,MAAA,QAEA,CACAnB,KAAA,mBACAmB,MAAA,QACAwqC,OAAA,SAAA3rC,GACA,OAAA5E,IAAAC,QAAAkZ,cAAAS,kBAAAhV,KAGA,CACAA,KAAA,kBACAmB,MAAA,OACAwqC,OAAA,SAAA3rC,GACA,OAAA5E,IAAAC,QAAAkZ,cAAAS,kBAAAhV,KAGA,CACAA,KAAA,mBACAmB,MAAA,QACAwqC,OAAA,SAAA3rC,GACA,MAAA,mBAAAA,EAAA,KAAAA,EAAA,SAGA,CACAA,KAAA,aACAmB,MAAA,UACAwqC,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,IAAAutF,EAAAvtF,EAAAlgC,IAAA,YAIA,OAHA,EAAAviB,EAAAC,KAAAwiD,EAAAlgC,IAAA,eACAytH,GAAA,IAAAvtF,EAAAlgC,IAAA,aAEAytH,IAGA,CACAvtI,KAAA,kBACAmB,MAAA,QAEA,CACAnB,KAAA,mBACAmB,MAAA,SAEA,CACAnB,KAAA,iBACAmB,MAAA,MACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,GACA,OAAAA,EAAA1D,OAAA,EACA,GAGA0D,KAIA,CACAA,KAAA,yBACAmB,MAAA,cACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA9gD,EAAAU,KAAA4tI,wBAAAxtF,EAAA,GACA,OAAA9gD,EAAA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAhD,GAAA9D,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,GAAA,IACApD,OAEA,CACAI,KAAA,yBACAmB,MAAA,aACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA9gD,EAAAU,KAAA4tI,wBAAAxtF,EAAA,GACA,OAAA9gD,EAAA9D,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAhD,GAAA9D,IAAAC,QAAAwH,YAAAE,YAAAC,MAAA,GAAA,IACApD,OAEA,CACAI,KAAA,yBACAmB,MAAA,OACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA9gD,EAAAU,KAAA4tI,wBAAAxtF,EAAA,GACA,OAAApgD,KAAA6tI,yBAAAvuI,EAAA,IAEAU,OAEA,CACAI,KAAA,0BACAmB,MAAA,SACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA9gD,EAAAU,KAAA4tI,wBAAAxtF,EAAA,IACA,OAAApgD,KAAA6tI,yBAAAvuI,EAAA,KACAU,OAEA,CACAI,KAAA,0BACAmB,MAAA,WACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,OAAApgD,KAAA4tI,wBAAAxtF,EAAA,KACApgD,OAEA,CACAI,KAAA,0BACAmB,MAAA,YACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA9gD,EAAAU,KAAA4tI,wBAAAxtF,EAAA,IACA,OAAApgD,KAAA6tI,yBAAAvuI,EAAA,KACAU,OAEA,CACAI,KAAA,iBACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,OACAud,OAAApuC,EAAAgC,KAAA,SAAAS,GACA,IAAA0tI,EAAAtyI,IAAAiC,IAAA0jB,QAAAy/C,cAAA,2BAAA,4HAAA,GACA,OAAA,IAAAxgE,EAAA1D,OACA,mDAAAoxI,EAAA,wIAGA,EAAAnwI,EAAAC,KAAAkwI,GAAA,mDAAAA,EAAA,SAAA,IAEA9tI,SAIA,CACA,CACAI,KAAA,yBACAmB,MAAA,QAEA,CACAnB,KAAA,mBACAmB,MAAA,QACAwqC,OAAA,SAAA3rC,GACA,OAAA5E,IAAAC,QAAAkZ,cAAAS,kBAAAhV,KAGA,CACAA,KAAA,mBACAmB,MAAA,QACAwqC,OAAA,SAAA3rC,GACA,MAAA,mBAAAA,EAAA,KAAAA,EAAA,SAGA,CACAA,KAAA,aACAmB,MAAA,UACAwqC,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,IAAAutF,EAAAvtF,EAAAlgC,IAAA,YAIA,OAHA,EAAAviB,EAAAC,KAAAwiD,EAAAlgC,IAAA,eACAytH,GAAA,IAAAvtF,EAAAlgC,IAAA,aAEAytH,IAGA,CACAvtI,KAAA,kBACAmB,MAAA,QAEA,CACAnB,KAAA,iBACAmB,MAAA,MACAwqC,OAAApuC,EAAAgC,KAAA,SAAAS,GACA,OAAAA,EAAA1D,OAAA,EACA,GAGA0D,KAIA,CACAA,KAAA,mBACAmB,MAAA,SAEA,CACAnB,KAAA,iBACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,OACAud,OAAApuC,EAAAgC,KAAA,SAAAS,GACA,IAAA0tI,EAAAtyI,IAAAiC,IAAA0jB,QAAAy/C,cAAA,2BAAA,4HAAA,GACA,OAAA,IAAAxgE,EAAA1D,OACA,mDAAAoxI,EAAA,wIAGA,EAAAnwI,EAAAC,KAAAkwI,GAAA,mDAAAA,EAAA,SAAA,IAEA9tI,QAKAA,KAAA+tI,kBAAA,IAAAvyI,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAAz0C,KAAA7C,EAAA,yBACAiD,KAAAJ,KAAAwtI,SACAvuF,SAAA,CACAoyD,WAAA,2BACAvkD,YAAA,0CAGAzP,QAAA,EACA8E,MAAA,EACA5E,MAAA,MACAf,aAAA,EACAsC,QAAAA,EACAlC,cAAA,EACAC,IAAA,MAEA78C,KAAA0tD,WAAAjd,YACAzwC,KAAAguI,YACAhuI,KAAAiuI,aAAAjuI,KAAAwtI,YAGApiF,aAAA,WACAprD,KAAA7C,EAAA,qBAAAyE,IAAA,IACA5B,KAAAwB,QAAA0rI,UACAltI,KAAAytI,mBAAAprF,SAAA,CAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,KACAriD,KAAA0tI,uBAGA1tI,KAAArB,UAGA+uI,oBAAA,WACA,IAAAv2C,EAAAn3F,KAAAytI,mBAAAn1E,WACAt4D,KAAAwtI,SAAA,GACA7vI,EAAAuhB,KAAAlf,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,MAAAA,EAAAjB,WAAAwqD,YAAA,OAAAvpD,EAAAjB,WAAAwqD,YACA93F,KAAAwB,QAAA2rI,WAAA5+F,EAAAjB,WAAA6/F,WAAA,IAAAh2C,EAAAn1F,QAAAO,SAAAvC,KAAA4tI,wBAAAr/F,EAAA,QAAA,IAAA4oD,EAAAz6F,QAAA,IAAAiB,EAAAC,KAAAoC,KAAA4tI,wBAAAr/F,EAAA,OACAvuC,KAAAwtI,SAAApvH,KAAAmwB,IAEAvuC,MAEAA,KAAA+tI,kBAAA/rF,UAAApT,QACA5uC,KAAA+tI,kBAAA/rF,UAAAkI,KAAAtX,IAAA5yC,KAAAwtI,UAEAxtI,KAAArB,UAEAA,OAAA,WACAqB,KAAA+tI,kBAAA/rF,UAAArjD,OAAAqB,KAAA7C,EAAA,qBAAAyE,OAAAsgD,QAEA0rF,wBAAA,SAAAxtF,EAAAtjD,GACA,IAAAwY,EAAA3X,EAAAka,KAAAuoC,EAAAlgC,IAAA,yBAAA,SAAA8xB,GACA,OAAAA,EAAAL,cAAA70C,IAEA,OAAAwY,EAAAA,EAAAhW,MAAA,MAEAuuI,yBAAA,SAAAvuI,EAAAxC,GACA,IAAAwY,EAAA3X,EAAAka,KAAA7X,KAAA6/B,aAAA7f,OAAA,SAAAgyB,GACA,OAAAA,EAAA9xB,IAAA,iBAAApjB,IAEA8N,EAAA,GAQA,OAPA0K,GACA3X,EAAAuhB,KAAA5J,EAAAk9C,QAAAxyC,OAAA,SAAA8yC,GACAA,EAAAh2D,KAAAwC,IACAsL,EAAAkoD,EAAA5yC,IAAA,iBAIAtV,GAEAqjI,aAAA,SAAAjuH,GACA,IAAAkuH,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EAEA/wI,EAAAuhB,KAAAc,EAAA,SAAAuuB,GACA5wC,EAAAuhB,KAAAqvB,EAAAruB,IAAA,yBAAA,SAAAyuH,GACA,GAAA,KAAAA,EAAAh9F,YACA,OAAAg9F,EAAArvI,OACA,KAAA,GACA4uI,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,IACA,MACA,KAAA,GACAC,SAOA1uI,KAAA7C,EAAA,kBAAAg/D,KAAA+xE,GACAluI,KAAA7C,EAAA,iBAAAg/D,KAAAgyE,GACAnuI,KAAA7C,EAAA,qBAAAg/D,KAAAiyE,GACApuI,KAAA7C,EAAA,yBAAAg/D,KAAAkyE,GACAruI,KAAA7C,EAAA,qBAAAg/D,KAAAmyE,GACAtuI,KAAA7C,EAAA,oBAAAg/D,KAAAoyE,GACAvuI,KAAA7C,EAAA,sBAAAg/D,KAAAqyE,GACAxuI,KAAA7C,EAAA,uBAAAg/D,KAAAsyE,GACAzuI,KAAA7C,EAAA,yBAAAg/D,KAAAuyE,IAEAV,UAAA,WACAhuI,KAAAif,IAAA,IAAAzjB,IAAA0vI,KAAAC,UAAAnrI,KAAA7C,EAAA,cAAA,CACAwxF,KAAA3uF,KAAAwB,QAAAyrI,UAEAjtI,KAAA4uI,cAAA5uI,KAAAwtI,UACAxtI,KAAA6uI,eAEAC,eAAA,SAAA50F,GACA,MAAA,yFAAAA,EAAAh6B,IAAA,UAAA,KAAAg6B,EAAAh6B,IAAA,eAAA,gCACA1kB,IAAAC,QAAAkZ,cAAAS,kBAAA8kC,EAAAh6B,IAAA,UAAA,uBACAg6B,EAAAh6B,IAAA,SAAA,yBACAg6B,EAAAh6B,IAAA,YAAA,qBACAg6B,EAAAh6B,IAAA,QAAA,uBACAg6B,EAAAh6B,IAAA,SAAA,qBACAg6B,EAAAh6B,IAAA,OAAA,QAEA0uH,cAAA,SAAAj8D,GACAh1E,EAAAuhB,KAAAyzD,EAAA,SAAAz4B,GACA,IAAA6xF,EAAA7xF,EAAAh6B,IAAA,YACA8rH,EAAA9xF,EAAAh6B,IAAA,aACA,IAAA6rH,GAAA,IAAAC,GACAhsI,KAAAif,IAAAowE,UAAA08C,EAAAC,EAAA,CACAI,kBAAApsI,KAAA8uI,eAAA50F,GACA34C,MAAA24C,EAAAh6B,IAAA,kBAGAlgB,OAEA+uI,cA/ZA,WAgaApxI,EAAAuhB,KAAAlf,KAAAif,IAAA2sH,WAAA,SAAA39C,GACAA,EAAA4+C,OAAA,SAGAmC,oBAAA,SAAA3xI,GACA,GAAA7B,IAAAiC,IAAA0jB,QAAAy/C,cAAA,2BAAA,CAGA,IAAApnD,EAAArc,EAAAE,EAAAgc,eACAvc,EAAAyF,SAAAiX,EAAA8vC,QAAAxsD,IACAa,EAAAuhB,KAAAlf,KAAAwtI,SAAA,SAAAtzF,GACAA,EAAAh6B,IAAA,YAAApjB,GACA,IAAAtB,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA2L,EACAif,OAAAx7D,EAAAgC,KAAA,WACAK,KAAA+tI,kBAAA3rF,UACApiD,KAAA+uI,gBACA/uI,KAAA4uI,cAAA5uI,KAAAwtI,WACAxtI,SAGAA,QAEAivI,UAAA,SAAA5xI,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eAEA6gC,EADAl6C,KAAA+tI,kBAAA7sF,OAAA1nC,EAAAkB,QAAA,OACAta,OACA,IAAA5E,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA2L,EACAif,OAAAx7D,EAAAgC,KAAA,WACAK,KAAA+tI,kBAAA3rF,UACApiD,KAAA+uI,gBACA/uI,KAAA4uI,cAAA5uI,KAAAwtI,WACAxtI,SAGAkvI,UAAA,SAAA7xI,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eAEA6gC,EADAl6C,KAAA+tI,kBAAA7sF,OAAA1nC,EAAAkB,QAAA,OACAta,OACAJ,KAAAif,IAAA6tH,UAAA,CAAAqC,IAAAj1F,EAAAh6B,IAAA,YAAAkvH,IAAAl1F,EAAAh6B,IAAA,eACAlgB,KAAAif,IAAA8tH,QAAA,GACApvI,EAAAuhB,KAAAlf,KAAAif,IAAA2sH,WAAA,SAAA39C,GACA,IAAA/zC,EAAAh6B,IAAA,cAAA,IAAAg6B,EAAAh6B,IAAA,aAIA+tE,EAAAohD,cAAAD,MAAAr5H,QAAA,KAAAmkC,EAAAh6B,IAAA,aAAAnK,QAAA,IAAAk4E,EAAAohD,cAAAF,MAAAp5H,QAAA,KAAAmkC,EAAAh6B,IAAA,YAAAnK,QAAA,KACA/V,KAAAqsI,YACArsI,KAAAqsI,WAAAtzF,QAEA/4C,KAAAqsI,WAAA,IAAAf,OAAAJ,KAAAoB,WAAA,CACAnwI,QAAA6D,KAAA8uI,eAAA50F,KAEAl6C,KAAAqsI,WAAA/pE,KAAAtiE,KAAAif,IAAAgvE,KAEAjuF,OAEA6uI,YAAA,WACA7uI,KAAA+tI,kBAAA/rF,UAAAlpC,GAAA,YAAAnb,EAAAgC,KAAA,WACAK,KAAAsvI,YAAA,GAEA,IAAAhgG,EAAAtvC,KACAA,KAAA+tI,kBAAA/rF,UAAAkI,KAAA,CAAA5d,OAAA,YAAA93B,MAAA,WACA86B,EAAAggG,YAAAlxH,KAAApe,KAAAI,UAGAJ,KAAA+uI,gBACA/uI,KAAA4uI,cAAA5uI,KAAAsvI,aACAtvI,KAAAiuI,aAAAjuI,KAAAsvI,cACAtvI,UAIAxE,IAAAiC,IAAA6hE,UAAA,CACA,CACA7lB,MAAA,WACA18C,KAAA,WACA8b,SAAA,WACA,IAAArd,IAAAkG,MAAAsrI,SAAA,CACAv4F,GAAAt3C,EAAA,iBAIA,CACAs8C,MAAA,cACA18C,KAAA,cACA8b,SAAA,WACA,IAAArd,IAAAkG,MAAAsrI,SAAA,CACAv4F,GAAAt3C,EAAA,aACA+vI,UAAA,EACAC,UAAA,QCllBA3xI,IAAAyxD,MAAA,CACAsiF,YAAA,GACAC,iBAAA,WACA7xI,EAAAuhB,KAAA1jB,IAAAyxD,MAAAsiF,YAAA,SAAAviF,GACAA,EAAAjU,YAKAv9C,IAAAyxD,MAAAC,YAAA1xD,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CAKAomC,iBAAA3vD,EAAAu4C,KAIAu5F,WAAA,QAIAC,aAAA,YAIAC,UAAA,cAIAC,cAAA,GAIAC,iBAAA,uBAGAziF,iBAAA,EAYA0iF,mBAAA,QAKAziF,wBAAA,EAEAE,OAAA5vD,EAAAu4C,KACAC,QAAAx4C,EAAAu4C,MAEAzC,OAAA,GACAK,kBAAA,WA4BA,OA1BA9zC,KAAA+vI,UAAApyI,EAAAid,SAAA,iBACA5a,KAAAgwI,eAAAryI,EAAAid,SAAA,sBAGA5a,KAAAiwI,MAAAjwI,KAAAkwI,WAAAlwI,MACAA,KAAAmwI,UAAAnwI,KAAAiwI,MAAAthF,WAIA3uD,KAAAiwI,MAAAp1F,OAAA55C,SAAAjB,KAAAtC,KAIAsC,KAAAowI,YAAA,KAIApwI,KAAAqwI,UAAA,KAEArwI,KAAAswI,0BAEAtwI,KAAAuwI,6BAGA/0I,IAAAyxD,MAAAsiF,YAAAnxH,KAAApe,OAEA,GAEAwwI,eAAA,WACA,IAAAC,EAAA,KACAC,EAAA,KACA5sE,EAAA,KAEA,OAAA9jE,KAAAwB,QAAAiuI,YACA,IAAA,UACAiB,EAAA1wI,KAAAowI,YACA,MACA,IAAA,QACAM,EAAA1wI,KAAAqwI,UACA,MACA,QACA,MAAA,IAAAM,MAAA,2CAGA,OAAA3wI,KAAAwB,QAAAkuI,cACA,IAAA,aACAe,EAAA,YACA3sE,EAAA,eACA,MACA,IAAA,YACA2sE,EAAA,WACA3sE,EAAA,cACA,MACA,IAAA,aACA2sE,EAAA,eACA3sE,EAAA,YACA,MACA,IAAA,YACA2sE,EAAA,cACA3sE,EAAA,WACA,MACA,QACA,MAAA,IAAA6sE,MAAA,6CAIA3wI,KAAAiwI,MAAApyI,IAAA,CAAA2C,QAAA,UAIAR,KAAAiwI,MAAApyI,IAAA,CACAE,OAAAiC,KAAAmwI,UAAApyI,SACAywB,MAAAxuB,KAAAmwI,UAAA3hH,UAGAxuB,KAAAiwI,MAAA/xI,SAAA,CAAA0yI,GAAAH,EAAAI,GAAA/sE,EAAAgtE,GAAAJ,KAEApuE,KAAA,SAAA8tE,GACA,IAAA9gG,EAAAtvC,KAGAxE,IAAAyxD,MAAAuiF,mBAEAlgG,EAAA8gG,YAAAA,EAEA9gG,EAAA+gG,UAAAhoF,MAEA,IAAA0oF,EAAAzhG,EAAA9tC,QAAA8rD,iBAAAhe,EAAA8gG,aACApsE,EAAA10B,EAAA2gG,MAAAp4H,KAAA,iBACAm5H,EAAA1hG,EAAA2gG,MAAAp4H,KAAA,qBAGAmsD,EAAAvsB,OACAu5F,EAAAn2F,OAIA,IAAAo2F,EAAA,EACAjtE,EAAA9kD,KAAA,WACA,IAAAgyH,EAAA/zI,EAAA6C,MACAikE,EAAAitE,EAAAr5H,KAAA,eACA8gH,EAAAuY,EAAA9wI,KAAA,UACAG,EAAA+uC,EAAA9tC,QAAAigD,QAAAk3E,GAEAwY,EAAAD,EAAA5wI,KAAA,SACA,EAAA3C,EAAAC,KAAA2C,EAAA4wI,eACAA,GAAA,IAAA5wI,EAAA4wI,aAGA5wI,EAAAk6D,WACA02E,GAAA,gBAEAD,EAAA5wI,KAAA,QAAA6wI,GAEA,IAAAC,EAAAntE,EAAA3jE,KAAA,SACA,EAAA3C,EAAAC,KAAA2C,EAAA6wI,eACAA,EAAAA,EAAA,IAAA7wI,EAAA6wI,aAEAntE,EAAA3jE,KAAA,QAAA8wI,GAEA,mBAAA7wI,EAAAuvD,UAAA,IAAAvvD,EAAAuvD,QAAAihF,IAKAE,IAIAhtE,EAAAxiE,KACA9D,EAAA0zI,WAAA9wI,EAAAxD,OAAAwD,EAAAxD,KAAAg0I,IAAAxwI,EAAAxD,MAGAwD,EAAA+wI,YAAA,IAAA/wI,EAAA+wI,UAAAP,IACAG,EAAAh3H,SAAA,aAbAg3H,EAAAr2F,SAiBA,IAAAo2F,GACAD,EAAAv5F,OAMAz3C,KAAAwwI,iBAEA,IAAAS,GAAAjxI,KAAAwB,QAAA4rD,gBACAptD,KAAAiwI,MAAAp1F,QAEA76C,KAAAiwI,MAAAx4F,OAEAz3C,KAAAuxI,2BAEAvxI,KAAAwB,QAAA+rD,OAAAwjF,KAGAh4F,MAAA,WAEA/4C,KAAAiwI,MAAAp1F,OAEA76C,KAAAwxI,2BAEAxxI,KAAAwB,QAAA20C,WAEAgN,QAAA,WACAnjD,KAAA+4C,QACA/4C,KAAAyxI,0BACAzxI,KAAA0xI,8BAEAxB,WAAA,SAAAyB,GACA,IAAA1B,EAAA9yI,EAAA,wCACAy0I,EAAAz0I,EAAA,+BAIAihE,EAAA,GAGAA,EAAA,GAAA,GAGAzgE,EAAAuhB,KAAAyyH,EAAAnwI,QAAAouI,cAAA,SAAAiC,EAAAC,GACA1zE,EAAA0zE,EAAA,GAAA,KAIA,IAAAC,GAAA,EAGAp0I,EAAAuhB,KAAAyyH,EAAAnwI,QAAAigD,QAAA,SAAAlhD,EAAAo4H,GACA,IAAAqZ,GAAA,EAEAr0I,EAAAuhB,KAAAyyH,EAAAnwI,QAAAouI,cAAA,SAAAiC,EAAAC,GACAn0I,EAAA8yD,SAAAohF,EAAAlZ,KACAv6D,EAAA0zE,EAAA,GAAA1zH,KAAAu6G,GACAqZ,GAAA,MAIA,IAAAA,GACA5zE,EAAA,GAAAhgD,KAAAu6G,QAGA,IAAAp4H,EAAA0xI,YACAF,GAAA,KAIA,IAAAG,GAAA,EACAv0I,EAAAuhB,KAAAk/C,EAAA,SAAA+zE,GACA,GAAAA,EAAAz1I,UAGA,IAAAw1I,GACAN,EAAA9wI,OAAA,6BAEAoxI,GAAA,EAEAv0I,EAAAuhB,KAAAizH,EAAA,SAAAxZ,GACA,IAAAp4H,EAAAoxI,EAAAnwI,QAAAigD,QAAAk3E,GACA,mBAAAp4H,EAAA6xI,UAAA7xI,EAAA6xI,cAMA,IAAAL,EACAH,EAAA9wI,OACA,0DAAA63H,EAAA,oFAEAp4H,EAAA0xI,WAAA,IAAA,oDAQAL,EAAA9wI,OACA,0DAAA63H,EAAA,sHAOAiZ,EAAA9wI,OACA,gHAEA6wI,EAAAnwI,QAAAquI,iBAAA,uBAMA,IAAAjlI,EAAAqlI,EAAAnvI,OAAA8wI,GAEA5xI,KAAAwB,QAAA6rD,yBAEAziD,EADAzN,EAAA,4EACA2D,OAAAmvI,IAGA,OAAArlI,GAEA0lI,wBAAA,WACA,IAAAhhG,EAAAtvC,KACAqyI,EAAA,KAEA,OAAA/iG,EAAA9tC,QAAAmuI,WACA,IAAA,QACA0C,EAAA,QACA,MACA,IAAA,cACAA,EAAA,cACA,MACA,IAAA,QACAA,EAAA,aACA,MACA,QACA,MAAA,IAAA1B,MAAA,0CAKArhG,EAAA5xC,IAAAob,GAAAu5H,EAAA/iG,EAAAygG,UAAAzgG,EAAA9tC,QAAA2rD,SAAA,SAAAmlF,GAKA,OAJAhjG,EAAAgzB,KAAAnlE,EAAA6C,MAAAsyI,IAIA,KAGAb,wBAAA,WACAzxI,KAAAtC,IAAAye,IAAAnc,KAAA+vI,YAEAQ,2BAAA,WACA,IAAAjhG,EAAAtvC,KACAuyI,EAAAjjG,EAAA9tC,QAAAsuI,mBAAAxgG,EAAAygG,UAGA/vI,KAAAiwI,MAAAn3H,GAAAy5H,EAAA,SAAAD,GACAA,EAAAh1I,iBACAg1I,EAAAr9F,kBAEA,IACAi8F,EADA/zI,EAAAm1I,EAAA94H,QACAkB,QAAA,iBAIA,GAAAw2H,GAAAA,EAAAx0I,SAAAw0I,EAAA/vF,GAAA,aAAA,CAIA,IAAAw3E,EAAAuY,EAAA9wI,KAAA,UACA2wI,EAAAzhG,EAAA9tC,QAAA8rD,iBAAAhe,EAAA8gG,aAIA9gG,EAAA9tC,QAAAigD,QAAAk3E,GAAAn+D,QAAAu2E,GAGAzhG,EAAAyJ,YAGA24F,2BAAA,WACA1xI,KAAAiwI,MAAA9zH,IAAAnc,KAAA+vI,YAEAwB,yBAAA,WACA,IAAAjiG,EAAAtvC,KACA,OAAAsvC,EAAA9tC,QAAAmuI,WACA,IAAA,QAEA,IAAA,cACA,MACA,QACA,MAAA,IAAAgB,MAAA,0CAKAxzI,EAAA,QAAA2b,GAAA,QAAAw2B,EAAA0gG,eAAA,WACA1gG,EAAAyJ,WAGAy4F,yBAAA,WACAxxI,KAAAtC,IAAAye,IAAAnc,KAAAgwI,mBgBzZAx0I,IAAAC,QAAA6xE,OAAA,CACAC,UAAA,WACA,IAAA5xE,EAAAG,OAAAF,UAAAD,UACA62I,EAAA,KASA,OARA,MAAA72I,EAAA2Z,MAAA,YACAk9H,EAAA,UAEA,MAAA72I,EAAA2Z,MAAA,YACA,MAAA3Z,EAAA2Z,MAAA,UACA,MAAA3Z,EAAA2Z,MAAA,WACAk9H,EAAA,OAEAA,IAIAh3I,IAAAkG,MAAA4rE,OAAA,GAEA9xE,IAAAkG,MAAA4rE,OAAAmlE,iBAAAj3I,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAxW,OAAA,uBACA8uB,kBAAA,GAEA5B,OAAA,CACAi/F,qBAAA,YACAC,mBAAA,aAEA17F,mBAAA,WACA,GAAA,MAAAz7C,IAAAC,QAAA0qB,cAAAC,UAAApmB,KAAAwB,QAAA+kB,QACA,OAAA,GAGAqsH,UAAA,WACA5yI,KAAAwmB,YACAhrB,IAAAiC,IAAA0jB,QAAA6D,QAAA4tH,aAEApsH,UAAA,WACAhrB,IAAAC,QAAA0qB,cAAAK,UAAAxmB,KAAAwB,QAAA+kB,QAAA,EAAA,MftCA/qB,IAAAkG,MAAAs5D,OAAA,GAEAx/D,IAAAkG,MAAAs5D,OAAA+X,MAAAv3E,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAg3C,mBAAA,WACAj3C,KAAAwB,QAAA7D,EAAAupB,SAAA,CACAsuB,gBAAA,EACAC,aAAA,MACAW,KAAAz4C,EAAAgC,KAAA,WACA,EAAAhC,EAAAC,KAAAoC,KAAAwB,QAAA+kB,SACA/qB,IAAAC,QAAA0qB,cAAAK,UAAAxmB,KAAAwB,QAAA+kB,QAAA,GAGA,mBAAAvmB,KAAAwB,QAAAwxE,OACAhzE,KAAAwB,QAAAwxE,SAEAhzE,MACA81C,uBAAA,EACAC,oBAAA,KACAE,YAAAt4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAqxI,MACA7yI,KAAAwB,QAAAqxI,QAEA7yI,OACAA,KAAAwB,YAIAhG,IAAAkG,MAAAs5D,OAAAwyC,aAAAhyG,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAg3C,mBAAA,WACAj3C,KAAAwB,QAAA7D,EAAAupB,SAAA,CACAsuB,gBAAA,EACAC,aAAA,OACAW,KAAAz4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,UAEAn5D,MACA81C,yBAAA,IAAA91C,KAAAwB,QAAAsxI,sBACA/8F,oBAAA,aACAE,YAAAt4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAisG,YACAztG,KAAAwB,QAAAisG,cAEAztG,MACA21C,oBAAA,EACAE,uBAAA71C,KAAAwB,QAAAuxI,wBAAA/yI,KAAAwB,QAAAuxI,wBAAA,YACAn9F,iBAAA,SACAO,QAAAx4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,YAEAl5D,OACAA,KAAAwB,YAIAhG,IAAAkG,MAAAs5D,OAAAC,aAAAz/D,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAg3C,mBAAA,WACAj3C,KAAAwB,QAAA7D,EAAAupB,SAAA,CACAsuB,gBAAA,EACAC,aAAAz1C,KAAAwB,QAAAwxI,iBAAAhzI,KAAAwB,QAAAwxI,iBAAA,SACAt9F,mBAAA11C,KAAAwB,QAAAyxI,uBAAAjzI,KAAAwB,QAAAyxI,uBAAA,SACA78F,KAAAz4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA41D,UACAp3D,KAAAwB,QAAA41D,YAEAp3D,MACA21C,oBAAA,EACAE,uBAAA71C,KAAAwB,QAAAuxI,wBAAA/yI,KAAAwB,QAAAuxI,wBAAA,YACAn9F,iBAAA51C,KAAAwB,QAAA0xI,kBAAAlzI,KAAAwB,QAAA0xI,kBAAA,SACA/8F,QAAAx4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,YAEAl5D,OACAA,KAAAwB,YAIAhG,IAAAkG,MAAAs5D,OAAAm4E,WAAA33I,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAg3C,mBAAA,WACAj3C,KAAAwB,QAAA7D,EAAAupB,SAAA,CACAsuB,gBAAA,EACAQ,0BAAA,SACAP,aAAA,sBACAW,KAAAz4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAwxE,OACAhzE,KAAAwB,QAAAwxE,SAEAhzE,MACA81C,uBAAA,EACAC,oBAAA,wBACAE,YAAAt4C,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAqxI,MACA7yI,KAAAwB,QAAAqxI,QAEA7yI,OACAA,KAAAwB,YAMAhG,IAAAkG,MAAAs5D,OAAA0T,WAAAlzE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBCzGAvhC,IAAAunE,IAAA,CACAqwE,4BAAA,SAAAv6H,GACA/c,OAAAu3I,eAAA,UACA,IAAA73I,IAAAyD,KAAAC,QAAA,CACAC,SAAA,oBAAA3D,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,aACA8lC,MAAAlxC,KAAA/B,EAAAgC,KAAA,WACA,GAAAnE,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAA,CACA,IAAAyE,EAAA7oB,OAAAw3I,aAAAx3I,OAAAw3I,aAAA93I,IAAAiC,IAAA0jB,QAAArkB,GACAy2I,cAAAC,qBAAAC,4BAAA9uH,EAAA,MAAA7oB,OAAA43I,mBAAA53I,OAAA43I,mBAAA,GAAA,SAAA5vF,GACAhoD,OAAAgoD,SAAA3mD,EAAAw2I,UAAA7vF,GACAhoD,OAAAgoD,SAAAj4B,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GACA,MAAAhB,OAAAgoD,SAAA8vF,gBACA93I,OAAA+3I,oBAAA/3I,OAAAgoD,SAAA8vF,eAEA,MAAA93I,OAAAgoD,SAAAgwF,qBACAh4I,OAAAi4I,yBAAAj4I,OAAAgoD,SAAAgwF,oBAGA,MAAAh4I,OAAAgoD,SAAAkwF,sBACAl4I,OAAAm4I,aAAAn4I,OAAAgoD,SAAAkwF,qBAGA,IAAAE,EAAA,iFAAA14I,IAAAiC,IAAA0jB,QAAArkB,GAAA,OAAA,IAAAwF,MAAA2I,UACApL,OAAAZ,KAAA,CACA8B,KAAA,MACAZ,IAAA+zI,EACAxoG,SAAA,OACAh3B,QAAA/W,EAAAgC,KAAA,SAAAiL,GACA9O,OAAAgoD,SAAAqwF,wBAAAvpI,EACA2oI,cAAAC,qBAAAY,eAAA54I,IAAAiC,IAAA0jB,QAAArkB,GAAA,SAAAkoB,GACAlpB,OAAAkpB,QAAA7nB,EAAAw2I,UAAA3uH,GACAnM,KACAw7H,gBACAr0I,SAEAq0I,oBAEA,IAAA74I,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,wBAGAihB,UAAA,IACAF,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAmkD,GACAhoD,OAAAgoD,SAAAA,EACAyvF,cAAAC,qBAAAY,eAAA54I,IAAAiC,IAAA0jB,QAAArkB,GAAA,SAAAkoB,GACAlpB,OAAAkpB,QAAA7nB,EAAAw2I,UAAA3uH,GACAnM,KACAw7H,gBACAr0I,OAAAmsB,KAAAkoH,gBAEAr0I,SAGAxE,IAAAunE,IAAAuxE,QAAA,WACA,SAAAC,IAAA,IAAA/yI,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAu0I,GACAv0I,KAAAlD,GAAA0E,EAAA1E,GACAkD,KAAAuB,MAAAC,EAAAD,MACAvB,KAAAw0I,QAAA,IAAAhzI,EAAAgzI,OACAx0I,KAAAy0I,SAAAjzI,EAAAizI,SACAz0I,KAAA00I,mBAAA,IAAAlzI,EAAAkzI,kBACA10I,KAAA20I,oCAAA,IAAAnzI,EAAAmzI,mCACA30I,KAAAmvD,UAAA3tD,EAAA2tD,UACAnvD,KAAAooB,KAAA5mB,EAAA4mB,KACApoB,KAAA40I,UAAApzI,EAAAozI,UACA50I,KAAA60I,gBAAArzI,EAAAqzI,gBACA70I,KAAA0sE,QAAAlrE,EAAAkrE,QACA1sE,KAAAmtI,SAAA3rI,EAAA2rI,SACAntI,KAAA80I,SAAAtzI,EAAAszI,SACA90I,KAAA+0I,sBAAAvzI,EAAAuzI,sBACA/0I,KAAAg1I,YAAAxzI,EAAAwzI,YACAh1I,KAAAi1I,cAAAzzI,EAAAyzI,cACAj1I,KAAAk1I,aAAA1zI,EAAA0zI,aACAl1I,KAAA80D,QAAAtzD,EAAAszD,QACA,MAAAtzD,EAAAi4C,QACAz5C,KAAAy5C,MAAAj4C,EAAAi4C,OAEA,MAAAj4C,EAAA0qD,QACAlsD,KAAAksD,MAAA1qD,EAAA0qD,OAEA,MAAA1qD,EAAAuqC,SACA/rC,KAAA+rC,OAAAvqC,EAAAuqC,QAEA,MAAAvqC,EAAAo/D,gBACA5gE,KAAA4gE,cAAAp/D,EAAAo/D,eAEA,MAAAp/D,EAAA0pC,OACAlrC,KAAAkrC,KAAA,mBAAA1pC,EAAA0pC,KAAA1pC,EAAA0pC,KAAAvtC,EAAAu4C,MAEA,MAAA10C,EAAAmlG,aACA3mG,KAAA2mG,WAAAnlG,EAAAmlG,YAGA,MAAAnlG,EAAA2zI,gBACAn1I,KAAAm1I,cAAA3zI,EAAA2zI,eAGA,MAAA3zI,EAAA4zI,YACAp1I,KAAAo1I,UAAA5zI,EAAA4zI,WA5CA,OAAAnqG,aAAAspG,EAAA,CAAA,CAAA3zI,IAAA,OAAAtB,MAgDA,WACA,OAAAU,KAAAlD,KAjDA,CAAA8D,IAAA,cAAAtB,MAoDA,WACA,MAAA9D,IAAAiC,IAAA0jB,QAAA6D,QAMAxpB,IAAAiC,IAAAiuB,OAAAuvB,cALAz/C,IAAAiC,IAAAiuB,OAAAC,SAAA,YAAAnwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,CACA8gB,SAAA,MAvDA,CAAAhrB,IAAA,QAAAtB,MA8DA,SAAAkC,GAAA,IAAA+5C,IAAA,EAAAnxC,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GAAAirI,EAAA,EAAAjrI,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,KACA,OAAApK,KAAA4gE,iBAAA5gE,KAAAi6C,eAAAj6C,KAAAs1I,gBAKA9zI,GAAAA,EAAA+zI,aAAA,EAGA,EAAA53I,EAAAC,KAAAy3I,IAAAr1I,KAAA00I,mBAAAl5I,IAAAiC,IAAA0jB,QAAAi7B,mBAAA,MAAA5gD,IAAAiC,IAAA0jB,QAAA0D,SACA,MAAArpB,IAAAiC,IAAA0jB,QAAA+4B,MAAA,QAAA1+C,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,eACA,IAAA1kB,IAAAkG,MAAAqhE,IAAAyyE,kBAAA,CACA/gG,GAAA4gG,EACAI,WAAA93I,EAAAgC,KAAA,WACAK,KAAA+rC,OAAAspG,EAAA7zI,IACAxB,MACAm2C,QAAAx4C,EAAAgC,KAAA,WACAK,KAAAi7C,eACAj7C,QAGAA,KAAAi7C,eAEA,QAEAz/C,IAAAiC,IAAAiuB,OAAAC,SAAA,mBAAA3rB,KAAAkrC,KAAAlrC,KAAAkrC,KAAA1pC,GAAAxB,KAAAkrC,KAAA,CACAtf,QAAA2vB,KAxBAv7C,KAAAi7C,eACA,KAjEA,CAAAr6C,IAAA,aAAAtB,MA6FA,WACA,GAAA,MAAAU,KAAA01I,QAAA,CACA,IAAA33C,EAMA43C,GAJA53C,EADA,MAAAviG,IAAAiC,IAAA0jB,QAAA6D,QACAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAEAh7D,IAAAiC,IAAA0jB,QAAAq1C,aAEAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAk/E,eACAC,EAAA93C,EAAAnnC,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAo/E,sBACA91I,KAAA01I,QAAA/3I,EAAAo0C,UAAAp0C,EAAA4hE,MAAA,MAAAs2E,EAAAA,EAAA,GAAA,MAAAF,EAAAA,EAAA,IAAA,CAAA74I,GAAAkD,KAAAlD,KAEA,OAAAkD,KAAA01I,UAzGA,CAAA90I,IAAA,mBAAAtB,MA4GA,WACA,IAAAsL,EAAA,GACAmrI,EAAA/1I,KAAAg2I,aAOA,GALAprI,EADA,MAAAmrI,GAAA,MAAAA,EAAAx0I,MACAw0I,EAAAx0I,MAEA,mBAAAvB,KAAAuB,MAAAvB,KAAAuB,QAAAvB,KAAAuB,MAGA,MAAA/F,IAAAiC,IAAA0jB,QAAA6D,SAAAxpB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAu/E,gCAAA,CACA,IAAAC,EAAA16I,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,eACAi2H,EAAA36I,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,QACAk2H,EAAA56I,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,SACAm2H,EAAA,GACA,EAAA14I,EAAAC,KAAAu4I,KACAE,GAAAF,GAEA,EAAAx4I,EAAAC,KAAAw4I,KACA,EAAAz4I,EAAAC,KAAAw4I,KACAC,GAAA,MAEAA,GAAAD,GAEAxrI,EAAAyrI,EAAA,MAAAH,EAGA,OAAAtrI,IAtIA,CAAAhK,IAAA,WAAAtB,MAyIA,WAAA,IAAAmC,IAAA,EAAA2I,UAAA1N,aAAA2N,IAAAD,UAAA,KAAAA,UAAA,GACAQ,EAAA,GACAmrI,EAAA/1I,KAAAg2I,aAqBA,OAnBAprI,EADA,MAAAmrI,GAAA,MAAAA,EAAAx0I,MACAw0I,EAAAx0I,MAEA,mBAAAvB,KAAAuB,MAAAvB,KAAAuB,QAAAvB,KAAAuB,MAGAvB,KAAAw0I,OAEA5pI,GADAnJ,EACA,0DAEA,WAEA,mBAAAzB,KAAAy0I,UAAAz0I,KAAAy0I,aAAA,IAAAz0I,KAAAy0I,YAEA7pI,GADAnJ,EACA,4DAEA,aAIAmJ,IAhKA,CAAAhK,IAAA,eAAAtB,MAmKA,WACA,IAAAy2I,EAAA/1I,KAAAg2I,aACA,OAAA,MAAAD,GAAA,MAAAA,EAAA5mF,UACA4mF,EAAA5mF,UAEAnvD,KAAAmvD,YAxKA,CAAAvuD,IAAA,aAAAtB,MA2KA,WACA,IAAAy2I,EAAA/1I,KAAAg2I,aACA,OAAA,MAAAD,GAAA,MAAAA,EAAAjhF,QACAihF,EAAAjhF,QAEA90D,KAAA80D,UAhLA,CAAAl0D,IAAA,gBAAAtB,MAmLA,WAEA,IAAAy2I,EAAA/1I,KAAAg2I,aACA,OAAA,MAAAD,GAAAA,EAAApvC,WACAovC,EAAApvC,WAEA,mBAAA3mG,KAAA2mG,WAAA3mG,KAAA2mG,aAAA3mG,KAAA2mG,aAzLA,CAAA/lG,IAAA,gBAAAtB,MA4LA,WACA,OAAA,IA7LA,CAAAsB,IAAA,aAAAtB,MAgMA,WACA,QAAA,EAAA3B,EAAAC,KAAAoC,KAAA0sE,YACA,MAAAlxE,IAAAiC,IAAA0jB,QAAA6D,SAAA,MAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAAs5C,aACA9iE,IAAAiC,IAAA0jB,QAAA6D,QAAAs5C,aAAArkB,WAAAj6C,KAAA0sE,SAEAlxE,IAAAiC,IAAA0jB,QAAA84B,WAAAj6C,KAAA0sE,YArMA,CAAA9rE,IAAA,aAAAtB,MA0MA,WACA,OAAA,IA3MA,CAAAsB,IAAA,QAAAtB,MA8MA,WACA,OAAA,MA/MAi1I,EAAA,GAmNA/4I,IAAAunE,IAAAuzE,aAAA,WAAA,OAAArrG,aACA,SAAAsrG,EAAA3oF,EAAApsD,GAAAupC,gBAAA/qC,KAAAu2I,GACAv2I,KAAA4tD,MAAAA,EACA5tD,KAAAwB,QAAAA,GAAA,KAHA,GAOAhG,IAAAunE,IAAAyzE,WAAA,CACAC,KAAA,IAAAj7I,IAAAunE,IAAAuzE,aAAA,CACA,IAAA96I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,aACAyE,MAAA,cACA4tD,UAAA,GACA/mC,KAAA,YACAskD,QAAA,WACAooE,UAAA,EACA/oG,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAAg/B,SAAAg2G,cAAA,CACAjiG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,kBACAyE,MAAA,WACA,OAAA/F,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAigF,2BAAAn7I,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAigF,2BAAA,oBAEAxnF,UAAA,GACA/mC,KAAA,YACA0sH,UAAA,EACA/oG,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAAg/B,SAAAk2G,oBAAA,CACAniG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,eAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAmgF,6BAGA,IAAAr7I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,kBACA4tD,UAAA,GACA/mC,KAAA,cACA0sH,UAAA,EACA/oG,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAAg/B,SAAAo2G,mBAAA,CACAriG,GAAA/2C,KAGAipG,WAAA,WACA,MAAA,OAAAnrG,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBAAA,MAAA1kB,IAAAiC,IAAA0jB,QAAA0D,SAAArpB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAA1kB,IAAAiC,IAAA0jB,QAAAi7B,qBAGA,IAAA5gD,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,GACAslF,UAAA,EACArsH,KAAA,WACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAEA70B,OAAA,SAAAruC,GACA,IAAAlC,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WAEA,CACAA,SAAA,UACAG,MAAA,OAGAsxC,MAAAlxC,KAAA/B,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAA6D,QAAA,KACAlpB,OAAAw3I,aAAA93I,IAAAiC,IAAA0jB,QAAArkB,GACAhB,OAAAi7I,aAAA,GACAC,gBAAAt5I,IACAsC,QAEAksD,MAAA,WACA,OAAA1wD,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAugF,oBACAz7I,IAAAiC,IAAA0jB,QAAAy/C,cAAA,uBACAplE,IAAAiC,IAAA0jB,QAAAjB,IAAA,2BAEA,EAGA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,4BAGAymF,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAwgF,0BAGA17I,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAA+Q,UAAAqjB,kBAAAp0B,IAAAiC,IAAA0jB,QAAAjB,IAAA,eAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAygF,6BAGA,IAAA37I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,WACA4tD,UAAA,GACA/mC,KAAA,WACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAEA70B,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA0kG,YAAAgxC,YAAAz5I,EAAAupB,SAAA,CACAutB,GAAA/2C,GACA8D,KAEA0qD,MAAA,WACA,OAAA1wD,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAugF,oBACAz7I,IAAAiC,IAAA0jB,QAAAy/C,cAAA,uBACAplE,IAAAiC,IAAA0jB,QAAAjB,IAAA,2BAEA,EAGA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,4BAGAymF,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,eAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAg8C,4BAGA,IAAAl3G,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,YACAskD,QAAA,YACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAEAnnB,MAAA,WACA,GAAAj+C,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2gF,wBAKA,GAAAv7I,OAAA4C,SAAAmkB,KAAAjgB,gBAAA,IAAA5C,KAAAkrC,OAGA,OAFApvC,OAAA4C,SAAAslB,KAAA,IAAAhkB,KAAAkrC,OACApvC,OAAA4C,SAAA8mE,UACA,OAPAhqE,IAAAiC,IAAAiuB,OAAAC,SAAA3rB,KAAAkrC,OAAA,CACAtf,SAAA,KAUAmgB,OAAA,SAAAruC,GACAlC,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2gF,uBAKA35I,EAAAoD,OAAA3D,EAAA,YAAA,CACAopD,IAAA,uBAAA/qD,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA4gF,kBAAAxsI,WACAmc,MAAA,8BAAAvpB,EAAAK,SAAA,SANA,IAAAvC,IAAAkG,MAAAkhC,MAAA20G,cAAA,CACA9iG,GAAA/2C,KASAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4gF,mBACA97I,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2gF,wBAAA,MAAA77I,IAAAiC,IAAA0jB,QAAA+4B,OAAA1+C,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,iBACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAEA70B,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAA81I,SAAA,CACA/iG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAi7B,qBAIA5gD,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+gF,sBAGA,IAAAj8I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,gBACAyE,MAAA,eACA4tD,UAAA,GACA/mC,KAAA,WACA0sH,UAAA,EACA/oG,OAAA,SAAAruC,GACAg6I,kBAAAh6I,IAEAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAihF,2BAGA,IAAAn8I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,UACAyE,MAAA,UACA4tD,UAAA,GACA/mC,KAAA,UACA0sH,UAAA,EACAJ,mBAAA,EACA3oG,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA+hE,QAAAC,eAAA,CACAjvB,GAAA/2C,EACAkD,IAAAY,EAAAA,EAAAZ,IAAA,KACAgjE,YAAApiE,EAAAA,EAAAgiE,IAAA,QAGAmjC,WAAA,WACA,IAAAixC,EAAA,KAIA,OAHA,MAAAp8I,IAAAiC,IAAA0jB,QAAA+4B,OACA09F,EAAAp8I,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,iBAEA1kB,IAAAiC,IAAA0jB,QAAAi7B,mBAAA,OAAAw7F,KAGA,IAAAp8I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,UACAyE,MAAA,mBACA4tD,UAAA,GACA/mC,KAAA,mBACA0sH,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAi7B,mBAAA5gD,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAEA8zE,mBAAA,EACA3oG,OAAA,SAAAruC,GACA,IAAAm6I,EAAA,IAAAr8I,IAAAk3C,YAAA5T,WAAAg5G,eACAC,EAAA,WACA,IAAA7zE,EAAA,IAAA1oE,IAAAk3C,YAAA5T,WAAAqmE,iBAAA,KAAA,CACAtgF,QAAArpB,IAAAiC,IAAA0jB,QAAA0D,QACAu6C,aAAA5jE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAA,eAAAj7D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAAAp7D,IAAA+Q,UAAAsjB,eAEAq0C,EAAAr4B,MAAA,CACAn3B,QAAA,WACA,IAAAlZ,IAAAkG,MAAAo9B,WAAAilC,mBAAA,CACAtvB,GAAA/2C,EACAgwD,WAAAwW,KAGA5vD,MAAA,SAAAi6B,EAAA3jC,GACA,IAAApP,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAA43C,0BAAA,CACA51B,MAAAA,EACA3jC,OAAAA,QAKAitI,EAAAhsG,MAAA,CACAn3B,QAAA,WAGA,MAFA/W,EAAAka,KAAAggI,EAAA73H,OAAA,SAAAg4H,GACA,OAAAA,EAAA93H,IAAA,cAAA83H,EAAA93H,IAAA,gBAEA,IAAA1kB,IAAAkG,MAAAo9B,WAAAm5G,oBAAA,CACAvqF,WAAAmqF,EACAK,WAAA,WACAH,OAIAA,QAKApxC,WAAA,WACA,IAAAixC,EAAA,KACAx7F,EAAA5gD,IAAAiC,IAAA0jB,QAAAi7B,kBAIA,OAHA,MAAA5gD,IAAAiC,IAAA0jB,QAAA+4B,OACA09F,EAAAp8I,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,gBAEA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAAk8B,GAAA,QAAAw7F,GAAAx7F,GAAA5gD,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyhF,oBAGA,IAAA38I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,aACAyE,MAAA,aACA4tD,UAAA,GACA/mC,KAAA,UACA0sH,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAi7B,mBAAA5gD,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAEA70B,OAAA,SAAAruC,EAAA8D,GACA,IAAAq2I,EAAA,IAAAr8I,IAAAk3C,YAAA5T,WAAAg5G,eACAC,EAAA,WACA,IAAA7zE,EAAA,IAAA1oE,IAAAk3C,YAAA5T,WAAAqmE,iBAAA,KAAA,CACAtgF,QAAArpB,IAAAiC,IAAA0jB,QAAA0D,QACAu6C,aAAA5jE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAA,eAAAj7D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAA,eAAAp7D,IAAA+Q,UAAAsjB,eAEAq0C,EAAAr4B,MAAA,CACAn3B,QAAA,WACA,IAAAlZ,IAAAkG,MAAAo9B,WAAAilC,mBAAA,CACAtvB,GAAA/2C,EACAgwD,WAAAwW,KAGA5vD,MAAA,SAAAi6B,EAAA3jC,GACA,IAAApP,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAA43C,0BAAA,CACA51B,MAAAA,EACA3jC,OAAAA,QAKAitI,EAAAhsG,MAAA,CACAn3B,QAAA,WAGA,MAFA/W,EAAAka,KAAAggI,EAAA73H,OAAA,SAAAg4H,GACA,OAAAA,EAAA93H,IAAA,cAAA83H,EAAA93H,IAAA,gBAEA,IAAA1kB,IAAAkG,MAAAo9B,WAAAm5G,oBAAA,CACAvqF,WAAAmqF,EACAK,WAAA,WACAH,OAIAA,QAKApxC,WAAA,WACA,OAAA,KAGA,IAAAnrG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,IACA/mC,KAAA,kBACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAEA70B,OAAA,SAAAruC,GACAlC,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA0hF,qBACAC,cAAA36I,GAEA,IAAAlC,IAAAkG,MAAAy8E,UAAAiE,eAAA,CACA3tC,GAAA/2C,KAIAipG,WAAA,WACA,OAAA,MAAAnrG,IAAAiC,IAAA0jB,QAAA+4B,QAGA,IAAA1+C,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,IACA/mC,KAAA,kBACA0sH,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAEA70B,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAA42I,UAAAC,mBAAA,CACA9jG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,aACA4tD,UAAA,IACA/mC,KAAA,gBACA0sH,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAEA70B,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAA82I,UAAAC,aAAA,CACAhkG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,IACA/mC,KAAA,yBACA0sH,UAAA,EACAl0E,cAAA,WAEA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,qBAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAAAplE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAgiF,kBAEA3sG,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAgiF,iBAKA,IAAAl9I,IAAAkG,MAAAmzB,SAAA8jH,SAAAh7I,EAAAupB,SAAA,CACAutB,GAAA/2C,GACA8D,IANA,IAAAhG,IAAAkG,MAAAmzB,SAAA+jH,eAAA,CACAnkG,GAAA/2C,KAQAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,cACA,MAAA1kB,IAAAiC,IAAA0jB,QAAAm9C,cAAA9iE,IAAAiC,IAAA0jB,QAAAm9C,aAAAxhE,KAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAA8nE,KAAA1xG,IAAAiC,IAAA0jB,QAAAm9C,aAAAxhE,KAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAAgoE,cAGA,IAAA5xG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAqyD,UAAA,IACA5tD,MAAA,YACA6mB,KAAA,mBACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,+BAEA11B,KAAA,SAAA1pC,GACA,OAAAA,EACA,YAAAA,EAAAkrE,QAEA,YAGA3gC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAm3I,SAAAC,mBAAA,CACArkG,GAAA/2C,EACAgvE,QAAAlrE,EAAAkrE,WAGAi6B,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,eAAA,MAAA1kB,IAAAiC,IAAA0jB,QAAAg+E,gBAAA,MAAA3jG,IAAAiC,IAAA0jB,QAAAg+E,eAAAriG,MAGA,IAAAtB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,UACAqyD,UAAA,IACA5tD,MAAA,UACA6mB,KAAA,gBACAskD,QAAA,UACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAEA70B,OAAA,SAAAruC,GACAq7I,kBAAAr7I,IAEAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,eACAqyD,UAAA,IACA5tD,MAAA,iBACA6mB,KAAA,gBACAskD,QAAA,UACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAAy/C,cAAA,oBAEA70B,OAAA,SAAAruC,GACAlC,IAAAiC,IAAAu7I,WAAA,IAAAx9I,IAAAkG,MAAAijF,UAAAs0D,cAAA,CACAxkG,GAAA/2C,KAGAipG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAwiF,sBAAA,IAAA16I,OAAA,eAAAxC,KAAAF,OAAA4C,SAAAslB,SAGA,IAAAxoB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,IACA/mC,KAAA,SACA0sH,UAAA,EACA/oG,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyiF,sBACAC,mBAAA17I,IAEAlC,IAAAC,QAAA2D,WAAA2kB,mBACA,IAAAvoB,IAAAkG,MAAAoiD,SAAAu1F,YAAA,CACA5kG,GAAA/2C,EACA47I,YAAA93I,EAAA83I,YACA/6E,eAAA/8D,EAAA+8D,eACAg7E,SAAA/3I,EAAA+3I,eAKA,IAAA/9I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,UACAyE,MAAA,WACA4tD,UAAA,IACA/mC,KAAA,cACA2sH,uBAAA,EACAt7F,MAAA,WACAj+C,IAAAiC,IAAA+D,QAAA6pC,KACAvvC,OAAA4C,SAAAslB,KAAA,WAEAloB,OAAA4C,SAAAslB,KAAA,mBAIA,IAAAxoB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,kBACA4tD,UAAA,IACA2F,SAAA,EACA0kF,UAAA,OACA5E,UAAA,iDACAh0E,cAAA,WACA,OAAA,GAEAs0E,aAAA,wDACAvuC,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+iF,uBAEAxE,cAAA,oMAGAjwH,QAAA,IAAAxpB,IAAAunE,IAAAuzE,aAAA,CACA,IAAA96I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,yBACA0sH,UAAA,EACA5pG,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAg/B,SAAAg5G,iBAAA/7I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACA6wC,MAAA/yC,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,GAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QACA,MAAA,YAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAIA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,UACAyE,MAAA,kBACA4tD,UAAA,GACA/mC,KAAA,kBACA0sH,UAAA,EACA5pG,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,YAEAihC,OAAA,SAAAruC,EAAA8D,GACAxB,KAAA25I,eAAA,IAAAn+I,IAAAkG,MAAAg/B,SAAAk5G,eAAAj8I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACA6wC,MAAA/yC,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEA4zI,UAAA,WACA,MAAAp1I,KAAA25I,gBACA35I,KAAA25I,eAAAE,cAGAj5E,cAAA,WACA,IAAAk5E,EAAAt+I,IAAAiC,IAAA0jB,QAAA6D,QACA,OAAA80H,EAAA55H,IAAA,uBAAA45H,EAAA55H,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,mBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,aACA0sH,UAAA,EACA5pG,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAg/B,SAAAq5G,mBAAAp8I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAo/D,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,iBAEA+lC,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAsjF,6BAGA,IAAAx+I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,OACAyE,MAAA,OACA4tD,UAAA,GACA2F,SAAA,EACA1sC,KAAA,cACA0sH,UAAA,EACA5pG,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,SAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAijF,EAAA,IAAAjpF,IAAAigE,OAAA/9D,GACAlC,IAAAunE,IAAAqwE,4BAAA,WACAt3I,OAAAm+I,uBAAA,EACA,MAAAx1D,GACAA,EAAAloF,SAEAmB,EAAA+D,KAAA,8KACA8xI,cAAAC,qBAAA0G,wBAAA1+I,IAAAiC,IAAA0jB,QAAArkB,GAAAq9I,mBAAA9F,kBAGA1tC,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA0jF,8BAGA,IAAA5+I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,WACA,OAAA/F,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2jF,iCAAA7+I,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA2jF,iCAAA,aAEAlrF,UAAA,GACA/mC,KAAA,iBACAqsH,SAAA,WACA,OAAAj5I,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4jF,uCAEA5tE,QAAA,mBACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,sBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,EAAA8D,GACA,GAAAhG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4jF,sCAAA,CACA,IAAAC,EAAA/+I,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBACA1kB,IAAAiC,IAAA0jB,QAAAs9E,yBAAA87C,EAAA58I,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAy9E,yBAAA27C,EAAA58I,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAq5H,kCAAA78I,EAAAgC,KAAA,WACA,IAAAnE,IAAAkG,MAAAg/B,SAAA+5G,iBAAA98I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA01H,qBAAAl5I,EAAAk5I,sBACAl5I,KACAxB,QACAA,QACAA,WACA,CAEA,MAAAlE,OAAA6+I,QACA7+I,OAAA6+I,MAAAx5I,OAAA,WACArF,OAAA6+I,MAAA,MAEA7+I,OAAA8+I,UAAA,KACA9+I,OAAA++I,gBAAA,GACA/+I,OAAAg/I,gBAAA,KACAh/I,OAAAi/I,cAAA,EAEAj/I,OAAA+f,UAAAhc,OAAA,qBAAAu4D,SAAA,CACA4iF,UAAA,EACAC,SAAA,EACAC,WAAA,SAAAC,EAAAC,GACA,IAAA,IAAAz+I,EAAA,EAAAy+I,EAAAz+I,GAAAA,IAAA,CACA,IAAAi4C,EAAA50C,KAAAo7I,UAAAz+I,GAAAi4C,QAIA50C,KAAAq7I,UAAAzmG,GAAAr4C,SAEAyD,KAAAs7I,qBAEAC,eAAA,SAAAjnI,EAAAsgC,GACAtgC,EAAA7S,KAAA,SAAA6S,EAAA6nD,QACA,UAAAvnB,EAAAt0C,KAAA,YAAAs0C,EAAA98B,SAAA,2BACAxD,EAAArT,SAAA2zC,EAAApxC,SAAAA,UAEA8Q,EAAArT,SAAA2zC,EAAApxC,WAEAg4I,WAAA,gBACAC,OAAA,wBAIA,IAAAh3D,EAAA,IAAAjpF,IAAAigE,OAAA/9D,GACAquC,EAAA,SAAAvqC,GACArE,EAAA,cAAAZ,SAEA,IAAAm/I,EAAAv+I,EAAA,UAAA,CACAL,GAAA,gBAEAY,EAAA+D,KAAAi6I,GACAlgJ,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAa,iBAAA,MAAA,CAAAwN,aAAA,IAAA0wG,EAAA,GAAA,WAEA,IAAAC,EAAAx+I,EAAA,UAAA,CACAL,GAAA,oBACA6d,MAAA,WAEAjd,EAAAoD,OAAA66I,GACAngJ,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAa,iBAAA,mBAAA,CAAAwN,aAAA,IAAA2wG,EAAA,GAAA,WACAC,QAAA,KACAC,mCACAC,kBAAAC,eAAAp+I,EAAAgC,KAAA,WACA6B,EAAAw6I,qBACAC,yBAAAz6I,EAAAw6I,sBACAx6I,EAAAk5I,qBACAwB,eAAA16I,EAAAk5I,sBACAl5I,EAAA26I,yBACAC,kBAAA56I,EAAA26I,uBACAE,eAAA,iBAAA,wDAAA,gBAAA,4BAEAr8I,OACA07I,EAAA7jI,KAAA,oBAAAvX,KAAA,KAAA,kBAAA0Z,YAAA,eAMA,MAAAle,OAAAgoD,UAAA,MAAAhoD,OAAAgoD,SAAAw4F,mBAAA,MAAAxgJ,OAAAkpB,SAAAlpB,OAAAgoD,SAAAj4B,YAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GACAtB,IAAAunE,IAAAqwE,4BAAA,WACArnG,EAAAvqC,GACA,MAAAijF,GACAA,EAAAloF,YAIAwvC,EAAAvqC,GACA,MAAAijF,GACAA,EAAAloF,YAKAoqG,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4jF,wCAIA,YAAA9+I,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA6lF,wCAGA,IAAA/gJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,eACAyE,MAAA,WACA,OAAA/F,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2jF,iCAAA7+I,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA2jF,iCAAA,aAEAlrF,UAAA,GACA/mC,KAAA,iBACAskD,QAAA,mBACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,sBAEA11B,KAAA,SAAA1pC,GACA,MAAA,YAAAhG,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,iBAAAtJ,GAAAA,EAAAw6I,qBAAA,IAAAx6I,EAAAw6I,qBAAA,KAEAjwG,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA0jB,QAAAs9E,yBAAAjjG,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAAviB,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAy9E,yBAAApjG,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAAviB,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAq5H,kCAAA78I,EAAAgC,KAAA,WACA,IAAAnE,IAAAkG,MAAAg/B,SAAA+5G,iBAAA98I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA01H,qBAAAl5I,EAAAk5I,sBACAl5I,KACAxB,QACAA,QACAA,QAEA2mG,WAAA,WACA,QAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4jF,wCAGA,YAAA9+I,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA8lF,mCAGA,IAAAhhJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,mBACAyE,MAAA,mBACA4tD,UAAA,GACA/mC,KAAA,kBACAskD,QAAA,mBACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,6BAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,qBAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAg/B,SAAA+7G,aAAA,CACAhoG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA03H,cAAAl7I,EAAAm7I,kBACA9oH,KAAAryB,EAAAqyB,KAAAryB,EAAAqyB,KAAA,WAGA8yE,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,OAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,MAAA,OAAA1+C,IAAAiC,IAAA0jB,QAAA0D,SACArpB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkmF,qCAGA,IAAAphJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,yBACAskD,QAAA,WACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBAEA11B,KAAA,SAAA1pC,GACA,OAAAA,GAAA,EAAAA,EAAAisE,QACA,YAAAjyE,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAAAtJ,EAAAisE,QAAA3iE,WAEA,YAAAtP,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAAo/I,cAAA,IAAArhJ,IAAAkG,MAAAib,SAAAmgI,sBAAAn/I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA0oC,WAAA,IAAAlyD,IAAAk3C,YAAA/1B,SAAAogI,cAAA,IACAC,eAAAx7I,EAAAy7I,WACAC,YAAA17I,EAAAisE,SACAjsE,KAEAmlG,WAAA,WACA,IAAAlwC,EAAAj7D,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAymF,mBACA3hJ,IAAAiC,IAAA0jB,QAAAi7B,kBACA,MAAA,YAAA5gD,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YAAAu2C,IAAAj7D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,mBAAAk9H,qBAGA,IAAA5hJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,yBACA0sC,SAAA,EACAggF,UAAA,EACA5pG,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEA81D,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBAEA70B,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAib,SAAA0gI,iBAAA,CACA5oG,GAAA/2C,EACA6wC,MAAA,IAAA/yC,IAAAwkB,OAAArD,SAAA2gI,OAAA,CACAjkD,UAAA79F,IAAAiC,IAAA0jB,QAAA0D,QAAA/nB,QAIA6pG,WAAA,WACA,GAAA,MAAAnrG,IAAAiC,IAAA0jB,QAAA0D,QACA,OAAA,EAEA,IAAAkxH,EAAA/1I,KAAAg2I,aACA,GAAA,MAAAD,GAAA,MAAAA,EAAApvC,WACA,OAAAovC,EAAApvC,WAGA,IAAAlwC,EAAAj7D,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAymF,mBACA3hJ,IAAAiC,IAAA0jB,QAAAi7B,mBAAA,IAAA5gD,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA,MAAA,YAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACAu2C,IACAj7D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,mBAAAk9H,mBACA,MAAA5hJ,IAAAiC,IAAA0jB,QAAA0D,WAGA,IAAArpB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,kBACAyE,MAAA,mBACA4tD,UAAA,GACA/mC,KAAA,iBACA0sC,SAAA,EACAggF,UAAA,EACAH,oCAAA,EACA/zE,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,4BAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA8/I,0BAAA,IAAA/hJ,IAAAkG,MAAAo1B,gBAAA0mH,0BAAA7/I,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+mF,6BAGA,IAAAjiJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,mBACAyE,MAAA,YACA4tD,UAAA,GACA/mC,KAAA,iBACAskD,QAAA,qBACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,EAAA8D,GAEA,IAAAijF,EAAA,IAAAjpF,IAAAigE,OAAA/9D,GACAquC,EAAA,WACA,IAAA4vG,EAAAx+I,EAAA,UAAA,CACAL,GAAA,sBAEAY,EAAAoD,OAAA66I,GACAngJ,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAa,iBAAA,mBAAA,CAAAwN,aAAA,IAAA2wG,EAAA,GAAA,WACA7/I,OAAA4hJ,QAAA,KACAC,mDAGA,MAAA7hJ,OAAAgoD,SACAtoD,IAAAunE,IAAAqwE,4BAAA,WACArnG,IAEA,MAAA04C,GACAA,EAAAloF,YAIAwvC,IACA,MAAA04C,GACAA,EAAAloF,WAIAoqG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2gF,0BAGA,IAAA77I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,GACA/mC,KAAA,WACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAmjH,SAAA+4B,UAAA,CACAnpG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA8wC,WAAA,YAAAt6D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,UACA29H,YAAAr8I,KAGAmlG,WAAA,WACA,IAAAmzC,EAAAt+I,IAAAiC,IAAA0jB,QAAA6D,QACA,MAAA,QAAA80H,EAAA55H,IAAA,WACA45H,EAAAtjF,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAonF,oBACAhE,EAAA55H,IAAA,iBAAA,MAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,MAAA4/F,EAAA55H,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,oBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,cACA4tD,UAAA,IACA/mC,KAAA,eACAskD,QAAA,qBACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,gBAEAihC,OAAA,SAAAruC,GACA,IAAAlC,IAAAkG,MAAAg/B,SAAAsuC,YAAA,CACAv6B,GAAA/2C,EACAqgJ,oBAAAviJ,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAsnF,oCACAh5H,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACA8wC,WAAA,YAAAt6D,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGAymF,WAAA,WACA,MAAA,QAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAunF,gCAGA,IAAAziJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,gBACAyE,MAAA,gBACA4tD,UAAA,IACA/mC,KAAA,YACAskD,QAAA,gBACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,yBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,WAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAAygJ,oBAAA,IAAA1iJ,IAAAkG,MAAA0iE,OAAA+5E,aAAAxgJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA0nF,2BAGA,IAAA5iJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,WACAyE,MAAA,WACA4tD,UAAA,IACA/mC,KAAA,kBACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAikC,SAAA04G,aAAA,CACA5pG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACAs5H,UAAA98I,EAAA88I,aAGA33C,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,kBACAyE,MAAA,WACAi/D,SAAAhlE,IAAA+Q,UAAA6kB,WAAAC,WAAAC,YACA69B,UAAA,IACA/mC,KAAA,mBACAskD,QAAA,WACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,aAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA+mC,SAAA81G,kBAAA,CACA9pG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACAupB,MAAA/sC,EAAA+sC,MACAiwG,WAAAh9I,EAAAqgF,OACA48D,gBAAAj9I,EAAAk9I,YACAC,SAAAn9I,EAAAm9I,YAGAh4C,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAkoF,uBAGA,IAAApjJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,MACAyE,MAAA,MACA4tD,UAAA,IACA/mC,KAAA,cACAskD,QAAA,MACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,gBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,QAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA0jB,QAAA6D,QAAA65H,iBAAAlhJ,EAAAgC,KAAA,SAAAmkD,GACAtoD,IAAAiC,IAAAqhJ,cAAA,IAAAtjJ,IAAAkG,MAAAglC,IAAAo4G,cAAAnhJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAomD,SAAAA,EACA9+B,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KACAxB,QAEA2mG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqoF,cACA,OAAAvjJ,IAAAiC,IAAA0jB,QAAA+4B,MAAA,OAAA1+C,IAAAiC,IAAA0jB,QAAA0D,WAGA,IAAArpB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,aACAyE,MAAA,aACA4tD,UAAA,IACA/mC,KAAA,uBACAskD,QAAA,aACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,uBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,eAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA2lC,WAAA23G,eAAA,CACAvqG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACAi6H,gBAAAz9I,EAAA09I,eAGAv4C,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,eACAyE,MAAA,gBACA4tD,UAAA,IACA/mC,KAAA,kBACAskD,QAAA,eACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,yBAEA11B,KAAA,SAAA1pC,GACA,IAAArB,EAAA,YAAA3E,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAA,gBAIA,OAHA,MAAA0E,GAAA,MAAAA,EAAAa,OACAlC,GAAA,IAAA3E,IAAAC,QAAAwH,YAAAC,cAAA1B,EAAAa,KAAA7G,IAAAC,QAAAwH,YAAAE,YAAAoB,WAEApE,GAEA4rC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA0hJ,uBAAA,IAAA3jJ,IAAAkG,MAAAijC,aAAAy6G,sBAAAzhJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA2oF,0BAGA,IAAA7jJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,mBACAyE,MAAA,aACA4tD,UAAA,IACA/mC,KAAA,gBACA0sH,UAAA,EACAl0E,cAAA,WAEA,OACA,MAAAplE,IAAAiC,IAAA0jB,QAAA0D,SAAArpB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBACAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,sBAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,qBAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,yBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,GACA,IAAAmnB,EAAA,KAEAA,EADA,OAAArpB,IAAAiC,IAAA0jB,QAAA0D,SAAArpB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,sBAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBACA,KACAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,qBACAplE,IAAAiC,IAAA0jB,QAAA+4B,KAEA1+C,IAAAiC,IAAA0jB,QAAA0D,QAEA,IAAArpB,IAAAkG,MAAA82I,UAAAC,aAAA,CACAhkG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,QACAH,QAAAA,OAIA,IAAArpB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,aACAyE,MAAA,aACA4tD,UAAA,IACA/mC,KAAA,qBACAskD,QAAA,YACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,sBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,eAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA6hJ,cAAA,IAAA9jJ,IAAAkG,MAAA+kC,WAAA64G,cAAA3hJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,eACA4tD,UAAA,IACA/mC,KAAA,qBACAskD,QAAA,cACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,gBAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAA8hJ,gBAAA,IAAA/jJ,IAAAkG,MAAA+hC,YAAA+7G,eAAA7hJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,UACA4tD,UAAA,IACA/mC,KAAA,eACAskD,QAAA,iBACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,oBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,YAEAihC,OAAA,SAAAruC,EAAA8D,GAEA,IAAAuqC,EAAA,WACAvwC,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAA,IAAAxwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAa,iBAAA,iBAAA,CAAAwN,aAAA,IAAAttC,EAAA,GAAA,WACA+hJ,8CACAC,wBAGA,MAAA5jJ,OAAAgoD,UAAAhoD,OAAAgoD,SAAAj4B,YAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GACAtB,IAAAunE,IAAAqwE,4BAAA,WACArnG,MAGAA,KAGA46D,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,sBACAyE,MAAA,iBACA4tD,UAAA,IACA/mC,KAAA,eACAskD,QAAA,iBACA5X,SAAA,EACAggF,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,oBAEA11B,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,iBAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAAu7I,WAAA,IAAAx9I,IAAAkG,MAAAijF,UAAAs0D,cAAA,CACAxkG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,WAGA2hF,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAwiF,sBAAA,IAAA16I,OAAA,eAAAxC,KAAAF,OAAA4C,SAAAslB,SAGA,IAAAxoB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,WACA,IAAAqJ,EAAApP,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAipF,+BAGA,OAFA,IAAA/0I,EAAA5I,QAAA,OACA4I,EAAAA,EAAA/I,UAAA,EAAA+I,EAAA5I,QAAA,OACA4I,GAEAukD,UAAA,IACA/mC,KAAA,UACA0sC,SAAA,EACArb,MAAA,WAEA,IAAAj+C,IAAAkG,MAAAg/B,SAAAk/G,WAAAjiJ,EAAAupB,SAAA,CACAlC,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SAFA,MAKA2hF,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAipF,kCAGA,IAAAnkJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,aACA4tD,UAAA,IACA/mC,KAAA,wBACAskD,QAAA,SACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,mBAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAEAihC,OAAA,SAAAruC,EAAA8D,GACAxB,KAAA6/I,iBAAA,IAAArkJ,IAAAkG,MAAAo+I,OAAAC,wBAAA,CACAtrG,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,WAGA2hF,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,SACAyE,MAAA,SACA4tD,UAAA,IACA/mC,KAAA,qBACAskD,QAAA,SACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,mBAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,WAEAihC,OAAA,SAAAruC,EAAA8D,GACAhG,IAAAiC,IAAAuiJ,WAAA,IAAAxkJ,IAAAkG,MAAAo+I,OAAAG,cAAAtiJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,OAGA,IAAAhG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,YACA4tD,UAAA,IACA/mC,KAAA,eACAskD,QAAA,iBACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,2BAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,SAAA1pC,GACA,OAAAA,EACA,YAAAhG,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAAAtJ,EAAAqyB,KAEA,YAAAr4B,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAGAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAowB,eAAAouH,wBAAAviJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,OAGA,IAAAhG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,cACA4tD,UAAA,IACA/mC,KAAA,gBACAskD,QAAA,SACAooE,UAAA,EACAK,eAAA,EACAv0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,SAAA1pC,GACA,OAAAA,EACA,YAAAhG,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,gBAAAtJ,EAAAqyB,KAEA,YAAAr4B,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,gBAGAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAizB,YAAAwrH,qBAAAxiJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,OAGA,IAAAhG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,kBACA4tD,UAAA,IACA/mC,KAAA,yBACAskD,QAAA,iBACAooE,UAAA,EACAK,eAAA,EACAv0E,cAAA,WACA,OAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,OACA1+C,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,2BAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,gCAEA11B,KAAA,SAAA1pC,GACA,OAAAA,EACA,YAAAhG,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,mBAAAtJ,EAAAqyB,KAEA,YAAAr4B,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,mBAGAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA03B,eAAAgnH,mBAAAziJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,KAEAmlG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,eACA4tD,UAAA,IACA/mC,KAAA,0BACAskD,QAAA,SACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,WACA,MAAA,YAAA1vC,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,gBAEAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAAy0B,YAAAkqH,mBAAA1iJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,OAGA,IAAAhG,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,YACAyE,MAAA,YACA4tD,UAAA,IACA/mC,KAAA,yBACAskD,QAAA,YACAooE,UAAA,EACAl0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,4BAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,gCAAA,MAAAplE,IAAAiC,IAAA0jB,QAAA+4B,MAEAhP,KAAA,SAAA1pC,GACA,OAAAA,EACA,YAAAhG,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAAAtJ,EAAAqyB,KAEA,YAAAr4B,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GAAAgO,WAAA,cAGAihC,OAAA,SAAAruC,EAAA8D,GACA,IAAAhG,IAAAkG,MAAA4zB,UAAAgrH,oBAAA3iJ,EAAAupB,SAAA,CACAutB,GAAA/2C,EACAsnB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SACAxjB,QAGA,CACA++I,WAAA,IAEAC,eAAA,IAAAhlJ,IAAAunE,IAAAuzE,aAAA,CACA,IAAA96I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,eACAyE,MAAA,gBACA4tD,UAAA,IACA/mC,KAAA,WACA0sC,SAAA,EACAigF,uBAAA,EACAt7F,MAAA,WACA,IAAAgnG,EAAA,IAAAjlJ,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,gBACAovB,KAAA,0DACA49B,MAAA,WACA,IAAAx3E,IAAAigE,OAAAglF,EAAAtjJ,EAAA,mBACA3B,IAAAiC,IAAA0jB,QAAA6D,QAAAkqB,MAAA,SAAAwxG,GACAD,EAAAlkJ,SACAf,IAAAmhC,QAAAgkH,YAAAC,qBAAAF,EAAA5jJ,GAAA,aACAtB,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sCAMA46E,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAu4B,eAAAl+C,IAAAiC,IAAA0jB,QAAAjB,IAAA,iBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,gBACAyE,MAAA,iBACA4tD,UAAA,IACA/mC,KAAA,UACA0sC,SAAA,EACAigF,uBAAA,EACAt7F,MAAA,WACA,IAAAj+C,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA,IAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CACAjkE,GAAAtB,IAAAiC,IAAA0jB,QAAA0D,QAAA/nB,GACA+uB,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,KAEA+/F,MAAA,gFACA1jC,OAAA,WACA,IAAA39D,IAAAkG,MAAAuqB,KAAA+6C,UAAA,CACAqyB,UAAA79F,IAAAiC,IAAA0jB,QAAA0D,QAAA/nB,GACA0rE,KAAA,EAAAhtE,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,UAAA,UAAA,UACAw2B,mBAAA,QAKAiwD,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAu4B,cAAA,MAAAl+C,IAAAiC,IAAA0jB,QAAA0D,aAIAg8H,YAAA,IAAArlJ,IAAAunE,IAAAuzE,aAAA,CACA,IAAA96I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,eACA4tD,UAAA,IACA/mC,KAAA,WACA0sC,SAAA,EACAigF,uBAAA,EACAn0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,iBAEAnnB,MAAA,WACA,IAAAqnG,EAAA,IAAAtlJ,IAAAkG,MAAAs5D,OAAA+X,MAAA,CACA/sD,OAAA,eACAovB,KAAA,8CACA49B,MAAA,WACA,IAAAx3E,IAAAigE,OAAAqlF,EAAA3jJ,EAAA,mBACA3B,IAAAiC,IAAA0jB,QAAA6D,QAAAsiG,KAAA,SAAAo5B,GACAI,EAAAvkJ,SACAf,IAAAmhC,QAAAgkH,YAAAC,qBAAAF,EAAA5jJ,GAAA,aACAtB,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sCAMA46E,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAAwxC,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAqqF,wBAGA,IAAAvlJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,eACA4tD,UAAA,IACA/mC,KAAA,mBACA0sC,SAAA,EACA8L,cAAA,WACA,OAAA,GAEAnnB,MAAA,WACA,IAAAj+C,IAAAkG,MAAAkhC,MAAAo+G,iBAAA,CACAx4E,KAAAhtE,IAAA+Q,UAAAq2B,MAAAC,MAAAE,UACA/d,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,WAGA2hF,WAAA,WACA,OAAAnrG,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAuqF,wBAGA,IAAAzlJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,kBACAyE,MAAA,wBACA4tD,UAAA,IACA2F,SAAA,EACA8/E,UAAA,iDACAh0E,cAAA,WACA,OAAAplE,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAEAnnB,MAAA,WACA,IAAAj+C,IAAAkG,MAAAg/B,SAAAwgH,qBAAA,CACAl8H,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,WAGA2hF,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyqF,4BAEAnM,YAAA,oTAEA,IAAAx5I,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,iBACAyE,MAAA,qBACA4tD,UAAA,IACA2F,SAAA,EACA8/E,UAAA,6CACAn7F,MAAA,WACA,IAAAgrC,EAAA,IAAAjpF,IAAAigE,OAAAt+D,EAAA,iBACA,IAAA3B,IAAAyD,KAAAC,QAAA,CACAC,SAAA,yBACA+gB,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAC,GACA,MAAA6kF,GACAA,EAAAloF,SAGA,IAAAi0G,EAAA,SAAA5wG,EAAAwhJ,GACA,IAAA5lJ,IAAAkG,MAAAg/B,SAAA2gH,oBAAA,CACAv9F,SAAAlkD,EACAwhJ,qBAAAA,KAIA,GAAA5lJ,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4qF,qCAAA,CACA,IAAAC,EAAA,GAAA5S,EAAA,GAAAv5E,EAAA7yD,SAAA/G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA4qF,sCAEA3jJ,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA6D,QAAA6a,aAAA7f,OAAA,SAAA6iD,GACAA,EAAA3iD,IAAA,OAAAk1C,IACAmsF,EAAA1+E,EAAA3iD,IAAA,gBAGAviB,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA6D,QAAAsoB,WAAAzN,aAAA,SAAA2hH,GACAA,EAAA1kJ,IAAAs4D,IACAu5E,EAAA6S,EAAAliJ,SAGA,GAAA3B,EAAAC,KAAA+wI,GAEAnzI,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAAw1H,EAAA,oDAIA/wC,EAAA5wG,EAAA+uI,QAIAn+B,EAAA5wG,IAEAI,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,GACApP,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,0CAEA/rB,QAEA2mG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+qF,qBACAjmJ,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAgrF,+BACA,EAAA/jJ,EAAAC,KAAApC,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,yBAGA,IAAA1kB,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,cACAyE,MAAA,kBACA4tD,UAAA,IACA2F,SAAA,EACA8/E,UAAA,6CACAn7F,MAAA,WACA,IAAAr5C,EAAA5E,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,qBAAAre,UAAA,GACA,IAAArG,IAAAkG,MAAAyzC,UAAA,CACAnvB,OAAA,kBACAovB,KAAA,oCAAAh1C,EAAA,iGAGAumG,WAAA,WACA,MAAA,YAAAnrG,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,WACA,QAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,YACA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA+qF,qBACAjmJ,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAgrF,+BACA,IAAA/jJ,EAAAC,KAAApC,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,wBAAA1kB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,qBAAAyhI,WAAA,kBAMAnmJ,IAAAkG,MAAAqhE,IAAA,GACAvnE,IAAAkG,MAAAqhE,IAAAC,aAAAxnE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACAsW,aAAA,CACAuuG,SAAA,IAAApmJ,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,0BACA8kH,cAAA,IAAArmJ,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kCAEAy5G,WAAA,GACA1hF,SAAA,GAEArhB,OAAA,CACAquG,kBAAA,WACAC,oBAAA,YACAC,wBAAA,aAEA3zG,WAAA,WACA,MAAA7yC,IAAAiC,IAAA+D,QAAAygJ,gBACAzmJ,IAAAiC,IAAA+D,QAAAygJ,cAAA,IAAAnmJ,OAAAomJ,YAEAliJ,KAAAtC,IAAAye,OAEAgmI,UAAA,SAAA9kJ,GACA,IAAA+kJ,EAAApiJ,KAAA7C,EAAA,kBACAilJ,EAAAn2F,YAAA,YACAzwD,IAAAiC,IAAA+D,QAAAygJ,cAAAG,EAAAtqI,SAAA,aAEAg8B,kBAAA,WACA9zC,KAAAqiJ,8BACAriJ,KAAAsiJ,4BAEAD,4BAAA,WACA,IAAArqG,EAAA76C,EAAA,gBACA,GAAA,EAAAQ,EAAAC,KAAAo6C,IAAA,IAAAr6C,EAAAC,KAAAT,EAAA,oBAAA,CACA,IAAAolJ,EAAAvqG,EAAAn6C,IAAA,oBACA2kJ,EAAA,EAAA7kJ,EAAAC,KAAA2kJ,GAAA/mJ,IAAAC,QAAA4sB,aAAAa,4BAAA1tB,IAAAC,QAAA4sB,aAAAC,cAAAi6H,IAAA,OACAE,EAAAtlJ,EAAA,mBAAAqlJ,EAAA,yDACAxqG,EAAAtL,QAAA+1G,GACAA,EAAA3pI,GAAA,QAAAnb,EAAAgC,KAAAK,KAAAmiJ,UAAAniJ,SAGAsiJ,yBAAA,WACA,GAAA,MAAA9mJ,IAAAiC,IAAA0jB,QAAA+4B,OAAA1+C,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAA+Q,UAAAqjB,gBAAA,CACAzyB,EAAA,sBAAAZ,SACAY,EAAA,eAAAZ,SAEA,IAAAy7C,EAAA76C,EAAA,gBACAulJ,EAAAlnJ,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,gBAAA,MAAA1kB,IAAAiC,IAAA0jB,QAAAm9C,aAAAqkF,iBAAAnnJ,IAAAiC,IAAA0jB,QAAAm9C,aAAAqkF,gBAAA7lJ,KAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAAs5B,KACAkkF,EAAAzlJ,EAAA,0CAAA3B,IAAAC,QAAAkZ,cAAAI,6BAAAvZ,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,QAAAtd,gBAAA8/I,EAAA,SAAA,IAAA,WAEA,GADA1qG,EAAAl3C,OAAA8hJ,GACAF,EAAA,CACA,IAAAv1I,EAAA3R,IAAAC,QAAAwH,YAAAkN,YAAA,IAAA7N,KAAA9G,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,mBAAA,IAAA5d,KAAA,QAAA,EACAugJ,EAAA1lJ,EAAA,yBAAAgQ,EAAArC,WAAA,uBACA83I,EAAA9hJ,OAAA+hJ,GAEA,GAAArnJ,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA,EAAA1kB,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,kBAAA,CACA,IAAA4iI,EAAA3lJ,EAAA,oLACA66C,EAAAl3C,OAAAgiJ,GACA3lJ,EAAA,mBAAA2b,GAAA,QAAAnb,EAAAgC,KAAA,WACAK,KAAA+iJ,aACA/iJ,UAIAi0C,aAAA,WACA,GAAA,MAAAj0C,KAAAwB,QAAAs9D,WAAA,CAEA,OADA,MAAAtjE,IAAAunE,IAAAyzE,WAAAC,KAAA,KAAA94I,EAAAo0C,UAAAv2C,IAAAunE,IAAAyzE,WAAAC,KAAA7oF,MAAA,CAAA9wD,GAAAkD,KAAAwB,QAAAs9D,gBAIAtjE,IAAAiC,IAAA0jB,QAAA6D,QAAA,UAEA,CAEA,IAAAg+H,EAAArlJ,EAAAka,KAAArc,IAAAunE,IAAAyzE,WAAAC,KAAA7oF,MAAA,SAAA9I,GACA,OAAAA,EAAAwwF,iBAAAxwF,EAAA8b,iBAAA9b,EAAA7K,eAEA,MAAA+oG,IACAhjJ,KAAAwB,QAAAs9D,WAAAkkF,EAAAlmJ,IAIAkD,KAAAk6C,KAAA1+C,IAAAiC,IAAA0jB,QAAA+4B,KACAl6C,KAAAglB,QAAAxpB,IAAAiC,IAAA0jB,QAAA6D,SAEAgvB,WAAA,WACA,MAAA,CACAhvB,QAAAhlB,KAAAglB,QACAskC,QAAAtpD,KAAAwB,QAAA8nD,QACA25F,WAAAznJ,IAAAiC,IAAA+D,QAAAygJ,gBAGA1tG,YAAA,WA0BA,GAxBAp3C,EAAA,kBAAAZ,SAEAyD,KAAAkjJ,oBACA1nJ,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAysF,6BACAhmJ,EAAA,kBAAA2D,OAAA,8GAGAd,KAAA7C,EAAA,mBAAA2b,GAAA,SAAAnb,EAAAgC,KAAA,WACA,IAAAK,KAAA7C,EAAA,mBAAA,GAAA0sB,UACA1sB,EAAA,eAAAimJ,OAAA,KAGAjmJ,EAAA,eAAAkmJ,QAAA,MAEArjJ,QAGAA,KAAAsjJ,cAAAtjJ,KAAAwB,QAAAs9D,YACA9+D,KAAAwB,QAAAs9D,WAAA,KAEA9+D,KAAAujJ,iBACAvjJ,KAAAghD,eACAhhD,KAAAwjJ,kBAAA,GAEA,MAAAhoJ,IAAAiC,IAAA0jB,QAAA+4B,OAAA1+C,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,cAAA1kB,IAAA+Q,UAAAqjB,gBAAA,CACA,IAAA6zH,EAAAjoJ,IAAA+Q,UAAA+qB,QAAAW,wBAAA,IAAAz8B,IAAAiC,IAAA0jB,QAAA+4B,KAAAp9C,GAAAgO,WACA,MAAAtP,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,mBAAA1kB,IAAAC,QAAA0qB,cAAAC,UAAAq9H,IAOAzjJ,KAAAwB,QAAAkiJ,cAAAloJ,IAAAiC,IAAAkmJ,UAAAnoJ,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,aAAA,EAAA1kB,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,oBACA1kB,IAAAiC,IAAAkmJ,SAAA,EACAnoJ,IAAAC,QAAA0lE,MAAAC,YAGA,IAAAwiF,EAAApoJ,IAAA+Q,UAAA+qB,QAAAY,2BAAA,IAAA18B,IAAAiC,IAAA0jB,QAAA+4B,KAAAp9C,GAAAgO,WACA,GAAA,MAAAtP,IAAAiC,IAAA0jB,QAAAm9C,aAAAqkF,kBAAAnnJ,IAAAC,QAAA0qB,cAAAC,UAAAw9H,GAAA,CACA,IAAAC,EAAAroJ,IAAAC,QAAAwH,YAAAkN,YAAA,IAAA7N,KAAA9G,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,cAAA,IAAA5d,KAAA,QAAA,EACA,GAAAuhJ,GAAA,IAAA,EAAAA,EAAA,CACA,IAAAC,EACAC,EAAAvoJ,IAAAiC,IAAA0jB,QAAAm9C,aAAAqkF,gBAAA7lJ,KAAAtB,IAAA+Q,UAAAkyD,cAAAr5B,MAAAs5B,KACA,GAAAqlF,EAEAD,EAAA,2CAAAD,EAAA/4I,YAAA,IAAA+4I,EAAA,OAAA,SAAA,mIAIAC,EAAA,SADAtoJ,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,eACA,aAAA,gBAAA,mBAAA2jI,EAAA/4I,YAAA,IAAA+4I,EAAA,OAAA,SAAA,8HAEA,IAAAroJ,IAAAygE,MAAAj8D,KAAA7C,EAAA,gBAAA,CACA4D,KAAA,iBACAo7D,KAAA2nF,EACA1nF,WAAA,EACA71C,OAAAq9H,EACArnF,qBAAA,IAAAsnF,EAAA,EAAAA,GAAAE,EAAA,IAAA,MAKAvoJ,IAAAiC,IAAA0jB,QAAA0D,SAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,mBAAA1kB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,uBACA,IAAA1kB,IAAAkG,MAAAyzC,UAAA,CACAnvB,OAAA,iCACAovB,KAAA,oLACAU,uBAAA,EACAL,aAAA,qBACAM,oBAAA,SACAK,KAAAz4C,EAAAgC,KAAA,WACA7D,OAAA4C,SAAAslB,KAAA,oCAAAxoB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,cAAA,cACAlgB,UAKA+iJ,UAAA,WACA,IAAAvnJ,IAAAkG,MAAAy/D,MAAA6iF,uBAEAd,kBAAA,WACA,IAAAe,EAAA,GAAA,MAAAjkJ,KAAAglB,QAIA,GAHAhlB,KAAAkkJ,iBAAA,IACAD,EAAAjkJ,KAAAkkJ,kBAAA9lI,KAAAS,MAAAolI,EAAAp0G,mBAAAr0C,IAAAunE,IAAAyzE,WAAAxxH,QAAA4oC,QAEA5tD,KAAAglB,QAAA9E,IAAA,kBAAA1kB,IAAAiC,IAAA0jB,QAAAjB,IAAA,gBAAA,CAAA,IAAAikI,GACAA,EAAAnkJ,KAAAkkJ,kBAAA9lI,KAAAS,MAAAslI,EAAAt0G,mBAAAr0C,IAAAunE,IAAAyzE,WAAAqK,YAAAjzF,YACA,CAAA,IAAAw2F,EACA,GAAA,MAAApkJ,KAAAglB,QAAAq/H,iBAAA,CACA,IAAAvsD,EAAAt8F,IAAAiC,IAAA0jB,QAAA0D,QAAArpB,IAAAiC,IAAA0jB,QAAA0D,QAAA3E,IAAA,cAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAA1+C,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,cAAA,KACAujB,EAAA9lC,EAAA2uC,OAAAtsC,KAAAglB,QAAAq/H,iBAAArkI,OAAA,SAAA8kC,GACA,OAAA,EAAAnnD,EAAAC,KAAAknD,EAAA5kC,IAAA,sBAAA,kBAAA4kC,EAAA5kC,IAAA,mBAAAtd,iBAAAkiD,EAAA5kC,IAAA,eAAA4kC,EAAA5kC,IAAA,gBAAA43E,KAGA3oC,EAAA,IACAxxD,EAAAuhB,KAAAukB,EAAA,SAAAqhB,EAAAvhD,GACA,IAAA+gJ,EAAA,IAAA9oJ,IAAAunE,IAAAuxE,QAAA,CACAx3I,GAAA,OAAAgoD,EAAAhoD,GAAAgO,WACAvJ,MAAAujD,EAAA5kC,IAAA,oBACAivC,UAAAA,EACA/mC,KAAA,WACA0sC,SAAA,EACAigF,sBAAA,IAAAxxI,EACAk2C,MAAA97C,EAAAgC,KAAA,WACA,IAAAnE,IAAAkG,MAAAg/B,SAAA6jH,iBAAA,CACAv/H,QAAAhlB,KAAAglB,QACAw/H,kBAAA1/F,EAAAhoD,MAEAkD,QAEAA,KAAAkkJ,iBAAA9lI,KAAAkmI,GAEAn1F,GAAA,IACAnvD,OAEAokJ,EAAApkJ,KAAAkkJ,kBAAA9lI,KAAAS,MAAAulI,EAAAv0G,mBAAAr0C,IAAAunE,IAAAyzE,WAAAgK,eAAA5yF,UAIA++C,gBAAA,WACA3sG,KAAAkjJ,oBACAljJ,KAAAujJ,kBAEAA,eAAA,WACAvjJ,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAuuG,SAAA5hJ,KAAA7C,EAAA,2BAAA,CACA6nB,QAAAhlB,KAAAglB,QACAk/H,iBAAAlkJ,KAAAkkJ,iBACAplF,WAAA9+D,KAAA8+D,WACAxV,QAAAtpD,KAAAwB,QAAA8nD,QAAAtpD,KAAAwB,QAAA8nD,QAAA,MAGAg6F,cAAA,SAAAxmJ,GACA,IAAA8N,EAAA,MAAApP,IAAAunE,IAAAyzE,WAAAC,KAAA,KAAA94I,EAAAo0C,UAAAv2C,IAAAunE,IAAAyzE,WAAAC,KAAA7oF,MAAA,CAAA9wD,GAAAA,IAmBA,GAlBA,MAAA8N,GACApP,IAAAiC,IAAA0jB,QAAA6D,QAAA,KACAhlB,KAAAglB,QAAA,KACApa,EAAAkqI,WACA90I,KAAA8+D,WAAAl0D,IAEA,MAAA5K,KAAAglB,QAEA,OADApa,EAAAjN,EAAAo0C,UAAA/xC,KAAAkkJ,iBAAA,CAAApnJ,GAAAA,MAEA8N,EAAAkqI,WACA90I,KAAA8+D,WAAAl0D,GAIA5K,KAAA8+D,WAAA,KAIAtjE,IAAAiC,IAAA0jB,QAAA6D,UACA,MAAAhlB,KAAA8+D,YAAA9+D,KAAA8+D,WAAAw2E,iBACA,GAAA,MAAAt1I,KAAAglB,QAAA,CACA,IAAAy/H,EAAAjpJ,IAAAiC,IAAA0jB,QAAAjB,IAAA,kBAAAlgB,KAAAglB,QAAA9E,IAAA,gBACAlgB,KAAA8+D,WAAAnhE,EAAAka,KAAArc,IAAAunE,IAAAyzE,WAAAxxH,QAAA4oC,MAAA,SAAA9I,GACA,OAAAA,EAAA7K,cAAA6K,EAAA8b,kBAAA9b,EAAAwwF,kBAAA,MAAAxwF,EAAA4/F,cAAAD,IAAA3/F,EAAA4/F,qBAGA1kJ,KAAA8+D,WAAAnhE,EAAAka,KAAArc,IAAAunE,IAAAyzE,WAAAC,KAAA7oF,MAAA,SAAA9I,GACA,OAAAA,EAAA7K,cAAA6K,EAAA8b,kBAAA9b,EAAAwwF,kBAMA,OAAA1qI,GAEAo2C,aAAA,WACA,MAAAhhD,KAAAk6C,KACAl6C,KAAA2kJ,WAAA,IAAAnpJ,IAAAkG,MAAAqhE,IAAA6hF,WAAA,CACAnwG,GAAAz0C,KAAA7C,EAAA,wBACAoxC,MAAAvuC,KAAAk6C,OAEA,MAAAl6C,KAAA2kJ,YACA3kJ,KAAA2kJ,WAAApoJ,SAGA,MAAAyD,KAAAglB,QACAhlB,KAAA6kJ,cAAA,IAAArpJ,IAAAkG,MAAAqhE,IAAA+hF,cAAA,CACArwG,GAAAz0C,KAAA7C,EAAA,2BACAoxC,MAAAvuC,KAAAglB,UAEA,MAAAhlB,KAAA6kJ,eACA7kJ,KAAA6kJ,cAAAtoJ,UAGAinJ,iBAAA,SAAAjoG,GACA,IAAA85F,EAAAr1I,KAAA7C,EAAA,aACA,GAAA,MAAA6C,KAAA8+D,WAAA,CACA,IAAA,IAAA9+D,KAAA8+D,WAAArlB,MAAAz5C,KAAAwB,QAAAujJ,YAAAxpG,EAAA85F,GACA,OAiBA,GAdA,cAAAr1I,KAAA8+D,WAAAhiE,GACAu4I,EAAAn7H,SAAA,uBAEAm7H,EAAAr7H,YAAA,uBASAha,KAAA8+D,WAAA/yB,OAAAspG,EAAA,MAAAr1I,KAAAwB,QAAAujJ,YAAA/kJ,KAAAwB,QAAAujJ,YAAA,IAEA,MAAA/kJ,KAAAglB,SAAAxpB,IAAAiC,IAAA0jB,QAAAjB,IAAA,kBAAAlgB,KAAAglB,QAAA9E,IAAA,kBAAA,IAAAlgB,KAAA8+D,WAAA61E,oCAAAn5I,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAsuF,iDAAAxpJ,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA4xC,mBAAA,CACA,IAAA28C,EAAAtnJ,EAAAgC,KAAA,WAEAnE,IAAAiC,IAAA0jB,QAAA6D,QAAAg8F,qBAAArjH,EAAAgC,KAAA,WACA,IAAAulJ,EAAA,KACAvnJ,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA6D,QAAA8R,gBAAA9W,OAAAriB,EAAAgC,KAAA,SAAAwlJ,GACAA,EAAAjlI,IAAA,cACAviB,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA62E,UAAAh4E,OAAAriB,EAAAgC,KAAA,SAAAo4F,GAEAA,EAAA73E,IAAA,gBAAAilI,EAAAjlI,IAAA,eAAA63E,EAAA73E,IAAA,sBACAglI,EAAAC,IACAnlJ,QAEAA,OAEAklJ,GACA,IAAA1pJ,IAAAkG,MAAAyzC,UAAA,CACAnvB,OAAA,mCACAovB,KAAA,+EACAO,oBAAA,EACAS,KAAAz4C,EAAAgC,KAAA,WACAnE,IAAAiC,IAAAiuB,OAAAC,SAAA,YAAAnwB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,aAAA,YAAA,CACA0L,SAAA,KAEA5rB,SAGAA,QACAA,MAEAV,EAAA9D,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAsuF,+CACA,GAAA,QAAA1lJ,EACA2lJ,QACA,CACA,IAAAG,EAAA9lJ,EAAAwO,MAAA,KAAA,GAAAu3I,EAAA/lJ,EAAAwO,MAAA,KAAA,GAAAA,MAAA,KACAnQ,EAAAuhB,KAAA1jB,IAAAiC,IAAA0jB,QAAA6D,QAAA9E,IAAA,gBAAAviB,EAAAgC,KAAA,SAAA60D,GACAjyD,SAAA6iJ,KAAA5wF,EAAA13D,KACA,IAAAuoJ,EAAArjJ,QAAAwyD,EAAAl1D,MAAAwL,aACAm6I,KAEAjlJ,QASA,GALA3D,SAAAkF,MAAAvB,KAAA8+D,WAAAwmF,mBAKA,MAAAtlJ,KAAAwB,QAAAujJ,cAAA,IAAA/kJ,KAAAwB,QAAAujJ,YAAAQ,mBAEA,YADAvlJ,KAAAwB,QAAAujJ,YAAAQ,mBAAA,MAIAvlJ,KAAAwB,QAAAujJ,YAAA,OAGAS,oBAAA,SAAA9nJ,GACAsC,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAwuG,cAAAnkJ,IAEA+nJ,UAAA,WACAzlJ,KAAA7C,EAAA,mBAAA6/D,QAAA,CACAnzC,UAAA,GACA,MAEA8B,SAAA,SAAAtuB,GAIA,GAHA,MAAA2C,KAAA8+D,WAAAs2E,WAAA,mBAAAp1I,KAAA8+D,WAAAs2E,WACAp1I,KAAA8+D,WAAAs2E,aAEAp1I,KAAA7C,EAAAE,EAAAgc,eAAAvB,SAAA,YAAA,CAEA,IAAA4tI,EAAA1lJ,KAAA7C,EAAAE,EAAAgc,eAAAjZ,KAAA,UACA,GAAA,EAAAzC,EAAAC,KAAA8nJ,KAAA,MAAA1lJ,KAAA8+D,YAAA4mF,IAAA1lJ,KAAA8+D,WAAAhiE,IAAA,CACA,IAAAgiE,EAAA9+D,KAAAsjJ,cAAAoC,GACA,MAAA5mF,IAGAA,EAAAg2E,WACA,mBAAAh2E,EAAArlB,MACAqlB,EAAArlB,QACA,mBAAAqlB,EAAA/yB,QACA/rC,KAAA+rC,gBAQAvwC,IAAAkG,MAAAqhE,IAAA6hF,WAAAppJ,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,oBAEA+W,kBAAA,aAGAG,aAAA,WACAj0C,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,UAKA/yC,IAAAkG,MAAAqhE,IAAA+hF,cAAAtpJ,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBAEA0W,OAAA,CACAkyG,8BAAA,kBACAC,+BAAA,uBACAC,yBAAA,cAEA/xG,kBAAA,WACA9zC,KAAAs6D,SAAAt6D,KAAAuuC,MAAA,+IAAAvuC,KAAA+rC,SAEAkI,aAAA,WACAj0C,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAu3G,WAAA,WACA,IAAAtqJ,IAAAkG,MAAAg/B,SAAAqlH,iBAEAC,gBAAA,WACAhmJ,KAAAuuC,MAAAnB,IAAA,cAAA,IAAAptC,KAAAuuC,MAAAruB,IAAA,cAAA,CACA4uB,QAAA,IAEA,IAAAtzC,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAuuC,MAAAzxC,IAEA,CACAqC,SAAA,aAEA,CACA,CACAI,UAAA,aACAD,MAAAU,KAAAuuC,MAAAruB,IAAA,mBAGA0wB,MAAAlxC,KAAA/B,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QAEAimJ,qBAAA,WACA,IAAAC,EAAAlmJ,KAAA7C,EAAA,yBAAAsb,KAAA,WACAzY,KAAAuuC,MAAAnB,IAAA,WAAA84G,GACA,IAAA1qJ,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAuuC,MAAAzxC,KAEA,CACA,CACAyC,UAAA,WACAD,MAAA4mJ,OAGAx1G,QAAAhxC,KAAA/B,EAAAgC,KAAA,WACA,IAAAwmJ,EAEAA,EADAD,EACA,wBAEA,yBAEA1qJ,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAAo6H,KAEAnmJ,UAIAxE,IAAAkG,MAAAqhE,IAAAyyE,kBAAAh6I,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uBAEA0W,OAAA,CACA2yG,4BAAA,iBAEAC,cAAA,WACA7qJ,IAAAiC,IAAA0jB,QAAAklI,cAAA1oJ,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAi0I,YACAz1I,KAAAwB,QAAAi0I,cAEAz1I,UAIAxE,IAAAkG,MAAAs5D,OAAAsrF,uBAAA9qJ,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,6BAEAka,mBAAA,WACAj3C,KAAAwB,QAAA7D,EAAAupB,SAAA,CACAkvB,KAAAz4C,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAAklI,cAAA1oJ,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAi0I,YACAz1I,KAAAwB,QAAAi0I,aAEAz1I,KAAA64C,eACA74C,QACAA,OACAA,KAAAwB,Yep9EAhG,IAAAkG,MAAA2uC,cAAA,GACA70C,IAAAkG,MAAA2uC,cAAAk2G,oBAAA/qJ,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,8BACAvO,MAAA,IACA8nB,SAAA,OAEA7C,OAAA,CACAmnF,+BAAA,uBACAC,iCAAA,sBAEAtmF,YAAA,WACAv0C,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA,CACA9H,GAAA,4BACAr0C,KAAAJ,KAAA0tD,WAAA1tC,OACA48B,cAAA,EACAW,MAAA,MACAoG,MAAA,CAAA,EAAA,QACA1E,SAAA,CACA6N,YAAA,uCAGAhO,QAAA9+C,KAAAsjD,gBAGAA,WAAA,WACA,GAAAtjD,KAAA0tD,sBAAAlyD,IAAAk3C,YAAAhM,IAAA8/G,cACA,MAAA,CACA,CACApmJ,KAAA,CACAzC,EAAA,sBACA6C,QAAA,SAAA4/C,GACA,OAAA5kD,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAA89C,EAAA9S,WAAAm5G,UAAAjrJ,IAAAC,QAAAwH,YAAAE,YAAAqB,WAAA,IAEA8nC,OAAA,SAAA8T,GACA,OAAA5kD,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAA89C,EAAA9S,WAAAm5G,UAAA,0BAAA,KAGAllJ,MAAA,YACAitB,MAAA,SAEA,CACApuB,KAAA,GACAmB,MAAA,OACAitB,MAAA,MACAud,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,OAAAA,EAAAsmG,gBAGA,CACAtmJ,KAAA,YACAmB,MAAA,YACAwqC,OAAA,SAAA3rC,GACA,OAAA,MAAAA,EACA5E,IAAAC,QAAA6jC,SAAAm4D,iBAAA,CAAA5yE,QAAAzkB,IAEA,KAGA,CACAA,KAAA,oBACAmB,MAAA,SACAitB,MAAA,QAEA,CACApuB,KAAA,uBACAmB,MAAA,aACAitB,MAAA,QAEA,CACApuB,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,QACAud,OAAA,SAAA3rC,EAAAW,EAAAq/C,GAGA,OAFAA,EAAAlgC,IAAA,aAGA,kFAAAkgC,EAAAtjD,GAAAgO,WAAA,mJAAAs1C,EAAAtjD,GAAAgO,WAAA,4HAEA,kFAAAs1C,EAAAtjD,GAAAgO,WAAA,mJAAAs1C,EAAAtjD,GAAAgO,WAAA,oHAOA,IAAA8mD,EAAA,CACA,CACAxxD,KAAA,CACAzC,EAAA,uBACA6C,QAAA,SAAA4/C,GACA,OAAA5kD,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAA89C,EAAA9S,WAAAxqC,WAAAtH,IAAAC,QAAAwH,YAAAE,YAAAqB,WAAA,IAEA8nC,OAAA,SAAA8T,GACA,OAAA5kD,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAA89C,EAAA9S,WAAAxqC,WAAA,0BAAA,KAGAvB,MAAA,OACAitB,MAAA,SAKA,CACApuB,KAAA,GACAmB,MAAA,OACAitB,MAAA,MACAud,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,OAAAA,EAAAsmG,gBAGA,CACAtmJ,KAAA,YACAmB,MAAA,YACAwqC,OAAA,SAAA3rC,GACA,OAAA,MAAAA,EACA5E,IAAAC,QAAA6jC,SAAAm4D,iBAAA,CAAA5yE,QAAAzkB,IAEA,KAGA,CACAA,KAAA,oBACAmB,MAAA,SACAitB,MAAA,SA8BA,OA1BA,EAAA7wB,EAAAC,KAAAoC,KAAAwB,QAAAmlJ,eACAhpJ,EAAAuhB,KAAAlf,KAAAwB,QAAAmlJ,aAAA,SAAA/nG,GACA,MAAAA,EAAAr7C,OAAAq7C,EAAAr7C,OAAAquD,EAAAl1D,OAAA,EACAk1D,EAAAxzC,KAAAwgC,GAIAgT,EAAA,GAAA7jD,OAAA8hC,mBACA+hB,EAAAtnD,MAAA,EAAAs0C,EAAAr7C,QADA,CAEAq7C,GAFA/O,mBAGA+hB,EAAAtnD,MAAAs0C,EAAAr7C,WAKAquD,EAAAxzC,KAAA,CACAhe,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,QACAud,OAAA,SAAA3rC,EAAAW,EAAAq/C,GACA,MAAA,kFAAAA,EAAAtjD,GAAAgO,WAAA,mJAAAs1C,EAAAtjD,GAAAgO,WAAA,oHAIA8mD,GAEAg1F,qBAAA,SAAAvpJ,GACA,IAAAwpJ,EAAA1pJ,EAAAE,EAAAgc,eAAAjZ,KAAA,MACAoiH,EAAAxiH,KAAA0tD,WAAAxtC,IAAA2mI,GACA50F,EAAA,WAAAt0D,EAAAid,WACAs3C,EAAA/0D,EAAA,UAAA,CACAmC,MAAAkjH,EAAAtiG,IAAA,OACA+G,MAAA,8CACAnqB,GAAAm1D,IAEAjyD,KAAAtC,IAAAoD,OAAAoxD,GACAA,EAAA,GAAAC,SACA91D,SAAA+1D,YAAA,QACAF,EAAA31D,UAEAuqJ,mBAAA,SAAAzpJ,GACA,IAAA0pJ,EAAA5pJ,EAAAE,EAAAgc,eACAwtI,EAAA1pJ,EAAAE,EAAAgc,eAAAjZ,KAAA,MACAoiH,EAAAxiH,KAAA0tD,WAAAxtC,IAAA2mI,GACAzmG,EAAApgD,KAAAgiD,UAAAd,OAAAshE,EAAAl0D,KACAk0D,EAAAwkC,SAGAhnJ,KAAA0tD,sBAAAlyD,IAAAk3C,YAAAhM,IAAA8/G,eACAhkC,EAAAp1E,IAAA,CACA65G,UAAAzkC,EAAAtiG,IAAA,aAAA,EACAumI,SAAA,IAAAnkJ,KACA4kJ,WAAA,IAEA9mG,EAAAhgD,KAAAoiH,GAAAtgE,SAEA6kG,EAAAlvI,KAAA,KAAAmC,YAAA,YAAAE,SAAA,YACA6sI,EAAA/sI,YAAA,aAAAE,SAAA,eAAAzB,KAAA,YAAA,OAKAjd,IAAAwkB,OAAAqwB,cAAA,GACA70C,IAAAwkB,OAAAqwB,cAAA82G,aAAA3rJ,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAoM,MAAA,SAAAkiC,GACA,OAAAA,IAGAvuC,KAAAonJ,UAAA,IAAA5rJ,IAAAwkB,OAAA8W,gBAAAiqC,eAAAxyB,EAAA64G,YAEA74G,GAEAm4G,YAAA,WAEA,OADA1mJ,KAAA0jC,sBAAA1jC,KAAAkgB,IAAA,UACA,IAEA8mI,OAAA,WACA,IAAAxrJ,IAAAyD,KAAAC,QAAA,CACAC,SAAAa,KAAAb,WAAA,YACAM,OAAAiV,QAAA/W,EAAAgC,KAAA,SAAAS,GACA5E,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,yBAEA/rB,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACAnE,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,kDAEA/rB,UAIAxE,IAAAk3C,YAAArC,cAAA,GACA70C,IAAAk3C,YAAArC,cAAAm2G,cAAAhrJ,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAAqwB,cAAA82G,eChOA3rJ,IAAAwkB,OAAAm6E,qBAAA,GAEA3+F,IAAAwkB,OAAAm6E,qBAAAktD,oBAAA7rJ,IAAAwkB,OAAA4sB,UAAA3sC,SAEAzE,IAAAwkB,OAAAm6E,qBAAAmtD,qBAAA9rJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAotD,sBAAA/rJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SAEAzE,IAAAwkB,OAAAm6E,qBAAAqtD,uBAAAhsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAstD,8BAAAjsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAutD,qBAAAlsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAwtD,qBAAAnsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAytD,wBAAApsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA0tD,4BAAArsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA2tD,iBAAAtsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA4tD,yBAAAvsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA6tD,uBAAAxsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA8tD,wBAAAzsJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAA+tD,uBAAA1sJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAguD,sBAAA3sJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAiuD,qBAAA5sJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SACAzE,IAAAwkB,OAAAm6E,qBAAAkuD,4BAAA7sJ,IAAAwkB,OAAAm6E,qBAAAktD,oBAAApnJ,SAEAzE,IAAAwkB,OAAAm6E,qBAAAmuD,qBAAA9sJ,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,yBACA1tC,SAAA,WACA,OAAA,EAAAa,KAAAlD,GACAtB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,uBACAG,MAAAU,KAAAlD,MAIA,MAAAkD,KAAAkgB,IAAA,OAAA,EAAAlgB,KAAAkgB,IAAA,aACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,cAEA,CACA/gB,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,0BAIAa,KAAAkgB,IAAA,MAAA,EACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,MACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,cACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA,EAAAU,KAAAkgB,IAAA,aAAAlgB,KAAAkgB,IAAA,aAAA,MAEA,CACA/gB,SAAA,2BAIAopJ,uBAAA,SAAAC,GAAA,IAAAhnJ,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACAQ,EAAA,KACA69I,EAAA9qJ,EAAAgC,KAAA,SAAA+oJ,GACA,IAAAn3I,EAAAm3I,EAAA56I,MAAA,KACAlQ,EAAAD,EAAAC,KAAA2T,GACAo3I,EAAA3oJ,KACA4oJ,GAAA,EAaA,OAZAjrJ,EAAAuhB,KAAA3N,EAAA,SAAAs3I,EAAAtlJ,GACA,MAAAolJ,IAIAplJ,EAAA,IAAA3F,EACAgrJ,GAAA,IAAAD,EAAAzoI,IAAA2oI,GAGAF,EAAAA,EAAAE,KAEA7oJ,MACA4oJ,GACA5oJ,MAcA,MAbA,UAAAxE,IAAAC,QAAAqW,cAAAC,YAAAy2I,GACA7qJ,EAAAuhB,KAAAspI,EAAA,SAAAM,GAEAl+I,EADApJ,EAAAunJ,GACAN,EAAAK,IAAA,MAAAl+I,GAAAA,EAGA69I,EAAAK,KAAA,MAAAl+I,GAAAA,KAKAA,EAAA69I,EAAAD,GAEA,MAAA59I,GAAAA,GAEAyB,MAAA,SAAAkiC,GAkBA,OAjBA,MAAAA,IACA,MAAA/yC,IAAAiC,IAAA0jB,SAAA,MAAAotB,EAAAupD,WACA93F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA93E,IAAAquB,EAAAupD,YAEA,MAAAvpD,EAAAwpD,WACAxpD,EAAAupD,WAAAvpD,EAAAwpD,SAAAj7F,GACAkD,KAAA+3F,SAAAxpD,EAAAwpD,UAGAp6F,EAAAuhB,KAAAlf,KAAAgtC,SAAA,SAAAg8G,EAAApoJ,GACA,IAAAqoJ,EAAA16G,EAAA3tC,GACA,MAAAqoJ,IACAjpJ,KAAAY,GAAA,IAAAooJ,EAAAC,KAEAjpJ,OAGAuuC,GAEA4C,WAAA,WACAxzC,EAAAuhB,KAAAlf,KAAAgtC,SAAA,SAAAk8G,EAAAtoJ,GACA,IAAAu5F,EAAAn6F,KAAAY,GACA,MAAAu5F,GAAAA,aAAA3+F,IAAAwkB,OAAAm6E,qBAAAktD,qBACArnJ,KAAAotC,IAAAxsC,EAAAu5F,EAAAvqD,WAEA5vC,SAIAxE,IAAAwkB,OAAAm6E,qBAAAC,2BAAA5+F,IAAAwkB,OAAAm6E,qBAAAmuD,qBAAAroJ,OAAA,CACA+sC,SAAA,CACAtM,SAAAllC,IAAAwkB,OAAAm6E,qBAAAotD,sBACAjoH,SAAA9jC,IAAAwkB,OAAAm6E,qBAAAmtD,sBAEAnoJ,SAAA,WACA,OAAA,EAAAa,KAAAlD,GACAtB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,uBACAG,MAAAU,KAAAlD,MAIAkD,KAAAkgB,IAAA,MAAA,EACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,MACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,cACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,0BAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,6BAMA3D,IAAAwkB,OAAAm6E,qBAAAG,4BAAA9+F,IAAAwkB,OAAAm6E,qBAAAmuD,qBAAAroJ,OAAA,CACA+sC,SAAA,CACAm8G,UAAA3tJ,IAAAwkB,OAAAm6E,qBAAAqtD,uBACA4B,iBAAA5tJ,IAAAwkB,OAAAm6E,qBAAAstD,8BACA9qI,SAAAnhB,IAAAwkB,OAAAm6E,qBAAAutD,qBACA7iC,SAAArpH,IAAAwkB,OAAAm6E,qBAAAwtD,qBACA75G,YAAAtyC,IAAAwkB,OAAAm6E,qBAAAytD,wBACA9wH,gBAAAt7B,IAAAwkB,OAAAm6E,qBAAA0tD,4BACAnhH,IAAAlrC,IAAAwkB,OAAAm6E,qBAAA2tD,iBACAnjH,aAAAnpC,IAAAwkB,OAAAm6E,qBAAA4tD,yBACAsB,UAAA7tJ,IAAAwkB,OAAAm6E,qBAAA6tD,uBACA3gH,WAAA7rC,IAAAwkB,OAAAm6E,qBAAA+tD,uBACAz/G,SAAAjtC,IAAAwkB,OAAAm6E,qBAAAguD,sBACA1kH,YAAAjoC,IAAAwkB,OAAAm6E,qBAAA8tD,wBACAtiH,SAAAnqC,IAAAwkB,OAAAm6E,qBAAAiuD,qBACAkB,gBAAA9tJ,IAAAwkB,OAAAm6E,qBAAAkuD,6BAEAlpJ,SAAA,WACA,OAAA,EAAAa,KAAAlD,GACAtB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,uBACAG,MAAAU,KAAAlD,MAIA,MAAAkD,KAAAkgB,IAAA,OAAA,EAAAlgB,KAAAkgB,IAAA,aACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,cAEA,CACA/gB,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,0BAIAa,KAAAkgB,IAAA,MAAA,EACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,MACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAIA,EAAAa,KAAAkgB,IAAA,cACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,0BAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA,EAAAU,KAAAkgB,IAAA,aAAAlgB,KAAAkgB,IAAA,aAAA,MAEA,CACA/gB,SAAA,6BAOA3D,IAAAkG,MAAAy4F,qBAAA,GAEA3+F,IAAAkG,MAAAy4F,qBAAAqP,gCAAAhuG,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sCACAsZ,SAAA,KAEA7C,cAAA,CACA6nB,kBAAA,OACAi8C,oBAAA,UAEAtjE,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,UAGAuvB,YAAA,WACAv0C,KAAAupJ,2BAAA,IAAA/tJ,IAAAkG,MAAAy4F,qBAAAqvD,2BAAA,CACA/0G,GAAAz0C,KAAA7C,EAAA,0BACAoxC,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,WAGA2rB,KAAA,WACA,IAAAn1C,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAupJ,2BAAA54G,KAAAhzC,EAAAgC,KAAA,WACAK,KAAA64C,cACAr9C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,iCAEA/rB,QAEA+5D,OAAA,WACA/5D,KAAA64C,iBAIAr9C,IAAAkG,MAAAy4F,qBAAAqvD,2BAAAhuJ,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gCACAuW,aAAA,GAEAG,OAAA,CACAg2G,mDAAA,iBACAC,iDAAA,eACAC,oDAAA,kBACAC,kDAAA,iBAEA91G,kBAAA,WACA9zC,KAAA6pJ,6BAEAA,0BAAA,WACA,MAAA7pJ,KAAAwB,QAAAwjB,QACAhlB,KAAAq6F,iCAAA18F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,OAGAA,KAAAk6F,gCAAAv8F,EAAAgC,KAAA,WACAK,KAAAq6F,iCAAA18F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,QAGAk6F,gCAAA,SAAArhF,GACA7Y,KAAAuuC,MAAA2rD,gCAAAv8F,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAA8pJ,2BAAAhmG,EACA,mBAAAjrC,GACAA,EAAAirC,IAEA9jD,QAEAq6F,iCAAA,SAAAxhF,GACA7Y,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAg4E,UAAA+xD,SACA/pJ,KAAAuuC,MAAA8rD,iCAAA18F,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAAgqJ,4BAAAlmG,EACA,mBAAAjrC,GACAA,EAAAirC,IAEA9jD,OAGAA,KAAAuuC,MAAA8rD,iCAAAr6F,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KAAAa,EAAAgC,KAAA,SAAAmkD,GACA9jD,KAAAgqJ,4BAAAlmG,EACA,mBAAAjrC,GACAA,EAAAirC,IAEA9jD,QAGAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAwB,QAAA+sC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,QACA8kI,2BAAA9pJ,KAAA8pJ,2BACAE,4BAAAhqJ,KAAAgqJ,8BAGAz1G,YAAA,WACA,IAAA01G,EAAAtsJ,EAAAgC,KAAA,SAAAuqJ,EAAAC,GACA,IAAAC,EAAAjtJ,EAAA+sJ,GACAG,EAAAD,EAAAhqJ,KAAA,uBACAooJ,EAAA2B,EAAAE,GACA,MAAA7B,GACA,IAAAhtJ,IAAAi8D,OAAA2yF,EAAA5B,EAAA,CACAxwE,kBAAA,EACAtgB,cAAA,CACA,SAEA0V,YAAAzvE,EAAAgC,KAAA,SAAA2qJ,EAAAhqJ,EAAAsB,GACA5B,KAAAuqJ,2BAAAD,EAAAhqJ,EAAAsB,GACAuoJ,EAAA38G,SAAA,GACAxtC,SAGAA,MACA,MAAAA,KAAA8pJ,4BACAnsJ,EAAAuhB,KAAAlf,KAAA7C,EAAA,0CAAA,SAAA+sJ,GACAD,EAAAC,EAAAlqJ,KAAA8pJ,6BACA9pJ,MAEA,MAAAA,KAAAgqJ,6BACArsJ,EAAAuhB,KAAAlf,KAAA7C,EAAA,2CAAA,SAAA+sJ,GACAD,EAAAC,EAAAlqJ,KAAAgqJ,8BACAhqJ,OAGAuqJ,2BAAA,SAAAC,EAAAlqJ,EAAAsB,GACA,IAAA6c,EAAA+rI,EAAApqJ,KAAA,SACA,GAAA,MAAAqe,EAAA,CACA,IAAAmjC,EAAA4oG,EAAA9vI,QAAA,mCAAA7C,KAAA,SACA,GAAAjW,GAAA,EAAA6c,EACA9gB,EAAAuhB,KAAA0iC,EAAA,SAAA6oG,GACA,IAAAC,EAAAvtJ,EAAAstJ,GACAE,EAAAD,EAAAtqJ,KAAA,SACA,MAAAuqJ,GAAAA,EAAAlsI,IACAisI,EAAAjyI,KAAA,UAAA7W,GACA8oJ,EAAA9+H,QAAA,kBAIA,IAAAhqB,EAAA,CAEA,GAIA,MAJAjE,EAAAka,KAAA+pC,EAAA,SAAA6oG,GACA,IAAAG,EAAAztJ,EAAAstJ,GAAArqJ,KAAA,SAEA,OADAjD,EAAAstJ,GAAArqJ,KAAA,WACAqe,GAAAne,IAAAsqJ,GAAAztJ,EAAAstJ,GAAAhyI,KAAA,aAEA,OAEA9a,EAAAuhB,KAAA0iC,EAAA,SAAA6oG,GACA,IAAAC,EAAAvtJ,EAAAstJ,GACAE,EAAAD,EAAAtqJ,KAAA,SACA,MAAAuqJ,GAAAlsI,EAAAksI,IACAD,EAAAjyI,KAAA,UAAA7W,GACA8oJ,EAAA9+H,QAAA,gBAMAi/H,eAAA,WAIA7qJ,KAAA8pJ,2BAAA18G,IAAA,CACA09G,uBAAA,KACAhzD,WAAA,KACAh7F,GAAAkD,KAAAuuC,MAAAruB,IAAA,MACAuxE,UAAA,IAEAzxF,KAAA+rC,UAEAg/G,aAAA,WAGA,IAAAC,EAAArtJ,EAAAgC,KAAA,WACAK,KAAAk6F,gCAAAv8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAA,KAAA8pJ,2BAAA58G,QASA89G,IARAhrJ,KAAA8pJ,2BAAA3mG,QAAA,CACAzuC,QAAA/W,EAAAgC,KAAA,WACAK,KAAA8pJ,2BAAA,KACAkB,KACAhrJ,SAOAirJ,gBAAA,WAIAjrJ,KAAAgqJ,4BAAA58G,IAAA,CACA09G,uBAAA,KACAhzD,WAAA,KACAh7F,GAAAkD,KAAAuuC,MAAAruB,IAAA,MACA2L,UAAA7rB,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KACA20F,UAAA,IAEAzxF,KAAA+rC,UAEAm/G,cAAA,WAGA,IAAAF,EAAArtJ,EAAAgC,KAAA,WACAK,KAAAq6F,iCAAA18F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAA,KAAAgqJ,4BAAA98G,QASA89G,IARAhrJ,KAAAgqJ,4BAAA7mG,QAAA,CACAzuC,QAAA/W,EAAAgC,KAAA,WACAK,KAAAgqJ,4BAAA,KACAgB,KACAhrJ,SAOA2wC,KAAA,SAAA93B,GACA,IAAAmyI,EAAArtJ,EAAAgC,KAAA,WACAK,KAAAq6F,iCAAA18F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAmrJ,EAAAxtJ,EAAAgC,KAAA,WACA,MAAAK,KAAAgqJ,6BAAAhqJ,KAAAgqJ,4BAAAv8G,aACAztC,KAAAgqJ,4BAAAr5G,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,KAEA7Y,QAIA,mBAAA6Y,GACAA,KAGA7Y,MACA,MAAAA,KAAA8pJ,4BAAA9pJ,KAAA8pJ,2BAAAr8G,aACAztC,KAAA8pJ,2BAAAn5G,KAAA,KAAA,CACAj8B,QAAA,WACAy2I,IACAH,OAKAG,OC1kBA3vJ,IAAA60C,cAAA,CACA0pF,kBAAA,SAAAv4H,GACA,OAAA,MAAAA,EAAA+kB,SAAA/qB,IAAAC,QAAA0qB,cAAAC,UAAA5kB,EAAA+kB,WACA,IAAA/qB,IAAA60C,cAAA+6G,YAAA5pJ,IACA,KAMAhG,IAAA60C,cAAA+6G,YAAA5vJ,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBAEA0W,OAAA,CACA43G,uBAAA,qBAEAC,kBAAA,WACA,EAAA3tJ,EAAAC,KAAAoC,KAAAwB,QAAA+kB,SACA/qB,IAAAC,QAAA0qB,cAAAK,UAAAxmB,KAAAwB,QAAA+kB,QAAA,MAKA/qB,IAAA60C,cAAAb,OAAA,CACA+7G,sBAAA,CACAC,UAAA,CACAC,KAAA,SACA9/D,MAAA,SAEA3uB,QAAA,CACAkuB,MAAA,sBACAwgE,KAAA,yBAEAC,eAAA,EACAC,MAAA,IACAC,QAAA,KAEAC,YAAA,SAAAtqJ,EAAAqX,GACArd,IAAAivC,WAAAe,iBAAAW,cAAA,IAAA3wC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,UAAAv7B,EAAA,SAAAmqC,GACA9yB,EAAA8yB,EAAAo5C,gBAGAv1C,OAAA,SAAAhuC,EAAAsiD,GACA,IAAAioG,EAAA,GACAC,EAAA,GAEA,WAAAxwJ,IAAAC,QAAAqW,cAAAC,YAAAvQ,KACAuqJ,EAAAvqJ,GACA,WAAAhG,IAAAC,QAAAqW,cAAAC,YAAA+xC,KACAkoG,EAAAruJ,EAAAupB,SAAA48B,EAAA9jD,KAAAurJ,wBAGAvrJ,KAAA8rJ,YAAA,CAAAtqJ,QAAAuqJ,EAAAjoG,SAAAkoG,GAAA,SAAAC,GACAD,EAAArgH,SAAAsgH,EACA9uJ,EAAAqyC,OAAAu8G,EAAAC,MAGA17G,cAAA,SAAA9uC,EAAAsiD,GACA,IAAAioG,EAAA,CACA3jI,KAAA,gBAEA4jI,EAAA,CACAjrJ,KAAA,kBAGA,WAAAvF,IAAAC,QAAAqW,cAAAC,YAAAvQ,KACAuqJ,EAAApuJ,EAAAupB,SAAA1lB,EAAAuqJ,IACA,WAAAvwJ,IAAAC,QAAAqW,cAAAC,YAAA+xC,KACAkoG,EAAAruJ,EAAAupB,SAAA48B,EAAAkoG,IAGAhsJ,KAAAwvC,OAAAu8G,EAAAC,IAEAnoC,cAAA,SAAAriH,EAAAsiD,GACA,IAAAioG,EAAA,CACA3jI,KAAA,oBAEA4jI,EAAA,CACAjrJ,KAAA,kBAGA,WAAAvF,IAAAC,QAAAqW,cAAAC,YAAAvQ,KACAuqJ,EAAApuJ,EAAAupB,SAAA1lB,EAAAuqJ,IACA,WAAAvwJ,IAAAC,QAAAqW,cAAAC,YAAA+xC,KACAkoG,EAAAruJ,EAAAupB,SAAA48B,EAAAkoG,IAGAhsJ,KAAAwvC,OAAAu8G,EAAAC,IAEAptF,YAAA,SAAAp9D,EAAAsiD,GACA,IAAAioG,EAAA,CACA3jI,KAAA,8BACA7mB,MAAA,yBAEAyqJ,EAAA,CACAjrJ,KAAA,gBAGA,WAAAvF,IAAAC,QAAAqW,cAAAC,YAAAvQ,KACAuqJ,EAAApuJ,EAAAupB,SAAA1lB,EAAAuqJ,IACA,WAAAvwJ,IAAAC,QAAAqW,cAAAC,YAAA+xC,KACAkoG,EAAAruJ,EAAAupB,SAAA48B,EAAAkoG,IAEAhsJ,KAAAwvC,OAAAu8G,EAAAC,KCxGAxwJ,IAAA0wJ,WAAA,WACA,SAAAC,EAAAzuJ,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAAmsJ,GACAnsJ,KAAAtC,IAAAA,EACAsC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAqX,SAAAlb,EAAAgC,KAAA,SAAAiuD,GACA5tD,KAAAosJ,gBAAAp3G,QACAr3C,EAAAuhB,KAAA0uC,EAAA,SAAA9I,GACA9kD,KAAAqsJ,eAAAvnG,IACA9kD,OACAA,QAEAA,KAAAnD,gBACAmD,KAAA+rC,OAAAvqC,EAAA8qJ,YAZA,OAAArhH,aAAAkhH,EAAA,CAAA,CAAAvrJ,IAAA,gBAAAtB,MAeA,WAEA,IAAA3B,EAAAC,KAAAoC,KAAAtC,IAAAma,KAAA,4BACA7X,KAAAtC,IAAAoD,OAAA3D,EAAA,QAAA,CACAwd,MAAA,2BAGA,IAAAhd,EAAAC,KAAAoC,KAAAtC,IAAAma,KAAA,sBACA7X,KAAAtC,IAAAoD,OAAA3D,EAAA,QAAA,CACAwd,MAAA,0BAIA3a,KAAAusJ,sBAAAvsJ,KAAAtC,IAAAma,KAAA,0BACA7X,KAAAosJ,gBAAApsJ,KAAAtC,IAAAma,KAAA,sBA7BA,CAAAjX,IAAA,SAAAtB,MAgCA,SAAAc,GACA,MAAAA,IACAJ,KAAAwB,QAAA8qJ,WAAAlsJ,GAIAJ,KAAAusJ,sBAAAC,WAAAxsJ,KAAAwB,WAtCA,CAAAZ,IAAA,SAAAtB,MAyCA,SAAAc,GACAJ,KAAA+rC,OAAA3rC,KA1CA,CAAAQ,IAAA,iBAAAtB,MA6CA,SAAAwlD,GAEA,mBAAA9kD,KAAAwB,QAAA6qJ,eACArsJ,KAAAwB,QAAA6qJ,eAAAvnG,GAGA,MAAAnkD,QAAAX,KAAAwB,QAAAirJ,mBACAjxJ,IAAAivC,WAAAe,iBAAAQ,gBAAA,EAAAhsC,KAAAwB,QAAAirJ,iBAAAzsJ,KAAAosJ,gBAAAzuJ,EAAAsC,OAAA,CACAsuC,MAAAuW,GACA9kD,KAAAwB,QAAAwyC,iBAtDAm4G,EAAA,GCCA3wJ,IAAAkG,MAAAgrJ,QAAA,GAEAlxJ,IAAAkG,MAAAgrJ,QAAAC,aAAAnxJ,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACAo8B,OAAAx7D,EAAAu4C,KACAG,SAAA,IACAC,SAAA,KAEA7C,OAAA,CACAm5G,0BAAA,yBACAC,wBAAA,wBAEA5kH,OAAA,CACA6kH,kBAAA,6CACAC,gBAAA,yCACAn3H,SAAA,sIACAo3H,MAAA,6FAEA/1G,mBAAA,WACAj3C,KAAAwB,QAAAyrJ,mBAAAzxJ,IAAAwkB,OAAA0sI,QAAAQ,UACAltJ,KAAAwB,QAAA2rJ,oBAAA3xJ,IAAAk3C,YAAAg6G,QAAAU,WACAptJ,KAAAwB,QAAA2rJ,SAAA,IAAA3xJ,IAAAk3C,YAAAg6G,QAAAU,UAEAptJ,KAAAwB,QAAA2rJ,SAAAv6G,IAAA5yC,KAAAwB,QAAAyrJ,UAGAjtJ,KAAAwB,QAAAqjB,mBAAArpB,IAAAwkB,OAAAsf,SAAAo2B,UACA11D,KAAAwB,QAAAqjB,QAAA,IAAArpB,IAAAwkB,OAAAsf,SAAAo2B,SAGA/3D,EAAAC,KAAAoC,KAAAwB,QAAA2rJ,SAAAntI,QAIAhgB,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAA0sI,QAAAW,YAAA,CACAC,eAAAttJ,KAAAwB,QAAAqjB,QAAA3E,IAAA,eACAosF,SAAAtsG,KAAAwB,QAAAqjB,QAAA3E,IAAA,YACAqsF,SAAAvsG,KAAAwB,QAAAqjB,QAAA3E,IAAA,YACAssF,KAAAxsG,KAAAwB,QAAAqjB,QAAA3E,IAAA,QACA6hD,MAAA/hE,KAAAwB,QAAAqjB,QAAA3E,IAAA,SACA8sD,IAAAhtE,KAAAwB,QAAAqjB,QAAA3E,IAAA,OACAtG,QAAA,EAAAjc,EAAAC,KAAAoC,KAAAwB,QAAAqjB,QAAA3E,IAAA,YAAAlgB,KAAAwB,QAAAqjB,QAAA3E,IAAA,WAAA,KACAw3D,WAAA,KACA61E,gBAAA,KACAC,eAAA,KACAC,aAAA,KACAN,SAAAntJ,KAAAwB,QAAA2rJ,WAGA,MAAAntJ,KAAAwB,QAAArC,WACAa,KAAAuuC,MAAApvC,SAAAa,KAAAwB,QAAArC,WAGA80C,aAAA,WACAj0C,KAAAg0C,WAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACA,IAAA/4C,IAAAi8D,OAAAz3D,KAAA7C,EAAA,sBAAA6C,KAAAuuC,MAAA,CACAmpB,cAAA,CACA,SAEA0V,YAAAzvE,EAAAgC,KAAA,SAAAq1D,GACAh1D,KAAA4tE,cAAA5Y,GAAA,IACAh1D,QAGA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,mCACA66H,cAAA,EACA/1E,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,kBAAA9tC,GACAU,KAAA4tE,cAAA5tE,KAAA7C,EAAA,oCAAA,IACA6C,QAGA,IAAAxE,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,kCACA66H,cAAA,EACA/1E,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,iBAAA9tC,GACAU,KAAA4tE,cAAA5tE,KAAA7C,EAAA,mCAAA,IACA6C,QAGA,IAAA0tE,EAAA,IAAAlyE,IAAAomD,OAAAmiD,YAAA,CACAtvD,GAAAz0C,KAAA7C,EAAA,wBACAyc,QAAA5Z,KAAAuuC,MAAAruB,IAAA,WAAAlgB,KAAAuuC,MAAAruB,IAAA,WAAAjL,cAAA,KACA8sC,aAAA/hD,KAAAuuC,MAAAruB,IAAA,SAAAlgB,KAAAuuC,MAAAruB,IAAA,SAAAjL,cAAA,KACAgtC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,QAAA9tC,GACAU,KAAA4tE,cAAA5tE,KAAA7C,EAAA,yBAAA,IACA6C,QAGA,IAAAxE,IAAAomD,OAAAoiD,cAAA,CACAvvD,GAAAz0C,KAAA7C,EAAA,oBACA4kD,aAAA/hD,KAAAuuC,MAAAruB,IAAA,WAAAlgB,KAAAuuC,MAAAruB,IAAA,WAAAjL,cAAA,KACAy4D,YAAAA,EACAu2B,SAAAjkG,KAAA7C,EAAA,gBACA8kD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,UAAA9tC,GACAU,KAAA4tE,cAAA5tE,KAAA7C,EAAA,2BAAA,IACA6C,SAGA0tJ,uBAAA,WACA1tJ,KAAA2tJ,iBACA,MAAA3tJ,KAAAuuC,MAAApvC,UACAa,KAAA7C,EAAA,mBAAAsb,KAAA,YAAA,GACAzY,KAAA7C,EAAA,qBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,iBACAn8D,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,SAAA4uC,EAAA3uC,GACA,GAAAA,EAAAgL,OACA5K,KAAA64C,cACA,mBAAA74C,KAAAwB,QAAA02I,YACAl4I,KAAAwB,QAAA02I,WAAAl4I,KAAAuuC,WAGA,CACA,IAAAj6B,EAAA1U,EAAA0U,MACA,IAAA3W,EAAAC,KAAA0W,IAAA,UAAAA,IACAA,EAAA,QACA,IAAA9Y,IAAA8wB,QAAA7H,MAAAjpB,IAAA8wB,QAAAC,eAAAo+G,cAAA,CACA//H,OAAAhL,EACAT,SAAA,mBAAAa,KAAAuuC,MAAApvC,SAAAa,KAAAuuC,MAAApvC,WAAAa,KAAAuuC,MAAApvC,YAGAa,KAAA4tJ,gBAAA5tJ,KAAAioC,OAAA3zB,IACAtU,KAAA7C,EAAA,mBAAAsb,KAAA,YAAA,GACAzY,KAAA7C,EAAA,qBAAAsb,KAAA,YAAA,GAAA0jD,KAAA,oBAEAn8D,SAIA,mBAAAA,KAAAwB,QAAA02I,YACAl4I,KAAAwB,QAAA02I,WAAAl4I,KAAAuuC,SAKAo/G,aAAA,WACA,IAAAr+G,EAAAtvC,KACA6tJ,GAAA,EACAC,EAAA,GAWA,GAVA9tJ,KAAA7C,EAAA,sBAAA0a,KAAA,aAAAqH,KAAA,WACAowB,EAAAs+B,cAAAzwE,EAAA6C,SACA6tJ,GAAA,EACAC,EAAA1vI,KAAAjhB,EAAA6C,MAAAI,KAAA,aAIA,EAAAzC,EAAAC,KAAAoC,KAAA+tJ,aACA/tJ,KAAA+tJ,WAAAxxJ,UAEAsxJ,EAAA,CACA,IAAApzI,EAAAza,KAAAioC,OAAA6kH,kBACA,IAAAnvJ,EAAAC,KAAAkwJ,KAAA,IAAAA,EAAA9rJ,QAAA,gBACAyY,EAAAza,KAAAioC,OAAA8kH,iBAEA/sJ,KAAA4tJ,gBAAAnzI,GAEA,OAAAozI,GAEAD,gBAAA,SAAAnzI,GACA,EAAA9c,EAAAC,KAAAoC,KAAA+tJ,aACA/tJ,KAAA+tJ,WAAAxxJ,SAEAyD,KAAA+tJ,WAAA5wJ,EAAA,QAAA,CACAwd,MAAA,oDACAwhD,KAAA1hD,GACAza,KAAA7C,EAAA,iBAAA2D,OAAAd,KAAA+tJ,aAEAngF,cAAA,SAAA5Y,GAAA,IAAAg5F,EAAA,EAAA5jJ,UAAA1N,aAAA2N,IAAAD,UAAA,IAAAA,UAAA,GACAsjC,EAAAsnB,EAAA50D,KAAA,SACAd,EAAAU,KAAAuuC,MAAAruB,IAAAwtB,GACAugH,GAAA,EACA,GAAA,QAAAvgH,EAAA,CACA,IAAAwgH,EAAA,EACA,OAAAluJ,KAAAuuC,MAAAruB,IAAA,aACAguI,EAAA,GAEAD,EAAAtwJ,EAAAC,KAAA0B,KAAA4uJ,MAEA,eAAAxgH,EACAugH,EAAAzyJ,IAAAC,QAAA0rB,eAAAC,mBAAA9nB,GAEAA,GAAA,IAAA3B,EAAAC,KAAA0B,EAAAwL,cACAmjJ,GAAA,GAMA,OAHAA,GAAAD,GACAxyJ,IAAAC,QAAAgc,aAAAoC,cAAAm7C,EAAAi5F,GAEAA,GAEAE,qBAAA,WACA,mBAAAnuJ,KAAAwB,QAAA03D,UACAl5D,KAAAwB,QAAA03D,cAKA19D,IAAAkG,MAAAgrJ,QAAA0B,sBAAA5yJ,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,oCACAsZ,SAAA,IACA8iB,OAAA,KACAuxD,QAAA,KACAr1E,kBAAA,GAEA5B,OAAA,CACA4nB,kBAAA,OACAgzF,+BAAA,wBACAC,2BAAA,iBAEAr3G,mBAAA,WACAz7C,IAAAiC,IAAA0jB,QAAAotI,iBAAA5wJ,EAAAgC,KAAA,SAAAk4E,GACA73E,KAAAuuC,MAAAspC,EACA73E,KAAA+rC,UACA/rC,QAEAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,QAGAgG,YAAA,WACA,MAAAv0C,KAAAuuC,OAKA,IAAA/yC,IAAAi8D,OAAAz3D,KAAAtC,IAAAsC,KAAAuuC,OAEA/yC,IAAAC,QAAAgc,aAAA+E,oBAAAxc,KAAA7C,EAAA,uBAEA6C,KAAAwuJ,YAAA,IAAAhzJ,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,iCACAkwE,iBAAA,GACAprB,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,sBAAA9tC,IACAU,QAGAA,KAAAyuJ,WAAA,IAAAjzJ,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,gCACAkwE,iBAAA,GACAprB,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,qBAAA9tC,IACAU,SArBA,IAAAxE,IAAAigE,OAAAz7D,KAAA7C,EAAA,oBAwBAuxJ,sBAAA,SAAArxJ,GACA,IACAsxJ,EACAC,EAFA7xJ,EAAAI,EAAAE,EAAAgc,eAAAzX,MAAAoB,OAGA6rJ,EAAA9xJ,EAAAiF,QAAA,KAGA4sJ,GAFA,IAAAC,GACAF,EAAA5xJ,EAAAyF,OAAA,EAAAqsJ,GACA9xJ,EAAAyF,OAAAqsJ,EAAA,EAAAlxJ,EAAAC,KAAAb,GAAA8xJ,KAGAF,EAAA5xJ,EACA,IAEAiD,KAAAuuC,MAAAnB,IAAA,CACAuhH,UAAAA,EACAC,SAAAA,KAGAE,cAAA,WACA,IAAAC,EAAAvzJ,IAAAC,QAAA0rB,eAAAO,cAAA1nB,KAAAuuC,MAAAruB,IAAA,eACAkI,EAAA5sB,IAAAC,QAAA0rB,eAAAgB,yBAAA4mI,GACA/uJ,KAAA7C,EAAA,gBAAA+c,SAAA,SAAAkO,IAEAgwC,SAAA,WACA,IAAAt+C,GAAA,EAEAk1I,EAAA,EAAArxJ,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,eAAA,EAAAviB,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,aACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,0BAAA6xJ,GACAl1I,EAAAk1I,GAAAl1I,EAEA,IAAAm0D,EAAA,EAAAtwE,EAAAC,KAAAoC,KAAAuuC,MAAAruB,IAAA,OAAAld,QACAxH,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,yBAAA8wE,GACAn0D,EAAAm0D,GAAAn0D,EAEA,IAAAm1I,EAAAzzJ,IAAAC,QAAA0rB,eAAAC,mBAAApnB,KAAAuuC,MAAAruB,IAAA,eACA1kB,IAAAC,QAAAgc,aAAAoC,cAAA7Z,KAAA7C,EAAA,sBAAA8xJ,GACAn1I,EAAAm1I,GAAAn1I,EAEA,IAAAo1I,EAAA,MAAAlvJ,KAAAyuJ,WAAAn2F,WACAx+C,EAAAo1I,GAAAp1I,EACA9Z,KAAA7C,EAAA,2BAAA6c,YAAA,iBACAk1I,GACAlvJ,KAAA7C,EAAA,2BAAA+c,SAAA,iBAGA,IAAAi1I,EAAA,MAAAnvJ,KAAAwuJ,YAAAl2F,WAOA,OANAx+C,EAAAq1I,GAAAr1I,EACA9Z,KAAA7C,EAAA,4BAAA6c,YAAA,iBACAm1I,GACAnvJ,KAAA7C,EAAA,4BAAA+c,SAAA,iBAGAJ,GAEAs1I,gBAAA,SAAAl4F,EAAAwzD,GACA1qH,KAAAuuC,MAAAoC,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,SAAAS,GACA,mBAAA82D,GACAA,EAAAl3D,KAAAuuC,QAEAvuC,MACAsU,MAAA3W,EAAAgC,KAAA,WACA,mBAAA+qH,GACAA,EAAA1qH,KAAAuuC,QAEAvuC,SAGA2wC,KAAA,WACA,IAAA8zC,EAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAo4D,WACAp4D,KAAAovJ,gBAAAzxJ,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAA23D,QACAn5D,KAAAwB,QAAA23D,OAAAn5D,KAAAuuC,OAEAvuC,KAAA64C,eACA74C,MAAArC,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAkpH,SACA1qH,KAAAwB,QAAAkpH,QAAA1qH,KAAAuuC,OAEAvuC,KAAA64C,eACA74C,OAEAykF,EAAAloF,YAKAf,IAAAkG,MAAAgrJ,QAAA2C,yBAAA7zJ,IAAAkG,MAAAgrJ,QAAA0B,sBAAAnuJ,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,8BACAsW,aAAA,CACAi8G,mBAAA,IAAA9zJ,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4CAEAsZ,SAAA,IACA8iB,OAAA,KACAuxD,QAAA,KACAr1E,kBAAA,EACAqB,mBAAA,EACA64G,uBAAA,MAEA97G,OAAA,CACA4nB,kBAAA,OACAgzF,+BAAA,wBACAC,2BAAA,gBACAkB,oBAAA,wBAEAv4G,mBAAA,WACAj3C,KAAAuvJ,uBAAA,EAAAvvJ,KAAAwB,QAAA+tJ,uBAAAvvJ,KAAAwB,QAAA+tJ,uBAAA/zJ,IAAAiC,IAAA0jB,QAAAm9C,aAAAxhE,GACAtB,IAAAiC,IAAA0jB,QAAAm9C,aAAAuuC,gBAAAlvG,EAAAgC,KAAA,SAAA8vJ,GACAzvJ,KAAA8sG,YAAA2iD,EACA,IAAAC,EAAAl0J,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,QACAlgB,KAAA8sG,YAAAG,MAAAjtG,KAAA8sG,YAAAG,MAAAyiD,EACA1vJ,KAAA8sG,YAAAG,MAAA,IACAjtG,KAAA8sG,YAAAG,MAAA,GAEAjtG,KAAA8sG,YAAAK,IAAAntG,KAAA8sG,YAAAK,IAAAuiD,EACA1vJ,KAAA8sG,YAAAK,IAAA,IACAntG,KAAA8sG,YAAAK,IAAA,GAEAntG,KAAA8sG,YAAAO,WAAArtG,KAAA8sG,YAAAO,WAAAqiD,EACA1vJ,KAAA8sG,YAAAO,WAAA,IACArtG,KAAA8sG,YAAAO,WAAA,GAGA7xG,IAAAiC,IAAA0jB,QAAAotI,iBAAA5wJ,EAAAgC,KAAA,SAAAk4E,GACA73E,KAAAuuC,MAAAspC,EACA73E,KAAA2vJ,cAAA,MAAA3vJ,KAAAuuC,MAAAruB,IAAA,cACAlgB,KAAA+rC,UACA/rC,QACAA,QAEAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAohH,cAAA3vJ,KAAA2vJ,cACAJ,uBAAAvvJ,KAAAuvJ,uBACAj7I,MAAAtU,KAAAsU,QAGAigC,YAAA,WACA,MAAAv0C,KAAAuuC,OAKAvuC,KAAA2vJ,gBACA,IAAAn0J,IAAAi8D,OAAAz3D,KAAAtC,IAAAsC,KAAAuuC,OAEA/yC,IAAAC,QAAAgc,aAAA+E,oBAAAxc,KAAA7C,EAAA,uBAEA6C,KAAAwuJ,YAAA,IAAAhzJ,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,iCACAkwE,iBAAA,GACAtrB,aAAA/hD,KAAAuuC,MAAAruB,IAAA,uBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,sBAAA9tC,IACAU,QAGAA,KAAAyuJ,WAAA,IAAAjzJ,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,gCACAkwE,iBAAA,GACAtrB,aAAA/hD,KAAAuuC,MAAAruB,IAAA,sBACA+hC,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAuuC,MAAAnB,IAAA,qBAAA9tC,IACAU,SAIAA,KAAA4vJ,8BA5BA,IAAAp0J,IAAAigE,OAAAz7D,KAAA7C,EAAA,oBA8BA0yJ,qBAAA,SAAAxyJ,GACA2C,KAAAuvJ,uBAAAhtJ,SAAApF,EAAAE,EAAAgc,eAAAjZ,KAAA,UACAJ,KAAA4vJ,8BAEAA,2BAAA,WACA5vJ,KAAAw0C,mBAAA,EAAAx0C,KAAAwB,QAAA6xC,aAAAi8G,mBAAAtvJ,KAAA7C,EAAA,wBAAA,CACAoyJ,uBAAAvvJ,KAAAuvJ,yBAEAvvJ,KAAA8vJ,eAEAA,YAAA,WACA,IAAA/iD,EACA,OAAA/sG,KAAAuvJ,wBACA,KAAA/zJ,IAAA+Q,UAAAkyD,cAAAr5B,MAAA4nE,MACAD,EAAA/sG,KAAA8sG,YAAAG,MACA,MACA,KAAAzxG,IAAA+Q,UAAAkyD,cAAAr5B,MAAA8nE,IACAH,EAAA/sG,KAAA8sG,YAAAK,IACA,MACA,KAAA3xG,IAAA+Q,UAAAkyD,cAAAr5B,MAAAgoE,WACAL,EAAA/sG,KAAA8sG,YAAAO,WACA,MACA,QACAN,EAAA,EAGA/sG,KAAA7C,EAAA,kBAAAsE,KAAAjG,IAAAC,QAAAkZ,cAAAmC,eAAAi2F,EAAAvxG,IAAAiC,IAAA0jB,QAAAm9C,aAAAp+C,IAAA,aAAA,GAAA,KAEAywB,KAAA,WACA,IAAAo/G,EAAA/vJ,KAAA7C,EAAA,kBACAsnF,EAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBAOA4yJ,EAAA/6G,QAEA,IAAAg7G,EAAAhwJ,KAAAuuC,MAAAruB,IAAA,cACA+vI,EAAAtyJ,EAAAgC,KAAA,WACAnE,IAAAiC,IAAA0jB,QAAA+uI,mBAAAlwJ,KAAAuvJ,uBAAA5xJ,EAAAgC,KAAA,SAAAS,GACA,MAAAA,GAAA,MAAAA,EAAAk+D,cAVAmmB,EAAAloF,SACAf,IAAA60C,cAAAb,OAAAovB,YAAA,CACA7yC,QAAA,0FAYAvwB,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sCAEA/rB,KAAA64C,gBAEA74C,MAAArC,EAAAgC,KAAA,SAAAC,GACA,MAAAA,EAAAysB,cAAA,EAAA1uB,EAAAC,KAAAgC,EAAAysB,aAAAN,UACA/rB,KAAAsU,MAAA1U,EAAAysB,aAAAN,QACA/rB,KAAA2vJ,eACA3vJ,KAAAuuC,MAAA,IAAA/yC,IAAAwkB,OAAAs3D,QAAAC,YACAv3E,KAAA2vJ,eAAA,GAGA3vJ,KAAAuuC,MAAAnB,IAAA,aAAA4iH,GAEAhwJ,KAAA+rC,WAGAgkH,EAAAtuJ,KAAA,+EACAgjF,EAAAloF,SACAyD,KAAA7C,EAAA,aAAAsb,KAAA,YAAA,KAEAzY,QACAA,MAEAA,KAAA2vJ,cACAM,IAEAjwJ,KAAAo4D,YACAp4D,KAAAovJ,gBAAAzxJ,EAAAgC,KAAA,WACAswJ,KACAjwJ,MAAArC,EAAAgC,KAAA,WACA,mBAAAK,KAAAwB,QAAAkpH,SACA1qH,KAAAwB,QAAAkpH,QAAA1qH,KAAAuuC,QAEAvuC,UAMAxE,IAAAwkB,OAAA0sI,QAAA,GAEAlxJ,IAAAwkB,OAAA0sI,QAAAW,YAAA7xJ,IAAAwkB,OAAA4sB,UAAA3sC,SAEAzE,IAAAwkB,OAAA0sI,QAAAQ,QAAA1xJ,IAAAwkB,OAAA4sB,UAAA3sC,SAIAzE,IAAAk3C,YAAAg6G,QAAA,GAEAlxJ,IAAAk3C,YAAAg6G,QAAAU,SAAA5xJ,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA0sI,QAAAQ,UC/gBA1xJ,IAAAkG,MAAA0gE,UAAA,GAEA5mE,IAAAkG,MAAA0gE,UAAAC,kBAAA7mE,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kCACAuZ,SAAA,IACAI,mBAAA,EACArB,kBAAA,KCNA75C,IAAAwkB,OAAA2F,YAAA,GAEAnqB,IAAAwkB,OAAA2F,YAAAwqI,WAAA30J,IAAAwkB,OAAA4sB,UAAA3sC,SAEAzE,IAAAwkB,OAAA2F,YAAAyqI,oBAAA50J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA0qI,mBAAA70J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA2qI,oBAAA90J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA4qI,oBAAA/0J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA6qI,oBAAAh1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA8qI,kBAAAj1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA+qI,oBAAAl1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAgrI,mBAAAn1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAirI,oBAAAp1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAkrI,oBAAAr1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAmrI,mBAAAt1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAorI,gBAAAv1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SAEAzE,IAAAwkB,OAAA2F,YAAAqrI,uBAAAx1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAsrI,qBAAAz1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAurI,4BAAA11J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAwrI,mBAAA31J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAyrI,mBAAA51J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA0rI,sBAAA71J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA2rI,0BAAA91J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA4rI,wBAAA/1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA6rI,eAAAh2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA8rI,uBAAAj2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA+rI,qBAAAl2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAgsI,sBAAAn2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAisI,qBAAAp2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA8qI,kBAAAj1J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAksI,oBAAAr2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAmsI,kBAAAt2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAosI,sBAAAv2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAqsI,iCAAAx2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAssI,yBAAAz2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAusI,oCAAA12J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAwsI,sBAAA32J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAAysI,0BAAA52J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA0sI,6BAAA72J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA2sI,mBAAA92J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SACAzE,IAAAwkB,OAAA2F,YAAA4sI,yBAAA/2J,IAAAwkB,OAAA2F,YAAAwqI,WAAAlwJ,SAEAzE,IAAAwkB,OAAA2F,YAAA6sI,YAAAh3J,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACA4sC,YAAA,eACA4B,UAAA,WACAzuC,KAAA8Y,GAAA,oBAAA,WACA,IAAAg/E,EAAA93F,KAAAkgB,IAAA,cACA,MAAA1kB,IAAAiC,IAAA0jB,SAAA,MAAA22E,GACA93F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA93E,IAAA43E,GACA,MAAA93F,KAAA+3F,WACA/3F,KAAA+3F,SAAApyE,YAAA3lB,OAIAA,KAAA+3F,SAAA,QAIAn3B,cAAA,SAAA6xF,GAAA,IAAAjxJ,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GACAQ,EAAA,KACA8nJ,EAAA/0J,EAAAgC,KAAA,SAAAm6F,GACA,IAAAvoF,EAAAuoF,EAAAhsF,MAAA,KACAlQ,EAAAD,EAAAC,KAAA2T,GACAo3I,EAAA3oJ,KACA2yJ,GAAA,EAaA,OAZAh1J,EAAAuhB,KAAA3N,EAAA,SAAAs3I,EAAAtlJ,GACA,MAAAolJ,IAIAplJ,EAAA,IAAA3F,EACA+0J,GAAA,IAAAhK,EAAAzoI,IAAA2oI,GAGAF,EAAAA,EAAAE,KAEA7oJ,MACA2yJ,GACA3yJ,MAcA,MAbA,UAAAxE,IAAAC,QAAAqW,cAAAC,YAAA0gJ,GACA90J,EAAAuhB,KAAAuzI,EAAA,SAAA34D,GAEAlvF,EADApJ,EAAAunJ,GACA2J,EAAA54D,IAAA,MAAAlvF,GAAAA,EAGA8nJ,EAAA54D,KAAA,MAAAlvF,GAAAA,KAKAA,EAAA8nJ,EAAAD,GAEA,MAAA7nJ,GAAAA,GAEAyB,MAAA,SAAAkiC,GAkBA,OAjBA,MAAAA,IACA,MAAA/yC,IAAAiC,IAAA0jB,SAAA,MAAAotB,EAAAupD,WACA93F,KAAA+3F,SAAAv8F,IAAAiC,IAAA0jB,QAAA62E,UAAA93E,IAAAquB,EAAAupD,YAEA,MAAAvpD,EAAAwpD,WACAxpD,EAAAupD,WAAAvpD,EAAAwpD,SAAAj7F,GACAkD,KAAA+3F,SAAAxpD,EAAAwpD,UAGAp6F,EAAAuhB,KAAAlf,KAAAgtC,SAAA,SAAAk8G,EAAAtoJ,GACA,IAAAgyJ,EAAArkH,EAAA3tC,GACA,MAAAgyJ,IACA5yJ,KAAAY,GAAA,IAAAsoJ,EAAA0J,KAEA5yJ,OAGAuuC,GAEA4C,WAAA,WACAxzC,EAAAuhB,KAAAlf,KAAAgtC,SAAA,SAAAk8G,EAAAtoJ,GACA,IAAA+kB,EAAA3lB,KAAAY,GACA,MAAA+kB,GAAAA,aAAAnqB,IAAAwkB,OAAA2F,YAAAwqI,YACAnwJ,KAAAotC,IAAAxsC,EAAA+kB,EAAAiqB,WAEA5vC,SAIAxE,IAAAwkB,OAAA2F,YAAAo0E,kBAAAv+F,IAAAwkB,OAAA2F,YAAA6sI,YAAAvyJ,OAAA,CACA+sC,SAAA,CACAtM,SAAAllC,IAAAwkB,OAAA2F,YAAAyqI,oBACA9wH,SAAA9jC,IAAAwkB,OAAA2F,YAAA0qI,mBACAwC,UAAAr3J,IAAAwkB,OAAA2F,YAAA2qI,oBACAwC,SAAAt3J,IAAAwkB,OAAA2F,YAAA4qI,oBACAryE,SAAA1iF,IAAAwkB,OAAA2F,YAAA6qI,oBACAuC,QAAAv3J,IAAAwkB,OAAA2F,YAAA8qI,kBACA3sG,SAAAtoD,IAAAwkB,OAAA2F,YAAA+qI,oBACAzrD,QAAAzpG,IAAAwkB,OAAA2F,YAAAgrI,mBACArY,UAAA98I,IAAAwkB,OAAA2F,YAAAirI,oBACAoC,UAAAx3J,IAAAwkB,OAAA2F,YAAAkrI,oBACAh8H,SAAAr5B,IAAAwkB,OAAA2F,YAAAmrI,mBACAx5F,MAAA97D,IAAAwkB,OAAA2F,YAAAorI,iBAEA5xJ,SAAA,WACA,OAAA,EAAAa,KAAAlD,GACAtB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,cACAG,MAAAU,KAAAlD,MAIAkD,KAAAkgB,IAAA,MAAA,EACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,iBAIA,EAAAa,KAAAkgB,IAAA,MACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,iBAIA,EAAAa,KAAAkgB,IAAA,cACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,iBAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,oBAMA3D,IAAAwkB,OAAA2F,YAAAs0E,mBAAAz+F,IAAAwkB,OAAA2F,YAAA6sI,YAAAvyJ,OAAA,CACA+sC,SAAA,CACAimH,KAAAz3J,IAAAwkB,OAAA2F,YAAAqrI,uBACA7H,UAAA3tJ,IAAAwkB,OAAA2F,YAAAsrI,qBACA7H,iBAAA5tJ,IAAAwkB,OAAA2F,YAAAurI,4BACAv0I,SAAAnhB,IAAAwkB,OAAA2F,YAAAwrI,mBACAtsC,SAAArpH,IAAAwkB,OAAA2F,YAAAyrI,mBACAtjH,YAAAtyC,IAAAwkB,OAAA2F,YAAA0rI,sBACAv6H,gBAAAt7B,IAAAwkB,OAAA2F,YAAA2rI,0BACA4B,aAAA13J,IAAAwkB,OAAA2F,YAAA4rI,wBACA7qH,IAAAlrC,IAAAwkB,OAAA2F,YAAA6rI,eACA7sH,aAAAnpC,IAAAwkB,OAAA2F,YAAA8rI,uBACApI,UAAA7tJ,IAAAwkB,OAAA2F,YAAA+rI,qBACAjuH,YAAAjoC,IAAAwkB,OAAA2F,YAAAgsI,sBACAtqH,WAAA7rC,IAAAwkB,OAAA2F,YAAAisI,qBACAmB,QAAAv3J,IAAAwkB,OAAA2F,YAAA8qI,kBACAhoH,SAAAjtC,IAAAwkB,OAAA2F,YAAAksI,oBACAmB,UAAAx3J,IAAAwkB,OAAA2F,YAAAkrI,oBACA/Q,OAAAtkJ,IAAAwkB,OAAA2F,YAAAmsI,kBACAn9H,YAAAn5B,IAAAwkB,OAAA2F,YAAAosI,sBACAoB,uBAAA33J,IAAAwkB,OAAA2F,YAAAqsI,iCACAlgI,eAAAt2B,IAAAwkB,OAAA2F,YAAAssI,yBACA/8H,0BAAA15B,IAAAwkB,OAAA2F,YAAAusI,oCACAl9H,YAAAx5B,IAAAwkB,OAAA2F,YAAAwsI,sBACA7I,gBAAA9tJ,IAAAwkB,OAAA2F,YAAAysI,0BACAgB,mBAAA53J,IAAAwkB,OAAA2F,YAAA0sI,6BACA1sH,SAAAnqC,IAAAwkB,OAAA2F,YAAA2sI,mBACAl5H,eAAA59B,IAAAwkB,OAAA2F,YAAA4sI,0BAEApzJ,SAAA,WACA,OAAA,EAAAa,KAAAlD,GACAtB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YAEA,CACAA,SAAA,cACAG,MAAAU,KAAAlD,MAIA,MAAAkD,KAAAkgB,IAAA,OAAA,EAAAlgB,KAAAkgB,IAAA,aACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,cAEA,CACA/gB,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,iBAIAa,KAAAkgB,IAAA,MAAA,EACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,iBAIA,EAAAa,KAAAkgB,IAAA,MACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,OAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,iBAIA,EAAAa,KAAAkgB,IAAA,cACA1kB,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,YACAG,MAAAU,KAAAkgB,IAAA,eAEA,CACA/gB,SAAA,YAEA,CACAA,SAAA,iBAKA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAA,EAAAU,KAAAkgB,IAAA,aAAAlgB,KAAAkgB,IAAA,aAAA,MAEA,CACA/gB,SAAA,oBAOA3D,IAAAkG,MAAAikB,YAAA,GAEAnqB,IAAAkG,MAAAikB,YAAA2jF,uBAAA9tG,IAAAkG,MAAAyzC,UAAAl1C,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BACAsZ,SAAA,KAEA7C,cAAA,CACA6nB,kBAAA,OACAi8C,oBAAA,UAEAtjE,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,UAGAuvB,YAAA,WACAv0C,KAAAqzJ,iBAAA,IAAA73J,IAAAkG,MAAAikB,YAAA2tI,kBAAA,CACA7+G,GAAAz0C,KAAA7C,EAAA,gBACAoxC,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,WAGA2rB,KAAA,WACA,IAAAn1C,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBACA6C,KAAAqzJ,iBAAA1iH,KAAAhzC,EAAAgC,KAAA,WAMA,GALAK,KAAA64C,cACAr9C,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,sBAGA,MAAAvwB,IAAAiC,IAAA0jB,QAAA+4B,KAAA,CACA,IAAAq5G,EAAA,WACA/3J,IAAAiC,IAAA0jB,QAAA04E,uBAAA,WACAr+F,IAAAiC,IAAA7B,UAAA+wG,qBAGA3sG,KAAAuuC,MAAAruB,IAAA,QAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,MACAqzI,IAEA,MAAAvzJ,KAAAuuC,MAAAruB,IAAA,OAAAlgB,KAAAuuC,MAAAruB,IAAA,gBAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,eACAqzI,MAGAvzJ,QAEA+5D,OAAA,WACA/5D,KAAA64C,iBAIAr9C,IAAAkG,MAAAikB,YAAA2tI,kBAAA93J,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,sBACAuW,aAAA,GAEAG,OAAA,CACA+/G,yCAAA,iBACAC,uCAAA,eACAC,0CAAA,kBACAC,wCAAA,iBAEA7/G,kBAAA,WACA9zC,KAAA4zJ,oBAEAA,iBAAA,WACA,MAAA5zJ,KAAAwB,QAAAwjB,QACAhlB,KAAAg6F,wBAAAr8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,OAGAA,KAAA65F,uBAAAl8F,EAAAgC,KAAA,WACAK,KAAAg6F,wBAAAr8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,QAGA65F,uBAAA,SAAAhhF,GACA7Y,KAAAuuC,MAAAsrD,uBAAAl8F,EAAAgC,KAAA,SAAAm6F,GACA95F,KAAAylB,kBAAAq0E,EACA,mBAAAjhF,GACAA,EAAAihF,IAEA95F,QAEAg6F,wBAAA,SAAAnhF,GACA7Y,KAAAuuC,iBAAA/yC,IAAAwkB,OAAAg4E,UAAA+xD,SACA/pJ,KAAAuuC,MAAAyrD,wBAAAr8F,EAAAgC,KAAA,SAAAm6F,GACA95F,KAAA6zJ,mBAAA/5D,EACA,mBAAAjhF,GACAA,EAAAihF,IAEA95F,OAGAA,KAAAuuC,MAAAyrD,wBAAAh6F,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KAAAa,EAAAgC,KAAA,SAAAm6F,GACA95F,KAAA6zJ,mBAAA/5D,EACA,mBAAAjhF,GACAA,EAAAihF,IAEA95F,QAGAg0C,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACAvpB,QAAAhlB,KAAAwB,QAAAwjB,QACAS,kBAAAzlB,KAAAylB,kBACAouI,mBAAA7zJ,KAAA6zJ,mBACA55G,WAAAj6C,KAAAi6C,WACA65G,cAAAt4J,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAq9F,iCAAAv4J,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAq9F,gCACAC,gBAAAx4J,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAg8C,2BAGAn+D,YAAA,WACA,IAAA01G,EAAAtsJ,EAAAgC,KAAA,SAAAs0J,EAAAC,GACA,IAAAC,EAAAh3J,EAAA82J,GACAG,EAAAD,EAAA/zJ,KAAA,cACAqyJ,EAAAyB,EAAAE,GACA,MAAA3B,GACA,IAAAj3J,IAAAi8D,OAAA08F,EAAA1B,EAAA,CACAz6E,kBAAA,EACAtgB,cAAA,CACA,SAEA0V,YAAAzvE,EAAAgC,KAAA,SAAA00J,EAAA/zJ,EAAAsB,GACA5B,KAAAs0J,kBAAAD,EAAA/zJ,EAAAsB,GACAsyJ,EAAA1mH,SAAA,GACAxtC,SAGAA,MAEA,MAAAA,KAAAylB,mBACA9nB,EAAAuhB,KAAAlf,KAAA7C,EAAA,gCAAA,SAAA82J,GACAhK,EAAAgK,EAAAj0J,KAAAylB,oBACAzlB,MAGA,MAAAA,KAAA6zJ,oBACAl2J,EAAAuhB,KAAAlf,KAAA7C,EAAA,iCAAA,SAAA82J,GACAhK,EAAAgK,EAAAj0J,KAAA6zJ,qBACA7zJ,OAGAi6C,WAAA,SAAAyyB,GACA,OAAAlxE,IAAAiC,IAAA0jB,QAAA84B,WAAAyyB,IAEA4nF,kBAAA,SAAAC,EAAAj0J,EAAAsB,GAEA,IAAA6c,EAAA81I,EAAAn0J,KAAA,SACA,GAAA,MAAAqe,EAAA,CACA,IAAAmjC,EAAA2yG,EAAA75I,QAAA,mBAAA7C,KAAA,SACA,GAAAjW,GAAA,EAAA6c,EACA9gB,EAAAuhB,KAAA0iC,EAAA,SAAA4yG,GACA,IAAAC,EAAAt3J,EAAAq3J,GACA7J,EAAA8J,EAAAr0J,KAAA,SACA,MAAAuqJ,GAAAA,EAAAlsI,IACAg2I,EAAAh8I,KAAA,UAAA7W,GACA6yJ,EAAA7oI,QAAA,kBAIA,IAAAhqB,EAAA,CAEA,GAIA,MAJAjE,EAAAka,KAAA+pC,EAAA,SAAA4yG,GACA,IAAA5J,EAAAztJ,EAAAq3J,GAAAp0J,KAAA,SAEA,OADAjD,EAAAq3J,GAAAp0J,KAAA,WACAqe,GAAAne,IAAAsqJ,GAAAztJ,EAAAq3J,GAAA/7I,KAAA,aAEA,OAEA9a,EAAAuhB,KAAA0iC,EAAA,SAAA4yG,GACA,IAAAC,EAAAt3J,EAAAq3J,GACA7J,EAAA8J,EAAAr0J,KAAA,SACA,MAAAuqJ,GAAAlsI,EAAAksI,IACA8J,EAAAh8I,KAAA,UAAA7W,GACA6yJ,EAAA7oI,QAAA,gBAMAi/H,eAAA,WAIA7qJ,KAAAylB,kBAAA2nB,IAAA,CACAsnH,aAAA,KACA58D,WAAA,KACAh7F,GAAAkD,KAAAuuC,MAAAruB,IAAA,MACAuxE,UAAA,IAEAzxF,KAAA+rC,UAEAg/G,aAAA,WAGA,IAAAC,EAAArtJ,EAAAgC,KAAA,WACAK,KAAA65F,uBAAAl8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAA,KAAAylB,kBAAAynB,QASA89G,IARAhrJ,KAAAylB,kBAAA09B,QAAA,CACAzuC,QAAA/W,EAAAgC,KAAA,WACAK,KAAAylB,kBAAA,KACAulI,KACAhrJ,SAOAirJ,gBAAA,WAIAjrJ,KAAA6zJ,mBAAAzmH,IAAA,CACAsnH,aAAA,KACA58D,WAAA,KACAh7F,GAAAkD,KAAAuuC,MAAAruB,IAAA,MACA2L,UAAA7rB,KAAAwB,QAAAwjB,QAAAhlB,KAAAwB,QAAAwjB,QAAAloB,GAAA,KACA20F,UAAA,IAEAzxF,KAAA+rC,UAEAm/G,cAAA,WAGA,IAAAF,EAAArtJ,EAAAgC,KAAA,WACAK,KAAAg6F,wBAAAr8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAA,KAAA6zJ,mBAAA3mH,QASA89G,IARAhrJ,KAAA6zJ,mBAAA1wG,QAAA,CACAzuC,QAAA/W,EAAAgC,KAAA,WACAK,KAAA6zJ,mBAAA,KACA7I,KACAhrJ,SAOA2wC,KAAA,SAAA93B,GACA,IAAAmyI,EAAArtJ,EAAAgC,KAAA,WACAK,KAAAg6F,wBAAAr8F,EAAAgC,KAAA,WACAK,KAAA+rC,UACA/rC,QACAA,MACAmrJ,EAAAxtJ,EAAAgC,KAAA,WACA,MAAAK,KAAA6zJ,oBAAA7zJ,KAAA6zJ,mBAAApmH,aACAztC,KAAA6zJ,mBAAAljH,KAAA,KAAA,CACAj8B,QAAA/W,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,KAEA7Y,QAIA,mBAAA6Y,GACAA,KAGA7Y,MACA,MAAAA,KAAAylB,mBAAAzlB,KAAAylB,kBAAAgoB,aACAztC,KAAAylB,kBAAAkrB,KAAA,KAAA,CACAj8B,QAAA,WACAy2I,IACAH,OAKAG,OC1kBA3vJ,IAAAkG,MAAA0iE,OAAA,GACA5oE,IAAAkG,MAAA0iE,OAAA+5E,aAAA3iJ,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,iBACAsW,aAAA,CACAshH,UAAA,IAAAn5J,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,4BACA63H,MAAA,IAAAp5J,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,wBAEA83H,WAAA,EACA3yF,sBAAA,IACAyqD,mBAAA,GAEAl5E,OAAA,CACAqhH,6BAAA,YACAC,gCAAA,gBACAC,wBAAA,SACAC,sBAAA,cACAC,2BAAA,kBACAC,kBAAA,iBAEArhH,kBAAA,WACA,GAAA,MAAA9zC,KAAA0tD,YAAA,MAAA1tD,KAAAwB,QAAAwjB,QAMA,OALAhlB,KAAAwB,QAAAqzJ,UAAA70J,KAAAwB,QAAAwjB,QAAA47C,cAAA,0BACA5gE,KAAAwB,QAAAwjB,QAAAowI,mBAAAz3J,EAAAgC,KAAA,SAAAykE,GACApkE,KAAA0tD,WAAA0W,EACApkE,KAAA+rC,UACA/rC,QACA,GAGAi0C,aAAA,WACAj0C,KAAAwpC,QAAA,MACAxpC,KAAAg0C,WAAA,CACA0Z,WAAA1tD,KAAA0tD,WACA2nG,eAAAr1J,KAAAwpC,QACA8rH,eAAA,CAAA,OAAA,QAAA,OAAA,SAGA/gH,YAAA,WACA,MAAAv0C,KAAA0tD,WACA,IAAAlyD,IAAAigE,OAAAz7D,KAAA7C,EAAA,mBAGA6C,KAAAu1J,eAGAv1J,KAAAw1J,aAAA,IAAAh6J,IAAAkG,MAAA+zJ,SAAAC,aAAA,CACAjhH,GAAAz0C,KAAAtC,IACAwrH,UAAA,EACA/yE,QAAAx4C,EAAAgC,KAAA,WACAK,KAAAw0G,eACAx0G,QAGAA,KAAA21J,gBAAA,IAAAn6J,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAz0C,KAAA7C,EAAA,8BACAshI,gBAAA,EACAjpE,kBAAA,CACA3jD,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,MAEA6+C,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAssC,UACAtsC,QAGAA,KAAA41J,cAAA,IAAAp6J,IAAAomD,OAAA2T,WAAA,CACA9gB,GAAAz0C,KAAA7C,EAAA,4BACAshI,gBAAA,EACAjpE,kBAAA,CACA3jD,OAAArW,IAAAC,QAAAwH,YAAAE,YAAA2B,WAAA1B,MAEA6+C,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAssC,UACAtsC,SAGAu1J,aA3EA,WA4EA,GAAA,IAAA53J,EAAAC,KAAAoC,KAAA0tD,WAAA1tC,QACAhgB,KAAA7C,EAAA,iCAAA6c,YAAA,cAEA,CACA,IAAA67I,EACA,OAAA71J,KAAAwpC,SACA,IAAA,OACA,IAAA,QACA,IAAA,MACA,IAAA/mC,EACA,SAAAzC,KAAAwpC,QACA/mC,EAAA,OAEA,UAAAzC,KAAAwpC,QACA/mC,EAAA,OAEA,QAAAzC,KAAAwpC,UACA/mC,EAAA,qBAEAozJ,EAAAl4J,EAAA6rC,QAAAxpC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,OAAA/yC,IAAAC,QAAAwH,YAAAC,cAAAqrC,EAAAruB,IAAA,aAAAzd,KAEA,MACA,IAAA,OAGAozJ,EAAAl4J,EAAA6rC,QAAAxpC,KAAA0tD,WAAA1tC,OAAA,SAAAuuB,GACA,IAAAunH,EAAAt6J,IAAAC,QAAAwH,YAAAmI,cAAAmjC,EAAAruB,IAAA,cACA,OAAA1kB,IAAAC,QAAAwH,YAAAC,cAAA4yJ,EAAApqJ,MAJA,UAIA,MAAAlQ,IAAAC,QAAAwH,YAAAC,cAAA4yJ,EAAAlqJ,IAHA,kBAQA5L,KAAA7C,EAAA,qBAAA63C,QACAr3C,EAAAuhB,KAAA22I,EAAAl4J,EAAAgC,KAAA,SAAAykE,EAAA/hE,GACA,IAAA0zJ,EAAAv6J,IAAAivC,WAAAe,iBAAAW,cAAAnsC,KAAAwB,QAAA6xC,aAAAshH,UAAA,CACAtyJ,KAAAA,EACAwyJ,UAAA70J,KAAAwB,QAAAqzJ,YAEAmB,EAAAD,EAAAl+I,KAAA,sBACAla,EAAAuhB,KAAAklD,EAAAzmE,EAAAgC,KAAA,SAAAi1J,GACA50J,KAAAi2J,YAAAD,EAAApB,IACA50J,OACAA,KAAA7C,EAAA,qBAAA2D,OAAAi1J,IACA/1J,OACAxE,IAAAiC,IAAA6jE,WAAA5H,WAGAptB,OAAA,WACA,IAAAgD,EAAAtvC,KACArB,EAAAqB,KAAA7C,EAAA,mBAAAyE,MAAAgB,cACAszJ,EAAAl2J,KAAA21J,gBAAAr9F,WACA69F,EAAAn2J,KAAA41J,cAAAt9F,WAEAt4D,KAAA7C,EAAA,uBAAA+hB,KAAA,WACA,IAAAk3I,EAAAj5J,EAAA6C,MACAq2J,EAAA,EAEAD,EAAAv+I,KAAA,4BAAAqH,KAAA,WACA,IAAAo3I,EAAAn5J,EAAA6C,MACAsuD,EAAAnxD,EAAA6C,MAAAI,KAAA,OACAw0J,EAAAtlH,EAAAoe,WAAAxtC,IAAAouC,GACA,GAAA,EAAA3wD,EAAAC,KAAAe,KAAA,IAAAi2J,EAAA10I,IAAA,QAAAtd,cAAAZ,QAAArD,GACA23J,EAAAp8I,SAAA,eAEA,GAAA,MAAAg8I,GAAA,MAAAC,EAAA,CACA,IAAArzJ,EAAA8xJ,EAAA10I,IAAA,aACA,MAAAg2I,GAAApzJ,EAAAozJ,EACAI,EAAAp8I,SAAA,UAEA,MAAAi8I,GAAAA,EAAArzJ,EACAwzJ,EAAAp8I,SAAA,WAGAo8I,EAAAt8I,YAAA,UACAq8I,UAIAC,EAAAt8I,YAAA,UACAq8I,MAKA,IAAAA,EACAD,EAAAl8I,SAAA,UAGAk8I,EAAAp8I,YAAA,aAIAu8I,cAAA,SAAAl5J,GACA,IAAAm5J,EAAAr5J,EAAAE,EAAAgc,eACArZ,KAAA7C,EAAA,aAAA80G,IAAAukD,GAAAx8I,YAAA,YACAw8I,EAAAt8I,SAAA,YAEAla,KAAAwpC,QAAAgtH,EAAAp2J,KAAA,WACAJ,KAAAw1J,aAAAz8G,QACA/4C,KAAAu1J,gBAEAU,YAlLA,SAkLAt+I,EAAAmzB,GACA,IAAAglF,EAAAt0H,IAAAivC,WAAAe,iBAAAW,cAAAnsC,KAAAwB,QAAA6xC,aAAAuhH,MAAA,CACArmH,MAAAzD,EACA+pH,UAAA70J,KAAAwB,QAAAqzJ,UACA3yF,sBAAAliE,KAAAwB,QAAA0gE,sBACAyqD,kBAAA3sH,KAAAwB,QAAAmrH,oBAGA,OADAh1G,EAAA7W,OAAAgvH,GACAA,GAEA2mC,UAAA,SAAAp5J,GACA,IAAAytC,EAAA9qC,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,4BAAAta,KAAA,QACA5E,IAAAiC,IAAAo2B,KAAA08F,kBAAA,CACAhiF,MAAAzD,EACAgqF,YAAA90H,KAAAwB,QAAAqzJ,aAGA6B,cAAA,SAAAr5J,GACA2C,KAAA0tD,WAAAxtC,IAAA/iB,EAAAE,EAAAgc,eAAAqB,QAAA,4BAAAta,KAAA,QACA2kH,YAEA4xC,YAAA,SAAAt5J,GACA,IAAAi5J,EAAAn5J,EAAAE,EAAAgc,eAAAqB,QAAA,4BACA4zC,EAAAgoG,EAAAl2J,KAAA,OACAw2J,EAAA52J,KAAA0tD,WAAAxtC,IAAAouC,GACA,MAAAtuD,KAAAw1J,aAAA9nG,WAAAxtC,IAAAouC,IAGAtuD,KAAAw1J,aAAAqB,YAAAD,GACAN,EAAAt8I,YAAA,YACAs8I,EAAAz+I,KAAA,iBAAAmC,YAAA,mBAAAE,SAAA,eAGAla,KAAAw1J,aAAAsB,SAAAF,GACAN,EAAAp8I,SAAA,YACAo8I,EAAAz+I,KAAA,iBAAAmC,YAAA,aAAAE,SAAA,oBAGA,IAAA68I,EAAAT,EAAA57I,QAAA,uBACA,EAAA/c,EAAAC,KAAAm5J,EAAAl/I,KAAA,6CACAk/I,EAAAl/I,KAAA,sBAAAmC,YAAA,mBAAAE,SAAA,aACA68I,EAAA/8I,YAAA,cAGA+8I,EAAAl/I,KAAA,sBAAAmC,YAAA,aAAAE,SAAA,mBACA68I,EAAA78I,SAAA,cAGA88I,gBAAA,SAAA35J,GACA,IAAAiyC,EAAAtvC,KACA+2J,EAAA55J,EAAAE,EAAAgc,eAAAqB,QAAA,uBACAk2F,EAAAmmD,EAAAj/I,SAAA,YACAm/I,EAAA,GACAF,EAAAl/I,KAAA,4BAAAqH,KAAA,WACA,IAAAo3I,EAAAn5J,EAAA6C,MACAsuD,EAAAgoG,EAAAl2J,KAAA,OACA62J,EAAA74I,KAAAkxB,EAAAoe,WAAAxtC,IAAAouC,IACAsiD,GACAmmD,EAAAl/I,KAAA,qCAAAmC,YAAA,mBAAAE,SAAA,aACAo8I,EAAAt8I,YAAA,cAGA+8I,EAAAl/I,KAAA,qCAAAmC,YAAA,aAAAE,SAAA,mBACAo8I,EAAAp8I,SAAA,eAIA02F,GACA5wG,KAAAw1J,aAAAqB,YAAAI,GACAF,EAAA/8I,YAAA,cAGAha,KAAAw1J,aAAAsB,SAAAG,GACAF,EAAA78I,SAAA,cAGAs6F,YAAA,WACAx0G,KAAA7C,EAAA,kEAAA6c,YAAA,YACAha,KAAA7C,EAAA,qCAAA6c,YAAA,mBAAAE,SAAA,gBAIA1e,IAAAk3C,YAAA0xB,OAAA,GACA5oE,IAAAk3C,YAAA0xB,OAAA8yF,WAAA17J,IAAAk3C,YAAA9P,MAAAsnF,UAAAjqH,OAAA,CACAsuC,MAAA/yC,IAAAwkB,OAAA4iB,MAAAujF,KACAhnH,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,UAEA,CACAA,SAAA,QACAG,MAAAU,KAAAwB,QAAA21J,gBAMA37J,IAAAmhC,QAAAynC,OAAA,CACA7qB,OAAA,CACA,CACAE,MAAA,mBACA18C,KAAA,cACA8b,SAAA,SAAA/b,GACA,IAAAsnE,EAAA,IAAA5oE,IAAAk3C,YAAA0xB,OAAA8yF,WAAA,KAAA,CACAC,UAAAr6J,IAEAsnE,EAAAv4B,MAAA,CACAn3B,QAAA,WACAlZ,IAAAiC,IAAAo2B,KAAAgwC,WAAAroE,IAAAkG,MAAA0iE,OAAA+5E,aAAA,CACAzwF,WAAA0W,SAMA,CACA3qB,MAAA,6BACA18C,KAAA,gBACA8b,SAAA,SAAAgT,GACArwB,IAAAmhC,QAAAgkH,YAAAC,qBAAAr+I,SAAAspB,GAAA,mBAGA,CACA4tB,MAAA,sCACA18C,KAAA,gBACA8b,SAAA,SAAAgT,EAAAurI,GACA57J,IAAAmhC,QAAAgkH,YAAAC,qBAAAr+I,SAAAspB,GAAA,qBAMArwB,IAAAiC,IAAA6hE,UAAA9jE,IAAAmhC,QAAAynC,OAAA7qB,QCxTAp8C,EAAA,WAGA,IAFA,IAAAk6J,EAAA,EACAC,EAAA,CAAA,KAAA,MAAA,SAAA,KACAvsI,EAAA,EAAAA,EAAAusI,EAAA56J,SAAAZ,OAAAy7J,wBAAAxsI,EACAjvB,OAAAy7J,sBAAAz7J,OAAAw7J,EAAAvsI,GAAA,yBACAjvB,OAAA07J,qBAAA17J,OAAAw7J,EAAAvsI,GAAA,yBAAAjvB,OAAAw7J,EAAAvsI,GAAA,+BAGAjvB,OAAAy7J,wBACAz7J,OAAAy7J,sBAAA,SAAA1+I,GACA,IAAA4+I,GAAA,IAAAn1J,MAAA2I,UACAysJ,EAAAlyJ,KAAAoT,IAAA,EAAA,IAAA6+I,EAAAJ,IACAv6J,EAAAhB,OAAAo1C,WAAA,WACAr4B,EAAA4+I,EAAAC,IAEAA,GAEA,OADAL,EAAAI,EAAAC,EACA56J,IAGAhB,OAAA07J,uBACA17J,OAAA07J,qBAAA,SAAA16J,GACAk0C,aAAAl0C,OAIAtB,IAAAC,QAAAk8J,aAAA,CACAC,aAAA,SAAAC,EAAAC,EAAAC,EAAA76F,GAGA,OAFA26F,GAAA36F,GAEA66F,KADAF,EACAA,EAAAA,EAAAA,EAAA,GAAAC,IAIAt8J,IAAAkG,MAAA0iE,OAAAC,YAAA7oE,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gBACAi7H,UAAA,WACAC,UAAA,IACAC,UAAA,EACAC,QAAA,IACAC,iBAAA,EACAtjC,aAAA,EACAujC,kBAAA,EACA98G,cAAA,EACA6b,SAAAz5D,EAAAu4C,KACAoiH,oBAAA,EACAC,aAAA,CACA,CACA3zF,MAAA,GACA0jB,KAAA,CAAA,SAAA,OACAzvE,SAAA,WACA7Y,KAAAmjD,YAGA,CACAyhB,MAAA,GACA/rD,SAAA,WACA7Y,KAAAq/C,aAGA,CACAulB,MAAA,GACA/rD,SAAA,WACA7Y,KAAAs/C,SAGA,CACAslB,MAAA,GACAnrD,UAAA,EACAZ,SAAA,WACA7Y,KAAA46F,eACAz9F,EAAArB,QAAAw/D,UAGA,CACAsJ,MAAA,GACAnrD,UAAA,EACAZ,SAAA,WACA7Y,KAAAmjD,cAKA1P,OAAA,CACA+kH,iBAAA,WACAC,iBAAA,OACAC,0BAAA,cACAC,sBAAA,YAEA7kH,kBAAA,WACA,IAAA8kH,EAAAv8J,SAAAy1F,cAAA,yBACA8mE,IACAA,EAAAz8J,QAAA,+EAGA,IAAAwkE,EAAAxjE,EAAA,QAKA,GAFA6C,KAAAg3C,WAAA75C,EAAA,IAAA6C,KAAAwB,QAAAw2J,YAEA,IAAAr6J,EAAAC,KAAAoC,KAAAtC,KAAA,CACA,IAAA++D,EAAAt/D,EAAA,QAAA,CACAL,GAAAkD,KAAAwB,QAAAw2J,YAEAr3F,EAAA7/D,OAAA27D,GACAz8D,KAAAg3C,WAAAylB,GAGAkE,EAAA9iE,IAAA,WAAA,UAEAmC,KAAA64J,cAAA,GACA74J,KAAA84J,kBAAA,EACA94J,KAAAi4J,UAAA,IAEAj4J,KAAAwB,QAAAu3J,cAAAv9J,IAAAiC,IAAAiuB,OAAAkvB,kBACA56C,KAAAwB,QAAAi4C,OACAj+C,IAAAiC,IAAAiuB,OAAAC,SAAA3rB,KAAAwB,QAAAi4C,QAGAzF,WAAA,WACA,MAAA,CACAzF,MAAAvuC,KAAAuuC,MACA/sC,QAAAxB,KAAAwB,UAGAw3J,uBAAA,WACA,IAAAC,EAAA97J,EAAArB,QACAkE,KAAAtC,IAAAG,IAAA,CACAk6C,YAAAkhH,EAAAzqI,QACA+pB,aAAA0gH,EAAAl7J,YAGAw2C,YAAA,WACA,IAAA2kH,EAAAl5J,KAAA7C,EAAA,iBACA6C,KAAAg3C,WAAAkiH,GACAl5J,KAAAg5J,yBAEAh5J,KAAAwB,QAAAszH,aACA90H,KAAA7C,EAAA,gBAAA6c,YAAA,UAGAha,KAAAwB,QAAAw1D,WACAh3D,KAAA7C,EAAA,cAAA6c,YAAA,UAGA,WAAAha,KAAAtC,IAAAG,IAAA,aACAmC,KAAAtC,IAAAG,IAAA,WAAA,YAGAmC,KAAAk4J,SAAAl4J,KAAA7C,EAAA,iBACA6C,KAAAm5J,cAAAn5J,KAAA7C,EAAA,uBACA6C,KAAAo5J,UAAAp5J,KAAA7C,EAAA,kBACA6C,KAAAq5J,UAAAr5J,KAAA7C,EAAA,kBACA6C,KAAAs5J,WAAAt5J,KAAA7C,EAAA,mBACA6C,KAAAu5J,WAAAv5J,KAAA7C,EAAA,mBACA6C,KAAAw5J,cAAAx5J,KAAA7C,EAAA,uBACA6C,KAAAy5J,UAAA,MAAA97J,EAAAid,WAEA5a,KAAA05J,gBAAA/7J,EAAAgC,KAAA,SAAAtC,GACA,IAAAF,EAAAE,EAAAmc,QAAA2nC,GAAA,UAAA,CAIA9jD,EAAAA,GAAAvB,OAAAusD,MACA,IAAAsxG,EAAAh8J,EAAAka,KAAA7X,KAAAwB,QAAA+2J,aAAA,SAAAoB,GACA,QAAA,IAAAh8J,EAAAqE,QAAA23J,EAAArxE,KAAAjrF,EAAAuD,MAAA+4J,EAAA/0F,QAAAvnE,EAAAunE,UAAA+0F,EAAAlgJ,UAAApc,EAAAoc,YAEA,MAAAkgJ,GAAA,mBAAAA,EAAA9gJ,UACAlb,EAAAgC,KAAAg6J,EAAA9gJ,SAAA7Y,KAAArC,KAEAqC,MAEA,IAAA45J,EAAA,IAAA55J,KAAAy5J,UACAt8J,EAAAd,UAAAyc,GAAA,UAAA8gJ,EAAA55J,KAAA05J,iBAEA15J,KAAA65J,WAAA75J,KAAA7C,EAAA,YACA6C,KAAA85J,WAAA95J,KAAA7C,EAAA,YAEA6C,KAAA4uF,OAEA5uF,KAAA+5J,cAEAn/D,aAAA,WACA56F,KAAAuuC,MAAAw2E,YAEAg1C,WAAA,WACA,MAAA/5J,KAAAuuC,OACAvuC,KAAAg6J,aACAh6J,KAAAwiD,cAEAxiD,KAAAwB,QAAAy4J,OACAj6J,KAAAy3C,KAAAz3C,KAAAwB,QAAAy4J,QAGAD,WAAA,WACAh6J,KAAAk6J,aAAAv8J,EAAAwpD,OAAAxpD,EAAA2uC,OAAAtsC,KAAAuuC,MAAAmf,WAAA1tC,OAAA,SAAAuuB,GACA,MAAA,mBAAAA,EAAAy5E,SAAAz5E,EAAAy5E,YACA,SAAAz5E,GACA,OAAAA,EAAAzxC,IAAAyxC,EAAAzxC,GAAA,IAGAkD,KAAAm6J,UAAA,KACAx8J,EAAAuhB,KAAAlf,KAAAk6J,aAAA,SAAA3rH,EAAAhrC,GACAgrC,EAAA+f,MAAAtuD,KAAAuuC,MAAA+f,MACAtuD,KAAAm6J,UAAA52J,IAEAvD,MAEA,MAAAA,KAAAm6J,YACAn6J,KAAA7C,EAAA,cAAA6c,YAAA,UACAha,KAAAo6J,cAAAp6J,KAAA7C,EAAA,sBACA6C,KAAAq6J,iBAGAA,aAAA,WACA,IAAAC,EAAA38J,EAAAC,KAAAoC,KAAAk6J,cACAl6J,KAAAo6J,cAAA34J,MAAAzB,KAAAm6J,UAAA,GAAArvJ,WAAA,OAAAwvJ,EAAAxvJ,YACA,IAAA9K,KAAAm6J,UACAn6J,KAAA65J,WAAA3/I,SAAA,YAGAla,KAAA65J,WAAA7/I,YAAA,YAGAha,KAAAm6J,UAAA,IAAAG,EACAt6J,KAAA85J,WAAA5/I,SAAA,YAGAla,KAAA85J,WAAA9/I,YAAA,aAGAwoC,WAAA,WACAxiD,KAAAuuC,MAAAvuC,KAAAk6J,aAAAl6J,KAAAm6J,WACA,IAAAh6J,EAAAH,KAAAuuC,MAAAruB,IAAA,OACA,EAAAviB,EAAAC,KAAAuC,GACAH,KAAAy3C,KAAAz3C,KAAAuuC,MAAAruB,IAAA,QAEA,MAAAlgB,KAAAuuC,MAAAzD,MAAA,MAAA9qC,KAAAuuC,MAAAzD,KAAA+jF,SACA7uH,KAAAy3C,KAAAz3C,KAAAuuC,MAAAzD,KAAA+jF,UAGAxvE,SAAA,WACA,EAAAr/C,KAAAm6J,cACAn6J,KAAAm6J,UACAn6J,KAAAq6J,eACAr6J,KAAAwiD,eAGAlD,KAAA,WACAt/C,KAAAm6J,UAAA,EAAAx8J,EAAAC,KAAAoC,KAAAk6J,kBACAl6J,KAAAm6J,UACAn6J,KAAAq6J,eACAr6J,KAAAwiD,eAGA+3G,OAAA,SAAAnwI,GAoBA,IAAAowI,EAAA,MAAAx6J,KAAAuuC,MAAAruB,IAAA,YAAAlgB,KAAAuuC,MAAAruB,IAAA,YAAA,EACA,IAAAs6I,GAAApwI,EAAA,EACAowI,EAAA,IAEA,MAAAA,GAAA,EAAApwI,IACAowI,EAAA,GAEAx6J,KAAAuuC,MAAAnB,IAAA,YAAAotH,EAAApwI,GAAA,KACApqB,KAAAwiD,cAEAi4G,SAAA,WACAz6J,KAAAu6J,OAAA,KAEAG,YAAA,WACA16J,KAAAu6J,QAAA,KAEAI,QAAA,WACA,OAAA,GAEAC,QAAA,WACA,OAAA,GAEAtC,mBAAA,WACA,OAAA,IAAAt4J,KAAAwB,QAAA82J,oBAEA1pE,KAAA,WACA,IAAAisE,EAAA76J,KACAwB,EAAAxB,KAAAwB,QACAo4J,EAAA,IAAAiB,EAAApB,UACAH,EAAAt5J,KAAAs5J,WACAwB,EAAA96J,KAAAm5J,cACAE,EAAAr5J,KAAAq5J,UACA0B,EAAA,IAAAv/J,IAAAkG,MAAA0iE,OAAA2S,OAAA+jF,EAAA,CACAE,SAAAH,EAAApB,UACAwB,QAAA,WACA,IAAAJ,EAAAz2J,OACA,OAAA,EAGApE,KAAAk7J,aAAAhjJ,WAAAohJ,EAAAz7J,IAAA,QACAmC,KAAAm7J,cAAAjjJ,WAAAohJ,EAAAz7J,IAAA,SACAmC,KAAAo7J,YAAAljJ,WAAAohJ,EAAA9qI,SACAxuB,KAAAq7J,aAAAnjJ,WAAAohJ,EAAAv7J,UAEAiC,KAAAwuB,MAAAssI,EAAAtsI,QACAxuB,KAAAjC,OAAA+8J,EAAA/8J,SAGA+V,cAAAwnJ,EAAAC,oBACA/D,qBAAA8D,EAAAE,sBAEAC,OAAA,SAAAp+J,EAAAa,GACA,IAAAw9J,EAAAl2J,KAAAoT,IAAA5Y,KAAAwuB,MAAAxuB,KAAAo7J,YAAAp7J,KAAAm7J,eACAQ,EAAAn2J,KAAAoT,IAAA5Y,KAAAjC,OAAAiC,KAAAq7J,aAAAr7J,KAAAk7J,cACAU,EAAAp2J,KAAAmT,IAAA,EAAA3Y,KAAAm7J,eACAU,EAAAr2J,KAAAmT,IAAA,EAAA3Y,KAAAk7J,cACAj9J,EAAAzC,IAAAC,QAAAgvB,YAAAE,MAAA3qB,KAAAm7J,cAAAj9J,EAAAmtB,GAAAuwI,EAAAF,GACA59J,EAAAtC,IAAAC,QAAAgvB,YAAAE,MAAA3qB,KAAAk7J,aAAAh9J,EAAAotB,GAAAuwI,EAAAF,GACAG,EAAAjB,EAAAkB,SAAAlB,EAAAmB,aAAA70B,GAAA0zB,EAAAmB,aAAA70B,EAAA0zB,EAAAkB,UAAA,GAAA99J,EAAA48J,EAAAkB,SAAA/7J,KAAAwuB,MACAytI,EAAApB,EAAAqB,UAAArB,EAAAmB,aAAArpJ,GAAAkoJ,EAAAmB,aAAArpJ,EAAAkoJ,EAAAqB,WAAA,GAAAp+J,EAAA+8J,EAAAqB,UAAAl8J,KAAAjC,OAWA,GATAu7J,EAAAz7J,IAAA,CACAC,IAAAA,EAAA,KACAG,KAAAA,EAAA,OAGA48J,EAAAsB,WAAAt+J,IAAA,CACAI,KAAA69J,EACAh+J,IAAAm+J,IAEApB,EAAAvC,qBAAA,CACAuC,EAAAuB,QAAAv+J,IAAA,CACAI,KAAA69J,EACAh+J,IAAAm+J,IAGApB,EAAAwB,cAAAx+J,IAAA,CACAI,KAAA69J,EACAh+J,IAAAm+J,IAGApB,EAAAyB,UAAAz+J,IAAA,CACAI,KAAA69J,EACAh+J,IAAAm+J,IAGA,IAAAM,EAAA1B,EAAAuB,QAAAn3J,SACA41J,EAAA2B,OAAAzxI,EAAAwxI,EAAAt+J,KACA48J,EAAA2B,OAAA/xJ,EAAA8xJ,EAAAz+J,QAGA8wF,OAGA0sE,EAAAT,EAAA4B,aAAA,IAAAjhK,IAAAkG,MAAA0iE,OAAA2S,OAAAsiF,EAAA,CACAwB,OAAAA,EACAG,SAAAH,EAAApB,UACAwB,QAAA,SAAA59J,EAAAa,GACA,IAAA28J,EAAAz2J,OACA,OAAA,EAEA,IAAAy2J,EAAA6B,QAAA,CAGA,IAAAptH,EAAAtvC,KACA+6J,EAAAE,UAEA3rH,EAAAqtH,UAAA,CAAAz+J,EAAAA,GAEAoxC,EAAAstH,cAAA1+J,EAGA28J,EAAAgC,eAEAvtH,EAAAisH,mBAAA1nJ,YAAA,WACAy7B,EAAAwtH,aAIAxtH,EAAAqtH,UAAAI,QACAztH,EAAAqtH,UAAAv+I,KAAA,CACA2M,EAAAukB,EAAAwtH,WAAAE,GACAvyJ,EAAA6kC,EAAAwtH,WAAAlsB,OAEA,MAEA6qB,OAAA,SAAAp+J,EAAAa,GACA28J,EAAA6B,UAGA18J,KAAA88J,WAAA5+J,EAEA68J,EAAAU,OAAAp+J,EAAA,CACAguB,IAAAntB,EAAAmtB,GAAA0vI,EAAAvsI,MAAAqsI,EAAAkB,SACAzwI,IAAAptB,EAAAotB,GAAAyvI,EAAAh9J,OAAA88J,EAAAqB,cAGAe,MAAA,WACA,IAAApC,EAAA6B,QAAA,CAGA,IAAAptH,EAAAtvC,KACAk9J,EAAAl9J,KAAA28J,UAAA,GAAA5xI,EAAA/qB,KAAA28J,UAAA,GAAA5xI,EACAoyI,EAAAn9J,KAAA28J,UAAA,GAAAlyJ,EAAAzK,KAAA28J,UAAA,GAAAlyJ,EACA2yJ,EAAA,EACAC,EAAA,EACA9uE,EAAA,EAEA,GAAA,GAAA/oF,KAAAE,IAAAw3J,IAAA,GAAA13J,KAAAE,IAAAy3J,GAAA,CACAC,EAAA9tH,EAAAwtH,WAAAzxI,GACAgyI,EAAA/tH,EAAAwtH,WAAAxxI,GAEA,SAAAgyI,IACA/uE,GAAA,KACAj/C,EAAAksH,oBAAAjE,sBAAA+F,IAGAF,GAAA5hK,IAAAC,QAAAk8J,aAAAC,aAAArpE,EAAA2uE,EAAA,GAAAA,EAAA,EAAA,IACAG,GAAA7hK,IAAAC,QAAAk8J,aAAAC,aAAArpE,EAAA4uE,EAAA,GAAAA,EAAA,EAAA,IAEApC,EAAAU,OAAA,KAAA,CACApwI,IAAA+xI,EAAArC,EAAAvsI,MAAAqsI,EAAAkB,SACAzwI,IAAA+xI,EAAAtC,EAAAh9J,OAAA88J,EAAAqB,YAEA3tE,IAGA+uE,QAGA1uE,OAGA2uE,EAAA,EACAjuH,EAAAtvC,KACAq5J,EAAAvgJ,GAAA,aAAA8gJ,EAAA,kBAAAA,EAAA,SAAAv8J,GACA,GAAAw9J,EAAAz2J,QAAA5C,EAAA62J,kBAAA/oH,EAAAsrH,UAAA,CAKAC,EAAAgC,eAGA,IAAA3lE,EAAA1xF,KAAAoT,KAAA,EAAApT,KAAAmT,IAAA,EAAAtb,EAAA6G,cAAAs5J,aAAAngK,EAAA6G,cAAAu5J,SACAxF,EAAA4C,EAAA5C,WAAA,IAAA/gE,EAAA2jE,EAAAhC,eAAA,IAQA,GAPA,KAAAZ,GAAAA,GAAAz2J,EAAA22J,QAIAoF,EAAA,EAHAA,GAAA/3J,KAAAE,IAAAwxF,KAMAqmE,EAAA1C,EAAA/B,mBAAA,CAIAz7J,EAAAC,iBAEA,IAAAogK,EAAApuH,EAAA5xC,IAAAuH,SACA8lB,GAAA1tB,EAAA4qD,OAAA5qD,EAAA6G,cAAA+jD,OAAAy1G,EAAAz/J,KACAwM,GAAApN,EAAAsgK,OAAAtgK,EAAA6G,cAAAy5J,OAAAD,EAAA5/J,IAGA+8J,EAAAlsE,KAAAspE,EAAA,CACAltI,EAAAA,EACAtgB,EAAAA,IAIAmzJ,QAKAvE,EAAAvgJ,GAAA,aAAA8gJ,EAAA,SAAAiE,GACA,GAAAvuH,EAAAqrH,WAAAE,EAAAz2J,OAAA,CAIA,IAAA05J,EAAAD,EAAA35J,cAAA65J,QAAA,GACAC,EAAAH,EAAA35J,cAAA65J,QAAA,GACA,GAAAD,GAAAE,EAAA,CAIAnD,EAAA6B,SAAA,EAEA,IAAAgB,EAAApuH,EAAA5xC,IAAAuH,SACAg5J,EAAAz4J,KAAA+lB,KAAA/lB,KAAA04J,IAAAF,EAAA/1G,MAAA61G,EAAA71G,MAAA,GAAAziD,KAAA04J,IAAAF,EAAAL,MAAAG,EAAAH,MAAA,IACAQ,EAAAtD,EAAA5C,UACA52E,EAAA,CACAt2D,GAAAizI,EAAA/1G,MAAA61G,EAAA71G,OAAA,EAAAy1G,EAAAz/J,KACAwM,GAAAuzJ,EAAAL,MAAAG,EAAAH,OAAA,EAAAD,EAAA5/J,KAEAsgK,EAAAjhK,EAAAd,UACAgiK,EAAA,SAAAC,GACAA,EAAAhhK,iBAEA,IAAAwgK,EAAAQ,EAAAp6J,cAAA65J,QAAA,GACAC,EAAAM,EAAAp6J,cAAA65J,QAAA,GACAQ,EAAA/4J,KAAA+lB,KAAA/lB,KAAA04J,IAAAF,EAAA/1G,MAAA61G,EAAA71G,MAAA,GAAAziD,KAAA04J,IAAAF,EAAAL,MAAAG,EAAAH,MAAA,IACA1F,EAAAkG,GAAAI,EAAAN,GAAA,EAEApD,EAAAlsE,KAAAspE,EAAA52E,IAQA+8E,EAAAtlJ,GAAA,YAAAulJ,GACAD,EAAAtlJ,GAAA,WAPA,SAAA0lJ,IACAJ,EAAAjiJ,IAAA,YAAAkiJ,GACAD,EAAAjiJ,IAAA,WAAAqiJ,GACA3D,EAAA6B,SAAA,QASA,IACA+B,EADAC,EAAA,EAEArF,EAAAvgJ,GAAA,QAAA8gJ,EAAA,SAAAv8J,GACAiyC,EAAAqrH,YAIA,IAAA+D,GACAA,EAAAp8J,KAAAq8J,MACAF,EAAA,CACA1zI,EAAA1tB,EAAA4qD,MACAx9C,EAAApN,EAAAsgK,QAWAe,GAPAp8J,KAAAq8J,MAAAD,EAAA,KAAAl5J,KAAAE,IAAArI,EAAA4qD,MAAAw2G,EAAA1zI,GAAA,IAAAvlB,KAAAE,IAAArI,EAAAsgK,MAAAc,EAAAh0J,GAAA,KACAowJ,EAAA5C,YAAAz2J,EAAAy2J,UACA4C,EAAAlsE,KAAA,KAGAksE,EAAA+D,aAEA,MASA,IAyBAC,EACAC,EA1BAC,EAAAlE,EAAA3C,SAAArgJ,KAAA,mBA4BA,SAAA+lJ,EAAAoB,GACAx9J,EAAA02J,WAIA4G,GAAAjE,EAAA5C,WAAA,MAAA4C,EAAAz2J,SAGA4sC,aAAA6tH,GACAC,GAAA,EACAjE,EAAA3C,SAAAr6J,IAAA,UAAA,GACAmhK,IACAH,EAAA3tH,WAAA,WACA2pH,EAAA3C,SAAAr6J,IAAA,UAAA,GACAihK,GAAA,GACA,QA1CA,IAAAtjK,IAAAkG,MAAA0iE,OAAA2S,OAAAgoF,EAAA,CACAlE,OAAAA,EACAG,SAAAH,EAAApB,UACAwB,QAAA,SAAA4C,GACA,IAAAhD,EAAAz2J,OACA,OAAA,EAGApE,KAAAi/J,WAAAF,EAAA95J,SAAAhH,KACA+B,KAAAo7J,YAAAP,EAAAtB,WAAA/qI,QACAxuB,KAAAy7J,OAAAoC,IAEApC,OAAA,SAAAp+J,GACA,IAAA6hK,GAAA7hK,EAAA4qD,OAAA5qD,EAAA6G,cAAA65J,QAAA,GAAA91G,OAAAjoD,KAAAi/J,WAAAj/J,KAAAo7J,YAAA,EAEA8D,EAAA15J,KAAAoT,IAAA,EAAAsmJ,GACAA,EAAA15J,KAAAmT,IAAAkiJ,EAAAsE,kBAAAD,GAEA,IAAAjH,EAAA,KAAAz2J,EAAA22J,QAAA,KAAA+G,EAAArE,EAAAsE,kBACAtE,EAAAlsE,KAAAspE,MAEArpE,OAyBAyqE,EAAAvgJ,GAAA,YAAA8gJ,EAAA,aAAAA,EAAA,WACAgE,MAGA,IAAAwB,EAAA,GACAA,EAAA,aAAAxF,EAAA,cAAAA,GAAA,WAEAgE,IADAkB,GAAA,KAIAM,EAAA,aAAAxF,EAAA,YAAAA,GAAA,WACAkF,GAAA,EACAlB,KAGA/C,EAAA3C,SAAAp/I,GAAAsmJ,GAGA59J,EAAA42J,iBACAj7J,EAAArB,QAAAgd,GAAA,SAAA8gJ,EAAA,WACAiB,EAAAz4G,YAKApiD,KAAAo5J,UAAAtgJ,GAAA,YAAA8gJ,EAAA,cAAAA,EAAA,kBAAAA,EAAA,SAAAv8J,GACAA,EAAAC,mBAIA0C,KAAAtC,IAAAma,KAAA,aAAAiB,GAAA,QAAA8gJ,EAAA,WACAiB,EAAA13G,YAIAnjD,KAAAtC,IAAAma,KAAA,cAAAiB,GAAA,QAAA8gJ,EAAA,WACAiB,EAAArgE,WAIAx6F,KAAAtC,IAAAma,KAAA,gBAAAiB,GAAA,QAAA8gJ,EAAA,SAAAv8J,GACAw9J,EAAA91C,SAAA1nH,MAGAsxF,KAAA,SAAA0wE,EAAAZ,GACAY,EAAA75J,KAAA4I,MAAA5I,KAAAoT,IAAA,IAAAymJ,IACAA,EAAA75J,KAAAmT,IAAA3Y,KAAAwB,QAAA22J,QAAAkH,GAEAZ,EAAAA,GAAA,CACA1zI,EAAA/qB,KAAAg8J,aAAA70B,EAAA,EACA18H,EAAAzK,KAAAg8J,aAAArpJ,EAAA,GAGA3S,KAAAs/J,cAAAb,EAEA,IAAAtG,EAAAn4J,KAAAwB,QAAA22J,QACAoH,EAAAv/J,KAAAi4J,UACAuH,EAAAx/J,KAAAm8J,WACAsD,EAAAvnJ,WAAAsnJ,EAAA3hK,IAAA,SACA6hK,EAAAxnJ,WAAAsnJ,EAAA3hK,IAAA,QACA0wF,EAAA,EAEAvuF,KAAA68J,eAGA,IAAAb,EAAAh8J,KAAAg8J,aACA2D,EAAA3/J,KAAA2/J,SACAC,GAAA5D,EAAA70B,EAAAw4B,EAAAx4B,GAAA,EACA04B,GAAA7D,EAAArpJ,EAAAgtJ,EAAAhtJ,GAAA,EACAmtJ,EAAA9D,EAAA70B,EAAAy4B,EACAG,EAAA/D,EAAArpJ,EAAAktJ,EACAlxE,EAAAhxF,EAAAgC,KAAA,aACA4uF,EAEA,IACAvuF,KAAAggK,WAAAzI,sBAAA5oE,IAGA,IAAAsxE,EAAAzkK,IAAAC,QAAAk8J,aAAAC,aAAArpE,EAAAgxE,EAAAF,EAAAE,EAAA,GACAW,EAAAD,EAAAV,EACAxD,EAAA/7J,KAAA2/J,SAAAx4B,EAAA84B,EAAA,IACA/D,EAAAl8J,KAAA2/J,SAAAhtJ,EAAAstJ,EAAA,IACAf,KAAAT,EAAA1zI,EAAA00I,GAAAS,EAAAzB,EAAA1zI,GACAo1I,KAAA1B,EAAAh0J,EAAAi1J,GAAAQ,EAAAzB,EAAAh0J,GAGA,GAAAzK,KAAAogK,cAAA,IAAA7xE,EAAA,CACA,IAAA8xE,EAAArgK,KAAAogK,aAAA5D,OAAAhuI,MAAAxuB,KAAAw8J,OAAAhuI,MAAA,IACA8xI,EAAAtgK,KAAAogK,aAAA5D,OAAAz+J,OAAAiC,KAAAw8J,OAAAz+J,OAAA,IAGAmhK,EADA,MAAAmB,EACArgK,KAAAogK,aAAAliK,SAAAD,KAAAoiK,EAAA,IAGArgK,KAAAogK,aAAAliK,SAAAD,KAGAkiK,EADA,MAAAG,EACAtgK,KAAAogK,aAAAliK,SAAAJ,IAAAwiK,EAAA,IAGAtgK,KAAAogK,aAAAliK,SAAAJ,IAEAkC,KAAAogK,aAAA,UAGAlB,EAAA15J,KAAAmT,IAAAumJ,EAAAU,GACAO,EAAA36J,KAAAmT,IAAAwnJ,EAAAN,GAIAX,EAAAnD,EAAA+D,IACAZ,EAAAY,EAAA/D,GAGAoE,EAAAjE,EAAA6D,IACAI,EAAAJ,EAAA7D,GAIA,IAAAr+J,EAAA,CACAE,OAAAm+J,EAAA,KACA1tI,MAAAutI,EAAA,KACA99J,KAAAihK,EAAA,KACAphK,IAAAqiK,EAAA,MAGA,GADAX,EAAA3hK,IAAAA,GACAmC,KAAAs4J,qBAAA,CACAt4J,KAAAo8J,QAAA,GAAAr+J,OAAAm+J,EACAl8J,KAAAo8J,QAAA,GAAA5tI,MAAAutI,EACA/7J,KAAAo8J,QAAAv+J,IAAAA,GACAmC,KAAAq8J,cAAAx+J,IAAAA,GACAmC,KAAAq8J,cAAA,GAAAt+J,OAAAm+J,EACAl8J,KAAAq8J,cAAA,GAAA7tI,MAAAutI,EACA/7J,KAAAs8J,UAAAz+J,IAAAA,GAEA,IAAA0+J,EAAAv8J,KAAAo8J,QAAAn3J,SACAjF,KAAAw8J,OAAA,CACAhuI,MAAAutI,EACAh+J,OAAAm+J,EACAnxI,EAAAwxI,EAAAt+J,KACAwM,EAAA8xJ,EAAAz+J,KAIAkC,KAAAi4J,UAAAgI,EAEAjgK,KAAAugK,cAAAxE,EAAAG,EAAAgD,EAAAiB,GAGAngK,KAAAu5J,WAAA17J,IAAA,QAAAoiK,EAAA,KAAAjgK,KAAAm/J,mBAAAhH,EAAA,KAAA,OACAn4J,MAEA2uF,KAEAkuE,aAAA,WACA/oJ,cAAA9T,KAAAy8J,aAAAlB,oBACA/D,qBAAAx3J,KAAAy8J,aAAAjB,qBACAhE,qBAAAx3J,KAAAggK,aAEApB,UAAA,WACA5+J,KAAAs/J,cAAA,KACAt/J,KAAA2uF,KAAA3uF,KAAAwB,QAAAy2J,YAGAuI,qBAAA,WACAxgK,KAAAg5J,yBAGA,IAAAyH,EAAAzgK,KAAAm8J,WAAA3tI,QACAkyI,EAAA1gK,KAAAm8J,WAAAp+J,SACA4iK,EAAA3gK,KAAA7C,EAAA,kBACAyjK,EAAAD,EAAAnyI,QACAqyI,EAAAF,EAAA5iK,SACA+iK,EAAA9gK,KAAAk4J,SAAAhW,aACA6e,EAAA/gK,KAAAk4J,SAAA5/G,cASA,GAPAt4C,KAAAg8J,aAAA,CACA70B,EAAAy5B,EACAjuJ,EAAAkuJ,GAIA7gK,KAAAm8J,WAAArkJ,SAAA,wBAAA9X,KAAAm8J,WAAArkJ,SAAA,wBACA,CACA,IAAAooJ,EAAAQ,EAAAD,EACAvE,EAAAwE,EAAAD,GAAAG,GAAAC,GAAAD,EAAAV,EAAAW,EAAAD,EAAAV,EAAAW,EACA9E,EAAAG,EAAAgE,EAEAlgK,KAAA2/J,SAAA,CACAx4B,EAAA40B,EAAA,IACAppJ,EAAAupJ,EAAA,IAAAgE,GAIAlgK,KAAAghK,QAAAnjK,IAAA,CACA2wB,MAAAxuB,KAAA2/J,SAAAx4B,EAAAnnI,KAAA2/J,SAAAhtJ,EAAAouJ,EAAA/gK,KAAA2/J,SAAAx4B,EAAA45B,EAAA/gK,KAAA2/J,SAAAhtJ,EACA5U,OAAAiC,KAAA2/J,SAAAhtJ,EAAA3S,KAAA2/J,SAAAx4B,EAAA25B,EAAA9gK,KAAA2/J,SAAAhtJ,EAAAmuJ,EAAA9gK,KAAA2/J,SAAAx4B,QAGA,CACA,IAAA+4B,EAAAO,EAAAC,EACA3E,EAAA2E,EAAAD,GAAAG,GAAAC,GAAAD,EAAAV,EAAAW,EAAAD,EAAAV,EAAAW,EACA3E,EAAAH,EAAAmE,EAEAlgK,KAAA2/J,SAAA,CACAhtJ,EAAAupJ,EAAA,IACA/0B,EAAA40B,EAAA,IAAAmE,GAIAlgK,KAAAghK,QAAAnjK,IAAA,CACA2wB,MAAAxuB,KAAA2/J,SAAAx4B,EAAAnnI,KAAA2/J,SAAAhtJ,EAAAmuJ,EAAA9gK,KAAA2/J,SAAAx4B,EAAA45B,EAAA/gK,KAAA2/J,SAAAhtJ,EACA5U,OAAAiC,KAAA2/J,SAAAhtJ,EAAA3S,KAAA2/J,SAAAx4B,EAAA45B,EAAA/gK,KAAA2/J,SAAAhtJ,EAAAmuJ,EAAA9gK,KAAA2/J,SAAAx4B,IAIAnnI,KAAA+7J,SAAA/7J,KAAA2/J,SAAAx4B,EAAAnnI,KAAAi4J,UAAA,IACAj4J,KAAAk8J,UAAAl8J,KAAA2/J,SAAAhtJ,EAAA3S,KAAAi4J,UAAA,IAGA,IAAAiH,GAAA0B,EAAA5gK,KAAA2/J,SAAAx4B,GAAA,EACAg5B,GAAAU,EAAA7gK,KAAA2/J,SAAAhtJ,GAAA,EACA9U,EAAA,CACA2wB,MAAAxuB,KAAA2/J,SAAAx4B,EAAA,KACAppI,OAAAiC,KAAA2/J,SAAAhtJ,EAAA,KACA1U,KAAAihK,EAAA,KACAphK,IAAAqiK,EAAA,KACApoH,YAAA,OACAQ,aAAA,QAIA,GAFAv4C,KAAAm8J,WAAAt+J,IAAAA,GAEAmC,KAAAs4J,qBAAA,CACAt4J,KAAAo8J,QAAAv+J,IAAAA,GACAmC,KAAAq8J,cAAAx+J,IAAAA,GACAmC,KAAAs8J,UAAAz+J,IAAAA,GAEA,IAAA0+J,EAAAv8J,KAAAo8J,QAAAn3J,SACAjF,KAAAw8J,OAAA,CACAhuI,MAAAxuB,KAAA2/J,SAAAx4B,EACAppI,OAAAiC,KAAA2/J,SAAAhtJ,EACAoY,EAAAwxI,EAAAt+J,KACAwM,EAAA8xJ,EAAAz+J,KAKAkC,KAAAm/J,kBAAA2B,EAAA9gK,KAAAu5J,WAAArxG,cAEA9F,QAAA,SAAA6+G,GACAjhK,KAAAoE,SAGApE,KAAAwgK,uBACAxgK,KAAA4+J,cAEA2B,cAAA,SAAAxE,EAAAG,EAAAJ,EAAAG,GACAj8J,KAAA+7J,SAAAA,GAAA/7J,KAAA2/J,SAAAx4B,EAAAnnI,KAAAi4J,UAAA,IACAj4J,KAAAk8J,UAAAA,GAAAl8J,KAAA2/J,SAAAhtJ,EAAA3S,KAAAi4J,UAAA,IAEA,IAAAh6J,EAAAuH,KAAAoT,IAAA,MAAAkjJ,GAAA5jJ,WAAAlY,KAAAm8J,WAAAt+J,IAAA,UAAAmC,KAAA+7J,SAAA,GACAj+J,EAAA0H,KAAAoT,IAAA,MAAAqjJ,GAAA/jJ,WAAAlY,KAAAm8J,WAAAt+J,IAAA,SAAAmC,KAAAk8J,UAAA,GACAd,EAAA51J,KAAAmT,IAAA,IAAA3Y,KAAAg8J,aAAA70B,EAAAnnI,KAAA+7J,SAAA,KACAV,EAAA71J,KAAAmT,IAAA,IAAA3Y,KAAAg8J,aAAArpJ,EAAA3S,KAAA+7J,SAAA,KAEA/7J,KAAAs5J,WAAAz7J,IAAA,CACAC,IAAAA,EAAA,IACAG,KAAAA,EAAA,IACAuwB,MAAA4sI,EAAA,IACAr9J,OAAAs9J,EAAA,MAGAr7J,KAAAoE,QACApE,KAAAkhK,wBAGAA,qBAAA,aAGAzpH,KAAA,SAAAwiH,EAAAkH,GACAnhK,KAAAtC,IAAA+5C,OACAwiH,GACAj6J,KAAAouB,KAAA6rI,EAAAkH,IAGA3/J,QAAA,SAAAZ,EAAAtB,GACA,IAAAA,EACA,OAAAU,KAAAwB,QAAAZ,GAEAZ,KAAAwB,QAAAZ,GAAAtB,GAEA6jD,QAAA,WACAnjD,KAAAwB,QAAAi4C,QACAj+C,IAAAiC,IAAAiuB,OAAAC,SAAA3rB,KAAAwB,QAAAu3J,cAAA,CACAntI,QAAA5rB,KAAAwB,QAAA+5C,eAEAv7C,KAAAwB,QAAA+5C,cAAA,EACAv7C,KAAAwB,QAAAi4C,MAAA,MAGAt8C,EAAArB,QAAAqgB,IAAA,IAAAnc,KAAAy5J,WACAt8J,EAAAd,UAAA8f,IAAA,IAAAnc,KAAAy5J,WACAz5J,KAAAtC,IAAAye,MACAnc,KAAAtC,IAAAnB,SACAyD,KAAAm2C,UAEAh5C,EAAA,QAAAU,IAAA,WAAA,SAEAs4C,QAAA,WACA,mBAAAn2C,KAAAwB,QAAA20C,SACAn2C,KAAAwB,QAAA20C,WAGAqkD,OAAA,WACAx6F,KAAAuuC,MAAA4U,UACAnjD,KAAA0tD,WAAAnxD,OAAAyD,KAAAuuC,OACAvuC,KAAAwB,QAAA41D,SAAAp3D,KAAAuuC,OACAvuC,KAAAmjD,WAEA4hE,SAAA,WACA/kH,KAAAuuC,MAAAw2E,YAEA32F,KAAA,SAAA6rI,GAAA,IAAAmH,EAAA,EAAAh3J,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAAi3J,aAAA,GAEArhK,KAAA7C,EAAA,kCAAAZ,SAEAyD,KAAAykF,OAAA,IAAAjpF,IAAAigE,OAAAz7D,KAAAo5J,WAGAp5J,KAAAghK,QAAA7jK,EAAA,QAAA,CACAwd,MAAA,gBACA4rC,IAAA0zG,EACAhzI,MAAA,kBAEAjnB,KAAA7C,EAAA,uBAAAuvC,QAAA1sC,KAAAghK,SAEAhhK,KAAAq5J,UAAArkH,QAGAh1C,KAAAq5J,UAAA3sH,QAAAvvC,EAAA,QAAA,CACAwd,MAAA,0BACA4rC,IAAA0zG,EACAhzI,MAAA,mBAGAjnB,KAAAs4J,uBACAt4J,KAAAq5J,UAAA3sH,QAAAvvC,EAAA,QAAA,CACAwd,MAAA,gCAGA3a,KAAAq5J,UAAA3sH,QAAAvvC,EAAA,WAAA,CACAwd,MAAA,wBAGA3a,KAAAq5J,UAAAv4J,OAAA3D,EAAA,WAAA,CACAwd,MAAA,+BAGA3a,KAAAo8J,QAAAp8J,KAAA7C,EAAA,cACA6C,KAAAswG,IAAAtwG,KAAAo8J,QAAA,GAAA5sE,WAAA,MAEAxvF,KAAAq8J,cAAAr8J,KAAA7C,EAAA,qBACA6C,KAAAshK,UAAAthK,KAAAq8J,cAAA,GAAA7sE,WAAA,MAEAxvF,KAAAs8J,UAAAt8J,KAAA7C,EAAA,uBAGA6C,KAAAm8J,WAAAn8J,KAAA7C,EAAA,mBAEA6C,KAAAoE,QAAA,EAEApE,KAAAuuC,OAAAvuC,KAAAuuC,MAAAruB,IAAA,cACAlgB,KAAAw5J,cAAAl5J,KAAA,UAAA,GACAN,KAAAw5J,cAAA/3J,KAAAjG,IAAAC,QAAAwH,YAAAC,cAAAlD,KAAAuuC,MAAAruB,IAAA,aAAA1kB,IAAAC,QAAAwH,YAAAE,YAAAC,QAGApD,KAAAw5J,cAAAl5J,KAAA,UAAA,GAIA,IAAAihK,EAAA5jK,EAAAgC,KAAA,WACAK,KAAAwhK,qBAEA,IAAA1wG,EAAAnzD,EAAAgC,KAAA,WACAK,KAAAykF,OAAAloF,SACAyD,KAAAoE,QAAA,EAEA,IAAAq9J,EAAAzhK,KAAAi4J,UACAyJ,EAAA1hK,KAAAs/J,cACAt/J,KAAAi4J,UAAA,IACAj4J,KAAAoiD,QAAAg/G,GACAA,EAAAC,aAAArhK,KAAAogK,aACApgK,KAAA2uF,KAAA8yE,EAAAC,GAGA1hK,KAAA4+J,YAGA5+J,KAAA2hK,YAEA3hK,KAAAm8J,WAAA1kH,OACAz3C,KAAAghK,QAAAvpH,QACAz3C,MACA4hK,EAAApmK,IAAAC,QAAAoyB,eAAAC,mBACA,MAAA9tB,KAAAuuC,MAAAruB,IAAA,aAAAlgB,KAAAuuC,iBAAA/yC,IAAAwkB,OAAA6kG,SAAAC,QAIA,MAAA88C,GAAA,IAAAA,EACA9wG,IAGAt1D,IAAAC,QAAAsuB,aAAAC,aAAAhqB,KAAAm8J,WAAAvpH,IAAA5yC,KAAAghK,SAAArjK,EAAAgC,KAAA,WACAmxD,KACA9wD,QATAxE,IAAAC,QAAAsuB,aAAAI,cAAAnqB,KAAAm8J,WAAAvpH,IAAA5yC,KAAAghK,SAAAhhK,KAAAuuC,MAAAruB,IAAA,aACA4wC,MAUA9wD,MAEA6hK,EAAA7hK,KAAAm8J,WAAA,IACA0F,EAAA5kG,eAAA,IAAA4kG,EAAAC,cAAA,IAAAD,EAAAC,aAIA3kK,EAAA0kK,GAAA/oJ,GAAA,OAAAyoJ,GAHAA,KAMAC,mBAAA,aAGAG,UAAA,eAGAnmK,IAAAkG,MAAAkhC,MAAAguF,WAAAp1H,IAAAkG,MAAA0iE,OAAAC,YAAApkE,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,eACAk7H,UAAA,IACAC,UAAA,EACAC,QAAA,IACAC,iBAAA,EACAC,kBAAA,EACA98G,cAAA,EACAwmH,mBAAA,GAEAtuH,OAAA,CACA+kH,iBAAA,WACAC,iBAAA,OACAuJ,6BAAA,qBAEAhI,WAAA,WACAh6J,KAAAiiK,UAAAjiK,KAAAuuC,MAAAruB,IAAA,SACA,EAAAlgB,KAAAiiK,YACAjiK,KAAAiiK,UAAA,GAEAjiK,KAAAm6J,UAAA,EAEAn6J,KAAAq6J,gBAEAA,aAAA,WACA,EAAAr6J,KAAAiiK,WACAjiK,KAAA7C,EAAA,cAAA6c,YAAA,UACAha,KAAAo6J,cAAAp6J,KAAA7C,EAAA,sBAEA6C,KAAAo6J,cAAA34J,MAAAzB,KAAAm6J,UAAA,GAAArvJ,WAAA,OAAA9K,KAAAiiK,UAAAn3J,YACA,IAAA9K,KAAAm6J,UACAn6J,KAAA65J,WAAA3/I,SAAA,YAGAla,KAAA65J,WAAA7/I,YAAA,YAGAha,KAAAm6J,UAAA,IAAAn6J,KAAAiiK,UACAjiK,KAAA85J,WAAA5/I,SAAA,YAGAla,KAAA85J,WAAA9/I,YAAA,aAIAha,KAAA7C,EAAA,cAAA+c,SAAA,WAGAsoC,WAAA,WACA,EAAAxiD,KAAA7C,EAAA,kBAAAT,QACAsD,KAAAy3C,KAAAz3C,KAAAuuC,MAAA+3E,UAAAtmH,KAAAm6J,UAAA,KAGA96G,SAAA,WACA,EAAAr/C,KAAAm6J,cACAn6J,KAAAm6J,UACAn6J,KAAAq6J,eACAr6J,KAAAwiD,eAGAlD,KAAA,WACAt/C,KAAAm6J,UAAA,EAAAn6J,KAAAiiK,cACAjiK,KAAAm6J,UACAn6J,KAAAq6J,eACAr6J,KAAAwiD,eAGAg/G,mBAAA,WACA,EAAAxhK,KAAAuuC,MAAAruB,IAAA,SAgBAlgB,KAAAq6J,eAfA,IAAA7+J,IAAAyD,KAAAC,QAAA,CACAC,SAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,QACAG,MAAAU,KAAAuuC,MAAAruB,IAAA,YAEA,CACA/gB,SAAA,aAEA+gB,MAAAxgB,KAAA/B,EAAAgC,KAAA,SAAAC,GACAI,KAAAuuC,MAAAnB,IAAA,QAAAxtC,EAAAm7C,OACA/6C,KAAAg6J,cACAh6J,QAMAkiK,kBAAA,WACA,OAAA,KAIA1mK,IAAAkG,MAAA0iE,OAAA2S,OAAA,WACA,SAAAorF,EAAAzkK,EAAA8D,GAAAupC,gBAAA/qC,KAAAmiK,GACAniK,KAAAo3C,UAAA15C,EACAsC,KAAAi7J,QAAAz5J,EAAAy5J,SAAAt9J,EAAAu4C,KACAl2C,KAAAy7J,OAAAj6J,EAAAi6J,QAAA99J,EAAAu4C,KACAl2C,KAAAi9J,MAAAz7J,EAAAy7J,OAAAt/J,EAAAu4C,KACAl2C,KAAAg7J,SAAAx5J,EAAAw5J,UAAA,SAAAx1J,KAAAopH,KAAA,IAAAppH,KAAAgY,UACAxd,KAAA66J,OAAAr5J,EAAAq5J,OAAAr5J,EAAAq5J,OAAA,KAPA,OAAA5vH,aAAAk3H,EAAA,CAAA,CAAAvhK,IAAA,OAAAtB,MAUA,WACA,IAAAgwC,EAAAtvC,KACA45J,EAAA,IAAA55J,KAAAg7J,SACAoD,EAAAjhK,EAAAd,UAkDA,OA/CA2D,KAAAo3C,UAAAt+B,GAAA,aAAA8gJ,EAAA,aAAAA,EAAA,SAAAiE,GACA,IAAAuE,EAAA,SAAAvE,GACAA,EAAAvgK,iBACA,IAAA+kK,GAAA,eAAAxE,EAAA98J,KAAA,YAAA,aAAA64J,EACA0I,GAAA,eAAAzE,EAAA98J,KAAA,WAAA,WAAA64J,EACA2I,EAAA1E,EAAA35J,cACAs+J,EAAAD,EAAAE,SAAAF,EAAAxE,QAAA,GAAA0E,QACAC,EAAAH,EAAAI,SAAAJ,EAAAxE,QAAA,GAAA4E,QAKA,IAAA,IAJArzH,EAAA2rH,QAAA4C,EAAA,CACA9yI,EAAAy3I,EACA/3J,EAAAi4J,IAEA,CAGA,IAAArE,EAAA,SAAAC,GACAA,EAAAhhK,iBAKA,IAAA0/J,GAHAuF,EAAAjE,EAAAp6J,eAGAu+J,SAAAF,EAAAxE,QAAA,GAAA0E,QACA7xB,EAAA2xB,EAAAI,SAAAJ,EAAAxE,QAAA,GAAA4E,QAEArzH,EAAAmsH,OAAA6C,EAAA,CACAjzI,GAAA2xI,EAAAwF,EACAl3I,GAAAslH,EAAA8xB,EACA1F,GAAAA,EACApsB,GAAAA,KAUAwtB,EAAAtlJ,GAAAupJ,EAAAhE,GACAD,EAAAtlJ,GAAAwpJ,EAPA,SAAA9D,IACAJ,EAAAjiJ,IAAAkmJ,EAAAhE,GACAD,EAAAjiJ,IAAAmmJ,EAAA9D,GACAlvH,EAAA2tH,cAMA3tH,EAAAurH,QAAA,mBAAAvrH,EAAAurH,OAAA+H,cAAA,IAAAtzH,EAAAurH,OAAAF,YAAA,IAAArrH,EAAAurH,OAAA+H,YAAA/E,EAAAuE,KAGAA,EAAAvE,KAGA79J,SA/DAmiK,EAAA,GChnCA3mK,IAAAwkB,OAAAw2C,YAAA,GAEAh7D,IAAAwkB,OAAAw2C,YAAAqsG,YAAArnK,IAAAwkB,OAAA4sB,UAAA3sC,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,kBAIAsvC,UAAA,WACA,MAAAzuC,KAAAkgB,IAAA,gBACAlgB,KAAAotC,IAAA,cAAA,KAEAwpB,QAAA,SAAAh2D,GACA,OAAAZ,KAAAkgB,IAAA,eAAAtf,IAEA61D,QAAA,SAAA71D,GACA,YAAA,IAAAZ,KAAAkgB,IAAA,eAAAtf,IAEAkiK,QAAA,SAAAliK,EAAAtB,GACAU,KAAAkgB,IAAA,eAAAtf,GAAAtB,GAEAyjK,WAAA,SAAAniK,UACAZ,KAAAkgB,IAAA,eAAAtf,MAIApF,IAAA+Q,UAAAmqD,gBAAA,CACAssG,2CAAA,wCACArsF,oCAAA,qBACAssF,uCAAA,qCACAC,2BAAA,0BACAC,sCAAA,mCACAC,8BAAA,4BACAC,8BAAA,4BACAC,iCAAA,+BACAC,iCAAA,+BACAjgE,kCAAA,gCACAH,yBAAA,wBACA4wD,+BAAA,qCACAyP,qCAAA,mCACA5hE,+CAAA,uCACAiB,+CAAA,2CACA4gE,oCAAA,kCACArwD,6BAAA,4BACAswD,6BAAA,4BACAC,sCAAA,oCACA5qE,uCAAA,oCACA6qE,qBAAA,+BACAC,oCAAA,mCACA5gE,8BAAA,uCACA2yC,cAAA,cACA7kD,gCAAA,gCACA+yE,kCAAA,iCACAntB,0BAAA,yBACAE,yBAAA,yBACAktB,iCAAA,gCACAC,4CAAA,wCACAluB,qBAAA,oBACAvyC,4BAAA,iCACAF,0BAAA,sBACA4gE,qBAAA,oBACAC,wBAAA,8BACAC,8BAAA,6BACAC,yBAAA,wBACAC,uBAAA,sBACAC,oCAAA,0BACAC,iCAAA,gCACAC,mBAAA,oBACAC,iBAAA,kBACAC,6BAAA,4BACAvjB,0BAAA,4BACA9B,sBAAA,yBACAslB,8BAAA,+BACAxsB,gBAAA,iBACAysB,oCAAA,mCACAhoB,iCAAA,iCACAa,yBAAA,yBACAonB,0BAAA,0BACAzmB,uBAAA,uBACAW,YAAA,gBACA+lB,sBAAA,sBACAxtB,iBAAA,oBACAytB,iCAAA,+BACAhiE,4BAAA,0BACAiiE,sBAAA,+BACAC,0BAAA,sCACAC,uBAAA,2BACAC,6BAAA,qCACAC,eAAA,oBACAC,eAAA,eACAC,uBAAA,sBACAC,4BAAA,2BACA9tB,iBAAA,oBACA0F,iBAAA,oBACAqoB,wBAAA,uBACAC,oBAAA,oBACAC,0BAAA,yBACAvnE,8BAAA,6BACAD,2BAAA,0BACA6iD,oBAAA,oBACA4kB,+BAAA,6BACAC,wBAAA,uBACAC,yBAAA,wBACAC,iBAAA,qBACAzjE,sBAAA,uBACAy7C,iBAAA,qBACAioB,2BAAA,8BACAC,+BAAA,8BACAC,WAAA,YACAC,qBAAA,qBACAC,4BAAA,2BACAztB,gBAAA,iBACA0tB,gBAAA,iBACAC,8BAAA,8BACAC,uBAAA,uBACAnvB,wBAAA,wBACAovB,uBAAA,uBACArvB,uBAAA,uBACAsvB,gBAAA,iBACAC,iBAAA,oBACAC,uBAAA,sBACAC,iBAAA,iBACA1vB,mBAAA,oBACA2vB,0BAAA,0BACAC,wBAAA,wBACAC,wBAAA,wBACA1sB,0BAAA,0BACAJ,yBAAA,yBACA+sB,wCAAA,sCACAC,2BAAA,0BACAC,uCAAA,qCACAC,2BAAA,0BACA/jG,wBAAA,uBACAgkG,sBAAA,sBACAC,2BAAA,yBACAC,+BAAA,6BACAC,2BAAA,2BACA7nE,kBAAA,mBACA8nE,kBAAA,kBACAC,2BAAA,2BACAC,mBAAA,mBACAC,yBAAA,wBACA15C,2BAAA,yBACAgwB,mCAAA,iCACA2pB,kCAAA,iCACAC,wCAAA,sCACA3pB,4BAAA,oBACA1B,mCAAA,wCACAsrB,0BAAA,yBACAn1D,wBAAA,2BACA2kC,sBAAA,yBACAywB,2BAAA,yBACA3uB,qBAAA,wBACA4uB,kBAAA,kBACAC,mBAAA,mBACAC,oBAAA,oBACAC,iBAAA,iBACAC,8BAAA,6BACAC,oBAAA,sCACAnyB,+BAAA,6BACA0B,uBAAA,sBACA0wB,mBAAA,sBACAC,mBAAA,mBACAC,eAAA,kBACAC,WAAA,eACA5pB,mBAAA,uBACA6pB,kBAAA,sBACAC,2CAAA,yCACAxvB,mBAAA,mBACAd,oBAAA,oBACA7yD,yBAAA,2BACAojF,cAAA,qBACAC,kBAAA,mBACAC,0BAAA,0BACA1lB,0BAAA,0BACA2lB,2CAAA,uCACAC,kBAAA,kBACAC,2BAAA,2BACAC,6BAAA,2BACAC,mCAAA,sBACA1tD,YAAA,wBACAzpC,aAAA,yBACAo3F,kBAAA,kBACAC,2BAAA,0BACAC,uBAAA,sBACAC,gCAAA,qCACAC,yBAAA,wBACAC,yBAAA,wBACAlhE,kBAAA,kBACAmhE,0BAAA,yBACAC,aAAA,iBACAC,YAAA,wBACAC,wBAAA,uBACAxmE,qBAAA,6BACAymE,yBAAA,wBACArtB,8BAAA,uCACAlC,qCAAA,6CACAp0C,oBAAA,oBACA4jE,kBAAA,gBACAC,8BAAA,6BACAC,iBAAA,iBACAC,mBAAA,kBACA59F,eAAA,eACA69F,cAAA,cACAC,2BAAA,0BACAC,oBAAA,oBACAC,eAAA,eACArnE,qBAAA,oCACAsnE,iBAAA,iBACAC,gCAAA,8BACAC,8BAAA,4BACAC,8BAAA,4BACAC,4BAAA,2BACAC,kBAAA,kBACAC,gCAAA,8BACAC,8BAAA,4BACAC,4BAAA,2BACA7pB,oBAAA,oBACA8pB,eAAA,gBACAC,+BAAA,8BACAC,6BAAA,4BACAC,gCAAA,+BACAC,iCAAA,8BACAC,wBAAA,wBACAC,oBAAA,mBACAC,cAAA,eACA5pE,sBAAA,sBACA6pE,8BAAA,6BACAC,qCAAA,mCACAC,kCAAA,uCACAC,kCAAA,+BACAhqB,6BAAA,4BACAD,kBAAA,kBACAkqB,wBAAA,wBACArqB,oCAAA,oCACAsqB,gBAAA,aACAC,iBAAA,iBACAC,sCAAA,yBACAC,kCAAA,gCACAC,6BAAA,2BACAC,kCAAA,+BACAC,uBAAA,uBACAC,2CAAA,yCACAC,mCAAA,qCACAC,mCAAA,kCACAC,uCAAA,qCACAC,0CAAA,wCACAC,0CAAA,wCACAC,oCAAA,kCACAC,4CAAA,YACAC,0CAAA,UACAC,gDAAA,uBACAC,4CAAA,uBACAC,8CAAA,2CACAC,iCAAA,+BACAC,4BAAA,2BACAC,wBAAA,uBACAC,oBAAA,oBACAC,oCAAA,kCACAC,oBAAA,oBACAC,oCAAA,kCACAC,qBAAA,oBACAC,oBAAA,mBACAC,qBAAA,oBACAC,yCAAA,qCACAC,gCAAA,8BACAC,kCAAA,gCACAC,mCAAA,gCACAC,qCAAA,mCACAC,gCAAA,+BACAC,gCAAA,+BACAC,sCAAA,oCACAC,sCAAA,oCACAC,gCAAA,qCACAC,sCAAA,oCACAxuB,8BAAA,oBACAyuB,4BAAA,2BACAC,qCAAA,0CACAC,oCAAA,yCACAj0B,gCAAA,8BACA2K,8CAAA,2CACAupB,qCAAA,uCACAC,2BAAA,yBACAC,oBAAA,mBACAC,gCAAA,8BACAC,wBAAA,oCACAC,8BAAA,6BACAC,0CAAA,uCACAppD,kBAAA,kBACAqpD,kBAAA,kBACAC,sBAAA,uBACAC,oBAAA,oBACAC,iCAAA,gCACAC,mBAAA,mBACAC,oBAAA,oBACAC,qBAAA,qBACAC,6BAAA,4BACA1tE,qBAAA,uCACA2tE,mDAAA,+CACAC,mBAAA,mBACAC,oCAAA,kCACAC,gCAAA,+BACAC,mBAAA,mBACAC,kBAAA,kBACAC,2BAAA,0BACAC,uBAAA,sBACAC,4BAAA,2BACAC,cAAA,eACAC,2BAAA,0BACA78E,mCAAA,iCACAsmD,qBAAA,qBACAw2B,mCAAA,iCACAC,6BAAA,4BACAv5G,sBAAA,sBACA6vC,yBAAA,yBACA2pE,uBAAA,sBACAC,sBAAA,qBACAC,eAAA,eACAztE,qBAAA,sBACArB,0BAAA,8BACAuB,iBAAA,yBACAwtE,gCAAA,+BACAC,2BAAA,yBACAC,yBAAA,wBACAC,yBAAA,uBACAC,4BAAA,0BCxUAl1K,IAAAylF,SAAA,GAEAzlF,IAAAylF,SAAA0vF,YAAA,WACA,SAAAC,EAAAlzK,GAAA,IAAA8D,EAAA,EAAA4I,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,GAAA2gC,gBAAA/qC,KAAA4wK,GACA5wK,KAAAy8D,OAAA/+D,EACAsC,KAAAwB,QAAA7D,EAAAupB,SAAA1lB,EAAA,CACAi7C,WAAA,EACA1+C,OAAA,GACAywB,MAAA,OACAqiJ,kBAAA,EACA5vF,SAAA,EACA6vF,aAAA,OAGA,MAAA9wK,KAAAtC,KAAA,EAAAsC,KAAAtC,IAAAhB,QACAsD,KAAA+wK,oBAbA,OAAA9lI,aAAA2lI,EAAA,CAAA,CAAAhwK,IAAA,kBAAAtB,MAiBA,WAAA,IAAA0xK,EAAAC,EACAC,EAAA,QAAAF,EAAAhxK,KAAAwB,QAAA0vK,kBAAA,IAAAF,EAAAA,EAAAhxK,KAAAmxK,0BACAC,EAAAj0K,EAAA,QAAA,CACAwd,MAAA,WACAsM,MAAA,WAAAlZ,OAAA/N,KAAAwB,QAAAzD,OAAA,eAAAgQ,OAAA,iBAAA/N,KAAAwB,QAAAgtB,MAAA,GAAAzgB,OAAA/N,KAAAwB,QAAAgtB,MAAA,MAAAxuB,KAAAwB,QAAAgtB,MAAA,qBAAAzgB,OAAA,QAAAkjK,EAAAjxK,KAAAwB,QAAAsvK,oBAAA,IAAAG,EAAAA,EAAA,SAAA,OAOA,OALAG,EAAAtwK,OAAA3D,EAAA,QAAA,CACAwd,MAAA,2CAAAu2J,EAAA,UAAA,YAAAA,EAAA,OAAA,SACAG,KAAA,cACApqJ,MAAA,SAAAjnB,KAAAwB,QAAAy/E,SAAA,OACA9kB,KAAAn8D,KAAAwB,QAAAqvK,iBAAA7wK,KAAAwB,QAAAy/E,SAAA,IAAA,KACAmwF,IA5BA,CAAAxwK,IAAA,0BAAAtB,MA+BA,WACA,IAAAgyK,EAAA,SAMA,OALA,MAAAtxK,KAAAwB,QAAAy/E,SACAqwF,EAAA,UACA,GAAAtxK,KAAAwB,QAAAy/E,WACAqwF,EAAA,WAEAA,IAtCA,CAAA1wK,IAAA,oBAAAtB,MAyCA,WACA,EAAA3B,EAAAC,KAAAoC,KAAAtC,MACAsC,KAAAtC,IAAAnB,SAEAyD,KAAAtC,IAAAsC,KAAAuxK,kBAEAvxK,KAAAy8D,OAAA37D,OAAAd,KAAAtC,OA/CA,CAAAkD,IAAA,iBAAAtB,MAkDA,WAAA,IAAA2hF,EAAA,EAAA72E,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA,EAAA8mK,EAAA,EAAA9mK,UAAA1N,aAAA2N,IAAAD,UAAA,GAAAA,UAAA,GAAA5O,IAAAkG,MAAAujG,QAAAC,cAAA7jG,UAAA8vK,wBAAAlwF,GACAjhF,KAAAwB,QAAA7D,EAAAupB,SAAA,CACA+5D,SAAAA,EACAiwF,WAAAA,GACAlxK,KAAAwB,SACAxB,KAAA+wK,wBAvDAH,EAAA,GCDAp1K,IAAAwkB,OAAA8W,gBAAA,GAEAt7B,IAAAwkB,OAAA8W,gBAAAiqC,eAAAvlE,IAAAwkB,OAAAsf,SAAAo2B,QAAAz1D,OAAA,CACAd,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,cAEA,CACA/gB,SAAA,WACAG,MAAAU,KAAAkgB,IAAA,UAIA7T,MAAA,SAAAkiC,GAIA,OAHA/yC,IAAAwkB,OAAAsf,SAAAo2B,QAAAr0D,UAAAw2F,iBAAA9sF,KAAA/K,KAAAuuC,GACA/yC,IAAAwkB,OAAAsf,SAAAo2B,QAAAr0D,UAAA42F,oBAAAltF,KAAA/K,KAAAuuC,GAEAA,GAEA8rD,iCAAA,SAAAxuE,EAAAhT,GACA,IAAAshF,EAAA,MAOAA,EANAn6F,KAAAktC,QAMA,IAAA1xC,IAAAwkB,OAAAm6E,qBAAAG,4BAAA,CACAxC,WAAA93F,KAAAkgB,IAAA,gBANA,IAAA1kB,IAAAwkB,OAAAm6E,qBAAAG,4BAAA,CACAx9F,GAAAkD,KAAAkgB,IAAA,MACA2L,UAAA7rB,KAAAkgB,IAAA,gBAQA2rB,MAAA,CACAn3B,QAAA/W,EAAAgC,KAAA,WACAkZ,EAAAshF,IACAn6F,SAGAwxK,gBAAA,SAAAC,EAAA54J,GACA7Y,KAAAotC,IAAA,YAAAqkI,GACA,IAAAj2K,IAAAyD,KAAAC,QAAA,CACAC,SAAAa,KAAAb,WAAA,cAAAsyK,EAAA3mK,aACA4lC,QAAAh8B,QAAA/W,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,GAAA,IAEA7Y,OAAAmsB,KAAAxuB,EAAAgC,KAAA,WACA,mBAAAkZ,GACAA,GAAA,IAEA7Y,QAEAmxC,WAAA,WACA31C,IAAAwkB,OAAAsf,SAAAo2B,QAAAr0D,UAAA8vC,WAAApmC,KAAA/K,MACAA,KAAAotC,IAAA,CACAU,YAAA9tC,KAAA8tC,YAAAkF,wBAMAx3C,IAAAk3C,YAAA5b,gBAAA,GAEAt7B,IAAAk3C,YAAA5b,gBAAA46I,gBAAAl2K,IAAAk3C,YAAAC,eAAA1yC,OAAA,CACA4sC,YAAA,KACA0B,MAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eACA5hE,SAAA,WACA,OAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAAloB,IAEA,CACAqC,SAAA,eAIAmzG,qBAAA,SAAAna,EAAAt/E,GACA,IAAArd,IAAAyD,KAAAC,QAAA,CACAC,SAAAa,KAAAb,WAAA,OACAiB,KAAA,CACA+3F,IAAAA,KAEA14F,OAAAiV,QAAA/W,EAAAgC,KAAA,SAAAS,GACAJ,KAAA2uC,MAAAvuC,GACAyY,KACA7Y,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,GAEA+U,KACA7Y,UAKAxE,IAAAkG,MAAAo1B,gBAAA,GAEAt7B,IAAAkG,MAAAo1B,gBAAA0mH,0BAAAhiJ,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,gCAEA0W,OAAA,CACAk+H,2BAAA,yBACAC,2CAAA,8BACAC,8BAAA,cACAC,gCAAA,gBACAliE,sCAAA,oBACAC,oDAAA,yBACAC,gDAAA,qBACAC,uCAAA,cACAC,2CAAA,iBACA+hE,mCAAA,iBACA9hE,2CAAA,iBACA+hE,qBAAA,kBACAC,oBAAA,YACAC,sBAAA,cACAC,wBAAA,aAEAr+H,kBAAA,WACA9zC,KAAAwB,QAAAszD,QAAA90D,KAAAwB,QAAAwjB,QAAA47C,cAAA,2BACA5gE,KAAAwB,QAAAyyD,QAAAz4D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,2BAEA,MAAA5gE,KAAAwB,QAAAwjB,QAAA8R,gBACA92B,KAAA0tD,WAAA1tD,KAAAwB,QAAAwjB,QAAA8R,gBAEA92B,KAAA0tD,WAAA1tD,KAAAwB,QAAAwjB,QAAA8R,gBAAA,IAAAt7B,IAAAk3C,YAAA5b,gBAAA46I,gBAAA,KAAA,CACA1sJ,QAAAhlB,KAAAwB,QAAAwjB,UAIAxpB,IAAAiC,IAAA0jB,QAAAgsD,gBAAAntE,KAAAwB,QAAAwjB,QAAA9E,IAAA,gBAAAviB,EAAAgC,KAAA,SAAAyyK,GACApyK,KAAAo+D,OAAAg0G,EAEApyK,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,eAAA/vD,EAAAgC,KAAA,WACAK,KAAAqhD,mBACArhD,OAEAA,KAAAs6D,SAAAt6D,KAAA0tD,WAAA,OAAA/vD,EAAAgC,KAAA,WACAK,KAAAgiD,UAAAI,QAAA,SACApiD,OACAA,KAAA0tD,WAAA3a,cACA/yC,QAEAg0C,WAAA,WACA,MAAA,CACAigB,QAAAj0D,KAAAwB,QAAAyyD,QACAa,QAAA90D,KAAAwB,QAAAszD,UAGAvgB,YAAA,WACAv0C,KAAAqhD,mBAEAA,gBAAA,WACA,IAAAvC,EAAA,CACA,CACAv9C,MAAA,OACAitB,MAAA,QACAmsC,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,OAAA,MAAAA,EAAA23C,SACA,SAAAh3F,EACAq/C,EAAA23C,SAAA73E,IAAA,aAEA,sBAAAkgC,EAAA23C,SAAA73E,IAAA,SAAA,MAAAkgC,EAAA23C,SAAA73E,IAAA,QAAA,UAEA,IACAlgB,OAEA,CAAAI,KAAA,yBAAAmB,MAAA,gBACA,CAAAnB,KAAA,yBAAAmB,MAAA,gBACA,CACAnB,KAAA,mBACAmB,MAAA,QACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAA,SAAA3rC,GACA,OAAA,IAAAzC,EAAAC,KAAAwC,GACA,GAGA,8MAAAA,EAAA,WAGA,CACAA,KAAA,mBACAmB,MAAA,QACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAA,SAAA3rC,GACA,OAAA5E,IAAAC,QAAAkZ,cAAAS,kBAAAhV,KAGA,CACAA,KAAA,kBACAmB,MAAA,OACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAA,SAAA3rC,GACA,OAAA5E,IAAAC,QAAAkZ,cAAAS,kBAAAhV,KAGA,CACAA,KAAA,2BACAmB,MAAA,SACAo5D,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,GAAA,EAAAA,EAAAtjD,GAAA,CACA,IAAA+iB,EAAA,GAOA,OANAliB,EAAAuhB,KAAA9e,EAAA,SAAAqtE,GACA,IAAAnvD,EAAAte,KAAAo+D,OAAAp+D,KAAAo+D,OAAAl+C,IAAAutD,GAAA,KACA,MAAAnvD,GACAuB,EAAAzB,KAAAE,IAEAte,MACArC,EAAAshB,IAAAthB,EAAAwpD,OAAAtnC,EAAA,SAAAvB,GACA,OAAAA,EAAA4B,IAAA,eACA,SAAA5B,GACA,OAAAA,EAAA4B,IAAA,eACAqC,KAAA,MAEA,MAAA,IACAviB,SAGA,IAAAxE,IAAAiC,IAAA0jB,QAAAjB,IAAA,aAAA1kB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAy1G,8CACArtH,EAAA1gC,KAAA,CACAhe,KAAA,uBACAmB,MAAA,UACAitB,MAAA,OACAmsC,WAAA,EACAC,YAAA,EACA7uB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,OAAA,EAAAA,EAAAlgC,IAAA,MACA,GAGA,SAAAnf,EACAX,EAEA,6DAAAA,EAAA,UAAA,IAAA,wFACAJ,QAGA8+C,EAAA1gC,KAAAS,MAAAigC,EAAA,CAAA,CACA1+C,KAAA,GACAmB,MAAA,GACAo5D,WAAA,EACAC,YAAA,EACApsC,MAAA,KAAAxuB,KAAAwB,QAAAszD,QAAA,GAAA,GAAA,KACA/oB,OAAApuC,EAAAgC,KAAA,SAAAS,EAAAW,EAAAq/C,GACA,IAAA08B,EAAA,GACAu1F,EAAA,uJAiBA,OAhBAv1F,GAAA,kIAEA98E,KAAAwB,QAAAszD,QACAgoB,GAAA18B,EAAAlgC,IAAA,YAAA1kB,IAAAiC,IAAA0jB,QAAA+4B,KAAAh6B,IAAA,WAAA1kB,IAAAiC,IAAA0jB,QAAAy/C,cAAA,gCAAAyxG,EAAA,GACAryK,KAAAwB,QAAAszD,UACAgoB,GAAAu1F,GAGAryK,KAAAwB,QAAAyyD,QACA6oB,GAAA,iIAEAA,GAAA,iIAEA98E,KAAAwB,QAAAszD,UACAgoB,GAAA,kIAEA,6EAAAA,EAAA,UACA98E,SAGA,IAAAsvC,EAAAtvC,KACAsyK,EAAA,CACA79H,GAAAz0C,KAAA7C,EAAA,0CACAiD,KAAAJ,KAAA0tD,WAAA1tC,OACAi+B,iBAAAziD,IAAA+Q,UAAA+qB,QAAAyB,iCACAkmB,SAAA,CACAoyD,WAAA,sDACAvkD,YAAA,iDAEAzZ,aAAA,CACArtB,OAAA,IAAAxqB,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,uCAEA+f,WAAA,WACA,MAAA,CACAk7C,UAAAx8F,IAAAiC,IAAA0jB,QAAA62E,UAAAh4E,OACA80C,QAAAxlB,EAAA9tC,QAAAszD,UAGA1P,aAAA,SAAAtB,EAAAuB,GACArlD,KAAA6gG,KAAA,qEAEAv+C,kBAAA,SAAAzuB,EAAAmkB,GACA,IAAAx8C,IAAAomD,OAAAC,aAAA,CACApN,GAAAuD,EAAAngC,KAAA,qBACAoqC,SAAA,SAAA3iD,GACAu0B,EAAAq3B,UAAA,WAAA5rD,IAEAq1D,YAAA,EACA7S,cAAA,EACAurB,iBAAA,aACAtrB,aAAAzS,EAAA0/D,kBAGAtqD,cAAA,SAAA7wB,EAAAzzB,GACA,IAAA4uG,EAAAn7E,EAAAm3B,UAAA,YACA,OAAA,IAAArtD,EAAAC,KAAAoxG,GACA5uG,EAGAzC,EAAA2uC,OAAAlsC,EAAA,SAAAggD,GACA,OAAAziD,EAAA8yD,SAAAu+C,EAAA5uD,EAAA23C,SAAAj7F,OAGAmgD,iBAAAt/C,EAAAgC,KAAA,SAAAygD,GACAA,EAAAhgD,QACAJ,KAAAuyK,YAAAnyH,EAAAhgD,SAEAJ,MACA6gD,mBAAA,CACAY,QAAA,CACA,CACA1kD,KAAA,OACAk1I,UAAA,gBACAniF,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAyyD,SACAj0D,MACAw6D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAAuyK,YAAAnyH,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,OACAk1I,UAAA,gBACAniF,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAyyD,SACAj0D,MACAw6D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAAuyK,YAAAnyH,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,gBACAk1I,UAAA,kBACAz3E,QAAA78D,EAAAgC,KAAA,SAAAygD,GACA,IAAA5kD,IAAAkG,MAAAg/B,SAAA8xI,oCAAA,CACAn5E,UAAAj5C,EAAAhgD,OAAA8f,IAAA,aACAi5C,OAAAx7D,EAAAgC,KAAA,SAAAS,GACAggD,EAAAhgD,OAAAgtC,IAAA,gBAAAzvC,EAAAshB,IAAAthB,EAAA2uC,OAAAlsC,EAAA4f,OAAA,SAAAuuB,GACA,OAAAA,EAAAruB,IAAA,gBACA,SAAAquB,GACA,MAAA,CACAk/B,QAAAl/B,EAAAruB,IAAA,eAGAkgC,EAAAuK,aAAAzI,QACAliD,SAEAA,MACA8vD,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAA5kD,IAAAiC,IAAA0jB,QAAA6D,QAAA47C,cAAA,wBAAA5gE,KAAAwB,QAAAqyB,OAAAr4B,IAAA+Q,UAAAkmK,iBAAA/wK,MAAAgxK,cAAA,EAAAtyH,EAAAhgD,OAAAtD,IACAkD,OAGA,CACAjD,KAAA,cACAk1I,UAAA,aACAniF,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAszD,SACA90D,MACAw6D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAAqpG,gBAAAjpD,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,gBACAk1I,UAAA,cACAniF,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAszD,SAAAt5D,IAAAiC,IAAA0jB,QAAAy/C,cAAA,iCACA5gE,MACAw6D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA2yK,0BAAAvyH,EAAAhgD,SACAJ,OAEA,CACAjD,KAAA,SACAk1I,UAAA,eACAx3E,UAAA,EACA3K,QAAAnyD,EAAAgC,KAAA,SAAAygD,GACA,OAAApgD,KAAAwB,QAAAszD,SACA90D,MACAw6D,QAAA78D,EAAAgC,KAAA,SAAAygD,GACApgD,KAAA4yK,cAAAxyH,IACApgD,SAIA8+C,QAAAA,GAEA9+C,KAAAgiD,UAAA,IAAAxmD,IAAAkG,MAAA46C,WAAAC,UAAA+1H,IAEAjgH,UAAA,SAAAh1D,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA8rI,EAAAnlJ,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OAAAta,OACAxE,WAAAA,UAAAi3K,YACAj3K,UAAAi3K,UAAAC,UAAA3tB,EAAAjlI,IAAA,UACA1kB,IAAA60C,cAAAb,OAAAc,cAAA,CACAvkB,QAAA,gCAIAgnJ,gBAAA,SAAA11K,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACAo4J,EAAAj4J,EAAAf,KAAA,WACA0sI,EAAAnlJ,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OAAAta,OACA,MAAA+kJ,GACAA,EAAAqsB,gBAAAC,IAGAuB,uBAAA,SAAA31K,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA8rI,EAAAnlJ,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OAAAta,OACAJ,KAAAqpG,gBAAA87C,IAEA97C,gBAAA,SAAA87C,GACA,IAAA3pJ,IAAAkG,MAAAikB,YAAA2jF,uBAAA,CACA/6D,MAAA42G,EACAngI,QAAAhlB,KAAAwB,QAAAwjB,WAGAiuJ,4BAAA,SAAA51K,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA8rI,EAAAnlJ,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OAAAta,OACAJ,KAAA2yK,0BAAAxtB,IAEAwtB,0BAAA,SAAAxtB,GACA,IAAA3pJ,IAAAkG,MAAAy4F,qBAAAqP,gCAAA,CACAj7D,MAAA42G,EACAngI,QAAAhlB,KAAAwB,QAAAwjB,WAGA81C,YAAA,SAAAz9D,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA8rI,EAAAnlJ,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OAAAta,OACAJ,KAAAuyK,YAAAptB,IAEAotB,YAAA,SAAAptB,GACA,IAAA3pJ,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA42G,KAGA+tB,cAAA,SAAA71K,GACA,IAAAmc,EAAArc,EAAAE,EAAAgc,eACA+mC,EAAApgD,KAAAgiD,UAAAd,OAAA1nC,EAAAkB,QAAA,OACA1a,KAAA4yK,cAAAxyH,IAEAwyH,cAAA,SAAAxyH,GACA,IAAA+kG,EAAA/kG,EAAAhgD,OACA,IAAA5E,IAAAkG,MAAAs5D,OAAAC,aAAA,CACAj1C,OAAA,iBACAgtH,iBAAA,SACA59F,KAAA,iEACAgiB,SAAAz5D,EAAAgC,KAAA,WACAK,KAAA0tD,WAAAnxD,OAAA4oJ,GACAA,EAAAhiG,WACAnjD,SAGAkyG,uBAAA,WACAlyG,KAAAwB,QAAAwjB,QAAAmtF,kBAAAx0G,EAAAgC,KAAA,SAAAitG,GACA,IAAApxG,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnvE,SAAAstE,EACA8B,aAAA1uG,KAAA0tD,WAAA1tC,OACAspC,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAC,aACAq2B,gBAAA,EACAu8C,SAAA,6CACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GACAh2D,KAAA0tD,WAAA4kD,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACAa,EAAAgC,KAAA,WACAK,KAAAqhD,mBACArhD,QACAA,SAEAA,QAEAuyG,mBAAA,WACAp1G,EAAA,uCAAAZ,SACA,IAAAiF,EAAA,CACA23D,OAAAx7D,EAAAgC,KAAA,SAAA8yG,EAAAryG,GACAJ,KAAA0tD,WAAA4kD,qBAAAG,EAAA90G,EAAAgC,KAAA,WACAK,KAAAqhD,mBACArhD,QACAA,MACA8uG,gBAAAnxG,EAAAshB,IAAAjf,KAAA0tD,WAAA1tC,OAAA,SAAA6E,GACA,OAAAA,EAAA/nB,MAIAtB,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAg8C,2BACAlxG,EAAA8zC,YAAA,EACA9zC,EAAA+zC,aAAA,KACA/zC,EAAAmxG,qBAAA,EACAnxG,EAAAoxG,oBAAA,GAGA,IAAAp3G,IAAAkG,MAAAg/B,SAAAmyE,6BAAArxG,IAEAsxG,YAAA,WACA,IAAAt3G,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnlD,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAE,SACAo2B,gBAAA,EACA7wC,QAAAhlB,KAAAwB,QAAAwjB,QACAotF,SAAA,yCACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GACAh2D,KAAA0tD,WAAA4kD,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACAa,EAAAgC,KAAA,WACAK,KAAAqhD,mBACArhD,QACAA,SAGAgzG,eAAA,aAGAC,eAAA,WACA,IAAAz3G,IAAAkG,MAAA49B,SAAAmvE,oBAAA,CACAnlD,QAAA9tD,IAAA+Q,UAAA+yB,SAAAC,SAAAI,MACAk2B,gBAAA,EACA64C,aAAA1uG,KAAA0tD,WAAA1tC,OACAoyF,SAAA,6CACAj5C,OAAAx7D,EAAAgC,KAAA,SAAAq2D,GACAh2D,KAAA0tD,WAAA4kD,qBAAA30G,EAAAshB,IAAA+2C,EAAA,SAAAnxC,GACA,OAAAA,EAAA/nB,KACAa,EAAAgC,KAAA,WACAK,KAAAqhD,mBACArhD,QACAA,SAGAmzG,kBAAA,WACA,IAAA33G,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA,IAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CACAl1C,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,GACA8c,QAAApe,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA08C,8BAAA53G,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAA08C,8BAAA,UAIAC,eAAA,WACA,IAAA73G,IAAAkG,MAAA49B,SAAA0hC,qBAAA,CACAzyB,MAAA,IAAA/yC,IAAAwkB,OAAA8W,gBAAAiqC,eAAA,CACAl1C,UAAArwB,IAAAiC,IAAA0jB,QAAA6D,QAAAloB,QAIAq2K,sBAAA,WACA,IAAA33K,IAAAyD,KAAAC,QAAA,CACAC,SAAAa,KAAAwB,QAAAwjB,QAAA7lB,UAAA,GAAA,mBACAiB,KAAA,CACAZ,QAAA,KAEAC,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAC,GACApE,IAAAonC,MAAAg4D,aAAAh7F,EAAAO,IAAA,CACA0lH,YAAA,KAEA7lH,OAAAmsB,KAAAxuB,EAAAgC,KAAA,SAAAmE,EAAAsoB,EAAAxhB,KACA5K,QAEAg7F,YAAA,WACA,GAAA,MAAAh7F,KAAAwB,QAAAwjB,QAAA,CAIA,IAAAimC,EAAA,GACA+jD,EAAAhvG,KAAAgiD,UAAAgJ,UAAA,YAEA,EAAArtD,EAAAC,KAAAoxG,KACA/jD,EAAA+sC,UAAAgX,GAGA,IAAArrD,EAAA3jD,KAAAgiD,UAAAA,UAAA2B,QAAA,GACA,IAAAnoD,IAAAwkB,OAAA+yI,QAAAqgB,UAAA,CACAryK,KAAA,kBACA8qB,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,GACA0E,QAAA,CACAypD,QAAAA,EACAnM,QAAA,CAAA,WAAA,cAAA,cAAA,QAAA,QAAA,OAAA,UACAu0H,YAAA1vH,KAGA2vH,OAAA,CAAAzhK,OAAA,UAAAwc,KAAA,gBAIAklJ,UAAA,WACA,GAAA,MAAAvzK,KAAAwB,QAAAwjB,QAAA,CAIA,IAAAimC,EAAA,GACA+jD,EAAAhvG,KAAAgiD,UAAAgJ,UAAA,YAEA,EAAArtD,EAAAC,KAAAoxG,KACA/jD,EAAA+sC,UAAAgX,GAGA,IAAArrD,EAAA3jD,KAAAgiD,UAAAA,UAAA2B,QAAA,GACA,IAAAnoD,IAAAwkB,OAAA+yI,QAAAqgB,UAAA,CACAryK,KAAA,kBACA8qB,UAAA7rB,KAAAwB,QAAAwjB,QAAAloB,GACA0E,QAAA,CACAypD,QAAAA,EACAnM,QAAA,CAAA,WAAA,cAAA,cAAA,QAAA,QAAA,OAAA,UACAu0H,YAAA1vH,KAGA2vH,OAAA,CAAAzhK,OAAA,QAAAwc,KAAA,kBAOA7yB,IAAAmhC,QAAA7F,gBAAA,CACAyiB,OAAA,CACA,CACAE,MAAA,+BACA18C,KAAA,kBACA8b,SAAA,SAAAgT,GACArwB,IAAAmhC,QAAAgkH,YAAAC,qBAAAr+I,SAAAspB,GAAA,qBAGA,CACA4tB,MAAA,mCACA18C,KAAA,iBACA8b,SAAA,SAAAgT,EAAA/uB,GACAtB,IAAAmhC,QAAAgkH,YAAAC,qBAAAr+I,SAAAspB,GAAA,kBAAA,CACA/uB,GAAAA,QAOAtB,IAAAiC,IAAA6hE,UAAA9jE,IAAAmhC,QAAA7F,gBAAAyiB,QC1oBA/9C,IAAAkG,MAAA8xK,eAAA,GAEAh4K,IAAAkG,MAAA8xK,eAAAC,cAAAj4K,IAAAkG,MAAAwxC,SAAAjzC,OAAA,CACAinB,SAAA,CACAykB,SAAA,IAAAnwC,IAAAivC,WAAAE,SAAAnvC,IAAA+Q,UAAAowB,QAAAI,OAAA,kBACA/X,QAAA,KACAw8F,eAAA,GACAv/D,SAAAtkD,EAAAu4C,KACAw9H,gBAAA,EACAC,mBAAA,EACAC,mBAAA,MAEA3/H,aAAA,WACAj0C,KAAAwB,QAAAwjB,QAAA6uJ,iBACA7zK,KAAAwB,QAAAwjB,QAAA6uJ,eAAA,CACAC,WAAA,EACAC,iBAAAv4K,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAm2G,6CACAmH,oBAAAx4K,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAk2G,iDACAqH,cAAAz4K,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAi2G,2CACAuH,YAAA,SAAAl0K,KAAAwB,QAAAwjB,QAAA9E,IAAA,mBAAA,OAAAlgB,KAAAwB,QAAAwjB,QAAA9E,IAAA,WAAA1kB,IAAAC,QAAAwH,YAAAC,cAAA,IAAAZ,KAAAtC,KAAAwB,QAAAwjB,QAAA9E,IAAA,YAAA1kB,IAAAC,QAAAwH,YAAAE,YAAAwB,UAAA,GAAA,KACAwvK,iBAAA34K,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyzG,4BAAA3uK,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAyzG,4BAAA,eACAiK,SAAA,GACAtmI,YAAA,IAAAtyC,IAAAk3C,YAAA9P,MAAA40B,MACA68G,aAAA74K,IAAAC,QAAA4hB,OACAi3J,eAAA,IAAA94K,IAAAk3C,YAAA9P,MAAA40B,MACA+8G,YAAAv0K,KAAAwB,QAAAoyK,mBACAY,QAAA,OAIAx0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,gBACAz0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAz0K,KAAAwB,QAAAggH,eAAA,GACAxhH,KAAAwB,QAAAwjB,QAAA6uJ,eAAAU,aACA52K,EAAAuhB,KAAAlf,KAAAwB,QAAAggH,eAAA7jH,EAAAgC,KAAA,SAAAmlD,GACAA,EAAA5kC,IAAA,iBAAAlgB,KAAAwB,QAAAwjB,QAAA6uJ,eAAAU,cACAv0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAA3vH,IACA9kD,QAKAA,KAAAg0C,WAAA,CACAwtE,eAAAxhH,KAAAwB,QAAAggH,eACAkzD,gBAAA10K,KAAAwB,QAAAkzK,gBACAhB,eAAA1zK,KAAAwB,QAAAkyK,eACAC,kBAAA3zK,KAAAwB,QAAAmyK,kBACAQ,iBAAA34K,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAyzG,4BAAA3uK,IAAAiC,IAAA0jB,QAAAq1C,YAAAI,QAAAp7D,IAAA+Q,UAAAmqD,gBAAAyzG,4BAAA,eACAwK,WAAA,KAGApgI,YAAA,WAEAv0C,KAAAwB,QAAAkyK,iBACA1zK,KAAA7C,EAAA,wBAAAyE,IAAA5B,KAAAwB,QAAAwjB,QAAA6uJ,eAAAO,UAEAp0K,KAAA7C,EAAA,wBAAA2b,GAAA,eAAAnb,EAAAgC,KAAA,WACAK,KAAAwB,QAAAwjB,QAAA6uJ,eAAAO,SAAAp0K,KAAA7C,EAAA,wBAAAyE,MACA,mBAAA5B,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,aACAjiD,QAIA,EAAArC,EAAAC,KAAAoC,KAAAwB,QAAAkzK,mBACA10K,KAAA40K,oBAAA,IAAAp5K,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,aACA2kD,cAAA,EACAC,aAAA/hD,KAAAwB,QAAAwjB,QAAA6uJ,eAAAW,QAAAx0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAW,QAAA,EACAvyH,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAwB,QAAAwjB,QAAA6uJ,eAAAW,QAAAl1K,GAAA,MACAU,SAKAA,KAAA7C,EAAA,yBAAAyE,IAAA5B,KAAAwB,QAAAwjB,QAAA6uJ,eAAAgB,gBACA70K,KAAA7C,EAAA,yBAAA2b,GAAA,eAAAnb,EAAAgC,KAAA,WACAK,KAAAwB,QAAAwjB,QAAA6uJ,eAAAgB,eAAA70K,KAAA7C,EAAA,yBAAAyE,MACA,mBAAA5B,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA80K,gBACA90K,OAEA,SAAAA,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YACAl0K,KAAA7C,EAAA,sBAAAyE,IAAA,IAAA6W,KAAA,YAAA,GAEAzY,KAAAwB,QAAAwjB,QAAA6uJ,gBAAA,eAAA7zK,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YACAl0K,KAAA7C,EAAA,sBAAAyE,IAAA,IAEA5B,KAAA7C,EAAA,sBAAAyE,IAAA5B,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,aAGAl0K,KAAA7C,EAAA,sBAAA2b,GAAA,eAAAnb,EAAAgC,KAAA,WACAK,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YAAAl0K,KAAA7C,EAAA,sBAAAyE,MACA,mBAAA5B,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA80K,gBACA90K,OAEAA,KAAA7C,EAAA,2BAAAsb,KAAA,UAAA,SAAAzY,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,aAEAl0K,KAAA7C,EAAA,2BAAA2b,GAAA,QAAAnb,EAAAgC,KAAA,WACAK,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YAAAl0K,KAAA7C,EAAA,2BAAAsb,KAAA,WAAA,OAAAzY,KAAA7C,EAAA,sBAAAyE,MACA5B,KAAA7C,EAAA,sBAAAyE,IAAA,IAAA6W,KAAA,WAAAzY,KAAA7C,EAAA,2BAAAsb,KAAA,YACA,mBAAAzY,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA+0K,iBACA/0K,OAEAxE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAA41G,yCACAtsK,KAAA7C,EAAA,+CAAAsb,KAAA,YAAA,GAGAzY,KAAAg1K,YAAA,IAAAx5K,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,uBACA4kD,aAAA/hD,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAz0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAv0J,IAAA,eAAAlgB,KAAAwB,QAAAggH,eAAA,GAAAthG,IAAA,eACA+0J,YAAA,EACAhzH,SAAAtkD,EAAAgC,KAAA,WACAK,KAAAk1K,oBAAAl1K,KAAAg1K,YAAA18G,aACAt4D,QAGAA,KAAAm1K,aAAA,IAAA35K,IAAAomD,OAAAC,aAAA,CACApN,GAAAz0C,KAAA7C,EAAA,wBACA4kD,aAAA/hD,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,aAAAn1K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,aAAA,OACAlzH,SAAAtkD,EAAAgC,KAAA,SAAAL,GACA,SAAAA,IACAA,EAAA,IACAU,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,aAAA71K,EACA,mBAAAU,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA+0K,iBACA/0K,QAGAxE,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAuvG,aAMAjmK,KAAA7C,EAAA,yCAAAsb,KAAA,WAAAjd,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAm2G,8CACA7sK,KAAA7C,EAAA,yCAAAsb,KAAA,WAAAjd,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAk2G,kDACA5sK,KAAA7C,EAAA,yCAAAsb,KAAA,WAAAjd,IAAAiC,IAAA0jB,QAAAq1C,YAAAC,QAAAj7D,IAAA+Q,UAAAmqD,gBAAAi2G,8CAPA3sK,KAAA7C,EAAA,yCAAAsb,KAAA,UAAA,GACAzY,KAAA7C,EAAA,yCAAAsb,KAAA,UAAA,GACAzY,KAAA7C,EAAA,yCAAAsb,KAAA,UAAA,IAQA,IAAA28J,EAAA,CAAA,KAEAp1K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAE,kBACAqB,EAAAh3J,KAAA,KAEApe,KAAAwB,QAAAwjB,QAAA6uJ,eAAAG,qBACAoB,EAAAh3J,KAAA,KAEApe,KAAAwB,QAAAwjB,QAAA6uJ,eAAAI,eACAmB,EAAAh3J,KAAA,KAEA,IAAA5iB,IAAAomD,OAAAyzH,sCAAA,CACA5gI,GAAAz0C,KAAA7C,EAAA,uBACA8kD,SAAAtkD,EAAAgC,KAAA,SAAAL,GACAU,KAAAwB,QAAAwjB,QAAA6uJ,eAAAE,kBAAA,IAAAz0K,EAAA0C,QAAA,KACAhC,KAAAwB,QAAAwjB,QAAA6uJ,eAAAG,qBAAA,IAAA10K,EAAA0C,QAAA,KACAhC,KAAAwB,QAAAwjB,QAAA6uJ,eAAAI,eAAA,IAAA30K,EAAA0C,QAAA,KACA,mBAAAhC,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,aACAjiD,MACA20D,YAAA,EACA7S,cAAA,EACAk2E,cAAA,EACA3qD,iBAAA,sBACAtrB,aAAAqzH,EACA3tE,iBAAA,CAAA,OAGAznG,KAAAs1K,kBAAA,IAAA95K,IAAAomD,OAAAsU,WAAA,CACAzhB,GAAAz0C,KAAA7C,EAAA,sBACA4kD,aAAA/hD,KAAAwB,QAAAwjB,QAAA6uJ,eAAA0B,YACAtwC,OAAAtnI,EAAAgC,KAAA,WAIAxC,EAFA,0LAEAq4K,UAAAx1K,KAAA7C,EAAA,kBACA6C,KAAA7C,EAAA,aAAAk3C,QAAA,CAAA+C,UAAA,OAAAo0G,UAAA,WACAxrJ,KAAA7C,EAAA,aAAA2C,MAAA,SAAAuoD,OAIAroD,MACAiiD,SAAAtkD,EAAAgC,KAAA,SAAAy2D,GACAp2D,KAAAwB,QAAAwjB,QAAA6uJ,eAAA0B,YAAAn/G,EACA,mBAAAp2D,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA80K,gBACA90K,QAGAA,KAAAwB,QAAAmyK,oBACA3zK,KAAA62D,SAAA,IAAAr7D,IAAAkG,MAAAkhC,MAAAk0B,iBAAA,CACAriB,GAAAz0C,KAAA7C,EAAA,aACAuwD,WAAA1tD,KAAAwB,QAAAwjB,QAAA6uJ,eAAA/lI,YACAiJ,KAAA/2C,KAAAwB,QAAAwjB,QAAA6uJ,eAAAQ,eAGAr0K,KAAAwB,QAAAwjB,QAAAywJ,iBAAA,CACAC,UAAA,EACAC,iBAAA,GACAh4K,EAAAgC,KAAA,SAAAmuC,GACA9tC,KAAAs0K,eAAAxmI,EACA,EAAAnwC,EAAAC,KAAAkwC,EAAA9tB,SACAhgB,KAAA7C,EAAA,oBAAAud,QAAA,kBAAA+8B,OAEA,IAAAj8C,IAAAkG,MAAAg/B,SAAAk1I,mBAAA,CACAnhI,GAAAz0C,KAAA7C,EAAA,oBACAuwD,WAAA5f,EACA9oB,QAAAhlB,KAAAwB,QAAAwjB,QACA6wJ,gBAAA,EACAC,gBAAA,EACAC,kBAAA,EACAC,oBAAAh2K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAS,eACAryH,SAAAtkD,EAAAgC,KAAA,SAAAmuC,GACA9tC,KAAAwB,QAAAwjB,QAAA6uJ,eAAAS,eAAAxmI,GACA9tC,SAEAA,QAGAA,KAAAwB,QAAAwjB,QAAA6uJ,eAAAmB,YAGAh1K,KAAA+0K,gBAFA/0K,KAAAk1K,oBAAAl1K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAU,YAAAv0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAU,YAAAv0K,KAAAwB,QAAAggH,eAAA,GAAAthG,IAAA,iBAKAg1J,oBAAA,SAAAX,GACA,IAAAE,EAAA92K,EAAA2uC,OAAAtsC,KAAAwB,QAAAggH,eAAA,SAAA71E,GACA,OAAAA,EAAAzrB,IAAA,iBAAAq0J,IACA,GACAv0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAA,EACAz0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAmB,YAAAP,EAAAv0J,IAAA,eACAlgB,KAAAwB,QAAAwjB,QAAA6uJ,eAAAgB,eAAAJ,EAAAv0J,IAAA,mBACAlgB,KAAAwB,QAAAwjB,QAAA6uJ,eAAA0B,YAAAd,EAAAv0J,IAAA,uBACAlgB,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,aAAAV,EAAAv0J,IAAA,sBAEAlgB,KAAA7C,EAAA,oBAAAyE,IAAA5B,KAAAwB,QAAAwjB,QAAA6uJ,eAAAgB,gBACA70K,KAAAm1K,aAAA9yH,SAAAoyH,EAAAv0J,IAAA,sBAAAu0J,EAAAv0J,IAAA,sBAAA,QACAlgB,KAAAs1K,kBAAAjzH,SAAAoyH,EAAAv0J,IAAA,wBAEA,mBAAAlgB,KAAAwB,QAAAygD,UACAthD,QAAAX,KAAAwB,QAAAygD,YAEAjiD,KAAA+0K,iBAEAD,aAAA,WACA9jI,aAAAhxC,KAAAixC,aACAjxC,KAAAixC,YAAAC,WAAAvzC,EAAAgC,KAAA,WACAK,KAAA+0K,iBACA/0K,MAAA,MAEA+0K,cAAA,WACA,IAAA51K,EAAA3D,IAAAC,QAAA2D,WAAAC,iBAAA,CACA,CACAF,SAAA,WACAG,MAAAU,KAAAwB,QAAAwjB,QAAA9E,IAAA,cAEA,CACA/gB,SAAA,0BAEA,CACA,CACAI,UAAA,cACAD,MAAAU,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAv0J,IAAA,kBAGA,IAAA1kB,IAAAyD,KAAAC,QAAA,CACAC,SAAAA,IACAM,OAAAC,KAAA/B,EAAAgC,KAAA,SAAAS,GACAJ,KAAAwB,QAAAy0K,OAAA71K,EAEA,IAAAi+G,EAAAr+G,KAAAwB,QAAAwjB,QAAA6uJ,eAAAgB,eACAz/H,EAAAp1C,KAAAwB,QAAAwjB,QAAA6uJ,eAAAY,cAAAv0J,IAAA,gBAEAlgB,KAAAwB,QAAAy0K,OAAAt0D,eAAAwzD,aAAA,MACA,YAAAn1K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,aACAn1K,KAAAwB,QAAAy0K,OAAAt0D,eAAAwzD,aAAA,iBACA,YAAAn1K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAsB,eACAn1K,KAAAwB,QAAAy0K,OAAAt0D,eAAAwzD,aAAA,UAEAn1K,KAAAwB,QAAAy0K,OAAAt0D,eAAAu0D,WAAAl2K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YACAl0K,KAAAwB,QAAAy0K,OAAAt0D,eAAAw0D,gBAAAn2K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YAEAl0K,KAAAwB,QAAAy0K,OAAAt0D,eAAAy0D,sBAAA,kBAAAp2K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YAAAl0K,KAAAwB,QAAAwjB,QAAA6uJ,eAAAK,YAAA,OAEAl0K,KAAAwB,QAAAy0K,OAAAt0D,eAAA4zD,YAAAv1K,KAAAq2K,gBAAAr2K,KAAAwB,QAAAwjB,QAAA6uJ,eAAA0B,aACAv1K,KAAA7C,EAAA,4BAAAsE,KAAAzB,KAAAq2K,gBAAAh4D,IACAr+G,KAAA7C,EAAA,yBAAAsE,KAAAzB,KAAAq2K,gBAAAjhI,IAAAvrB,UAAA,IAEA7pB,OAAAmsB,KAAA,eAIAkqJ,gBAAA,SAAAnsK,GAsYA,OAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAAA,EAAA5L,QAAA,uBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAAgV,WACApmE,QAAA,sBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAA0vC,UACA9gG,QAAA,sBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAA7qC,UACAvmB,QAAA,uBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAA48C,WACAhuG,QAAA,uBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAA68C,WACAjuG,QAAA,mBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAA88C,OACAluG,QAAA,oBAAA0B,KAAAwB,QAAAy0K,OAAAvmH,OAAAqS,QACAzjE,QAAA,kBAAA0B,KAAAwB,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A,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAFAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GAHAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADA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","file":"app.js","sourcesContent":["let PJQ = PJQ ? PJQ : {};\n\nPJQ.helpers = {\n getMobileOS: function () {\n let userAgent = navigator.userAgent || navigator.vendor || window.opera;\n if (/android/i.test(userAgent)) {\n return \"android\";\n }\n\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n return \"ios\";\n }\n\n return null;\n },\n setViewport: function (content) {\n let existingViewport = document.getElementById('viewport');\n if (existingViewport != null) {\n existingViewport.remove();\n }\n\n let nameViewports = document.getElementsByName(\"viewport\");\n if (nameViewports && nameViewports.length > 0) {\n for (let i = 0; i < nameViewports.length; i++) {\n if (typeof nameViewports[i].remove === 'function') {\n nameViewports[i].remove();\n }\n }\n }\n\n if (content != null) {\n let viewPortTag = document.createElement('meta');\n viewPortTag.id = \"viewport\";\n viewPortTag.name = \"viewport\";\n viewPortTag.content = content;\n document.getElementsByTagName('head')[0].appendChild(viewPortTag);\n }\n },\n domReadyHelper: function () {\n if (typeof $ === 'function') {\n //Prevent main ASP.NET outer form from submitting\n //This fixes issues with refreshing when pressing enter on input fields\n $(\"#Form\").submit(function (e) {\n e.preventDefault();\n });\n\n let $skinHeader = $('.skin-header'),\n $content = PJQ.app.$el;\n if (_.size($skinHeader) > 0) {\n $content.css({\n top: $skinHeader.height(),\n bottom: 0,\n left: 0,\n position: 'fixed',\n 'overflow-y': 'auto'\n });\n\n let $skinFooter = $('.skin-footer');\n if (_.size($skinFooter) > 0) {\n $content.css('bottom', $skinFooter.height())\n }\n }\n\n window.getParameterByName = function (name) {\n name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n let regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\"),\n results = regex.exec(location.search);\n return results === null ? \"\" : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n };\n\n window.processUpload = function (uid, sid, folder) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'processupload',\n value: uid\n }\n ], [\n {\n parameter: 'folderId',\n value: folder\n }\n ]),\n isApi2: true\n }).post().done(_.bind(function (response) {\n jQuery('#dlg-uplc').click();\n if (typeof FileUploadCallback === \"function\")\n FileUploadCallback();\n }, this));\n };\n\n // create and populate a hidden form.\n $.extend({\n form: function (url, data, method) {\n if (method == null)\n method = 'POST';\n if (data == null)\n data = {};\n\n let form = $('<form>').attr({\n method: method,\n action: url\n }).css({\n display: 'none'\n });\n\n let addData = function (name, data) {\n if ($.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n let value = data[i];\n addData(name + '[]', value);\n }\n } else if (typeof data === 'object') {\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n addData(name + '[' + key + ']', data[key]);\n }\n }\n } else if (data != null) {\n form.append($('<input>').attr({\n type: 'hidden',\n name: String(name),\n value: String(data)\n }));\n }\n };\n\n for (let key in data) {\n if (data.hasOwnProperty(key)) {\n addData(key, data[key]);\n }\n }\n return form.appendTo('body');\n }\n });\n\n if (typeof $.ui === 'object') {\n\n if (typeof $.ui.dialog === 'function') {\n $.widget(\"ui.dialog\", $.extend({}, $.ui.dialog.prototype, {\n _title: function (title) {\n if (!this.options.title) {\n title.html(\" \");\n } else {\n title.html(this.options.title);\n }\n }\n }));\n }\n\n if (typeof $.views === 'object') {\n $.views.helpers({\n formatPhone: function (val) {\n if (val.length == 10)\n return val.substring(0, 3) + '-' + val.substring(3, 6) + '-' + val.substring(6);\n else\n return val;\n },\n\n formatNewsfeedName: function (val) {\n var temp = val.substring(val.indexOf('{') + 1);\n return temp.substring(0, temp.indexOf('|'));\n },\n\n formatNewsfeed: function (val) {\n if (val.indexOf('}') != -1) {\n var temp = val.substring(val.lastIndexOf('}') + 1);\n return temp;\n } else\n return val;\n },\n\n formatDate: function (jsonDate) {\n var date = new Date(parseInt(jsonDate.substr(6)));\n return dateFormat(date, 'dddd, mmmm d, yyyy @ h:MM:ss TT Z');\n },\n\n parseDate: function (myDate) {\n if (!myDate || myDate.toLowerCase() === 'n/a')\n return 'N/A';\n\n var date = new Date(myDate);\n return dateFormat(date, 'mm/dd/yyyy');\n },\n\n isTooOld: function (jsonDate) {\n if (!jsonDate)\n return true;\n var createdOn = new Date(parseInt(jsonDate.substr(6)));\n return ((((new Date() - createdOn) % 86400000) % 3600000) / 60000 > 5);\n },\n\n parseDateDT: function (myDate) {\n if (!myDate || myDate.trim().length == 0) {\n return '';\n }\n if (myDate.indexOf(' ') != -1)\n myDate = myDate.substring(0, myDate.indexOf(' '));\n\n var date = new Date(myDate);\n return PJQ.helpers.dateHelpers.getDateString(date, PJQ.helpers.dateHelpers.dateFormats.DATE);\n },\n parseTimeDT: function (myDate) {\n if (!myDate)\n return '';\n if (myDate.indexOf('AM') == -1 && myDate.indexOf('PM') == -1)\n return '';\n return myDate.substring(myDate.indexOf(' ') + 1);\n },\n isLast: function () {\n return this.index == this.parent.data.length - 1;\n },\n notLast: function () {\n return this.index !== this.parent.data.length - 1;\n }\n });\n }\n }\n\n if (typeof $.blueimp === 'object') {\n $.blueimp.fileupload.prototype._initProgressListener = function (options) {\n var that = this,\n xhr = options.xhr ? options.xhr() : jQuery.ajaxSettings.xhr();\n if (xhr.upload) {\n jQuery(xhr.upload).bind('progress', function (e) {\n var oe = e.originalEvent;\n // Make sure the progress event properties get copied over:\n e.lengthComputable = oe.lengthComputable;\n e.loaded = oe.loaded;\n e.total = oe.total;\n that._onProgress(e, options);\n });\n options.xhr = function () {\n return xhr;\n };\n }\n };\n }\n }\n }\n};\n\nPJQ.helpers.dateHelpers = {\n dateFormats: {\n URL_DATE: 'MM-dd-yyyy',\n DATE_TIME: \"MM/dd/yyyy hh:mm TT\",\n TIME: \"hh:mm TT\",\n DATE: \"MM/dd/yyyy\",\n DATE_MONTH_DAY: \"MM/dd\",\n DATE_YMD: \"yyyy-MM-dd\",\n MONTH_YEAR: 'MMMM yyyy',\n MONTH_DAY_SHORT: 'MMM dd',\n datePicker: {\n DATE_TIME: \"MM/DD/YYYY hh:mm A\",\n DATE: \"MM/DD/YYYY\",\n ALT_DATE: \"MM-DD-YYYY\"\n }\n },\n getTimezoneByOffset: function (offset) {\n for (let timezone in this.timezones) {\n if (this.timezones[timezone].offset === offset) {\n return timezone;\n }\n }\n return null;\n },\n getFormattedTimezoneOffset: function (offset) {\n let tzo = offset * 60,\n dif = tzo >= 0 ? '+' : '-',\n pad = function (num) {\n return (num < 10 ? '0' : '') + num;\n };\n return dif + pad(Math.floor(Math.abs(tzo) / 60)) +\n ':' + pad(Math.abs(tzo) % 60);\n },\n timezones: {\n ACST: {name: \"AUS Central Standard Time\", abbr: \"ACST\", offset: 9.5},\n ADT: {name: \"Azerbaijan Standard Time\", abbr: \"ADT\", offset: 5},\n AEST: {name: \"AUS Eastern Standard Time\", abbr: \"AEST\", offset: 10},\n AKDT: {name: \"Alaskan Standard Time\", abbr: \"AKDT\", offset: -8},\n AST: {name: \"Afghanistan Standard Time\", abbr: \"AST\", offset: 4.5},\n BST: {name: \"Bangladesh Standard Time\", abbr: \"BST\", offset: 6},\n CAST: {name: \"Cen. Australia Standard Time\", abbr: \"CAST\", offset: 9.5},\n CBST: {name: \"Central Brazilian Standard Time\", abbr: \"CBST\", offset: -4},\n CST: {name: \"Central Standard Time\", abbr: \"CST\", offset: -6},\n CDT: {name: \"Central Daylight Time\", abbr: \"CDT\", offset: -5},\n CEDT: {name: \"Central European Standard Time\", abbr: \"CEDT\", offset: 2},\n CPST: {name: \"Central Pacific Standard Time\", abbr: \"CPST\", offset: 11},\n CVST: {name: \"Cape Verde Standard Time\", abbr: \"CVST\", offset: -1},\n DST: {name: \"Dateline Standard Time\", abbr: \"DST\", offset: -12},\n EAST: {name: \"E. Australia Standard Time\", abbr: \"EAST\", offset: 10},\n EDT: {name: \"Eastern Daylight Time\", abbr: \"EST\", offset: -4},\n EST: {name: \"Eastern Standard Time\", abbr: \"EST\", offset: -5},\n EEDT: {name: \"E. Europe Standard Time\", abbr: \"EEDT\", offset: 3},\n ESAST: {name: \"E. South America Standard Time\", abbr: \"ESAST\", offset: -3},\n FDT: {name: \"FLE Standard Time\", abbr: \"FDT\", offset: 3},\n FST: {name: \"Fiji Standard Time\", abbr: \"FST\", offset: 12},\n GDT: {name: \"GTB Standard Time\", abbr: \"GDT\", offset: 3},\n GET: {name: \"Georgian Standard Time\", abbr: \"GET\", offset: 4},\n GMT: {name: \"GMT Standard Time\", abbr: \"GMT\", offset: 0},\n GST: {name: \"Greenwich Standard Time\", abbr: \"GST\", offset: 0},\n HST: {name: \"Hawaiian Standard Time\", abbr: \"HST\", offset: -10},\n IDT: {name: \"Iran Standard Time\", abbr: \"IDT\", offset: 4.5},\n IST: {name: \"India Standard Time\", abbr: \"IST\", offset: 5.5},\n JDT: {name: \"Israel Standard Time\", abbr: \"JDT\", offset: 3},\n JST: {name: \"Japan Standard Time\", abbr: \"JST\", offset: 9},\n KDT: {name: \"Kamchatka Standard Time\", abbr: \"KDT\", offset: 13},\n KST: {name: \"Korea Standard Time\", abbr: \"KST\", offset: 9},\n LST: {name: \"Libya Standard Time\", abbr: \"LST\", offset: 2},\n MEDT: {name: \"Middle East Standard Time\", abbr: \"MEDT\", offset: 3},\n MPST: {name: \"Singapore Standard Time\", abbr: \"MPST\", offset: 8},\n MSK: {name: \"Moscow Standard Time\", abbr: \"MSK\", offset: 3},\n MDT: {name: \"Mountain Daylight Time\", abbr: \"MDT\", offset: -6},\n MST: {name: \"Mountain Standard Time\", abbr: \"MST\", offset: -7},\n NAEST: {name: \"North Asia East Standard Time\", abbr: \"NAEST\", offset: 8},\n NAST: {name: \"North Asia Standard Time\", abbr: \"NAST\", offset: 8},\n NCAST: {name: \"N. Central Asia Standard Time\", abbr: \"NCAST\", offset: 7},\n NDT: {name: \"Newfoundland Standard Time\", abbr: \"NDT\", offset: -2.5},\n NST: {name: \"Nepal Standard Time\", abbr: \"NST\", offset: 5.75},\n NZST: {name: \"New Zealand Standard Time\", abbr: \"NZST\", offset: 12},\n PDT: {name: \"Pacific Daylight Time\", abbr: \"PDT\", offset: -7},\n PKT: {name: \"Pakistan Standard Time\", abbr: \"PKT\", offset: 5},\n PSST: {name: \"Pacific SA Standard Time\", abbr: \"PSST\", offset: -4},\n PST: {name: \"Pacific Standard Time\", abbr: \"PST\", offset: -8},\n PYT: {name: \"Paraguay Standard Time\", abbr: \"PYT\", offset: -4},\n RDT: {name: \"Romance Standard Time\", abbr: \"RDT\", offset: 2},\n SAMT: {name: \"Samara Time\", abbr: \"SAMT\", offset: 4},\n SAST: {name: \"SE Asia Standard Time\", abbr: \"SAST\", offset: 7},\n SDT: {name: \"Syria Standard Time\", abbr: \"SDT\", offset: 3},\n SEST: {name: \"SA Eastern Standard Time\", abbr: \"SEST\", offset: -3},\n SLST: {name: \"Sri Lanka Standard Time\", abbr: \"SLST\", offset: 5.5},\n SPST: {name: \"SA Pacific Standard Time\", abbr: \"SPST\", offset: -5},\n SST: {name: \"Samoa Standard Time\", abbr: \"SST\", offset: 13},\n SWST: {name: \"SA Western Standard Time\", abbr: \"SWST\", offset: -4},\n TDT: {name: \"Turkey Standard Time\", abbr: \"TDT\", offset: 3},\n TST: {name: \"Tonga Standard Time\", abbr: \"TST\", offset: 13},\n UST: {name: \"Ulaanbaatar Standard Time\", abbr: \"UST\", offset: 8},\n UTC: {name: \"UTC\", abbr: \"UTC\", offset: 0},\n VST: {name: \"Vladivostok Standard Time\", abbr: \"VST\", offset: 11},\n WAST: {name: \"W. Australia Standard Time\", abbr: \"WAST\", offset: 8},\n WCAST: {name: \"W. Central Africa Standard Time\", abbr: \"WCAST\", offset: 1},\n WEDT: {name: \"W. Europe Standard Time\", abbr: \"WEDT\", offset: 2},\n WPST: {name: \"West Pacific Standard Time\", abbr: \"WPST\", offset: 10},\n YEKT: {name: \"Yekaterinburg Time\", abbr: \"YEKT\", offset: 5},\n YST: {name: \"Yakutsk Standard Time\", abbr: \"YST\", offset: 9},\n },\n parseDateString(input, isUTC = true) {\n return _.size(input) > 0 ? (new Date(isUTC || input.indexOf('Z') === -1 ? input : input.slice(0, -1))) : input;\n },\n GetDaysInMonth(m, y) {\n return /8|3|5|10/.test(--m) ? 30 : m == 1 ? (!(y % 4) && y % 100) || !(y % 400) ? 29 : 28 : 31;\n },\n tryParseDateString(string) {\n let result = new Date(string);\n if (Object.prototype.toString.call(result) === \"[object Date]\") {\n if (isNaN(result.getTime())) {\n return null;\n } else {\n return result;\n }\n } else {\n return null;\n }\n },\n getDayName: function (dayNumber) {\n // Pass number 0-6 to get the day name. 0 = Sunday, 6 = Saturday\n const dayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\n if (dayNumber < 0 || dayNumber > 6) {\n return \"Invalid day number\";\n }\n\n return dayNames[dayNumber];\n },\n getWeekBounds: function (date) {\n // localDate is here because setUTCDate was changing the original date to the end date\n let localDate = new Date(date),\n startDiff = localDate.getUTCDate() - localDate.getUTCDay(),\n endDiff = localDate.getUTCDate() + (6 - localDate.getUTCDay());\n return {\n start: new Date(localDate.setUTCDate(startDiff)),\n end: new Date(localDate.setUTCDate(endDiff))\n };\n },\n getCurrentMonth: function () {\n return (new Date()).getMonth() + 1;\n },\n getCurrentYear: function () {\n return (new Date()).getFullYear();\n },\n getTimeStats: function (date1, date2) {\n let t = Date.parse(date1) - Date.parse(date2),\n totalSeconds = Math.floor((t / PJQ.constants.time.millis.ONE_MINUTE)),\n seconds = Math.floor(totalSeconds % 50),\n totalMinutes = Math.floor((t / 1000 / 60)),\n minutes = Math.floor(totalMinutes % 60),\n totalHours = Math.floor((t / (PJQ.constants.time.millis.ONE_HOUR))),\n hours = Math.floor(totalHours % 24),\n totalDays = Math.floor(t / (PJQ.constants.time.millis.ONE_DAY)),\n days = Math.floor(totalDays % 30),\n totalMonths = Math.floor(t / (PJQ.constants.time.millis.ONE_MONTH)),\n months = Math.floor(totalMonths % 12),\n years = Math.floor(t / (PJQ.constants.time.millis.ONE_YEAR));\n return {\n years: years,\n months: months,\n totalMonths: totalMonths,\n days: days,\n totalDays: totalDays,\n hours: hours,\n totalHours: totalHours,\n minutes: minutes,\n totalMinutes: totalMinutes,\n seconds: seconds,\n totalSeconds: totalSeconds,\n totalMillis: t\n };\n },\n getTimeString: function (date) {\n if (date == null) {\n return '';\n }\n\n let timeArray = date.toLocaleTimeString('en-US', {hour12: false}).split(':');\n\n // If timeArray[0] is 24 (12AM) we want to set it to 0\n timeArray[0] = timeArray[0] < 24 ? timeArray[0] : 0;\n\n // If timeArray[0] is single digit, we want to prepend a 0 to that.\n timeArray[0] = timeArray[0] < 10 ? '0' + timeArray[0] : timeArray[0];\n\n // Build time string from timeArray\n return `${timeArray[0]}:${timeArray[1]}:${timeArray[2]}`;\n },\n getMinutesFromHoursDecimal: function (hoursDecimal) {\n // This function expects hours to be in decimal form.\n // An example for this function would be: (Input : 11.08 => Output: 665)\n let wholeHours = Math.floor(hoursDecimal);\n let fractionalHours = hoursDecimal - wholeHours;\n let minutesFromFraction = fractionalHours * 60;\n\n return (wholeHours * 60) + Math.round(minutesFromFraction);\n },\n getCountdownString: function (date) {\n date = this.getTimeStats(date, new Date());\n let s = \"\";\n if (date.days > 0)\n s += (date.days + \"d \");\n if (date.hours > 0 || date.days > 0)\n s += (date.hours + \"h \");\n if (date.minutes > 0 || date.hours > 0 || date.days > 0)\n s += (date.minutes + \"m \");\n\n s += (date.seconds + \"s\");\n return s;\n },\n checkDateIsBeforeToday: function (date) {\n if (!date) {\n return true;\n }\n\n let argDate = new Date(date);\n argDate.setHours(0, 0, 0, 0);\n let today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return argDate < today;\n },\n checkDateBetweenDays: function (date1, date2, checkDate = new Date()) {\n return (checkDate.getTime() <= date2.getTime() && checkDate.getTime() >= date1.getTime());\n },\n checkDateRangesOverlap: function (startA, endA, startB, endB) {\n startA = new Date(startA);\n endA = new Date(endA);\n startB = new Date(startB);\n endB = new Date(endB);\n if (startA <= startB && startB <= endA) return true; // b starts in a\n if (startA <= endB && endB <= endA) return true; // b ends in a\n if (startB < startA && endA < endB) return true; // a in b\n return false;\n },\n getFromNowString: function (date) {\n return moment(new Date(date)).fromNow();\n },\n getTimeElapsed: function (date) {\n return this.getTimeStats(new Date(), date);\n },\n getTimeRemaining: function (date) {\n return this.getTimeStats(date, new Date());\n },\n getNewDateAddMilliseconds: function (date, milliseconds) {\n if (!date)\n return date;\n else {\n date = new Date(date);\n return new Date(date.setTime(date.getTime() + milliseconds));\n }\n },\n getNewDateAddSeconds: function (date, seconds) {\n return this.getNewDateAddMilliseconds(date, seconds * 1000);\n },\n getNewDateAddHours: function (date, hours) {\n return this.getNewDateAddMilliseconds(date, hours * PJQ.constants.time.millis.ONE_HOUR);\n },\n getNewDateAddDays: function (date, days, weekdaysOnly = false, inclusive = false) {\n days -= (inclusive ? 1 : 0);\n if (weekdaysOnly) {\n let result = new Date(date);\n let day = result.getDay();\n result.setDate(\n result.getDate() + days +\n (day === 6 ? 2 : +!day) +\n (Math.floor((days - 1 + (day % 6 || 1)) / 5) * 2));\n return result;\n }\n return this.getNewDateAddMilliseconds(date, days * PJQ.constants.time.millis.ONE_DAY);\n },\n getDateMillisecondsDiff: function (date1, date2) {\n return this.getDateDiff(date1, date2, 'milliseconds');\n },\n getDateSecondsDiff: function (date1, date2) {\n return this.getDateDiff(date1, date2, 'seconds');\n },\n getDateMinutesDiff: function (date1, date2) {\n return this.getDateDiff(date1, date2, 'minutes');\n },\n getDateHoursDiff: function (date1, date2) {\n return this.getDateDiff(date1, date2, 'hours');\n },\n getDateDaysDiff: function (date1, date2, weekdaysOnly, inclusive = false) {\n if (weekdaysOnly) {\n let numWorkDays = 0,\n currentDate = new Date(date2);\n while (currentDate <= date1) {\n // Skips Sunday and Saturday\n if (currentDate.getDay() !== 0 && currentDate.getDay() !== 6) {\n numWorkDays++;\n }\n currentDate = currentDate.addDays(1);\n }\n return numWorkDays;\n }\n\n return this.getDateDiff(date1, date2, 'days') + (inclusive ? 1 : 0);\n },\n getDateDiff: function (date1, date2, type) {\n date1 = date1 == null ? new Date() : date1;\n date2 = date2 == null ? new Date() : date2;\n let diff = parseInt(date1.getTime() - date2.getTime()),\n result = 0;\n switch (type) {\n case 'days':\n result = diff / PJQ.constants.time.millis.ONE_DAY;\n break;\n case 'hours':\n result = diff / PJQ.constants.time.millis.ONE_HOUR;\n break;\n case 'minutes':\n result = diff / PJQ.constants.time.millis.ONE_MINUTE;\n break;\n case 'seconds':\n result = diff / PJQ.constants.time.millis.ONE_SECOND;\n break;\n default:\n result = diff;\n break;\n }\n result = Math.floor(isNaN(result) ? 0 : result);\n return result;\n },\n checkTimesDifferent: function (date1, date2, isIncludeSeconds = false) {\n return date1.getHours() !== date2.getHours() ||\n date1.getMinutes() !== date2.getMinutes() ||\n (isIncludeSeconds && date1.getSeconds() !== date2.getSeconds());\n },\n getDateDiffString: function (compareDate) {\n let date = new Date(),\n totalMinutes = this.getDateMinutesDiff(compareDate ? compareDate : date, date),\n hours = Math.floor(totalMinutes / 60),\n minutes = totalMinutes % 60;\n if (hours > 0)\n return (hours + 'hrs ' + minutes + 'min');\n else\n return (minutes + 'min');\n },\n validateDate: function (dateString, type) {\n dateString = dateString.replace(/-/g, '/');\n\n // Parse the date parts to integers\n let parts = dateString.split(\"/\"),\n day = 0,\n month = 0,\n year = 0;\n\n if (type == null || type == '' || type.toLowerCase() == 'mdy') {\n if (/^\\d{1,2}?\\/\\d{1,2}?\\/\\d{4}?$/i.test(dateString) == false)\n return false;\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n } else if (type.toLowerCase() == 'dmy') {\n if (/^\\d{1,2}?\\/\\d{1,2}?\\/\\d{4}?$/i.test(dateString) == false)\n return false;\n day = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n year = parseInt(parts[2], 10);\n } else if (type.toLowerCase() == 'ymd') {\n if (/^\\d{4}?\\/\\d{1,2}?\\/\\d{1,2}?$/i.test(dateString) == false)\n return false;\n\n year = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n day = parseInt(parts[2], 10);\n }\n\n // Check the ranges of month and year\n if (year < 1000 || year > 3000 || month == 0 || month > 12)\n return false;\n\n let monthLength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n // Adjust for leap years\n if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))\n monthLength[1] = 29;\n\n // Check the range of the day\n return day > 0 && day <= monthLength[month - 1];\n },\n getDateString: function (date, Z, utc) {\n let format = Z;\n if (date == null || (PJQ.helpers.objectHelpers.refinedType(date) === 'date' && isNaN(date.getTime())))\n return;\n else if (typeof date === 'string') {\n if (date.trim().length === 0) {\n return;\n }\n date = new Date(date);\n }\n\n let MMMM = [\"\\x00\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n MMM = [\"\\x01\", \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n dddd = [\"\\x02\", \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n ddd = [\"\\x03\", \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\n function ii(i, len) {\n let s = i + \"\";\n len = len || 2;\n while (s.length < len) s = \"0\" + s;\n return s;\n }\n\n let y = utc ? date.getUTCFullYear() : date.getFullYear();\n format = format.replace(/(^|[^\\\\])yyyy+/g, \"$1\" + y);\n format = format.replace(/(^|[^\\\\])yy/g, \"$1\" + y.toString().substr(2, 2));\n format = format.replace(/(^|[^\\\\])y/g, \"$1\" + y);\n\n let M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n format = format.replace(/(^|[^\\\\])MMMM+/g, \"$1\" + MMMM[0]);\n format = format.replace(/(^|[^\\\\])MMM/g, \"$1\" + MMM[0]);\n format = format.replace(/(^|[^\\\\])MM/g, \"$1\" + ii(M));\n format = format.replace(/(^|[^\\\\])M/g, \"$1\" + M);\n\n let d = utc ? date.getUTCDate() : date.getDate();\n format = format.replace(/(^|[^\\\\])dddd+/g, \"$1\" + dddd[0]);\n format = format.replace(/(^|[^\\\\])ddd/g, \"$1\" + ddd[0]);\n format = format.replace(/(^|[^\\\\])dd/g, \"$1\" + ii(d));\n format = format.replace(/(^|[^\\\\])d/g, \"$1\" + d);\n\n let H = utc ? date.getUTCHours() : date.getHours();\n format = format.replace(/(^|[^\\\\])HH+/g, \"$1\" + ii(H));\n format = format.replace(/(^|[^\\\\])H/g, \"$1\" + H);\n\n let h = H > 12 ? H - 12 : H == 0 ? 12 : H;\n format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + ii(h));\n format = format.replace(/(^|[^\\\\])h/g, \"$1\" + h);\n\n let m = utc ? date.getUTCMinutes() : date.getMinutes();\n format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + ii(m));\n format = format.replace(/(^|[^\\\\])m/g, \"$1\" + m);\n\n let s = utc ? date.getUTCSeconds() : date.getSeconds();\n format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + ii(s));\n format = format.replace(/(^|[^\\\\])s/g, \"$1\" + s);\n\n let f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n format = format.replace(/(^|[^\\\\])fff+/g, \"$1\" + ii(f, 3));\n f = Math.round(f / 10);\n format = format.replace(/(^|[^\\\\])ff/g, \"$1\" + ii(f));\n f = Math.round(f / 10);\n format = format.replace(/(^|[^\\\\])f/g, \"$1\" + f);\n\n let T = H < 12 ? \"AM\" : \"PM\";\n format = format.replace(/(^|[^\\\\])TT+/g, \"$1\" + T);\n format = format.replace(/(^|[^\\\\])T/g, \"$1\" + T.charAt(0));\n\n let t = T.toLowerCase();\n format = format.replace(/(^|[^\\\\])tt+/g, \"$1\" + t);\n format = format.replace(/(^|[^\\\\])t/g, \"$1\" + t.charAt(0));\n\n let tz = -date.getTimezoneOffset(),\n K = utc || !tz ? \"Z\" : tz > 0 ? \"+\" : \"-\";\n if (!utc) {\n tz = Math.abs(tz);\n let tzHrs = Math.floor(tz / 60),\n tzMin = tz % 60;\n K += ii(tzHrs) + \":\" + ii(tzMin);\n }\n format = format.replace(/(^|[^\\\\])K/g, \"$1\" + K);\n\n let day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n format = format.replace(new RegExp(dddd[0], \"g\"), dddd[day]);\n format = format.replace(new RegExp(ddd[0], \"g\"), ddd[day]);\n\n format = format.replace(new RegExp(MMMM[0], \"g\"), MMMM[M]);\n format = format.replace(new RegExp(MMM[0], \"g\"), MMM[M]);\n\n format = format.replace(/\\\\(.)/g, \"$1\");\n\n return format;\n }\n};\n\nPJQ.helpers.timerHelpers = {\n createCountdownTimer: function ($el, date, finishCallback) {\n if ($el) {\n let t = PJQ.helpers.dateHelpers.getTimeRemaining(date);\n this.createTimerElement($el, date);\n if (t.totalMillis > 0) {\n let interval = setInterval(_.bind(function () {\n t = PJQ.helpers.dateHelpers.getTimeRemaining(date);\n if (t.totalMillis > 0) {\n this.createTimerElement($el, date);\n } else {\n clearInterval(interval);\n if (finishCallback)\n finishCallback($el);\n }\n }, this), 1000);\n }\n }\n return interval;\n },\n createElapsedTimer: function ($el, date) {\n if ($el) {\n let t = PJQ.helpers.dateHelpers.getTimeElapsed(date);\n this.createTimerElement($el, date);\n let interval = setInterval(_.bind(function () {\n t = PJQ.helpers.dateHelpers.getTimeElapsed(date);\n this.createTimerElement($el, date);\n }, this), 1000);\n }\n return interval;\n },\n createTimerElement: function ($el, date) {\n $el.html(PJQ.helpers.dateHelpers.getCountdownString(date));\n }\n};\n\nPJQ.helpers.validators = {\n validatePhone: function (value) {\n return ((value.replace(/-/g, '').replace('(', '').replace(')', '').replace(' ', '').length >= 10) || value.replace('/', '').toLowerCase() === 'na');\n },\n validateZip: function (value) {\n return (/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/).test(value) || (/^[A-Za-z]\\d[A-Za-z][ -]?\\d[A-Za-z]\\d$/).test(value);\n },\n validateEmail: function (emailAddress, isAllowMultiple = false) {\n let error = null,\n emailRegex = new RegExp(\"^[A-Z0-9._%'-]+\\\\+?[A-Z0-9]{0,20}@[A-Z0-9.-]+\\\\.[A-Z]{2,20}$\", \"i\");\n if (isAllowMultiple) {\n if (emailAddress.indexOf(\";\") !== -1) {\n _.every(emailAddress.split(';'), function (emailIteration) {\n emailIteration = emailIteration.replace(' ', '');\n if (!emailIteration || !emailRegex.test(emailIteration)) {\n error = \"INVALID\";\n return false;\n }\n return true;\n });\n } else if (emailAddress.indexOf(\",\") !== -1) {\n _.every(emailAddress.split(','), function (emailIteration) {\n emailIteration = emailIteration.replace(' ', '');\n if (!emailIteration || !emailRegex.test(emailIteration)) {\n error = \"INVALID\";\n return false;\n }\n return true;\n });\n } else if (!emailRegex.test(emailAddress)) {\n error = \"INVALID\";\n }\n } else {\n if (emailAddress.indexOf(\";\") !== -1 || emailAddress.indexOf(\",\") !== -1) {\n error = \"MULTIPLE\";\n } else if (!emailRegex.test(emailAddress)) {\n error = \"INVALID\";\n }\n }\n return {\n success: error === null,\n error: error\n };\n }\n};\n\nPJQ.helpers.formatHelpers = {\n getOrdinalSuffix: function (value) {\n let j = value % 10,\n k = value % 100;\n if (j === 1 && k !== 11) {\n return value + \"st\";\n }\n if (j === 2 && k !== 12) {\n return value + \"nd\";\n }\n if (j === 3 && k !== 13) {\n return value + \"rd\";\n }\n return value + \"th\";\n },\n upperCaseFirstLetterEachWord: function (value) {\n return value.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n },\n upperCaseFirstLetter: function (value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n },\n lowerCaseFirstLetter: function (value) {\n return value.charAt(0).toLowerCase() + value.slice(1);\n },\n formatPhoneNumber: function (value, wrapURL) {\n let s2 = (\"\" + value).replace(/\\D/g, ''),\n m = s2.match(/^(\\d{3})(\\d{3})(\\d{4})$/),\n val = (!m) ? null : \"(\" + m[1] + \") \" + m[2] + \"-\" + m[3];\n\n if (wrapURL)\n val = '<a class=\"phone-link\" href=\"tel:' + val + '\">' + val + '</a>';\n\n return val;\n },\n numbersOnly: function (value, allowDecimals = false, allowNegative = false) {\n if (allowNegative)\n return value != null ? value.toString().replace(new RegExp('[^0-9\\-]', 'g'), '') : \"\";\n else if (allowDecimals)\n return value != null ? value.toString().replace(new RegExp('[^0-9\\.]', 'g'), '') : \"\";\n else\n return value != null ? value.toString().replace(new RegExp('[^0-9\\]', 'g'), '') : \"\";\n },\n alphanumericOnly: function (value) {\n return value != null ? value.toString().replace(new RegExp('[^a-z0-9]', 'gi'), '') : \"\";\n },\n formatPercent: function (value) {\n let cleaned = '0';\n if (value != null) {\n cleaned = this.numbersOnly(value, true);\n if (isNaN(parseInt(cleaned))) {\n cleaned = '0'\n }\n }\n return cleaned + '%';\n },\n formatDecimal: function (number, decimals = 2) {\n if (number == null || isNaN(number))\n number = 0;\n return number.toFixed(decimals);\n },\n formatZip: function (value) {\n value = this.alphanumericOnly(value);\n if (_.size(value) === 6) {\n return value.substr(0, 3).toUpperCase() + '-' + value.substr(3, 6).toUpperCase();\n } else {\n return value;\n }\n },\n numberToWords: function (number) {\n // Works into the billions\n if (number === 0) return 'zero';\n\n const digits = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];\n const tens = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];\n const teens = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];\n const scales = ['', 'thousand', 'million', 'billion'];\n\n let words = '';\n let scaleIndex = 0;\n\n while (number > 0) {\n const current = number % 1000;\n number = Math.floor(number / 1000);\n\n if (current === 0) {\n continue;\n }\n\n let currentWords = '';\n if (current >= 100) {\n currentWords += digits[Math.floor(current / 100) - 1] + ' hundred';\n }\n\n if (current % 100 < 10) {\n currentWords += (currentWords.length && current % 100 !== 0 ? ' ' : '') + digits[current % 100 - 1];\n } else if (current % 100 < 20) {\n currentWords += (currentWords.length ? ' ' : '') + teens[(current % 100) - 11];\n } else {\n currentWords += (currentWords.length ? ' ' : '') + tens[Math.floor((current % 100) / 10) - 1];\n if (current % 10 !== 0) {\n currentWords += '-' + digits[current % 10 - 1];\n }\n }\n\n words = currentWords + (currentWords.length ? ' ' + scales[scaleIndex] + ' ' : '') + words;\n scaleIndex++;\n }\n\n return words.trim();\n },\n minutesToHHMM: function (minutes) {\n let hours = Math.floor(minutes / 60),\n mins = minutes % 60;\n return (hours < 10 ? '0' : '') + hours + ':' + (mins < 10 ? '0' : '') + mins;\n },\n minutesFromHHMM: function (timeStr) {\n if (timeStr == null || _.size(timeStr) === 0)\n return 0;\n\n let parts = timeStr.split(':');\n return parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10);\n },\n formatCurrency: function (money, decimals = 2, includeDollarSign = true) {\n if (money == null || isNaN(money))\n money = 0;\n return (includeDollarSign ? '$' : '') + (money / 100).toFixed(decimals).toString().replace(PJQ.constants.regex.CURRENCY_NO_SYMBOL, '$1,');\n },\n getCentsDisplay: function (money) {\n return money % 100 < 10 ? '0' + (money % 100).toString() : (money % 100).toString();\n },\n getDollarsDisplay: function (money) {\n return Math.floor(money / 100).toString()\n },\n getTotalCents: function (dollars, cents) {\n if (typeof dollars === 'string')\n dollars = parseInt(dollars);\n else if (typeof dollars != 'number')\n dollars = 0;\n dollars *= 100;\n\n if (typeof cents === 'string')\n cents = parseInt(cents);\n else if (typeof cents != 'number')\n cents = 0;\n\n if (dollars < 0)\n cents *= -1;\n\n return dollars + cents;\n },\n convertNLtoBR: function (input) {\n if (typeof input === 'string')\n return input.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\n else\n return input;\n }\n};\n\nPJQ.helpers.inputHelpers = {\n getMoneyInputValue: function ($container) {\n let inputDollarsFull = $container.find('.input-dollars-full');\n if (_.size(inputDollarsFull) === 0 && $container.hasClass('input-dollars-full')) {\n inputDollarsFull = $container;\n } else if ($container.hasClass('input-decimal')) {\n inputDollarsFull = $container;\n }\n\n let total = 0;\n if (_.size(inputDollarsFull) > 0) {\n let inputVal = inputDollarsFull.val(),\n inputSplit = inputVal.toString().split('.');\n if (inputSplit.length < 2) {\n inputSplit[1] = \"00\";\n } else if (inputSplit[1].trim().length === 1) {\n inputSplit[1] = inputSplit[1] + \"0\";\n } else if (inputSplit[1].trim().length === 0) {\n inputSplit[1] = \"00\";\n }\n total = parseInt(PJQ.helpers.formatHelpers.numbersOnly(inputSplit[0] + inputSplit[1], true, true));\n } else {\n let dollarsInput = $container.find('.input-dollars'),\n centsInput = $container.find('.input-cents'),\n dollars = _.size(dollarsInput) > 0 ? dollarsInput.val() : \"0\",\n cents = \"00\";\n\n if (_.size(centsInput) > 0) {\n //If both inputs are blank, we return null so we set null instead of 0 in the database\n if (_.size(dollarsInput.val()) === 0 && _.size(centsInput.val()) === 0) {\n return null;\n }\n\n cents = centsInput.val();\n if (_.size(cents) < 2)\n cents = ((_.size(cents) === 1 ? '0' : '00') + cents.toString());\n } else if (_.size(dollarsInput.val()) === 0) {\n //If dollars is blank, we return null so we set null instead of 0 in the database\n return null;\n }\n total = parseFloat(PJQ.helpers.formatHelpers.numbersOnly(dollars, false, true) + PJQ.helpers.formatHelpers.numbersOnly(cents));\n }\n return isNaN(total) ? 0 : total;\n },\n getNumberInputValue: function ($el) {\n let num = parseInt(PJQ.helpers.formatHelpers.numbersOnly($el.val(), false, true));\n return isNaN(num) ? null : num;\n },\n getPercentInputValue: function ($el, decimal = false) {\n let inputVal = $el.val().replace('%', '');\n if (inputVal === \"\") {\n return inputVal;\n }\n\n let inputSplit = inputVal.toString().split('.');\n if (inputSplit.length < 2) {\n inputSplit[1] = \"00\";\n } else if (inputSplit[1].trim().length === 1) {\n inputSplit[1] = inputSplit[1] + \"0\";\n } else if (inputSplit[1].trim().length === 0) {\n inputSplit[1] = \"00\";\n }\n\n if (decimal) {\n return parseInt(PJQ.helpers.formatHelpers.numbersOnly(inputSplit[0] + inputSplit[1])) / 100;\n } else {\n return parseInt(PJQ.helpers.formatHelpers.numbersOnly(inputSplit[0] + inputSplit[1]));\n }\n },\n getPhoneInputValue: function ($el) {\n return PJQ.helpers.formatHelpers.numbersOnly($el.val())\n },\n getElementNodeType: function (input) {\n return input.prop('nodeName').toLowerCase();\n },\n attachNumericInputMinMax: function ($el, min, max, callback) {\n $el.on('change', function () {\n let val = $el.val();\n if (min && min > val)\n val = min;\n else if (max && max < val)\n val = max;\n $el.val(val);\n\n if (typeof callback === 'function') {\n callback(val);\n }\n });\n },\n inputMaxLength: function (e, length) {\n if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||\n // Allow: . if allowPeriods == true\n (e.keyCode == 190 && allowPeriods) ||\n // Allow: Ctrl/cmd+A\n (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+C\n (e.keyCode == 67 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+X\n (e.keyCode == 88 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: home, end, left, right\n (e.keyCode >= 35 && e.keyCode <= 39)) {\n // let it happen, don't do anything\n return;\n }\n if ($(e.currentTarget).val().length >= (isNaN(length) ? 1 : length))\n e.preventDefault();\n },\n numbersOnly: function (e, allowPeriods = false, allowNegative = false) {\n if (e.type === 'keyup') {\n let $target = $(e.target);\n $target.val(PJQ.helpers.formatHelpers.numbersOnly($target.val()));\n } else {\n // Allow: backspace, delete, tab, escape, and enter\n if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||\n // Allow: . if allowPeriods == true\n ((e.keyCode === 190 || e.keyCode === 110) && allowPeriods) ||\n //Allow - if allowNegative == true\n ((e.keyCode === 109 || e.keyCode === 189) && allowNegative) ||\n // Allow: Ctrl/cmd+A\n (e.keyCode === 65 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+C\n (e.keyCode === 67 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+X\n (e.keyCode === 88 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+V\n (e.keyCode === 86 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: home, end, left, right\n (e.keyCode >= 35 && e.keyCode <= 39)) {\n // Key that was pressed is allowed\n return;\n }\n // Ensure that it is a number and stop the keypress\n if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {\n e.preventDefault();\n }\n }\n },\n numbersAndSingleDecimalOnly: function (e) {\n return this.numbersOnly(e, true);\n },\n allowZip: function (e, country) {\n country = country != null && country.toLowerCase() === 'ca' ? 'ca' : 'us';\n if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||\n // Allow: . if allowPeriods == true\n (e.keyCode == 190 && allowPeriods) ||\n // Allow: Ctrl/cmd+A\n (e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+C\n (e.keyCode == 67 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: Ctrl/cmd+X\n (e.keyCode == 88 && (e.ctrlKey === true || e.metaKey === true)) ||\n // Allow: home, end, left, right\n (e.keyCode >= 35 && e.keyCode <= 39)) {\n // let it happen, don't do anything\n return;\n }\n\n if (country === 'us' && (e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {\n e.preventDefault();\n }\n\n if ($(e.currentTarget).val().replace('-', '').length >= (country === 'ca' ? 7 : 5))\n e.preventDefault();\n },\n setInputError: function (input, isValid = false, options = {}) {\n if (input == null || input.length <= 0)\n return;\n\n let elementType = this.getElementNodeType(input);\n if (elementType === 'input' || elementType === 'textarea') {\n if (isValid) {\n input.removeClass('p-field-error');\n } else {\n if (options.isHighlightInput != false) {\n input.addClass('p-field-error');\n }\n }\n } else if (elementType === 'select') {\n let inputButton = input.siblings('.dropdown-toggle').eq(0);\n if (inputButton.length > 0) {\n if (isValid) {\n inputButton.removeClass('p-field-error');\n } else {\n inputButton.addClass('p-field-error');\n }\n }\n } else if (input.hasClass('bootstrap-select')) {\n let inputButton = input.find('.dropdown-toggle');\n if (inputButton.length > 0) {\n if (isValid) {\n inputButton.removeClass('p-field-error');\n } else {\n inputButton.addClass('p-field-error');\n }\n }\n }\n\n //Delete the existing error text if it exists\n let errId = input.data('errSrc');\n if (_.size(errId) > 0) {\n $('div[data-err=\"' + errId + '\"]').remove();\n input.removeData('errSrc');\n }\n\n if (_.size(options.errorText) > 0) {\n let $errorEl;\n if (elementType === 'select') {\n $errorEl = input.closest('.btn-group');\n } else {\n $errorEl = input.closest('.input-group');\n }\n\n if (_.size($errorEl) === 0) {\n $errorEl = input.closest('.form-group').find('label');\n\n if (_.size($errorEl) > 0) {\n $errorEl.append($('<span>', {\n 'class': 'fs-14 text-danger ml-1 wd-100 font-weight-light ml-2'\n }).html(options.errorText));\n }\n } else {\n //Add the new error text\n errId = _.uniqueId();\n input.data('errSrc', errId);\n $errorEl.append($('<div>', {\n 'class': 'fs-14 text-danger ml-1 wd-100 font-weight-light',\n 'data-err': errId\n }).html(options.errorText));\n }\n\n\n if (_.size($errorEl) > 0) {\n\n }\n }\n },\n inputMaskPhone: function (input) {\n input.inputmask('(999) 999-9999', {\n placeholder: ''\n });\n },\n inputMaskZip: function (input, country = 'us') {\n input.inputmask(country && country.toLowerCase() == 'ca' ? 'A9A-9A9' : '99999', {\n placeholder: ''\n });\n },\n inputMaskCurrency: function (input, digits = 0, showSymbol = false) {\n input.inputmask({\n alias: \"currency\",\n prefix: showSymbol ? '$' : '',\n digits: digits,\n placeholder: \" \",\n clearMaskOnLostFocus: true,\n rightAlign: false,\n allowMinus: true\n });\n },\n inputMaskHours: function (input) {\n input.inputmask('99:59', {\n mask: \"99:59\",\n placeholder: \"00:00\",\n definitions: {\n '9': {\n validator: \"[0-9]\",\n cardinality: 1\n },\n '5': {\n validator: \"[0-5]\",\n cardinality: 1\n }\n },\n insertMode: false,\n showMaskOnHover: false,\n positionCaretOnClick: 'select'\n }).off(\"focus.tei\").on(\"focus.tei\", function () {\n this.setSelectionRange(0, 1);\n }).on(\"input\", function () {\n // The colon will always be at position 2, so we always want to skip over it.\n let caretPos = this.selectionStart;\n\n if (caretPos === 2) {\n this.setSelectionRange(3, 4);\n }\n });\n },\n inputMaskPercent: function (input, digits = 0, showSymbol = false) {\n input.inputmask({\n alias: \"currency\",\n suffix: showSymbol ? '%' : '',\n digits: digits,\n placeholder: \" \",\n clearMaskOnLostFocus: true,\n rightAlign: false,\n allowMinus: true\n });\n },\n inputMaskCreditCard: function (input, digits = 0) {\n input.inputmask('9999 9999 9999 9999', {\n alias: \"cc\",\n digits: digits,\n placeholder: '',\n rightAlign: false\n });\n },\n inputMaskDecimal: function (input, digits = 0) {\n input.inputmask({\n alias: \"currency\",\n prefix: \"\",\n digits: digits,\n placeholder: \" \",\n clearMaskOnLostFocus: true,\n rightAlign: false\n });\n },\n inputMaskInteger: function (input) {\n //we use currency so we get commas\n input.inputmask({\n alias: \"currency\",\n prefix: \"\",\n digits: 0,\n placeholder: \" \",\n clearMaskOnLostFocus: true,\n rightAlign: false\n });\n }\n};\n\nPJQ.helpers.bidForms = {\n lineItemTypes: [\n {name: \"Sum\", abbreviation: \"Sum\"},\n {name: \"Each\", abbreviation: \"Ea.\"},\n {name: \"Square Feet\", abbreviation: \"Sq.Ft.\"},\n {name: \"Linear Feet\", abbreviation: \"Ln.Ft.\"},\n {name: \"Cubic Feet\", abbreviation: \"Cu.Ft.\"},\n {name: \"Square Yards\", abbreviation: \"Sq.Yd.\"},\n {name: \"Linear Yards\", abbreviation: \"Ln.Yd.\"},\n {name: \"Cubic Yards\", abbreviation: \"Cu.Yd.\"},\n {name: \"Acres\", abbreviation: \"Acres\"},\n {name: \"Hours\", abbreviation: \"Hrs\"},\n {name: \"Days\", abbreviation: \"Days\"},\n {name: \"Pounds\", abbreviation: \"Lbs.\"},\n {name: \"Tons\", abbreviation: \"Tons\"}\n ],\n lineItemQuestionTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Numeric\",\n \"Date\",\n \"Date/Time\"\n ],\n alternateTypes: [\n {name: \"Sum\", abbreviation: \"Sum\"},\n {name: \"Each\", abbreviation: \"Ea.\"},\n {name: \"Square Feet\", abbreviation: \"Sq.Ft.\"},\n {name: \"Linear Feet\", abbreviation: \"Ln.Ft.\"},\n {name: \"Cubic Feet\", abbreviation: \"Cu.Ft.\"},\n {name: \"Square Yards\", abbreviation: \"Sq.Yd.\"},\n {name: \"Linear Yards\", abbreviation: \"Ln.Yd.\"},\n {name: \"Cubic Yards\", abbreviation: \"Cu.Yd.\"},\n {name: \"Acres\", abbreviation: \"Acres\"},\n {name: \"Hours\", abbreviation: \"Hrs\"},\n {name: \"Days\", abbreviation: \"Days\"},\n {name: \"Pounds\", abbreviation: \"Lbs.\"},\n {name: \"Tons\", abbreviation: \"Tons\"}\n ],\n alternateQuestionTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Numeric\",\n \"Single Choice\",\n \"Multiple Choice\",\n \"Date\",\n \"Date/Time\"\n ],\n acknowledgementTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Money\",\n \"Numeric\",\n \"Single Choice\",\n \"Multiple Choice\",\n \"Date\",\n \"Date/Time\"\n ],\n bondingTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Money\",\n \"Numeric\",\n \"Single Choice\",\n \"Multiple Choice\",\n \"Date\",\n \"Date/Time\"\n ],\n certificationTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Money\",\n \"Numeric\",\n \"Single Choice\",\n \"Multiple Choice\",\n \"Date\",\n \"Date/Time\"\n ],\n laborRateTypes: [\n \"Yes/No\",\n \"Text\",\n \"Textarea\",\n \"Money\",\n \"Numeric\",\n \"Single Choice\",\n \"Multiple Choice\",\n \"Date\",\n \"Date/Time\"\n ]\n};\n\nPJQ.helpers.guid = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n};\n\nPJQ.helpers.stringHelpers = {\n format: function (format) {\n let args = Array.prototype.slice.call(arguments, 1);\n return format.replace(/{(\\d+)}/g, function (match, number) {\n return typeof args[number] !== 'undefined' ? args[number] : match;\n });\n },\n getLowercaseChars: function (string) {\n return string.match(/[a-z]/g);\n },\n getUppercaseChars: function (string) {\n return string.match(/[A-Z]/g);\n },\n getNumericChars: function (string) {\n return string.match(/[\\d]/g);\n },\n getSpecialChars: function (string) {\n return string.match(/[^a-zA-Z\\d]/g);\n },\n findMatches: function (regex, str, matches = []) {\n const res = regex.exec(str);\n res && matches.push({\n full: res[0],\n group: res[1]\n }) && this.findMatches(regex, str, matches);\n return matches;\n }\n};\n\nPJQ.helpers.objectHelpers = {\n checkNested: function (obj, level, ...rest) {\n if (typeof obj === 'undefined' || obj == null)\n return false;\n else if (_.size(rest) === 0 && obj.hasOwnProperty(level))\n return true;\n return this.checkNested(obj[level], ...rest);\n },\n convertObjectCamelcase: function (copyObject, destinationObject = {}) {\n if (typeof copyObject === \"string\") {\n return copyObject.substring(0, 1).toLowerCase() + copyObject.substring(1);\n } else if (copyObject instanceof Array) {\n return _.map(copyObject, function (value) {\n if (typeof value === \"object\") {\n value = this.convertObjectCamelcase(value)\n }\n return value\n }, this);\n } else {\n _.each(copyObject, function (value, key) {\n if (copyObject.hasOwnProperty(key)) {\n let valueType = this.refinedType(value),\n lowerKey = key.substring(0, 1).toLowerCase() + key.substring(1);\n if (valueType === 'object' || valueType === 'array') {\n destinationObject[lowerKey] = this.convertObjectCamelcase(value);\n } else {\n destinationObject[lowerKey] = value;\n }\n }\n }, this);\n }\n return destinationObject;\n },\n refinedType: function (object, isIncludeBackbone) {\n if (typeof object === 'object') {\n if (Object.prototype.toString.call(object) === '[object Array]') {\n return 'array';\n } else if (object instanceof Date) {\n return 'date';\n } else if (isIncludeBackbone) {\n if (this.isBackboneModel(object))\n return 'backboneModel';\n else if (this.isBackboneCollection(object))\n return 'backboneCollection';\n }\n }\n return typeof object;\n },\n isBackboneModel: function (object) {\n return object instanceof Backbone.Model;\n },\n isBackboneCollection: function (object) {\n return object instanceof Backbone.Collection;\n },\n findDistinct: function (arr, property) {\n let result = [],\n isBackboneCollection = this.isBackboneCollection(arr),\n isBackboneModels = isBackboneCollection || this.isBackboneModel(arr[0]);\n _.each(isBackboneCollection ? arr.models : arr, function (obj) {\n if (_.find(result, function (resultObj) {\n if (isBackboneModels)\n return resultObj.get(property) === obj.get(property);\n else\n return resultObj[property] === obj[property];\n }) == null) {\n result.push(obj);\n }\n });\n return result;\n }\n};\n\nPJQ.helpers.urlHelpers = {\n buildApiUrl: function (endpoint, options = {\n isPascal: false,\n includeSessionId: false,\n includeAccessKey: false,\n includeAccessToken: false,\n service: null\n }) {\n let url;\n switch (options.service) {\n case PJQ.constants.services.ORIGIN:\n url = window.location.origin;\n break;\n case PJQ.constants.services.FILES:\n url = PJQ.app.options.fileApiUrl;\n break;\n case PJQ.constants.services.APIv2:\n url = PJQ.app.options.apiV2Url;\n break;\n default:\n url = PJQ.app.options.apiUrl;\n break;\n }\n\n if (options.isPascal) {\n url += \"/pascal\";\n }\n\n url = url + (endpoint == null ? '' : endpoint);\n\n if (options.includeSessionId) {\n url = this.appendSessionId(url);\n }\n\n if (options.includeAccessToken) {\n url = this.appendAccessToken(url);\n }\n\n if (options.includeAccessKey && _.size(PJQ.app.session.get('accessKey')) > 0) {\n url = this.appendAccessKey(url);\n }\n\n return url;\n },\n // old/deprecated - still used in some places\n buildAPIURL: function (root, isPascal = false, includeSessionId = false, isFileAPI = false, includeAccessKey = false) {\n let url = (isFileAPI ? PJQ.app.options.fileApiUrl : PJQ.app.options.apiUrl) + (isPascal ? \"/pascal\" : \"\") + (root == null ? '' : root);\n if (includeSessionId) {\n url = this.appendSessionId(url);\n }\n\n if (PJQ.app.options.isDebug) {\n url = this.appendDebug(url);\n }\n\n if (includeAccessKey && _.size(PJQ.app.session.get('accessKey')) > 0) {\n url = this.appendAccessKey(url);\n }\n\n return url;\n },\n appendAccessKey: function (url) {\n return (url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"accessKey=\" + PJQ.app.session.get('accessKey'));\n },\n appendDebug: function (url) {\n return (url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"debug=true\");\n },\n appendSessionId: function (url) {\n return (url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"sessionId=\" + PJQ.app.session.get('sessionId'));\n },\n appendAccessToken: function (url) {\n let accessToken = PJQ.app.TokenManager.getAccessToken()\n if (PJQ.app.TokenManager != null && _.size(accessToken) > 0) {\n return (url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"access_token=\" + accessToken);\n }\n return url;\n },\n buildDomainURL: function (root, isPanteraDomain) {\n return isPanteraDomain ? PJQ.app.options.defaultPortalUrl : location.origin + (root == null ? '' : root);\n },\n generateEndpoint: function (endpointArr, parametersArr) {\n let result = '';\n _.each(endpointArr, function (endpointItem) {\n if (endpointItem.endpoint != null && endpointItem.endpoint.length > 0) {\n result += '/' + endpointItem.endpoint;\n\n result += endpointItem.value != null ? ('/' + endpointItem.value.toString()) : '';\n }\n });\n\n let isParamsStarted = false;\n _.each(parametersArr, function (parametersItem) {\n if (parametersItem.parameter != null && parametersItem.parameter.length > 0) {\n if (parametersItem.includeIfEmpty !== false || _.size(parametersItem.value) > 0 || typeof parametersItem.value === 'number' || typeof parametersItem.value === 'boolean') {\n if (parametersItem.value != null) {\n let refinedType = PJQ.helpers.objectHelpers.refinedType(parametersItem.value),\n paramValue;\n if (refinedType === 'array') {\n paramValue = parametersItem.value.join(',');\n } else if (refinedType === 'date') {\n paramValue = parametersItem.value.toISOString();\n } else {\n paramValue = parametersItem.value.toString();\n }\n // only add the param to the result if it has a value\n if (_.size(paramValue) > 0) {\n result += (isParamsStarted ? \"&\" : \"?\") + parametersItem.parameter + '=' + encodeURIComponent(paramValue);\n isParamsStarted = true;\n }\n }\n }\n }\n });\n return result\n },\n buildQueryParamRegex: function (name) {\n return '[?&]' + name + '=([^&#]*)';\n },\n getQueryParam: function (name, useHash = false) {\n let loc = useHash ? window.location.hash : window.location.search;\n if (_.size(name) > 0 && _.size(loc) > 0) {\n let q = loc.toLowerCase().match(new RegExp(this.buildQueryParamRegex(name.toLowerCase())));\n return q && q[1].replace(/\\//g, '');\n }\n return null;\n },\n removeQueryParam: function (name, useHash = false) {\n let loc = useHash ? window.location.hash : window.location.search;\n if (_.size(name) > 0 && _.size(loc) > 0) {\n let regex = new RegExp(`[?&]${name}=([^&#]*)`, 'i');\n let newLoc = loc.replace(regex, '');\n\n if (useHash) {\n window.location.hash = newLoc;\n } else {\n let newUrl = window.location.pathname + newLoc + window.location.hash;\n history.replaceState(null, '', newUrl);\n }\n }\n },\n queryStringToObject: function (queryString) {\n let pairs = queryString.split('&');\n return pairs.reduce((acc, pair) => {\n const [key, value] = pair.split('=');\n acc[key] = isNaN(+value) ? value : +value;\n return acc;\n }, {});\n },\n pushState: function (options) {\n if (options != null && options.url != null) {\n if (typeof options.title === 'string') {\n document.title = options.pageTitle;\n }\n window.history.pushState({}, document.title, options.url);\n }\n },\n cleanRouteParams: function () {\n if (window.location.href.indexOf('#') != -1)\n window.history.replaceState(null, null, window.location.pathname + \"#\" + window.location.href.split('#')[1]);\n },\n isURL: function (input) {\n let givenURL;\n try {\n givenURL = new URL(input);\n } catch (error) {\n return false;\n }\n return givenURL.protocol === \"http:\" || givenURL.protocol === \"https:\";\n }\n};\n\nPJQ.helpers.apiHelpers = {\n isDebug: false,\n getHeaders: function (service) {\n let headers = {\n PortalId: PJQ.app.session.get('portalId'),\n Debug: PJQ.helpers.apiHelpers.isDebug\n };\n\n let accessToken = PJQ.app.TokenManager.getAccessToken();\n if (_.size(accessToken) > 0) {\n headers.Authorization = \"Bearer \" + accessToken;\n }\n\n switch (service) {\n case PJQ.constants.services.APIv2:\n break;\n default:\n let sessionId = PJQ.app.session.get('sessionId');\n if (sessionId != null) {\n headers.SessionId = sessionId;\n }\n\n if (PJQ.app.session.contact && PJQ.app.session.contact.id > 0) {\n headers.ContactId = PJQ.app.session.contact.id;\n } else if (typeof bbContactId != 'undefined' && bbContactId > 0) {\n headers.ContactId = bbContactId;\n }\n\n if (PJQ.app.session.project && PJQ.app.session.project.id > 0) {\n headers.ProjectId = PJQ.app.session.project.id;\n } else if (typeof bbProjectId !== 'undefined' && bbProjectId > 0) {\n headers.ProjectId = bbProjectId;\n }\n\n let accessKey = PJQ.app.session.get('accessKey');\n if (accessKey != null) {\n headers.AccessKey = accessKey;\n }\n\n let projKey = PJQ.app.session.get('projectKey');\n if (projKey != null) {\n headers.ProjectKey = projKey;\n }\n\n let contactGuid = PJQ.app.session.get('contactGuid');\n if (contactGuid != null) {\n headers.ContactGuid = contactGuid;\n }\n\n if (PJQ.app.session.systemPermissions != null) {\n headers.Perm = PJQ.app.session.systemPermissions.get('key');\n }\n\n if (PJQ.app.session.project != null && PJQ.app.session.project.permissions != null) {\n headers.ProjectPerm = PJQ.app.session.project.permissions.get('key');\n }\n\n if (PJQ.app.session.get('masterUserId') > 0) {\n headers.MasterUserId = PJQ.app.session.get('masterUserId');\n }\n }\n return headers;\n },\n addHeaders: function (xhr, service, extraHeaders = null) {\n let headers = PJQ.helpers.apiHelpers.getHeaders(service);\n if (extraHeaders != null) {\n for (let header in extraHeaders) {\n this.addHeader(xhr, header, headers[header]);\n }\n }\n for (let header in headers) {\n this.addHeader(xhr, header, headers[header]);\n }\n },\n addHeader: function (xhr, header, value) {\n if (value != null)\n xhr.setRequestHeader(header, value);\n }\n};\n\nPJQ.helpers.cookieHelpers = {\n getCookie: function (name) {\n let nameEQ = name + \"=\",\n ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ')\n c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0)\n return c.substring(nameEQ.length, c.length);\n }\n return null;\n },\n setCookie: function (name, value, days) {\n let expires = \"\";\n if (days >= 0) {\n let date = new Date();\n if (days > 0) {\n date.setTime(date.getTime() + (days * PJQ.constants.time.millis.ONE_DAY));\n } else {\n date.setTime(date.getTime() + (10 * 365 * PJQ.constants.time.millis.ONE_DAY));\n }\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n },\n removeCookie: function (name) {\n document.cookie = name + \"= ; expires = Thu, 01 Jan 1970 00:00:00 GMT\";\n }\n};\n\nPJQ.helpers.googleMapsHelpers = {\n polyDefaults: {\n fillColor: '501400C8',\n isFill: true\n },\n generatePolyStyle: function (style) {\n style = _.defaults(style ? style : {}, this.polyDefaults);\n return '<Style><PolyStyle><color>' + (style.fillColor) + '</color><fill>' + (style.isFill ? '1' : '0') + '</fill></PolyStyle></Style>';\n }\n};\n\nPJQ.helpers.paymentHelpers = {\n validateCreditCard: function (value) {\n if (_.size(value) === 0)\n return false;\n\n value = value.replace(/\\D/g, \"\");\n\n let nCheck = 0,\n bEven = false;\n for (let n = value.length - 1; n >= 0; n--) {\n let cDigit = value.charAt(n),\n nDigit = parseInt(cDigit, 10);\n\n if (bEven) {\n if ((nDigit *= 2) > 9) nDigit -= 9;\n }\n nCheck += nDigit;\n bEven = !bEven;\n }\n return (nCheck % 10) === 0;\n },\n getCardIssuer: function (value) {\n let issuer = \"unknown\";\n if (_.size(value) === 0) {\n return issuer;\n }\n\n //JCB\n let jcb_regex = new RegExp('^(?:2131|1800|35)[0-9]{0,}$');\n\n // American Express\n let amex_regex = new RegExp('^3[47][0-9]{0,}$');\n\n // Diners Club\n let diners_regex = new RegExp('^3(?:0[0-59]{1}|[689])[0-9]{0,}$');\n\n // Visa\n let visa_regex = new RegExp('^4[0-9]{0,}$'); //4\n\n // MasterCard\n let mastercard_regex = new RegExp('^(5[1-5]|222[1-9]|22[3-9]|2[3-6]|27[01]|2720)[0-9]{0,}$');\n\n // Maestro\n let maestro_regex = new RegExp('^(5[06789]|6)[0-9]{0,}$');\n\n //Discover\n let discover_regex = new RegExp('^(6011|65|64[4-9]|62212[6-9]|6221[3-9]|622[2-8]|6229[01]|62292[0-5])[0-9]{0,}$');\n\n // get rid of anything but numbers\n value = value.replace(/\\D/g, '');\n\n // checks per each, as their could be multiple hits\n //fix: ordering matter in detection, otherwise can give false results in rare cases\n if (value.match(jcb_regex)) {\n issuer = \"jcb\";\n } else if (value.match(amex_regex)) {\n issuer = \"amex\";\n } else if (value.match(diners_regex)) {\n issuer = \"diners_club\";\n } else if (value.match(visa_regex)) {\n issuer = \"visa\";\n } else if (value.match(mastercard_regex)) {\n issuer = \"mastercard\";\n } else if (value.match(discover_regex)) {\n issuer = \"discover\";\n } else if (value.match(maestro_regex)) {\n if (value[0] === '5') { //started 5 must be mastercard\n issuer = \"mastercard\";\n } else {\n issuer = \"maestro\"; //maestro is all 60-69 which is not something else, thats why this condition in the end\n }\n }\n return issuer;\n },\n getCardIssuerIconFAClass: function (issuer) {\n let icon;\n switch (issuer.toLowerCase()) {\n case \"jcb\":\n icon = 'fa-cc-jcb';\n break;\n case \"amex\":\n icon = 'fa-cc-amex';\n break;\n case \"diners_club\":\n icon = 'fa-cc-diners-club';\n break;\n case \"visa\":\n icon = 'fa-cc-visa';\n break;\n case \"mastercard\":\n icon = 'fa-cc-mastercard';\n break;\n case \"maestro\":\n icon = 'fa-cc-maestro';\n break;\n case \"discover\":\n icon = 'fa-cc-discover';\n break;\n default:\n return '';\n }\n return 'fab ' + icon;\n }\n};\n\nPJQ.helpers.colorHelpers = {\n getHexFromRGB: function (rgb) {\n if (rgb == null) {\n return null;\n } else if (rgb.indexOf('rgba') !== -1) {\n rgb = rgb.replace('rgba', 'rgb');\n }\n\n let rgbs = rgb.split(','),\n r = parseInt(rgbs[0].substring(4)),\n g = parseInt(rgbs[1]),\n b = parseInt(rgbs[2]);\n return \"#\" + PJQ.helpers.colorHelpers.componentToHex(r) + PJQ.helpers.colorHelpers.componentToHex(g) + PJQ.helpers.colorHelpers.componentToHex(b);\n },\n componentToHex: function (c) {\n let hex = c.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n },\n getRGBFromHex: function (hex) {\n if (_.indexOf(hex, '#') === -1) {\n hex = '#' + hex;\n }\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n let shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return r + r + g + g + b + b;\n });\n\n let parsed = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return parsed ? {\n R: parseInt(parsed[1], 16),\n G: parseInt(parsed[2], 16),\n B: parseInt(parsed[3], 16)\n } : null;\n },\n idealLinkColorForBackground: function (color) {\n // if (bgColor == null) {\n // \treturn '#FFF';\n // }\n // else if (bgColor.length < 5) {\n // \tbgColor += bgColor.slice(1);\n // }\n // return (bgColor.replace('#', '0x')) > (0xffffff / 2) ? '#333' : '#fff';\n\n let hexColor = color.replace(\"#\", \"\"),\n r = parseInt(hexColor.substr(0, 2), 16),\n g = parseInt(hexColor.substr(2, 2), 16),\n b = parseInt(hexColor.substr(4, 2), 16),\n yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n return (yiq >= 128) ? '#333' : '#fff';\n }\n};\n\nPJQ.helpers.elementHelpers = {\n addInvisibleElement: function ($el) {\n let $b = $('body'),\n containerClass = '.invis-outer',\n $c = $b.find(containerClass);\n if (_.size($c) === 0) {\n $c = $('<div></div>', {\n class: containerClass,\n style: 'position:absolute;visibility:hidden;top:0;bottom:0;left:0;right:0;'\n });\n $b.append($c);\n }\n $c.append($el);\n },\n isElementInView: function ($el, docViewTop = null, docViewBottom = null) {\n if (docViewTop == null || docViewBottom == null) {\n docViewTop = $(window).scrollTop();\n docViewBottom = docViewTop + $(window).height();\n }\n let elementTop = $el.offset().top,\n elementBottom = elementTop + $el.height();\n return (elementBottom <= docViewBottom) && (elementTop >= docViewTop);\n }\n};\n\nPJQ.helpers.imageHelpers = {\n rotateByExif: function ($el, callback) {\n this.getExifOrientation($el, function (orientation) {\n $el.removeClass('transform-rotate-180 transform-rotate-90 transform-rotate-n-90');\n switch (orientation) {\n case 3:\n $el.addClass('transform-rotate-180');\n break;\n case 6:\n $el.addClass('transform-rotate-90');\n break;\n case 8:\n $el.addClass('transform-rotate-n-90');\n break;\n }\n callback();\n });\n },\n rotateElement: function ($el, degrees) {\n $el.removeClass('transform-rotate-180 transform-rotate-90 transform-rotate-n-90');\n switch (degrees) {\n case 90:\n $el.addClass('transform-rotate-90');\n break;\n case 180:\n $el.addClass('transform-rotate-180');\n break;\n case 270:\n case -90:\n $el.addClass('transform-rotate-n-90');\n break;\n }\n },\n getExifOrientation: function ($el, callback) {\n if (_.size($el) > 0) {\n let exifData = $el.data('exif');\n if (exifData != null) {\n callback(EXIF.getTag(exifData, \"Orientation\"));\n } else {\n EXIF.getData($el[0], function () {\n exifData = this;\n $el.data('exif', exifData);\n callback(EXIF.getTag(exifData, \"Orientation\"));\n });\n }\n } else {\n callback(null);\n }\n }\n};\n\nPJQ.helpers.mathHelpers = {\n getRandomNumber: function (max = 1) {\n return Math.floor(Math.random() * Math.floor(max));\n },\n clamp: function (num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n }\n};\n\nPJQ.helpers.trigHelpers = {\n checkRectCollision: function (start, end, x, y) {\n return end.x >= x && start.x <= x && end.y >= y && start.y <= y;\n },\n distance: function (x1, y1, x2, y2) {\n let dx = x2 - x1,\n dy = y2 - y1;\n return Math.sqrt((dx * dx) + (dy * dy));\n }\n};\n\nPJQ.helpers.projectHelpers = {\n accessKeyNavigate: function (accessKey, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'accessKeys',\n value: accessKey\n }\n ])\n }).get().done(_.bind(function (response) {\n if (response.url != null) {\n if (response.url.indexOf('Default.aspx') !== -1) {\n window.location = response.url;\n } else if (response.url.indexOf('#') !== -1) {\n PJQ.app.router.navigate(response.url.substring(1), {\n trigger: true\n });\n } else if (response.url.indexOf('/') !== -1) {\n window.location = response.url.substring(1);\n }\n } else if (response.projectId > 0) {\n let host = window.location.origin;\n window.location = host + (host.indexOf('?') !== -1 ? '&' : '?') + 'accessKey=' + accessKey + '#projects/' + response.projectId.toString();\n } else {\n callback(response.message ? response.message : PJQ.Errors.auth.NOT_FOUND);\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n callback(xhr.responseJSON && xhr.responseJSON.message ? xhr.responseJSON.message : PJQ.Errors.auth.NOT_FOUND);\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_IN, {\n error: err,\n result: result\n });\n }, this));\n }\n};\n\nPJQ.helpers.sortHelpers = {\n regexAlpha: /[^a-zA-Z]/g,\n regexNum: /[^0-9]/g,\n sortAlphaNum: (a, b) => a.localeCompare(b, 'en', {numeric: true}),\n sortAlphaNumeric: function (a, b) {\n let aA = a.replace(PJQ.helpers.sortHelpers.regexAlpha, \"\"),\n bA = b.replace(PJQ.helpers.sortHelpers.regexAlpha, \"\");\n if (aA === bA) {\n let aN = parseInt(a.replace(PJQ.helpers.sortHelpers.regexNum, \"\"), 10),\n bN = parseInt(b.replace(PJQ.helpers.sortHelpers.regexNum, \"\"), 10);\n return aN === bN ? 0 : aN > bN ? 1 : -1;\n } else {\n return aA > bA ? 1 : -1;\n }\n },\n commonOrder: [\n \"g\",\n \"t\",\n \"d\",\n \"s\",\n \"a\",\n \"r\",\n \"m\",\n \"p\",\n \"e\"\n ],\n sortCommonPageNumbers: function (a, b) {\n let regexLetters = /^[a-z]+$/i,\n aStartLetter = regexLetters.test(a[0]),\n bStartLetter = regexLetters.test(b[0]);\n if (aStartLetter && bStartLetter) {\n // if both a and b start with a letter, determine letters precedence\n // build a string for both with only the starting letters\n let aLetters = \"\";\n for (let i = 0; i < a.length; i++) {\n if (regexLetters.test(a[i])) {\n aLetters += a[i].toLowerCase();\n } else {\n break;\n }\n }\n\n let bLetters = \"\";\n for (let i = 0; i < b.length; i++) {\n if (regexLetters.test(b[i])) {\n bLetters += b[i].toLowerCase();\n } else {\n break;\n }\n }\n\n if (aLetters === bLetters) {\n // if the letters are the same, compare them alphanumeric\n return this.sortAlphaNumeric(a, b);\n }\n\n let aInd = -1,\n bInd = -1;\n for (let i = 0; i < this.commonOrder.length; i++) {\n if (aLetters === this.commonOrder[i]) {\n aInd = i;\n }\n if (bLetters === this.commonOrder[i]) {\n bInd = i;\n }\n }\n\n if (bInd !== -1 && aInd > bInd) {\n return 1;\n } else if (aInd !== -1 && bInd > aInd) {\n return -1;\n } else {\n // both were the same sort\n // if it got here, this means neither of them matched our commonOrder letters\n // sort alphanumeric\n return this.sortAlphaNumeric(a, b);\n }\n } else if (!aStartLetter && bStartLetter) {\n // if \"b\" starts with a letter and \"a\" does not, b is first\n return 1;\n } else if (aStartLetter && !bStartLetter) {\n // if \"a\" starts with a letter and \"b\" does not, a is first\n return -1;\n } else if (!aStartLetter && !bStartLetter) {\n // if neither \"a\" nor \"b\" start with a letter, return regular alphanumeric comparison\n return this.sortAlphaNumeric(a, b);\n }\n }\n};\n\nPJQ.helpers.browserHelpers = {\n getChromeVersion: function () {\n let raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n return raw ? parseInt(raw[2], 10) : null;\n }\n};\n\nPJQ.helpers.canvasHelpers = {\n loadFont: function (font, callback) {\n document.fonts.load(font).then((_) => {\n callback(font);\n });\n },\n drawRoundRect: function (ct, x, y, width, height, radius, fill, stroke) {\n if (typeof stroke === 'undefined') {\n stroke = true;\n }\n if (typeof radius === 'undefined') {\n radius = 5;\n }\n if (typeof radius === 'number') {\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\n } else {\n let defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\n for (let side in defaultRadius) {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ct.beginPath();\n ct.moveTo(x + radius.tl, y);\n ct.lineTo(x + width - radius.tr, y);\n ct.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ct.lineTo(x + width, y + height - radius.br);\n ct.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ct.lineTo(x + radius.bl, y + height);\n ct.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ct.lineTo(x, y + radius.tl);\n ct.quadraticCurveTo(x, y, x + radius.tl, y);\n ct.closePath();\n if (fill) {\n ct.fill();\n }\n if (stroke) {\n ct.stroke();\n }\n }\n};","PJQ.constants = {\r\n customerService: {\r\n getPhone: function () {\r\n return PJQ.helpers.formatHelpers.formatPhoneNumber('8772199777');\r\n },\r\n getEmail: function () {\r\n if (PJQ.app.options.isPanteraApp) {\r\n return 'customerservice@panteratools.com';\r\n }\r\n return 'contactus@jobplanner.com'\r\n }\r\n },\r\n services: {\r\n ORIGIN: \"ORIGIN\",\r\n API: \"API\",\r\n FILES: \"FILES\",\r\n APIv2: \"APIv2\"\r\n },\r\n panteraPortalId: 4,\r\n publicUserId: 39,\r\n publicLogoURL: \"https://app.panteratools.com/images/pantera_app_logo.png\",\r\n countries: ['us', 'ca'],\r\n internationalCountries: [{\r\n name: \"Afghanistan\",\r\n states: [\"Badakhshan\", \"Badghis\", \"Baghlan\", \"Balkh\", \"Bamyan\", \"Daykundi\", \"Farah\", \"Faryab\", \"Ghazni\", \"GhÅr\", \"Helmand\", \"Herat\", \"Jowzjan\", \"Kabul\", \"Kandahar\", \"Kapisa\", \"Khost\", \"Kunar\", \"Kunduz Province\", \"Laghman\", \"Logar\", \"Nangarhar\", \"Nimruz\", \"Nuristan\", \"Paktia\", \"Paktika\", \"Panjshir\", \"Parwan\", \"Samangan\", \"Sar-e Pol\", \"Takhar\", \"Urozgan\", \"Zabul\"]\r\n }, {\r\n name: \"Aland Islands\",\r\n states: [\"Brändö\", \"Eckerö\", \"Finström\", \"Föglö\", \"Geta\", \"Hammarland\", \"Jomala\", \"Kökar\", \"Kumlinge\", \"Lemland\", \"Lumparland\", \"Mariehamn\", \"Saltvik\", \"Sottunga\", \"Sund\", \"VÃ¥rdö\"]\r\n }, {\r\n name: \"Albania\",\r\n states: [\"Berat County\", \"Berat District\", \"Bulqizë District\", \"Delvinë District\", \"Devoll District\", \"Dibër County\", \"Dibër District\", \"Durrës County\", \"Durrës District\", \"Elbasan County\", \"Fier County\", \"Fier District\", \"Gjirokastër County\", \"Gjirokastër District\", \"Gramsh District\", \"Has District\", \"Kavajë District\", \"Kolonjë District\", \"Korçë County\", \"Korçë District\", \"Krujë District\", \"Kuçovë District\", \"Kukës County\", \"Kukës District\", \"Kurbin District\", \"Lezhë County\", \"Lezhë District\", \"Librazhd District\", \"Lushnjë District\", \"Malësi e Madhe District\", \"Mallakastër District\", \"Mat District\", \"Mirditë District\", \"Peqin District\", \"Përmet District\", \"Pogradec District\", \"Pukë District\", \"Sarandë District\", \"Shkodër County\", \"Shkodër District\", \"Skrapar District\", \"Tepelenë District\", \"Tirana County\", \"Tirana District\", \"Tropojë District\", \"Vlorë County\", \"Vlorë District\"]\r\n }, {\r\n name: \"Algeria\",\r\n states: [\"Adrar\", \"Aïn Defla\", \"Aïn Témouchent\", \"Algiers\", \"Annaba\", \"Batna\", \"Béchar\", \"Béjaïa\", \"Béni Abbès\", \"Biskra\", \"Blida\", \"Bordj Baji Mokhtar\", \"Bordj Bou Arréridj\", \"Bouïra\", \"Boumerdès\", \"Chlef\", \"Constantine\", \"Djanet\", \"Djelfa\", \"El Bayadh\", \"El M'ghair\", \"El Menia\", \"El Oued\", \"El Tarf\", \"Ghardaïa\", \"Guelma\", \"Illizi\", \"In Guezzam\", \"In Salah\", \"Jijel\", \"Khenchela\", \"Laghouat\", \"M'Sila\", \"Mascara\", \"Médéa\", \"Mila\", \"Mostaganem\", \"Naama\", \"Oran\", \"Ouargla\", \"Ouled Djellal\", \"Oum El Bouaghi\", \"Relizane\", \"Saïda\", \"Sétif\", \"Sidi Bel Abbès\", \"Skikda\", \"Souk Ahras\", \"Tamanghasset\", \"Tébessa\", \"Tiaret\", \"Timimoun\", \"Tindouf\", \"Tipasa\", \"Tissemsilt\", \"Tizi Ouzou\", \"Tlemcen\", \"Touggourt\"]\r\n }, {name: \"American Samoa\", states: []}, {\r\n name: \"Andorra\",\r\n states: [\"Andorra la Vella\", \"Canillo\", \"Encamp\", \"Escaldes-Engordany\", \"La Massana\", \"Ordino\", \"Sant Julià de Lòria\"]\r\n }, {\r\n name: \"Angola\",\r\n states: [\"Bengo Province\", \"Benguela Province\", \"Bié Province\", \"Cabinda Province\", \"Cuando Cubango Province\", \"Cuanza Norte Province\", \"Cuanza Sul\", \"Cunene Province\", \"Huambo Province\", \"HuÃla Province\", \"Luanda Province\", \"Lunda Norte Province\", \"Lunda Sul Province\", \"Malanje Province\", \"Moxico Province\", \"UÃge Province\", \"Zaire Province\"]\r\n }, {\r\n name: \"Anguilla\",\r\n states: [\"Blowing Point\", \"East End\", \"George Hill\", \"Island Harbour\", \"North Hill\", \"North Side\", \"Sandy Ground\", \"Sandy Hill\", \"South Hill\", \"Stoney Ground\", \"The Farrington\", \"The Quarter\", \"The Valley\", \"West End\"]\r\n }, {name: \"Antarctica\", states: []}, {\r\n name: \"Antigua and Barbuda\",\r\n states: [\"Barbuda\", \"Redonda\", \"Saint George Parish\", \"Saint John Parish\", \"Saint Mary Parish\", \"Saint Paul Parish\", \"Saint Peter Parish\", \"Saint Philip Parish\"]\r\n }, {\r\n name: \"Argentina\",\r\n states: [\"Buenos Aires\", \"Catamarca\", \"Chaco\", \"Chubut\", \"Ciudad Autónoma de Buenos Aires\", \"Córdoba\", \"Corrientes\", \"Entre RÃos\", \"Formosa\", \"Jujuy\", \"La Pampa\", \"La Rioja\", \"Mendoza\", \"Misiones\", \"Neuquén\", \"RÃo Negro\", \"Salta\", \"San Juan\", \"San Luis\", \"Santa Cruz\", \"Santa Fe\", \"Santiago del Estero\", \"Tierra del Fuego\", \"Tucumán\"]\r\n }, {\r\n name: \"Armenia\",\r\n states: [\"Aragatsotn Region\", \"Ararat Province\", \"Armavir Region\", \"Gegharkunik Province\", \"Kotayk Region\", \"Lori Region\", \"Shirak Region\", \"Syunik Province\", \"Tavush Region\", \"Vayots Dzor Region\", \"Yerevan\"]\r\n }, {\r\n name: \"Aruba\",\r\n states: [\"Noord\", \"Oranjestad East\", \"Oranjestad West\", \"Paradera\", \"San Nicolaas Noord\", \"San Nicolaas Zuid\", \"Santa Cruz\", \"Savaneta\"]\r\n }, {\r\n name: \"Australia\",\r\n states: [\"Australian Capital Territory\", \"New South Wales\", \"Northern Territory\", \"Queensland\", \"South Australia\", \"Tasmania\", \"Victoria\", \"Western Australia\"]\r\n }, {\r\n name: \"Austria\",\r\n states: [\"Burgenland\", \"Carinthia\", \"Lower Austria\", \"Salzburg\", \"Styria\", \"Tyrol\", \"Upper Austria\", \"Vienna\", \"Vorarlberg\"]\r\n }, {\r\n name: \"Azerbaijan\",\r\n states: [\"Absheron District\", \"Agdam District\", \"Agdash District\", \"Aghjabadi District\", \"Agstafa District\", \"Agsu District\", \"Astara District\", \"Babek District\", \"Baku\", \"Balakan District\", \"Barda District\", \"Beylagan District\", \"Bilasuvar District\", \"Dashkasan District\", \"Fizuli District\", \"Ganja\", \"GÉ™dÉ™bÉ™y\", \"Gobustan District\", \"Goranboy District\", \"Goychay\", \"Goygol District\", \"Hajigabul District\", \"Imishli District\", \"Ismailli District\", \"Jabrayil District\", \"Jalilabad District\", \"Julfa District\", \"Kalbajar District\", \"Kangarli District\", \"Khachmaz District\", \"Khizi District\", \"Khojali District\", \"Kurdamir District\", \"Lachin District\", \"Lankaran\", \"Lankaran District\", \"Lerik District\", \"Martuni\", \"Masally District\", \"Mingachevir\", \"Nakhchivan Autonomous Republic\", \"Neftchala District\", \"Oghuz District\", \"Ordubad District\", \"Qabala District\", \"Qakh District\", \"Qazakh District\", \"Quba District\", \"Qubadli District\", \"Qusar District\", \"Saatly District\", \"Sabirabad District\", \"Sadarak District\", \"Salyan District\", \"Samukh District\", \"Shabran District\", \"Shahbuz District\", \"Shaki\", \"Shaki District\", \"Shamakhi District\", \"Shamkir District\", \"Sharur District\", \"Shirvan\", \"Shusha District\", \"Siazan District\", \"Sumqayit\", \"Tartar District\", \"Tovuz District\", \"Ujar District\", \"Yardymli District\", \"Yevlakh\", \"Yevlakh District\", \"Zangilan District\", \"Zaqatala District\", \"Zardab District\"]\r\n }, {name: \"Bahrain\", states: [\"Capital\", \"Central\", \"Muharraq\", \"Northern\", \"Southern\"]}, {\r\n name: \"Bangladesh\",\r\n states: [\"Barisal \", \"Chittagong \", \"Dhaka \", \"Khulna \", \"Mymensingh \", \"Rajshahi \", \"Rangpur \", \"Sylhet \"]\r\n }, {\r\n name: \"Barbados\",\r\n states: [\"Christ Church\", \"Saint Andrew\", \"Saint George\", \"Saint James\", \"Saint John\", \"Saint Joseph\", \"Saint Lucy\", \"Saint Michael\", \"Saint Peter\", \"Saint Philip\", \"Saint Thomas\"]\r\n }, {\r\n name: \"Belarus\",\r\n states: [\"Brest Region\", \"Gomel Region\", \"Grodno Region\", \"Minsk\", \"Minsk Region\", \"Mogilev Region\", \"Vitebsk Region\"]\r\n }, {\r\n name: \"Belgium\",\r\n states: [\"Antwerp\", \"Brussels-Capital Region\", \"East Flanders\", \"Flanders\", \"Flemish Brabant\", \"Hainaut\", \"Liège\", \"Limburg\", \"Luxembourg\", \"Namur\", \"Wallonia\", \"Walloon Brabant\", \"West Flanders\"]\r\n }, {\r\n name: \"Belize\",\r\n states: [\"Belize District\", \"Cayo District\", \"Corozal District\", \"Orange Walk District\", \"Stann Creek District\", \"Toledo District\"]\r\n }, {\r\n name: \"Benin\",\r\n states: [\"Alibori Department\", \"Atakora Department\", \"Atlantique Department\", \"Borgou Department\", \"Collines Department\", \"Donga Department\", \"Kouffo Department\", \"Littoral Department\", \"Mono Department\", \"Ouémé Department\", \"Plateau Department\", \"Zou Department\"]\r\n }, {\r\n name: \"Bermuda\",\r\n states: [\"Devonshire\", \"Hamilton\", \"Paget\", \"Pembroke\", \"Saint George's\", \"Sandys\", \"Smith's\", \"Southampton\", \"Warwick\"]\r\n }, {\r\n name: \"Bhutan\",\r\n states: [\"Bumthang \", \"Chukha \", \"Dagana \", \"Gasa \", \"Haa \", \"Lhuntse \", \"Mongar \", \"Paro \", \"Pemagatshel \", \"Punakha \", \"Samdrup Jongkhar \", \"Samtse \", \"Sarpang \", \"Thimphu \", \"Trashi Yangtse\\t\", \"Trashigang \", \"Trongsa \", \"Tsirang \", \"Wangdue Phodrang \", \"Zhemgang \"]\r\n }, {\r\n name: \"Bolivia\",\r\n states: [\"Beni Department\", \"Chuquisaca Department\", \"Cochabamba Department\", \"La Paz Department\", \"Oruro Department\", \"Pando Department\", \"Potosà Department\", \"Santa Cruz Department\", \"Tarija Department\"]\r\n }, {\r\n name: \"Bonaire, Sint Eustatius and Saba\",\r\n states: [\"Bonaire\", \"Saba\", \"Sint Eustatius\"]\r\n }, {\r\n name: \"Bosnia and Herzegovina\",\r\n states: [\"Bosnian Podrinje Canton\", \"BrÄko District\", \"Canton 10\", \"Central Bosnia Canton\", \"Federation of Bosnia and Herzegovina\", \"Herzegovina-Neretva Canton\", \"Posavina Canton\", \"Republika Srpska\", \"Sarajevo Canton\", \"Tuzla Canton\", \"Una-Sana Canton\", \"West Herzegovina Canton\", \"Zenica-Doboj Canton\"]\r\n }, {\r\n name: \"Botswana\",\r\n states: [\"Central District\", \"Ghanzi District\", \"Kgalagadi District\", \"Kgatleng District\", \"Kweneng District\", \"Ngamiland\", \"North-East District\", \"North-West District\", \"South-East District\", \"Southern District\"]\r\n }, {name: \"Bouvet Island\", states: []}, {\r\n name: \"Brazil\",\r\n states: [\"Acre\", \"Alagoas\", \"Amapá\", \"Amazonas\", \"Bahia\", \"Ceará\", \"Distrito Federal\", \"EspÃrito Santo\", \"Goiás\", \"Maranhão\", \"Mato Grosso\", \"Mato Grosso do Sul\", \"Minas Gerais\", \"Pará\", \"ParaÃba\", \"Paraná\", \"Pernambuco\", \"PiauÃ\", \"Rio de Janeiro\", \"Rio Grande do Norte\", \"Rio Grande do Sul\", \"Rondônia\", \"Roraima\", \"Santa Catarina\", \"São Paulo\", \"Sergipe\", \"Tocantins\"]\r\n }, {name: \"British Indian Ocean Territory\", states: []}, {\r\n name: \"Brunei\",\r\n states: [\"Belait District\", \"Brunei-Muara District\", \"Temburong District\", \"Tutong District\"]\r\n }, {\r\n name: \"Bulgaria\",\r\n states: [\"Blagoevgrad Province\", \"Burgas Province\", \"Dobrich Province\", \"Gabrovo Province\", \"Haskovo Province\", \"Kardzhali Province\", \"Kyustendil Province\", \"Lovech Province\", \"Montana Province\", \"Pazardzhik Province\", \"Pernik Province\", \"Pleven Province\", \"Plovdiv Province\", \"Razgrad Province\", \"Ruse Province\", \"Shumen\", \"Silistra Province\", \"Sliven Province\", \"Smolyan Province\", \"Sofia City Province\", \"Sofia Province\", \"Stara Zagora Province\", \"Targovishte Province\", \"Varna Province\", \"Veliko Tarnovo Province\", \"Vidin Province\", \"Vratsa Province\", \"Yambol Province\"]\r\n }, {\r\n name: \"Burkina Faso\",\r\n states: [\"Balé Province\", \"Bam Province\", \"Banwa Province\", \"Bazèga Province\", \"Boucle du Mouhoun Region\", \"Bougouriba Province\", \"Boulgou\", \"Cascades Region\", \"Centre\", \"Centre-Est Region\", \"Centre-Nord Region\", \"Centre-Ouest Region\", \"Centre-Sud Region\", \"Comoé Province\", \"Est Region\", \"Ganzourgou Province\", \"Gnagna Province\", \"Gourma Province\", \"Hauts-Bassins Region\", \"Houet Province\", \"Ioba Province\", \"Kadiogo Province\", \"Kénédougou Province\", \"Komondjari Province\", \"Kompienga Province\", \"Kossi Province\", \"Koulpélogo Province\", \"Kouritenga Province\", \"Kourwéogo Province\", \"Léraba Province\", \"Loroum Province\", \"Mouhoun\", \"Nahouri Province\", \"Namentenga Province\", \"Nayala Province\", \"Nord Region, Burkina Faso\", \"Noumbiel Province\", \"Oubritenga Province\", \"Oudalan Province\", \"Passoré Province\", \"Plateau-Central Region\", \"Poni Province\", \"Sahel Region\", \"Sanguié Province\", \"Sanmatenga Province\", \"Séno Province\", \"Sissili Province\", \"Soum Province\", \"Sourou Province\", \"Sud-Ouest Region\", \"Tapoa Province\", \"Tuy Province\", \"Yagha Province\", \"Yatenga Province\", \"Ziro Province\", \"Zondoma Province\", \"Zoundwéogo Province\"]\r\n }, {\r\n name: \"Burundi\",\r\n states: [\"Bubanza Province\", \"Bujumbura Mairie Province\", \"Bujumbura Rural Province\", \"Bururi Province\", \"Cankuzo Province\", \"Cibitoke Province\", \"Gitega Province\", \"Karuzi Province\", \"Kayanza Province\", \"Kirundo Province\", \"Makamba Province\", \"Muramvya Province\", \"Muyinga Province\", \"Mwaro Province\", \"Ngozi Province\", \"Rumonge Province\", \"Rutana Province\", \"Ruyigi Province\"]\r\n }, {\r\n name: \"Cambodia\",\r\n states: [\"Banteay Meanchey\", \"Battambang\", \"Kampong Cham\", \"Kampong Chhnang\", \"Kampong Speu\", \"Kampong Thom\", \"Kampot\", \"Kandal\", \"Kep\", \"Koh Kong\", \"Kratie\", \"Mondulkiri\", \"Oddar Meanchey\", \"Pailin\", \"Phnom Penh\", \"Preah Vihear\", \"Prey Veng\", \"Pursat\", \"Ratanakiri\", \"Siem Reap\", \"Sihanoukville\", \"Stung Treng\", \"Svay Rieng\", \"Takeo\"]\r\n }, {\r\n name: \"Cameroon\",\r\n states: [\"Adamawa\", \"Centre\", \"East\", \"Far North\", \"Littoral\", \"North\", \"Northwest\", \"South\", \"Southwest\", \"West\"]\r\n }, {\r\n name: \"Cape Verde\",\r\n states: [\"Barlavento Islands\", \"Boa Vista\", \"Brava\", \"Maio Municipality\", \"Mosteiros\", \"Paul\", \"Porto Novo\", \"Praia\", \"Ribeira Brava Municipality\", \"Ribeira Grande\", \"Ribeira Grande de Santiago\", \"Sal\", \"Santa Catarina\", \"Santa Catarina do Fogo\", \"Santa Cruz\", \"São Domingos\", \"São Filipe\", \"São Lourenço dos Órgãos\", \"São Miguel\", \"São Vicente\", \"Sotavento Islands\", \"Tarrafal\", \"Tarrafal de São Nicolau\"]\r\n }, {\r\n name: \"Cayman Islands\",\r\n states: [\"Cayman Brac\", \"Grand Cayman\", \"Little Cayman\"]\r\n }, {\r\n name: \"Central African Republic\",\r\n states: [\"Bamingui-Bangoran Prefecture\", \"Bangui\", \"Basse-Kotto Prefecture\", \"Haut-Mbomou Prefecture\", \"Haute-Kotto Prefecture\", \"Kémo Prefecture\", \"Lobaye Prefecture\", \"Mambéré-Kadéï\", \"Mbomou Prefecture\", \"Nana-Grébizi Economic Prefecture\", \"Nana-Mambéré Prefecture\", \"Ombella-M'Poko Prefecture\", \"Ouaka Prefecture\", \"Ouham Prefecture\", \"Ouham-Pendé Prefecture\", \"Sangha-Mbaéré\", \"Vakaga Prefecture\"]\r\n }, {\r\n name: \"Chad\",\r\n states: [\"Bahr el Gazel\", \"Batha\", \"Borkou\", \"Chari-Baguirmi\", \"Ennedi-Est\", \"Ennedi-Ouest\", \"Guéra\", \"Hadjer-Lamis\", \"Kanem\", \"Lac\", \"Logone Occidental\", \"Logone Oriental\", \"Mandoul\", \"Mayo-Kebbi Est\", \"Mayo-Kebbi Ouest\", \"Moyen-Chari\", \"N'Djamena\", \"Ouaddaï\", \"Salamat\", \"Sila\", \"Tandjilé\", \"Tibesti\", \"Wadi Fira\"]\r\n }, {\r\n name: \"Chile\",\r\n states: [\"Aisén del General Carlos Ibañez del Campo\", \"Antofagasta\", \"Arica y Parinacota\", \"Atacama\", \"BiobÃo\", \"Coquimbo\", \"La AraucanÃa\", \"Libertador General Bernardo O'Higgins\", \"Los Lagos\", \"Los RÃos\", \"Magallanes y de la Antártica Chilena\", \"Maule\", \"Ñuble\", \"Región Metropolitana de Santiago\", \"Tarapacá\", \"ValparaÃso\"]\r\n }, {\r\n name: \"China\",\r\n states: [\"Anhui\", \"Beijing\", \"Chongqing\", \"Fujian\", \"Gansu\", \"Guangdong\", \"Guangxi Zhuang\", \"Guizhou\", \"Hainan\", \"Hebei\", \"Heilongjiang\", \"Henan\", \"Hong Kong SAR\", \"Hubei\", \"Hunan\", \"Inner Mongolia\", \"Jiangsu\", \"Jiangxi\", \"Jilin\", \"Liaoning\", \"Macau SAR\", \"Ningxia Huizu\", \"Qinghai\", \"Shaanxi\", \"Shandong\", \"Shanghai\", \"Shanxi\", \"Sichuan\", \"Taiwan\", \"Tianjin\", \"Xinjiang\", \"Xizang\", \"Yunnan\", \"Zhejiang\"]\r\n }, {name: \"Christmas Island\", states: []}, {name: \"Cocos (Keeling) Islands\", states: []}, {\r\n name: \"Colombia\",\r\n states: [\"Amazonas\", \"Antioquia\", \"Arauca\", \"Archipiélago de San Andrés, Providencia y Santa Catalina\", \"Atlántico\", \"Bogotá D.C.\", \"BolÃvar\", \"Boyacá\", \"Caldas\", \"Caquetá\", \"Casanare\", \"Cauca\", \"Cesar\", \"Chocó\", \"Córdoba\", \"Cundinamarca\", \"GuainÃa\", \"Guaviare\", \"Huila\", \"La Guajira\", \"Magdalena\", \"Meta\", \"Nariño\", \"Norte de Santander\", \"Putumayo\", \"QuindÃo\", \"Risaralda\", \"Santander\", \"Sucre\", \"Tolima\", \"Valle del Cauca\", \"Vaupés\", \"Vichada\"]\r\n }, {name: \"Comoros\", states: [\"Anjouan\", \"Grande Comore\", \"Mohéli\"]}, {\r\n name: \"Congo\",\r\n states: [\"Bouenza Department\", \"Brazzaville\", \"Cuvette Department\", \"Cuvette-Ouest Department\", \"Kouilou Department\", \"Lékoumou Department\", \"Likouala Department\", \"Niari Department\", \"Plateaux Department\", \"Pointe-Noire\", \"Pool Department\", \"Sangha Department\"]\r\n }, {name: \"Cook Islands\", states: []}, {\r\n name: \"Costa Rica\",\r\n states: [\"Alajuela Province\", \"Guanacaste Province\", \"Heredia Province\", \"Limón Province\", \"Provincia de Cartago\", \"Puntarenas Province\", \"San José Province\"]\r\n }, {\r\n name: \"Cote D'Ivoire (Ivory Coast)\",\r\n states: [\"Abidjan\", \"Agnéby\", \"Bafing Region\", \"Bas-Sassandra District\", \"Bas-Sassandra Region\", \"Comoé District\", \"Denguélé District\", \"Denguélé Region\", \"Dix-Huit Montagnes\", \"Fromager\", \"Gôh-Djiboua District\", \"Haut-Sassandra\", \"Lacs District\", \"Lacs Region\", \"Lagunes District\", \"Lagunes region\", \"Marahoué Region\", \"Montagnes District\", \"Moyen-Cavally\", \"Moyen-Comoé\", \"N'zi-Comoé\", \"Sassandra-Marahoué District\", \"Savanes Region\", \"Sud-Bandama\", \"Sud-Comoé\", \"Vallée du Bandama District\", \"Vallée du Bandama Region\", \"Woroba District\", \"Worodougou\", \"Yamoussoukro\", \"Zanzan Region\"]\r\n }, {\r\n name: \"Croatia\",\r\n states: [\"Bjelovar-Bilogora\", \"Brod-Posavina\", \"Dubrovnik-Neretva\", \"Istria\", \"Karlovac\", \"Koprivnica-Križevci\", \"Krapina-Zagorje\", \"Lika-Senj\", \"MeÄ‘imurje\", \"Osijek-Baranja\", \"Požega-Slavonia\", \"Primorje-Gorski Kotar\", \"Å ibenik-Knin\", \"Sisak-Moslavina\", \"Split-Dalmatia\", \"Varaždin\", \"Virovitica-Podravina\", \"Vukovar-Syrmia\", \"Zadar\", \"Zagreb\", \"Zagreb\"]\r\n }, {\r\n name: \"Cuba\",\r\n states: [\"Artemisa Province\", \"Camagüey Province\", \"Ciego de Ãvila Province\", \"Cienfuegos Province\", \"Granma Province\", \"Guantánamo Province\", \"Havana Province\", \"HolguÃn Province\", \"Isla de la Juventud\", \"Las Tunas Province\", \"Matanzas Province\", \"Mayabeque Province\", \"Pinar del RÃo Province\", \"Sancti SpÃritus Province\", \"Santiago de Cuba Province\", \"Villa Clara Province\"]\r\n }, {name: \"Curaçao\", states: []}, {\r\n name: \"Cyprus\",\r\n states: [\"Famagusta District (MaÄŸusa)\", \"Kyrenia District (Keryneia)\", \"Larnaca District (Larnaka)\", \"Limassol District (Leymasun)\", \"Nicosia District (LefkoÅŸa)\", \"Paphos District (Pafos)\"]\r\n }, {\r\n name: \"Czech Republic\",\r\n states: [\"BeneÅ¡ov\", \"Beroun\", \"Blansko\", \"BÅ™eclav\", \"Brno-mÄ›sto\", \"Brno-venkov\", \"Bruntál\", \"ÄŒeská LÃpa\", \"ÄŒeské BudÄ›jovice\", \"ÄŒeský Krumlov\", \"Cheb\", \"Chomutov\", \"Chrudim\", \"DÄ›ÄÃn\", \"Domažlice\", \"Frýdek-MÃstek\", \"HavlÃÄkův Brod\", \"HodonÃn\", \"Hradec Králové\", \"Jablonec nad Nisou\", \"JesenÃk\", \"JiÄÃn\", \"Jihlava\", \"JihoÄeský kraj\", \"Jihomoravský kraj\", \"JindÅ™ichův Hradec\", \"Karlovarský kraj\", \"Karlovy Vary\", \"Karviná\", \"Kladno\", \"Klatovy\", \"KolÃn\", \"Kraj VysoÄina\", \"Královéhradecký kraj\", \"KroměřÞ\", \"Kutná Hora\", \"Liberec\", \"Liberecký kraj\", \"Litoměřice\", \"Louny\", \"MÄ›lnÃk\", \"Mladá Boleslav\", \"Moravskoslezský kraj\", \"Most\", \"Náchod\", \"Nový JiÄÃn\", \"Nymburk\", \"Olomouc\", \"Olomoucký kraj\", \"Opava\", \"Ostrava-mÄ›sto\", \"Pardubice\", \"Pardubický kraj\", \"PelhÅ™imov\", \"PÃsek\", \"Plzeň-jih\", \"Plzeň-mÄ›sto\", \"Plzeň-sever\", \"Plzeňský kraj\", \"Prachatice\", \"Praha-východ\", \"Praha-západ\", \"Praha, Hlavnà mÄ›sto\", \"PÅ™erov\", \"PÅ™Ãbram\", \"ProstÄ›jov\", \"RakovnÃk\", \"Rokycany\", \"Rychnov nad Kněžnou\", \"Semily\", \"Sokolov\", \"Strakonice\", \"StÅ™edoÄeský kraj\", \"Å umperk\", \"Svitavy\", \"Tábor\", \"Tachov\", \"Teplice\", \"TÅ™ebÃÄ\", \"Trutnov\", \"Uherské HradiÅ¡tÄ›\", \"Ústecký kraj\", \"Ústà nad Labem\", \"Ústà nad OrlicÃ\", \"VsetÃn\", \"VyÅ¡kov\", \"ŽÄár nad Sázavou\", \"ZlÃn\", \"ZlÃnský kraj\", \"Znojmo\"]\r\n }, {\r\n name: \"Democratic Republic of the Congo\",\r\n states: [\"Bas-Uélé\", \"Équateur\", \"Haut-Katanga\", \"Haut-Lomami\", \"Haut-Uélé\", \"Ituri\", \"Kasaï\", \"Kasaï Central\", \"Kasaï Oriental\", \"Kinshasa\", \"Kongo Central\", \"Kwango\", \"Kwilu\", \"Lomami\", \"Lualaba\", \"Mai-Ndombe\", \"Maniema\", \"Mongala\", \"Nord-Kivu\", \"Nord-Ubangi\", \"Sankuru\", \"Sud-Kivu\", \"Sud-Ubangi\", \"Tanganyika\", \"Tshopo\", \"Tshuapa\"]\r\n }, {\r\n name: \"Denmark\",\r\n states: [\"Capital Region of Denmark\", \"Central Denmark Region\", \"North Denmark Region\", \"Region of Southern Denmark\", \"Region Zealand\"]\r\n }, {\r\n name: \"Djibouti\",\r\n states: [\"Ali Sabieh Region\", \"Arta Region\", \"Dikhil Region\", \"Djibouti\", \"Obock Region\", \"Tadjourah Region\"]\r\n }, {\r\n name: \"Dominica\",\r\n states: [\"Saint Andrew Parish\", \"Saint David Parish\", \"Saint George Parish\", \"Saint John Parish\", \"Saint Joseph Parish\", \"Saint Luke Parish\", \"Saint Mark Parish\", \"Saint Patrick Parish\", \"Saint Paul Parish\", \"Saint Peter Parish\"]\r\n }, {\r\n name: \"Dominican Republic\",\r\n states: [\"Azua Province\", \"Baoruco Province\", \"Barahona Province\", \"Dajabón Province\", \"Distrito Nacional\", \"Duarte Province\", \"El Seibo Province\", \"Espaillat Province\", \"Hato Mayor Province\", \"Hermanas Mirabal Province\", \"Independencia\", \"La Altagracia Province\", \"La Romana Province\", \"La Vega Province\", \"MarÃa Trinidad Sánchez Province\", \"Monseñor Nouel Province\", \"Monte Cristi Province\", \"Monte Plata Province\", \"Pedernales Province\", \"Peravia Province\", \"Puerto Plata Province\", \"Samaná Province\", \"San Cristóbal Province\", \"San José de Ocoa Province\", \"San Juan Province\", \"San Pedro de MacorÃs\", \"Sánchez RamÃrez Province\", \"Santiago Province\", \"Santiago RodrÃguez Province\", \"Santo Domingo Province\", \"Valverde Province\"]\r\n }, {\r\n name: \"Ecuador\",\r\n states: [\"Azuay\", \"BolÃvar\", \"Cañar\", \"Carchi\", \"Chimborazo\", \"Cotopaxi\", \"El Oro\", \"Esmeraldas\", \"Galápagos\", \"Guayas\", \"Imbabura\", \"Loja\", \"Los RÃos\", \"ManabÃ\", \"Morona-Santiago\", \"Napo\", \"Orellana\", \"Pastaza\", \"Pichincha\", \"Santa Elena\", \"Santo Domingo de los Tsáchilas\", \"SucumbÃos\", \"Tungurahua\", \"Zamora Chinchipe\"]\r\n }, {\r\n name: \"Egypt\",\r\n states: [\"Alexandria\", \"Aswan\", \"Asyut\", \"Beheira\", \"Beni Suef\", \"Cairo\", \"Dakahlia\", \"Damietta\", \"Faiyum\", \"Gharbia\", \"Giza\", \"Ismailia\", \"Kafr el-Sheikh\", \"Luxor\", \"Matrouh\", \"Minya\", \"Monufia\", \"New Valley\", \"North Sinai\", \"Port Said\", \"Qalyubia\", \"Qena\", \"Red Sea\", \"Sharqia\", \"Sohag\", \"South Sinai\", \"Suez\"]\r\n }, {\r\n name: \"El Salvador\",\r\n states: [\"Ahuachapán Department\", \"Cabañas Department\", \"Chalatenango Department\", \"Cuscatlán Department\", \"La Libertad Department\", \"La Paz Department\", \"La Unión Department\", \"Morazán Department\", \"San Miguel Department\", \"San Salvador Department\", \"San Vicente Department\", \"Santa Ana Department\", \"Sonsonate Department\", \"Usulután Department\"]\r\n }, {\r\n name: \"Equatorial Guinea\",\r\n states: [\"Annobón Province\", \"Bioko Norte Province\", \"Bioko Sur Province\", \"Centro Sur Province\", \"Insular Region\", \"Kié-Ntem Province\", \"Litoral Province\", \"RÃo Muni\", \"Wele-Nzas Province\"]\r\n }, {\r\n name: \"Eritrea\",\r\n states: [\"Anseba Region\", \"Debub Region\", \"Gash-Barka Region\", \"Maekel Region\", \"Northern Red Sea Region\", \"Southern Red Sea Region\"]\r\n }, {\r\n name: \"Estonia\",\r\n states: [\"Harju County\", \"Hiiu County\", \"Ida-Viru County\", \"Järva County\", \"Jõgeva County\", \"Lääne County\", \"Lääne-Viru County\", \"Pärnu County\", \"Põlva County\", \"Rapla County\", \"Saare County\", \"Tartu County\", \"Valga County\", \"Viljandi County\", \"Võru County\"]\r\n }, {\r\n name: \"Eswatini\",\r\n states: [\"Hhohho District\", \"Lubombo District\", \"Manzini District\", \"Shiselweni District\"]\r\n }, {\r\n name: \"Ethiopia\",\r\n states: [\"Addis Ababa\", \"Afar Region\", \"Amhara Region\", \"Benishangul-Gumuz Region\", \"Dire Dawa\", \"Gambela Region\", \"Harari Region\", \"Oromia Region\", \"Somali Region\", \"Southern Nations, Nationalities, and Peoples' Region\", \"Tigray Region\"]\r\n }, {name: \"Falkland Islands\", states: []}, {\r\n name: \"Faroe Islands\",\r\n states: [\"Eysturoy\", \"Northern Isles\", \"Sandoy\", \"Streymoy\", \"Suðuroy\", \"Vágar\"]\r\n }, {\r\n name: \"Fiji Islands\",\r\n states: [\"Ba\", \"Bua\", \"Cakaudrove\", \"Central Division\", \"Eastern Division\", \"Kadavu\", \"Lau\", \"Lomaiviti\", \"Macuata\", \"Nadroga-Navosa\", \"Naitasiri\", \"Namosi\", \"Northern Division\", \"Ra\", \"Rewa\", \"Rotuma\", \"Serua\", \"Tailevu\", \"Western Division\"]\r\n }, {\r\n name: \"Finland\",\r\n states: [\"Ã…land Islands\", \"Central Finland\", \"Central Ostrobothnia\", \"Finland Proper\", \"Kainuu\", \"Kymenlaakso\", \"Lapland\", \"North Karelia\", \"Northern Ostrobothnia\", \"Northern Savonia\", \"Ostrobothnia\", \"Päijänne Tavastia\", \"Pirkanmaa\", \"Satakunta\", \"South Karelia\", \"Southern Ostrobothnia\", \"Southern Savonia\", \"Tavastia Proper\", \"Uusimaa\"]\r\n }, {\r\n name: \"France\",\r\n states: [\"Ain\", \"Aisne\", \"Allier\", \"Alpes-de-Haute-Provence\", \"Alpes-Maritimes\", \"Alsace\", \"Ardèche\", \"Ardennes\", \"Ariège\", \"Aube\", \"Aude\", \"Auvergne-Rhône-Alpes\", \"Aveyron\", \"Bas-Rhin\", \"Bouches-du-Rhône\", \"Bourgogne-Franche-Comté\", \"Bretagne\", \"Calvados\", \"Cantal\", \"Centre-Val de Loire\", \"Charente\", \"Charente-Maritime\", \"Cher\", \"Clipperton\", \"Corrèze\", \"Corse\", \"Corse-du-Sud\", \"Côte-d'Or\", \"Côtes-d'Armor\", \"Creuse\", \"Deux-Sèvres\", \"Dordogne\", \"Doubs\", \"Drôme\", \"Essonne\", \"Eure\", \"Eure-et-Loir\", \"Finistère\", \"French Guiana\", \"French Polynesia\", \"French Southern and Antarctic Lands\", \"Gard\", \"Gers\", \"Gironde\", \"Grand-Est\", \"Guadeloupe\", \"Haut-Rhin\", \"Haute-Corse\", \"Haute-Garonne\", \"Haute-Loire\", \"Haute-Marne\", \"Haute-Saône\", \"Haute-Savoie\", \"Haute-Vienne\", \"Hautes-Alpes\", \"Hautes-Pyrénées\", \"Hauts-de-France\", \"Hauts-de-Seine\", \"Hérault\", \"ÃŽle-de-France\", \"Ille-et-Vilaine\", \"Indre\", \"Indre-et-Loire\", \"Isère\", \"Jura\", \"La Réunion\", \"Landes\", \"Loir-et-Cher\", \"Loire\", \"Loire-Atlantique\", \"Loiret\", \"Lot\", \"Lot-et-Garonne\", \"Lozère\", \"Maine-et-Loire\", \"Manche\", \"Marne\", \"Martinique\", \"Mayenne\", \"Mayotte\", \"Métropole de Lyon\", \"Meurthe-et-Moselle\", \"Meuse\", \"Morbihan\", \"Moselle\", \"Nièvre\", \"Nord\", \"Normandie\", \"Nouvelle-Aquitaine\", \"Occitanie\", \"Oise\", \"Orne\", \"Paris\", \"Pas-de-Calais\", \"Pays-de-la-Loire\", \"Provence-Alpes-Côte-d’Azur\", \"Puy-de-Dôme\", \"Pyrénées-Atlantiques\", \"Pyrénées-Orientales\", \"Rhône\", \"Saint Pierre and Miquelon\", \"Saint-Barthélemy\", \"Saint-Martin\", \"Saône-et-Loire\", \"Sarthe\", \"Savoie\", \"Seine-et-Marne\", \"Seine-Maritime\", \"Seine-Saint-Denis\", \"Somme\", \"Tarn\", \"Tarn-et-Garonne\", \"Territoire de Belfort\", \"Val-d'Oise\", \"Val-de-Marne\", \"Var\", \"Vaucluse\", \"Vendée\", \"Vienne\", \"Vosges\", \"Wallis and Futuna\", \"Yonne\", \"Yvelines\"]\r\n }, {name: \"French Guiana\", states: []}, {\r\n name: \"French Polynesia\",\r\n states: []\r\n }, {name: \"French Southern Territories\", states: []}, {\r\n name: \"Gabon\",\r\n states: [\"Estuaire Province\", \"Haut-Ogooué Province\", \"Moyen-Ogooué Province\", \"Ngounié Province\", \"Nyanga Province\", \"Ogooué-Ivindo Province\", \"Ogooué-Lolo Province\", \"Ogooué-Maritime Province\", \"Woleu-Ntem Province\"]\r\n }, {\r\n name: \"Georgia\",\r\n states: [\"Abkhazia\", \"Adjara\", \"Guria\", \"Imereti\", \"Kakheti\", \"Khelvachauri Municipality\", \"Kvemo Kartli\", \"Mtskheta-Mtianeti\", \"Racha-Lechkhumi and Kvemo Svaneti\", \"Samegrelo-Zemo Svaneti\", \"Samtskhe-Javakheti\", \"Senaki Municipality\", \"Shida Kartli\", \"Tbilisi\"]\r\n }, {\r\n name: \"Germany\",\r\n states: [\"Baden-Württemberg\", \"Bavaria\", \"Berlin\", \"Brandenburg\", \"Bremen\", \"Hamburg\", \"Hessen\", \"Lower Saxony\", \"Mecklenburg-Vorpommern\", \"North Rhine-Westphalia\", \"Rhineland-Palatinate\", \"Saarland\", \"Saxony\", \"Saxony-Anhalt\", \"Schleswig-Holstein\", \"Thuringia\"]\r\n }, {\r\n name: \"Ghana\",\r\n states: [\"Ahafo\", \"Ashanti\", \"Bono\", \"Bono East\", \"Central\", \"Eastern\", \"Greater Accra\", \"North East\", \"Northern\", \"Oti\", \"Savannah\", \"Upper East\", \"Upper West\", \"Volta\", \"Western\", \"Western North\"]\r\n }, {name: \"Gibraltar\", states: []}, {\r\n name: \"Greece\",\r\n states: [\"Achaea Regional Unit\", \"Aetolia-Acarnania Regional Unit\", \"Arcadia Prefecture\", \"Argolis Regional Unit\", \"Attica Region\", \"Boeotia Regional Unit\", \"Central Greece Region\", \"Central Macedonia\", \"Chania Regional Unit\", \"Corfu Prefecture\", \"Corinthia Regional Unit\", \"Crete Region\", \"Drama Regional Unit\", \"East Attica Regional Unit\", \"East Macedonia and Thrace\", \"Epirus Region\", \"Euboea\", \"Grevena Prefecture\", \"Imathia Regional Unit\", \"Ioannina Regional Unit\", \"Ionian Islands Region\", \"Karditsa Regional Unit\", \"Kastoria Regional Unit\", \"Kefalonia Prefecture\", \"Kilkis Regional Unit\", \"Kozani Prefecture\", \"Laconia\", \"Larissa Prefecture\", \"Lefkada Regional Unit\", \"Pella Regional Unit\", \"Peloponnese Region\", \"Phthiotis Prefecture\", \"Preveza Prefecture\", \"Serres Prefecture\", \"South Aegean\", \"Thessaloniki Regional Unit\", \"West Greece Region\", \"West Macedonia Region\"]\r\n }, {name: \"Greenland\", states: []}, {\r\n name: \"Grenada\",\r\n states: [\"Carriacou and Petite Martinique\", \"Saint Andrew Parish\", \"Saint David Parish\", \"Saint George Parish\", \"Saint John Parish\", \"Saint Mark Parish\", \"Saint Patrick Parish\"]\r\n }, {name: \"Guadeloupe\", states: []}, {\r\n name: \"Guam\",\r\n states: [\"Agana Heights\", \"Asan-Maina\", \"Barrigada\", \"Chalan Pago-Ordot\", \"Dededo\", \"HÃ¥gat\", \"HagÃ¥tña\", \"Inarajan (InalÃ¥han)\", \"Mangilao\", \"Merizo (Malesso)\", \"Mongmong-Toto-Maite\", \"Piti\", \"Santa Rita (SÃ¥nta Rita-Sumai)\", \"Sinajana\", \"Talofofo (Talo'fo'fo)\", \"Tamuning\", \"Umatac (HumÃ¥tak)\", \"Yigo\", \"Yona\"]\r\n }, {\r\n name: \"Guatemala\",\r\n states: [\"Alta Verapaz \", \"Baja Verapaz \", \"Chimaltenango \", \"Chiquimula \", \"El Progreso \", \"Escuintla \", \"Guatemala \", \"Huehuetenango \", \"Izabal \", \"Jalapa \", \"Jutiapa \", \"Petén \", \"Quetzaltenango \", \"Quiché \", \"Retalhuleu \", \"Sacatepéquez \", \"San Marcos \", \"Santa Rosa \", \"Sololá \", \"Suchitepéquez \", \"Totonicapán \", \"Zacapa\"]\r\n }, {name: \"Guernsey and Alderney\", states: []}, {\r\n name: \"Guinea\",\r\n states: [\"Beyla Prefecture\", \"Boffa Prefecture\", \"Boké Prefecture\", \"Boké Region\", \"Conakry\", \"Coyah Prefecture\", \"Dabola Prefecture\", \"Dalaba Prefecture\", \"Dinguiraye Prefecture\", \"Dubréka Prefecture\", \"Faranah Prefecture\", \"Forécariah Prefecture\", \"Fria Prefecture\", \"Gaoual Prefecture\", \"Guéckédou Prefecture\", \"Kankan Prefecture\", \"Kankan Region\", \"Kérouané Prefecture\", \"Kindia Prefecture\", \"Kindia Region\", \"Kissidougou Prefecture\", \"Koubia Prefecture\", \"Koundara Prefecture\", \"Kouroussa Prefecture\", \"Labé Prefecture\", \"Labé Region\", \"Lélouma Prefecture\", \"Lola Prefecture\", \"Macenta Prefecture\", \"Mali Prefecture\", \"Mamou Prefecture\", \"Mamou Region\", \"Mandiana Prefecture\", \"Nzérékoré Prefecture\", \"Nzérékoré Region\", \"Pita Prefecture\", \"Siguiri Prefecture\", \"Télimélé Prefecture\", \"Tougué Prefecture\", \"Yomou Prefecture\"]\r\n }, {\r\n name: \"Guinea-Bissau\",\r\n states: [\"Bafatá\", \"Biombo Region\", \"Bolama Region\", \"Cacheu Region\", \"Gabú Region\", \"Leste Province\", \"Norte Province\", \"Oio Region\", \"Quinara Region\", \"Sul Province\", \"Tombali Region\"]\r\n }, {\r\n name: \"Guyana\",\r\n states: [\"Barima-Waini\", \"Cuyuni-Mazaruni\", \"Demerara-Mahaica\", \"East Berbice-Corentyne\", \"Essequibo Islands-West Demerara\", \"Mahaica-Berbice\", \"Pomeroon-Supenaam\", \"Potaro-Siparuni\", \"Upper Demerara-Berbice\", \"Upper Takutu-Upper Essequibo\"]\r\n }, {\r\n name: \"Haiti\",\r\n states: [\"Artibonite\", \"Centre\", \"Grand'Anse\", \"Nippes\", \"Nord\", \"Nord-Est\", \"Nord-Ouest\", \"Ouest\", \"Sud\", \"Sud-Est\"]\r\n }, {name: \"Heard Island and McDonald Islands\", states: []}, {\r\n name: \"Honduras\",\r\n states: [\"Atlántida Department\", \"Bay Islands Department\", \"Choluteca Department\", \"Colón Department\", \"Comayagua Department\", \"Copán Department\", \"Cortés Department\", \"El ParaÃso Department\", \"Francisco Morazán Department\", \"Gracias a Dios Department\", \"Intibucá Department\", \"La Paz Department\", \"Lempira Department\", \"Ocotepeque Department\", \"Olancho Department\", \"Santa Bárbara Department\", \"Valle Department\", \"Yoro Department\"]\r\n }, {\r\n name: \"Hong Kong S.A.R.\",\r\n states: [\"Central and Western\", \"Eastern\", \"Islands\", \"Kowloon City\", \"Kwai Tsing\", \"Kwun Tong\", \"North\", \"Sai Kung\", \"Sha Tin\", \"Sham Shui Po\", \"Southern\", \"Tai Po\", \"Tsuen Wan\", \"Tuen Mun\", \"Wan Chai\", \"Wong Tai Sin\", \"Yau Tsim Mong\", \"Yuen Long\"]\r\n }, {\r\n name: \"Hungary\",\r\n states: [\"Bács-Kiskun\", \"Baranya\", \"Békés\", \"Békéscsaba\", \"Borsod-Abaúj-Zemplén\", \"Budapest\", \"Csongrád County\", \"Debrecen\", \"Dunaújváros\", \"Eger\", \"Érd\", \"Fejér County\", \"GyÅ‘r\", \"GyÅ‘r-Moson-Sopron County\", \"Hajdú-Bihar County\", \"Heves County\", \"HódmezÅ‘vásárhely\", \"Jász-Nagykun-Szolnok County\", \"Kaposvár\", \"Kecskemét\", \"Komárom-Esztergom\", \"Miskolc\", \"Nagykanizsa\", \"Nógrád County\", \"NyÃregyháza\", \"Pécs\", \"Pest County\", \"Salgótarján\", \"Somogy County\", \"Sopron\", \"Szabolcs-Szatmár-Bereg County\", \"Szeged\", \"Székesfehérvár\", \"Szekszárd\", \"Szolnok\", \"Szombathely\", \"Tatabánya\", \"Tolna County\", \"Vas County\", \"Veszprém\", \"Veszprém County\", \"Zala County\", \"Zalaegerszeg\"]\r\n }, {\r\n name: \"Iceland\",\r\n states: [\"Capital Region\", \"Eastern Region\", \"Northeastern Region\", \"Northwestern Region\", \"Southern Peninsula Region\", \"Southern Region\", \"Western Region\", \"Westfjords\"]\r\n }, {\r\n name: \"India\",\r\n states: [\"Andaman and Nicobar Islands\", \"Andhra Pradesh\", \"Arunachal Pradesh\", \"Assam\", \"Bihar\", \"Chandigarh\", \"Chhattisgarh\", \"Dadra and Nagar Haveli and Daman and Diu\", \"Delhi\", \"Goa\", \"Gujarat\", \"Haryana\", \"Himachal Pradesh\", \"Jammu and Kashmir\", \"Jharkhand\", \"Karnataka\", \"Kerala\", \"Ladakh\", \"Lakshadweep\", \"Madhya Pradesh\", \"Maharashtra\", \"Manipur\", \"Meghalaya\", \"Mizoram\", \"Nagaland\", \"Odisha\", \"Puducherry\", \"Punjab\", \"Rajasthan\", \"Sikkim\", \"Tamil Nadu\", \"Telangana\", \"Tripura\", \"Uttar Pradesh\", \"Uttarakhand\", \"West Bengal\"]\r\n }, {\r\n name: \"Indonesia\",\r\n states: [\"Aceh\", \"Bali\", \"Banten\", \"Bengkulu\", \"DI Yogyakarta\", \"DKI Jakarta\", \"Gorontalo\", \"Jambi\", \"Jawa Barat\", \"Jawa Tengah\", \"Jawa Timur\", \"Kalimantan Barat\", \"Kalimantan Selatan\", \"Kalimantan Tengah\", \"Kalimantan Timur\", \"Kalimantan Utara\", \"Kepulauan Bangka Belitung\", \"Kepulauan Riau\", \"Lampung\", \"Maluku\", \"Maluku Utara\", \"Nusa Tenggara Barat\", \"Nusa Tenggara Timur\", \"Papua\", \"Papua Barat\", \"Papua Barat Daya\", \"Papua Pegunungan\", \"Papua Selatan\", \"Papua Tengah\", \"Riau\", \"Sulawesi Barat\", \"Sulawesi Selatan\", \"Sulawesi Tengah\", \"Sulawesi Tenggara\", \"Sulawesi Utara\", \"Sumatera Barat\", \"Sumatera Selatan\", \"Sumatera Utara\"]\r\n }, {\r\n name: \"Iran\",\r\n states: [\"Alborz\", \"Ardabil\", \"Bushehr\", \"Chaharmahal and Bakhtiari\", \"East Azerbaijan\", \"Fars\", \"Gilan\", \"Golestan\", \"Hamadan\", \"Hormozgan\", \"Ilam\", \"Isfahan\", \"Kerman\", \"Kermanshah\", \"Khuzestan\", \"Kohgiluyeh and Boyer-Ahmad\", \"Kurdistan\", \"Lorestan\", \"Markazi\", \"Mazandaran\", \"North Khorasan\", \"Qazvin\", \"Qom\", \"Razavi Khorasan\", \"Semnan\", \"Sistan and Baluchestan\", \"South Khorasan\", \"Tehran\", \"West Azarbaijan\", \"Yazd\", \"Zanjan\"]\r\n }, {\r\n name: \"Iraq\",\r\n states: [\"Al Anbar\", \"Al Muthanna\", \"Al-QÄdisiyyah\", \"Babylon\", \"Baghdad\", \"Basra\", \"Dhi Qar\", \"Diyala\", \"Dohuk\", \"Erbil\", \"Karbala\", \"Kirkuk\", \"Maysan\", \"Najaf\", \"Nineveh\", \"Saladin\", \"Sulaymaniyah\", \"Wasit\"]\r\n }, {\r\n name: \"Ireland\",\r\n states: [\"Carlow\", \"Cavan\", \"Clare\", \"Connacht\", \"Cork\", \"Donegal\", \"Dublin\", \"Galway\", \"Kerry\", \"Kildare\", \"Kilkenny\", \"Laois\", \"Leinster\", \"Limerick\", \"Longford\", \"Louth\", \"Mayo\", \"Meath\", \"Monaghan\", \"Munster\", \"Offaly\", \"Roscommon\", \"Sligo\", \"Tipperary\", \"Ulster\", \"Waterford\", \"Westmeath\", \"Wexford\", \"Wicklow\"]\r\n }, {\r\n name: \"Israel\",\r\n states: [\"Central District\", \"Haifa District\", \"Jerusalem District\", \"Northern District\", \"Southern District\", \"Tel Aviv District\"]\r\n }, {\r\n name: \"Italy\",\r\n states: [\"Abruzzo\", \"Agrigento\", \"Alessandria\", \"Ancona\", \"Aosta Valley\", \"Apulia\", \"Ascoli Piceno\", \"Asti\", \"Avellino\", \"Barletta-Andria-Trani\", \"Basilicata\", \"Belluno\", \"Benevento\", \"Bergamo\", \"Biella\", \"Brescia\", \"Brindisi\", \"Calabria\", \"Caltanissetta\", \"Campania\", \"Campobasso\", \"Caserta\", \"Catanzaro\", \"Chieti\", \"Como\", \"Cosenza\", \"Cremona\", \"Crotone\", \"Cuneo\", \"Emilia-Romagna\", \"Enna\", \"Fermo\", \"Ferrara\", \"Foggia\", \"Forlì-Cesena\", \"Friuli–Venezia Giulia\", \"Frosinone\", \"Gorizia\", \"Grosseto\", \"Imperia\", \"Isernia\", \"L'Aquila\", \"La Spezia\", \"Latina\", \"Lazio\", \"Lecce\", \"Lecco\", \"Liguria\", \"Livorno\", \"Lodi\", \"Lombardy\", \"Lucca\", \"Macerata\", \"Mantua\", \"Marche\", \"Massa and Carrara\", \"Matera\", \"Medio Campidano\", \"Modena\", \"Molise\", \"Monza and Brianza\", \"Novara\", \"Nuoro\", \"Oristano\", \"Padua\", \"Palermo\", \"Parma\", \"Pavia\", \"Perugia\", \"Pesaro and Urbino\", \"Pescara\", \"Piacenza\", \"Piedmont\", \"Pisa\", \"Pistoia\", \"Pordenone\", \"Potenza\", \"Prato\", \"Ragusa\", \"Ravenna\", \"Reggio Emilia\", \"Rieti\", \"Rimini\", \"Rovigo\", \"Salerno\", \"Sardinia\", \"Sassari\", \"Savona\", \"Sicily\", \"Siena\", \"Siracusa\", \"Sondrio\", \"South Sardinia\", \"Taranto\", \"Teramo\", \"Terni\", \"Trapani\", \"Trentino-South Tyrol\", \"Treviso\", \"Trieste\", \"Tuscany\", \"Udine\", \"Umbria\", \"Varese\", \"Veneto\", \"Verbano-Cusio-Ossola\", \"Vercelli\", \"Verona\", \"Vibo Valentia\", \"Vicenza\", \"Viterbo\"]\r\n }, {\r\n name: \"Jamaica\",\r\n states: [\"Clarendon Parish\", \"Hanover Parish\", \"Kingston Parish\", \"Manchester Parish\", \"Portland Parish\", \"Saint Andrew\", \"Saint Ann Parish\", \"Saint Catherine Parish\", \"Saint Elizabeth Parish\", \"Saint James Parish\", \"Saint Mary Parish\", \"Saint Thomas Parish\", \"Trelawny Parish\", \"Westmoreland Parish\"]\r\n }, {\r\n name: \"Japan\",\r\n states: [\"Aichi Prefecture\", \"Akita Prefecture\", \"Aomori Prefecture\", \"Chiba Prefecture\", \"Ehime Prefecture\", \"Fukui Prefecture\", \"Fukuoka Prefecture\", \"Fukushima Prefecture\", \"Gifu Prefecture\", \"Gunma Prefecture\", \"Hiroshima Prefecture\", \"HokkaidÅ Prefecture\", \"HyÅgo Prefecture\", \"Ibaraki Prefecture\", \"Ishikawa Prefecture\", \"Iwate Prefecture\", \"Kagawa Prefecture\", \"Kagoshima Prefecture\", \"Kanagawa Prefecture\", \"KÅchi Prefecture\", \"Kumamoto Prefecture\", \"KyÅto Prefecture\", \"Mie Prefecture\", \"Miyagi Prefecture\", \"Miyazaki Prefecture\", \"Nagano Prefecture\", \"Nagasaki Prefecture\", \"Nara Prefecture\", \"Niigata Prefecture\", \"ÅŒita Prefecture\", \"Okayama Prefecture\", \"Okinawa Prefecture\", \"ÅŒsaka Prefecture\", \"Saga Prefecture\", \"Saitama Prefecture\", \"Shiga Prefecture\", \"Shimane Prefecture\", \"Shizuoka Prefecture\", \"Tochigi Prefecture\", \"Tokushima Prefecture\", \"Tokyo\", \"Tottori Prefecture\", \"Toyama Prefecture\", \"Wakayama Prefecture\", \"Yamagata Prefecture\", \"Yamaguchi Prefecture\", \"Yamanashi Prefecture\"]\r\n }, {\r\n name: \"Jersey\",\r\n states: [\"Grouville\", \"St Brelade\", \"St Clement\", \"St Helier\", \"St John\", \"St Lawrence\", \"St Martin\", \"St Mary\", \"St Ouen\", \"St Peter\", \"St Saviour\", \"Trinity\"]\r\n }, {\r\n name: \"Jordan\",\r\n states: [\"Ajloun\", \"Amman\", \"Aqaba\", \"Balqa\", \"Irbid\", \"Jerash\", \"Karak\", \"Ma'an\", \"Madaba\", \"Mafraq\", \"Tafilah\", \"Zarqa\"]\r\n }, {\r\n name: \"Kazakhstan\",\r\n states: [\"Akmola Region\", \"Aktobe Region\", \"Almaty\", \"Almaty Region\", \"Atyrau Region\", \"Baikonur\", \"East Kazakhstan Region\", \"Jambyl Region\", \"Karaganda Region\", \"Kostanay Region\", \"Kyzylorda Region\", \"Mangystau Region\", \"North Kazakhstan Region\", \"Nur-Sultan\", \"Pavlodar Region\", \"Turkestan Region\", \"West Kazakhstan Province\"]\r\n }, {\r\n name: \"Kenya\",\r\n states: [\"Baringo\", \"Bomet\", \"Bungoma\", \"Busia\", \"Elgeyo-Marakwet\", \"Embu\", \"Garissa\", \"Homa Bay\", \"Isiolo\", \"Kajiado\", \"Kakamega\", \"Kericho\", \"Kiambu\", \"Kilifi\", \"Kirinyaga\", \"Kisii\", \"Kisumu\", \"Kitui\", \"Kwale\", \"Laikipia\", \"Lamu\", \"Machakos\", \"Makueni\", \"Mandera\", \"Marsabit\", \"Meru\", \"Migori\", \"Mombasa\", \"Murang'a\", \"Nairobi City\", \"Nakuru\", \"Nandi\", \"Narok\", \"Nyamira\", \"Nyandarua\", \"Nyeri\", \"Samburu\", \"Siaya\", \"Taita–Taveta\", \"Tana River\", \"Tharaka-Nithi\", \"Trans Nzoia\", \"Turkana\", \"Uasin Gishu\", \"Vihiga\", \"Wajir\", \"West Pokot\"]\r\n }, {name: \"Kiribati\", states: [\"Gilbert Islands\", \"Line Islands\", \"Phoenix Islands\"]}, {\r\n name: \"Kosovo\",\r\n states: [\"Äakovica District (Gjakove)\", \"Gjilan District\", \"Kosovska Mitrovica District\", \"Peć District\", \"Pristina (PriÅŸtine)\", \"Prizren District\", \"UroÅ¡evac District (Ferizaj)\"]\r\n }, {\r\n name: \"Kuwait\",\r\n states: [\"Al Ahmadi\", \"Al Farwaniyah\", \"Al Jahra\", \"Capital\", \"Hawalli\", \"Mubarak Al-Kabeer\"]\r\n }, {\r\n name: \"Kyrgyzstan\",\r\n states: [\"Batken Region\", \"Bishkek\", \"Chuy Region\", \"Issyk-Kul Region\", \"Jalal-Abad Region\", \"Naryn Region\", \"Osh\", \"Osh Region\", \"Talas Region\"]\r\n }, {\r\n name: \"Laos\",\r\n states: [\"Attapeu Province\", \"Bokeo Province\", \"Bolikhamsai Province\", \"Champasak Province\", \"Houaphanh Province\", \"Khammouane Province\", \"Luang Namtha Province\", \"Luang Prabang Province\", \"Oudomxay Province\", \"Phongsaly Province\", \"Sainyabuli Province\", \"Salavan Province\", \"Savannakhet Province\", \"Sekong Province\", \"Vientiane Prefecture\", \"Vientiane Province\", \"Xaisomboun\", \"Xaisomboun Province\", \"Xiangkhouang Province\"]\r\n }, {\r\n name: \"Latvia\",\r\n states: [\"Aglona Municipality\", \"Aizkraukle Municipality\", \"Aizpute Municipality\", \"AknÄ«ste Municipality\", \"Aloja Municipality\", \"Alsunga Municipality\", \"AlÅ«ksne Municipality\", \"Amata Municipality\", \"Ape Municipality\", \"Auce Municipality\", \"BabÄ«te Municipality\", \"Baldone Municipality\", \"Baltinava Municipality\", \"Balvi Municipality\", \"Bauska Municipality\", \"BeverÄ«na Municipality\", \"BrocÄ“ni Municipality\", \"Burtnieki Municipality\", \"Carnikava Municipality\", \"CÄ“sis Municipality\", \"Cesvaine Municipality\", \"Cibla Municipality\", \"Dagda Municipality\", \"Daugavpils\", \"Daugavpils Municipality\", \"Dobele Municipality\", \"Dundaga Municipality\", \"Durbe Municipality\", \"Engure Municipality\", \"Ä’rgļi Municipality\", \"Garkalne Municipality\", \"Grobiņa Municipality\", \"Gulbene Municipality\", \"Iecava Municipality\", \"IkÅ¡Ä·ile Municipality\", \"IlÅ«kste Municipality\", \"InÄukalns Municipality\", \"Jaunjelgava Municipality\", \"Jaunpiebalga Municipality\", \"Jaunpils Municipality\", \"JÄ“kabpils\", \"JÄ“kabpils Municipality\", \"Jelgava\", \"Jelgava Municipality\", \"JÅ«rmala\", \"Kandava Municipality\", \"KÄrsava Municipality\", \"Ķegums Municipality\", \"Ķekava Municipality\", \"KocÄ“ni Municipality\", \"Koknese Municipality\", \"KrÄslava Municipality\", \"Krimulda Municipality\", \"Krustpils Municipality\", \"KuldÄ«ga Municipality\", \"LielvÄrde Municipality\", \"LiepÄja\", \"LÄ«gatne Municipality\", \"Limbaži Municipality\", \"LÄ«vÄni Municipality\", \"LubÄna Municipality\", \"Ludza Municipality\", \"Madona Municipality\", \"MÄlpils Municipality\", \"MÄrupe Municipality\", \"Mazsalaca Municipality\", \"MÄ“rsrags Municipality\", \"NaukÅ¡Ä“ni Municipality\", \"Nereta Municipality\", \"NÄ«ca Municipality\", \"Ogre Municipality\", \"Olaine Municipality\", \"Ozolnieki Municipality\", \"PÄrgauja Municipality\", \"PÄvilosta Municipality\", \"Pļaviņas Municipality\", \"Preiļi Municipality\", \"Priekule Municipality\", \"Priekuļi Municipality\", \"Rauna Municipality\", \"RÄ“zekne\", \"RÄ“zekne Municipality\", \"Riebiņi Municipality\", \"Riga\", \"Roja Municipality\", \"Ropaži Municipality\", \"Rucava Municipality\", \"RugÄji Municipality\", \"RÅ«jiena Municipality\", \"RundÄle Municipality\", \"Sala Municipality\", \"SalacgrÄ«va Municipality\", \"Salaspils Municipality\", \"Saldus Municipality\", \"Saulkrasti Municipality\", \"SÄ“ja Municipality\", \"Sigulda Municipality\", \"SkrÄ«veri Municipality\", \"Skrunda Municipality\", \"Smiltene Municipality\", \"Stopiņi Municipality\", \"StrenÄi Municipality\", \"Talsi Municipality\", \"TÄ“rvete Municipality\", \"Tukums Municipality\", \"Vaiņode Municipality\", \"Valka Municipality\", \"Valmiera\", \"VarakļÄni Municipality\", \"VÄrkava Municipality\", \"Vecpiebalga Municipality\", \"Vecumnieki Municipality\", \"Ventspils\", \"Ventspils Municipality\", \"ViesÄ«te Municipality\", \"Viļaka Municipality\", \"ViļÄni Municipality\", \"Zilupe Municipality\"]\r\n }, {\r\n name: \"Lebanon\",\r\n states: [\"Akkar\", \"Baalbek-Hermel\", \"Beirut\", \"Beqaa\", \"Mount Lebanon\", \"Nabatieh\", \"North\", \"South\"]\r\n }, {\r\n name: \"Lesotho\",\r\n states: [\"Berea District\", \"Butha-Buthe District\", \"Leribe District\", \"Mafeteng District\", \"Maseru District\", \"Mohale's Hoek District\", \"Mokhotlong District\", \"Qacha's Nek District\", \"Quthing District\", \"Thaba-Tseka District\"]\r\n }, {\r\n name: \"Liberia\",\r\n states: [\"Bomi County\", \"Bong County\", \"Gbarpolu County\", \"Grand Bassa County\", \"Grand Cape Mount County\", \"Grand Gedeh County\", \"Grand Kru County\", \"Lofa County\", \"Margibi County\", \"Maryland County\", \"Montserrado County\", \"Nimba\", \"River Cess County\", \"River Gee County\", \"Sinoe County\"]\r\n }, {\r\n name: \"Libya\",\r\n states: [\"Al Wahat District\", \"Benghazi\", \"Derna District\", \"Ghat District\", \"Jabal al Akhdar\", \"Jabal al Gharbi District\", \"Jafara\", \"Jufra\", \"Kufra District\", \"Marj District\", \"Misrata District\", \"Murqub\", \"Murzuq District\", \"Nalut District\", \"Nuqat al Khams\", \"Sabha District\", \"Sirte District\", \"Tripoli District\", \"Wadi al Hayaa District\", \"Wadi al Shatii District\", \"Zawiya District\"]\r\n }, {\r\n name: \"Liechtenstein\",\r\n states: [\"Balzers\", \"Eschen\", \"Gamprin\", \"Mauren\", \"Planken\", \"Ruggell\", \"Schaan\", \"Schellenberg\", \"Triesen\", \"Triesenberg\", \"Vaduz\"]\r\n }, {\r\n name: \"Lithuania\",\r\n states: [\"AkmenÄ— District Municipality\", \"Alytus City Municipality\", \"Alytus County\", \"Alytus District Municipality\", \"BirÅ¡tonas Municipality\", \"Biržai District Municipality\", \"Druskininkai municipality\", \"ElektrÄ—nai municipality\", \"Ignalina District Municipality\", \"Jonava District Municipality\", \"JoniÅ¡kis District Municipality\", \"Jurbarkas District Municipality\", \"KaiÅ¡iadorys District Municipality\", \"Kalvarija municipality\", \"Kaunas City Municipality\", \"Kaunas County\", \"Kaunas District Municipality\", \"Kazlų RÅ«da municipality\", \"KÄ—dainiai District Municipality\", \"KelmÄ— District Municipality\", \"Klaipeda City Municipality\", \"KlaipÄ—da County\", \"KlaipÄ—da District Municipality\", \"Kretinga District Municipality\", \"KupiÅ¡kis District Municipality\", \"Lazdijai District Municipality\", \"MarijampolÄ— County\", \"MarijampolÄ— Municipality\", \"Mažeikiai District Municipality\", \"MolÄ—tai District Municipality\", \"Neringa Municipality\", \"PagÄ—giai municipality\", \"Pakruojis District Municipality\", \"Palanga City Municipality\", \"Panevėžys City Municipality\", \"Panevėžys County\", \"Panevėžys District Municipality\", \"Pasvalys District Municipality\", \"PlungÄ— District Municipality\", \"Prienai District Municipality\", \"RadviliÅ¡kis District Municipality\", \"Raseiniai District Municipality\", \"Rietavas municipality\", \"RokiÅ¡kis District Municipality\", \"Å akiai District Municipality\", \"Å alÄininkai District Municipality\", \"Å iauliai City Municipality\", \"Å iauliai County\", \"Å iauliai District Municipality\", \"Å ilalÄ— District Municipality\", \"Å ilutÄ— District Municipality\", \"Å irvintos District Municipality\", \"Skuodas District Municipality\", \"Å venÄionys District Municipality\", \"TauragÄ— County\", \"TauragÄ— District Municipality\", \"TelÅ¡iai County\", \"TelÅ¡iai District Municipality\", \"Trakai District Municipality\", \"UkmergÄ— District Municipality\", \"Utena County\", \"Utena District Municipality\", \"VarÄ—na District Municipality\", \"VilkaviÅ¡kis District Municipality\", \"Vilnius City Municipality\", \"Vilnius County\", \"Vilnius District Municipality\", \"Visaginas Municipality\", \"Zarasai District Municipality\"]\r\n }, {\r\n name: \"Luxembourg\",\r\n states: [\"Canton of Capellen\", \"Canton of Clervaux\", \"Canton of Diekirch\", \"Canton of Echternach\", \"Canton of Esch-sur-Alzette\", \"Canton of Grevenmacher\", \"Canton of Luxembourg\", \"Canton of Mersch\", \"Canton of Redange\", \"Canton of Remich\", \"Canton of Vianden\", \"Canton of Wiltz\", \"Diekirch District\", \"Grevenmacher District\", \"Luxembourg District\"]\r\n }, {name: \"Macau S.A.R.\", states: []}, {\r\n name: \"Madagascar\",\r\n states: [\"Antananarivo Province\", \"Antsiranana Province\", \"Fianarantsoa Province\", \"Mahajanga Province\", \"Toamasina Province\", \"Toliara Province\"]\r\n }, {\r\n name: \"Malawi\",\r\n states: [\"Balaka District\", \"Blantyre District\", \"Central Region\", \"Chikwawa District\", \"Chiradzulu District\", \"Chitipa district\", \"Dedza District\", \"Dowa District\", \"Karonga District\", \"Kasungu District\", \"Likoma District\", \"Lilongwe District\", \"Machinga District\", \"Mangochi District\", \"Mchinji District\", \"Mulanje District\", \"Mwanza District\", \"Mzimba District\", \"Nkhata Bay District\", \"Nkhotakota District\", \"Northern Region\", \"Nsanje District\", \"Ntcheu District\", \"Ntchisi District\", \"Phalombe District\", \"Rumphi District\", \"Salima District\", \"Southern Region\", \"Thyolo District\", \"Zomba District\"]\r\n }, {\r\n name: \"Malaysia\",\r\n states: [\"Johor\", \"Kedah\", \"Kelantan\", \"Kuala Lumpur\", \"Labuan\", \"Malacca\", \"Negeri Sembilan\", \"Pahang\", \"Penang\", \"Perak\", \"Perlis\", \"Putrajaya\", \"Sabah\", \"Sarawak\", \"Selangor\", \"Terengganu\"]\r\n }, {\r\n name: \"Maldives\",\r\n states: [\"Addu Atoll\", \"Alif Alif Atoll\", \"Alif Dhaal Atoll\", \"Central Province\", \"Dhaalu Atoll\", \"Faafu Atoll\", \"Gaafu Alif Atoll\", \"Gaafu Dhaalu Atoll\", \"Gnaviyani Atoll\", \"Haa Alif Atoll\", \"Haa Dhaalu Atoll\", \"Kaafu Atoll\", \"Laamu Atoll\", \"Lhaviyani Atoll\", \"Malé\", \"Meemu Atoll\", \"Noonu Atoll\", \"North Central Province\", \"North Province\", \"Raa Atoll\", \"Shaviyani Atoll\", \"South Central Province\", \"South Province\", \"Thaa Atoll\", \"Upper South Province\", \"Vaavu Atoll\"]\r\n }, {\r\n name: \"Mali\",\r\n states: [\"Bamako\", \"Gao Region\", \"Kayes Region\", \"Kidal Region\", \"Koulikoro Region\", \"Ménaka Region\", \"Mopti Region\", \"Ségou Region\", \"Sikasso Region\", \"Taoudénit Region\", \"Tombouctou Region\"]\r\n }, {\r\n name: \"Malta\",\r\n states: [\"Attard\", \"Balzan\", \"Birgu\", \"Birkirkara\", \"BirżebbuÄ¡a\", \"Cospicua\", \"Dingli\", \"Fgura\", \"Floriana\", \"Fontana\", \"Għajnsielem\", \"Għarb\", \"Għargħur\", \"Għasri\", \"Għaxaq\", \"Gudja\", \"Gżira\", \"Ħamrun\", \"Iklin\", \"Kalkara\", \"KerÄ‹em\", \"Kirkop\", \"Lija\", \"Luqa\", \"Marsa\", \"Marsaskala\", \"Marsaxlokk\", \"Mdina\", \"Mellieħa\", \"MÄ¡arr\", \"Mosta\", \"Mqabba\", \"Msida\", \"Mtarfa\", \"Munxar\", \"Nadur\", \"Naxxar\", \"Paola\", \"Pembroke\", \"Pietà \", \"Qala\", \"Qormi\", \"Qrendi\", \"Rabat\", \"San Ä wann\", \"San Lawrenz\", \"Sannat\", \"Santa LuÄ‹ija\", \"Santa Venera\", \"Senglea\", \"SiÄ¡Ä¡iewi\", \"Sliema\", \"St. Julian's\", \"St. Paul's Bay\", \"Swieqi\", \"Ta' Xbiex\", \"Tarxien\", \"Valletta\", \"Victoria\", \"Xagħra\", \"Xewkija\", \"Xgħajra\", \"Å»abbar\", \"Å»ebbuÄ¡ Gozo\", \"Å»ebbuÄ¡ Malta\", \"Å»ejtun\", \"Å»urrieq\"]\r\n }, {\r\n name: \"Man (Isle of)\",\r\n states: [\"Ayre\", \"Garff\", \"Glenfaba\", \"Michael\", \"Middle\", \"Rushen\"]\r\n }, {name: \"Marshall Islands\", states: [\"Ralik Chain\", \"Ratak Chain\"]}, {\r\n name: \"Martinique\",\r\n states: []\r\n }, {\r\n name: \"Mauritania\",\r\n states: [\"Adrar\", \"Assaba\", \"Brakna\", \"Dakhlet Nouadhibou\", \"Gorgol\", \"Guidimaka\", \"Hodh Ech Chargui\", \"Hodh El Gharbi\", \"Inchiri\", \"Nouakchott-Nord\", \"Nouakchott-Ouest\", \"Nouakchott-Sud\", \"Tagant\", \"Tiris Zemmour\", \"Trarza\"]\r\n }, {\r\n name: \"Mauritius\",\r\n states: [\"Agalega Islands\", \"Black River\", \"Flacq\", \"Grand Port\", \"Moka\", \"Pamplemousses\", \"Plaines Wilhems\", \"Port Louis\", \"Rivière du Rempart\", \"Rodrigues Island\", \"Saint Brandon Islands\", \"Savanne\"]\r\n }, {name: \"Mayotte\", states: []}, {\r\n name: \"Mexico\",\r\n states: [\"Aguascalientes\", \"Baja California\", \"Baja California Sur\", \"Campeche\", \"Chiapas\", \"Chihuahua\", \"Ciudad de México\", \"Coahuila de Zaragoza\", \"Colima\", \"Durango\", \"Estado de México\", \"Guanajuato\", \"Guerrero\", \"Hidalgo\", \"Jalisco\", \"Michoacán de Ocampo\", \"Morelos\", \"Nayarit\", \"Nuevo León\", \"Oaxaca\", \"Puebla\", \"Querétaro\", \"Quintana Roo\", \"San Luis PotosÃ\", \"Sinaloa\", \"Sonora\", \"Tabasco\", \"Tamaulipas\", \"Tlaxcala\", \"Veracruz de Ignacio de la Llave\", \"Yucatán\", \"Zacatecas\"]\r\n }, {name: \"Micronesia\", states: [\"Chuuk State\", \"Kosrae State\", \"Pohnpei State\", \"Yap State\"]}, {\r\n name: \"Moldova\",\r\n states: [\"Anenii Noi District\", \"BălÈ›i Municipality\", \"Basarabeasca District\", \"Bender Municipality\", \"Briceni District\", \"Cahul District\", \"CălăraÈ™i District\", \"Cantemir District\", \"CăuÈ™eni District\", \"ChiÈ™inău Municipality\", \"CimiÈ™lia District\", \"Criuleni District\", \"DonduÈ™eni District\", \"Drochia District\", \"Dubăsari District\", \"EdineÈ› District\", \"FăleÈ™ti District\", \"FloreÈ™ti District\", \"Gagauzia\", \"Glodeni District\", \"HînceÈ™ti District\", \"Ialoveni District\", \"Nisporeni District\", \"OcniÈ›a District\", \"Orhei District\", \"Rezina District\", \"Rîșcani District\", \"Sîngerei District\", \"ȘoldăneÈ™ti District\", \"Soroca District\", \"Ștefan Vodă District\", \"Strășeni District\", \"Taraclia District\", \"TeleneÈ™ti District\", \"Transnistria autonomous territorial unit\", \"Ungheni District\"]\r\n }, {name: \"Monaco\", states: [\"La Colle\", \"La Condamine\", \"Moneghetti\"]}, {\r\n name: \"Mongolia\",\r\n states: [\"Arkhangai Province\", \"Bayan-Ölgii Province\", \"Bayankhongor Province\", \"Bulgan Province\", \"Darkhan-Uul Province\", \"Dornod Province\", \"Dornogovi Province\", \"Dundgovi Province\", \"Govi-Altai Province\", \"Govisümber Province\", \"Khentii Province\", \"Khovd Province\", \"Khövsgöl Province\", \"Ömnögovi Province\", \"Orkhon Province\", \"Övörkhangai Province\", \"Selenge Province\", \"Sükhbaatar Province\", \"Töv Province\", \"Uvs Province\", \"Zavkhan Province\"]\r\n }, {\r\n name: \"Montenegro\",\r\n states: [\"Andrijevica Municipality\", \"Bar Municipality\", \"Berane Municipality\", \"Bijelo Polje Municipality\", \"Budva Municipality\", \"Danilovgrad Municipality\", \"Gusinje Municipality\", \"KolaÅ¡in Municipality\", \"Kotor Municipality\", \"Mojkovac Municipality\", \"NikÅ¡ić Municipality\", \"Old Royal Capital Cetinje\", \"Petnjica Municipality\", \"Plav Municipality\", \"Pljevlja Municipality\", \"Plužine Municipality\", \"Podgorica Municipality\", \"Rožaje Municipality\", \"Å avnik Municipality\", \"Tivat Municipality\", \"Ulcinj Municipality\", \"Žabljak Municipality\"]\r\n }, {name: \"Montserrat\", states: []}, {\r\n name: \"Morocco\",\r\n states: [\"Agadir-Ida-Ou-Tanane\", \"Al Haouz\", \"Al Hoceïma\", \"Aousserd (EH)\", \"Assa-Zag (EH-partial)\", \"Azilal\", \"Béni Mellal\", \"Béni Mellal-Khénifra\", \"Benslimane\", \"Berkane\", \"Berrechid\", \"Boujdour (EH)\", \"Boulemane\", \"Casablanca\", \"Casablanca-Settat\", \"Chefchaouen\", \"Chichaoua\", \"Chtouka-Ait Baha\", \"Dakhla-Oued Ed-Dahab (EH)\", \"Drâa-Tafilalet\", \"Driouch\", \"El Hajeb\", \"El Jadida\", \"El Kelâa des Sraghna\", \"Errachidia\", \"Es-Semara (EH-partial)\", \"Essaouira\", \"Fahs-Anjra\", \"Fès\", \"Fès-Meknès\", \"Figuig\", \"Fquih Ben Salah\", \"Guelmim\", \"Guelmim-Oued Noun (EH-partial)\", \"Guercif\", \"Ifrane\", \"Inezgane-Ait Melloul\", \"Jerada\", \"Kénitra\", \"Khémisset\", \"Khénifra\", \"Khouribga\", \"L'Oriental\", \"Laâyoune (EH)\", \"Laâyoune-Sakia El Hamra (EH-partial)\", \"Larache\", \"M’diq-Fnideq\", \"Marrakech\", \"Marrakesh-Safi\", \"Médiouna\", \"Meknès\", \"Midelt\", \"Mohammadia\", \"Moulay Yacoub\", \"Nador\", \"Nouaceur\", \"Ouarzazate\", \"Oued Ed-Dahab (EH)\", \"Ouezzane\", \"Oujda-Angad\", \"Rabat\", \"Rabat-Salé-Kénitra\", \"Rehamna\", \"Safi\", \"Salé\", \"Sefrou\", \"Settat\", \"Sidi Bennour\", \"Sidi Ifni\", \"Sidi Kacem\", \"Sidi Slimane\", \"Skhirate-Témara\", \"Souss-Massa\", \"Tan-Tan (EH-partial)\", \"Tanger-Assilah\", \"Tanger-Tétouan-Al Hoceïma\", \"Taounate\", \"Taourirt\", \"Tarfaya (EH-partial)\", \"Taroudannt\", \"Tata\", \"Taza\", \"Tétouan\", \"Tinghir\", \"Tiznit\", \"Youssoufia\", \"Zagora\"]\r\n }, {\r\n name: \"Mozambique\",\r\n states: [\"Cabo Delgado Province\", \"Gaza Province\", \"Inhambane Province\", \"Manica Province\", \"Maputo\", \"Maputo Province\", \"Nampula Province\", \"Niassa Province\", \"Sofala Province\", \"Tete Province\", \"Zambezia Province\"]\r\n }, {\r\n name: \"Myanmar\",\r\n states: [\"Ayeyarwady Region\", \"Bago\", \"Chin State\", \"Kachin State\", \"Kayah State\", \"Kayin State\", \"Magway Region\", \"Mandalay Region\", \"Mon State\", \"Naypyidaw Union Territory\", \"Rakhine State\", \"Sagaing Region\", \"Shan State\", \"Tanintharyi Region\", \"Yangon Region\"]\r\n }, {\r\n name: \"Namibia\",\r\n states: [\"Erongo Region\", \"Hardap Region\", \"Karas Region\", \"Kavango East Region\", \"Kavango West Region\", \"Khomas Region\", \"Kunene Region\", \"Ohangwena Region\", \"Omaheke Region\", \"Omusati Region\", \"Oshana Region\", \"Oshikoto Region\", \"Otjozondjupa Region\", \"Zambezi Region\"]\r\n }, {\r\n name: \"Nauru\",\r\n states: [\"Aiwo District\", \"Anabar District\", \"Anetan District\", \"Anibare District\", \"Baiti District\", \"Boe District\", \"Buada District\", \"Denigomodu District\", \"Ewa District\", \"Ijuw District\", \"Meneng District\", \"Nibok District\", \"Uaboe District\", \"Yaren District\"]\r\n }, {\r\n name: \"Nepal\",\r\n states: [\"Bagmati\", \"Gandaki\", \"Karnali\", \"Koshi\", \"Lumbini\", \"Madhesh\", \"Sudurpashchim\"]\r\n }, {\r\n name: \"Netherlands\",\r\n states: [\"Bonaire\", \"Drenthe\", \"Flevoland\", \"Friesland\", \"Gelderland\", \"Groningen\", \"Limburg\", \"North Brabant\", \"North Holland\", \"Overijssel\", \"Saba\", \"Sint Eustatius\", \"South Holland\", \"Utrecht\", \"Zeeland\"]\r\n }, {\r\n name: \"New Caledonia\",\r\n states: [\"Loyalty Islands Province\", \"North Province\", \"South Province\"]\r\n }, {\r\n name: \"New Zealand\",\r\n states: [\"Auckland Region\", \"Bay of Plenty Region\", \"Canterbury Region\", \"Chatham Islands\", \"Gisborne District\", \"Hawke's Bay Region\", \"Manawatu-Wanganui Region\", \"Marlborough Region\", \"Nelson Region\", \"Northland Region\", \"Otago Region\", \"Southland Region\", \"Taranaki Region\", \"Tasman District\", \"Waikato Region\", \"Wellington Region\", \"West Coast Region\"]\r\n }, {\r\n name: \"Nicaragua\",\r\n states: [\"Boaco\", \"Carazo\", \"Chinandega\", \"Chontales\", \"EstelÃ\", \"Granada\", \"Jinotega\", \"León\", \"Madriz\", \"Managua\", \"Masaya\", \"Matagalpa\", \"North Caribbean Coast\", \"Nueva Segovia\", \"RÃo San Juan\", \"Rivas\", \"South Caribbean Coast\"]\r\n }, {\r\n name: \"Niger\",\r\n states: [\"Agadez Region\", \"Diffa Region\", \"Dosso Region\", \"Maradi Region\", \"Tahoua Region\", \"Tillabéri Region\", \"Zinder Region\"]\r\n }, {\r\n name: \"Nigeria\",\r\n states: [\"Abia\", \"Abuja Federal Capital Territory\", \"Adamawa\", \"Akwa Ibom\", \"Anambra\", \"Bauchi\", \"Bayelsa\", \"Benue\", \"Borno\", \"Cross River\", \"Delta\", \"Ebonyi\", \"Edo\", \"Ekiti\", \"Enugu\", \"Gombe\", \"Imo\", \"Jigawa\", \"Kaduna\", \"Kano\", \"Katsina\", \"Kebbi\", \"Kogi\", \"Kwara\", \"Lagos\", \"Nasarawa\", \"Niger\", \"Ogun\", \"Ondo\", \"Osun\", \"Oyo\", \"Plateau\", \"Rivers\", \"Sokoto\", \"Taraba\", \"Yobe\", \"Zamfara\"]\r\n }, {name: \"Niue\", states: []}, {name: \"Norfolk Island\", states: []}, {\r\n name: \"North Korea\",\r\n states: [\"Chagang Province\", \"Kangwon Province\", \"North Hamgyong Province\", \"North Hwanghae Province\", \"North Pyongan Province\", \"Pyongyang\", \"Rason\", \"Ryanggang Province\", \"South Hamgyong Province\", \"South Hwanghae Province\", \"South Pyongan Province\"]\r\n }, {\r\n name: \"North Macedonia\",\r\n states: [\"Aerodrom Municipality\", \"AraÄinovo Municipality\", \"Berovo Municipality\", \"Bitola Municipality\", \"Bogdanci Municipality\", \"Bogovinje Municipality\", \"Bosilovo Municipality\", \"Brvenica Municipality\", \"Butel Municipality\", \"ÄŒair Municipality\", \"ÄŒaÅ¡ka Municipality\", \"Centar Municipality\", \"Centar Župa Municipality\", \"ÄŒeÅ¡inovo-ObleÅ¡evo Municipality\", \"ÄŒuÄer-Sandevo Municipality\", \"Debarca Municipality\", \"DelÄevo Municipality\", \"Demir Hisar Municipality\", \"Demir Kapija Municipality\", \"Dojran Municipality\", \"Dolneni Municipality\", \"Drugovo Municipality\", \"Gazi Baba Municipality\", \"Gevgelija Municipality\", \"GjorÄe Petrov Municipality\", \"Gostivar Municipality\", \"Gradsko Municipality\", \"Greater Skopje\", \"Ilinden Municipality\", \"Jegunovce Municipality\", \"Karbinci\", \"KarpoÅ¡ Municipality\", \"Kavadarci Municipality\", \"KiÄevo Municipality\", \"Kisela Voda Municipality\", \"KoÄani Municipality\", \"KonÄe Municipality\", \"Kratovo Municipality\", \"Kriva Palanka Municipality\", \"KrivogaÅ¡tani Municipality\", \"KruÅ¡evo Municipality\", \"Kumanovo Municipality\", \"Lipkovo Municipality\", \"Lozovo Municipality\", \"Makedonska Kamenica Municipality\", \"Makedonski Brod Municipality\", \"Mavrovo and RostuÅ¡a Municipality\", \"Mogila Municipality\", \"Negotino Municipality\", \"Novaci Municipality\", \"Novo Selo Municipality\", \"Ohrid Municipality\", \"Oslomej Municipality\", \"PehÄevo Municipality\", \"Petrovec Municipality\", \"Plasnica Municipality\", \"Prilep Municipality\", \"ProbiÅ¡tip Municipality\", \"RadoviÅ¡ Municipality\", \"Rankovce Municipality\", \"Resen Municipality\", \"Rosoman Municipality\", \"Saraj Municipality\", \"SopiÅ¡te Municipality\", \"Staro NagoriÄane Municipality\", \"Å tip Municipality\", \"Struga Municipality\", \"Strumica Municipality\", \"StudeniÄani Municipality\", \"Å uto Orizari Municipality\", \"Sveti Nikole Municipality\", \"Tearce Municipality\", \"Tetovo Municipality\", \"Valandovo Municipality\", \"Vasilevo Municipality\", \"Veles Municipality\", \"VevÄani Municipality\", \"Vinica Municipality\", \"VraneÅ¡tica Municipality\", \"VrapÄiÅ¡te Municipality\", \"Zajas Municipality\", \"Zelenikovo Municipality\", \"Želino Municipality\", \"Zrnovci Municipality\"]\r\n }, {name: \"Northern Mariana Islands\", states: []}, {\r\n name: \"Norway\",\r\n states: [\"Agder\", \"Innlandet\", \"Jan Mayen\", \"Møre og Romsdal\", \"Nordland\", \"Oslo\", \"Rogaland\", \"Svalbard\", \"Troms og Finnmark\", \"Trøndelag\", \"Vestfold og Telemark\", \"Vestland\", \"Viken\"]\r\n }, {\r\n name: \"Oman\",\r\n states: [\"Ad Dakhiliyah\", \"Ad Dhahirah\", \"Al Batinah North\", \"Al Batinah Region\", \"Al Batinah South\", \"Al Buraimi\", \"Al Wusta\", \"Ash Sharqiyah North\", \"Ash Sharqiyah Region\", \"Ash Sharqiyah South\", \"Dhofar\", \"Musandam\", \"Muscat\"]\r\n }, {\r\n name: \"Pakistan\",\r\n states: [\"Azad Kashmir\", \"Balochistan\", \"Federally Administered Tribal Areas\", \"Gilgit-Baltistan\", \"Islamabad Capital Territory\", \"Khyber Pakhtunkhwa\", \"Punjab\", \"Sindh\"]\r\n }, {\r\n name: \"Palau\",\r\n states: [\"Aimeliik\", \"Airai\", \"Angaur\", \"Hatohobei\", \"Kayangel\", \"Koror\", \"Melekeok\", \"Ngaraard\", \"Ngarchelong\", \"Ngardmau\", \"Ngatpang\", \"Ngchesar\", \"Ngeremlengui\", \"Ngiwal\", \"Peleliu\", \"Sonsorol\"]\r\n }, {\r\n name: \"Palestinian Territory Occupied\",\r\n states: [\"Bethlehem\", \"Deir El Balah\", \"Gaza\", \"Hebron\", \"Jenin\", \"Jericho \", \"Jerusalem (Quds)\", \"Khan Yunis\", \"Nablus\", \"North Gaza\", \"Qalqilya\", \"Rafah\", \"Ramallah\", \"Salfit\", \"Tubas\", \"Tulkarm\"]\r\n }, {\r\n name: \"Panama\",\r\n states: [\"Bocas del Toro Province\", \"Chiriquà Province\", \"Coclé Province\", \"Colón Province\", \"Darién Province\", \"Emberá-Wounaan Comarca\", \"Guna Yala\", \"Herrera Province\", \"Los Santos Province\", \"Ngöbe-Buglé Comarca\", \"Panamá Oeste Province\", \"Panamá Province\", \"Veraguas Province\"]\r\n }, {\r\n name: \"Papua New Guinea\",\r\n states: [\"Bougainville\", \"Central Province\", \"Chimbu Province\", \"East New Britain\", \"East Sepik\", \"Eastern Highlands Province\", \"Enga Province\", \"Gulf\", \"Hela\", \"Jiwaka Province\", \"Madang Province\", \"Manus Province\", \"Milne Bay Province\", \"Morobe Province\", \"New Ireland Province\", \"Oro Province\", \"Port Moresby\", \"Sandaun Province\", \"Southern Highlands Province\", \"West New Britain Province\", \"Western Highlands Province\", \"Western Province\"]\r\n }, {\r\n name: \"Paraguay\",\r\n states: [\"Alto Paraguay Department\", \"Alto Paraná Department\", \"Amambay Department\", \"Asuncion\", \"Boquerón Department\", \"Caaguazú\", \"Caazapá\", \"Canindeyú\", \"Central Department\", \"Concepción Department\", \"Cordillera Department\", \"Guairá Department\", \"Itapúa\", \"Misiones Department\", \"Ñeembucú Department\", \"Paraguarà Department\", \"Presidente Hayes Department\", \"San Pedro Department\"]\r\n }, {\r\n name: \"Peru\",\r\n states: [\"Amazonas\", \"Ãncash\", \"ApurÃmac\", \"Arequipa\", \"Ayacucho\", \"Cajamarca\", \"Callao\", \"Cusco\", \"Huancavelica\", \"Huanuco\", \"Ica\", \"JunÃn\", \"La Libertad\", \"Lambayeque\", \"Lima\", \"Loreto\", \"Madre de Dios\", \"Moquegua\", \"Pasco\", \"Piura\", \"Puno\", \"San MartÃn\", \"Tacna\", \"Tumbes\", \"Ucayali\"]\r\n }, {\r\n name: \"Philippines\",\r\n states: [\"Abra\", \"Agusan del Norte\", \"Agusan del Sur\", \"Aklan\", \"Albay\", \"Antique\", \"Apayao\", \"Aurora\", \"Autonomous Region in Muslim Mindanao\", \"Basilan\", \"Bataan\", \"Batanes\", \"Batangas\", \"Benguet\", \"Bicol\", \"Biliran\", \"Bohol\", \"Bukidnon\", \"Bulacan\", \"Cagayan\", \"Cagayan Valley\", \"Calabarzon\", \"Camarines Norte\", \"Camarines Sur\", \"Camiguin\", \"Capiz\", \"Caraga\", \"Catanduanes\", \"Cavite\", \"Cebu\", \"Central Luzon\", \"Central Visayas\", \"Compostela Valley\", \"Cordillera Administrative\", \"Cotabato\", \"Davao\", \"Davao del Norte\", \"Davao del Sur\", \"Davao Occidental\", \"Davao Oriental\", \"Dinagat Islands\", \"Eastern Samar\", \"Eastern Visayas\", \"Guimaras\", \"Ifugao\", \"Ilocos\", \"Ilocos Norte\", \"Ilocos Sur\", \"Iloilo\", \"Isabela\", \"Kalinga\", \"La Union\", \"Laguna\", \"Lanao del Norte\", \"Lanao del Sur\", \"Leyte\", \"Maguindanao\", \"Marinduque\", \"Masbate\", \"Metro Manila\", \"Mimaropa\", \"Misamis Occidental\", \"Misamis Oriental\", \"Mountain Province\", \"Negros Occidental\", \"Negros Oriental\", \"Northern Mindanao\", \"Northern Samar\", \"Nueva Ecija\", \"Nueva Vizcaya\", \"Occidental Mindoro\", \"Oriental Mindoro\", \"Palawan\", \"Pampanga\", \"Pangasinan\", \"Quezon\", \"Quirino\", \"Rizal\", \"Romblon\", \"Sarangani\", \"Siquijor\", \"Soccsksargen\", \"Sorsogon\", \"South Cotabato\", \"Southern Leyte\", \"Sultan Kudarat\", \"Sulu\", \"Surigao del Norte\", \"Surigao del Sur\", \"Tarlac\", \"Tawi-Tawi\", \"Western Samar\", \"Western Visayas\", \"Zambales\", \"Zamboanga del Norte\", \"Zamboanga del Sur\", \"Zamboanga Peninsula\", \"Zamboanga Sibugay\"]\r\n }, {name: \"Pitcairn Island\", states: []}, {\r\n name: \"Poland\",\r\n states: [\"Greater Poland\", \"Holy Cross\", \"Kuyavia-Pomerania\", \"Lesser Poland\", \"Lower Silesia\", \"Lublin\", \"Lubusz\", \"Åódź\", \"Mazovia\", \"Podlaskie\", \"Pomerania\", \"Silesia\", \"Subcarpathia\", \"Upper Silesia\", \"Warmia-Masuria\", \"West Pomerania\"]\r\n }, {\r\n name: \"Portugal\",\r\n states: [\"Açores\", \"Aveiro\", \"Beja\", \"Braga\", \"Bragança\", \"Castelo Branco\", \"Coimbra\", \"Évora\", \"Faro\", \"Guarda\", \"Leiria\", \"Lisbon\", \"Madeira\", \"Portalegre\", \"Porto\", \"Santarém\", \"Setúbal\", \"Viana do Castelo\", \"Vila Real\", \"Viseu\"]\r\n }, {\r\n name: \"Puerto Rico\",\r\n states: [\"Adjuntas\", \"Aguada\", \"Aguadilla\", \"Aguas Buenas\", \"Aibonito\", \"Añasco\", \"Arecibo\", \"Arecibo\", \"Arroyo\", \"Barceloneta\", \"Barranquitas\", \"Bayamon\", \"Bayamón\", \"Cabo Rojo\", \"Caguas\", \"Caguas\", \"Camuy\", \"Canóvanas\", \"Carolina\", \"Carolina\", \"Cataño\", \"Cayey\", \"Ceiba\", \"Ciales\", \"Cidra\", \"Coamo\", \"ComerÃo\", \"Corozal\", \"Culebra\", \"Dorado\", \"Fajardo\", \"Florida\", \"Guánica\", \"Guayama\", \"Guayanilla\", \"Guaynabo\", \"Guaynabo\", \"Gurabo\", \"Hatillo\", \"Hormigueros\", \"Humacao\", \"Isabela\", \"Jayuya\", \"Juana DÃaz\", \"Juncos\", \"Lajas\", \"Lares\", \"Las MarÃas\", \"Las Piedras\", \"LoÃza\", \"Luquillo\", \"ManatÃ\", \"Maricao\", \"Maunabo\", \"Mayagüez\", \"Mayagüez\", \"Moca\", \"Morovis\", \"Naguabo\", \"Naranjito\", \"Orocovis\", \"Patillas\", \"Peñuelas\", \"Ponce\", \"Ponce\", \"Quebradillas\", \"Rincón\", \"RÃo Grande\", \"Sabana Grande\", \"Salinas\", \"San Germán\", \"San Juan\", \"San Juan\", \"San Lorenzo\", \"San Sebastián\", \"Santa Isabel\", \"Toa Alta\", \"Toa Baja\", \"Toa Baja\", \"Trujillo Alto\", \"Trujillo Alto\", \"Utuado\", \"Vega Alta\", \"Vega Baja\", \"Vieques\", \"Villalba\", \"Yabucoa\", \"Yauco\"]\r\n }, {\r\n name: \"Qatar\",\r\n states: [\"Al Daayen\", \"Al Khor\", \"Al Rayyan Municipality\", \"Al Wakrah\", \"Al-Shahaniya\", \"Doha\", \"Madinat ash Shamal\", \"Umm Salal Municipality\"]\r\n }, {name: \"Reunion\", states: []}, {\r\n name: \"Romania\",\r\n states: [\"Alba\", \"Arad County\", \"Arges\", \"Bacău County\", \"Bihor County\", \"BistriÈ›a-Năsăud County\", \"BotoÈ™ani County\", \"Braila\", \"BraÈ™ov County\", \"Bucharest\", \"Buzău County\", \"CălăraÈ™i County\", \"CaraÈ™-Severin County\", \"Cluj County\", \"ConstanÈ›a County\", \"Covasna County\", \"DâmboviÈ›a County\", \"Dolj County\", \"GalaÈ›i County\", \"Giurgiu County\", \"Gorj County\", \"Harghita County\", \"Hunedoara County\", \"IalomiÈ›a County\", \"IaÈ™i County\", \"Ilfov County\", \"MaramureÈ™ County\", \"MehedinÈ›i County\", \"MureÈ™ County\", \"NeamÈ› County\", \"Olt County\", \"Prahova County\", \"Sălaj County\", \"Satu Mare County\", \"Sibiu County\", \"Suceava County\", \"Teleorman County\", \"TimiÈ™ County\", \"Tulcea County\", \"Vâlcea County\", \"Vaslui County\", \"Vrancea County\"]\r\n }, {\r\n name: \"Russia\",\r\n states: [\"Altai Krai\", \"Altai Republic\", \"Amur Oblast\", \"Arkhangelsk\", \"Astrakhan Oblast\", \"Belgorod Oblast\", \"Bryansk Oblast\", \"Chechen Republic\", \"Chelyabinsk Oblast\", \"Chukotka Autonomous Okrug\", \"Chuvash Republic\", \"Irkutsk\", \"Ivanovo Oblast\", \"Jewish Autonomous Oblast\", \"Kabardino-Balkar Republic\", \"Kaliningrad\", \"Kaluga Oblast\", \"Kamchatka Krai\", \"Karachay-Cherkess Republic\", \"Kemerovo Oblast\", \"Khabarovsk Krai\", \"Khanty-Mansi Autonomous Okrug\", \"Kirov Oblast\", \"Komi Republic\", \"Kostroma Oblast\", \"Krasnodar Krai\", \"Krasnoyarsk Krai\", \"Kurgan Oblast\", \"Kursk Oblast\", \"Leningrad Oblast\", \"Lipetsk Oblast\", \"Magadan Oblast\", \"Mari El Republic\", \"Moscow\", \"Moscow Oblast\", \"Murmansk Oblast\", \"Nenets Autonomous Okrug\", \"Nizhny Novgorod Oblast\", \"Novgorod Oblast\", \"Novosibirsk\", \"Omsk Oblast\", \"Orenburg Oblast\", \"Oryol Oblast\", \"Penza Oblast\", \"Perm Krai\", \"Primorsky Krai\", \"Pskov Oblast\", \"Republic of Adygea\", \"Republic of Bashkortostan\", \"Republic of Buryatia\", \"Republic of Dagestan\", \"Republic of Ingushetia\", \"Republic of Kalmykia\", \"Republic of Karelia\", \"Republic of Khakassia\", \"Republic of Mordovia\", \"Republic of North Ossetia-Alania\", \"Republic of Tatarstan\", \"Rostov Oblast\", \"Ryazan Oblast\", \"Saint Petersburg\", \"Sakha Republic\", \"Sakhalin\", \"Samara Oblast\", \"Saratov Oblast\", \"Smolensk Oblast\", \"Stavropol Krai\", \"Sverdlovsk\", \"Tambov Oblast\", \"Tomsk Oblast\", \"Tula Oblast\", \"Tuva Republic\", \"Tver Oblast\", \"Tyumen Oblast\", \"Udmurt Republic\", \"Ulyanovsk Oblast\", \"Vladimir Oblast\", \"Volgograd Oblast\", \"Vologda Oblast\", \"Voronezh Oblast\", \"Yamalo-Nenets Autonomous Okrug\", \"Yaroslavl Oblast\", \"Zabaykalsky Krai\"]\r\n }, {\r\n name: \"Rwanda\",\r\n states: [\"Eastern Province\", \"Kigali district\", \"Northern Province\", \"Southern Province\", \"Western Province\"]\r\n }, {name: \"Saint Helena\", states: []}, {\r\n name: \"Saint Kitts and Nevis\",\r\n states: [\"Christ Church Nichola Town Parish\", \"Nevis\", \"Saint Anne Sandy Point Parish\", \"Saint George Gingerland Parish\", \"Saint James Windward Parish\", \"Saint John Capisterre Parish\", \"Saint John Figtree Parish\", \"Saint Kitts\", \"Saint Mary Cayon Parish\", \"Saint Paul Capisterre Parish\", \"Saint Paul Charlestown Parish\", \"Saint Peter Basseterre Parish\", \"Saint Thomas Lowland Parish\", \"Saint Thomas Middle Island Parish\", \"Trinity Palmetto Point Parish\"]\r\n }, {\r\n name: \"Saint Lucia\",\r\n states: [\"Anse la Raye Quarter\", \"Canaries\", \"Castries Quarter\", \"Choiseul Quarter\", \"Dauphin Quarter\", \"Dennery Quarter\", \"Gros Islet Quarter\", \"Laborie Quarter\", \"Micoud Quarter\", \"Praslin Quarter\", \"Soufrière Quarter\", \"Vieux Fort Quarter\"]\r\n }, {name: \"Saint Pierre and Miquelon\", states: []}, {\r\n name: \"Saint Vincent and the Grenadines\",\r\n states: [\"Charlotte Parish\", \"Grenadines Parish\", \"Saint Andrew Parish\", \"Saint David Parish\", \"Saint George Parish\", \"Saint Patrick Parish\"]\r\n }, {name: \"Saint-Barthelemy\", states: []}, {name: \"Saint-Martin (French part)\", states: []}, {\r\n name: \"Samoa\",\r\n states: [\"A'ana\", \"Aiga-i-le-Tai\", \"Atua\", \"Fa'asaleleaga\", \"Gaga'emauga\", \"Gaga'ifomauga\", \"Palauli\", \"Satupa'itea\", \"Tuamasaga\", \"Va'a-o-Fonoti\", \"Vaisigano\"]\r\n }, {\r\n name: \"San Marino\",\r\n states: [\"Acquaviva\", \"Borgo Maggiore\", \"Chiesanuova\", \"Domagnano\", \"Faetano\", \"Fiorentino\", \"Montegiardino\", \"San Marino\", \"Serravalle\"]\r\n }, {name: \"Sao Tome and Principe\", states: [\"PrÃncipe Province\", \"São Tomé Province\"]}, {\r\n name: \"Saudi Arabia\",\r\n states: [\"'Asir\", \"Al Bahah\", \"Al Jawf\", \"Al Madinah\", \"Al-Qassim\", \"Eastern Province\", \"Ha'il\", \"Jizan\", \"Makkah\", \"Najran\", \"Northern Borders\", \"Riyadh\", \"Tabuk\"]\r\n }, {\r\n name: \"Senegal\",\r\n states: [\"Dakar\", \"Diourbel Region\", \"Fatick\", \"Kaffrine\", \"Kaolack\", \"Kédougou\", \"Kolda\", \"Louga\", \"Matam\", \"Saint-Louis\", \"Sédhiou\", \"Tambacounda Region\", \"Thiès Region\", \"Ziguinchor\"]\r\n }, {\r\n name: \"Serbia\",\r\n states: [\"Belgrade\", \"Bor District\", \"BraniÄevo District\", \"Central Banat District\", \"Jablanica District\", \"Kolubara District\", \"MaÄva District\", \"Moravica District\", \"NiÅ¡ava District\", \"North BaÄka District\", \"North Banat District\", \"PÄinja District\", \"Pirot District\", \"Podunavlje District\", \"Pomoravlje District\", \"Rasina District\", \"RaÅ¡ka District\", \"South BaÄka District\", \"South Banat District\", \"Srem District\", \"Å umadija District\", \"Toplica District\", \"Vojvodina\", \"West BaÄka District\", \"ZajeÄar District\", \"Zlatibor District\"]\r\n }, {\r\n name: \"Seychelles\",\r\n states: [\"Anse Boileau\", \"Anse Royale\", \"Anse-aux-Pins\", \"Au Cap\", \"Baie Lazare\", \"Baie Sainte Anne\", \"Beau Vallon\", \"Bel Air\", \"Bel Ombre\", \"Cascade\", \"Glacis\", \"Grand'Anse Mahé\", \"Grand'Anse Praslin\", \"La Digue\", \"La Rivière Anglaise\", \"Les Mamelles\", \"Mont Buxton\", \"Mont Fleuri\", \"Plaisance\", \"Pointe La Rue\", \"Port Glaud\", \"Roche Caiman\", \"Saint Louis\", \"Takamaka\"]\r\n }, {\r\n name: \"Sierra Leone\",\r\n states: [\"Eastern Province\", \"Northern Province\", \"Southern Province\", \"Western Area\"]\r\n }, {\r\n name: \"Singapore\",\r\n states: [\"Central Singapore\", \"North East\", \"North West\", \"South East\", \"South West\"]\r\n }, {name: \"Sint Maarten (Dutch part)\", states: []}, {\r\n name: \"Slovakia\",\r\n states: [\"Banská Bystrica Region\", \"Bratislava Region\", \"KoÅ¡ice Region\", \"Nitra Region\", \"PreÅ¡ov Region\", \"TrenÄÃn Region\", \"Trnava Region\", \"Žilina Region\"]\r\n }, {\r\n name: \"Slovenia\",\r\n states: [\"AjdovÅ¡Äina Municipality\", \"Ankaran Municipality\", \"Beltinci Municipality\", \"Benedikt Municipality\", \"Bistrica ob Sotli Municipality\", \"Bled Municipality\", \"Bloke Municipality\", \"Bohinj Municipality\", \"Borovnica Municipality\", \"Bovec Municipality\", \"BraslovÄe Municipality\", \"Brda Municipality\", \"Brežice Municipality\", \"Brezovica Municipality\", \"Cankova Municipality\", \"Cerklje na Gorenjskem Municipality\", \"Cerknica Municipality\", \"Cerkno Municipality\", \"Cerkvenjak Municipality\", \"City Municipality of Celje\", \"City Municipality of Novo Mesto\", \"ÄŒrenÅ¡ovci Municipality\", \"ÄŒrna na KoroÅ¡kem Municipality\", \"ÄŒrnomelj Municipality\", \"Destrnik Municipality\", \"DivaÄa Municipality\", \"Dobje Municipality\", \"Dobrepolje Municipality\", \"Dobrna Municipality\", \"Dobrova–Polhov Gradec Municipality\", \"Dobrovnik Municipality\", \"Dol pri Ljubljani Municipality\", \"Dolenjske Toplice Municipality\", \"Domžale Municipality\", \"Dornava Municipality\", \"Dravograd Municipality\", \"Duplek Municipality\", \"Gorenja Vas–Poljane Municipality\", \"GoriÅ¡nica Municipality\", \"Gorje Municipality\", \"Gornja Radgona Municipality\", \"Gornji Grad Municipality\", \"Gornji Petrovci Municipality\", \"Grad Municipality\", \"Grosuplje Municipality\", \"Hajdina Municipality\", \"HoÄe–Slivnica Municipality\", \"HodoÅ¡ Municipality\", \"Horjul Municipality\", \"Hrastnik Municipality\", \"Hrpelje–Kozina Municipality\", \"Idrija Municipality\", \"Ig Municipality\", \"IvanÄna Gorica Municipality\", \"Izola Municipality\", \"Jesenice Municipality\", \"Jezersko Municipality\", \"JurÅ¡inci Municipality\", \"Kamnik Municipality\", \"Kanal ob SoÄi Municipality\", \"KidriÄevo Municipality\", \"Kobarid Municipality\", \"Kobilje Municipality\", \"KoÄevje Municipality\", \"Komen Municipality\", \"Komenda Municipality\", \"Koper City Municipality\", \"Kostanjevica na Krki Municipality\", \"Kostel Municipality\", \"Kozje Municipality\", \"Kranj City Municipality\", \"Kranjska Gora Municipality\", \"Križevci Municipality\", \"Kungota\", \"Kuzma Municipality\", \"LaÅ¡ko Municipality\", \"Lenart Municipality\", \"Lendava Municipality\", \"Litija Municipality\", \"Ljubljana City Municipality\", \"Ljubno Municipality\", \"Ljutomer Municipality\", \"Log–Dragomer Municipality\", \"Logatec Municipality\", \"LoÅ¡ka Dolina Municipality\", \"LoÅ¡ki Potok Municipality\", \"Lovrenc na Pohorju Municipality\", \"LuÄe Municipality\", \"Lukovica Municipality\", \"MajÅ¡perk Municipality\", \"Makole Municipality\", \"Maribor City Municipality\", \"Markovci Municipality\", \"Medvode Municipality\", \"MengeÅ¡ Municipality\", \"Metlika Municipality\", \"Mežica Municipality\", \"Miklavž na Dravskem Polju Municipality\", \"Miren–Kostanjevica Municipality\", \"Mirna Municipality\", \"Mirna PeÄ Municipality\", \"Mislinja Municipality\", \"Mokronog–Trebelno Municipality\", \"MoravÄe Municipality\", \"Moravske Toplice Municipality\", \"Mozirje Municipality\", \"Municipality of ApaÄe\", \"Municipality of Cirkulane\", \"Municipality of Ilirska Bistrica\", \"Municipality of KrÅ¡ko\", \"Municipality of Å kofljica\", \"Murska Sobota City Municipality\", \"Muta Municipality\", \"Naklo Municipality\", \"Nazarje Municipality\", \"Nova Gorica City Municipality\", \"Odranci Municipality\", \"Oplotnica\", \"Ormož Municipality\", \"Osilnica Municipality\", \"Pesnica Municipality\", \"Piran Municipality\", \"Pivka Municipality\", \"PodÄetrtek Municipality\", \"Podlehnik Municipality\", \"Podvelka Municipality\", \"PoljÄane Municipality\", \"Polzela Municipality\", \"Postojna Municipality\", \"Prebold Municipality\", \"Preddvor Municipality\", \"Prevalje Municipality\", \"Ptuj City Municipality\", \"Puconci Municipality\", \"RaÄe–Fram Municipality\", \"RadeÄe Municipality\", \"Radenci Municipality\", \"Radlje ob Dravi Municipality\", \"Radovljica Municipality\", \"Ravne na KoroÅ¡kem Municipality\", \"Razkrižje Municipality\", \"ReÄica ob Savinji Municipality\", \"RenÄe–Vogrsko Municipality\", \"Ribnica Municipality\", \"Ribnica na Pohorju Municipality\", \"RogaÅ¡ka Slatina Municipality\", \"RogaÅ¡ovci Municipality\", \"Rogatec Municipality\", \"RuÅ¡e Municipality\", \"Å alovci Municipality\", \"Selnica ob Dravi Municipality\", \"SemiÄ Municipality\", \"Å empeter–Vrtojba Municipality\", \"Å enÄur Municipality\", \"Å entilj Municipality\", \"Å entjernej Municipality\", \"Å entjur Municipality\", \"Å entrupert Municipality\", \"Sevnica Municipality\", \"Sežana Municipality\", \"Å kocjan Municipality\", \"Å kofja Loka Municipality\", \"Slovenj Gradec City Municipality\", \"Slovenska Bistrica Municipality\", \"Slovenske Konjice Municipality\", \"Å marje pri JelÅ¡ah Municipality\", \"Å marjeÅ¡ke Toplice Municipality\", \"Å martno ob Paki Municipality\", \"Å martno pri Litiji Municipality\", \"Sodražica Municipality\", \"SolÄava Municipality\", \"Å oÅ¡tanj Municipality\", \"SrediÅ¡Äe ob Dravi\", \"StarÅ¡e Municipality\", \"Å tore Municipality\", \"Straža Municipality\", \"Sveta Ana Municipality\", \"Sveta Trojica v Slovenskih Goricah Municipality\", \"Sveti Andraž v Slovenskih Goricah Municipality\", \"Sveti Jurij ob Å Äavnici Municipality\", \"Sveti Jurij v Slovenskih Goricah Municipality\", \"Sveti Tomaž Municipality\", \"Tabor Municipality\", \"TiÅ¡ina Municipality\", \"Tolmin Municipality\", \"Trbovlje Municipality\", \"Trebnje Municipality\", \"Trnovska Vas Municipality\", \"TržiÄ Municipality\", \"Trzin Municipality\", \"TurniÅ¡Äe Municipality\", \"Velika Polana Municipality\", \"Velike LaÅ¡Äe Municipality\", \"Veržej Municipality\", \"Videm Municipality\", \"Vipava Municipality\", \"Vitanje Municipality\", \"Vodice Municipality\", \"Vojnik Municipality\", \"Vransko Municipality\", \"Vrhnika Municipality\", \"Vuzenica Municipality\", \"Zagorje ob Savi Municipality\", \"Žalec Municipality\", \"ZavrÄ Municipality\", \"Železniki Municipality\", \"Žetale Municipality\", \"Žiri Municipality\", \"Žirovnica Municipality\", \"ZreÄe Municipality\", \"Žužemberk Municipality\"]\r\n }, {\r\n name: \"Solomon Islands\",\r\n states: [\"Central Province\", \"Choiseul Province\", \"Guadalcanal Province\", \"Honiara\", \"Isabel Province\", \"Makira-Ulawa Province\", \"Malaita Province\", \"Rennell and Bellona Province\", \"Temotu Province\", \"Western Province\"]\r\n }, {\r\n name: \"Somalia\",\r\n states: [\"Awdal Region\", \"Bakool\", \"Banaadir\", \"Bari\", \"Bay\", \"Galguduud\", \"Gedo\", \"Hiran\", \"Lower Juba\", \"Lower Shebelle\", \"Middle Juba\", \"Middle Shebelle\", \"Mudug\", \"Nugal\", \"Sanaag Region\", \"Togdheer Region\"]\r\n }, {\r\n name: \"South Africa\",\r\n states: [\"Eastern Cape\", \"Free State\", \"Gauteng\", \"KwaZulu-Natal\", \"Limpopo\", \"Mpumalanga\", \"North West\", \"Northern Cape\", \"Western Cape\"]\r\n }, {name: \"South Georgia\", states: []}, {\r\n name: \"South Korea\",\r\n states: [\"Busan\", \"Daegu\", \"Daejeon\", \"Gangwon Province\", \"Gwangju\", \"Gyeonggi Province\", \"Incheon\", \"Jeju\", \"North Chungcheong Province\", \"North Gyeongsang Province\", \"North Jeolla Province\", \"Sejong City\", \"Seoul\", \"South Chungcheong Province\", \"South Gyeongsang Province\", \"South Jeolla Province\", \"Ulsan\"]\r\n }, {\r\n name: \"South Sudan\",\r\n states: [\"Central Equatoria\", \"Eastern Equatoria\", \"Jonglei State\", \"Lakes\", \"Northern Bahr el Ghazal\", \"Unity\", \"Upper Nile\", \"Warrap\", \"Western Bahr el Ghazal\", \"Western Equatoria\"]\r\n }, {\r\n name: \"Spain\",\r\n states: [\"A Coruña\", \"Albacete\", \"Alicante\", \"Almeria\", \"Araba\", \"Asturias\", \"Ãvila\", \"Badajoz\", \"Barcelona\", \"Bizkaia\", \"Burgos\", \"Caceres\", \"Cádiz\", \"Canarias\", \"Cantabria\", \"Castellón\", \"Ceuta\", \"Ciudad Real\", \"Córdoba\", \"Cuenca\", \"Gipuzkoa\", \"Girona\", \"Granada\", \"Guadalajara\", \"Huelva\", \"Huesca\", \"Islas Baleares\", \"Jaén\", \"La Rioja\", \"Las Palmas\", \"León\", \"Lleida\", \"Lugo\", \"Madrid\", \"Málaga\", \"Melilla\", \"Murcia\", \"Navarra\", \"Ourense\", \"Palencia\", \"Pontevedra\", \"Salamanca\", \"Santa Cruz de Tenerife\", \"Segovia\", \"Sevilla\", \"Soria\", \"Tarragona\", \"Teruel\", \"Toledo\", \"Valencia\", \"Valladolid\", \"Zamora\", \"Zaragoza\"]\r\n }, {\r\n name: \"Sri Lanka\",\r\n states: [\"Ampara District\", \"Anuradhapura District\", \"Badulla District\", \"Batticaloa District\", \"Central Province\", \"Colombo District\", \"Eastern Province\", \"Galle District\", \"Gampaha District\", \"Hambantota District\", \"Jaffna District\", \"Kalutara District\", \"Kandy District\", \"Kegalle District\", \"Kilinochchi District\", \"Mannar District\", \"Matale District\", \"Matara District\", \"Monaragala District\", \"Mullaitivu District\", \"North Central Province\", \"North Western Province\", \"Northern Province\", \"Nuwara Eliya District\", \"Polonnaruwa District\", \"Puttalam District\", \"Ratnapura district\", \"Sabaragamuwa Province\", \"Southern Province\", \"Trincomalee District\", \"Uva Province\", \"Vavuniya District\", \"Western Province\"]\r\n }, {\r\n name: \"Sudan\",\r\n states: [\"Al Jazirah\", \"Al Qadarif\", \"Blue Nile\", \"Central Darfur\", \"East Darfur\", \"Kassala\", \"Khartoum\", \"North Darfur\", \"North Kordofan\", \"Northern\", \"Red Sea\", \"River Nile\", \"Sennar\", \"South Darfur\", \"South Kordofan\", \"West Darfur\", \"West Kordofan\", \"White Nile\"]\r\n }, {\r\n name: \"Suriname\",\r\n states: [\"Brokopondo District\", \"Commewijne District\", \"Coronie District\", \"Marowijne District\", \"Nickerie District\", \"Para District\", \"Paramaribo District\", \"Saramacca District\", \"Sipaliwini District\", \"Wanica District\"]\r\n }, {name: \"Svalbard and Jan Mayen Islands\", states: []}, {\r\n name: \"Sweden\",\r\n states: [\"Blekinge County\", \"Dalarna County\", \"Gävleborg County\", \"Gotland County\", \"Halland County\", \"Jämtland County\", \"Jönköping County\", \"Kalmar County\", \"Kronoberg County\", \"Norrbotten County\", \"Örebro County\", \"Östergötland County\", \"SkÃ¥ne County\", \"Södermanland County\", \"Stockholm County\", \"Uppsala County\", \"Värmland County\", \"Västerbotten County\", \"Västernorrland County\", \"Västmanland County\", \"Västra Götaland County\"]\r\n }, {\r\n name: \"Switzerland\",\r\n states: [\"Aargau\", \"Appenzell Ausserrhoden\", \"Appenzell Innerrhoden\", \"Basel-Land\", \"Basel-Stadt\", \"Bern\", \"Fribourg\", \"Geneva\", \"Glarus\", \"Graubünden\", \"Jura\", \"Lucerne\", \"Neuchâtel\", \"Nidwalden\", \"Obwalden\", \"Schaffhausen\", \"Schwyz\", \"Solothurn\", \"St. Gallen\", \"Thurgau\", \"Ticino\", \"Uri\", \"Valais\", \"Vaud\", \"Zug\", \"Zürich\"]\r\n }, {\r\n name: \"Syria\",\r\n states: [\"Al-Hasakah\", \"Al-Raqqah\", \"Aleppo\", \"As-Suwayda\", \"Damascus\", \"Daraa\", \"Deir ez-Zor\", \"Hama\", \"Homs\", \"Idlib\", \"Latakia\", \"Quneitra\", \"Rif Dimashq\", \"Tartus\"]\r\n }, {\r\n name: \"Taiwan\",\r\n states: [\"Changhua\", \"Chiayi\", \"Chiayi\", \"Hsinchu\", \"Hsinchu\", \"Hualien\", \"Kaohsiung\", \"Keelung\", \"Kinmen\", \"Lienchiang\", \"Miaoli\", \"Nantou\", \"New Taipei\", \"Penghu\", \"Pingtung\", \"Taichung\", \"Tainan\", \"Taipei\", \"Taitung\", \"Taoyuan\", \"Yilan\", \"Yunlin\"]\r\n }, {\r\n name: \"Tajikistan\",\r\n states: [\"districts of Republican Subordination\", \"Gorno-Badakhshan Autonomous Province\", \"Khatlon Province\", \"Sughd Province\"]\r\n }, {\r\n name: \"Tanzania\",\r\n states: [\"Arusha\", \"Dar es Salaam\", \"Dodoma\", \"Geita\", \"Iringa\", \"Kagera\", \"Katavi\", \"Kigoma\", \"Kilimanjaro\", \"Lindi\", \"Manyara\", \"Mara\", \"Mbeya\", \"Morogoro\", \"Mtwara\", \"Mwanza\", \"Njombe\", \"Pemba North\", \"Pemba South\", \"Pwani\", \"Rukwa\", \"Ruvuma\", \"Shinyanga\", \"Simiyu\", \"Singida\", \"Songwe\", \"Tabora\", \"Tanga\", \"Zanzibar North\", \"Zanzibar South\", \"Zanzibar West\"]\r\n }, {\r\n name: \"Thailand\",\r\n states: [\"Amnat Charoen\", \"Ang Thong\", \"Bangkok\", \"Bueng Kan\", \"Buri Ram\", \"Chachoengsao\", \"Chai Nat\", \"Chaiyaphum\", \"Chanthaburi\", \"Chiang Mai\", \"Chiang Rai\", \"Chon Buri\", \"Chumphon\", \"Kalasin\", \"Kamphaeng Phet\", \"Kanchanaburi\", \"Khon Kaen\", \"Krabi\", \"Lampang\", \"Lamphun\", \"Loei\", \"Lop Buri\", \"Mae Hong Son\", \"Maha Sarakham\", \"Mukdahan\", \"Nakhon Nayok\", \"Nakhon Pathom\", \"Nakhon Phanom\", \"Nakhon Ratchasima\", \"Nakhon Sawan\", \"Nakhon Si Thammarat\", \"Nan\", \"Narathiwat\", \"Nong Bua Lam Phu\", \"Nong Khai\", \"Nonthaburi\", \"Pathum Thani\", \"Pattani\", \"Pattaya\", \"Phangnga\", \"Phatthalung\", \"Phayao\", \"Phetchabun\", \"Phetchaburi\", \"Phichit\", \"Phitsanulok\", \"Phra Nakhon Si Ayutthaya\", \"Phrae\", \"Phuket\", \"Prachin Buri\", \"Prachuap Khiri Khan\", \"Ranong\", \"Ratchaburi\", \"Rayong\", \"Roi Et\", \"Sa Kaeo\", \"Sakon Nakhon\", \"Samut Prakan\", \"Samut Sakhon\", \"Samut Songkhram\", \"Saraburi\", \"Satun\", \"Si Sa Ket\", \"Sing Buri\", \"Songkhla\", \"Sukhothai\", \"Suphan Buri\", \"Surat Thani\", \"Surin\", \"Tak\", \"Trang\", \"Trat\", \"Ubon Ratchathani\", \"Udon Thani\", \"Uthai Thani\", \"Uttaradit\", \"Yala\", \"Yasothon\"]\r\n }, {\r\n name: \"The Bahamas\",\r\n states: [\"Acklins\", \"Acklins and Crooked Islands\", \"Berry Islands\", \"Bimini\", \"Black Point\", \"Cat Island\", \"Central Abaco\", \"Central Andros\", \"Central Eleuthera\", \"Crooked Island\", \"East Grand Bahama\", \"Exuma\", \"Freeport\", \"Fresh Creek\", \"Governor's Harbour\", \"Grand Cay\", \"Green Turtle Cay\", \"Harbour Island\", \"High Rock\", \"Hope Town\", \"Inagua\", \"Kemps Bay\", \"Long Island\", \"Mangrove Cay\", \"Marsh Harbour\", \"Mayaguana District\", \"New Providence\", \"Nichollstown and Berry Islands\", \"North Abaco\", \"North Andros\", \"North Eleuthera\", \"Ragged Island\", \"Rock Sound\", \"Rum Cay District\", \"San Salvador and Rum Cay\", \"San Salvador Island\", \"Sandy Point\", \"South Abaco\", \"South Andros\", \"South Eleuthera\", \"Spanish Wells\", \"West Grand Bahama\"]\r\n }, {\r\n name: \"The Gambia \",\r\n states: [\"Banjul\", \"Central River Division\", \"Lower River Division\", \"North Bank Division\", \"Upper River Division\", \"West Coast Division\"]\r\n }, {\r\n name: \"Timor-Leste\",\r\n states: [\"Aileu municipality\", \"Ainaro Municipality\", \"Baucau Municipality\", \"Bobonaro Municipality\", \"Cova Lima Municipality\", \"Dili municipality\", \"Ermera District\", \"Lautém Municipality\", \"Liquiçá Municipality\", \"Manatuto District\", \"Manufahi Municipality\", \"Viqueque Municipality\"]\r\n }, {\r\n name: \"Togo\",\r\n states: [\"Centrale Region\", \"Kara Region\", \"Maritime\", \"Plateaux Region\", \"Savanes Region\"]\r\n }, {name: \"Tokelau\", states: []}, {\r\n name: \"Tonga\",\r\n states: [\"HaÊ»apai\", \"Ê»Eua\", \"Niuas\", \"Tongatapu\", \"VavaÊ»u\"]\r\n }, {\r\n name: \"Trinidad and Tobago\",\r\n states: [\"Arima\", \"Chaguanas\", \"Couva-Tabaquite-Talparo Regional Corporation\", \"Diego Martin Regional Corporation\", \"Eastern Tobago\", \"Penal-Debe Regional Corporation\", \"Point Fortin\", \"Port of Spain\", \"Princes Town Regional Corporation\", \"Rio Claro-Mayaro Regional Corporation\", \"San Fernando\", \"San Juan-Laventille Regional Corporation\", \"Sangre Grande Regional Corporation\", \"Siparia Regional Corporation\", \"Tunapuna-Piarco Regional Corporation\", \"Western Tobago\"]\r\n }, {\r\n name: \"Tunisia\",\r\n states: [\"Ariana\", \"Béja\", \"Ben Arous\", \"Bizerte\", \"Gabès\", \"Gafsa\", \"Jendouba\", \"Kairouan\", \"Kasserine\", \"Kebili\", \"Kef\", \"Mahdia\", \"Manouba\", \"Medenine\", \"Monastir\", \"Nabeul\", \"Sfax\", \"Sidi Bouzid\", \"Siliana\", \"Sousse\", \"Tataouine\", \"Tozeur\", \"Tunis\", \"Zaghouan\"]\r\n }, {\r\n name: \"Turkey\",\r\n states: [\"Adana\", \"Adıyaman\", \"Afyonkarahisar\", \"AÄŸrı\", \"Aksaray\", \"Amasya\", \"Ankara\", \"Antalya\", \"Ardahan\", \"Artvin\", \"Aydın\", \"Balıkesir\", \"Bartın\", \"Batman\", \"Bayburt\", \"Bilecik\", \"Bingöl\", \"Bitlis\", \"Bolu\", \"Burdur\", \"Bursa\", \"Çanakkale\", \"Çankırı\", \"Çorum\", \"Denizli\", \"Diyarbakır\", \"Düzce\", \"Edirne\", \"Elazığ\", \"Erzincan\", \"Erzurum\", \"EskiÅŸehir\", \"Gaziantep\", \"Giresun\", \"Gümüşhane\", \"Hakkâri\", \"Hatay\", \"IÄŸdır\", \"Isparta\", \"Ä°stanbul\", \"Ä°zmir\", \"KahramanmaraÅŸ\", \"Karabük\", \"Karaman\", \"Kars\", \"Kastamonu\", \"Kayseri\", \"Kilis\", \"Kırıkkale\", \"Kırklareli\", \"KırÅŸehir\", \"Kocaeli\", \"Konya\", \"Kütahya\", \"Malatya\", \"Manisa\", \"Mardin\", \"Mersin\", \"MuÄŸla\", \"MuÅŸ\", \"NevÅŸehir\", \"NiÄŸde\", \"Ordu\", \"Osmaniye\", \"Rize\", \"Sakarya\", \"Samsun\", \"Åžanlıurfa\", \"Siirt\", \"Sinop\", \"Sivas\", \"Şırnak\", \"TekirdaÄŸ\", \"Tokat\", \"Trabzon\", \"Tunceli\", \"UÅŸak\", \"Van\", \"Yalova\", \"Yozgat\", \"Zonguldak\"]\r\n }, {\r\n name: \"Turkmenistan\",\r\n states: [\"Ahal Region\", \"Ashgabat\", \"Balkan Region\", \"DaÅŸoguz Region\", \"Lebap Region\", \"Mary Region\"]\r\n }, {name: \"Turks and Caicos Islands\", states: []}, {\r\n name: \"Tuvalu\",\r\n states: [\"Funafuti\", \"Nanumanga\", \"Nanumea\", \"Niutao Island Council\", \"Nui\", \"Nukufetau\", \"Nukulaelae\", \"Vaitupu\"]\r\n }, {\r\n name: \"Uganda\",\r\n states: [\"Abim District\", \"Adjumani District\", \"Agago District\", \"Alebtong District\", \"Amolatar District\", \"Amudat District\", \"Amuria District\", \"Amuru District\", \"Apac District\", \"Arua District\", \"Budaka District\", \"Bududa District\", \"Bugiri District\", \"Buhweju District\", \"Buikwe District\", \"Bukedea District\", \"Bukomansimbi District\", \"Bukwo District\", \"Bulambuli District\", \"Buliisa District\", \"Bundibugyo District\", \"Bunyangabu District\", \"Bushenyi District\", \"Busia District\", \"Butaleja District\", \"Butambala District\", \"Butebo District\", \"Buvuma District\", \"Buyende District\", \"Central Region\", \"Dokolo District\", \"Eastern Region\", \"Gomba District\", \"Gulu District\", \"Ibanda District\", \"Iganga District\", \"Isingiro District\", \"Jinja District\", \"Kaabong District\", \"Kabale District\", \"Kabarole District\", \"Kaberamaido District\", \"Kagadi District\", \"Kakumiro District\", \"Kalangala District\", \"Kaliro District\", \"Kalungu District\", \"Kampala District\", \"Kamuli District\", \"Kamwenge District\", \"Kanungu District\", \"Kapchorwa District\", \"Kasese District\", \"Katakwi District\", \"Kayunga District\", \"Kibaale District\", \"Kiboga District\", \"Kibuku District\", \"Kiruhura District\", \"Kiryandongo District\", \"Kisoro District\", \"Kitgum District\", \"Koboko District\", \"Kole District\", \"Kotido District\", \"Kumi District\", \"Kween District\", \"Kyankwanzi District\", \"Kyegegwa District\", \"Kyenjojo District\", \"Kyotera District\", \"Lamwo District\", \"Lira District\", \"Luuka District\", \"Luwero District\", \"Lwengo District\", \"Lyantonde District\", \"Manafwa District\", \"Maracha District\", \"Masaka District\", \"Masindi District\", \"Mayuge District\", \"Mbale District\", \"Mbarara District\", \"Mitooma District\", \"Mityana District\", \"Moroto District\", \"Moyo District\", \"Mpigi District\", \"Mubende District\", \"Mukono District\", \"Nakapiripirit District\", \"Nakaseke District\", \"Nakasongola District\", \"Namayingo District\", \"Namisindwa District\", \"Namutumba District\", \"Napak District\", \"Nebbi District\", \"Ngora District\", \"Northern Region\", \"Ntoroko District\", \"Ntungamo District\", \"Nwoya District\", \"Omoro District\", \"Otuke District\", \"Oyam District\", \"Pader District\", \"Pakwach District\", \"Pallisa District\", \"Rakai District\", \"Rubanda District\", \"Rubirizi District\", \"Rukiga District\", \"Rukungiri District\", \"Sembabule District\", \"Serere District\", \"Sheema District\", \"Sironko District\", \"Soroti District\", \"Tororo District\", \"Wakiso District\", \"Western Region\", \"Yumbe District\", \"Zombo District\"]\r\n }, {\r\n name: \"Ukraine\",\r\n states: [\"Autonomous Republic of Crimea\", \"Cherkaska oblast\", \"Chernihivska oblast\", \"Chernivetska oblast\", \"Dnipropetrovska oblast\", \"Donetska oblast\", \"Ivano-Frankivska oblast\", \"Kharkivska oblast\", \"Khersonska oblast\", \"Khmelnytska oblast\", \"Kirovohradska oblast\", \"Kyiv\", \"Kyivska oblast\", \"Luhanska oblast\", \"Lvivska oblast\", \"Mykolaivska oblast\", \"Odeska oblast\", \"Poltavska oblast\", \"Rivnenska oblast\", \"Sevastopol\", \"Sumska oblast\", \"Ternopilska oblast\", \"Vinnytska oblast\", \"Volynska oblast\", \"Zakarpatska Oblast\", \"Zaporizka oblast\", \"Zhytomyrska oblast\"]\r\n }, {\r\n name: \"United Arab Emirates\",\r\n states: [\"Abu Dhabi Emirate\", \"Ajman Emirate\", \"Dubai\", \"Fujairah\", \"Ras al-Khaimah\", \"Sharjah Emirate\", \"Umm al-Quwain\"]\r\n }, {\r\n name: \"United Kingdom\",\r\n states: [\"Aberdeen\", \"Aberdeenshire\", \"Angus\", \"Antrim\", \"Antrim and Newtownabbey\", \"Ards\", \"Ards and North Down\", \"Argyll and Bute\", \"Armagh City and District Council\", \"Armagh, Banbridge and Craigavon\", \"Ascension Island\", \"Ballymena Borough\", \"Ballymoney\", \"Banbridge\", \"Barnsley\", \"Bath and North East Somerset\", \"Bedford\", \"Belfast district\", \"Birmingham\", \"Blackburn with Darwen\", \"Blackpool\", \"Blaenau Gwent County Borough\", \"Bolton\", \"Bournemouth\", \"Bracknell Forest\", \"Bradford\", \"Bridgend County Borough\", \"Brighton and Hove\", \"Buckinghamshire\", \"Bury\", \"Caerphilly County Borough\", \"Calderdale\", \"Cambridgeshire\", \"Carmarthenshire\", \"Carrickfergus Borough Council\", \"Castlereagh\", \"Causeway Coast and Glens\", \"Central Bedfordshire\", \"Ceredigion\", \"Cheshire East\", \"Cheshire West and Chester\", \"City and County of Cardiff\", \"City and County of Swansea\", \"City of Bristol\", \"City of Derby\", \"City of Kingston upon Hull\", \"City of Leicester\", \"City of London\", \"City of Nottingham\", \"City of Peterborough\", \"City of Plymouth\", \"City of Portsmouth\", \"City of Southampton\", \"City of Stoke-on-Trent\", \"City of Sunderland\", \"City of Westminster\", \"City of Wolverhampton\", \"City of York\", \"Clackmannanshire\", \"Coleraine Borough Council\", \"Conwy County Borough\", \"Cookstown District Council\", \"Cornwall\", \"County Durham\", \"Coventry\", \"Craigavon Borough Council\", \"Cumbria\", \"Darlington\", \"Denbighshire\", \"Derbyshire\", \"Derry City and Strabane\", \"Derry City Council\", \"Devon\", \"Doncaster\", \"Dorset\", \"Down District Council\", \"Dudley\", \"Dumfries and Galloway\", \"Dundee\", \"Dungannon and South Tyrone Borough Council\", \"East Ayrshire\", \"East Dunbartonshire\", \"East Lothian\", \"East Renfrewshire\", \"East Riding of Yorkshire\", \"East Sussex\", \"Edinburgh\", \"England\", \"Essex\", \"Falkirk\", \"Fermanagh and Omagh\", \"Fermanagh District Council\", \"Fife\", \"Flintshire\", \"Gateshead\", \"Glasgow\", \"Gloucestershire\", \"Gwynedd\", \"Halton\", \"Hampshire\", \"Hartlepool\", \"Herefordshire\", \"Hertfordshire\", \"Highland\", \"Inverclyde\", \"Isle of Wight\", \"Isles of Scilly\", \"Kent\", \"Kirklees\", \"Knowsley\", \"Lancashire\", \"Larne Borough Council\", \"Leeds\", \"Leicestershire\", \"Limavady Borough Council\", \"Lincolnshire\", \"Lisburn and Castlereagh\", \"Lisburn City Council\", \"Liverpool\", \"London Borough of Barking and Dagenham\", \"London Borough of Barnet\", \"London Borough of Bexley\", \"London Borough of Brent\", \"London Borough of Bromley\", \"London Borough of Camden\", \"London Borough of Croydon\", \"London Borough of Ealing\", \"London Borough of Enfield\", \"London Borough of Hackney\", \"London Borough of Hammersmith and Fulham\", \"London Borough of Haringey\", \"London Borough of Harrow\", \"London Borough of Havering\", \"London Borough of Hillingdon\", \"London Borough of Hounslow\", \"London Borough of Islington\", \"London Borough of Lambeth\", \"London Borough of Lewisham\", \"London Borough of Merton\", \"London Borough of Newham\", \"London Borough of Redbridge\", \"London Borough of Richmond upon Thames\", \"London Borough of Southwark\", \"London Borough of Sutton\", \"London Borough of Tower Hamlets\", \"London Borough of Waltham Forest\", \"London Borough of Wandsworth\", \"Magherafelt District Council\", \"Manchester\", \"Medway\", \"Merthyr Tydfil County Borough\", \"Metropolitan Borough of Wigan\", \"Mid and East Antrim\", \"Mid Ulster\", \"Middlesbrough\", \"Midlothian\", \"Milton Keynes\", \"Monmouthshire\", \"Moray\", \"Moyle District Council\", \"Neath Port Talbot County Borough\", \"Newcastle upon Tyne\", \"Newport\", \"Newry and Mourne District Council\", \"Newry, Mourne and Down\", \"Newtownabbey Borough Council\", \"Norfolk\", \"North Ayrshire\", \"North Down Borough Council\", \"North East Lincolnshire\", \"North Lanarkshire\", \"North Lincolnshire\", \"North Somerset\", \"North Tyneside\", \"North Yorkshire\", \"Northamptonshire\", \"Northern Ireland\", \"Northumberland\", \"Nottinghamshire\", \"Oldham\", \"Omagh District Council\", \"Orkney Islands\", \"Outer Hebrides\", \"Oxfordshire\", \"Pembrokeshire\", \"Perth and Kinross\", \"Poole\", \"Powys\", \"Reading\", \"Redcar and Cleveland\", \"Renfrewshire\", \"Rhondda Cynon Taf\", \"Rochdale\", \"Rotherham\", \"Royal Borough of Greenwich\", \"Royal Borough of Kensington and Chelsea\", \"Royal Borough of Kingston upon Thames\", \"Rutland\", \"Saint Helena\", \"Salford\", \"Sandwell\", \"Scotland\", \"Scottish Borders\", \"Sefton\", \"Sheffield\", \"Shetland Islands\", \"Shropshire\", \"Slough\", \"Solihull\", \"Somerset\", \"South Ayrshire\", \"South Gloucestershire\", \"South Lanarkshire\", \"South Tyneside\", \"Southend-on-Sea\", \"St Helens\", \"Staffordshire\", \"Stirling\", \"Stockport\", \"Stockton-on-Tees\", \"Strabane District Council\", \"Suffolk\", \"Surrey\", \"Swindon\", \"Tameside\", \"Telford and Wrekin\", \"Thurrock\", \"Torbay\", \"Torfaen\", \"Trafford\", \"United Kingdom\", \"Vale of Glamorgan\", \"Wakefield\", \"Wales\", \"Walsall\", \"Warrington\", \"Warwickshire\", \"West Berkshire\", \"West Dunbartonshire\", \"West Lothian\", \"West Sussex\", \"Wiltshire\", \"Windsor and Maidenhead\", \"Wirral\", \"Wokingham\", \"Worcestershire\", \"Wrexham County Borough\"]\r\n }, {\r\n name: \"United States Minor Outlying Islands\",\r\n states: [\"Baker Island\", \"Howland Island\", \"Jarvis Island\", \"Johnston Atoll\", \"Kingman Reef\", \"Midway Islands\", \"Navassa Island\", \"Palmyra Atoll\", \"Wake Island\"]\r\n }, {\r\n name: \"Uruguay\",\r\n states: [\"Artigas\", \"Canelones\", \"Cerro Largo\", \"Colonia\", \"Durazno\", \"Flores\", \"Florida\", \"Lavalleja\", \"Maldonado\", \"Montevideo\", \"Paysandú\", \"RÃo Negro\", \"Rivera\", \"Rocha\", \"Salto\", \"San José\", \"Soriano\", \"Tacuarembó\", \"Treinta y Tres\"]\r\n }, {\r\n name: \"Uzbekistan\",\r\n states: [\"Andijan Region\", \"Bukhara Region\", \"Fergana Region\", \"Jizzakh Region\", \"Karakalpakstan\", \"Namangan Region\", \"Navoiy Region\", \"Qashqadaryo Region\", \"Samarqand Region\", \"Sirdaryo Region\", \"Surxondaryo Region\", \"Tashkent\", \"Tashkent Region\", \"Xorazm Region\"]\r\n }, {\r\n name: \"Vanuatu\",\r\n states: [\"Malampa\", \"Penama\", \"Sanma\", \"Shefa\", \"Tafea\", \"Torba\"]\r\n }, {name: \"Vatican City State (Holy See)\", states: []}, {\r\n name: \"Venezuela\",\r\n states: [\"Amazonas\", \"Anzoátegui\", \"Apure\", \"Aragua\", \"Barinas\", \"BolÃvar\", \"Carabobo\", \"Cojedes\", \"Delta Amacuro\", \"Distrito Capital\", \"Falcón\", \"Federal Dependencies of Venezuela\", \"Guárico\", \"La Guaira\", \"Lara\", \"Mérida\", \"Miranda\", \"Monagas\", \"Nueva Esparta\", \"Portuguesa\", \"Sucre\", \"Táchira\", \"Trujillo\", \"Yaracuy\", \"Zulia\"]\r\n }, {\r\n name: \"Vietnam\",\r\n states: [\"An Giang\", \"Bà Rịa-VÅ©ng Tà u\", \"Bắc Giang\", \"Bắc Kạn\", \"Bạc Liêu\", \"Bắc Ninh\", \"Bến Tre\", \"Bình DÆ°Æ¡ng\", \"Bình Äịnh\", \"Bình PhÆ°á»›c\", \"Bình Thuáºn\", \"Cà Mau\", \"Cần ThÆ¡\", \"Cao Bằng\", \"Äà Nẵng\", \"Äắk Lắk\", \"Äắk Nông\", \"Äiện Biên\", \"Äồng Nai\", \"Äồng Tháp\", \"Gia Lai\", \"Hà Giang\", \"Hà Nam\", \"Hà Ná»™i\", \"Hà TÄ©nh\", \"Hải DÆ°Æ¡ng\", \"Hải Phòng\", \"Háºu Giang\", \"Hồ Chà Minh\", \"Hòa Bình\", \"HÆ°ng Yên\", \"Khánh Hòa\", \"Kiên Giang\", \"Kon Tum\", \"Lai Châu\", \"Lâm Äồng\", \"Lạng SÆ¡n\", \"Là o Cai\", \"Long An\", \"Nam Äịnh\", \"Nghệ An\", \"Ninh Bình\", \"Ninh Thuáºn\", \"Phú Thá»\", \"Phú Yên\", \"Quảng Bình\", \"Quảng Nam\", \"Quảng Ngãi\", \"Quảng Ninh\", \"Quảng Trị\", \"Sóc Trăng\", \"SÆ¡n La\", \"Tây Ninh\", \"Thái Bình\", \"Thái Nguyên\", \"Thanh Hóa\", \"Thừa Thiên-Huế\", \"Tiá»n Giang\", \"Trà Vinh\", \"Tuyên Quang\", \"VÄ©nh Long\", \"VÄ©nh Phúc\", \"Yên Bái\"]\r\n }, {name: \"Virgin Islands (British)\", states: []}, {\r\n name: \"Virgin Islands (US)\",\r\n states: [\"Saint Croix\", \"Saint John\", \"Saint Thomas\"]\r\n }, {name: \"Wallis and Futuna Islands\", states: []}, {name: \"Western Sahara\", states: []}, {\r\n name: \"Yemen\",\r\n states: [\"'Adan\", \"'Amran\", \"Abyan\", \"Al Bayda'\", \"Al Hudaydah\", \"Al Jawf\", \"Al Mahrah\", \"Al Mahwit\", \"Amanat Al Asimah\", \"Dhamar\", \"Hadhramaut\", \"Hajjah\", \"Ibb\", \"Lahij\", \"Ma'rib\", \"Raymah\", \"Saada\", \"Sana'a\", \"Shabwah\", \"Socotra\", \"Ta'izz\"]\r\n }, {\r\n name: \"Zambia\",\r\n states: [\"Central Province\", \"Copperbelt Province\", \"Eastern Province\", \"Luapula Province\", \"Lusaka Province\", \"Muchinga Province\", \"Northern Province\", \"Northwestern Province\", \"Southern Province\", \"Western Province\"]\r\n }, {\r\n name: \"Zimbabwe\",\r\n states: [\"Bulawayo Province\", \"Harare Province\", \"Manicaland\", \"Mashonaland Central Province\", \"Mashonaland East Province\", \"Mashonaland West Province\", \"Masvingo Province\", \"Matabeleland North Province\", \"Matabeleland South Province\", \"Midlands Province\"]\r\n }],\r\n states: {\r\n us: [\r\n {\r\n name: \"Alabama\",\r\n abbreviation: \"AL\"\r\n },\r\n {\r\n name: \"Alaska\",\r\n abbreviation: \"AK\"\r\n },\r\n {\r\n name: \"Arkansas\",\r\n abbreviation: \"AR\"\r\n },\r\n {\r\n name: \"American Samoa\",\r\n abbreviation: \"AS\"\r\n },\r\n {\r\n name: \"Arizona\",\r\n abbreviation: \"AZ\"\r\n },\r\n\r\n {\r\n name: \"California\",\r\n abbreviation: \"CA\"\r\n },\r\n {\r\n name: \"Colorado\",\r\n abbreviation: \"CO\"\r\n },\r\n {\r\n name: \"Connecticut\",\r\n abbreviation: \"CT\"\r\n },\r\n {\r\n name: \"District Of Columbia\",\r\n abbreviation: \"DC\"\r\n },\r\n {\r\n name: \"Delaware\",\r\n abbreviation: \"DE\"\r\n },\r\n {\r\n name: \"Florida\",\r\n abbreviation: \"FL\"\r\n },\r\n {\r\n name: \"Federated States Of Micronesia\",\r\n abbreviation: \"FM\"\r\n },\r\n {\r\n name: \"Georgia\",\r\n abbreviation: \"GA\"\r\n },\r\n {\r\n name: \"Guam\",\r\n abbreviation: \"GU\"\r\n },\r\n {\r\n name: \"Hawaii\",\r\n abbreviation: \"HI\"\r\n },\r\n {\r\n name: \"Iowa\",\r\n abbreviation: \"IA\"\r\n },\r\n {\r\n name: \"Idaho\",\r\n abbreviation: \"ID\"\r\n },\r\n {\r\n name: \"Illinois\",\r\n abbreviation: \"IL\"\r\n },\r\n {\r\n name: \"Indiana\",\r\n abbreviation: \"IN\"\r\n },\r\n {\r\n name: \"Kansas\",\r\n abbreviation: \"KS\"\r\n },\r\n {\r\n name: \"Kentucky\",\r\n abbreviation: \"KY\"\r\n },\r\n {\r\n name: \"Louisiana\",\r\n abbreviation: \"LA\"\r\n },\r\n {\r\n name: \"Massachusetts\",\r\n abbreviation: \"MA\"\r\n },\r\n {\r\n name: \"Maryland\",\r\n abbreviation: \"MD\"\r\n },\r\n {\r\n name: \"Maine\",\r\n abbreviation: \"ME\"\r\n },\r\n {\r\n name: \"Marshall Islands\",\r\n abbreviation: \"MH\"\r\n },\r\n {\r\n name: \"Michigan\",\r\n abbreviation: \"MI\"\r\n },\r\n {\r\n name: \"Minnesota\",\r\n abbreviation: \"MN\"\r\n },\r\n {\r\n name: \"Missouri\",\r\n abbreviation: \"MO\"\r\n },\r\n {\r\n name: \"Mississippi\",\r\n abbreviation: \"MS\"\r\n },\r\n {\r\n name: \"Montana\",\r\n abbreviation: \"MT\"\r\n },\r\n {\r\n name: \"North Carolina\",\r\n abbreviation: \"NC\"\r\n },\r\n {\r\n name: \"North Dakota\",\r\n abbreviation: \"ND\"\r\n },\r\n {\r\n name: \"Nebraska\",\r\n abbreviation: \"NE\"\r\n },\r\n {\r\n name: \"New Hampshire\",\r\n abbreviation: \"NH\"\r\n },\r\n {\r\n name: \"New Jersey\",\r\n abbreviation: \"NJ\"\r\n },\r\n {\r\n name: \"New Mexico\",\r\n abbreviation: \"NM\"\r\n },\r\n {\r\n name: \"Nevada\",\r\n abbreviation: \"NV\"\r\n },\r\n {\r\n name: \"New York\",\r\n abbreviation: \"NY\"\r\n },\r\n {\r\n name: \"Northern Mariana Islands\",\r\n abbreviation: \"MP\"\r\n },\r\n {\r\n name: \"Ohio\",\r\n abbreviation: \"OH\"\r\n },\r\n {\r\n name: \"Oklahoma\",\r\n abbreviation: \"OK\"\r\n },\r\n {\r\n name: \"Oregon\",\r\n abbreviation: \"OR\"\r\n },\r\n {\r\n name: \"Pennsylvania\",\r\n abbreviation: \"PA\"\r\n },\r\n {\r\n name: \"Puerto Rico\",\r\n abbreviation: \"PR\"\r\n },\r\n {\r\n name: \"Palau\",\r\n abbreviation: \"PW\"\r\n },\r\n {\r\n name: \"Rhode Island\",\r\n abbreviation: \"RI\"\r\n },\r\n {\r\n name: \"South Carolina\",\r\n abbreviation: \"SC\"\r\n },\r\n {\r\n name: \"South Dakota\",\r\n abbreviation: \"SD\"\r\n },\r\n {\r\n name: \"Tennessee\",\r\n abbreviation: \"TN\"\r\n },\r\n {\r\n name: \"Texas\",\r\n abbreviation: \"TX\"\r\n },\r\n {\r\n name: \"Utah\",\r\n abbreviation: \"UT\"\r\n },\r\n {\r\n name: \"Virginia\",\r\n abbreviation: \"VA\"\r\n },\r\n {\r\n name: \"Virgin Islands\",\r\n abbreviation: \"VI\"\r\n },\r\n {\r\n name: \"Vermont\",\r\n abbreviation: \"VT\"\r\n },\r\n {\r\n name: \"Washington\",\r\n abbreviation: \"WA\"\r\n },\r\n {\r\n name: \"Wisconsin\",\r\n abbreviation: \"WI\"\r\n },\r\n {\r\n name: \"West Virginia\",\r\n abbreviation: \"WV\"\r\n },\r\n {\r\n name: \"Wyoming\",\r\n abbreviation: \"WY\"\r\n }\r\n ],\r\n ca: [{\r\n name: 'Alberta',\r\n abbreviation: 'AB'\r\n }, {\r\n name: 'British Columbia',\r\n abbreviation: 'BC'\r\n }, {\r\n name: 'Manitoba',\r\n abbreviation: 'MB'\r\n }, {\r\n name: 'New Brunswick',\r\n abbreviation: 'NB'\r\n }, {\r\n name: 'Newfoundland and Labrador',\r\n abbreviation: 'NL'\r\n }, {\r\n name: 'Northwest Territories',\r\n abbreviation: 'NT'\r\n }, {\r\n name: 'Nova Scotia',\r\n abbreviation: 'NS'\r\n }, {\r\n name: 'Nunavut',\r\n abbreviation: 'NU'\r\n }, {\r\n name: 'Ontario',\r\n abbreviation: 'ON'\r\n }, {\r\n name: 'Prince Edward Island',\r\n abbreviation: 'PE'\r\n }, {\r\n name: 'Quebec',\r\n abbreviation: 'QC'\r\n }, {\r\n name: 'Saskatchewan',\r\n abbreviation: 'SK'\r\n }, {\r\n name: 'Yukon Territory',\r\n abbreviation: 'YT'\r\n }]\r\n },\r\n statusCodes: {\r\n GONE: 410\r\n }\r\n};\r\n\r\nPJQ.constants.colors = {\r\n BLUE: '#007bff',\r\n INDIGO: '#6610f2',\r\n PURPLE: '#6f42c1',\r\n PINK: '#e83e8c',\r\n RED: '#dc3545',\r\n ORANGE: '#fd7e14',\r\n YELLOW: '#ffc107',\r\n GREEN: '#4CAF50',\r\n TEAL: '#20c997',\r\n CYAN: '#17a2b8',\r\n WHITE: '#fff',\r\n GRAY: '#6c757d',\r\n DARK: '#343a40',\r\n BLACK: \"#000000\"\r\n};\r\n\r\nPJQ.constants.navigation = {\r\n categories: {\r\n FIELD_TOOLS: 1,\r\n BIDDING: 2,\r\n JOB_COSTING: 3\r\n },\r\n categoryNames: {\r\n 1: 'Field Tools',\r\n 2: 'Bidding',\r\n 3: 'Job Costing'\r\n }\r\n}\r\n\r\nPJQ.constants.bidFormHelpers = {\r\n lineItemTypes: [\r\n {name: \"Sum\", abbreviation: \"Sum\"},\r\n {name: \"Each\", abbreviation: \"Ea.\"},\r\n {name: \"Square Feet\", abbreviation: \"Sq.Ft.\"},\r\n {name: \"Linear Feet\", abbreviation: \"Ln.Ft.\"},\r\n {name: \"Cubic Feet\", abbreviation: \"Cu.Ft.\"},\r\n {name: \"Square Yards\", abbreviation: \"Sq.Yd.\"},\r\n {name: \"Linear Yards\", abbreviation: \"Ln.Yd.\"},\r\n {name: \"Cubic Yards\", abbreviation: \"Cu.Yd.\"},\r\n {name: \"Acres\", abbreviation: \"Acres\"},\r\n {name: \"Hours\", abbreviation: \"Hrs\"},\r\n {name: \"Days\", abbreviation: \"Days\"},\r\n {name: \"Pounds\", abbreviation: \"Lbs.\"},\r\n {name: \"Tons\", abbreviation: \"Tons\"}\r\n ],\r\n acknowledgementTypes: [\r\n \"Yes/No\",\r\n \"Text\",\r\n \"Money\",\r\n \"Numeric\",\r\n \"Single Choice\",\r\n \"Multiple Choice\",\r\n \"Date\",\r\n \"Date/Time\"\r\n ],\r\n bondingTypes: [\r\n \"Yes/No\",\r\n \"Text\",\r\n \"Money\",\r\n \"Numeric\",\r\n \"Single Choice\",\r\n \"Multiple Choice\",\r\n \"Date\",\r\n \"Date/Time\"\r\n ],\r\n certificationTypes: [\r\n \"Yes/No\",\r\n \"Text\",\r\n \"Money\",\r\n \"Numeric\",\r\n \"Single Choice\",\r\n \"Multiple Choice\",\r\n \"Date\",\r\n \"Date/Time\"\r\n ],\r\n laborRateTypes: [\r\n \"Yes/No\",\r\n \"Text\",\r\n \"Money\",\r\n \"Numeric\",\r\n \"Single Choice\",\r\n \"Multiple Choice\",\r\n \"Date\",\r\n \"Date/Time\"\r\n ]\r\n};\r\n\r\nPJQ.constants.primeContracts = {\r\n primeContractStatus: {\r\n DRAFT: 1,\r\n OUT_FOR_BID: 2,\r\n OUT_FOR_SIGNATURE: 3,\r\n APPROVED: 4,\r\n COMPLETE: 5,\r\n TERMINATED: 6\r\n },\r\n primeContractStatusNames: {\r\n 1: 'Draft',\r\n 2: 'Out for Bid',\r\n 3: 'Out for Signature',\r\n 4: 'Approved',\r\n 5: 'Complete',\r\n 6: 'Terminated'\r\n },\r\n changeOrderStatus: {\r\n DRAFT: 0,\r\n NO_CHARGE: 1,\r\n IN_REVIEW: 2,\r\n NOT_PRICING: 3,\r\n PRICING: 4,\r\n NOT_PROCEEDING: 5,\r\n PROCEEDING: 6,\r\n REVISED: 7,\r\n APPROVED: 8,\r\n REJECTED: 9,\r\n VOID: 10\r\n },\r\n primeContractStatusBuckets: {\r\n PENDING: {\r\n name: \"Pending\",\r\n statuses: [2, 3]\r\n },\r\n PROJECTED: {\r\n name: \"Projected\",\r\n statuses: [2, 3, 4, 5]\r\n },\r\n APPROVED: {\r\n name: \"Approved\",\r\n statuses: [4, 5]\r\n }\r\n },\r\n changeOrderStatusNames: {\r\n 0: 'Draft',\r\n 1: 'No Charge',\r\n 2: 'In Review',\r\n 3: 'Not Pricing',\r\n 4: 'Pricing',\r\n 5: 'Not Proceeding',\r\n 6: 'Proceeding',\r\n 7: 'Revised',\r\n 8: 'Approved',\r\n 9: 'Rejected',\r\n 10: 'Void'\r\n },\r\n changeOrderStatusBuckets: {\r\n PENDING: {\r\n name: \"Pending\",\r\n statuses: [2, 4, 6, 7, 9]\r\n },\r\n PROJECTED: {\r\n name: \"Projected\",\r\n statuses: [2, 4, 6, 7, 8]\r\n },\r\n APPROVED: {\r\n name: \"Approved\",\r\n statuses: [8]\r\n }\r\n },\r\n view: {\r\n PRIME_CONTRACTS: \"primecontracts\",\r\n CHANGE_ORDERS: \"changeorders\"\r\n },\r\n filterType: {\r\n PRIME_CONTRACT_STATUS_FILTER: \"primeContractStatusFilter\"\r\n },\r\n changeOrderFilterType: {\r\n STATUS_FILTER: \"statusFilter\"\r\n }\r\n}\r\n\r\nPJQ.constants.financeCoreFields = {\r\n primeContacts: {\r\n primeContract: [\r\n {\r\n name: \"Number\",\r\n fieldName: \"number\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Default Work Retainage\",\r\n fieldName: \"defaultWorkRetainagePercent\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Default Material Retainage\",\r\n fieldName: \"defaultMaterialRetainagePercent\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Terms\",\r\n fieldName: \"termsId\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Description\",\r\n fieldName: \"description\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Start Date\",\r\n fieldName: \"startOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Estimated Completion Date\",\r\n fieldName: \"estimatedCompleteOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Substantial Completion Date\",\r\n fieldName: \"substantialCompleteOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Actual Completion Date\",\r\n fieldName: \"actualCompleteOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Contract Date\",\r\n fieldName: \"contractOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Signed Contract Received Date\",\r\n fieldName: \"signedContractOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Letter of Intent Date\",\r\n fieldName: \"letterOfIntentOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Approval Letter Date\",\r\n fieldName: \"approvalLetterOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Issued On Date\",\r\n fieldName: \"issuedOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Execution Date\",\r\n fieldName: \"executedOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Returned Date\",\r\n fieldName: \"returnedOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Contract Termination Date\",\r\n fieldName: \"contractTerminatedOn\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Inclusions\",\r\n fieldName: \"inclusions\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Exclusions\",\r\n fieldName: \"exclusions\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Signed Documents\",\r\n fieldName: \"signedDocumentAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Executed Documents\",\r\n fieldName: \"executedDocumentAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\",\r\n isVisible: true,\r\n isRequired: false\r\n }\r\n ],\r\n changeOrder: [\r\n {\r\n name: \"Reviewer\",\r\n fieldName: \"reviewer\"\r\n },\r\n {\r\n name: \"Received From\",\r\n fieldName: \"receivedFromId\"\r\n },\r\n {\r\n name: \"Number\",\r\n fieldName: \"number\"\r\n },\r\n {\r\n name: \"Executed\",\r\n fieldName: \"executed\"\r\n },\r\n {\r\n name: \"Field Change\",\r\n fieldName: \"fieldChange\"\r\n },\r\n {\r\n name: \"Paid In Full\",\r\n fieldName: \"paidInFull\"\r\n },\r\n {\r\n name: \"Change Reason\",\r\n fieldName: \"changeReason\"\r\n },\r\n {\r\n name: \"Invoiced Date\",\r\n fieldName: \"invoicedDate\"\r\n },\r\n {\r\n name: \"Due Date\",\r\n fieldName: \"dueDate\"\r\n },\r\n {\r\n name: \"Description\",\r\n fieldName: \"description\"\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\"\r\n }\r\n ]\r\n },\r\n commitments: {\r\n commitment: [\r\n {\r\n name: \"Invoice Contact\",\r\n fieldName: \"invoiceContactId\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Number\",\r\n fieldName: \"number\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Title\",\r\n fieldName: \"title\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Default Work Retainage\",\r\n fieldName: \"defaultWorkRetainagePercent\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Default Material Retainage\",\r\n fieldName: \"defaultMaterialRetainagePercent\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Ship To\",\r\n fieldName: \"shipToId\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Bill To\",\r\n fieldName: \"billToId\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Terms\",\r\n fieldName: \"termsId\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Description\",\r\n fieldName: \"description\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Start Date\",\r\n fieldName: \"startDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Estimated Completion Date\",\r\n fieldName: \"estimatedCompletionDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Actual Completion Date\",\r\n fieldName: \"actualCompletionDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Contract Date\",\r\n fieldName: \"contractDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Signed Contract Received Date\",\r\n fieldName: \"signedContractReceivedDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Letter of Intent Date\",\r\n fieldName: \"letterOfIntentDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Approval Letter Date\",\r\n fieldName: \"approvalLetterDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Issued On Date\",\r\n fieldName: \"issuedOnDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Execution Date\",\r\n fieldName: \"executionDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Returned Date\",\r\n fieldName: \"returnedDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Inclusions\",\r\n fieldName: \"inclusions\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Exclusions\",\r\n fieldName: \"exclusions\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Certificate of Insurance\",\r\n fieldName: \"coiAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Delivery Date\",\r\n fieldName: \"deliveryDate\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Payment Terms\",\r\n fieldName: \"paymentTerms\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Shipping Terms\",\r\n fieldName: \"shipVia\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"W9\",\r\n fieldName: \"w9Attachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Lien Waivers\",\r\n fieldName: \"lienWaiverAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Signed Documents\",\r\n fieldName: \"signedDocumentAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Affidavits\",\r\n fieldName: \"affidavitAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Executed Documents\",\r\n fieldName: \"executedDocumentAttachments\",\r\n isVisible: true,\r\n isRequired: false\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\",\r\n isVisible: true,\r\n isRequired: false\r\n }\r\n ],\r\n changeOrder: [\r\n {\r\n name: \"Reviewer\",\r\n fieldName: \"reviewer\"\r\n },\r\n {\r\n name: \"Received From\",\r\n fieldName: \"receivedFromId\"\r\n },\r\n {\r\n name: \"Number\",\r\n fieldName: \"number\"\r\n },\r\n {\r\n name: \"Executed\",\r\n fieldName: \"executed\"\r\n },\r\n {\r\n name: \"Field Change\",\r\n fieldName: \"fieldChange\"\r\n },\r\n {\r\n name: \"Paid In Full\",\r\n fieldName: \"paidInFull\"\r\n },\r\n {\r\n name: \"Change Reason\",\r\n fieldName: \"changeReason\"\r\n },\r\n {\r\n name: \"Invoiced Date\",\r\n fieldName: \"invoicedDate\"\r\n },\r\n {\r\n name: \"Due Date\",\r\n fieldName: \"dueDate\"\r\n },\r\n {\r\n name: \"Description\",\r\n fieldName: \"description\"\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\"\r\n }\r\n ]\r\n },\r\n invoices: {\r\n payableInvoice: [\r\n {\r\n name: \"Invoice #\",\r\n fieldName: \"number\"\r\n },\r\n {\r\n name: \"Paid\",\r\n fieldName: \"paid\"\r\n },\r\n {\r\n name: \"Notes\",\r\n fieldName: \"notes\"\r\n },\r\n {\r\n name: \"Certificate of Insurance\",\r\n fieldName: \"coiAttachments\"\r\n },\r\n {\r\n name: \"W9\",\r\n fieldName: \"w9Attachments\"\r\n },\r\n {\r\n name: \"Lien Waivers\",\r\n fieldName: \"lienWaiverAttachments\"\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\"\r\n }\r\n ],\r\n receivableInvoice: [\r\n {\r\n name: \"Invoice #\",\r\n fieldName: \"number\"\r\n },\r\n {\r\n name: \"Paid\",\r\n fieldName: \"paid\"\r\n },\r\n {\r\n name: \"Notes\",\r\n fieldName: \"notes\"\r\n },\r\n\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\"\r\n }\r\n ]\r\n },\r\n directCosts: {\r\n directCost: [\r\n {\r\n name: \"Vendor\",\r\n fieldName: \"vendor\"\r\n },\r\n {\r\n name: \"Reported By\",\r\n fieldName: \"reportedBy\"\r\n },\r\n {\r\n name: \"Type\",\r\n fieldName: \"type\"\r\n },\r\n {\r\n name: \"Applied On\",\r\n fieldName: \"appliedOn\"\r\n },\r\n {\r\n name: \"Received On\",\r\n fieldName: \"receivedOn\"\r\n },\r\n {\r\n name: \"Paid On\",\r\n fieldName: \"paidOn\"\r\n },\r\n {\r\n name: \"Terms\",\r\n fieldName: \"terms\"\r\n },\r\n {\r\n name: \"Description\",\r\n fieldName: \"description\"\r\n },\r\n {\r\n name: \"Attachments\",\r\n fieldName: \"attachments\"\r\n }\r\n ]\r\n }\r\n};\r\n\r\nPJQ.constants.primeContractChangeOrders = {\r\n status: {\r\n DRAFT: 1,\r\n NO_CHARGE: 2,\r\n IN_REVIEW: 3,\r\n NOT_PRICING: 4,\r\n PRICING: 5,\r\n NOT_PROCEEDING: 6,\r\n PROCEEDING: 7,\r\n REVISED: 8,\r\n APPROVED: 9,\r\n REJECTED: 10,\r\n VOID: 11\r\n },\r\n statusNames: {\r\n 1: 'Draft',\r\n 2: 'No Charge',\r\n 3: 'In Review',\r\n 4: 'Not Pricing',\r\n 5: 'Pricing',\r\n 6: 'Not Proceeding',\r\n 7: 'Proceeding',\r\n 8: 'Revised',\r\n 9: 'Approved',\r\n 10: 'Rejected',\r\n 11: 'Void'\r\n }\r\n};\r\n\r\nPJQ.constants.invoicing = {\r\n payableInvoiceStatus: {\r\n DRAFT: 0,\r\n REVIEWING: 1,\r\n REVISE: 2,\r\n APPROVED: 3,\r\n COMPLETE: 4,\r\n VOID: 5\r\n },\r\n payableInvoiceStatusNames: {\r\n 0: 'Draft',\r\n 1: 'Under Review',\r\n 2: 'Revise',\r\n 3: 'Approved',\r\n 4: 'Complete',\r\n 5: 'Void'\r\n },\r\n inviteStatus: {\r\n 'DECLINED': 0,\r\n 'ACCEPTED': 1\r\n },\r\n receivableInvoiceStatus: {\r\n DRAFT: 0,\r\n REVIEWING: 1,\r\n REVISE: 2,\r\n APPROVED: 3,\r\n COMPLETE: 4\r\n },\r\n receivableInvoiceStatusNames: {\r\n 0: 'Draft',\r\n 1: 'Under Review',\r\n 2: 'Revise',\r\n 3: 'Approved',\r\n 4: 'Complete'\r\n },\r\n filterType: {\r\n STATUS_FILTER: 'statusFilter'\r\n },\r\n view: {\r\n PAYABLE_INVOICES: \"payableinvoices\",\r\n RECEIVABLE_INVOICES: \"receivableinvoices\"\r\n },\r\n paymentMethods: [\r\n 'Credit Card',\r\n 'Check',\r\n 'Electronic'\r\n ]\r\n};\r\n\r\nPJQ.constants.directcosts = {\r\n directCostType: {\r\n EXPENSE: 1,\r\n INVOICE: 2,\r\n PAYROLL: 3\r\n },\r\n directCostTypeNames: {\r\n 1: 'Expense',\r\n 2: 'Invoice',\r\n 3: 'Payroll'\r\n },\r\n directCostStatus: {\r\n DRAFT: 1,\r\n PENDING: 2,\r\n REVISE: 3,\r\n APPROVED: 4\r\n },\r\n directCostStatusNames: {\r\n 1: 'Draft',\r\n 2: 'Pending',\r\n 3: 'Revise',\r\n 4: 'Approved'\r\n },\r\n filterType: {\r\n DIRECT_COST_TYPE_FILTER: 'directCostTypeFilter',\r\n DIRECT_COST_STATUS_FILTER: 'directCostStatusFilter'\r\n },\r\n view: {\r\n DIRECT_COSTS: \"directcosts\"\r\n }\r\n};\r\n\r\nPJQ.constants.projectContacts = {\r\n bidStatus: {\r\n PENDING: 'PENDING',\r\n DECLINE: 'DECLINE',\r\n ACCEPT: 'ACCEPT',\r\n BID_RECEIVED: 'BID RECEIVED',\r\n AWARDED: 'AWARDED'\r\n }\r\n};\r\n\r\nPJQ.constants.markup = {\r\n requiredAst: '<span class=\"text-danger\">*</span>'\r\n};\r\n\r\nPJQ.constants.cookies = {\r\n ACTION_ITEM_ORDER_COOKIE: \"11236b4e-6da4-4576-98f5-981e8a30b385\",\r\n CLOSE_PREQUAL_HELP_ALERT: \"4343fee1-dcf7-487d-bf4d-7ab33976eef8\",\r\n NOTIFY_CONTACT_GROUPS_REPORTED: \"2f1c6d7f-1f6a-4a8e-9bee-aaa4153e1116\",\r\n NOTIFY_DAILY_REPORTS_PROJECT_START_END: \"0a71555e-3244-4e9d-b94c-cbf4234d56d6\",\r\n PROJECT_INVITES_FAVORITE_FILTER: \"PROJECT_INVITES_FAVORITE_FILTER\",\r\n PROJECT_INVITES_CURRENT_BIDDING_FILTER: \"PROJECT_INVITES_CURRENT_BIDDING_FILTER\",\r\n PROJECT_INVITES_ORDER_COOKIE: \"091ca838-72c2-4f0c-a219-90a65159c75e\",\r\n SCHEDULE_TEMPLATE_DATES_ORIGIN: \"f100ed94-6a16-40c9-8ace-7718a2c0ee4b\",\r\n RFI_PAGE_LENGTH: \"3F156499-1584-4152-9BE7-216A933B03A5\",\r\n SCHEDULE_TASK_LIST_GROUP_BY: \"3F156499-1584-4152-9BE7-216A933B03A5\",\r\n SUBSCRIPTION_FREE_TRIAL: \"97ebfdec-ba47-4c21-84a7-1009f4a4cb32\",\r\n SUBSCRIPTION_EXPIRES_ALERT: \"c649a742-859f-4096-b6cf-f9aa57951b43\",\r\n SUBMITTAL_ORDER_COOKIE: \"f78a796d-cfda-4ba1-acf3-1ae2f8c15446\",\r\n PUNCHLIST_ORDER_COOKIE: \"f3e968f2-bcaf-49a1-9cc1-cceae3824ca8\",\r\n INSPECTIONS_ORDER_COOKIE: \"dbf2eec6-e4da-442b-9795-118d0ff99966\",\r\n INSPECTIONS_GROUP_BY_KEY: \"inspections_group_by\",\r\n PRODUCTION_QUANTITIES_ORDER_COOKIE: \"b2f32e3a-c94f-4bd3-b771-e96905bcca6b\",\r\n NOTIFY_PREQUAL_VIEW_REQUESTED: \"cf6adedb-ca86-4477-86bb-4728679b2041\",\r\n NOTIFY_DRAWING_SHARE_PREVENT_EXPIRE: \"65524272-cb10-40ab-a22f-952ce70c451f\",\r\n ALERT_DRAWING_SHARE_PREVENT_EXPIRE: \"65524272-cb10-40ab-a22f-952ce70c451f\",\r\n ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS: \"ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS\",\r\n SCHEDULE_GANTT_SORT_COLUMN: \"40a8d697-9043-4fbb-ab82-2c74e80a3378\",\r\n SCHEDULE_GANTT_SORT_DIRECTION: \"6c4475a4-8dbc-475d-8517-d8573e5024c0\",\r\n SCHEDULE_TASK_LIST_ORDER: \"b834b7c5-8ddb-49bd-a972-6f57bb4e32e0\",\r\n PROJECT_CONTACT_LIST_PAGE_LENGTH: \"4f97ff02-e73d-437a-abec-d8bef4d4a7dc\",\r\n COMMITMENT_LIST_COLUMNS_WIDTH: \"998db2bb-00e1-4516-859f-47b06c540046\",\r\n MY_PROJECTS_LIST_COLUMNS_WIDTH: \"8efccf80-0aa4-46a0-89cf-2eadca8ca897\",\r\n PROJECT_INVITES_LIST_COLUMNS_WIDTH: \"06b506e3-5006-43a3-a5bd-0bf6e7cb9077\",\r\n PRODUCTION_QUANTITIES_COLUMNS_WIDTH: \"7bd78c30-b8d7-4810-a3f0-c98dea1e52dd\"\r\n};\r\n\r\nPJQ.constants.changeRequests = {\r\n changeRequestStatus: {\r\n DRAFT: 0,\r\n NO_CHARGE: 1,\r\n IN_REVIEW: 2,\r\n NOT_PRICING: 3,\r\n PRICING: 4,\r\n NOT_PROCEEDING: 5,\r\n PROCEEDING: 6,\r\n REVISED: 7,\r\n APPROVED: 8,\r\n REJECTED: 9,\r\n VOID: 10\r\n },\r\n changeRequestStatusNames: {\r\n 0: 'Draft',\r\n 1: 'No Charge',\r\n 2: 'In Review',\r\n 3: 'Not Pricing',\r\n 4: 'Pricing',\r\n 5: 'Not Proceeding',\r\n 6: 'Proceeding',\r\n 7: 'Revised',\r\n 8: 'Approved',\r\n 9: 'Rejected',\r\n 10: 'Void'\r\n },\r\n scope: {\r\n OWNER_CHANGE: 0,\r\n INTERNAL: 1\r\n },\r\n scopeNames: {\r\n 0: 'Owner Change',\r\n 1: 'Internal'\r\n },\r\n revenueSource: {\r\n REVENUE: 0,\r\n MANUAL: 1\r\n },\r\n revenueSourceNames: {\r\n 0: 'Revenue',\r\n 1: 'Manual'\r\n },\r\n filterType: {\r\n STATUS_FILTER: 'statusFilter',\r\n OTHER_FILTER: 'other'\r\n },\r\n view: {\r\n CHANGE_REQUESTS: \"changerequests\"\r\n },\r\n changeRequestStatusBuckets: {\r\n PENDING: {\r\n name: \"Pending\",\r\n statuses: [2, 4, 6, 7, 9]\r\n },\r\n PROJECTED: {\r\n name: \"Projected\",\r\n statuses: [2, 4, 6, 7, 8]\r\n },\r\n APPROVED: {\r\n name: \"Approved\",\r\n statuses: [8]\r\n }\r\n },\r\n};\r\n\r\nPJQ.constants.rfq = {\r\n filterType: {\r\n STATUS_FILTER: 'statusFilter'\r\n }, rfqStatus: {\r\n DRAFT: 0,\r\n PRICING: 1,\r\n REVIEWING: 2,\r\n REVISE: 3,\r\n APPROVED: 4,\r\n CLOSED: 5\r\n },\r\n rfqStatusNames: {\r\n 0: 'Draft',\r\n 1: 'Pricing',\r\n 2: 'Reviewing',\r\n 3: 'Revise',\r\n 4: 'Approved',\r\n 5: 'Closed'\r\n },\r\n view: {\r\n RFQ: \"rfq\"\r\n }\r\n}\r\n\r\nPJQ.constants.commitments = {\r\n commitmentType: {\r\n PURCHASE_ORDER: 1,\r\n SUBCONTRACT: 2\r\n },\r\n commitmentTypeNames: {\r\n 1: 'Purchase Order',\r\n 2: 'Subcontract'\r\n },\r\n commitmentStatus: {\r\n DRAFT: 0,\r\n PURCHASE_ORDER_PROCESSING: 1,\r\n SUBCONTRACT_OUT_FOR_BID: 2,\r\n OUT_FOR_SIGNATURE: 3,\r\n SUBMITTED: 4,\r\n PURCHASE_ORDER_PARTIALLY_RECEIVED: 5,\r\n PURCHASE_ORDER_RECEIVED: 6,\r\n APPROVED: 7,\r\n SUBCONTRACT_COMPLETE: 8,\r\n SUBCONTRACT_TERMINATED: 9,\r\n SUBCONTRACT_VOID: 10,\r\n PURCHASE_ORDER_CLOSED: 11\r\n },\r\n commitmentStatusNames: {\r\n 0: 'Draft',\r\n 1: 'Processing',\r\n 2: 'Out for Bid',\r\n 3: 'Out for Signature',\r\n 4: 'Submitted',\r\n 5: 'Partially Received',\r\n 6: 'Received',\r\n 7: 'Approved',\r\n 8: 'Complete',\r\n 9: 'Terminated',\r\n 10: 'Void',\r\n 11: 'Closed'\r\n },\r\n commitmentStatusBuckets: {\r\n PENDING: {\r\n name: \"Pending\",\r\n statuses: [1, 2, 3, 4, 5, 6]\r\n },\r\n PROJECTED: {\r\n name: \"Projected\",\r\n statuses: [1, 2, 3, 4, 5, 6, 7, 8, 11]\r\n },\r\n COMMITTED: {\r\n name: \"Committed\",\r\n statuses: [7, 8, 11]\r\n }\r\n },\r\n changeOrderStatus: {\r\n DRAFT: 0,\r\n NO_CHARGE: 1,\r\n IN_REVIEW: 2,\r\n NOT_PRICING: 3,\r\n PRICING: 4,\r\n NOT_PROCEEDING: 5,\r\n PROCEEDING: 6,\r\n REVISED: 7,\r\n APPROVED: 8,\r\n REJECTED: 9,\r\n VOID: 10\r\n },\r\n changeOrderStatusNames: {\r\n 0: 'Draft',\r\n 1: 'No Charge',\r\n 2: 'In Review',\r\n 3: 'Not Pricing',\r\n 4: 'Pricing',\r\n 5: 'Not Proceeding',\r\n 6: 'Proceeding',\r\n 7: 'Revised',\r\n 8: 'Approved',\r\n 9: 'Rejected',\r\n 10: 'Void'\r\n },\r\n changeOrderStatusBuckets: {\r\n PENDING: {\r\n name: \"Pending\",\r\n statuses: [2, 4, 6, 7]\r\n },\r\n PROJECTED: {\r\n name: \"Projected\",\r\n statuses: [2, 4, 6, 7, 8]\r\n },\r\n COMMITTED: {\r\n name: \"Committed\",\r\n statuses: [8]\r\n }\r\n },\r\n filterType: {\r\n TYPE_FILTER: 'typeFilter',\r\n STATUS_FILTER: 'statusFilter'\r\n },\r\n changeOrderFilterType: {\r\n STATUS_FILTER: 'statusFilter'\r\n },\r\n view: {\r\n COMMITMENTS: \"commitments\",\r\n CHANGE_ORDERS: \"changeorders\"\r\n },\r\n commitmentNumberTokenDateFormat: {\r\n MMDDYYYY: 0,\r\n MM: 1,\r\n DD: 2,\r\n YY: 3,\r\n YYYY: 4\r\n },\r\n commitmentNumberTokenDateFormatNames: [\r\n 'Full Date',\r\n 'Month',\r\n 'Day',\r\n 'Year 2-Digit',\r\n 'Year'\r\n ],\r\n // TODO: this needs to be moved to the new customField\r\n customFieldType: {\r\n BOOLEAN: 1,\r\n CHOICE: 2,\r\n DATE: 3,\r\n DATETIME: 4,\r\n FILE: 5,\r\n INTEGER: 6,\r\n MONEY: 7,\r\n PERCENT: 8,\r\n TEXT: 9,\r\n TEXTAREA: 10\r\n }\r\n};\r\n\r\nPJQ.constants.regex = {\r\n CURRENCY_NO_SYMBOL: /(\\d)(?=(\\d\\d\\d)+(?!\\d))/g\r\n};\r\n\r\nPJQ.constants.modules = {\r\n APP: 'APP',\r\n GLOBAL: 'GLOBAL',\r\n PROFILE_OLD: 'PJQPROFILE',\r\n PROFILE: 'PROFILE',\r\n ACTIONITEMS: 'ACTIONITEMS',\r\n BIDFORMS: 'BIDFORMS',\r\n PJQADDRESSBOOK: 'PJQADDRESSBOOK',\r\n ADDRESSBOOK: 'ADDRESSBOOK',\r\n PUBLICPROJECTS: 'PJQPUBLICPROJECTS',\r\n PROJECTWALL: 'PROJECTWALL',\r\n PROJECTWALLADMIN: 'PJQPROJECTWALLADMIN',\r\n PROJECTWALLSUB: 'PJQPROJECTWALLSUB',\r\n PROJECTLIST: 'PROJECTLIST',\r\n REPORTS: 'REPORTS',\r\n RFI: 'RFI',\r\n RESOURCES: 'RESOURCES',\r\n SUBMITTALS: 'SUBMITTALS',\r\n FIELDREPORTS: 'FIELDREPORTS',\r\n MARKUPTOOL: 'MARKUPTOOL',\r\n PUNCHLISTS: 'PUNCHLISTS',\r\n DAILYREPORTS: 'DAILYREPORTS',\r\n LOGIN: 'PJQLOGIN',\r\n ACCESS_KEY_LOGIN: 'PJQACCESSKEYLOGIN',\r\n PJQSETTINGS: 'PJQSETTINGS',\r\n SETTINGS: 'SETTINGS',\r\n SUBMITTALS: 'SUBMITTALS',\r\n PANTERASCHEDULE: 'PANTERASCHEDULE',\r\n DRAWINGS: 'DRAWINGS',\r\n BIDFILER: 'PJQBIDFILER',\r\n PRINTONDEMAND: 'PJQPRINTONDEMAND',\r\n PJQREGISTRATION: 'PJQREGISTRATION',\r\n FILES: 'FILES',\r\n SCHEDULE: 'SCHEDULE',\r\n TIMECARDS: 'TIMECARDS',\r\n INVOICES: 'INVOICES',\r\n BUDGET: 'BUDGET',\r\n COMMITMENTS: 'COMMITMENTS',\r\n PRIMECONTRACTS: 'PRIMECONTRACTS',\r\n DIRECTCOSTS: 'DIRECTCOSTS',\r\n INVOICING: 'INVOICING',\r\n MEETINGS: 'MEETINGS',\r\n INSPECTIONS: 'INSPECTIONS'\r\n};\r\n\r\nPJQ.constants.errorCodes = {\r\n DELETED_CONTACT: 100\r\n};\r\n\r\nPJQ.constants.auth = {\r\n minUsernameLength: 5,\r\n minPasswordLength: 5,\r\n login: {\r\n errorText: {\r\n INVALID_PASSWORD: 'The username or password you entered was incorrect.',\r\n USER_NOT_FOUND: 'The username you entered doesn\\'t exist.'\r\n }\r\n }\r\n};\r\n\r\nPJQ.constants.screenings = {\r\n statuses: {\r\n WAITING: 1,\r\n UNUSED: 2,\r\n IN_PROCESS: 3,\r\n INCOMPLETE: 4,\r\n FEEDBACK_REQUIRED: 5,\r\n EXPIRED: 6,\r\n COMPLETE: 7,\r\n NOT_APPLICABLE: 8\r\n }\r\n};\r\nPJQ.constants.contacts = {\r\n contexts: {\r\n PARTICIPANTS: \"PARTICIPANTS\",\r\n CONTACTS: \"CONTACTS\",\r\n PROJECTCONTACTS: \"PROJECTCONTACTS\",\r\n USERS: \"USERS\",\r\n COMPANIES: \"COMPANIES\"\r\n }\r\n};\r\n\r\nPJQ.constants.customFields = {\r\n fieldTypes: {\r\n INT: 'INT',\r\n PERCENT: 'PERCENT',\r\n MONEY: 'MONEY',\r\n CALC: 'CALC',\r\n PHONE: 'PHONE',\r\n TEXT: 'TEXT',\r\n TEXTAREA: 'TEXTAREA',\r\n BOOL: 'BOOL',\r\n CHOICE: 'CHOICE',\r\n GRID: 'GRID',\r\n GROUPSELECT: 'GROUPSELECT',\r\n REGIONSELECT: 'REGIONSELECT',\r\n DOWNLOAD: 'DOWNLOAD',\r\n UPLOAD: 'FILE',\r\n DATE: 'DATE',\r\n DATETIME: 'DATETIME',\r\n CUSTOMGRID: 'CUSTOMGRID',\r\n UPLOADV2: 'UPLOADV2'\r\n },\r\n\r\n};\r\n\r\n\r\nPJQ.constants.projects = {\r\n customFields: {\r\n fieldTypes: [\r\n PJQ.constants.customFields.fieldTypes.INT,\r\n PJQ.constants.customFields.fieldTypes.PERCENT,\r\n PJQ.constants.customFields.fieldTypes.MONEY,\r\n PJQ.constants.customFields.fieldTypes.TEXT,\r\n PJQ.constants.customFields.fieldTypes.TEXTAREA,\r\n PJQ.constants.customFields.fieldTypes.BOOL,\r\n PJQ.constants.customFields.fieldTypes.CHOICE,\r\n PJQ.constants.customFields.fieldTypes.DATE,\r\n PJQ.constants.customFields.fieldTypes.DATETIME\r\n ]\r\n }\r\n};\r\n\r\nPJQ.constants.ordering = {\r\n paperSize: {\r\n FULL: 'FULL SIZE',\r\n HALF: 'HALF SIZE'\r\n },\r\n paper: {\r\n WHITE: 'WHITE BOND',\r\n BLUE: 'BLUE BOND',\r\n GREEN: 'GREEN BOND',\r\n YELLOW: 'YELLOW BOND',\r\n PINK: 'PINK BOND'\r\n },\r\n largeBinding: {\r\n STAPLED: 'STAPLED',\r\n LOOSE: 'LOOSE',\r\n EDGE: 'BINDING EDGE',\r\n PUNCHBIND: 'PUNCH AND BIND'\r\n },\r\n smallBinding: {\r\n STAPLED: 'STAPLED',\r\n LOOSE: 'LOOSE',\r\n CHICAGO: 'CHICAGO SCREW',\r\n GBC: 'GBC PLASTIC COMB'\r\n },\r\n deliveryOptions: {\r\n NEXTMORNING: 'Next Day (Morning)',\r\n NEXTDAY: 'Next Day (Standard)',\r\n TWODAY: 'Two Day',\r\n THREEDAY: 'Three Day'\r\n }\r\n};\r\n\r\nPJQ.constants.general = {\r\n defaultView: {\r\n COMPANY: 'View by Company',\r\n MESSAGE: 'View by Message',\r\n RESPONSE: 'View by Response',\r\n GROUPS: 'View by Groups',\r\n SCOPE: 'View by Scope'\r\n },\r\n defaultTimeZone: {\r\n ALASKAN: 'Alaskan',\r\n ATLANTIC: 'Atlantic',\r\n CENTRAL: 'Central',\r\n EASTERN: 'Eastern',\r\n HAWAIIAN: 'Hawaiian',\r\n MOUNTAIN: 'Mountain',\r\n PACIFIC: 'Pacific'\r\n }\r\n};\r\n\r\nPJQ.constants.time = {\r\n millis: {\r\n ONE_SECOND: 1000,\r\n ONE_MINUTE: 60000,\r\n ONE_HOUR: 3600000,\r\n ONE_DAY: 86400000,\r\n ONE_MONTH: 2592000000,\r\n ONE_YEAR: 31556952000\r\n }\r\n};\r\n\r\nPJQ.constants.files = {\r\n modes: {\r\n PRINT: 'print',\r\n ALT_PRINT: 'altprint',\r\n DOWNLOAD: 'download'\r\n },\r\n zipStatus: {\r\n NEW: 0,\r\n QUEUED: 1,\r\n IN_PROGRESS: 2,\r\n CANCELLED: 3,\r\n FAILED: 4,\r\n COMPLETE: 5,\r\n COMPLETE_ASYNC: 6\r\n },\r\n downloadFrameId: 'pjqDownload',\r\n imageExtensions: ['jpg', 'jpeg', 'png', 'bmp', 'gif']\r\n};\r\n\r\nPJQ.constants.actionItems = {\r\n notificationTypeNames: {\r\n NEW_ITEM: 'Item Created',\r\n STATUS_CHANGE: 'Status Changed',\r\n ASSIGNED: 'Assigned',\r\n NEWCOMMENT: 'Comment Added',\r\n DISTRIBUTE: 'Distribution'\r\n },\r\n statuses: {\r\n NEW: 0,\r\n ASSIGNED: 4,\r\n WORK_COMPLETED: 2,\r\n NOT_RESOLVED: 1,\r\n RESOLVED: 3\r\n },\r\n statusNames: {\r\n 0: 'New',\r\n 1: 'Not Resolved',\r\n 2: 'Work Completed',\r\n 3: 'Resolved',\r\n 4: 'Assigned'\r\n },\r\n statusColors: {\r\n 0: PJQ.constants.colors.GRAY,\r\n 1: PJQ.constants.colors.RED,\r\n 2: PJQ.constants.colors.BLUE,\r\n 3: PJQ.constants.colors.GREEN,\r\n 4: PJQ.constants.colors.PURPLE\r\n },\r\n priorities: {\r\n LOW: 0,\r\n MEDIUM: 1,\r\n HIGH: 2,\r\n CRITICAL: 3\r\n },\r\n priorityNames: {\r\n 0: 'Low',\r\n 1: 'Medium',\r\n 2: 'High',\r\n 3: 'Critical',\r\n },\r\n priorityColors: {\r\n 0: PJQ.constants.colors.GREEN,\r\n 1: PJQ.constants.colors.YELLOW,\r\n 2: PJQ.constants.colors.ORANGE,\r\n 3: PJQ.constants.colors.RED\r\n },\r\n view: {\r\n ACTIONITEMS: \"actionitems\"\r\n }\r\n};\r\n\r\nPJQ.constants.dailyReports = {\r\n statuses: {\r\n NOT_SUBMITTED: 0,\r\n SUBMITTED: 1,\r\n DAY_OFF: 2,\r\n MISSED: 3\r\n },\r\n statusNames: {\r\n 0: 'Not Submitted',\r\n 1: 'Submitted',\r\n 2: 'Day Off',\r\n 3: 'Missed'\r\n },\r\n notificationModes: {\r\n DEFAULT: 1,\r\n PER_USER_DAY: 2,\r\n DISABLED: 3\r\n },\r\n communicationLogs: {\r\n types: {\r\n PHONE: 0,\r\n TEXT: 1,\r\n EMAIL: 2,\r\n IN_PERSON: 3,\r\n CONFERENCE_CALL: 4,\r\n WEB_CONFERENCE: 5\r\n },\r\n typeNames: {\r\n 0: \"Phone Call\",\r\n 1: \"Text Message\",\r\n 2: \"Email\",\r\n 3: \"In Person\",\r\n 4: \"Conference Call\",\r\n 5: \"Web Conference\"\r\n }\r\n },\r\n inspectionLogs: {\r\n statuses: {\r\n REJECTED: 0,\r\n APPROVED: 1\r\n },\r\n statusNames: {\r\n 0: \"Rejected\",\r\n 1: \"Approved\"\r\n }\r\n }\r\n};\r\n\r\nPJQ.constants.meetings = {\r\n meetingStatus: {\r\n DRAFT: 1,\r\n SCHEDULED: 2,\r\n IN_PROGRESS: 3,\r\n CONCLUDED: 4,\r\n CANCELLED: 5\r\n },\r\n meetingStatusNames: {\r\n 1: 'Draft',\r\n 2: 'Scheduled',\r\n 3: 'In Progress',\r\n 4: 'Concluded',\r\n 5: 'Cancelled'\r\n },\r\n meetingAgendaStatus: {\r\n OPEN: 1,\r\n CLOSED: 2,\r\n HALTED: 3\r\n },\r\n meetingAgendaStatusNames: {\r\n 1: 'Open',\r\n 2: 'Closed',\r\n 3: 'Halted'\r\n },\r\n meetingAgendaStatusColors: {\r\n 1: PJQ.constants.colors.GREEN,\r\n 2: PJQ.constants.colors.RED,\r\n 3: PJQ.constants.colors.DARK\r\n },\r\n meetingAgendaPriority: {\r\n LOW: 1,\r\n MEDIUM: 2,\r\n HIGH: 3,\r\n URGENT: 4\r\n },\r\n meetingAgendaPriorityNames: {\r\n 1: 'Low',\r\n 2: 'Medium',\r\n 3: 'High',\r\n 4: 'Urgent'\r\n },\r\n meetingAgendaPriorityColors: {\r\n 1: PJQ.constants.colors.GREEN,\r\n 2: PJQ.constants.colors.YELLOW,\r\n 3: PJQ.constants.colors.RED,\r\n 4: PJQ.constants.colors.DARK\r\n }\r\n}\r\n\r\nPJQ.constants.punchlists = {\r\n notificationTypeNames: {\r\n NEW_ITEM: 'Item Created',\r\n STATUS_CHANGE: 'Status Changed',\r\n ASSIGNED: 'Assigned',\r\n NEWCOMMENT: 'Comment Added',\r\n DISTRIBUTE: 'Distribution'\r\n },\r\n statuses: {\r\n NEW: 0,\r\n NOT_RESOLVED: 1,\r\n WORK_COMPLETED: 2,\r\n RESOLVED: 3,\r\n ASSIGNED: 4\r\n },\r\n statusNames: {\r\n 0: 'New',\r\n 1: 'Not Resolved',\r\n 2: 'Work Completed',\r\n 3: 'Resolved',\r\n 4: 'Assigned'\r\n },\r\n statusColors: {\r\n 0: PJQ.constants.colors.GRAY,\r\n 1: PJQ.constants.colors.RED,\r\n 2: PJQ.constants.colors.BLUE,\r\n 3: PJQ.constants.colors.GREEN,\r\n 4: PJQ.constants.colors.PURPLE\r\n },\r\n priorities: {\r\n LOW: 0,\r\n MEDIUM: 1,\r\n HIGH: 2,\r\n CRITICAL: 3\r\n },\r\n priorityNames: {\r\n 0: 'Low',\r\n 1: 'Medium',\r\n 2: 'High',\r\n 3: 'Critical',\r\n },\r\n priorityColors: {\r\n 0: PJQ.constants.colors.GREEN,\r\n 1: PJQ.constants.colors.YELLOW,\r\n 2: PJQ.constants.colors.ORANGE,\r\n 3: PJQ.constants.colors.RED\r\n },\r\n view: {\r\n PUNCHLISTS: \"punchlists\"\r\n }\r\n};\r\n\r\nPJQ.constants.rfi = {\r\n notificationTypeNames: {\r\n NEW_ITEM: 'Item Opened',\r\n RFIOpen: 'Item Opened',\r\n RFIUpdateDueDate: 'Due Date Updated',\r\n RFIAddDocument: 'Document Added',\r\n RFIAddAssignee: 'Assignee Added',\r\n RFIAddDistribution: 'Dist. Contact Added',\r\n RFIAddResponse: 'Response Added',\r\n RFIClose: 'Item Closed',\r\n Overdue: 'Overdue'\r\n },\r\n statuses: {\r\n DRAFT: 0,\r\n OPEN: 1,\r\n CLOSED: 2,\r\n DISTRIBUTED: 3\r\n },\r\n statusNames: {\r\n 0: 'Draft',\r\n 1: 'Open',\r\n 2: 'Closed',\r\n 3: 'Distributed'\r\n },\r\n statusColors: {\r\n 0: PJQ.constants.colors.GRAY,\r\n 1: PJQ.constants.colors.GREEN,\r\n 2: PJQ.constants.colors.RED,\r\n 3: PJQ.constants.colors.PURPLE\r\n },\r\n view: {\r\n RFIS: \"rfis\"\r\n }\r\n};\r\n\r\nPJQ.constants.submittals = {\r\n notificationTypeNames: {\r\n Created: 'Created',\r\n Attachment: 'Attachment',\r\n Comment: 'Comment',\r\n BallInCourt: 'Ball In Court',\r\n 'Ball In Court': 'Ball In Court',\r\n Approved: 'Approved',\r\n 'File(s) Uploaded': 'File(s) Uploaded',\r\n Rejected: 'Rejected',\r\n Submitted: 'Submitted',\r\n Assigned: 'Assigned',\r\n Overdue: 'Overdue',\r\n Distribute: 'Distribution'\r\n },\r\n errors: {\r\n STATUS_NOT_EXISTS: 'STATUS_NOT_EXISTS'\r\n },\r\n approvalModes: {\r\n UNORDERED: 1,\r\n SEQUENTIAL: 2\r\n },\r\n statusTypeColors: {\r\n 0: PJQ.constants.colors.GRAY,\r\n 1: PJQ.constants.colors.BLUE,\r\n 2: PJQ.constants.colors.GREEN,\r\n 3: PJQ.constants.colors.RED,\r\n 4: PJQ.constants.colors.DARK\r\n },\r\n statusTypes: {\r\n NEW: 0,\r\n SUBMITTED: 1,\r\n APPROVED: 2,\r\n REJECTED: 3,\r\n VOID: 4\r\n },\r\n statusTypeNames: {\r\n 0: 'New',\r\n 1: 'Submitted',\r\n 2: 'Approved',\r\n 3: 'Rejected',\r\n 4: 'Void'\r\n },\r\n view: {\r\n SUBMITTALS: 'submittals'\r\n }\r\n};\r\n\r\nPJQ.constants.schedule = {\r\n notificationTypeNames: {\r\n ASSIGNED: 'Assigned',\r\n SCHEDULE_CHANGE: 'Schedule Changed',\r\n REMINDER: 'Reminder',\r\n COMMENT_ADDED: 'Comment Added',\r\n ATTACHMENT_ADDED: 'Attachment Added',\r\n TASK_COMPLETE: 'Task Complete',\r\n SCHEDULE_UPDATE: 'Schedule Update'\r\n },\r\n dependencyTypes: {\r\n START_START: 'SS',\r\n FINISH_START: 'FS'\r\n },\r\n linkTypes: {\r\n 0: 'FS',\r\n 1: 'SS',\r\n 2: 'FF',\r\n 3: 'SF'\r\n },\r\n views: {\r\n TIMELINE: 'TIMELINE',\r\n CALENDAR: 'CALENDAR',\r\n TASK_LIST: 'TASK_LIST'\r\n },\r\n taskList: {\r\n groupBy: {\r\n DEFAULT: 'DEFAULT',\r\n MONTH: 'MONTH',\r\n WEEK: 'WEEK',\r\n DAY: 'DAY',\r\n ASSIGNEE: 'ASSIGNEE',\r\n GROUP: 'GROUP'\r\n }\r\n }\r\n};\r\n\r\nPJQ.constants.proQual = {\r\n screeningStatuses: {\r\n Pending: 1,\r\n Declined: 2,\r\n InProcess: 3,\r\n Incomplete: 4,\r\n FeedbackRequired: 5,\r\n Expired: 6,\r\n Complete: 7,\r\n NotApplicable: 8\r\n }\r\n};","PJQ.modules = {};\n\n$(function () {\n\tPJQ.app.beforeReady();\n});","PJQ.templating = {\n\ttemplates: {}\n};\n\nPJQ.templating.Template = class {\n\tconstructor(module, file, options = {}) {\n\t\tthis.module = module;\n\t\tthis.file = file;\n\t\tthis.options = _.defaults(options, {\n\t\t\tisOldModule: false\n\t\t});\n\t}\n\n\tgetPath() {\n\t\tlet path;\n\t\tif (PJQ.app.options.isCombinedAssets) {\n\t\t\tpath = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'assets'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'layout',\n\t\t\t\t\tvalue: this.module\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: this.file + '.tmpl.html' + '?v=' + (this.options.isOldModule ? PJQ.app.version : PJQ.app.version)\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\tpath = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'assets'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: this.options.isOldModule ? 'modules' : 'modules2'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: this.module\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'layout'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: this.file + '.tmpl.html' + '?v=' + (this.options.isOldModule ? PJQ.app.version : PJQ.app.version)\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\n\t\tif (PJQ.app.options.isK8) {\n\t\t\tpath = path.toLowerCase();\n\t\t}\n\n\t\treturn _.size(PJQ.app.options.cdnUrl) > 0 ? (PJQ.app.options.cdnUrl + path) : PJQ.helpers.urlHelpers.buildDomainURL(path, false);\n\t}\n\n\tfetch(callback) {\n\t\tlet url = this.getPath();\n\t\tif (PJQ.templating.TemplateRenderer.templates[url]) {\n\t\t\tlet cachedTemplate = PJQ.templating.TemplateRenderer.templates[url];\n\t\t\tthis.parse(cachedTemplate);\n\t\t\tif (typeof callback === 'function')\n\t\t\t\tcallback(cachedTemplate);\n\t\t\t//todo: phase out this return - this is only here to support methods that call this synchronously\n\t\t\treturn cachedTemplate;\n\t\t}\n\t\telse {\n\t\t\t$.ajax({\n\t\t\t\turl: url,\n\t\t\t\tmethod: 'GET',\n\t\t\t\tdataType: 'html',\n\t\t\t\tsuccess: _.bind(function (html) {\n\t\t\t\t\t// html = '<div>' + html + '</div>';\n\t\t\t\t\tlet template = {\n\t\t\t\t\t\ttemplate: _.template(html),\n\t\t\t\t\t\tmarkup: html,\n\t\t\t\t\t\tjsRenderTemplate: typeof $.templates === 'function' ? $.templates(html) : null\n\t\t\t\t\t};\n\t\t\t\t\tthis.parse(template);\n\t\t\t\t\tPJQ.templating.TemplateRenderer.templates[url] = template;\n\t\t\t\t\tif (typeof callback === 'function')\n\t\t\t\t\t\tcallback(template);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t}\n\n\tparse(template) {\n\t\tthis.template = template.template;\n\t\tthis.markup = template.markup;\n\t\tthis.jsRenderTemplate = template.jsRenderTemplate;\n\t}\n\n\trender(data, callback) {\n\t\tthis.fetch(_.bind(function (template) {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tif (this.options.isJsRender) {\n\t\t\t\t\tcallback($(template.jsRenderTemplate.render(data)));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallback($(template.template(data ? data : {})));\n\t\t\t\t}\n\t\t\t}\n\t\t}, this));\n\t}\n};\n\nPJQ.templating.TemplateRenderer = {\n\ttemplates: {},\n\trenderTemplate: function (isAppend, tmpl, $el, data, callback, options = {}) {\n\t\tthis.parseTemplate(tmpl, data, _.bind(function (template) {\n\t\t\tthis.render(isAppend, template, $el, callback, options);\n\t\t}, this));\n\t},\n\tparseTemplate: function (tmpl, data, callback, options) {\n\t\tlet template = $();\n\t\tif (tmpl instanceof $) {\n\t\t\ttemplate = $(_.template(tmpl.html())(data ? data : {}));\n\t\t\tif (typeof callback === 'function')\n\t\t\t\tcallback(template);\n\t\t\t//todo: phase out this return - this is only here to support methods that call this synchronously\n\t\t\treturn template;\n\t\t}\n\t\telse if (tmpl instanceof PJQ.templating.Template) {\n\t\t\tif (this.templates[tmpl.getPath()]) {\n\t\t\t\ttmpl.render(data, callback);\n\t\t\t\t//todo: phase out this return - this is only here to support methods that call this synchronously\n\t\t\t\treturn $(tmpl.fetch().template(data ? data : {}));\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmpl.render(data, callback);\n\t\t\t}\n\t\t}\n\t\telse if (typeof tmpl === 'string') {\n\t\t\tif (!this.templates[tmpl]) {\n\t\t\t\tlet html = '<div>' + $('#' + tmpl).html() + '</div>';\n\t\t\t\tthis.templates[tmpl] = {\n\t\t\t\t\ttemplate: _.template(html),\n\t\t\t\t\tmarkup: html\n\t\t\t\t};\n\t\t\t}\n\t\t\ttemplate = $(this.templates[tmpl].template(data ? data : {}));\n\t\t\tif (typeof callback === 'function')\n\t\t\t\tcallback(template);\n\t\t\t//todo: phase out this return - this is only here to support methods that call this synchronously\n\t\t\treturn template;\n\t\t}\n\t\telse {\n\t\t\tif (typeof callback === 'function')\n\t\t\t\tcallback(template);\n\t\t\t//todo: phase out this return - this is only here to support methods that call this synchronously\n\t\t\treturn template;\n\t\t}\n\t},\n\tfetchTemplates: function (templates, callback) {\n\t\tlet templateCount = _.size(_.filter(templates, function (template) {\n\t\t\treturn template instanceof PJQ.templating.Template;\n\t\t}));\n\t\tif (templateCount === 0) {\n\t\t\tcallback();\n\t\t}\n\t\telse {\n\t\t\tlet resultCount = 0,\n\t\t\t\tresultCallback = function () {\n\t\t\t\t\tresultCount++;\n\t\t\t\t\tif (resultCount === templateCount)\n\t\t\t\t\t\tcallback();\n\t\t\t\t};\n\t\t\t_.each(templates, function (template) {\n\t\t\t\tif (template instanceof PJQ.templating.Template)\n\t\t\t\t\ttemplate.fetch(resultCallback);\n\t\t\t});\n\t\t}\n\t},\n\tparseMarkup: function (markup, data) {\n\t\treturn $(_.template('<div>' + markup + '</div>')(data ? data : {})).html();\n\t},\n\trender: function (isAppend, content, $el, callback, options) {\n\t\tif(options && options.prepend)\n\t\t\t$el.prepend(content);\n\t\telse if(options && options.replace)\n\t\t\t$el.replaceWith(content);\n\t\telse if (isAppend)\n\t\t\t$el.append(content);\n\t\telse\n\t\t\t$el.html(content);\n\t\tif (typeof callback === 'function')\n\t\t\tcallback(content);\n\t}\n};","//MODELS\nPJQ.models = {};\n\nPJQ.models.BaseModel = Backbone.Model.extend({\n idAttribute: \"id\",\n baseOptions: {},\n defaults: {},\n options: {},\n urlRoot: \"/\",\n subItems: {},\n hasEndpoint: function () {\n return this.endpoint() !== '/';\n },\n endpoint: function (action) {\n return '/';\n },\n isNew: function () {\n return this.id == null || this.id === 0 || Backbone.Model.prototype.isNew.call(this);\n },\n restore: function () {\n this.set(_.defaults(this.initAttributes, this.attributes));\n this.dirtyAttributes = {};\n this.isDirty = false;\n },\n hasChanged: function (attribute) {\n if (attribute != null) {\n return Backbone.Model.prototype.hasChanged.call(this, attribute);\n }\n\n return this.isDirty || _.size(this.dirtyAttributes) > 0 || _.find(this.subItems, function (itemClass, key) {\n let subItem = this[key];\n return subItem != null && typeof subItem.hasChanged === 'function' && subItem.hasChanged();\n }, this) != null;\n },\n hasNewAttachments() {\n return this.attachments != null && _.find(this.attachments.models, function (attachment) {\n return attachment.isNew()\n }) != null;\n },\n url: function (options, method) {\n return PJQ.helpers.urlHelpers.buildApiUrl(typeof this.endpoint === 'function' ? this.endpoint(options, method) : this.endpoint, {\n service: this.getService(options)\n });\n },\n getService: function (options) {\n let service;\n if (this.options.isAPIv2 || (options != null && options.isAPIv2)) {\n service = PJQ.constants.services.APIv2\n } else if (this.hasNewAttachments() || this.options.isFileAPI || (options != null && options.isFileAPI)) {\n service = PJQ.constants.services.FILES;\n } else if (this.options.isOrigin || (options != null && options.isOrigin)) {\n service = PJQ.constants.services.ORIGIN;\n } else if (_.size(this.options.service) > 0) {\n service = this.options.service;\n } else {\n return PJQ.constants.services.API;\n }\n return service;\n },\n beforeConstruct: function (attributes, options) {\n },\n constructor: function (attributes, options) {\n if (this.beforeConstruct(attributes, options) !== false) {\n attributes = this.parse(attributes, options);\n this.initAttributes = attributes;\n return Backbone.Model.prototype.constructor.call(this, attributes, options);\n }\n },\n beforeInit: function (options) {\n },\n initialize: function (model, options) {\n if (this.beforeInit(options) !== false) {\n this.fetchedAttributes = {};\n this.dirtyAttributes = {};\n this.isDirty = false;\n this.options = _.defaults(options ? options : {}, _.defaults(this.defaults ? this.defaults : {}, this.baseOptions));\n this.afterInit();\n }\n },\n afterInit: function () {\n },\n getChanged: function (attribute) {\n let result = this.dirtyAttributes[attribute];\n return result ? result : null;\n },\n reset: function (model) {\n this.clear();\n this.initAttributes = model;\n if (model) {\n this.set(this.parse(model));\n }\n this.isDirty = false;\n this.dirtyAttributes = {};\n },\n set: function (attribute, val, options) {\n let attrs = {};\n if (typeof attribute === 'string') {\n attrs[attribute] = val;\n } else {\n attrs = attribute;\n options = val;\n }\n if (options == null || (!options.silent && (!options.isPatch || options.attrs != null))) {\n this.isDirty = true;\n this.dirtyAttributes = _.extend(this.dirtyAttributes ? this.dirtyAttributes : {}, attrs);\n }\n return Backbone.Model.prototype.set.call(this, attrs, options);\n },\n sync: function (method, model, options) {\n let optsClone = _.clone(options);\n\n options.url = this.url(options.urlOptions, method);\n options.beforeSend = _.bind(function (xhr) {\n xhr.url = this.url(options.urlOptions, method);\n if (options.timeout) {\n xhr.timeout = options.timeout;\n }\n PJQ.helpers.apiHelpers.addHeaders(xhr, this.getService(options));\n }, this);\n\n // unless no error notification specified, always notify error\n let self = this,\n error = options.error,\n success = options.success;\n options.error = function (xhr) {\n let args = arguments,\n fnErr = function () {\n if (options.notify !== false) {\n new PJQ.ErrorHandler(options.errorHandlerOpts).handle(xhr, self.toJSON());\n }\n if (typeof error === 'function') {\n return error.call(this, ...args);\n }\n }\n if (xhr.status === 401 && options.canRetry !== false && self.getService(options) === PJQ.constants.services.APIv2) {\n PJQ.app.TokenManager.refreshAccessToken(_.bind(function (token) {\n if (_.size(token) > 0) {// retry after refreshing the token\n self.sync(method, model, _.defaults({\n canRetry: false\n }, optsClone));\n } else {\n fnErr();\n }\n }, this));\n } else if (xhr.status === 401 && self.getService(options) === PJQ.constants.services.API && xhr.responseText === 'INVALID_SESSION') {\n PJQ.app.signOutNavigate();\n } else {\n fnErr();\n }\n };\n\n // only notify success if notify option is true\n if (options.notify === true && (method === 'update' || method === 'create') && _.size(self.notifyName) > 0) {\n options.success = function (request) {\n PJQ.notifications.notify.successNotify({\n message: PJQ.helpers.stringHelpers.format('{0} {1} successfully', self.notifyName, method === 'update' ? 'saved' : 'created')\n });\n\n if (typeof success === 'function')\n return success.call(this, ...arguments);\n };\n }\n\n return Backbone.Model.prototype.sync.call(this, method, model, options);\n },\n fetch: function (options) {\n let paramSuccess = options ? options.success : null,\n opts = _.defaults({\n success: _.bind(function (model, response) {\n this.initAttributes = response;\n this.dirtyAttributes = {};\n this.isDirty = false;\n this.isFetched = true;\n this.trigger('fetch');\n if (typeof paramSuccess === 'function')\n paramSuccess(model, response);\n }, this)\n }, options ? options : {});\n return Backbone.Model.prototype.fetch.call(this, opts);\n },\n patch: function (attrs, options) {\n attrs = _.defaults(attrs ? attrs : {}, this.dirtyAttributes);\n this.dirtyAttributes = {};\n return this.save(attrs, _.defaults({type: 'PATCH', patch: true}, options));\n },\n put: function (attrs, options) {\n attrs = _.defaults(attrs ? attrs : {}, this.dirtyAttributes);\n this.dirtyAttributes = {};\n return this.save(attrs, _.defaults({type: 'PUT'}, options));\n },\n queuePatch: function (data, options = {}, timeout = 800) {\n this.queueSave(data, _.defaults(options ? options : {}, {isPatch: true}), timeout);\n },\n queueSave: function (data, options = {}, timeout = 800) {\n options = options ? options : {};\n //Set a timeout for saving\n //This can be used when save will be called a lot, and you don't want to send to the API constantly\n if (data) {\n this.set(data);\n\n if (options.isPatch) {\n this.queueData = _.defaults(this.queueData ? this.queueData : {}, data);\n }\n }\n\n clearTimeout(this.saveTimeout);\n this.saveTimeout = setTimeout(_.bind(function () {\n if (options.isPatch) {\n this.patch(this.queueData, options);\n } else {\n this.save(this.queueData, options);\n }\n this.queueData = null;\n }, this), timeout);\n },\n beforeSave: function () {\n },\n save: function (attributes, options) {\n this.beforeSave();\n let saveObject = this.getSaveObject(),\n saveOptions = this.getSaveOptions(),\n successCallback = options && options.success ? _.bind(options.success, this) : undefined;\n\n options = _.defaults({\n success: _.bind(function (model, response, opts) {\n this.dirtyAttributes = {};\n this.isDirty = false;\n this.afterSave(model, response, opts);\n if (successCallback) {\n successCallback(model, response, opts);\n }\n }, this)\n }, options);\n\n if (saveObject) {\n if (attributes != null)\n _.defaults(attributes, saveObject);\n else\n attributes = saveObject;\n }\n if (saveOptions) {\n if (options != null)\n _.defaults(options, saveOptions);\n else\n options = saveOptions;\n }\n if (this.saveTimeout != null) {\n clearTimeout(this.saveTimeout);\n }\n return Backbone.Model.prototype.save.call(this, attributes, options);\n },\n afterSave: function () {\n\n },\n getSaveObject: function () {\n return null;\n },\n getSaveOptions: function () {\n return null;\n },\n formatString: function (str) {\n _.each(PJQ.helpers.stringHelpers.findMatches(/\\[(.*?)]/gm, str), function (match) {\n if (match.group.toLowerCase().indexOf('fieldlabel') !== -1) {\n let fieldNumber = parseInt(match.group.toLowerCase().replace('fieldlabel', ''));\n if (fieldNumber > 0) {\n let matchValue = this.getCustomFieldLabel(fieldNumber);\n str = str.replace(match.full, matchValue != null ? matchValue : '');\n }\n } else if (match.group.toLowerCase().indexOf('fieldvalue') !== -1) {\n let fieldNumber = parseInt(match.group.toLowerCase().replace('fieldvalue', ''));\n if (fieldNumber > 0) {\n let matchValue = this.getCustomFieldValue(fieldNumber);\n str = str.replace(match.full, matchValue != null ? matchValue : '');\n }\n }\n }, this);\n return str;\n },\n getCustomFieldLabel: function (id) {\n if (this.customFields) {\n let match = this.customFields.get(id);\n if (match == null) {\n match = this.customFields.findWhere({fieldNumber: id});\n }\n return match ? match.get('fieldName') : null;\n }\n return _.find(this.get('customFields'), function (cf) {\n return (cf.id === id);\n });\n },\n getCustomFieldValue: function (id) {\n let customFields = this.get('customFields') ? this.get('customFields') : this.get('customFieldValues')\n let match = _.find(customFields, function (cf) {\n return (cf.id === id);\n });\n if (match == null) {\n match = _.find(customFields, function (cf) {\n return (cf.fieldNumber === id);\n });\n }\n return match ? match.value : null;\n },\n externalId: function () {\n let exObj = this.get('externalObject');\n return exObj != null && typeof exObj.externalId === 'string' ? exObj.externalId : null;\n },\n erpSyncStatus: function () {\n let exObj = this.get('externalObject');\n return exObj != null && typeof exObj.status === 'number' ? exObj.status : PJQ.constants.integrations.erp.syncStatuses.PENDING;\n },\n isERPSynced: function () {\n return _.size(this.externalId()) > 0;\n },\n makeERPUrl: function(integration){\n return null;\n }\n});\n\n\n//COLLECTIONS\nPJQ.collections = {};\n\nPJQ.collections.BaseCollection = Backbone.Collection.extend({\n baseOptions: {},\n defaults: {},\n options: {},\n urlRoot: \"/\",\n isFetched: false,\n url: function (options, method) {\n return PJQ.helpers.urlHelpers.buildApiUrl(typeof this.endpoint === 'function' ? this.endpoint(options, method) : this.endpoint, {\n service: this.getService(options)\n });\n },\n getService: function (options) {\n let service;\n if (this.options.isOrigin || (options != null && options.isOrigin)) {\n service = PJQ.constants.services.ORIGIN;\n } else if (this.options.isAPIv2 || (options != null && options.isAPIv2)) {\n service = PJQ.constants.services.APIv2\n } else if (this.options.isFileAPI || (options != null && options.isFileAPI)) {\n service = this.options.service;\n } else if (_.size(this.options.service) > 0) {\n service = this.options.service;\n } else {\n return PJQ.constants.services.API;\n }\n return service;\n },\n beforeConstruct: function (models, options) {\n },\n constructor: function (models, options) {\n if (this.beforeConstruct(models, options) !== false) {\n models = this.parse(models, options);\n return Backbone.Collection.prototype.constructor.call(this, models, options);\n }\n },\n beforeInit: function (options) {\n },\n initialize: function (models, options) {\n if (this.beforeInit(options) !== false) {\n this.options = _.defaults(options ? options : {}, _.defaults(this.defaults ? this.defaults : {}, this.baseOptions));\n if (models && models.length > 0)\n this.add(models, this.options);\n this.afterInit();\n }\n },\n afterInit: function () {\n },\n fetchFirst: function (options) {\n if (!this.isFetched)\n return this.fetch(options);\n },\n get: function (id) {\n if (PJQ.helpers.objectHelpers.refinedType(id) === 'array') {\n let result = [];\n _.each(id, _.bind(function (modelId) {\n let model = Backbone.Collection.prototype.get.call(this, modelId);\n if (model) {\n result.push(model);\n }\n }, this));\n return result;\n }\n return Backbone.Collection.prototype.get.call(this, id);\n },\n fetch: function (options) {\n let paramSuccess = options ? options.success : null,\n opts = _.defaults({\n success: _.bind(function (models, response) {\n this.isFetched = true;\n this.trigger('fetch');\n if (typeof paramSuccess === 'function')\n paramSuccess(models, response);\n }, this)\n }, options ? options : {});\n return Backbone.Collection.prototype.fetch.call(this, opts);\n },\n fetchReset: function (options) {\n this.fetch(_.defaults(options ? options : {}, {reset: true}));\n },\n sync: function (method, model, options) {\n let optsClone = _.clone(options);\n\n options.url = this.url(options.urlOptions, method);\n options.beforeSend = _.bind(function (xhr) {\n xhr.url = this.url(options.urlOptions, method);\n if (options.timeout) {\n xhr.timeout = options.timeout;\n }\n PJQ.helpers.apiHelpers.addHeaders(xhr, this.getService(options));\n }, this);\n\n // unless no error notification specified, always notify error\n let self = this,\n error = options.error,\n success = options.success;\n options.error = function (xhr) {\n let args = arguments,\n fnErr = function () {\n if (options.notify !== false) {\n new PJQ.ErrorHandler(options.errorHandlerOpts).handle(xhr, self.toJSON());\n }\n if (typeof error === 'function') {\n return error.call(this, ...args);\n }\n }\n if (xhr.status === 401 && options.canRetry !== false && self.getService(options) === PJQ.constants.services.APIv2) {\n PJQ.app.TokenManager.refreshAccessToken(_.bind(function (token) {\n if (_.size(token) > 0) {// retry after refreshing the token\n self.sync(method, model, _.defaults({\n canRetry: false\n }, optsClone));\n } else {\n fnErr();\n }\n }, this));\n } else if (xhr.status === 401 && self.getService(options) === PJQ.constants.services.API && xhr.responseText === 'INVALID_SESSION') {\n PJQ.app.signOutNavigate();\n } else {\n fnErr();\n }\n };\n\n // only notify success if notify option is true\n if (options.notify === true && (method === 'update' || method === 'create') && _.size(self.notifyName) > 0) {\n options.success = function (request) {\n PJQ.notifications.notify.successNotify({\n message: PJQ.helpers.stringHelpers.format('{0} {1} successfully', self.notifyName, method === 'update' ? 'saved' : 'created')\n });\n\n if (typeof success === 'function')\n return success.call(this, ...arguments);\n };\n }\n\n return Backbone.Collection.prototype.sync.call(this, method, model, options);\n },\n save: function (options) {\n return this.sync(options && options.put ? \"update\" : \"create\", this, options);\n },\n getChangedModels: function () {\n let changedModels = [];\n _.each(this.models, function (model) {\n if (model.hasChanged() || model.isNew())\n changedModels.push(model);\n });\n return changedModels;\n }\n});\n\n\n//VIEWS\nPJQ.views = {};\n\nPJQ.views.BaseView = Backbone.View.extend({\n opts: {\n isAppend: false,\n template: null,\n firstRenderAnimation: null,\n subTemplates: {},\n hasTooltips: false,\n shouldRenderTemplate: true\n },\n baseOptions: {},\n defaults: {},\n options: {},\n defaultEvents: {},\n events: {},\n beforeInit: function (options) {\n },\n initialize: function (options) {\n if (this.beforeInit(options) !== false) {\n let newOpts = _.defaults(this.baseOptions ? this.baseOptions : {}, this.opts);\n newOpts = _.defaults(this.defaults ? this.defaults : {}, newOpts);\n this.options = _.defaults(options ? options : {}, newOpts);\n if (this.defaultEvents != null) {\n this.undelegateEvents();\n this.events = _.defaults(this.events ? this.events : {}, this.defaultEvents);\n this.delegateEvents(this.events);\n }\n this.getTemplates(_.bind(function () {\n if (this.beforeFirstRender() !== false) {\n this.render();\n }\n }, this));\n }\n },\n getTemplates: function (callback) {\n let templates = this.options.subTemplates ? this.options.subTemplates : {};\n templates.view_base = this.options.template;\n PJQ.templating.TemplateRenderer.fetchTemplates(templates, callback);\n },\n beforeFirstRender: function () {\n },\n renderData: function () {\n return this.options;\n },\n beforeRender: function () {\n\n },\n render: function (onlyIfRendered = false) {\n if (onlyIfRendered && !this.isFirstRenderDone) {\n return;\n }\n\n if (this.beforeRender() !== false) {\n if (this.options.template != null && (_.size(this.$el) > 0 && this.options.shouldRenderTemplate !== false)) {\n let data;\n if (typeof this.renderData === 'function') {\n data = this.renderData();\n } else if (typeof this.renderData !== 'undefined') {\n data = this.renderData;\n } else {\n data = {};\n }\n PJQ.templating.TemplateRenderer.renderTemplate(this.options.isAppend, this.options.template, this.$el, data, _.bind(function () {\n _.bind(this.rightAfterRender, this);\n if (this.options.hasTooltips) {\n let toolTips = this.$('[data-toggle=\"tooltip\"]');\n if (_.size(toolTips) > 0) {\n toolTips.tooltip()\n }\n }\n if (!this.isFirstRenderDone && this.options.firstRenderAnimation != null) {\n this.$el.animateCSS(this.options.firstRenderAnimation, function () {\n this.rightAfterRender();\n }, this);\n } else {\n this.rightAfterRender();\n }\n }, this));\n } else {\n this.rightAfterRender();\n }\n this.isFirstRenderDone = true;\n }\n return this;\n },\n rightAfterRender: function () {\n if (typeof this.options.afterRender === 'function')\n this.options.afterRender();\n\n this.afterRender()\n },\n afterRender: function () {\n\n },\n renderSubTemplate: function (isAppend, template, el, renderData, options) {\n let cb;\n if (typeof options === 'function') {\n cb = options;\n } else if (options && typeof options.callback === 'function') {\n cb = options.callback;\n }\n PJQ.templating.TemplateRenderer.renderTemplate(isAppend, template, el, renderData ? renderData : {}, cb, options);\n },\n addElements: function (element) {\n if (this.$addEl == null) {\n this.$addEl = [];\n }\n this.$addEl.push(element);\n },\n //YOU MUST CALLBACK WHEN OVERRIDING THIS FUNCTION IN AN EXTENDED CLASS\n beforeRemove: function (callback) {\n if (typeof callback === 'function')\n callback();\n },\n remove: function (callback) {\n this.beforeRemove(_.bind(function (result) {\n if (result !== false) {\n this.stopListening();\n this.undelegateEvents();\n this.$el.empty();\n if (_.size(this.$addEl) > 0) {\n _.each(this.$addEl, function ($el) {\n $el.empty();\n });\n }\n\n if (typeof callback === 'function')\n callback();\n }\n }, this));\n },\n stopPropagation: function (e) {\n if (e) {\n e.stopPropagation();\n e.cancelBubble = true;\n }\n }\n});\n\n\n//MODALS\nPJQ.views.BaseModal = PJQ.views.BaseView.extend({\n baseOptions: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Default'),\n header: \"\",\n body: \"\",\n isVerticalCenter: false,\n isWrapForm: false,\n wrapFormName: null,\n isShowOkButton: true,\n okButtonText: \"Ok\",\n okButtonColorClass: 'primary',\n isShowCancelButton: false,\n cancelButtonText: \"Cancel\",\n cancelButtonColorClass: 'secondary',\n isShowSecondaryButton: false,\n secondaryButtonText: \"\",\n secondaryButtonColorClass: 'light',\n onSecondary: _.noop,\n onClose: _.noop,\n onOk: _.noop,\n width: null,\n minWidth: null,\n maxWidth: null,\n height: null,\n minHeight: null,\n maxHeight: null,\n fitHeight: false,\n isShowCloseButton: false,\n },\n defaults: {},\n options: {},\n defaultEvents: {\n 'hidden.bs.modal': 'removeModal',\n 'click .modal-ok': 'onOk',\n 'click .modal-secondary': 'onSecondary',\n 'click .modal-close': 'close'\n },\n events: {},\n beforeFirstRender: function () {\n this.options = _.defaults(this.options, {\n uuid: \"modal-\" + _.uniqueId()\n });\n //force element to null in case one was passed in\n //this view uses modals only so it creates its own container to insert into in the <body>\n this.setElement(null);\n if (this.beforeModalCreated() !== false) {\n this.createModal();\n this.afterModalCreated();\n }\n },\n beforeModalCreated: function () {\n },\n afterModalCreated: function () {\n },\n createModal: function () {\n this.container = $('#modalsContainer');\n if (_.size(this.container) === 0) {\n this.container = jQuery('<div id=\"modalsContainer\" />');\n $('body').append(this.container);\n }\n this.modal = $('<div class=\"modal\" role=\"dialog\">');\n if (this.options.isVerticalCenter) {\n let verticalBox = $('<div class=\"modal-vertical-center\">');\n this.modal.append(verticalBox);\n this.setElement(verticalBox);\n } else if (this.options.isWrapForm) {\n let form = $('<form name=\"' + this.options.wrapFormName + '\"/>');\n this.modal.append(form);\n this.setElement(this.modal);\n } else {\n this.setElement(this.modal);\n }\n this.container.append(this.modal);\n this.modal.modal({\n backdrop: _.size($('.modal-backdrop.show')) === 0 ? 'static' : false,\n keyboard: false,\n show: true\n });\n\n this.$('.modal-dialog').attr('id', this.options.uuid);\n\n this.setZIndex();\n },\n getWidth: function () {\n return {\n minWidth: this.options.minWidth,\n maxWidth: this.options.maxWidth,\n width: this.options.width\n };\n },\n setWidth: function (widths) {\n this.modal.find('.modal-dialog').css({\n \"min-width\": widths.minWidth,\n \"max-width\": widths.maxWidth,\n \"width\": widths.width\n });\n },\n rightAfterRender: function () {\n if (this.modal != null) {\n this.setWidth(this.getWidth());\n\n // to use this there must be a modal body in the template\n // this will set the modal body to overflow auto which will make it scroll\n // if there is a different class you would like to scroll, it can be defined with modal-overflow\n // this functionality scales the body taking into account the footer/header heights\n // it also scales taking into account the height of elements in modal-body if modal-overflow is present\n if (this.options.fitHeight) {\n // get the top margin and multiply it by 2 so we get a uniform top/bottom margin\n let offset = parseInt(this.modal.find('.modal-dialog').css('margin-top').replace('px', '')) * 2,\n $header = this.modal.find('.modal-header'),\n $footer = this.modal.find('.modal-footer'),\n $overflow = this.modal.find('.modal-overflow'),\n $scrollContent = this.modal.find('.modal-body');\n\n if (_.size($overflow) > 0) {\n // calculate the height of the siblings of the overflow element\n offset += ($scrollContent.outerHeight() - $overflow.outerHeight());\n\n // make the overflow element the content that will be set as scrollable with a max height\n $scrollContent = $overflow;\n }\n\n // if there is a header, factor that into the offset for height calculation\n if (_.size($header) > 0) {\n offset += $header.outerHeight();\n }\n\n // if there is a footer, factor that into the offset for height calculation\n if (_.size($footer) > 0) {\n offset += $footer.outerHeight();\n }\n\n $scrollContent.css({\n \"min-height\": (window.innerHeight - offset) + 'px',\n \"max-height\": (window.innerHeight - offset) + 'px',\n \"overflow\": \"auto\"\n });\n } else {\n this.modal.find('.modal-dialog').css({\n \"min-height\": this.options.minHeight,\n \"max-height\": this.options.maxHeight,\n \"height\": this.options.height\n });\n }\n\n if (this.options.isShowCloseButton) {\n let button = $('<button>', {\n class: 'btn btn-transparent-dark fs-22 btn-sm p-absolute modal-close',\n style: 'top:-30px;right:-30px;'\n });\n button.append('<i class=\"fal fa-times\"></i>');\n this.$('.modal-content').append(button);\n }\n\n PJQ.views.BaseView.prototype.rightAfterRender.call(this);\n }\n },\n setZIndex: function () {\n let isRemoved = (this.modal == null),\n ivIndex = parseInt($('.iv-image-view').css('z-index')),\n zIndex = 99999;\n if (!isNaN(ivIndex)) {\n zIndex = ivIndex;\n }\n $('#modalsContainer').find('.modal').each(function () {\n if ($(this).css('display') !== 'none' && $(this).css('zIndex').toString() !== 'auto' && parseInt($(this).css('zIndex').toString()) > zIndex)\n zIndex = parseInt($(this).css('zIndex').toString());\n });\n if (isRemoved) {\n $('.modal-backdrop').css(\"z-index\", zIndex - 25);\n } else {\n $('.modal-backdrop').css(\"z-index\", zIndex + 25);\n this.modal.css(\"z-index\", zIndex + 50);\n }\n },\n removeModal: function () {\n if (this.modal != null) {\n this.modal.modal('hide');\n if (this.modal) {\n this.modal.remove();\n this.modal = null;\n }\n this.remove();\n if (_.size($('.modal:visible')) === 0) {\n $('.modal-backdrop').remove();\n } else {\n this.setZIndex();\n $(document.body).addClass('modal-open');\n }\n this.onRemove();\n this.undelegateEvents();\n }\n },\n close: function () {\n this.removeModal();\n this.onClose();\n },\n onRemove: function () {\n if (this.options.onRemove)\n arguments ? this.options.onRemove(...arguments) : this.options.onRemove(this.model);\n },\n onClose: function () {\n if (this.options.onClose)\n arguments ? this.options.onClose(...arguments) : this.options.onClose(this.model);\n },\n onSecondary: function () {\n if (this.options.onSecondary)\n arguments ? this.options.onSecondary(...arguments) : this.options.onSecondary(this.model);\n },\n onOk: function () {\n if (this.options.onOk)\n arguments ? this.options.onOk(...arguments) : this.options.onOk(this.model);\n }\n});\n","//Router\nPJQ.routers = {};\n\nPJQ.routers.BaseRouter = Backbone.Router.extend({\n\troutes: {\n\t\t\"\": \"empty\"\n\t},\n\tinitialize: function () {\n\t\t//Add all assigned routes\n\t\t_.each(PJQ.app.routes, function (route) {\n\t\t\tthis.route(route.route, route.name, route.callback);\n\t\t}, this);\n\t},\n\tempty: function () {\n\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\tif (PJQ.app.session != null && !PJQ.app.session.isLoggedIn()) {\n\t\t\t\t//If the user isn't logged in, force nav to sign in\n\t\t\t\tthis.signInNavigate();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t//try to match routes with a parameter\n\t\t\t\tlet matchedRoute = false;\n\t\t\t\t_.each(_.filter(PJQ.app.routes, function (paramRoute) {\n\t\t\t\t\treturn _.size(paramRoute.route) > 0;\n\t\t\t\t}), function (paramRoute) {\n\t\t\t\t\tif (!matchedRoute && _.indexOf(paramRoute.route, '?') !== -1 && typeof paramRoute.callback === 'function') {\n\t\t\t\t\t\tlet paramValues = [],\n\t\t\t\t\t\t\thasAllParams = true;\n\t\t\t\t\t\t_.each(paramRoute.route.replace('?', '').split('&'), function (param) {\n\t\t\t\t\t\t\tif (hasAllParams) {\n\t\t\t\t\t\t\t\tlet paramVal = PJQ.helpers.urlHelpers.getQueryParam(param.split('=:')[0]);\n\t\t\t\t\t\t\t\tif (paramVal && _.size(paramVal) > 0) {\n\t\t\t\t\t\t\t\t\tparamValues.push(paramVal);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\thasAllParams = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (hasAllParams) {\n\t\t\t\t\t\t\tparamRoute.callback(...paramValues);\n\t\t\t\t\t\t\tmatchedRoute = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!matchedRoute) {\n\t\t\t\t\tif (PJQ.app.session.hasFeature('projects')) {\n\t\t\t\t\t\tthis.navigate('projects', {\n\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\treplace: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if(PJQ.app.session.get('portalId') !== PJQ.constants.panteraPortalId || (PJQ.app.session.user != null && PJQ.app.session.user.get('companyType') === \"SUB\")) {\n\t\t\t\t\t\tthis.navigate('projectinvites', {\n\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\treplace: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tthis.navigate('settings', {\n\t\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\t\treplace: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet matchedRoute = false;\n\t\t\tif (typeof PJQ.app.oldRoutes === 'object') {\n\t\t\t\t_.each(_.filter(PJQ.app.oldRoutes, function (oldRoute) {\n\t\t\t\t\treturn _.size(oldRoute.route) > 0;\n\t\t\t\t}), function (oldRoute) {\n\t\t\t\t\t_.find(oldRoute.route.split(' '), function (param) {\n\t\t\t\t\t\tlet paramVal = PJQ.helpers.urlHelpers.getQueryParam(param.replace('?', ''));\n\t\t\t\t\t\tif (paramVal && _.size(paramVal) > 0 && typeof oldRoute.callback === 'function') {\n\t\t\t\t\t\t\toldRoute.callback(paramVal);\n\t\t\t\t\t\t\tmatchedRoute = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!matchedRoute) {\n\t\t\t\tlet defaultRoute = _.find(PJQ.app.oldRoutes, function (oldRoute) {\n\t\t\t\t\treturn oldRoute.name === 'default';\n\t\t\t\t});\n\t\t\t\tif (defaultRoute && typeof defaultRoute.callback === 'function') {\n\t\t\t\t\t//If there is a default route overriding this from old modules, route to that\n\t\t\t\t\tdefaultRoute.callback();\n\t\t\t\t}\n\t\t\t\telse if (_.size(PJQ.app.readyEvents) > 0) {\n\t\t\t\t\t//This function calls all bound functions to ready (added by attachReadyEvent)\n\t\t\t\t\t//These are only added by old modules\n\t\t\t\t\t//All new modules should use routes\n\t\t\t\t\t//This uses an array so multiple ready events can be attached (for different modules)\n\t\t\t\t\t//There should ideally only ever be one function in the array\n\t\t\t\t\t// However we don't want a situation where one module overrides another so we do it this way\n\t\t\t\t\t_.each(PJQ.app.readyEvents, function (func) {\n\t\t\t\t\t\tif (typeof func === 'function')\n\t\t\t\t\t\t\tfunc();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t,\n\tnoAuthRoutes: [\n\t\t'invoiceguestlink',\n\t\t'signin',\n\t\t'signup',\n\t\t'signuptrial',\n\t\t'sharephotos',\n\t\t'sharedrawings',\n\t\t'sharefiles',\n\t\t'scheduleshare',\n\t\t'resetpassword',\n\t\t'prequal',\n\t\t'register'\n\t],\n\tsignInNavigate: function (options = {}) {\n\t\tif (options != null) {\n\t\t\tif (options.cacheRoute) {\n\t\t\t\tPJQ.app.router.signInCache = '#' + this.getCurrentRoute();\n\t\t\t}\n\t\t}\n\n\t\t$('.skin-header').hide();\n\t\tPJQ.app.$el.css('top', 0);\n\t\tif (PJQ.app.portal != null && _.size(PJQ.app.portal.pages) > 0) {\n\t\t\tlet portalSignInRoute = _.findWhere(PJQ.app.portal.pages, {route: 'signin'});\n\t\t\tif (portalSignInRoute != null) {\n\t\t\t\tthis.navigate('p/' + portalSignInRoute.route, {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.navigate('signin', {\n\t\t\ttrigger: true,\n\t\t\treplace: true\n\t\t});\n\t},\n\trouteToRoot: function () {\n\t\tPJQ.app.router.navigate('/', {\n\t\t\ttrigger: true\n\t\t});\n\t},\n\texecute: function (callback, args, name) {\n\t\tif (typeof ga === 'function') {\n\t\t\tga('send', 'pageview', {\n\t\t\t\t'page': location.pathname + location.search + location.hash\n\t\t\t});\n\t\t}\n\n\t\tif (!PJQ.app.view) {\n\t\t\tPJQ.app.view = new PJQ.views.AppView(PJQ.app.$el);\n\t\t}\n\n\t\tif (PJQ.app.view.photoViewer) {\n\t\t\tlet triggerRoute = PJQ.app.view.photoViewer.options.triggerRoute;\n\t\t\tPJQ.app.view.photoViewer.hide();\n\t\t\tif (triggerRoute) {\n\t\t\t\tBackbone.Router.prototype.execute.call(this, callback, args, name);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tlet accessKey = PJQ.helpers.urlHelpers.getQueryParam('accessKey');\n\t\tif (_.size(accessKey) > 0) {\n\t\t\tPJQ.app.session.set('accessKey', accessKey);\n\t\t\tif (_.size(window.location.hash) > 0 && window.location.hash.indexOf('?') > -1) {\n\t\t\t\tlet hashArr = window.location.hash.split('?'),\n\t\t\t\t\tposStatus = hashArr[_.size(hashArr) - 1].toUpperCase(),\n\t\t\t\t\tresQuery = 'RESPONSE=';\n\t\t\t\tif (posStatus.indexOf(resQuery) > -1) {\n\t\t\t\t\tPJQ.app.session.set('bidStatus', posStatus.replace(resQuery, ''));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet $menuItems = $('.pt-menu-item');\n\t\tif (_.size($menuItems) > 0) {\n\t\t\tlet utId;\n\t\t\tif (PJQ.app.session.get('ownsPortal') && PJQ.app.session.user != null) {\n\t\t\t\tutId = PJQ.app.session.user.get('userTypeId');\n\t\t\t}\n\t\t\telse if (PJQ.app.session.contact != null) {\n\t\t\t\tutId = PJQ.app.session.contact.get('userTypeId');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tutId = null;\n\t\t\t}\n\t\t\t$menuItems.each(function () {\n\t\t\t\tlet $menuitem = $(this);\n\t\t\t\tlet allowedUtString = $menuitem.data('userTypes');\n\t\t\t\tif (_.size(allowedUtString) > 0) {\n\t\t\t\t\tif (_.find(allowedUtString.split(','), function (allowedUt) {\n\t\t\t\t\t\treturn parseInt(allowedUt) === utId;\n\t\t\t\t\t})) {\n\t\t\t\t\t\t$(this).removeClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t$(this).addClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tlet contactGuid = PJQ.helpers.urlHelpers.getQueryParam('cg');\n\t\tif (_.size(contactGuid) > 0) {\n\t\t\tPJQ.app.session.set('contactGuid', contactGuid);\n\t\t}\n\n\t\tif (_.size(window.staticRoute) > 0 && name !== window.staticRoute) {\n\t\t\tthis.navigate(window.staticRoute, {\n\t\t\t\ttrigger: true,\n\t\t\t\treplace: true\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t//If this is the single page module and the user isn't signed in\n\t\t//We force navigation to the sign in route\n\t\tlet isPortalRoute = name.indexOf('portal_') !== -1,\n\t\t\t$header = $('.skin-header'),\n\t\t\t$appMain = PJQ.app.$el;\n\t\tif (isPortalRoute && PJQ.app.session.isLoggedIn()) {\n\t\t\tthis.navigate('', {\n\t\t\t\ttrigger: true,\n\t\t\t\treplace: true\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\telse if (!isPortalRoute && PJQ.app.module === PJQ.constants.modules.APP && !PJQ.app.session.isLoggedIn() && this.noAuthRoutes.indexOf(name.toLowerCase()) === -1) {\n\t\t\t// if this is the root route and there is a portal root route, navigate to it\n\t\t\tif (name === 'empty' && PJQ.app.portal != null && _.size(PJQ.app.portal.pages) > 0) {\n\t\t\t\tlet rootRoute = _.findWhere(PJQ.app.portal.pages, {isRoot: true});\n\t\t\t\tif (rootRoute != null) {\n\t\t\t\t\tthis.navigate('/p/' + rootRoute.route, {\n\t\t\t\t\t\ttrigger: true,\n\t\t\t\t\t\treplace: true\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (PJQ.app.session.isPanteraPortal() && (_.size(accessKey) > 0 || _.size(contactGuid) > 0)\n\t\t\t\t&& (PJQ.app.session.contact == null || !(PJQ.app.session.contact.get('userId') > 0))) {\n\t\t\t\t$appMain.css('top', 0);\n\t\t\t\tthis.navigate('signup', {\n\t\t\t\t\ttrigger: true,\n\t\t\t\t\treplace: true\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (_.size(accessKey) === 0 && _.size(contactGuid) === 0) {\n\t\t\t\tthis.signInNavigate({\n\t\t\t\t\tcacheRoute: true\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$header.show();\n\t\t\t}\n\t\t}\n\t\telse if (isPortalRoute || name === 'signin' || name === 'signup') {\n\t\t\t$appMain.css('top', 0);\n\t\t\t$header.hide();\n\t\t\t$appMain.scrollTop(0);\n\n\t\t\t//this is a sign in or sign up route, make sure the session is fetched\n\t\t\tif (!PJQ.app.session.isFetched) {\n\t\t\t\tPJQ.app.session.fetch();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t$header.show();\n\t\t\t$appMain.css('top', $header.height());\n\n\t\t\t//this is an app route, make sure the session is fetched\n\t\t\tif (!PJQ.app.session.isFetched) {\n\t\t\t\tPJQ.app.session.fetch();\n\t\t\t}\n\t\t}\n\n\t\tlet foundRoute = _.findWhere(PJQ.app.routes, {name: name});\n\t\tif (foundRoute != null) {\n\t\t\tif (typeof foundRoute.title === 'function') {\n\t\t\t\tdocument.title = foundRoute.title();\n\t\t\t}\n\t\t\telse if (_.size(foundRoute.title)) {\n\t\t\t\tdocument.title = foundRoute.title;\n\t\t\t}\n\t\t}\n\n\t\tBackbone.Router.prototype.execute.call(this, callback, args, name);\n\t}\n\t,\n\tgetCurrentRoute: function () {\n\t\treturn window.location.hash.replace('#', '');\n\t}\n});","// $.fn.dataTable.ext.errMode = 'none';\n\nPJQ.views.dataTables = {};\n\nPJQ.views.dataTables.DataTable = PJQ.views.BaseView.extend({\n baseOptions: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Base'),\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Base')\n },\n deferRender: true,\n isStriped: false,\n isNoPadding: true,\n isOverflowAuto: false,\n isHideSearch: false,\n dom: \"<'row no-gutters'<'table-outer col-sm-12'tr>>\" + \"<'row no-gutters'<'col-sm-5 mt-1'l><'col-sm-7 mt-2'p>>\",\n headerData: {},\n getPageCallback: null,\n onRowClick: null,\n onRowDoubleClick: null,\n onRowRemoved: null,\n onTableDraw: null,\n minHeightPx: null,\n paging: true,\n pageLength: 10,\n rowId: \"cid\",\n groupBy: null,\n groupByKey: null,\n disableGroupToggle: null,\n getGroupHeader: null,\n collapsedGroups: [],\n scrollRows: false,\n emptyDataGroup: \"N/A\",\n onPageSizeChange: null,\n orderCookie: null,\n columnWidthCookie: null,\n pageLengthCookie: null,\n showPageSelector: false,\n enableColumnResize: false,\n hasFooter: false,\n extraClasses: null,\n toggleRowClass: '.toggle-row',\n hideColumnHeaders: false\n },\n defaultEvents: {\n 'click .group-start': 'toggleGroup',\n 'keyup .datatable-search': 'search',\n 'click .clear-filters': 'clearFilters'\n },\n isColumnResizable: function (column) {\n return true;\n },\n onColumnResizeStart: function (column, columns) {\n\n },\n onColumnResize: function (column) {\n\n },\n onColumnResizeEnd: function (column, columns) {\n\n },\n beforeFirstRender: function () {\n this.options = _.extend(this.options, {\n uuid: _.uniqueId(),\n dom: this.options.paging ? this.options.dom : \"<'row no-gutters'<'table-outer col-sm-12'tr>>\",\n language: _.defaults({\n lengthMenu: \"Show _MENU_\",\n processing: \"Loading...\",\n paginate: {\n previous: \"Prev\",\n next: \"Next\"\n }\n }, this.options.language ? this.options.language : {})\n });\n\n if (this.options.clearServerCache)\n this.clearServerCache = true;\n },\n beforeRender: function () {\n if (_.size(this.options.groupByKey) > 0) {\n if (this.options.groupBy != null) {\n window.localStorage.removeItem(this.options.groupByKey);\n if (_.size(this.options.groupBy) > 0) {\n window.localStorage.setItem(this.options.groupByKey, this.options.groupBy);\n }\n } else {\n let groupBy = window.localStorage.getItem(this.options.groupByKey);\n if (_.size(groupBy) > 0) {\n this.options.groupBy = groupBy;\n }\n }\n }\n\n let grg = this.options.getRowGroup || this.getRowGroup,\n groupBy = this.getGroupBy();\n if (groupBy != null) {\n this.options.rowGroup = {\n startRender: _.bind(this.startGroupRender, this),\n emptyDataGroup: this.options.emptyDataGroup ? this.options.emptyDataGroup : \"N/A\",\n dataSrc: (row) => {\n if (typeof grg === 'function') {\n return grg(row, groupBy);\n }\n\n let groupByCol = this.getGroupByColumn();\n if (groupByCol == null) {\n return null;\n }\n\n\n let dataVal = PJQ.helpers.objectHelpers.getNestedValue(row, groupByCol.column.data ?? groupByCol.column.columnData ?? groupByCol.column.attribute);\n if (typeof groupByCol.column.group === 'function') {\n return groupByCol.column.group(row, groupBy);\n } else if (typeof groupByCol.column.render === 'function') {\n return groupByCol.column.render(dataVal, \"display\", row);\n }\n\n return dataVal ?? '';\n }\n };\n }\n },\n renderData: function () {\n return {\n options: this.options\n };\n },\n getContextMenuOptions: function () {\n return this.options.contextMenuOptions != null ? this.options.contextMenuOptions : null;\n },\n getSortableOptions: function () {\n return this.options.sortableOptions != null ? this.options.sortableOptions : null;\n },\n afterRender: function () {\n this.renderHeader();\n\n let self = this,\n doneMoving = true;\n self.$el.off('dblclick');\n self.$el.on('touchmove', 'tbody tr[id]', function () {\n doneMoving = false;\n });\n\n self.$el.on('click', 'tbody tr[id]', function (e) {\n let row = self.getRow($(this));\n if (row) {\n if (doneMoving) {\n self.onRowClick(row);\n }\n }\n });\n self.$el.on('dblclick touchend', 'tbody tr[id]', function (e) {\n let row = self.getRow($(this)),\n $target = $(e.target);\n\n if (_.size(self.options.toggleRowClass) > 0 && $target.is(self.options.toggleRowClass)) {\n return;\n }\n\n if (row) {\n e.stopPropagation();\n if (doneMoving) {\n self.onRowDoubleClick(row);\n }\n }\n });\n\n // self.$el.off('draw.dt');\n self.$el.on('draw.dt', function () {\n if (self.options.showPageSelector) {\n self.renderPageSelector();\n }\n self.onTableDraw();\n });\n\n // self.$el.on( 'error.dt', function ( e, settings, techNote, message ) {\n // if(console){\n // console.log( 'DataTable ' + this.options.uuid + ' error: ', message );\n // }\n // } ) .DataTable();\n\n this.renderDataTable();\n\n let sortOpts = this.getSortableOptions();\n if (_.size(sortOpts) > 0) {\n this.makeSortable(sortOpts);\n }\n\n let ctxOpts = this.getContextMenuOptions();\n if (ctxOpts != null && _.size(ctxOpts.actions) > 0) {\n this.addContextMenu(ctxOpts);\n }\n },\n renderPageSelector: function () {\n this.$('.page-select-span').remove();\n this.$('.dataTables_paginate').prepend('<span class=\"page-select-span\"><select class=\"page-select wd-80p max-wd-80p\"></select></span>');\n\n this.pageSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.page-select'),\n isIntChoices: true,\n defaultValue: this.dataTable.page(),\n onChange: _.bind(function (value) {\n this.dataTable.page(value).draw('page');\n }, this)\n });\n\n let options = '',\n pages = this.dataTable.page.info().pages;\n for (let num = 0; num < pages; num++) {\n options += '<option value=\"' + num + '\">Page ' + (num + 1) + '</option>';\n }\n this.pageSelectPicker.$el.html(options);\n this.pageSelectPicker.refresh();\n this.dataTable.on('page', _.bind(function () {\n this.pageSelectPicker.setValue(this.dataTable.page())\n }, this));\n },\n onTableDraw: function () {\n let self = this;\n\n if (this.options.hideColumnHeaders) {\n this.$el.find('thead').attr('style', 'visibility: collapse;');\n }\n if (typeof this.options.onTableDraw === 'function') {\n this.options.onTableDraw(this.dataTable);\n }\n\n // this.updateScrollbar();\n },\n onRowClick: function (row) {\n if (typeof this.options.onRowClick === 'function') {\n this.options.onRowClick(row);\n }\n },\n onRowDoubleClick: function (row) {\n if (typeof this.options.onRowDoubleClick === 'function') {\n this.options.onRowDoubleClick(row);\n }\n },\n afterHeaderRender: function () {\n if (typeof this.options.afterHeaderRender === 'function') {\n this.options.afterHeaderRender(this, this.$('.dt-header'));\n }\n },\n beforeDataTableRender: function () {\n\n },\n headerData: function () {\n return typeof this.options.headerData === 'function' ? this.options.headerData() : this.options.headerData;\n },\n renderHeader: function () {\n if (!this.options.isHideSearch) {\n this.renderSubTemplate(false, this.options.subTemplates.header, this.$('.dt-header'), this.headerData(), _.bind(function () {\n this.delegateEvents();\n this.afterHeaderRender();\n }, this));\n }\n },\n renderPage: function () {\n if (this.dataTable != null) {\n let page = this.dataTable.page();\n this.options.displayStart = page != null ? page * this.options.pageLength : null;\n }\n if (this.options.addressBookView && this.options.addressBookView.currentView === 'company') {\n if (this.options.addressBookView.dataTable) {\n let page = this.options.addressBookView.dataTable.dataTable.page();\n this.options.addressBookView.dataTable.options.displayStart = page != null ? page * this.options.addressBookView.dataTable.options.pageLength : null;\n this.options.addressBookView.dataTable.options.addressBookView.dataTable.render()\n }\n } else {\n this.render();\n }\n },\n disableColumnReorder: function () {\n if (this.dataTable != null && this.dataTable.colReorder != null && typeof this.dataTable.colReorder.disable === 'function') {\n this.dataTable.colReorder.disable();\n }\n },\n enableColumnReorder: function () {\n if (this.dataTable != null && this.dataTable.colReorder != null && typeof this.dataTable.colReorder.enable === 'function') {\n this.dataTable.colReorder.enable();\n }\n },\n renderDataTable: function () {\n this.options.childDataTables = [];\n\n this.beforeDataTableRender();\n\n if (this.dataTable)\n this.dataTable.destroy();\n\n if (this.options.getPageCallback != null) {\n this.options = _.extend(this.options, {\n ajax: _.bind(this.getPage, this),\n processing: true,\n serverSide: true\n });\n }\n\n if (this.options.columns == null && typeof this.getColumns === 'function') {\n this.options.columns = this.getColumns();\n }\n\n this.colNameMap = {};\n _.each(this.options.columns, function (column, index) {\n if (_.size(column.title) > 0) {\n this.colNameMap[column.title.toLowerCase()] = index;\n }\n }, this);\n\n let rowIdAttr = this.options.rowId;\n this.$dataTable = this.$('#dt_' + this.options.uuid);\n\n if (this.options.pageLength === 0) {\n this.options.paging = false;\n }\n\n this.$el.off('order.dt');\n if (_.size(this.options.orderCookie) > 0) {\n let self = this;\n let cookieVal = PJQ.helpers.cookieHelpers.getCookie(self.options.orderCookie);\n if (_.size(cookieVal) > 0) {\n self.options.order = JSON.parse(cookieVal);\n\n if (self.options.order.length > 1) {\n let firstVal = self.options.order[0];\n if (!_.isArray(firstVal)) {\n self.options.order = [self.options.order];\n }\n }\n }\n\n self.$el.on('order.dt', _.bind(function (e, settings, details) {\n let orderArr = [];\n _.each(details, function (order) {\n orderArr.push([order.col, order.dir]);\n });\n PJQ.helpers.cookieHelpers.setCookie(self.options.orderCookie, JSON.stringify(orderArr));\n }, this));\n }\n\n this.$el.off('length.dt');\n if (_.size(this.options.pageLengthCookie) > 0) {\n let self = this;\n let cookieVal = PJQ.helpers.cookieHelpers.getCookie(self.options.pageLengthCookie);\n if (_.size(cookieVal) > 0) {\n self.options.pageLength = parseInt(cookieVal);\n }\n\n self.$el.on('length.dt', _.bind(function (e, settings, details) {\n PJQ.helpers.cookieHelpers.setCookie(self.options.pageLengthCookie, details);\n }, this));\n }\n\n if (this.options.hasFooter) {\n if (typeof this.options.footer === 'function') {\n this.$dataTable.append(this.options.footer(this));\n } else {\n let colMarkup = '';\n _.each(typeof this.options.columns === 'function' ? this.options.columns() : this.options.columns, (column) => {\n if (column.visible !== false) {\n let col = '';\n if (typeof column.renderFooter === 'function') {\n col = column.renderFooter(this.options.data);\n }\n colMarkup += '<th>' + (col ?? '') + '</th>';\n }\n })\n this.$dataTable.append('<tfoot><tr>' + colMarkup + '</tr></tfoot>');\n }\n }\n let self = this,\n filterData = this.getFilterData(),\n groupByCol = this.getGroupByColumn();\n if (groupByCol != null) {\n this.options.orderFixed = [[groupByCol.index, 'asc']];\n\n // if the group by column data is array data\n // we need to clone each object for each item in the array so items can be in multiple groups\n if (groupByCol.column != null && groupByCol.column.isArrayGroup && _.size(filterData) > 0) {\n let attr;\n if (groupByCol.column.attribute) {\n attr = groupByCol.column.attribute\n } else if (typeof groupByCol.column.columnData) {\n attr = groupByCol.column.columnData;\n } else {\n attr = null;\n }\n if (_.size(attr) > 0) {\n let newData = [];\n _.each(filterData, function (item) {\n let colData = typeof groupByCol.column.columnData === 'function' ? groupByCol.column.columnData(item) : item[attr];\n if (_.size(colData) > 1) {\n _.each(colData, function (colItem) {\n if (typeof item.clone === 'function') {\n let newItem = item.clone();\n newItem.set(attr, [colItem]);\n newData.push(newItem);\n } else {\n let newItem = _.clone(colItem);\n newItem[attr] = [colItem];\n newData.push(newItem);\n }\n });\n } else {\n newData.push(item);\n }\n });\n filterData = newData;\n }\n }\n }\n\n this.dataTable = this.$dataTable.DataTable(_.defaults(\n {\n data: filterData,\n fixedHeader: {\n header: this.options.scrollRows && this.options.parentDataTable == null,\n footer: this.options.scrollRows && this.options.hasFooter\n },\n initComplete: function (settings, json) {\n // Add a table wrapper for scroll-x. See updateScrollbar()\n // this.wrap(\"<div class='table-wrapper'></div>\");\n\n if (typeof self.options.initComplete === 'function') {\n self.options.initComplete.call(this, settings, json);\n }\n },\n createdRow: _.bind(this.createdRow, this),\n rowId: function (a) {\n let id = a[rowIdAttr];\n return typeof id === 'number' ? id.toString() : id;\n }\n }, this.options));\n\n this.applyColumnWidths();\n\n if (this.options.enableColumnResize) {\n this.makeColumnsResizeable();\n }\n\n this.$dataTable.on('mouseup', function () {\n self.options.isResizing = false;\n });\n\n if (this.options.getPageCallback != null) {\n this.$dataTable.on('length.dt order.dt', _.bind(function () {\n this.clearServerCache = true;\n }, this));\n }\n\n let pageSizeContainer = this.$('.dataTables_length');\n if (_.size(pageSizeContainer) > 0) {\n pageSizeContainer.addClass('fs-14 text-dark');\n let pageSizeInput = pageSizeContainer.find('select');\n pageSizeInput.addClass('wd-80p mr-2');\n new PJQ.inputs.Selectpicker({\n el: pageSizeInput,\n isIntChoices: true,\n defaultValue: this.options.pageLength,\n onChange: _.bind(function (value) {\n if (typeof this.options.onPageSizeChange === 'function') {\n this.options.onPageSizeChange(value);\n }\n }, this)\n });\n }\n\n this.$wrapper = this.$('#dt_' + this.options.uuid + '_wrapper');\n this.afterSearch();\n\n if (this.options.isOverflowAuto) {\n this.$wrapper.find('.row>.col-sm-12').first().addClass('of-x-auto')\n }\n\n if (_.size(this.options.orderFixed) > 0) {\n _.each(this.options.orderFixed, function (arr) {\n this.$dataTable.find('thead > tr > th[data-column-index=\"' + arr[0].toString() + '\"]').addClass('hidden-before hidden-after');\n }, this)\n }\n\n let hasSettingsModel = this.options.settings != null,\n isBackboneSettings = this.options.settings instanceof Backbone.Model;\n this.$el.on('order.dt', _.bind(function (e, settings, details) {\n if (this.$dataTable.attr('id') !== $(e.target).attr('id')) {\n return;\n }\n\n e.stopPropagation();\n if (hasSettingsModel) {\n let oldOrderBy,\n oldOrderAscending,\n oldOrder = 0, columns = this.options.columns;\n if (isBackboneSettings) {\n oldOrderBy = this.options.settings.get('orderBy');\n oldOrderAscending = this.options.settings.get('orderAscending');\n } else {\n oldOrderBy = this.options.settings.orderBy;\n oldOrderAscending = this.options.settings.orderAscending;\n }\n\n _.each(columns, _.bind(function (column, index) {\n if (column.columnData === oldOrderBy)\n oldOrder = index;\n }, this));\n\n let detailCol = isBackboneSettings ? details[details.length - 1] : details[0],\n orderByCol = columns[detailCol.src],\n orderBy = orderByCol.columnData != null ? orderByCol.columnData : orderByCol.data,\n orderAscending = (detailCol.dir === 'asc');\n if (oldOrderBy !== orderBy || oldOrderAscending !== orderAscending) {\n if (isBackboneSettings) {\n this.options.settings.set('orderBy', orderBy);\n this.options.settings.set('orderAscending', orderAscending);\n if (this.options.settings.hasEndpoint()) {\n this.options.settings.save();\n }\n } else {\n this.options.settings.orderBy = orderBy;\n this.options.settings.orderAscending = orderAscending;\n }\n this.orderByChanged();\n }\n } else {\n this.orderByChanged(details);\n }\n }, this));\n\n if (this.options.colReorder != null) {\n this.$el.off('column-reorder.dt');\n this.$el.on('column-reorder.dt', _.bind(function (e, settings, details) {\n e.stopPropagation();\n if (details.drop || this.options.colReorder.realtime !== false) {\n let columns = this.options.columns,\n fixedLeft,\n fixedRight;\n if (typeof this.options.colReorder === 'object') {\n fixedLeft = this.options.colReorder.fixedColumnsLeft > 0 ? this.options.colReorder.fixedColumnsLeft : 0;\n fixedRight = this.options.colReorder.fixedColumnsRight > 0 ? this.options.colReorder.fixedColumnsRight : 0;\n } else {\n fixedLeft = 0;\n fixedRight = 0;\n }\n _.each(columns, function (col, index) {\n let curSort = col.sort != null ? col.sort : index;\n col.sort = details.mapping[curSort];\n });\n if (this.options.settings != null) {\n let newColumns = _.map(_.sortBy(_.filter(columns, function (column) {\n let colNum = column.sort + 1;\n return (colNum > fixedLeft && colNum <= _.size(columns) - fixedRight);\n }), function (column) {\n return column.sort;\n }), function (column) {\n return column.columnData;\n });\n if (isBackboneSettings) {\n this.options.settings.set('columns', newColumns);\n this.options.settings.save();\n } else {\n this.options.settings.columns = newColumns;\n }\n this.columnOrderChanged(newColumns);\n }\n\n this.columnOrderChanged(_.sortBy(columns, function (column) {\n return column.sort;\n }));\n }\n }, this));\n }\n\n if (_.size(this.options.toggleRowClass) > 0) {\n this.$el.off('click', this.options.toggleRowClass);\n this.$el.on('click', this.options.toggleRowClass, _.bind(this.childRowToggle, this));\n\n this.$el.off('click', '.toggle-all-rows');\n this.$el.on('click', '.toggle-all-rows', _.bind(this.toggleAllChildRows, this));\n }\n\n // Resize observer to update scrollbar when the table width changes. Calls updateScrollbar() when the table width changes\n // let resizeObserver = new ResizeObserver(entries => {\n // for (let entry of entries) {\n // if (entry.contentRect.width) {\n // self.updateScrollbar();\n // }\n // }\n // });\n\n // Have resizeObserver observe the datatable element\n // if (this.$dataTable[0]) {\n // resizeObserver.observe(this.$dataTable[0]);\n // }\n\n this.initializeToggledRows();\n this.afterDataTableRender();\n },\n makeColumnsResizeable: function () {\n let self = this,\n tableWidth = self.$dataTable.width(),\n minColumnWidth = 30;\n\n if (this.options.colReorder != null && this.options.enableColumnResize) {\n let settings = self.dataTable.settings()[0];\n if (settings == null) {\n return;\n }\n\n let internalColReorder = settings._colReorder;\n let colReorderMouseDown = $.fn.dataTable.ColReorder.prototype._fnMouseDown;\n\n this.$dataTable.find('thead th').off('mousedown.ColReorder touchstart.ColReorder');\n this.$dataTable.find('thead th').on('mousedown.ColReorder touchstart.ColReorder', function (e) {\n const offsetX = e.pageX - $(this).offset().left;\n\n if (offsetX > $(this).outerWidth() - 5) {\n self.options.isResizing = true;\n } else {\n self.options.isResizing = false;\n colReorderMouseDown.call(internalColReorder, e, this);\n }\n });\n }\n\n self.$dataTable.find('thead').first().find('th').resizable({\n handles: \"e\",\n start: function (event, ui) {\n self.options.isResizing = true;\n\n self.$dataTable.find('thead th').each(function () {\n this.addEventListener(\"click\", self.preventBubble, {capture: true});\n });\n self.$dataTable.on('mouseup.preventBubble', self.preventBubble);\n\n self.columnWidths = [];\n self.$dataTable.find('thead').first().find('th').each(function () {\n const width = $(this).width();\n self.columnWidths.push(width);\n $(this).css('width', width + 'px');\n });\n\n self.$dataTable.find('tbody').first().find('tr').each(function () {\n $(this).find('td').each(function (i) {\n $(this).css('width', self.columnWidths[i] + 'px');\n });\n });\n\n self.$dataTable.css('width', tableWidth + 'px');\n },\n resize: function (event, ui) {\n let thIndex = $(this).index();\n let newWidth = ui.size.width;\n let currentTh = $(this);\n let nextTh = self.$dataTable.find('thead').first().find('th').eq(thIndex + 1);\n\n if (nextTh.length) {\n let totalAvailableWidth = currentTh.width() + nextTh.width();\n let remainingWidth = totalAvailableWidth - newWidth;\n\n if (remainingWidth > minColumnWidth) {\n currentTh.css('width', newWidth + 'px');\n nextTh.css('width', remainingWidth + 'px');\n\n self.$dataTable.find('tbody').first().find('tr').each(function () {\n $(this).find('td').eq(thIndex).css('width', newWidth + 'px');\n $(this).find('td').eq(thIndex + 1).css('width', remainingWidth + 'px');\n });\n } else {\n currentTh.css('width', totalAvailableWidth - minColumnWidth + 'px');\n nextTh.css('width', minColumnWidth + 'px');\n\n self.$dataTable.find('tbody').first().find('tr').each(function () {\n $(this).find('td').eq(thIndex).css('width', totalAvailableWidth - minColumnWidth + 'px');\n $(this).find('td').eq(thIndex + 1).css('width', minColumnWidth + 'px');\n });\n }\n }\n },\n stop: function (event, ui) {\n self.saveColumnWidths();\n\n self.$dataTable.find('thead th').each(function () {\n this.removeEventListener(\"click\", self.preventBubble, {capture: true});\n });\n self.$dataTable.off('mouseup.preventBubble');\n\n self.options.isResizing = false;\n }\n });\n },\n updateScrollbar: function (context) {\n // This function exists because resizeable columns causes the table to be larger than its container, so it will always show a scroll bar if overflow-x is auto/scroll\n // This function will check if the table is bigger than the wrapper, and if it is, it will add a scrollbar to the wrapper\n // .table-wrapper is added in the initComplete function of the datatable\n let $wrapper = this.$wrapper,\n $table = this.$dataTable\n\n if (!$wrapper || !$table) {\n return;\n }\n\n // Don't add scrollbar if the table is nested inside another table, only the outer table should have the scrollbar\n let isNestedTable = $wrapper.closest('table').length > 0;\n\n // If the table is bigger than the wrapper, then add scrollbar\n if ($table.outerWidth() > $wrapper.width() && !isNestedTable) {\n $wrapper.css('overflow-x', 'auto');\n } else {\n $wrapper.css('overflow-x', 'visible');\n }\n },\n preventBubble: function (e) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n },\n saveColumnWidths: function () {\n let columnWidths = [],\n self = this;\n this.$dataTable.find('thead th').each(function () {\n let widthPercent = $(this).width() / self.$dataTable.width() * 100;\n columnWidths.push(widthPercent);\n });\n\n PJQ.helpers.cookieHelpers.setCookie(this.options.columnWidthCookie, JSON.stringify(columnWidths));\n },\n applyColumnWidths: function () {\n if (this.options.columnWidthCookie == null) {\n return;\n }\n\n let cookieVal = PJQ.helpers.cookieHelpers.getCookie(this.options.columnWidthCookie);\n\n if (!cookieVal) {\n return;\n }\n\n cookieVal = JSON.parse(cookieVal);\n\n if (cookieVal && cookieVal.length === this.$dataTable.find('thead th').length) {\n this.$dataTable.find('thead th').each(function (i) {\n $(this).css('width', cookieVal[i] + '%');\n });\n this.$dataTable.find('tbody tr').each(function () {\n $(this).find('td').each(function (i) {\n $(this).css('width', cookieVal[i] + '%');\n });\n });\n }\n },\n beforeRemove: function () {\n $(window).off('resize.' + this.options.uuid);\n },\n pageCache: [],\n getPage: function (data, callback) {\n let pageNumber = 1,\n pageSize = data.length;\n if (data.start != null) {\n pageNumber = (data.start / pageSize) + 1;\n } else if (this.dataTable != null) {\n let pageInfo = this.dataTable.page.info();\n pageNumber = pageInfo.page + 1;\n }\n if (this.clearServerCache) {\n this.clearServerCache = false;\n this.pageCache = [];\n }\n\n if (this.pageCache[pageNumber - 1] == null) {\n let orderArr = [];\n _.each(data.order, function (order) {\n let columnOrderName = data.columns[order.column].data;\n if (_.size(columnOrderName) > 0 && columnOrderName.indexOf('attributes.') !== -1) {\n columnOrderName = columnOrderName = columnOrderName.substr(columnOrderName.indexOf('.') + 1);\n }\n orderArr.push({\n name: columnOrderName,\n direction: order.dir\n });\n });\n let cache = this.pageCache;\n this.options.getPageCallback(pageNumber, pageSize, orderArr, _.bind(function (rows, rowCount) {\n //Its the first page, lets set the total count from the callback result\n if (pageNumber === 1) {\n this.totalRows = rowCount;\n }\n cache[pageNumber - 1] = {\n recordsTotal: this.totalRows,\n recordsFiltered: this.totalRows,\n data: rows\n };\n callback(cache[pageNumber - 1]);\n }), this);\n } else {\n callback(this.pageCache[pageNumber - 1]);\n }\n },\n afterDataTableRender: function () {\n if (typeof this.options.afterDataTableRender === 'function') {\n this.options.afterDataTableRender(this.dataTable);\n }\n },\n getColumns: function () {\n return this.options.columns;\n },\n orderByChanged: function () {\n if (typeof this.options.orderByChanged === 'function') {\n this.options.orderByChanged(...arguments);\n }\n },\n columnOrderChanged: function () {\n if (typeof this.options.columnOrderChanged === 'function') {\n this.options.columnOrderChanged(...arguments);\n }\n },\n createdRow: function (row, data) {\n if (typeof this.options.createdRow === 'function') {\n this.options.createdRow(row, data);\n }\n },\n getRow: function (obj) {\n if (this.dataTable) {\n if (typeof obj === 'object' && obj[0]) {\n let t = $(obj);\n if (t.length > 0) {\n obj = t;\n }\n }\n\n if (obj instanceof $) {\n if (!obj.is('tr')) {\n obj = obj.closest('tr');\n }\n obj = '#' + obj.attr('id');\n } else if (typeof obj === 'number' || typeof obj === 'string')\n obj = ('#' + obj.toString());\n return this.dataTable.row(obj);\n }\n return null;\n },\n addRow: function (obj) {\n if (this.dataTable != null) {\n if (PJQ.helpers.objectHelpers.refinedType(obj) === 'array') {\n this.dataTable.rows.add(obj).draw(false);\n } else {\n this.dataTable.row.add(obj).draw(false);\n }\n }\n },\n refreshRow: function (row) {\n if (typeof row.remove !== 'function') {\n row = this.getRow(row);\n }\n\n this.dataTable.row(row).invalidate().draw();\n },\n resetData: function (data) {\n this.options.data = data;\n this.dataTable.clear();\n this.dataTable.rows.add(this.getFilterData());\n this.search();\n },\n removeRow: function (row, isRefresh = true) {\n if (typeof row.remove !== 'function') {\n row = this.getRow(row);\n }\n\n row.remove();\n if (isRefresh) {\n this.refresh();\n }\n\n if (typeof this.options.onRowRemoved === 'function') {\n this.options.onRowRemoved(row);\n }\n },\n removeAllRows: function () {\n if (this.dataTable != null) {\n this.dataTable.clear();\n }\n },\n getFilterData: function () {\n return typeof this.options.getFilterData === 'function' ? this.options.getFilterData(this, this.options.data) : this.options.data;\n },\n getFilter: function (attr) {\n if (this.filters == null) {\n return null;\n }\n let find = this.filters[attr];\n return find ? find : null;\n },\n setFilter: function (attr, value) {\n if (this.filters == null) {\n this.filters = {};\n }\n this.filters[attr] = value;\n this.filter();\n },\n filter: function () {\n if (this.dataTable != null) {\n if (this.options.getPageCallback != null) {\n this.clearServerCache = true;\n this.dataTable.draw();\n } else {\n this.dataTable.clear();\n this.filteredData = this.getFilterData();\n this.dataTable.rows.add(this.filteredData);\n this.search();\n }\n }\n },\n clearFilters: function () {\n this.filters = null;\n this.renderHeader();\n this.filter();\n },\n getFilteredRowData: function () {\n let filteredRows = this.dataTable.rows({filter: 'applied'}).data(),\n result = [];\n _.each(filteredRows, function (filteredRow) {\n result.push(filteredRow);\n })\n return result;\n },\n toggleGroup: function (e) {\n let name = $(e.currentTarget).data('name');\n this.options.collapsedGroups[name] = !this.options.collapsedGroups[name];\n this.dataTable.draw();\n },\n getGroupByColumnIndex: function (id) {\n let result = _.findIndex(this.options.columns, function (col) {\n return col.attribute === id || col.columnData === id;\n })\n return result === -1 ? null : result;\n },\n getGroupByColumn: function () {\n let colInd = this.getGroupByColumnIndex(this.getGroupBy());\n col = colInd != null ? this.options.columns[colInd] : null;\n return col ? {\n column: col,\n index: colInd\n } : null;\n },\n getGroupBy: function () {\n return typeof this.options.groupBy !== 'undefined' ? this.options.groupBy : null;\n },\n setGroupBy: function (groupBy) {\n this.options.groupBy = groupBy;\n\n if (_.size(this.options.groupByKey) > 0) {\n window.localStorage.removeItem(this.Key_Access_Token);\n if (_.size(groupBy) > 0) {\n window.localStorage.setItem(this.options.groupByKey, groupBy);\n }\n }\n\n this.render();\n },\n startGroupRender: function (rows, group) {\n if (group == null) {\n return;\n }\n\n let collapsed = !!this.options.collapsedGroups[group];\n\n rows.nodes().each(function (r) {\n r.style.display = collapsed ? 'none' : '';\n });\n\n let toggle = '';\n if (this.options.disableGroupToggle !== true) {\n let toggleClass = collapsed ? 'fa-plus-square' : 'fa-minus-square';\n toggle = `<span data-name=\"${group}\" class=\"fal ml-2 mr-2 fa-lg fa-fw group-start toggler ${toggleClass}\" style=\"width:auto;\"></span>`;\n }\n\n // Add group name to <tr>\n return $('<tr/>')\n .append('<td colspan=\"' + rows.columns()[0].length + '\"><div class=\"d-flex wd-100 align-items-center\">' + toggle + '<div class=\"wd-100\" style=\"display:inherit;\">' + this.getGroupHeader(group, rows) + '</div></div></td>').attr('data-name', group)\n .toggleClass('collapsed', collapsed);\n },\n getGroupHeader: function (group, rows) {\n if (typeof this.options.getGroupHeader === 'function') {\n return this.options.getGroupHeader(group, rows);\n }\n\n return '<span class=\"fs-15 font-weight-bold text-dark p-1\">' + group + ' (' + rows.count() + ')</span>';\n },\n refresh: function (type = false) {\n if (this.dataTable != null) {\n this.dataTable.rows().invalidate(type);\n this.adjust(type);\n this.onTableDraw();\n }\n },\n adjust: function (type = false) {\n this.dataTable.columns.adjust().draw(type);\n },\n getSearchText: function () {\n let $search = this.$('.datatable-search');\n return $search.length > 0 ? $search.val() : '';\n },\n search: function (searchText) {\n searchText = this.getSearchText();\n //Hack to make the zeroRecords language be used instead of emptyTable\n //This is only needed when there are records filtered before the search\n //If the remaining records are filtered by search, the datatable will handle the language correctly\n if (this.options.getPageCallback != null) {\n if (this.lastSearchText !== searchText) {\n if (this.searchTimeout != null) {\n clearTimeout(this.searchTimeout);\n }\n this.searchTimeout = setTimeout(_.bind(function () {\n this.clearServerCache = true;\n this.dataTable.search(searchText).draw();\n this.afterSearch();\n }, this), 500);\n }\n } else {\n let colSearch = false;\n if (searchText.indexOf(\":\") !== -1) {\n let searchArr = searchText.split(':');\n if (_.size(searchArr) > 1) {\n let colName = searchArr[0],\n colSearchText = searchArr[1],\n colIndex = this.colNameMap[colName.toLowerCase()];\n if (colIndex != null) {\n colSearch = true;\n this.dataTable.search('').column(colIndex).search(colSearchText).draw();\n }\n }\n }\n if (!colSearch) {\n this.dataTable.columns().search('');\n this.dataTable.search(searchText).draw();\n }\n\n //If there is a filter prior to the search, we have to override the emptyTable language with zeroRecords\n //zeroRecords is only displayed automatically using DataTables built in search\n if (_.size(searchText) === 0 && _.size(this.filteredData) === 0 && _.size(this.options.data) > 0) {\n this.$(\".dataTables_empty\").html(this.options.language.zeroRecords);\n }\n this.initializeToggledRows();\n this.afterSearch();\n }\n this.lastSearchText = searchText;\n },\n afterSearch: function () {\n\n },\n addContextMenu: function (newOptions) {\n this.options.contextMenuOptions = newOptions;\n this.contextMenu = new PJQ.menus.ContextMenu(_.defaults(this.options.contextMenuOptions, {\n el: this.$wrapper,\n selector: 'tr[id]:not(.child-row)',\n isHideNoActions: true,\n isWrapInFixedContainer: true,\n fetchElementData: _.bind(function (element) {\n return this.getRow(element);\n }, this),\n onOpen: _.bind(function (row) {\n $(row.node()).addClass('context-row');\n }, this),\n onClose: _.bind(function () {\n this.$('.context-row').removeClass('context-row');\n }, this)\n }));\n },\n makeSortable: function (options) {\n let data = this.dataTable.data();\n if (_.size(data) === 0) {\n return;\n }\n\n let self = this;\n this.options.sortableOptions = options;\n\n if (this.options.sortableOptions.isNestedTable) {\n new PJQ.Sortable(self.$el, _.defaults(this.options.sortableOptions, {\n data: data[0].collection,\n dataAttribute: 'sortOrder',\n items: 'tbody tr:not(.child-row-footer)',\n connectWith: 'tbody tr:not(.child-row-footer)',\n start: function (event, ui) {\n $(this).sortable(\"refreshPositions\");\n },\n change: function (event, ui) {\n let placeholder = ui.placeholder,\n prevItem = placeholder.prev(),\n nextItem = placeholder.next(),\n draggedItem = ui.helper;\n\n if (draggedItem.hasClass('child-row')) {\n let level = draggedItem.data('level');\n if (!((nextItem.hasClass('child-row') || nextItem.hasClass('child-row-footer')) && nextItem.data('level') === level)) {\n placeholder.hide();\n return;\n }\n } else {\n if (!(prevItem.data('parentId') == null || prevItem.length === 0)) {\n placeholder.hide();\n return;\n }\n }\n\n placeholder.show();\n },\n stop: function (event, ui) {\n let draggedItem = ui.item,\n level = draggedItem.data('level'),\n parentId,\n prevItem = draggedItem.prev();\n\n if (level != null) {\n // If the next item is not a child-row or child-row-footer, and it's level is not the same as the dragged item, then cancel the drop\n let nextItem = draggedItem.next();\n if (!((nextItem.hasClass('child-row') || nextItem.hasClass('child-row-footer')) && nextItem.data('level') === level)) {\n $(this).sortable('cancel');\n return;\n }\n\n // If the dragged elements level is 1, then we need to find the first element above it that doesn't have a level\n // If the dragged elements level is greater than 1, then we need to find the first element above it that has a level 1 less than the dragged element\n // The parentId will be the id of the element found that meets the above criteria\n if (level === 1 || level == null) {\n while (prevItem.length) {\n if (!prevItem.data('level')) {\n parentId = prevItem.attr('id');\n break;\n }\n prevItem = prevItem.prev();\n }\n } else {\n while (prevItem.length) {\n if (prevItem.data('level') === level - 1) {\n parentId = prevItem.attr('id');\n break;\n }\n prevItem = prevItem.prev();\n }\n }\n\n if (!parentId) {\n $(this).sortable('cancel');\n return;\n }\n\n draggedItem.attr('data-parent-id', parentId).data('parent-id', parentId);\n let siblings = self.$dataTable.find('tbody tr').filter(function () {\n return $(this).data('parent-id') === parentId && !$(this).hasClass('child-row-footer');\n });\n let position = siblings.index(draggedItem) + 1;\n\n let item,\n parent;\n\n _.each(options.data, function (data) {\n if (data.cid === draggedItem.attr('id')) {\n item = data;\n }\n\n if (data.cid === parentId) {\n parent = data;\n }\n });\n\n if (item == null || parent == null || position <= 0) {\n $(this).sortable('cancel');\n return;\n }\n\n self.onNestedRowSorted(item, position, parent);\n } else {\n if (!(prevItem.data('parentId') == null || prevItem.length === 0)) {\n $(this).sortable('cancel');\n return;\n }\n\n let siblings = self.$dataTable.find('tbody tr').filter(function () {\n return !$(this).data('parent-id');\n });\n\n let position = siblings.index(draggedItem) + 1,\n item = _.find(options.data, (data) => data.cid === draggedItem.attr('id'));\n\n if (item == null || position <= 0) {\n $(this).sortable('cancel');\n return;\n }\n\n self.onNestedRowSorted(item, position, null);\n }\n }\n }));\n } else {\n new PJQ.Sortable(self.$('table'), _.defaults(this.options.sortableOptions, {\n containment: \"document\",\n data: data[0].collection,\n dataAttribute: 'sortOrder',\n items: \".even, .odd\",\n connectWith: \".even, .odd\",\n // Start is necessary to keep row CSS from squishing together\n // Selects the table header row and copies the width of the td to the current dragged object\n start: _.bind(function (a, b) {\n let headerRow = self.$('thead')[0].firstChild;\n _.each(b.item[0].children, function (td, index) {\n if ($(headerRow.children[index])[0]) {\n td.width = $(headerRow.children[index])[0].style.width\n }\n })\n }),\n stop: _.bind(function (a, b) {\n let sortedRow = b.item[0].id,\n rowData = options.data.get(sortedRow),\n pageInfo = self.dataTable.page.info();\n self.$('tr').filter('.odd, .even').each(function (index, html) {\n let sortNumber = (pageInfo.page * pageInfo.length) + (index + 1);\n let row = $(html)[0].id;\n if (row === sortedRow) {\n self.onRowSorted(rowData, sortNumber);\n }\n });\n }, this)\n }));\n }\n },\n onNestedRowSorted: function (item, newSort, newParent) {\n if (typeof this.options.onNestedRowSorted === 'function') {\n this.options.onNestedRowSorted(item, newSort, newParent);\n }\n },\n onRowSorted: function (data, sortOrder) {\n if (data == null || _.size(this.options.sortableOptions.dataAttribute) === 0) {\n return;\n }\n\n data.set(this.options.sortableOptions.dataAttribute, sortOrder);\n\n if (this.options.sortableOptions.shouldSave !== false) {\n data.save(null, {\n success: _.bind(function () {\n if (this.collection != null) {\n this.collection.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n }\n }, this)\n });\n }\n },\n toggleAllChildRows: function (e) {\n let self = this,\n expand = _.size(this.expandedRowIds) === 0;\n this.dataTable.rows().every(function () {\n self.toggleChildRow(this, expand);\n });\n this.renderToggleAllIcon();\n },\n renderToggleAllIcon: function () {\n let $icon = $('.toggle-all-rows');\n if ($icon.length === 0) {\n return;\n }\n\n let hasExpanded = _.size(this.expandedRowIds) > 0;\n if (hasExpanded) {\n $icon.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n } else {\n $icon.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n }\n },\n childRowToggle: function (sender, rowOverride) {\n let $target = rowOverride ? $(rowOverride.selector.rows).find(this.options.toggleRowClass) : $(sender.currentTarget),\n id = $target.data('id'),\n tr = $target.closest('tr'),\n row = this.getRow(tr);\n this.toggleChildRow(row);\n },\n toggleChildRow: function (row, show = null, preventOnToggleEvent = false) {\n if (this.expandedRowIds == null) {\n this.expandedRowIds = [];\n }\n\n let tr = $(row.node()),\n item = row.data(),\n id = item[this.options.rowId],\n $icon = tr.find(this.options.toggleRowClass),\n level = tr.data('level');\n if (show !== true && (row.child.isShown() || tr.hasClass('shown') || this.expandedRowIds.includes(id))) {\n // This row is already open - close it\n if (this.options.childDataTables != null) {\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== id;\n }, this));\n }\n\n row.child.hide();\n tr.removeClass('shown');\n this.expandedRowIds = this.expandedRowIds.filter(expandedId => expandedId !== id);\n $icon.removeClass('fa-minus-circle').addClass('fa-plus-circle');\n\n let parentId = item[this.options.rowId];\n if (_.size(parentId) > 0) {\n let childRows = this.$('tr.child-row[data-parent-id=\"' + parentId + '\"], tr.child-row-footer[data-parent-id=\"' + parentId + '\"], tr.child-row-header[data-parent-id=\"' + parentId + '\"]');\n if (_.size(childRows) > 0) {\n childRows.remove();\n }\n }\n } else if (show !== false) {\n $icon.removeClass('fa-plus-circle').addClass('fa-minus-circle');\n\n this.renderChildRows(row, id, level ? level + 1 : 1);\n tr.addClass('shown');\n this.expandedRowIds.push(id);\n }\n\n if (!preventOnToggleEvent) {\n this.onChildRowToggle(row);\n }\n this.renderToggleAllIcon();\n },\n onChildRowToggle: function (row) {\n if (typeof this.options.onChildRowToggle === 'function') {\n this.options.onChildRowToggle(row);\n }\n },\n initializeToggledRows: function () {\n let expandAll = this.expandedRowIds == null && this.options.expandAll;\n if (_.size(this.expandedRowIds) === 0 && !expandAll)\n return;\n\n let self = this;\n this.dataTable.rows().every(function (rowIdx, tableLoop, rowLoop) {\n let row = this,\n data = row.data(),\n id = data[self.options.rowId];\n if (expandAll || _.contains(self.expandedRowIds, id)) {\n self.toggleChildRow(row, true, true);\n }\n });\n },\n getChildHeader: function (opts) {\n if (typeof this.options.getChildHeader === 'function') {\n return this.options.getChildHeader(opts);\n }\n return '';\n },\n getChildFooter: function (opts) {\n if (typeof this.options.getChildFooter === 'function') {\n return this.options.getChildFooter(opts);\n }\n return '';\n },\n renderChildRows: function (row, parentId, level = 1) {\n if (this.childRows == null) {\n this.childRows = {};\n }\n\n if (!this.childRows[level]) {\n this.childRows[level] = {};\n }\n\n let childData = this.getRowChildData(row);\n if (childData != null) {\n let fnRender = _.bind(function () {\n let childCols = this.getRowChildColumns({\n level: level\n });\n if (childCols != null) {\n let childRows = '';\n\n let childHeader = this.getChildHeader(row);\n if (_.size(childHeader) > 0) {\n let displayedColumnsCount = this.dataTable.columns(':visible').count();\n childRows += `<tr><td style=\"border-top: none;\" colspan=\"${displayedColumnsCount}\"><table class=\"wd-100 table dataTable no-footer\"><tr class=\"child-row-header\" data-level=\"${level}\" data-parent-id=\"${parentId}\">${childHeader}</tr>`;\n }\n\n childData.forEach((item) => {\n childRows += this.renderChildRow(parentId, item, level, childCols);\n });\n\n let footer = this.getChildFooter(row);\n if (_.size(footer) > 0) {\n childRows += `<tr class=\"child-row-footer\" data-level=\"${level}\" data-parent-id=\"${parentId}\">${footer}</tr>`;\n }\n\n if (_.size(childHeader) > 0) {\n childRows += '</table></td></tr>';\n }\n\n $(row.node()).after(childRows);\n return;\n }\n\n let childClass = 'subgrid-' + parentId.toString(),\n $childTable = $('<div data-id=\"' + parentId + '\" />', {\n class: childClass + ' p-2'\n });\n row.child($childTable).show();\n let childTable = this.getRowChildTable({\n el: $childTable,\n data: PJQ.helpers.objectHelpers.isBackboneCollection(childData) ? childData.models : childData,\n isHideSearch: true,\n parentId: parentId,\n parentData: row.data()\n });\n this.options.childDataTables = _.filter(this.options.childDataTables, _.bind(function (childDt) {\n return childDt.options.parentId !== parentId;\n }, this));\n this.options.childDataTables.push(childTable);\n }, this);\n\n if (PJQ.helpers.objectHelpers.isBackboneModel(childData)) {\n childData.fetch({\n success: _.bind(function () {\n // loader.remove();\n fnRender();\n }, this)\n });\n } else {\n fnRender();\n }\n }\n },\n renderChildRow: function (parentId, item, level, cols = null, replace = false) {\n if (cols == null) {\n cols = this.getRowChildColumns({\n level: level\n });\n }\n\n let row = `<tr data-parent-id=\"${parentId}\" data-level=\"${level}\" data-row-id=\"${item.cid}\" id=\"${item.cid}\" class=\"child-row\">`;\n cols.forEach((column, index) => {\n let content = typeof column.render === 'function' ? column.render(null, null, item) : '';\n row += `<td style=\"width:${column.width || 'auto'}\">${content}</td>`;\n });\n row += '</tr>';\n\n if (replace) {\n let $row = this.$('tr.child-row[data-row-id=\"' + item[this.options.rowId] + '\"]');\n if ($row.length > 0) {\n $row.replaceWith(row);\n } else {\n\n }\n }\n\n return row;\n },\n renderChildColumn: function (colIndex, item, level) {\n let cols = this.getRowChildColumns({\n level: level\n }),\n column = cols[colIndex];\n if (column == null) {\n return;\n }\n\n let content = typeof column.render === 'function' ? column.render(null, null, item) : '',\n $row = this.$('tr.child-row[data-row-id=\"' + item[this.options.rowId] + '\"]');\n if ($row.length === 0) {\n return;\n }\n\n let $replace = $row.find('td:nth-child(' + (colIndex + 1).toString() + ')');\n if ($replace.length === 0) {\n return;\n }\n $replace.replaceWith(`<td style=\"width:${column.width || 'auto'}\">${content}</td>`);\n },\n getRowChildColumns: function (opts) {\n if (typeof this.options.getRowChildColumns === 'function') {\n return this.options.getRowChildColumns(opts);\n }\n return null;\n },\n getRowChildTable: function (opts) {\n if (typeof this.options.getRowChildTable === 'function') {\n return this.options.getRowChildTable(opts);\n }\n return null;\n },\n getRowChildData: function (row) {\n if (typeof this.options.getRowChildData === 'function') {\n return this.options.getRowChildData(row);\n }\n return {};\n },\n copyPhone: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('phone'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Number copied to clipboard.'\n });\n },\n copyEmail: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('email'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Email copied to clipboard.'\n });\n }\n});\n","PJQ.models.customFields = {};\nPJQ.collections.customFields = {};\nPJQ.views.customFields = {};\n\nPJQ.helpers.customFieldHelpers = {\n getDisplayValue: function (type, value, choices = null, isMultipleChoice = false) {\n // currently only supports choices being a backbone collection\n if (type == null || value == null || (type === 'CHOICE' && _.size(choices) === 0)) {\n return '';\n }\n let typeUpper = type.toUpperCase(),\n valueType = PJQ.helpers.objectHelpers.refinedType(value),\n result = '';\n switch (typeUpper) {\n case PJQ.constants.customFields.fieldTypes.TEXT:\n if (valueType === 'string') {\n result = value;\n } else if (valueType === 'number') {\n result = valueType.toString();\n }\n break;\n case PJQ.constants.customFields.fieldTypes.CHOICE:\n let fnGetChoiceName = function (choiceId) {\n if (choiceId == null) {\n return '';\n }\n let chId;\n if (typeof choiceId === 'number') {\n chId = choiceId;\n } else if (typeof choiceId === 'string') {\n if (_.size(choiceId) === 0) {\n return '';\n }\n chId = parseInt(choiceId);\n if (isNaN(chId)) {\n return '';\n }\n }\n let choice = choices.get(chId);\n if (choice != null) {\n if (_.size(choice.get('value')) > 0) {\n return choice.get('value');\n } else if (_.size(choice.get('name')) > 0) {\n return choice.get('name');\n }\n }\n return '';\n }\n if (isMultipleChoice) {\n let arrValue;\n if (valueType === 'array') {\n arrValue = value;\n } else if (valueType === 'string') {\n arrValue = value.split('|');\n } else {\n arrValue = [];\n }\n\n let choiceNames = [];\n _.each(arrValue, function (choiceId) {\n let choiceName = fnGetChoiceName(choiceId);\n if (_.size(choiceName) > 0) {\n choiceNames.push(choiceName);\n }\n })\n result = choiceNames.join(', ');\n } else {\n let choiceId;\n if (valueType === 'number') {\n choiceId = value;\n } else if (valueType === 'string') {\n choiceId = parseInt(value);\n } else {\n choiceId = null;\n }\n result = choiceId == null ? '' : fnGetChoiceName(choiceId);\n }\n break;\n case PJQ.constants.customFields.fieldTypes.BOOL:\n let boolValue;\n if (valueType === 'boolean') {\n boolValue = value;\n } else if (valueType === 'string') {\n if (_.size(value) === 0) {\n return '';\n }\n let lowerValue = value.toLowerCase();\n boolValue = lowerValue === 'true' || lowerValue === 'yes';\n } else if (valueType === 'number') {\n boolValue = value === 1;\n } else {\n boolValue = null;\n }\n if (boolValue == null) {\n result = '';\n } else {\n result = boolValue ? 'Yes' : 'No';\n }\n break;\n case PJQ.constants.customFields.fieldTypes.INT:\n case PJQ.constants.customFields.fieldTypes.MONEY:\n case PJQ.constants.customFields.fieldTypes.PERCENT:\n let intValue;\n if (valueType === 'number') {\n intValue = value;\n } else if (valueType === 'string') {\n intValue = parseInt(value);\n } else {\n intValue = null;\n }\n\n if (intValue == null || isNaN(intValue)) {\n result = '';\n } else if (typeUpper === PJQ.constants.customFields.fieldTypes.INT) {\n result = intValue.toString();\n } else if (typeUpper === PJQ.constants.customFields.fieldTypes.MONEY) {\n result = PJQ.helpers.formatHelpers.formatCurrency(intValue)\n } else if (typeUpper === PJQ.constants.customFields.fieldTypes.PERCENT) {\n result = intValue.toString() + '%';\n }\n break;\n case PJQ.constants.customFields.fieldTypes.DATE:\n case PJQ.constants.customFields.fieldTypes.DATETIME:\n let dateValue;\n if (valueType === 'date') {\n dateValue = value;\n } else if (valueType === 'string') {\n dateValue = new Date(value);\n } else {\n dateValue = null;\n }\n\n let isDateTime = typeUpper === PJQ.constants.customFields.fieldTypes.DATETIME,\n format;\n if (isDateTime) {\n format = PJQ.helpers.dateHelpers.dateFormats.DATE_TIME;\n } else {\n format = PJQ.helpers.dateHelpers.dateFormats.DATE;\n }\n result = dateValue == null ? '' : PJQ.helpers.dateHelpers.getDateString(dateValue, format, !isDateTime);\n break;\n default:\n result = value;\n }\n return result;\n }\n}\n\n\n//Models\nPJQ.models.customFields.CustomField = PJQ.models.BaseModel.extend({\n idAttribute: \"id\",\n collectionClass: function () {\n return PJQ.collections.customFields.CustomFieldChoices;\n },\n newChoiceCollection: function (choices) {\n return new (this.collectionClass())(choices);\n },\n parse: function (model) {\n if (model != null) {\n if (model.choices != null) {\n if (this.choices != null) {\n this.choices.reset(model.choices);\n } else {\n this.choices = this.newChoiceCollection(model.choices);\n this.choices.on('update', _.bind(function () {\n this.isDirty = true;\n }, this));\n }\n } else {\n this.choices = this.newChoiceCollection();\n this.choices.on('update', _.bind(function () {\n this.isDirty = true;\n }, this));\n }\n } else {\n this.choices = this.newChoiceCollection();\n this.choices.on('update', _.bind(function () {\n this.isDirty = true;\n }, this));\n }\n\n return model;\n },\n beforeSave: function () {\n this.set('choices', this.choices.getChangedModels());\n }\n});\n\nPJQ.models.customFields.CustomFieldChoice = PJQ.models.BaseModel.extend({\n idAttribute: \"id\"\n});\n\n\n//Collections\nPJQ.collections.customFields.CustomFields = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.customFields.CustomField\n});\n\nPJQ.collections.customFields.CustomFieldChoices = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.customFields.CustomFieldChoice\n});\n\n\n//Views\nPJQ.views.customFields.CustomFieldsForm = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Form'),\n subTemplates: {\n field: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Form-Field'),\n fieldInput: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Form-Field-Input')\n },\n isEdit: null, // null by default, will be used to seet canEdit if not null\n canEdit: true\n },\n beforeFirstRender: function () {\n if (this.options.isEdit != null) {\n this.options.canEdit = this.options.isEdit;\n }\n\n this.changedValues = [];\n if (this.options.fieldValues == null) {\n this.options.fieldValues = [];\n }\n\n if(this.options.applyDefaults !== false){\n _.each(this.collection.models, (field, index) => {\n let value = field.get('defaultValue') ?? '';\n if (field.get('fieldType') === PJQ.constants.customFields.fieldTypes.CHOICE || field.get('fieldType') === PJQ.constants.customFields.fieldTypes.INT) {\n value = parseInt(value);\n\n if (isNaN(value)) {\n value = null;\n }\n }\n\n let existingFieldValue = _.find(this.options.fieldValues, function (fieldValue) {\n return fieldValue.id === field.get('id');\n });\n value = value != null ? value : null;\n if (value == null) {\n return;\n }\n\n if (existingFieldValue == null) {\n this.options.fieldValues.push({\n fieldNumber: field.get('fieldNumber'),\n fieldTypeId: field.get('fieldTypeId'),\n fieldType: field.get('fieldType'),\n isMultiple: field.get('isMultiple'),\n value: value,\n id: field.get('id')\n })\n } else if (existingFieldValue.value == null) {\n existingFieldValue.value = value;\n }\n });\n }\n },\n afterRender: function () {\n _.each(_.sortBy(this.collection.models, function (model) {\n return model.get('sortOrder') != null ? model.get('sortOrder') : model.id\n }), function (field) {\n // Don't render anything for Upload V2 fields\n if (field.get('fieldTypeId') === 13) {\n return;\n }\n\n if ((field instanceof PJQ.models.contacts.ContactCustomField || field instanceof PJQ.models.contacts.CompanyCustomField) && field.get('isVisibleInRSVP') === false && !this.options.isAdmin) {\n return false;\n }\n\n let $cf = this.$('.custom-field-outer-' + field.id.toString()),\n $field = PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.field, {\n model: field,\n fieldValues: this.options.fieldValues,\n subTemplates: this.options.subTemplates,\n canEdit: this.options.canEdit,\n isAdmin: this.options.isAdmin\n });\n if (_.size($cf) > 0) {\n let colClasses = $cf.data('classes');\n $cf.replaceWith($field);\n if (_.size(colClasses) > 0) {\n $field.removeClass('col-sm-12 col-md-6 col-6 col-12').addClass(colClasses);\n }\n } else {\n this.$('.custom-fields').append($field);\n }\n }, this);\n this.attachFormEvents();\n },\n attachFormEvents: function () {\n let self = this;\n this.customFieldControls = [];\n\n this.$('.custom-field.input-text[data-p-bind],.custom-field.input-dollars-full[data-p-bind],.custom-field.input-numeric[data-p-bind],.custom-field.input-percent[data-p-bind],.custom-field.input-phone[data-p-bind],.custom-field.input-textarea[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n mask = input.data('mask');\n if (_.size(mask) > 0) {\n input.inputmask(mask, {\n placeholder: ''\n });\n } else if (input.hasClass('input-dollars-full')) {\n PJQ.helpers.inputHelpers.inputMaskCurrency(input, 2);\n } else if (input.hasClass('input-numeric')) {\n PJQ.helpers.inputHelpers.inputMaskInteger(input);\n } else if (input.hasClass('input-percent')) {\n PJQ.helpers.inputHelpers.inputMaskPercent(input, 2, true);\n } else if (input.hasClass('input-phone')) {\n PJQ.helpers.inputHelpers.inputMaskPhone(input);\n }\n\n self.customFieldControls.push({\n id: customFieldId,\n input: input\n });\n });\n\n this.$('.custom-field.input-select[data-p-bind],.custom-field.input-bool[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n control = new PJQ.inputs.Selectpicker({\n el: input,\n isIntChoices: !input.hasClass('input-bool') && !input.hasClass('input-state'),\n onChange: function (value) {\n if (input.hasClass('input-bool'))\n value = value.toLowerCase() === 'true';\n self.fieldChanged(customFieldId, value);\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: control\n });\n });\n\n this.$('.custom-field.input-date[data-p-bind],.custom-field.input-date-time').each(function () {\n let input = $(this),\n customFieldId = input.data('fieldId'),\n isDateTime = input.hasClass('input-date-time'),\n control = new PJQ.inputs.Datepicker({\n el: input,\n isUTC: false,\n datepickerOptions: {\n format: !isDateTime ? PJQ.helpers.dateHelpers.dateFormats.DATE.toUpperCase() : undefined\n },\n onChange: function (value) {\n if (!isDateTime)\n value = PJQ.helpers.dateHelpers.getDateString(value, PJQ.helpers.dateHelpers.dateFormats.DATE);\n\n self.fieldChanged(customFieldId, value);\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: control\n });\n });\n\n this.$('.custom-field.input-contact[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n fieldValue = _.find(self.options.fieldValues, function (fieldValue) {\n return fieldValue.id === customFieldId;\n });\n\n let value = fieldValue.value,\n isMultipleChoice = input.data('multipleChoice');\n if (isMultipleChoice) {\n value = new PJQ.collections.contacts.Contacts(value).models;\n } else if (value != null) {\n value = new PJQ.models.contacts.Contact(value);\n }\n\n let control = new PJQ.views.contacts.ContactsSelectInput({\n el: input,\n context: PJQ.constants.contacts.contexts.CONTACTS,\n selectedContact: value,\n isSingleChoice: !isMultipleChoice,\n isReadOnly: !self.options.canEdit,\n emptyNotice: \"No Contact Selected\",\n onChange: function (selectedContacts) {\n self.fieldChanged(customFieldId, selectedContacts);\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: control\n });\n });\n\n this.$('.custom-field.input-html[data-p-bind]').each(function () {\n let $htmlInput = $(this);\n let customFieldId = $htmlInput.data('pBind'),\n fieldValue = _.find(self.options.fieldValues, function (fieldValue) {\n return fieldValue.id === customFieldId;\n });\n new PJQ.inputs.HTMLEditor({\n el: $htmlInput,\n editorHeight: 600,\n defaultValue: _.size(fieldValue.value) > 0 ? fieldValue.value.replace(/(?:\\r\\n|\\r|\\n)/g, '<br>') : fieldValue.value,\n onChange: function (contents) {\n if (contents !== fieldValue.value) {\n self.fieldChanged(customFieldId, contents);\n }\n }\n });\n });\n\n this.$('.custom-field.file-upload-field').each(function () {\n\n let endpoint,\n fnInput = function ($input, attachments, endpoint) {\n let sortSettings;\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.SORT_USER_ATTACHMENTS))\n sortSettings = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.SORT_USER_ATTACHMENTS);\n\n let uploader = new PJQ.views.files.FileUploaderGrid({\n el: $input,\n canUpload: self.options.canEdit,\n canDelete: self.options.canEdit,\n collection: attachments,\n endpoint: endpoint,\n sortBy: sortSettings ? sortSettings.sortBy : null,\n sortDirection: sortSettings ? (sortSettings.sortBy ? 'asc' : 'desc') : null,\n onSuccess: function (file) {\n let guids = [file.guid];\n if (attachments != null) {\n _.each(attachments.models, function (attachment) {\n if (_.size(attachment.get('guid')) > 0) {\n guids.push(attachment.get('guid'));\n }\n });\n }\n self.fieldChanged($input.data('pBind'), guids.join('|'));\n },\n onDelete: function (file, callback) {\n let guids = [],\n delAttachments = [];\n if (attachments != null) {\n _.each(attachments.models, function (attachment) {\n if (_.size(attachment.get('guid')) > 0 && file.get('guid') !== attachment.get('guid')) {\n guids.push(attachment.get('guid'));\n } else {\n delAttachments.push(attachment);\n }\n });\n attachments.remove(delAttachments);\n }\n self.fieldChanged($input.data('pBind'), guids.join('|'));\n callback();\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: uploader\n });\n\n }\n\n if (self.options.model instanceof PJQ.models.users.User) {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'users'\n },\n {\n endpoint: 'attachments'\n }\n ]);\n }\n\n let $input = $(this);\n let customFieldId = $input.data('pBind'),\n fieldValue = _.find(self.options.fieldValues, function (fieldValue) {\n return fieldValue.id === customFieldId;\n });\n\n if (fieldValue && _.size(fieldValue.value) > 0) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'details'\n }\n ]),\n data: {\n guids: fieldValue.value ? ((typeof fieldValue.value === 'string') ? fieldValue.value.split('|') : fieldValue.value) : null\n }\n }).post().done(_.bind(function (result) {\n let attachments = new PJQ.collections.files.Files(result);\n fnInput($input, attachments, endpoint);\n }, this));\n } else {\n fnInput($input, new PJQ.collections.files.Files(), endpoint);\n }\n });\n\n //Init the binder but override the change event\n new PJQ.Binder(this.$el, null, {\n watchElements: [\n 'input.custom-field',\n 'textarea.custom-field'\n ],\n onChange: _.bind(function (changeEl, attribute, value) {\n if (changeEl.hasClass('input-date-time') || changeEl.hasClass('input-date'))\n return;\n\n this.fieldChanged(parseInt(attribute), value);\n }, this)\n });\n },\n renderField: function (field) {\n // right now we only re-render if its a readonly alert\n let $alert = this.$('.alert[data-field-id=\"' + field.id.toString() + '\"]');\n if (_.size($alert) > 0) {\n let $inputOuter = $alert.closest('.input-outer'),\n fieldValue = _.findWhere(this.options.fieldValues, {id: field.id});\n $inputOuter.children(':not(label)').remove();\n this.renderSubTemplate(true, this.options.subTemplates.fieldInput, $inputOuter, {\n model: field,\n fieldValue: fieldValue != null ? fieldValue.value : null,\n canEdit: typeof field.get('isChangeableInRSVP') === 'undefined' ? this.options.canEdit : ((this.options.canEdit && field.get('isChangeableInRSVP')) || (this.options.canEdit && this.options.isAdmin))\n });\n }\n },\n setValue: function (fieldId, value) {\n this.fieldChanged(fieldId, value, false);\n\n let field = this.collection.get(fieldId),\n control = _.find(this.customFieldControls, function (control) {\n return control.id === fieldId;\n });\n\n if (control != null) {\n let fieldType = field.get('fieldType').toLowerCase();\n switch (fieldType) {\n case 'choice':\n control.input.setValue(value);\n break;\n case 'money':\n control.input.val(value / 100);\n break;\n case 'text':\n case 'int':\n case 'percent':\n case 'phone':\n case 'textarea':\n control.input.val(value);\n break;\n case 'date':\n case 'datetime':\n let val;\n if (PJQ.helpers.objectHelpers.refinedType(value) === 'date') {\n val = value;\n } else if (_.size(value) > 0) {\n val = new Date(value);\n } else {\n val = null;\n }\n control.input.setValue(val);\n break;\n }\n } else {\n this.renderField(field);\n }\n },\n fieldChanged: function (fieldId, value, triggerEvent = true) {\n let fieldValueObj = _.findWhere(this.options.fieldValues, {id: fieldId}),\n field = this.collection.get(fieldId);\n if (field.get('fieldType') === 'CHOICE' && !field.get('isMultipleChoice')) {\n value = parseInt(value);\n }\n if (fieldValueObj == null) {\n fieldValueObj = {\n id: fieldId,\n fieldNumber: field.get('fieldNumber'),\n value: value\n };\n this.options.fieldValues.push(fieldValueObj);\n } else {\n fieldValueObj.value = value;\n }\n\n let changedObj = _.findWhere(this.changedValues, {id: fieldId});\n if (changedObj != null) {\n changedObj.value = value;\n } else {\n this.changedValues.push(fieldValueObj);\n }\n if (typeof this.options.onChange === 'function' && triggerEvent) {\n this.options.onChange(fieldId, value);\n }\n },\n getValues: function () {\n return this.options.fieldValues;\n },\n getChanged: function () {\n return this.changedValues;\n },\n validate: function () {\n let isValid = true;\n _.each(this.collection.models, _.bind(function (field) {\n if ((!this.options.isAdmin && !field.get('isRequired')) || (this.options.isAdmin && field.get('isRequiredAdmin') != null && !field.get('isRequiredAdmin')) || (this.options.isAdmin && !field.get('isRequired') && field.get('isRequiredAdmin') == null))\n return;\n else if (!this.options.isAdmin && field.get('isAdminEdit')) {\n return;\n }\n\n _.each(this.customFieldControls, _.bind(function (control) {\n let customFieldId = control.id,\n input = control.input;\n if (customFieldId === field.id) {\n switch (field.get('fieldType').toLowerCase()) {\n case 'text':\n case 'int':\n case 'percent':\n case 'phone':\n case 'textarea':\n PJQ.helpers.inputHelpers.setInputError(input, true);\n if (input.val().trim().length === 0) {\n PJQ.helpers.inputHelpers.setInputError(input, false);\n isValid = false;\n }\n break;\n case 'money':\n PJQ.helpers.inputHelpers.setInputError(input, true);\n if (input.val().trim().length === 0 || parseInt(input.val().trim()) === 0) {\n PJQ.helpers.inputHelpers.setInputError(input, false);\n isValid = false;\n }\n break;\n case 'bool':\n input.hideError();\n if (_.size(input.getValue()) === 0) {\n input.showError();\n isValid = false;\n }\n break;\n case 'date':\n case 'datetime':\n input.hideError();\n if (input.getValue() === undefined || input.getValue() == null) {\n input.showError();\n isValid = false;\n }\n break;\n case 'choice':\n input.hideError();\n if (input.options.isMultiple ? (_.size(input.getValue()) === 0) : (!input.getValue() || input.getValue().length === 0)) {\n input.showError();\n isValid = false;\n }\n break;\n case 'contact':\n if (!input.validate())\n isValid = false;\n break;\n case 'upload':\n input.clearError();\n if (!input.options.collection || input.options.collection.length == 0) {\n input.showError(\"File Upload Required\");\n isValid = false;\n }\n break;\n }\n }\n }, this));\n }, this));\n\n return isValid;\n }\n});\n\nPJQ.views.customFields.CustomFieldsSearchForm = PJQ.views.customFields.CustomFieldsForm.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Form'),\n subTemplates: {\n field: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Search-Form-Field'),\n fieldInput: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Custom-Fields-Search-Form-Field-Input')\n },\n applyDefaults: false\n },\n afterRender: function () {\n _.each(this.collection.models, function (field) {\n let $field = PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.field, {\n model: field,\n fieldValues: this.options.fieldValues,\n subTemplates: this.options.subTemplates\n });\n this.$('.custom-fields').append($field);\n }, this);\n this.attachFormEvents();\n },\n attachFormEvents: function () {\n let self = this;\n this.customFieldControls = [];\n\n this.$('.custom-field.input-text[data-p-bind],.custom-field.input-dollars-full[data-p-bind],.custom-field.input-numeric[data-p-bind],.custom-field.input-phone[data-p-bind],.custom-field.input-textarea[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n valueIndex = input.data('valueIndex'),\n mask = input.data('mask');\n if (_.size(mask) > 0) {\n input.inputmask(mask, {\n placeholder: ''\n });\n } else if (input.hasClass('input-dollars-full')) {\n PJQ.helpers.inputHelpers.inputMaskCurrency(input, 2);\n } else if (input.hasClass('input-numeric')) {\n PJQ.helpers.inputHelpers.inputMaskInteger(input);\n } else if (input.hasClass('input-phone')) {\n PJQ.helpers.inputHelpers.inputMaskPhone(input);\n }\n\n self.customFieldControls.push({\n id: customFieldId,\n input: input,\n index: valueIndex\n });\n });\n\n this.$('.custom-field.input-percent[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n valueIndex = input.data('valueIndex');\n\n self.customFieldControls.push({\n id: customFieldId,\n input: input,\n index: valueIndex\n });\n });\n\n this.$('.custom-field.input-select[data-p-bind],.custom-field.input-bool[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n valueIndex = input.data('valueIndex'),\n control = new PJQ.inputs.Selectpicker({\n el: input,\n isIntChoices: !input.hasClass('input-bool') && !input.hasClass('input-state'),\n onChange: function (value) {\n if (input.hasClass('input-bool'))\n value = value.toLowerCase() === 'true';\n\n self.fieldChanged(customFieldId, valueIndex, value);\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: control,\n index: valueIndex\n });\n });\n\n this.$('.custom-field.input-date[data-p-bind],.custom-field.input-date-time[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n valueIndex = input.data('valueIndex'),\n isDateTime = input.hasClass('input-date-time'),\n control = new PJQ.inputs.Datepicker({\n el: input,\n isUTC: false,\n datepickerOptions: {\n format: !isDateTime ? PJQ.helpers.dateHelpers.dateFormats.DATE.toUpperCase() : undefined\n },\n onChange: function (value) {\n if (!isDateTime)\n value = value ? PJQ.helpers.dateHelpers.getDateString(value, PJQ.helpers.dateHelpers.dateFormats.DATE) : null;\n else\n value = value ? value.toISOString() : null;\n self.fieldChanged(customFieldId, valueIndex, value);\n }\n });\n\n self.customFieldControls.push({\n id: customFieldId,\n input: control,\n index: valueIndex\n });\n });\n\n this.$('.custom-field.input-contact[data-p-bind]').each(function () {\n let input = $(this),\n customFieldId = input.data('pBind'),\n valueIndex = input.data('valueIndex'),\n fieldValue = _.find(self.options.fieldValues, function (fieldValue) {\n return fieldValue.id === customFieldId;\n });\n\n let value = fieldValue.value,\n isMultipleChoice = input.data('multipleChoice');\n if (isMultipleChoice) {\n value = new PJQ.collections.contacts.Contacts(value).models;\n } else if (value != null) {\n value = new PJQ.models.contacts.Contact(value);\n }\n\n let control = new PJQ.views.contacts.ContactsSelectInput({\n el: input,\n context: PJQ.constants.contacts.contexts.CONTACTS,\n selectedContact: value,\n isSingleChoice: !isMultipleChoice,\n canEdit: self.options.canEdit,\n emptyNotice: \"No Contact Selected\",\n onChange: function (selectedContacts) {\n self.fieldChanged(customFieldId, valueIndex, selectedContacts);\n }\n });\n\n self.customFieldControls.push([customFieldId, valueIndex, control]);\n self.customFieldControls.push({\n id: customFieldId,\n input: control,\n index: valueIndex\n });\n });\n\n //Init the binder but override the change event\n new PJQ.Binder(this.$el, null, {\n watchElements: [\n 'input.custom-field',\n 'textarea.custom-field'\n ],\n onChange: _.bind(function (changeEl, attribute, value) {\n if (changeEl.hasClass('input-percent') || changeEl.hasClass('input-date-time') || changeEl.hasClass('input-date'))\n return;\n\n let valueIndex = parseInt($(changeEl).data('valueIndex'));\n this.fieldChanged(parseInt(attribute), valueIndex, value);\n }, this)\n });\n },\n fieldChanged: function (fieldId, valueIndex, value) {\n let fieldValueObj = _.findWhere(this.options.fieldValues, {id: fieldId});\n if (fieldValueObj == null) {\n let field = this.collection.get(fieldId);\n\n fieldValueObj = {\n id: fieldId,\n fieldNumber: field.get('fieldNumber'),\n value: valueIndex === 1 ? value : null,\n value2: valueIndex === 2 ? value : null\n };\n this.options.fieldValues.push(fieldValueObj);\n } else {\n if (valueIndex === 1)\n fieldValueObj.value = value;\n else\n fieldValueObj.value2 = value;\n }\n\n let changedObj = _.findWhere(this.changedValues, {id: fieldId});\n if (changedObj != null) {\n changedObj.value = valueIndex === 1 ? value : changedObj.value;\n changedObj.value2 = valueIndex === 2 ? value : changedObj.value2;\n } else {\n this.changedValues.push(fieldValueObj);\n }\n\n if (!fieldValueObj.value && !fieldValueObj.value2) {\n this.options.fieldValues = _.filter(this.options.fieldValues, function (fieldValue) {\n return fieldValue.id !== fieldId\n });\n this.changedValues = _.filter(this.changedValues, function (fieldValue) {\n return fieldValue.id !== fieldId\n });\n }\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(fieldId, value);\n }\n },\n clearFieldValues: function () {\n this.options.fieldValues = [];\n this.changedValues = [];\n this.render();\n },\n setValues: function (fieldValues) {\n this.options.fieldValues = fieldValues;\n this.changedValues = [];\n this.render();\n },\n validateSearch: function () {\n let isValid = true;\n _.each(this.collection.models, _.bind(function (field) {\n _.each(this.customFieldControls, _.bind(function (control) {\n let customFieldId = control.id,\n valueIndex = control.index,\n input = control.input,\n input2 = null;\n\n if (valueIndex === 1) {\n\n if (customFieldId === field.id) {\n switch (field.get('fieldType').toLowerCase()) {\n case 'bool':\n case 'choice':\n case 'contact':\n case 'percent':\n case 'phone':\n case 'text':\n case 'textarea':\n // no validation needed\n break;\n case 'int':\n case 'money':\n // get 2nd control\n input2 = _.filter(this.customFieldControls, function (control2) {\n return (control2.id === field.id && control2.index === 2);\n })[0].input;\n\n // clear error state for both\n PJQ.helpers.inputHelpers.setInputError(input, true);\n PJQ.helpers.inputHelpers.setInputError(input2, true);\n\n // if value empty, set error on it\n if (_.size(input.val()) === 0 && _.size(input2.val()) > 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input, false);\n }\n\n // if value2 empty, set error on it\n if (_.size(input2.val()) === 0 && _.size(input.val()) > 0) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input2, false);\n }\n\n // if value > value2 set error on both\n if (_.size(input.val()) > 0 && _.size(input2.val()) > 0 && parseInt(input.val()) > parseInt(input2.val())) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input, false);\n PJQ.helpers.inputHelpers.setInputError(input2, false);\n }\n break;\n case 'date':\n case 'datetime':\n // get 2nd control\n input2 = _.filter(this.customFieldControls, function (control2) {\n return (control2.id === field.id && control2.index === 2);\n })[0].input;\n\n // clear error state for both\n PJQ.helpers.inputHelpers.setInputError(input.$el, true);\n PJQ.helpers.inputHelpers.setInputError(input2.$el, true);\n\n // if value empty, set error on it\n if (!input.getValue() && input2.getValue()) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input.$el, false);\n }\n\n // if value2 empty, set error on it\n if (!input2.getValue() && input.getValue()) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input2.$el, false);\n }\n\n // if value > value2 set error on both\n if (input.getValue() && input2.getValue() && input.getValue() > input2.getValue()) {\n isValid = false;\n PJQ.helpers.inputHelpers.setInputError(input.$el, false);\n PJQ.helpers.inputHelpers.setInputError(input2.$el, false);\n }\n break;\n }\n }\n }\n }, this));\n }, this));\n\n return isValid;\n }\n});\n\nPJQ.views.customFields.CustomFieldChoicesEditor = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Custom-Field-Choices-Editor'),\n choices: [],\n onCancel: _.noop,\n onSave: _.noop\n },\n events: {\n \"click .add-custom-field-choice-button\": \"addChoice\",\n \"click .delete-custom-field-choice-button\": \"deleteChoice\",\n \"change .custom-field-choice-value\": \"choiceChanged\",\n \"click .custom-field-choices-cancel\": \"cancel\",\n \"click .custom-field-choices-save\": \"save\"\n },\n beforeRender: function () {\n _.each(this.collection.models, function (model) {\n model.oldAttributes = _.clone(model.attributes);\n });\n\n this.renderData = {\n models: _.filter(this.collection.models, function (model) {\n return !model.get(\"isDeleted\")\n })\n };\n },\n afterRender: function () {\n this.$('.custom-field-choices-table').DataTable({\n \"ordering\": false\n });\n this.$('.custom-field-choices-table').sortable({\n items: 'tr',\n connectWith: 'tr',\n update: _.bind(this.setSortOrder, this)\n });\n },\n setSortOrder: function () {\n let self = this;\n this.$('.custom-field-choices-table').find('tbody>tr[data-cid]').each(function (index) {\n let cid = $(this).data('cid'),\n choice = self.collection.get({cid: cid});\n choice.set('sortOrder', index + 1);\n });\n },\n addChoice: function () {\n this.collection.add(new PJQ.models.customFields.CustomFieldChoice({\n value: '',\n sortOrder: this.collection.models.length + 1\n }));\n this.render();\n },\n choiceChanged: function (e) {\n let cid = $(e.currentTarget).closest('tr').data('cid'),\n choice = this.collection.get({cid: cid});\n choice.set('value', $(e.currentTarget).val());\n },\n deleteChoice: function (e) {\n let cid = $(e.currentTarget).closest('tr').data('cid'),\n choice = this.collection.get({cid: cid});\n if (choice.isNew())\n this.collection.remove(choice);\n else\n choice.set('isDeleted', true);\n this.render();\n },\n cancel: function () {\n _.each(this.collection.models, function (model) {\n model.attributes = _.clone(model.oldAttributes);\n model.oldAttributes = null;\n });\n this.options.onCancel(this.collection);\n },\n save: function () {\n this.options.onSave(this.collection);\n }\n});\n","PJQ.views.templates = {};\nPJQ.views.templates.TemplateManagement = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Template-Management'),\n\t\ttemplateType: null\n\t},\n\tevents: {\n\t\t'click .btn-add-template': 'addTemplate',\n\t\t'click .btn-edit-template': 'editClicked',\n\t\t'click .btn-delete-template': 'deleteClicked'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif(!this.options.collection) {\n\t\t\tthis.collection = new PJQ.collections.schedule.Templates();\n\t\t}\n\t\telse{\n\t\t\tthis.collection = this.options.collection\n\t\t}\n\t\tthis.listenTo(this.collection, 'fetch', this.render);\n\t\tthis.collection.fetch();\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcollection: this.collection,\n\t\t\ttemplateType: this.options.templateType\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.collection == null || !this.collection.isFetched) {\n\t\t\treturn;\n\t\t}\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.templates-table'),\n\t\t\tisHideSearch: true,\n\t\t\tdata: this.collection.models,\n\t\t\trowId: \"cid\",\n\t\t\torder: [0, 'asc'],\n\t\t\tpageLength: 20,\n\t\t\tlanguage: {\n\t\t\t\tzeroRecords: 'Click \"Add\" to create a new Template'\n\t\t\t},\n\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\tthis.editTemplate(row.data());\n\t\t\t}, this),\n\t\t\tcontextMenuOptions: {\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Edit',\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.editTemplate(row.data());\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Delete',\n\t\t\t\t\t\tisDanger: true,\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.deleteTemplate(row);\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.name\",\n\t\t\t\t\t\"title\": \"Name\"\n\t\t\t\t}, {\n\t\t\t\t\t\"data\": \"\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"render\": _.bind(function () {\n\t\t\t\t\t\treturn '<div class=\"text-align-right show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-edit-template wd-30p mr-1\"><i class=\"fal fa-pencil\"></i><button type=\"button\" class=\"btn btn-danger btn-delete-template wd-30p\"><i class=\"fal fa-trash-alt\"></i></button></button></div>'\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"width\": \"80px\"\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t},\n\taddTemplate: function () {\n\t},\n\teditClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.dataTable.getRow(target.closest('tr')),\n\t\t\ttemplate = row.data();\n\n\t\tthis.editTemplate(template);\n\t},\n\teditTemplate: function (template) {\n\t},\n\tdeleteClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.dataTable.getRow(target.closest('tr'));\n\t\tthis.deleteTemplate(row);\n\t},\n\tdeleteTemplate: function (row) {\n\t\tlet template = row.data();\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this template?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.collection.remove(template);\n\t\t\t\ttemplate.destroy();\n\t\t\t\tthis.dataTable.removeRow(row);\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.templates.NewTemplateModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-New-Template'),\n\t\tminWidth: '500px',\n\t\tonSave: _.noop,\n\t\tisSubmittal: false\n\t},\n\tevents: {\n\t\t'keyup .input-template-name': 'templateNameChanged',\n\t\t'click .btn-save': 'save'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif(!this.options.model){\n\t\t\tthis.model = new PJQ.models.schedule.Template();\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.$('.input-template-name').focus();\n\t},\n\ttemplateNameChanged: function (e) {\n\t\tlet isValid = _.size(this.$('.input-template-name').val()) > 0;\n\t\tthis.$('.btn-save').prop('disabled', !isValid);\n\t\tif (isValid && e.keyCode === 13) {\n\t\t\tthis.save();\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet templateName = this.$('.input-template-name').val();\n\t\tif (_.size(templateName) === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.Loader(this.$('.modal-content'));\n\t\tthis.model.save({\n\t\t\tname: templateName\n\t\t}, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.removeModal();\n\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t}\n});\n","PJQ.ajax = {};\n\nPJQ.ajax.Request = class {\n\tconstructor(options = {}) {\n\t\tthis.setOptions(options);\n\t}\n\n\tsetOptions(options = {}) {\n\t\tthis.options = _.defaults(options, {\n\t\t\tmethod: 'GET',\n\t\t\tdataType: 'json',\n\t\t\tcontentType: 'application/json',\n\t\t\tservice: PJQ.constants.services.API,\n\t\t\tbeforeSend: _.bind(function (xhr) {\n\t\t\t\tPJQ.helpers.apiHelpers.addHeaders(xhr, this.getService(), options.headers);\n\t\t\t}, this),\n\t\t\tisPascal: false,\n\t\t\tisApi2: false,\n\t\t\tisAPIv2: false,\n\t\t\tisOrigin: false,\n\t\t\tcanAuthRetry: true\n\t\t});\n\t}\n\n\tgetService() {\n\t\tlet service;\n\t\tif (this.options.isOrigin) {\n\t\t\tservice = PJQ.constants.services.ORIGIN;\n\t\t}\n\t\telse if (this.options.isAPIv2) {\n\t\t\tservice = PJQ.constants.services.APIv2\n\t\t}\n\t\telse {\n\t\t\tservice = this.options.service;\n\t\t}\n\t\treturn service;\n\t}\n\n\texec(method) {\n\t\tif (method)\n\t\t\tthis.options.method = method.toUpperCase();\n\n\t\tlet service = this.getService();\n\t\tif (this.options.endpoint) {\n\t\t\tthis.options.url = PJQ.helpers.urlHelpers.buildApiUrl(this.options.endpoint, {\n\t\t\t\tisPascal: this.options.isPascal,\n\t\t\t\tservice: service\n\t\t\t});\n\t\t}\n\n\t\tif (this.options.data)\n\t\t\tthis.options.data = JSON.stringify(this.options.data);\n\n\t\tlet result = {\n\t\t\t_success: null,\n\t\t\tsuccess: function (callback) {\n\t\t\t\tthis._success = callback;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t_done: null,\n\t\t\tdone: function (callback) {\n\t\t\t\tthis._done = callback;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t_fail: null,\n\t\t\tfail: function (callback) {\n\t\t\t\tthis._fail = callback;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\t$.ajax(this.options).done(function () {\n\t\t\tif (typeof result._done === 'function') {\n\t\t\t\tresult._done(...arguments);\n\t\t\t} else if (typeof result._success === 'function') {\n\t\t\t\tresult._success(...arguments);\n\t\t\t}\n\t\t}).fail(_.bind(function (xhr) {\n\t\t\tif (service === PJQ.constants.services.APIv2 && xhr.status === 401 && this.options.canAuthRetry) {\n\t\t\t\t// we had a 401 error on the new api\n\t\t\t\t// we should try to get a refresh token if we haven't already tried\n\t\t\t\tPJQ.app.TokenManager.refreshAccessToken(_.bind(function (token) {\n\t\t\t\t\t// retry after refreshing the token\n\t\t\t\t\tif (_.size(token) > 0) {\n\t\t\t\t\t\t$.ajax(this.options).done(function () {\n\t\t\t\t\t\t\tif (typeof result._done === 'function') {\n\t\t\t\t\t\t\t\tresult._done(...arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}).fail(_.bind(function (xhr) {\n\t\t\t\t\t\t\tif (typeof result._fail === 'function') {\n\t\t\t\t\t\t\t\tresult._fail(...arguments);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t\telse if (typeof result._fail === 'function') {\n\t\t\t\t\t\tresult._fail(...arguments);\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\telse if (typeof result._fail === 'function') {\n\t\t\t\tresult._fail(...arguments);\n\t\t\t}\n\t\t}, this));\n\t\treturn result;\n\t}\n\n\tget() {\n\t\treturn this.exec('get');\n\t}\n\n\tpost() {\n\t\treturn this.exec('post');\n\t}\n\n\tpatch() {\n\t\treturn this.exec('patch');\n\t}\n\n\tput() {\n\t\treturn this.exec('put');\n\t}\n\n\tdelete() {\n\t\treturn this.exec('delete')\n\t}\n};","PJQ.Alert = class {\n\tconstructor($el, options = {}) {\n\t\tthis.options = _.defaults(options, {\n\t\t\ttype: 'primary',\n\t\t\textraClasses: [],\n\t\t\ttext: '',\n\t\t\tisPrepend: false,\n\t\t\tisAppend: false,\n\t\t\tisBefore: false,\n\t\t\tisShowClose: false,\n\t\t\tcookie: null,\n\t\t\tcookieExpirationDays: null,\n\t\t\tstyle: null,\n\t\t\tanimation: null,\n\t\t\ttimeout: null\n\t\t});\n\t\tif (this.options.cookie == null || !PJQ.helpers.cookieHelpers.getCookie(this.options.cookie)){}\n\t\t\tthis.createElement($el);\n\t}\n\n\tcreateElement($el) {\n\t\tthis.options.isShowClose = this.options.isShowClose || this.options.cookie != null;\n\t\tthis.$outer = $el;\n\n\t\tthis.$el = $('<div>', {\n\t\t\tclass: this.options.extraClasses.join(' ') + ' alert alert-' + this.options.type + (this.options.animation != null ? ' hidden' : ''),\n\t\t\tstyle: this.options.style != null ? this.options.style : ''\n\t\t}).html(this.options.text);\n\t\tif (this.options.isShowClose) {\n\t\t\tthis.$el.append($('<button type=\"button\" class=\"close alert-item-close text-dark p-1 mr-2 fs-24\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>'));\n\t\t\tthis.$el.find('.alert-item-close').on('click', _.bind(this.alertClosed, this))\n\t\t}\n\t\tif (this.options.isAppend)\n\t\t\tthis.$outer.append(this.$el);\n\t\telse if (this.options.isPrepend)\n\t\t\tthis.$outer.prepend(this.$el);\n\t\telse if (this.options.isBefore)\n\t\t\tthis.$outer.before(this.$el);\n\t\telse\n\t\t\tthis.$outer.html(this.$el);\n\n\t\tif(this.options.animation != null && _.size(this.options.animation.in) > 0){\n\t\t\tthis.$el.animateCSS(this.options.animation.in, function(){\n\t\t\t\tif(this.options.timeout > 0){\n\t\t\t\t\tthis.startDestroyTimeout();\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t\telse{\n\t\t\tif(this.options.timeout > 0){\n\t\t\t\tthis.startDestroyTimeout();\n\t\t\t}\n\t\t}\n\t}\n\n\tstartDestroyTimeout() {\n\t\tsetTimeout(_.bind(function(){\n\t\t\tthis.destroy();\n\t\t}, this), this.options.timeout)\n\t}\n\n\tdestroy() {\n\t\tif(this.options.animation != null && _.size(this.options.animation.out) > 0){\n\t\t\tthis.$el.animateCSS(this.options.animation.out, function(){\n\t\t\t\tthis.$el.remove();\n\t\t\t}, this);\n\t\t}\n\t\telse{\n\t\t\tthis.$el.remove();\n\t\t}\n\t}\n\n\talertClosed() {\n\t\tif (this.options.cookie != null) {\n\t\t\tPJQ.helpers.cookieHelpers.setCookie(this.options.cookie, true, this.options.cookieExpirationDays);\n\t\t}\n\t}\n};","$.fn.extend({\n\tanimateCSS: function (options, callback, context) {\n\t\tlet animation = options;\n\t\tif (typeof options === 'object') {\n\t\t\tanimation = options.animation;\n\t\t}\n\n\t\tif (typeof callback !== 'function') {\n\t\t\tcallback = _.noop;\n\t\t}\n\t\tcallback = _.bind(callback, context ? context : this);\n\n\t\tif (options.css !== undefined) {\n\t\t\tif (options.css.height != null && options.css.height.toLowerCase() === 'auto') {\n\t\t\t\t//If auto height animation was passed in, we need to get the autoheight and then animate to it\n\t\t\t\t//Then we set the height back to auto after the animation is done\n\t\t\t\tlet curHeight = this.outerHeight();\n\t\t\t\toptions.css.height = this.css('height', 'auto').outerHeight();\n\t\t\t\tthis.height(curHeight).animate(options.css, {\n\t\t\t\t\tcomplete: _.bind(function () {\n\t\t\t\t\t\tthis.css('height', 'auto');\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.animate(options.css, options.duration ? options.duration : 400, callback);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet animationLowered = animation.toLowerCase();\n\t\t\tif (animationLowered === 'slideup' || animationLowered === 'slidedown' || animationLowered === 'fadein' || animationLowered === 'fadeout') {\n\t\t\t\tif (this.hasClass('hidden')) {\n\t\t\t\t\tthis.css({\n\t\t\t\t\t\tdisplay: 'none'\n\t\t\t\t\t}).removeClass('hidden');\n\t\t\t\t}\n\t\t\t\tif (this.hasClass('invisible')) {\n\t\t\t\t\tthis.css({\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t}).removeClass('invisible');\n\t\t\t\t}\n\t\t\t\tswitch (animationLowered) {\n\t\t\t\t\tcase 'slideup':\n\t\t\t\t\t\tthis.slideUp(options.duration ? options.duration : 400, callback);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'slidedown':\n\t\t\t\t\t\tthis.slideDown(options.duration ? options.duration : 400, callback);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'fadein':\n\t\t\t\t\t\tthis.fadeTo(options.duration ? options.duration : 400, 1, callback);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'fadeout':\n\t\t\t\t\t\tthis.fadeTo(options.duration ? options.duration : 400, 0, callback);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet animationEnd = (function (el) {\n\t\t\t\t\tlet animations = {\n\t\t\t\t\t\tanimation: 'animationend',\n\t\t\t\t\t\tOAnimation: 'oAnimationEnd',\n\t\t\t\t\t\tMozAnimation: 'mozAnimationEnd',\n\t\t\t\t\t\tWebkitAnimation: 'webkitAnimationEnd',\n\t\t\t\t\t};\n\n\t\t\t\t\tfor (let t in animations) {\n\t\t\t\t\t\tif (el.style[t] !== undefined) {\n\t\t\t\t\t\t\treturn animations[t];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})(document.createElement('div'));\n\n\t\t\t\tlet wasInvisible = false;\n\t\t\t\tif (animation.toLowerCase().indexOf('in') !== -1 && this.hasClass('hidden')) {\n\t\t\t\t\tthis.removeClass('hidden');\n\t\t\t\t}\n\t\t\t\telse if (animation.toLowerCase().indexOf('in') !== -1 && this.hasClass('invisible')) {\n\t\t\t\t\tthis.css('opacity', 0);\n\t\t\t\t\tthis.removeClass('invisible');\n\t\t\t\t}\n\t\t\t\tthis.addClass('animated ' + animation).on(animationEnd, function (e) {\n\t\t\t\t\tif (e.target === this) {\n\t\t\t\t\t\t$(this).off(animationEnd);\n\t\t\t\t\t\tif (animation.toLowerCase().indexOf('out') !== -1) {\n\t\t\t\t\t\t\tif (wasInvisible) {\n\t\t\t\t\t\t\t\t$(this).addClass('invisible');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t$(this).addClass('hidden');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(this).removeClass('animated ' + animation);\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n});","PJQ.app = {\n version: typeof bbVersion !== 'undefined' ? bbVersion : _.uniqueId(),\n module: typeof bbModule !== 'undefined' ? bbModule : null,\n options: {\n cdnUrl: typeof cdnUrl !== 'undefined' ? cdnUrl : null,\n apiUrl: typeof bbApiUrl !== 'undefined' ? bbApiUrl : 'https://api.tm.panteratools.com',\n apiV2Url: typeof bbApiV2Url !== 'undefined' ? bbApiV2Url : 'https://api-v2.panteratools.com',\n fileApiUrl: typeof bbFileApiUrl !== 'undefined' ? bbFileApiUrl : 'https://api.panteratools.com',\n defaultPortalUrl: typeof bbPanteraUrl !== 'undefined' ? bbPanteraUrl : 'https://app.panteratools.com',\n uploadUrl: typeof bbUploadUrl !== 'undefined' ? bbUploadUrl : null,\n isCombinedAssets: typeof bbCombinedAssets !== 'undefined' ? bbCombinedAssets : null,\n isK8: typeof isK8 !== 'undefined' ? isK8 : null,\n isV2Zips: false\n },\n portal: null,\n groups: [],\n readyEvents: [],\n oldRoutes: [],\n routes: [\n {\n title: 'Sign In',\n route: 'signin',\n name: 'signin',\n callback: function () {\n if (!PJQ.app.session.isLoggedIn()) {\n new PJQ.views.auth.AppSignIn({\n el: PJQ.app.$el\n });\n } else {\n PJQ.app.router.navigate(\"\", {\n trigger: true\n });\n }\n }\n },\n {\n title: 'Sign Up',\n route: 'signup',\n name: 'signup',\n callback: function () {\n if (!PJQ.app.session.isLoggedIn()) {\n new PJQ.views.auth.AppSignUp({\n el: PJQ.app.$el\n });\n } else {\n let rRoot = PJQ.app.router.navigate(\"\", {\n trigger: true\n }),\n accessKey = PJQ.app.session.get('accessKey');\n if (_.size(accessKey) > 0) {\n PJQ.helpers.projectHelpers.accessKeyNavigate(accessKey, _.bind(function (err) {\n if (err != null) {\n rRoot();\n }\n }, this));\n } else {\n rRoot();\n }\n }\n }\n },\n {\n title: 'Sign Up - Free Trial',\n route: 'signup/trial/:subscription',\n name: 'signuptrial',\n callback: function (subscription) {\n let affiliateId = PJQ.helpers.urlHelpers.getQueryParam('affiliateId'),\n subscriptionId;\n if (_.size(subscription) > 0) {\n subscriptionId = PJQ.constants.subscriptions.types[subscription.toUpperCase()]\n } else {\n subscriptionId = null;\n }\n if (!PJQ.app.session.isLoggedIn()) {\n new PJQ.views.auth.AppSignUp({\n el: PJQ.app.$el,\n subscriptionId: subscriptionId,\n affiliateId: affiliateId\n });\n } else {\n // update the trial for the context user automatically if they arent on the free subscription\n // also don't do this if they are \"onAccount\"\n if (!PJQ.app.session.get('onAccount') && subscriptionId > PJQ.constants.subscriptions.types.FREE && PJQ.app.session.subscription.id <= PJQ.constants.subscriptions.types.FREE) {\n PJQ.app.session.updateTrial(subscriptionId, _.bind(function (data) {\n if (data == null || data.subscription == null) {\n PJQ.notifications.notify.errorNotify({\n message: 'Encountered an error starting your free trial. Please contact customer service.'\n });\n } else {\n PJQ.notifications.notify.successNotify({\n message: 'Free trial started'\n });\n }\n }, this), _.bind(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Encountered an error starting your free trial. Please contact customer service.'\n });\n }, this));\n }\n PJQ.app.router.navigate(\"\", {\n trigger: true\n });\n }\n }\n },\n {\n title: 'Documents',\n route: 'documents',\n name: 'documents',\n callback: function () {\n PJQ.app.initNavigator({\n activeItem: \"documents\"\n });\n }\n }\n ],\n scrollTo: function (x, y) {\n PJQ.app.$el.find('.nav-content').animate({\n scrollTop: y,\n scrollLeft: x\n }, 1);\n },\n signOutNavigate: function () {\n if (PJQ.app.options.isK8) {\n window.location.href = \"/signout\";\n } else {\n window.location.href = \"/Signout.aspx\";\n }\n },\n renderPortalPage: function (page) {\n $('.skin-header').hide();\n PJQ.app.$el.css('top', 0);\n let pageUrl;\n if (PJQ.app.options.isK8) {\n pageUrl = '/static/' + page + '.html'\n } else {\n pageUrl = '/portals/' + PJQ.app.session.get('portalId').toString() + '/' + page + '.html'\n }\n $.ajax({\n url: pageUrl + \"?\" + PJQ.app.version,\n method: 'GET',\n dataType: 'html',\n success: _.bind(function (html) {\n PJQ.templating.TemplateRenderer.renderTemplate(false, $(html), PJQ.app.$el, null, function (el) {\n if (_.size(PJQ.app.portal.menuItems) > 0) {\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Portal-Menu'), $('.portal-menu'), {\n menuItems: PJQ.app.portal.menuItems\n });\n }\n\n $(el).find('div.module').each(function () {\n let type = $(this).data('type'),\n typeSplit = type.split('.'),\n view = PJQ.views;\n _.each(typeSplit, function (obj) {\n view = view[obj];\n });\n if (typeof view === 'function') {\n new view({\n el: $(this),\n masterUserId: $(this).data('masterUserId')\n });\n }\n });\n });\n }, this)\n });\n },\n addOldRoutes: function (addRoutes) {\n this.oldRoutes = _.union(addRoutes, this.oldRoutes);\n },\n addRoutes: function (addRoutes) {\n if (PJQ.helpers.objectHelpers.refinedType(addRoutes) !== 'array') {\n addRoutes = [addRoutes];\n }\n this.routes = _.union(addRoutes, this.routes);\n },\n configureSentry: function () {\n //temporarily disable until we have time to actually manage the results\n // if (typeof Sentry === 'object') {\n // \tSentry.init(\n // \t\t{\n // \t\t\tdsn: 'https://1fd906b1b3524d3ab3b466651b2dda6b@sentry.io/1459517',\n // \t\t\trelease: PJQ.app.version,\n // \t\t\tblacklistUrls: [\n // \t\t\t\t'/DesktopModules/PanteraModuleGlobal/dhtmlx',\n // \t\t\t\t/maps\\.google\\.com/i\n // \t\t\t]\n // \t\t}\n // \t);\n // }\n },\n configureTokenManager: function () {\n let enabledPortals = [4, 48, 64, 94, 162, 220, 237, 262, 267, 290, 339, 358, 379, 395, 407, 420, 440, 477, 508, 513, 514, 524, 538, 545, 552, 555, 443, 560, 206, 285, 325, 380, 320, 87, 205, 512, 457, 351, 377, 447, 137, 188, 349, 487, 549, 145, 97, 130, 318, 495, 402, 417, 111, 257];\n this.TokenManager = new PJQ.TokenManager({\n accessToken: window.accessToken,\n refreshToken: window.refreshToken,\n expiresOn: _.size(window.accessTokenExpiresOn) > 0 ? new Date(window.accessTokenExpiresOn) : null,\n // enabled: enabledPortals.indexOf(bbPortalId) !== -1 || (new RegExp(\"://dev[0-9]{0,}.\")).test(window.location.href) || (new RegExp(\"://sandbox.\")).test(window.location.href)\n enabled: true\n });\n },\n beforeReady: function () {\n this.configureSentry();\n\n this.configureTokenManager();\n\n if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.userLogin && typeof window.webkit.messageHandlers.userLogin.postMessage === 'function') {\n window.webkit.messageHandlers.userLogin.postMessage({\n sessionId: bbSessionId\n });\n } else if (window.Android && typeof window.Android.userLogin === 'function') {\n window.Android.userLogin(bbSessionId);\n }\n\n let $hd = $('head');\n $hd.append('<link href=\"https://fonts.cdnfonts.com/css/nevis\" rel=\"stylesheet\">');\n $hd.append('<script src=\"https://export.dhtmlx.com/gantt/api.js\"></script>');\n // $hd.append('<script type=\"text/javascript\" src=\"https://secure.smart-enterprise-7.com/js/262471.js\" ></script><noscript><img alt=\"\" src=\"https://secure.smart-enterprise-7.com/262471.png\" style=\"display:none;\" /></noscript>');\n\n if (PJQ.app.options.isK8) {\n this.$el = $('.app-container');\n } else {\n this.$el = $('#pjq-main');\n }\n\n PJQ.helpers.domReadyHelper();\n\n if (PJQ.app.portal != null && _.size(PJQ.app.portal.pages) > 0) {\n _.each(PJQ.app.portal.pages, _.bind(function (page) {\n // add the portal page route\n PJQ.app.routes.push({\n title: page.title,\n route: 'p/' + page.route,\n name: 'portal_' + page.name,\n callback: _.bind(function () {\n this.renderPortalPage(page.name);\n }, this)\n });\n }, this));\n\n // check if the current route is not for the app\n // if so, don't bother fetching the session yet\n let isPortalRoute = false,\n hash = window.location.hash.replace('#', '');\n if (_.size(hash) === 0) {\n isPortalRoute = _.findWhere(PJQ.app.portal.pages, {isRoot: true}) != null;\n } else if (hash.indexOf('p/') !== -1) {\n isPortalRoute = _.findWhere(PJQ.app.portal.pages, {route: hash.replace('p/', '')}) != null;\n }\n this.getSession(!isPortalRoute);\n } else {\n this.getSession();\n }\n\n window.captureOutboundLink = function (category, url) {\n ga('send', 'event', _.size(category) > 0 ? category : 'outbound', 'click', url, {\n 'transport': 'beacon',\n 'hitCallback': function () {\n }\n });\n }\n\n this.attachEvents();\n },\n attachEvents: function () {\n let $body = $('body');\n $body.on('click', '.watch-contact-edit', function (e) {\n if (PJQ.app.session.hasPermission('contacts.canView')) {\n let $target = $(e.currentTarget),\n $badge = $target.closest('.select-contact-container'),\n id = $target.data('contactId'),\n ec;\n if (PJQ.app.session.project != null) {\n ec = new PJQ.models.projectContacts.ProjectContact({\n id: id,\n projectId: PJQ.app.session.project.id\n });\n } else {\n ec = new PJQ.models.contacts.Contact({\n id: id\n });\n }\n new PJQ.views.contacts.BaseEditContactModal({\n model: ec,\n project: PJQ.app.session.project,\n onSave: function () {\n $badge.find('.company-name').text(ec.get('companyName'));\n $badge.find('.contact-name').text(ec.get('contactName'));\n }\n });\n }\n });\n\n $body.on('click', '.clipboard-input', _.bind(function (e) {\n let $btn = $(e.currentTarget),\n $input = $btn.prev('input');\n if ($input.length === 0) {\n $input = $btn.next('input');\n }\n if ($input.length > 0) {\n navigator.clipboard.writeText($input.val());\n $input[0].select();\n PJQ.notifications.notify.successNotify({\n message: 'Text copied to clipboard'\n });\n }\n }, this));\n\n $body.on('click', '.btn-change-sub', _.bind(function (e) {\n new PJQ.views.subscriptions.EditSubscriptionModal({\n preventTrial: $(e.currentTarget).hasClass('no-trial'),\n onSave: _.bind(function (type) {\n if (!PJQ.app.session.get('onAccount')) {\n PJQ.helpers.tours.initTour();\n }\n }, this)\n });\n }, this));\n\n $body.on('click', '.dropdown-menu a.dropdown-toggle', function (e) {\n if (!$(this).next().hasClass('show')) {\n $(this).parents('.dropdown-menu').first().find('.show').removeClass('show');\n }\n\n let $subMenu = $(this).next('.dropdown-menu');\n $subMenu.toggleClass('show');\n\n $(this).closest('.dropdown-menu.show').add($(this).closest('.btn-group.show')).on('hidden.bs.dropdown', function (e) {\n $(this).find('.dropdown-submenu .dropdown-menu').removeClass('show');\n });\n\n return false;\n });\n },\n lazyLoad: function () {\n if (this.LazyLoad == null && typeof LazyLoad == 'function') {\n this.LazyLoad = new LazyLoad();\n }\n return this.LazyLoad;\n },\n getSession: function (isFetch = true, retryCount = 0) {\n let urlAccessKey = PJQ.helpers.urlHelpers.getQueryParam('accessKey'),\n urlContactGuid = PJQ.helpers.urlHelpers.getQueryParam('cg'),\n windowAccessKey = typeof bbAccessKey !== 'undefined' ? bbAccessKey : null;\n this.session = new PJQ.models.sessions.Session({\n sessionId: typeof bbSessionId !== 'undefined' ? bbSessionId : null,\n masterUserId: typeof bbMasterUserId !== 'undefined' ? bbMasterUserId : null,\n userId: typeof bbUserId !== 'undefined' ? bbUserId : null,\n portalId: typeof bbPortalId !== 'undefined' ? bbPortalId : null,\n contactGuid: _.size(urlContactGuid) > 0 ? urlContactGuid : null,\n accessKey: _.size(urlAccessKey) > 0 ? urlAccessKey : windowAccessKey\n });\n\n if (isFetch || this.session.get('userId') > 0) {\n this.session.fetch({\n cache: false,\n success: _.bind(_.bind(function () {\n if ((PJQ.app.options.isK8 || this.session.get('masterUserId') === -1) && this.session.user != null) {\n this.session.set('masterUserId', this.session.user.get('masterUserId'));\n this.session.set('userId', this.session.user.get('userId'));\n }\n\n if(this.session.isLoggedIn()){\n if (_.size(PJQ.helpers.urlHelpers.getQueryParam('paysimple')) > 0) {\n let companyId = this.session.user.get('companyId');\n if (companyId > 0) {\n new PJQ.views.paysimple.SignUpOpenedModal();\n window.open('https://payments.paysimple.com/SignUp/Start?rid=459&externalId=' + companyId.toString(), '_blank');\n return;\n }\n }\n\n let accessToken = PJQ.app.TokenManager.getAccessToken(),\n refreshToken = PJQ.app.TokenManager.getRefreshToken();\n if(this.session.get('ownsPortal') && (_.size(accessToken) > 0 || _.size(refreshToken) > 0)){\n this.session.fetchERPIntegration(_.bind(function (erp) {\n this.ready();\n }, this));\n return;\n }\n }\n\n this.ready();\n }, this), this),\n error: _.bind(function (model, result) {\n //Log the error but still continue to ready in case the app doesn't require the session (not likely but still try)\n //If the status is 0, this means the browser is failing to communicate with the API\n //Retry 3 times before logging the error if this is the case\n if (result != null && result.status === 0) {\n if (retryCount < 3) {\n retryCount++;\n this.getSession(true, retryCount);\n }\n } else {\n this.ready();\n }\n }, this)\n });\n } else {\n this.ready();\n }\n },\n initNavigator: function (options) {\n if (PJQ.app.session.project != null) {\n PJQ.app.session.project.fetchProjectCustomFields(_.bind(function (customFields) {\n if (PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n PJQ.app.session.project.customFields = new PJQ.collections.projects.ProjectCustomFields(_.filter(customFields.models, function (customField) {\n if (customField.get('isVisibleInRSVP'))\n return customField;\n }));\n PJQ.app.session.project.customFields.isFetched = true;\n }\n\n if (PJQ.app.navigator != null) {\n PJQ.app.navigator.remove();\n }\n $('a.nav-item').off();\n PJQ.app.navigator = new PJQ.views.nav.AppNavigator(_.defaults(options ? options : {}, {\n el: PJQ.app.$el\n }));\n }, this));\n } else {\n if (PJQ.app.navigator != null) {\n PJQ.app.navigator.remove();\n }\n PJQ.app.navigator = new PJQ.views.nav.AppNavigator(_.defaults(options ? options : {}, {\n el: PJQ.app.$el\n }));\n }\n },\n attachReadyEvent: function (func) {\n this.readyEvents.push(func);\n },\n ready: function () {\n if (PJQ.modules.pjqProjectWall != null && !this.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_NEW_PROJECT_WALL)) {\n if (PJQ.app.module === PJQ.constants.modules.PROJECTWALLADMIN) {\n PJQ.app.addOldRoutes(PJQ.modules.pjqProjectWall.oldRoutes);\n }\n PJQ.app.addRoutes(PJQ.modules.pjqProjectWall.routes);\n }\n\n this.router = new PJQ.routers.BaseRouter();\n if (!Backbone.history.start()) {\n this.router.empty();\n }\n }\n};\n\nPJQ.views.AppView = class {\n constructor($el) {\n this.$el = $el;\n }\n\n renderView(view, options) {\n this.removeActiveView();\n\n let $elInner = $('<div>');\n this.$el.append($elInner);\n this.$el = $elInner;\n $elInner.addClass('p-3 ht-100');\n\n this.view = new view(_.defaults(options ? options : {}, {\n el: this.$el\n }));\n\n return this.view;\n }\n\n //Profile outer view\n renderProfile(key, tab) {\n if (this.view && this.view instanceof PJQ.views.profile.CompanyProfile && this.view.model.id === key) {\n this.view.activateTab(tab);\n } else {\n if (!(this.view instanceof PJQ.views.profile.CompanyProfile)) {\n this.removeActiveView();\n }\n let self = this,\n profile = new PJQ.models.profile.CompanyProfile({\n profileKey: key\n });\n profile.fetch({\n success: function () {\n //We still want to make sure that the key doesn't match what is in the view already just in case this is a user looking at their own profile\n if (this.view && this.view instanceof PJQ.views.profile.CompanyProfile && this.view.model.id === profile.id) {\n this.view.activateTab(tab);\n } else {\n self.removeActiveView();\n self.renderView(PJQ.views.profile.CompanyProfile, {\n el: self.$el,\n model: profile,\n activateTab: tab\n });\n }\n }\n });\n }\n }\n\n //Screenings outer view\n renderScreeningDashboard() {\n if (this.view && this.view instanceof PJQ.views.screenings.ScreeningDashboard) {\n\n } else {\n this.removeActiveView();\n let self = this,\n clients = new PJQ.collections.screenings.ScreeningClients(null, {\n contact: PJQ.app.session.contact,\n masterUserId: PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId')\n });\n clients.fetch({\n success: function () {\n self.renderView(PJQ.views.screenings.ScreeningDashboard, {\n collection: clients\n });\n },\n error: function (model, result) {\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.PJQPROFILE_GET_SCREENINGS, {\n model: model,\n result: result\n });\n }\n });\n }\n }\n\n renderPhotoViewer(options) {\n this.photoViewer = new PJQ.views.photos.PhotoViewer(_.extend(options, {\n onClose: _.bind(function () {\n if (this.photoViewer) {\n this.photoViewer = null;\n }\n }, this)\n }));\n }\n\n removeActiveView() {\n if (this.view) {\n this.view.remove();\n this.view = null;\n }\n }\n};\n","//Models\nPJQ.models.auth = {};\n\n//Collections\nPJQ.collections.auth = {};\n\n//Views\nPJQ.views.auth = {};\n\nPJQ.views.auth.SignIn = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Sign-In')\n\t},\n\tevents: {\n\t\t'keydown .input-username,.input-password': 'loginChanged',\n\t\t'click .btn-sign-in': 'signInClicked',\n\t\t'click .btn-forgot-password': 'forgotPassword'\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tusername: this.username,\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tloginChanged: function (e) {\n\t\tif (e.which === 13) {\n\t\t\te.preventDefault();\n\t\t\tif (PJQ.app.TokenManager != null && PJQ.app.TokenManager.enabled) {\n\t\t\t\tthis.signInToken();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.signIn();\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t},\n\tsignInClicked: function () {\n\t\tif (PJQ.app.TokenManager != null && PJQ.app.TokenManager.enabled) {\n\t\t\tthis.signInToken();\n\t\t}\n\t\telse {\n\t\t\tthis.signIn();\n\t\t}\n\t},\n\tsignInToken: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\n\t\tlet $btnSignIn = this.$('.btn-sign-in');\n\t\t$btnSignIn.prop('disabled', true);\n\n\n\t\tif(this.$('.input-username').length > 0 && !this.isUsernameSSO){\n\t\t\tthis.username = this.$('.input-username').val();\n\t\t}\n\n\t\tif (this.options.isSSO && this.isUsernameSSO !== false) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'saml'\n\t\t\t\t\t}\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'username',\n\t\t\t\t\t\tvalue: this.username\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tif (data.enabled) {\n\t\t\t\t\twindow.location.href = data.signOnUrl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.isUsernameSSO = false;\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function () {\n\t\t\t\tthis.renderError(PJQ.Errors.auth[\"CUSTOMER_SERVICE\"]);\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tlet password = this.$('.input-password').val();\n\t\t\tif (_.size(this.username) === 0 || _.size(password) === 0)\n\t\t\t\treturn;\n\n\t\t\tPJQ.app.TokenManager.getTokensForUser(this.username, password, _.bind(function(success, error){\n\t\t\t\tif(success){\n\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\tPJQ.app.session.fetch({\n\t\t\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\t\t\tPJQ.helpers.projectHelpers.accessKeyNavigate(accessKey, _.bind(function (err) {\n\t\t\t\t\t\t\t\t\tif (err != null) {\n\t\t\t\t\t\t\t\t\t\tthis.renderError(err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet loc = '/';\n\t\t\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\t\t\tif (_.size(PJQ.app.router.signInCache) > 0) {\n\t\t\t\t\t\t\t\tloc += PJQ.app.router.signInCache;\n\t\t\t\t\t\t\t\tPJQ.app.router.signInCache = null;\n\t\t\t\t\t\t\t\twindow.location.replace(loc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\twindow.location = loc;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t$btnSignIn.prop('disabled', false);\n\t\t\t\t\tif (error === 'EXPIRED' || error === 'EXPIRED_PASSWORD') {\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'users'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'resetpassword',\n\t\t\t\t\t\t\t\t\tvalue: data.passwordResetGuid\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t}).get().done(function (request) {\n\t\t\t\t\t\t\tnew PJQ.views.auth.ResetPasswordModal({\n\t\t\t\t\t\t\t\trequest: request,\n\t\t\t\t\t\t\t\tisExpired: true,\n\t\t\t\t\t\t\t\tisContinueToSignIn: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}).fail(_.bind(function () {\n\t\t\t\t\t\t\tthis.renderError(PJQ.Errors.auth[\"CUSTOMER_SERVICE\"]);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet errorText;\n\t\t\t\t\t\tif (_.size(error) > 0 && (error.toUpperCase() === \"LOCKED\" || error.toUpperCase() === \"LOCKED_USER\")) {\n\t\t\t\t\t\t\tif (error.lockoutMinutes > 0) {\n\t\t\t\t\t\t\t\terrorText = \"Your account has been locked for \" + error.lockoutMinutes.toString() + \" minutes due to too many failed attempts\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (_.size(error) > 0) {\n\t\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[error.toUpperCase()];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[\"CUSTOMER_SERVICE\"];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (_.size(error) > 0) {\n\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[error.toUpperCase()];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[\"CUSTOMER_SERVICE\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.isSSO) {\n\t\t\t\t\t\t\tthis.username = null;\n\t\t\t\t\t\t\tthis.isUsernameSSO = null;\n\t\t\t\t\t\t\tthis.initError = errorText;\n\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.renderError(errorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t},\n\tsignIn: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\n\t\tlet $btnSignIn = this.$('.btn-sign-in');\n\t\t$btnSignIn.prop('disabled', true);\n\n\t\tif (_.size(this.username) === 0) {\n\t\t\tthis.username = this.$('.input-username').val();\n\t\t}\n\n\t\tif (this.options.isSSO && this.isUsernameSSO !== false) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'saml'\n\t\t\t\t\t}\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'username',\n\t\t\t\t\t\tvalue: this.username\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\tif (data.enabled) {\n\t\t\t\t\twindow.location.href = data.signOnUrl;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.isUsernameSSO = false;\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function () {\n\t\t\t\tthis.renderError(PJQ.Errors.auth[\"CUSTOMER_SERVICE\"]);\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tlet password = this.$('.input-password').val();\n\t\t\tif (_.size(this.username) === 0 || _.size(password) === 0)\n\t\t\t\treturn;\n\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'signin'\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\tdata: {\n\t\t\t\t\tusername: this.username,\n\t\t\t\t\tpassword: password\n\t\t\t\t}\n\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\tif (data.success) {\n\t\t\t\t\tlet remember = this.$('.input-remember').prop('checked');\n\t\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\".DOTNETNUKE\", data.cookie, remember ? 0 : null);\n\t\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\"SessionId\", data.sessionId);\n\n\t\t\t\t\tlet fnRedirect = _.bind(function () {\n\t\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\t\tPJQ.app.session.fetch({\n\t\t\t\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\t\t\t\tPJQ.helpers.projectHelpers.accessKeyNavigate(accessKey, _.bind(function (err) {\n\t\t\t\t\t\t\t\t\t\tif (err != null) {\n\t\t\t\t\t\t\t\t\t\t\tthis.renderError(err);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet loc = '/';\n\t\t\t\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\t\t\t\tif (_.size(PJQ.app.router.signInCache) > 0) {\n\t\t\t\t\t\t\t\t\tloc += PJQ.app.router.signInCache;\n\t\t\t\t\t\t\t\t\tPJQ.app.router.signInCache = null;\n\t\t\t\t\t\t\t\t\twindow.location.replace(loc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\twindow.location = loc;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this);\n\n\t\t\t\t\tif (1 === 2) {\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'token'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t], [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparameter: 'username',\n\t\t\t\t\t\t\t\t\tvalue: this.username\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparameter: 'password',\n\t\t\t\t\t\t\t\t\tvalue: password\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tisAPIv2: true\n\t\t\t\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\t\t\t\t// new PJQ.ajax.Request({\n\t\t\t\t\t\t\t// \tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t// \t\t{\n\t\t\t\t\t\t\t// \t\t\tendpoint: 'Token.aspx'\n\t\t\t\t\t\t\t// \t\t}\n\t\t\t\t\t\t\t// \t], [\n\t\t\t\t\t\t\t// \t\t{\n\t\t\t\t\t\t\t// \t\t\tparameter: 'r',\n\t\t\t\t\t\t\t// \t\t\tvalue: data.refresh_token\n\t\t\t\t\t\t\t// \t\t}\n\t\t\t\t\t\t\t// \t]),\n\t\t\t\t\t\t\t// \tisOrigin: true\n\t\t\t\t\t\t\t// }).get().done(_.bind(function () {\n\t\t\t\t\t\t\t// \tfnRedirect();\n\t\t\t\t\t\t\t// }));\n\t\t\t\t\t\t\tfnRedirect();\n\t\t\t\t\t\t}));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfnRedirect();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$btnSignIn.prop('disabled', false);\n\t\t\t\t\tif (data.error === 'EXPIRED') {\n\t\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'users'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tendpoint: 'resetpassword',\n\t\t\t\t\t\t\t\t\tvalue: data.passwordResetGuid\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t}).get().done(function (request) {\n\t\t\t\t\t\t\tnew PJQ.views.auth.ResetPasswordModal({\n\t\t\t\t\t\t\t\trequest: request,\n\t\t\t\t\t\t\t\tisExpired: true,\n\t\t\t\t\t\t\t\tisContinueToSignIn: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}).fail(_.bind(function () {\n\t\t\t\t\t\t\tthis.renderError(PJQ.Errors.auth[\"CUSTOMER_SERVICE\"]);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet errorText;\n\t\t\t\t\t\tif (data.error === \"LOCKED\") {\n\t\t\t\t\t\t\tif (data.lockoutMinutes === -1) {\n\t\t\t\t\t\t\t\terrorText = \"Your account has been locked due to too many failed attempts\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (data.lockoutMinutes > 0) {\n\t\t\t\t\t\t\t\terrorText = \"Your account has been locked for \" + data.lockoutMinutes.toString() + \" minutes due to too many failed attempts\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[data.error];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\terrorText = PJQ.Errors.auth[data.error];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.isSSO) {\n\t\t\t\t\t\t\tthis.username = null;\n\t\t\t\t\t\t\tthis.isUsernameSSO = null;\n\t\t\t\t\t\t\tthis.initError = errorText;\n\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.username = null;\n\t\t\t\t\t\t\tthis.renderError(errorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\t\tthis.username = null;\n\t\t\t\tthis.renderError(PJQ.Errors.auth.UNHANDLED);\n\t\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_IN, {\n\t\t\t\t\terror: err,\n\t\t\t\t\tresult: result\n\t\t\t\t});\n\t\t\t}, this));\n\t\t}\n\t},\n\tforgotPassword: function () {\n\t\tnew PJQ.views.auth.RequestResetPasswordModal();\n\t},\n\trenderError: function (error) {\n\t\tthis.$('.btn-sign-in').prop('disabled', false);\n\t\tthis.errorAlert = new PJQ.Alert(this.$('.error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t}\n});\n\nPJQ.views.auth.AccessKeySignIn = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Sign-In-Access-Key')\n\t},\n\tevents: {\n\t\t'keydown .input-access-key': 'accessKeyChanged',\n\t\t'paste .input-access-key': 'accessKeyPasted',\n\t\t'click .btn-access-key-sign-in': 'signIn'\n\t},\n\taccessKeyPasted: function (e) {\n\t\tif (typeof navigator !== 'undefined' && e.originalEvent.clipboardData && e.originalEvent.clipboardData.getData) {\n\t\t\tnavigator.permissions.query({\n\t\t\t\tname: 'clipboard-read'\n\t\t\t}).then(permissionStatus => {\n\t\t\t\tif (permissionStatus.state === 'granted') {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tlet pastedText = e.originalEvent.clipboardData.getData('text/plain');\n\n\t\t\t\t\tsetTimeout(_.bind(function () {\n\t\t\t\t\t\tthis.$('.input-access-key').val(pastedText.replace(/\\s|\\t/g, ''));\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(_.bind(function () {\n\t\t\t\t\t\tthis.$('.input-access-key').val(this.$('.input-access-key').val().replace(/\\s|\\t/g, ''));\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse if (window.clipboardData && window.clipboardData.getData) {\n\t\t\te.preventDefault();\n\n\t\t\t//IE browser OnPaste Event Handler\n\t\t\tlet pastedText = window.clipboardData.getData('Text');\n\t\t\tsetTimeout(_.bind(function () {\n\t\t\t\tthis.$('.input-access-key').val(pastedText.replace(/\\s|\\t/g, ''));\n\t\t\t}, this), 100);\n\t\t}\n\t},\n\taccessKeyChanged: function (e) {\n\t\tif (e.which === 13) {\n\t\t\tif (PJQ.app.TokenManager != null && PJQ.app.TokenManager.enabled) {\n\t\t\t\tthis.signInToken();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.signIn();\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}\n\t},\n\tsignIn: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\n\t\tlet accessKey = this.$('.input-access-key').val();\n\t\tif (_.size(accessKey) !== 10) {\n\t\t\tthis.renderError(PJQ.Errors.auth.KEY_LENGTH);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$('.btn-sign-in').prop('disabled', true);\n\n\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\tPJQ.helpers.projectHelpers.accessKeyNavigate(accessKey, _.bind(function (err) {\n\t\t\t\tif (err != null) {\n\t\t\t\t\tthis.renderError(err);\n\t\t\t\t}\n\t\t\t\tthis.$('.btn-sign-in').prop('disabled', false);\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'v1'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'accessKeys',\n\t\t\t\t\t\tvalue: accessKey\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).get().done(_.bind(function (response) {\n\t\t\t\tif (response.indexOf('Default.aspx') !== -1) {\n\t\t\t\t\twindow.location = response;\n\t\t\t\t}\n\t\t\t\telse if (response.indexOf('/') !== -1) {\n\t\t\t\t\twindow.location = response.substring(1);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.renderError(PJQ.Errors.auth.NOT_FOUND);\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\t\tthis.renderError(PJQ.Errors.auth.UNHANDLED);\n\t\t\t\tthis.$('.btn-sign-in').prop('disabled', false);\n\t\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_IN, {\n\t\t\t\t\terror: err,\n\t\t\t\t\tresult: result\n\t\t\t\t});\n\t\t\t}, this));\n\t\t}\n\t},\n\trenderError: function (error) {\n\t\tthis.$('.btn-sign-in').prop('disabled', false);\n\t\tthis.errorAlert = new PJQ.Alert(this.$('.error-container-access-key'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t}\n});\n\nPJQ.views.auth.AuthModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-auth'),\n\t\tisVerticalCenter: true\n\t},\n\tevents: {},\n\tafterRender: function () {\n\t\tnew PJQ.views.auth.Auth(_.defaults(_.omit(this.options, 'template'), {\n\t\t\tel: this.$('.modal-body'),\n\t\t\tmodel: this.model\n\t\t}));\n\t}\n});\n\nPJQ.views.auth.Auth = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'auth'),\n\t\tdefaultSignUpUsername: '',\n\t\trouteToRoot: false\n\t},\n\tmodes: {\n\t\tSIGN_IN: 'SIGN_IN',\n\t\tSIGN_UP: 'SIGN_UP',\n\t\tRESET_PASSWORD: 'RESET_PASSWORD',\n\t\tRESET_PASSWORD_SUCCESS: 'RESET_PASSWORD_SUCCESS'\n\t},\n\tevents: {\n\t\t'click .auth-nav-sign-in': 'renderSignIn',\n\t\t'keyup .auth-sign-in-username': 'signInUsernameChanged',\n\t\t'keyup .auth-sign-in-password': 'signInPasswordChanged',\n\t\t'click .auth-sign-in': 'signIn',\n\t\t'click .auth-nav-sign-up': 'renderSignUp',\n\t\t'keyup .input-sign-up-username': 'signUpUsernameChanged',\n\t\t'keyup .input-sign-up-password': 'signUpPasswordChanged',\n\t\t'click .btn-sign-up': 'signUp',\n\t\t'click .auth-nav-reset-password': 'renderResetPassword',\n\t\t'keyup .auth-reset-password-username': 'resetUsernameChanged',\n\t\t'click .auth-reset-password': 'resetPassword'\n\t},\n\tbeforeFirstRender: function () {\n\t\tlet errorParam = PJQ.helpers.urlHelpers.getQueryParam(\"err\", true);\n\t\tif (_.size(errorParam) > 0) {\n\t\t\tthis.initError = PJQ.Errors.auth[errorParam.toUpperCase()];\n\t\t}\n\n\t\tthis.model = new PJQ.models.users.User();\n\n\t\tlet sessionContact = PJQ.app.session.contact;\n\t\tif (sessionContact != null) {\n\t\t\tthis.model.set({\n\t\t\t\tcompanyName: sessionContact.get('companyName'),\n\t\t\t\tcontactName: sessionContact.get('contactName'),\n\t\t\t\temail: sessionContact.get('email')\n\t\t\t});\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\tif (this.options.mode == null) {\n\t\t\tthis.options.mode = this.modes.SIGN_IN\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\toptions: this.options,\n\t\t\tmodes: this.modes\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.initError != null) {\n\t\t\tthis.renderSignInError(this.initError);\n\t\t\tthis.initError = null;\n\t\t}\n\n\t\tnew PJQ.Binder(this.$('.auth-sign-up'), this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input'\n\t\t\t]\n\t\t});\n\t},\n\trenderSignIn: function () {\n\t\tthis.options.mode = this.modes.SIGN_IN;\n\t\tthis.render();\n\t},\n\tsignInUsernameChanged: function (e) {\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.$('.auth-sign-in-password').focus();\n\t\t}\n\t},\n\tsignInPasswordChanged: function (e) {\n\t\tif (e.keyCode === 13) {\n\t\t\tif (PJQ.app.TokenManager != null && PJQ.app.TokenManager.enabled) {\n\t\t\t\tthis.signInToken();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.signIn();\n\t\t\t}\n\t\t}\n\t},\n\trenderSignInError: function (error) {\n\t\tthis.signInAlert = new PJQ.Alert(this.$('.sign-in-error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t\tthis.$('.auth-sign-in').prop('disabled', false).text('Sign In');\n\t},\n\tsignIn: function () {\n\t\tlet username = this.$('.auth-sign-in-username').val(),\n\t\t\tpassword = this.$('.auth-sign-in-password').val();\n\n\t\tif (_.size(username) === 0 || _.size(password) === 0)\n\t\t\treturn;\n\n\t\tthis.$('.auth-sign-in').prop('disabled', true).text('Signing In...');\n\n\t\tif (this.signInAlert) {\n\t\t\tthis.signInAlert.destroy();\n\t\t}\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'signin'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tusername: username,\n\t\t\t\tpassword: password\n\t\t\t}\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (data.success) {\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\".DOTNETNUKE\", data.cookie);\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\"SessionId\", data.sessionId);\n\t\t\t\tif (this.options.routeToRoot) {\n\t\t\t\t\twindow.location.href = '/';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.renderSignInError(PJQ.Errors.auth[data.error]);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\tthis.renderSignInError(PJQ.Errors.auth.UNHANDLED);\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_IN, {\n\t\t\t\terror: err,\n\t\t\t\tresult: result\n\t\t\t});\n\t\t}, this));\n\t},\n\trenderSignUp: function () {\n\t\tthis.options.mode = this.modes.SIGN_UP;\n\t\tthis.render();\n\t},\n\tsignUpUsernameChanged: function (e) {\n\t\tthis.validateSignUpInfo();\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.$('.input-sign-up-password').focus();\n\t\t}\n\t},\n\tsignUpPasswordChanged: function (e) {\n\t\tthis.validateSignUpInfo();\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.signUp();\n\t\t}\n\t},\n\tvalidateSignUpInfo: function () {\n\t\tlet usernameLength = _.size(this.$('.input-sign-up-username').val()),\n\t\t\tpasswordLength = _.size(this.$('.input-sign-up-password').val());\n\t\tthis.$('.btn-sign-up').prop('disabled', usernameLength === 0 || passwordLength === 0);\n\t},\n\tsignUp: function () {\n\t\tlet username = this.$('.input-sign-up-username').val(),\n\t\t\tpassword = this.$('.input-sign-up-password').val();\n\n\t\tif (_.size(username) === 0 || _.size(password) === 0)\n\t\t\treturn;\n\n\t\tthis.$('.btn-sign-up').prop('disabled', true).text('Signing Up...');\n\n\t\tif (this.signUpAlert) {\n\t\t\tthis.signUpAlert.destroy();\n\t\t}\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'signup'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tcompanyName: this.model.get('companyName'),\n\t\t\t\tcontactName: this.model.get('contactName'),\n\t\t\t\temail: this.model.get('email'),\n\t\t\t\tusername: username,\n\t\t\t\tpassword: password\n\t\t\t}\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (data.success) {\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\".DOTNETNUKE\", data.cookie);\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\"SessionId\", data.sessionId);\n\t\t\t\tif (this.options.routeToRoot) {\n\t\t\t\t\twindow.location.href = '/';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlocation.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.renderSignUpError(PJQ.Errors.auth[data.error]);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\tthis.renderSignUpError(PJQ.Errors.auth.CUSTOMER_SERVICE);\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_UP, {\n\t\t\t\terror: err,\n\t\t\t\tresult: result\n\t\t\t});\n\t\t}, this));\n\t},\n\trenderSignUpError: function (error) {\n\t\tthis.signUpAlert = new PJQ.Alert(this.$('.sign-up-error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t\tthis.$('.btn-sign-up').prop('disabled', false).text('Sign Up');\n\t},\n\trenderResetPassword: function () {\n\t\tthis.options.mode = this.modes.RESET_PASSWORD;\n\t\tthis.render();\n\t},\n\tresetUsernameChanged: function (e) {\n\t\tthis.validateResetPasswordInfo();\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.resetPassword();\n\t\t}\n\t},\n\tvalidateResetPasswordInfo: function () {\n\t\tlet usernameLength = _.size(this.$('.auth-reset-password-username').val());\n\t\tthis.$('.auth-reset-password').prop('disabled', usernameLength === 0);\n\t},\n\tresetPassword: function () {\n\t\tlet username = this.$('.auth-reset-password-username').val();\n\n\t\tif (_.size(username) === 0)\n\t\t\treturn;\n\n\t\tthis.$('.auth-reset-password').prop('disabled', true).text('Trying...');\n\n\t\tif (this.resetPasswordAlert) {\n\t\t\tthis.resetPasswordAlert.destroy();\n\t\t}\n\n\t\tPJQ.helpers.users.sendPasswordReset(username, _.bind(function (result) {\n\t\t\tif (result.success) {\n\t\t\t\tthis.renderResetPasswordSuccess();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.renderResetPasswordError(result.error);\n\t\t\t}\n\t\t}, this));\n\t},\n\trenderResetPasswordSuccess: function () {\n\t\tthis.options.mode = this.modes.RESET_PASSWORD_SUCCESS;\n\t\tthis.render();\n\t},\n\trenderResetPasswordError: function (error) {\n\t\tthis.resetPasswordAlert = new PJQ.Alert(this.$('.reset-password-error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t\tthis.$('.auth-reset-password').prop('disabled', false).text('Reset Password');\n\t}\n});\n\nPJQ.views.auth.ResetPasswordModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Reset-Password'),\n\t\tisVerticalCenter: true,\n\t\tisExpired: false,\n\t\tisContinueToSignIn: true\n\t},\n\tevents:{\n\t\t'click .auth-nav-sign-in': 'navSignIn'\n\t},\n\tbeforeRender: function () {\n\t\tthis.options.isShowCloseButton = this.options.isExpired;\n\t\tthis.renderData = {\n\t\t\toptions: this.options,\n\t\t\terror: this.options.error ? (PJQ.Errors.auth[this.options.error] ? PJQ.Errors.auth[this.options.error] : PJQ.Errors.auth.CUSTOMER_SERVICE) : null\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.options.request != null) {\n\t\t\tnew PJQ.views.auth.ResetPassword({\n\t\t\t\tel: this.$('.reset-password-view'),\n\t\t\t\trequest: this.options.request,\n\t\t\t\tonReset: _.bind(function () {\n\t\t\t\t\tthis.options.request = null;\n\t\t\t\t\tthis.options.success = true;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tnavSignIn: function(){\n\t\tthis.removeModal();\n\t\tPJQ.app.router.signInNavigate();\n\n\t}\n});\n\nPJQ.views.auth.ResetPassword = PJQ.views.BaseView.extend({\n\tbaseOptions: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Reset-Password'),\n\t\tsubTemplates: {\n\t\t\tpasswordRequirements: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Password-Requirements')\n\t\t},\n\t\tisRequirementsGrid: true\n\t},\n\tevents: {\n\t\t'keyup .input-reset-password': 'passwordChanged',\n\t\t'click .btn-reset-password': 'resetPassword'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\toptions: this.options,\n\t\t\tpasswordRequirements: this.options.request ? this.options.request.passwordRequirements : null,\n\t\t\terror: this.options.error ? (PJQ.Errors.auth[this.options.error] ? PJQ.Errors.auth[this.options.error] : PJQ.Errors.auth.CUSTOMER_SERVICE) : null\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.renderPasswordRequirements();\n\n\t\tthis.$('.input-reset-password')[0].focus();\n\t\tif (this.options.request != null) {\n\t\t\tthis.checkPasswordRequirements();\n\t\t}\n\t},\n\trenderPasswordRequirements: function () {\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.passwordRequirements, this.$('.password-requirements'), {\n\t\t\tisGrid: this.options.isRequirementsGrid,\n\t\t\tpasswordRequirements: this.options.request ? this.options.request.passwordRequirements : null,\n\t\t});\n\t},\n\tcheckPasswordRequirements: function () {\n\t\tlet req = this.options.request.passwordRequirements,\n\t\t\tnewPassword = this.$('.input-reset-password').val(),\n\t\t\tvalidCheck = true;\n\n\t\tlet $maxLength = this.$('.password-req-length-max');\n\t\tif (_.size(newPassword) > 38) {\n\t\t\tvalidCheck = false;\n\t\t\t$maxLength.addClass('op-6');\n\t\t}\n\t\telse {\n\t\t\t$maxLength.removeClass('op-6');\n\t\t}\n\n\t\tif (!req.allowRepeatChars) {\n\t\t\tlet $noRepeat = this.$('.password-req-no-repeat'),\n\t\t\t\tarr = newPassword.split('');\n\t\t\tif (_.size(arr) === 0 || arr.some(function (v, i, a) {\n\t\t\t\treturn a.lastIndexOf(v) !== i;\n\t\t\t})) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$noRepeat.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$noRepeat.removeClass('op-6');\n\t\t\t}\n\t\t}\n\n\t\tif (req.minLength > 0) {\n\t\t\tlet $length = this.$('.password-req-length');\n\t\t\tif (_.size(newPassword) < req.minLength) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$length.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$length.removeClass('op-6');\n\t\t\t}\n\t\t}\n\n\t\tif (req.lowercaseCount > 0) {\n\t\t\tlet $lowercase = this.$('.password-req-lowercase');\n\t\t\tif (_.size(PJQ.helpers.stringHelpers.getLowercaseChars(newPassword)) < req.lowercaseCount) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$lowercase.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$lowercase.removeClass('op-6');\n\t\t\t}\n\t\t}\n\n\t\tif (req.uppercaseCount > 0) {\n\t\t\tlet $uppercase = this.$('.password-req-uppercase');\n\t\t\tif (_.size(PJQ.helpers.stringHelpers.getUppercaseChars(newPassword)) < req.uppercaseCount) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$uppercase.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$uppercase.removeClass('op-6');\n\t\t\t}\n\t\t}\n\n\t\tif (req.numericCount > 0) {\n\t\t\tlet $numeric = this.$('.password-req-numeric');\n\t\t\tif (_.size(PJQ.helpers.stringHelpers.getNumericChars(newPassword)) < req.numericCount) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$numeric.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$numeric.removeClass('op-6');\n\t\t\t}\n\t\t}\n\n\t\tif (req.specialCharCount > 0) {\n\t\t\tlet $special = this.$('.password-req-special-char');\n\t\t\tif (_.size(PJQ.helpers.stringHelpers.getSpecialChars(newPassword)) < req.specialCharCount) {\n\t\t\t\tvalidCheck = false;\n\t\t\t\t$special.addClass('op-6');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$special.removeClass('op-6');\n\t\t\t}\n\t\t}\n\t\tthis.isValid = validCheck;\n\t},\n\tpasswordChanged: function (e) {\n\t\tthis.checkPasswordRequirements();\n\t\tthis.$('.btn-reset-password').prop('disabled', !this.isValid);\n\t\tif (e.keyCode === 13 && this.isValid) {\n\t\t\tthis.resetPassword();\n\t\t}\n\t},\n\tresetPassword: function () {\n\t\tif (this.errorAlert != null) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\n\t\tif (!this.isValid)\n\t\t\treturn;\n\n\t\tthis.$('.btn-reset-password').prop('disabled', true).text('Trying...');\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'resetpassword',\n\t\t\t\t\tvalue: this.options.request.guid\n\t\t\t\t},\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tpassword: this.$('.input-reset-password').val()\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tif (data.success) {\n\t\t\t\tthis.options.success = true;\n\t\t\t\tthis.options.request = null;\n\t\t\t\tthis.onReset();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.$('.btn-reset-password').prop('disabled', false).text('Change Password');\n\t\t\t\tif (data.error === 'ALREADY_USED') {\n\t\t\t\t\tthis.renderError(\"You cannot use your last \" + this.options.request.passwordRequirements.historyPreventCount.toString() + \" passwords.\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.renderError(PJQ.Errors.auth[data.error]);\n\t\t\t\t}\n\t\t\t}\n\t\t}, this)).fail(_.bind(function () {\n\t\t\tthis.options.success = false;\n\t\t\tthis.render();\n\t\t}, this));\n\t},\n\tonReset: function () {\n\t\tif (typeof this.options.onReset === 'function') {\n\t\t\tthis.options.onReset();\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\t},\n\trenderError: function (error) {\n\t\tthis.errorAlert = new PJQ.Alert(this.$('.error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t}\n});\n\nPJQ.views.auth.RequestResetPasswordModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Request-Reset-Password'),\n\t\tisVerticalCenter: true,\n\t\tisShowCloseButton: true\n\t},\n\tevents: {\n\t\t'keyup .input-reset-password-username': 'usernameChanged',\n\t\t'click .btn-reset-password': 'resetPassword'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tsuccess: this.success\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tlet $username = this.$('.input-reset-password-username');\n\t\tif (_.size($username) > 0) {\n\t\t\t$username[0].focus();\n\t\t}\n\t},\n\tusernameChanged: function (e) {\n\t\tthis.$('.btn-reset-password').prop('disabled', _.size(this.$('.input-reset-password-username').val()) === 0);\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.resetPassword();\n\t\t}\n\t},\n\tresetPassword: function () {\n\t\tlet username = this.$('.input-reset-password-username').val();\n\n\t\tif (_.size(username) === 0)\n\t\t\treturn;\n\n\t\tthis.$('.btn-reset-password').prop('disabled', true).text('Trying...');\n\n\t\tif (this.resetPasswordAlert) {\n\t\t\tthis.resetPasswordAlert.destroy();\n\t\t}\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'requestpasswordreset'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparameter: 'username',\n\t\t\t\t\tvalue: username\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (data.success) {\n\t\t\t\tthis.success = true;\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.renderError(PJQ.Errors.auth[data.error]);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\tthis.renderError(PJQ.Errors.auth.CUSTOMER_SERVICE);\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_RESET_PASSWORD, {\n\t\t\t\terror: err,\n\t\t\t\tresult: result\n\t\t\t});\n\t\t}, this));\n\t},\n\trenderError: function (error) {\n\t\tthis.resetPasswordAlert = new PJQ.Alert(this.$('.reset-password-error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t\tthis.$('.btn-reset-password').prop('disabled', false).text('Reset Password');\n\t}\n});\n\nPJQ.views.auth.AppSignIn = PJQ.views.auth.SignIn.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In')\n\t},\n\tevents: {\n\t\t'keydown .input-username,.input-password': 'loginChanged',\n\t\t'click .btn-sign-in': 'signInClicked',\n\t\t'click .btn-sign-up-nav': 'signUpNavigate',\n\t\t'click .btn-forgot-password': 'forgotPassword'\n\t},\n\tbeforeFirstRender: function () {\n\t\tlet errorParam = PJQ.helpers.urlHelpers.getQueryParam(\"err\", true);\n\t\tif (_.size(errorParam) > 0) {\n\t\t\tthis.initError = PJQ.Errors.auth[errorParam.toUpperCase()];\n\t\t}\n\n\t\tPJQ.helpers.setViewport(\"width=device-width, initial-scale=1, minimum-scale=1\");\n\t\tthis.options.isSSO = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_SSO_ENABLED);\n\t},\n\tafterRender: function () {\n\t\tif (this.initError != null) {\n\t\t\tthis.renderError(this.initError);\n\t\t\tthis.initError = null;\n\t\t}\n\n\t\tif (this.options.isSSO && _.size(this.username) > 0) {\n\t\t\tthis.$('.input-password')[0].focus();\n\t\t}\n\t\telse {\n\t\t\tthis.$('.input-username')[0].focus();\n\t\t}\n\n\t\tthis.accessKeySignIn = new PJQ.views.auth.AccessKeySignIn({\n\t\t\tel: this.$('.access-key-sign-in'),\n\t\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Access-Key')\n\t\t});\n\n\t\tif (PJQ.app.session.isPanteraPortal()) {\n\t\t\tthis.initFeatureAds();\n\t\t}\n\t},\n\tsignUpNavigate: function () {\n\t\t//2024-05-23 blue: Redirect all signups to new subcontractor registration page. GCs cannot register on panteratools until we provide an alternate path.\n\t\tif (PJQ.app.session.isPanteraPortal()) {\n\t\t\twindow.location.href = \t'https://app.panteratools.com/Default.aspx?tabid=10205';\n\t\t} else {\n\t\t\tPJQ.app.router.navigate('signup', {\n\t\t\t\ttrigger: true\n\t\t\t});\n\t\t}\n\t},\n\tinitFeatureAds: function () {\n\t\tlet features = PJQ.helpers.auth.features();\n\t\tif (_.size(features) > 0) {\n\t\t\tlet feature = features[Math.floor(Math.random() * _.size(features))];\n\t\t\tthis.renderSubTemplate(false, feature, this.$('.app-sign-in-features'), {}, _.bind(function(){\n\t\t\t\tif(feature.file === 'app-sign-in-carousel'){\n\t\t\t\t\tthis.$('.carousel').carousel({\n\t\t\t\t\t\tinterval: 4300,\n\t\t\t\t\t\tride: 'carousel'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t}\n});\n\nPJQ.views.auth.AppSignUp = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-Up'),\n\t\tsubscriptionId: null,\n\t\taffiliateId: null\n\t},\n\tevents: {\n\t\t'click .btn-sign-up': 'signUp',\n\t\t'click .btn-sign-in-nav': 'signInNavigate',\n\t\t'keydown .input-password-signup': 'checkReady',\n\t\t'keydown .input-username-signup': 'checkReady'\n\t},\n\tbeforeFirstRender: function () {\n\t\tPJQ.helpers.setViewport(\"width=device-width, initial-scale=1, minimum-scale=1\");\n\n\t\tthis.model = new PJQ.models.users.User();\n\t\tlet sessionContact = PJQ.app.session.contact;\n\t\tif (sessionContact != null) {\n\t\t\tthis.model.set({\n\t\t\t\tcompanyName: sessionContact.get('companyName'),\n\t\t\t\tcontactName: sessionContact.get('contactName'),\n\t\t\t\tzip: sessionContact.get('zip'),\n\t\t\t\temail: sessionContact.get('email'),\n\t\t\t\tphone: sessionContact.get('phone')\n\t\t\t});\n\t\t}\n\t\tif (_.size(PJQ.helpers.urlHelpers.getQueryParam('bb')) > 0) {\n\t\t\tthis.model.set('isBlueBook', true);\n\t\t}\n\n\t\tlet portalOwner = PJQ.app.session.preferences.getPref('portalOwner');\n\t\tPJQ.app.session.fetchUserGroups(portalOwner ? portalOwner : 39, _.bind(function (groups) {\n\t\t\tthis.groups = groups;\n\t\t\tthis.render();\n\t\t}, this));\n\t\treturn false;\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\tgroups: this.groups,\n\t\t\tsubscriptionId: this.options.subscriptionId > 1 ? this.options.subscriptionId : null\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif(this.options.affiliateId == null){\n\t\t\tthis.options.affiliateId = PJQ.helpers.urlHelpers.getQueryParam('affiliateId');\n\t\t}\n\t\tnew PJQ.Binder(this.$el, this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input'\n\t\t\t],\n\t\t\tafterChange: _.bind(function ($field, attr, val) {\n\t\t\t\t// this.validateField($field, attr, val);\n\t\t\t}, this)\n\t\t});\n\n\t\tPJQ.helpers.inputHelpers.inputMaskPhone(this.$('.input-phone'));\n\n\t\tif (PJQ.app.session.get('portalId') === 4) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-company-type'),\n\t\t\t\tnoneSelectedText: 'Select Type',\n\t\t\t\tmobile: PJQ.helpers.mobile.getDevice() != null,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('companyType', value);\n\t\t\t\t\tif (value === 'SUB') {\n\t\t\t\t\t\tthis.$('.groups-outer').removeClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.$('.groups-outer').addClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tnew PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.select-groups'),\n\t\t\tnoneSelectedText: 'Select Trades',\n\t\t\tliveSearch: true,\n\t\t\tisIntChoices: true,\n\t\t\tisMultiple: true,\n\t\t\theader: '<div class=\"text-align-right\"><button type=\"button\" class=\"btn close position-relative text-dark op-10 fs-17 pt-2 mt-1 mb-1 mr-1\">Done</button></div>',\n\t\t\tmobile: PJQ.helpers.mobile.getDevice() != null,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('groups', value);\n\t\t\t}, this),\n\t\t\tdefaultValue: _.map(this.model.get('groups'), function (group) {\n\t\t\t\treturn group.groupId;\n\t\t\t})\n\t\t});\n\n\t\tthis.statePicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.input-country'),\n\t\t\tnoneSelectedText: 'Select Value',\n\t\t\tdefaultValue: 'us',\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('country', value.toUpperCase());\n\t\t\t\tthis.model.set('zip', '');\n\t\t\t\tthis.countryChanged();\n\t\t\t}, this)\n\t\t});\n\t\tthis.countryChanged();\n\n\t\tif (PJQ.app.session.isPanteraPortal()) {\n\t\t\tthis.initFeatureAds();\n\t\t}\n\t},\n\tinitFeatureAds: function () {\n\t\tlet features = PJQ.helpers.auth.features();\n\t\tif (_.size(features) > 0) {\n\t\t\tlet feature = features[Math.floor(Math.random() * _.size(features))];\n\t\t\tthis.renderSubTemplate(false, feature, this.$('.app-sign-in-features'), {});\n\t\t}\n\t},\n\tvalidateField: function () {\n\t\tlet isValid = true,\n\t\t\tisCompanyNameValid = _.size(this.model.get('companyName')) !== 0,\n\t\t\tisContactNameValid = _.size(this.model.get('contactName')) !== 0,\n\t\t\tisUsernameValid = _.size(this.model.get('username')) !== 0,\n\t\t\tisPasswordValid = _.size(this.model.get('password')) !== 0,\n\t\t\tisZipValid = _.size(this.model.get('zip')) >= 5,\n\t\t\tisPhoneValid = _.size(this.model.get('phone')) >= 10,\n\t\t\tisEmailValid = _.size(this.model.get('email')) !== 0,\n\t\t\tisCompanyTypeValid = _.size(this.model.get('companyType')) !== 0,\n\t\t\tisGroupsValid = _.size(this.model.get('groups')) !== 0\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-company-name'), isCompanyNameValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-contact-name'), isContactNameValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-phone'), isPhoneValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-email'), isEmailValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-zip'), isZipValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-username-signup'), isUsernameValid);\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-password-signup'), isPasswordValid);\n\n\t\tif (!isCompanyNameValid || !isContactNameValid || !isUsernameValid || !isPasswordValid || !isPhoneValid || !isEmailValid || !isZipValid) {\n\t\t\tthis.renderError(\"Required fields missing data or incorrectly formatted.\");\n\t\t\tisValid = false;\n\t\t}\n\n\t\tif (PJQ.app.session.get('portalId') === 4) {\n\t\t\tif (!isCompanyTypeValid) {\n\t\t\t\tthis.renderError(\"Required fields missing data\");\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.select-company-type'), isCompanyTypeValid);\n\n\t\t\tif (this.model.get('companyType') === 'SUB') {\n\t\t\t\tif (!isGroupsValid) {\n\t\t\t\t\tthis.renderError('Required fields missing data');\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.select-groups'), isGroupsValid);\n\t\t\t}\n\t\t}\n\n\t\treturn isValid;\n\t},\n\tcountryChanged: function () {\n\t\tif (!this.model.get('country')) {\n\t\t\tthis.model.set('country', 'US');\n\t\t}\n\t\tlet country = _.size(this.statePicker.getValue()) > 0 ? this.statePicker.getValue().toLowerCase() : 'us',\n\t\t\toptions = '<option value=\"\">Select Value</option>';\n\n\t\tPJQ.helpers.inputHelpers.inputMaskZip(this.$('.input-zip'), country);\n\t},\n\tsignInNavigate: function () {\n\t\tPJQ.app.router.signInNavigate();\n\t},\n\tcheckReady: function (e) {\n\t\tif (e.keyCode === 13) {\n\t\t\tthis.signUp()\n\t\t}\n\t},\n\trenderError: function (error) {\n\t\tthis.$('.btn-sign-up').prop('disabled', false);\n\t\tthis.errorAlert = new PJQ.Alert(this.$('.error-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: error\n\t\t});\n\t},\n\tsignUp: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\n\t\tif (!this.validateField()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$('.btn-sign-up').prop('disabled', true);\n\n\t\tlet params = [];\n\t\tif (this.options.subscriptionId != null) {\n\t\t\tparams.push({\n\t\t\t\tparameter: 'subscriptionId',\n\t\t\t\tvalue: this.options.subscriptionId\n\t\t\t});\n\t\t}\n\t\tif (this.options.affiliateId != null) {\n\t\t\tparams.push({\n\t\t\t\tparameter: 'affiliateId',\n\t\t\t\tvalue: this.options.affiliateId\n\t\t\t});\n\t\t}\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'signup'\n\t\t\t\t}\n\t\t\t], params),\n\t\t\tdata: this.model\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (data.success) {\n\t\t\t\tPJQ.app.session.set('sessionId', data.sessionId);\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\".DOTNETNUKE\", data.cookie);\n\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(\"SessionId\", data.sessionId);\n\t\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\t\tlet accessKey = PJQ.app.session.get('accessKey');\n\t\t\t\t\tif (_.size(accessKey) > 0) {\n\t\t\t\t\t\tPJQ.app.session.fetch({\n\t\t\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\t\t\tPJQ.helpers.projectHelpers.accessKeyNavigate(accessKey, _.bind(function (err) {\n\t\t\t\t\t\t\t\t\tif (err != null) {\n\t\t\t\t\t\t\t\t\t\tthis.renderError(err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse if(_.size(this.options.affiliateId) > 0){\n\t\t\t\t\t\twindow.location = '/#settings/billing';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\twindow.location = '/';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.renderError(PJQ.Errors.auth[data.error]);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\tthis.renderError(PJQ.Errors.auth.UNHANDLED);\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_SIGN_UP, {\n\t\t\t\terror: err,\n\t\t\t\tresult: result\n\t\t\t});\n\t\t}, this));\n\t}\n});\n\nPJQ.views.auth.AppResetPassword = PJQ.views.auth.ResetPassword.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Reset-Password'),\n\t\tisRequirementsGrid: false\n\t}\n});\n\nPJQ.helpers.auth = {\n\tfeatures: function () {\n\t\treturn [\n\t\t\t// Commented out older screens in case we want to use them again.\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Proqual'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Plan-Express'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Doc-Clerk'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Cloud-Storage'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Scheduling'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Feature-Mobile'),\n\t\t\t// new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Sign-In-Free-Trial'),\n\t\t\tnew PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'app-sign-in-carousel')\n\n\t\t];\n\t},\n\tvalidateSessionContact: function () {\n\t\tif (PJQ.app.session.contact != null && PJQ.app.session.contact.get('isDeleted')) {\n\t\t\t//Hide main app element, which is the outer element on all PJQ modules\n\t\t\tPJQ.app.$el.addClass('hidden');\n\t\t\t//Show dialog to tell user this link is no longer active\n\t\t\tnew PJQ.views.modals.ErrorModal({\n\t\t\t\theader: 'Inactive Link',\n\t\t\t\tbody: \"This link is no longer active.\",\n\t\t\t\terrorCode: PJQ.constants.errorCodes.DELETED_CONTACT\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\t}\n};","PJQ.models.bidPackages = {};\nPJQ.models.bidPackages.Template = PJQ.models.BaseModel.extend({\n\tidAttribute: 'templateId',\n\tnotifyName: 'Template',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'bidpackages'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'templates',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t], this.get('projectId') > 0 ? [\n\t\t\t{\n\t\t\t\tparameter: 'projectId',\n\t\t\t\tvalue: this.get('projectId')\n\t\t\t}\n\t\t] : null);\n\t},\n\tparse: function (model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tif (model.bidPackages != null) {\n\t\t\tthis.bidPackages = new PJQ.collections.bidPackages.BidPackages(model.bidPackages);\n\t\t}\n\t\telse {\n\t\t\tthis.bidPackages = null;\n\t\t}\n\n\t\treturn model;\n\t}\n});\n\nPJQ.models.bidPackages.BidPackage = PJQ.models.BaseModel.extend({\n\tidAttribute: 'bidPackageId',\n\tnotifyName: 'Bid Package',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'bidpackages',\n\t\t\t\tvalue: this.get('bidPackageId')\n\t\t\t}\n\t\t]);\n\t},\n\tparse: function (model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tthis.groups = new PJQ.collections.groups.Groups(model.groups);\n\t\tthis.attachments = new PJQ.collections.bidPackages.Attachments(model.attachments);\n\n\t\treturn model;\n\t},\n\tisNew: function () {\n\t\treturn this.id <= 0;\n\t},\n\taddAttachments: function (entryIds, drawingIds, tags, callback) {\n\t\tthis.attachments.reset();\n\t\tif (entryIds != null) {\n\t\t\t_.each(_.uniq(entryIds), function (entryId) {\n\t\t\t\tthis.attachments.add({\n\t\t\t\t\tentryId: entryId\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\n\t\tif (drawingIds != null) {\n\t\t\t_.each(_.uniq(drawingIds), function (drawingId) {\n\t\t\t\tthis.attachments.add({\n\t\t\t\t\tdrawingId: drawingId\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\n\t\tif (tags != null) {\n\t\t\t_.each(_.uniq(tags), function (tag) {\n\t\t\t\tthis.attachments.add({\n\t\t\t\t\tdrawingTagName: tag\n\t\t\t\t});\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.patch({\n\t\t\tattachments: this.attachments.toJSON()\n\t\t}, {\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(this.attachments)\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\terror: _.bind(function () {\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(null)\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tbeforeSave: function () {\n\t\tthis.set('groups', this.groups.toJSON());\n\t\tthis.set('attachments', this.attachments.toJSON());\n\t}\n});\n\nPJQ.models.bidPackages.Attachment = PJQ.models.BaseModel.extend({});\n\nPJQ.collections.bidPackages = {};\nPJQ.collections.bidPackages.BidPackages = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.bidPackages.BidPackage,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.projectId > 0 ? this.options.projectId : null\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'bidpackages'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.bidPackages.Attachments = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.bidPackages.Attachment\n})\n\nPJQ.collections.bidPackages.Templates = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.bidPackages.Template,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'bidpackages'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'templates'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.views.bidPackages = {};\nPJQ.views.bidPackages.TemplateManagement = PJQ.views.templates.TemplateManagement.extend({\n\tbeforeFirstRender: function () {\n\t\tthis.collection = new PJQ.collections.bidPackages.Templates();\n\t\tthis.listenTo(this.collection, 'fetch', this.render);\n\t\tthis.collection.fetch();\n\t},\n\taddTemplate: function () {\n\t\tnew PJQ.views.templates.NewTemplateModal({\n\t\t\tmodel: new PJQ.models.bidPackages.Template(),\n\t\t\tonSave: _.bind(function (template) {\n\t\t\t\tthis.collection.add(template);\n\t\t\t\tthis.dataTable.refresh();\n\t\t\t\tthis.editTemplate(template);\n\t\t\t}, this)\n\t\t});\n\t},\n\teditTemplate: function (template) {\n\t\tnew PJQ.views.bidPackages.EditTemplateModal({\n\t\t\tmodel: template,\n\t\t\tonClose: _.bind(function () {\n\t\t\t\tthis.dataTable.refresh();\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function (template) {\n\t\t\t\tif (template.id > 0) {\n\t\t\t\t\tlet row = this.dataTable.getRow(template.cid);\n\t\t\t\t\tthis.collection.remove(template);\n\t\t\t\t\ttemplate.destroy();\n\t\t\t\t\tthis.dataTable.removeRow(row);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.bidPackages.EditTemplateModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Edit-Bid-Package-Template'),\n\t\tmaxWidth: '60%',\n\t\tfitHeight: true,\n\t\tonClose: null\n\t},\n\tevents: {\n\t\t'change .cb-is-default': 'defaultChanged',\n\t\t'click .btn-close': 'close',\n\t\t'click .btn-delete': 'deleteTemplate'\n\t},\n\tdefaultChanged: function () {\n\t\tthis.model.patch({\n\t\t\tisDefault: this.$('.cb-is-default').prop('checked')\n\t\t});\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (!this.model) {\n\t\t\tthis.model = new PJQ.models.bidPackages.Template({\n\t\t\t\ttemplateId: this.options.templateId\n\t\t\t})\n\t\t}\n\n\t\tthis.listenTo(this.model, 'fetch', this.render);\n\t\tthis.model.fetch();\n\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model.isFetched) {\n\t\t\tnew PJQ.inputs.TextEditorInput({\n\t\t\t\tel: this.$('.edit-template-name'),\n\t\t\t\tlabel: 'Name',\n\t\t\t\tvalue: this.model.get('name'),\n\t\t\t\tonSave: _.bind(function (value) {\n\t\t\t\t\tthis.model.patch({\n\t\t\t\t\t\tname: value\n\t\t\t\t\t});\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tnew PJQ.views.bidPackages.BidPackagesView({\n\t\t\tel: this.$('.manage-template'),\n\t\t\tmodel: this.model,\n\t\t\tcollection: this.model.bidPackages,\n\t\t\ttemplateId: this.model.get('templateId')\n\t\t});\n\t},\n\tclose: function () {\n\t\tif (typeof this.options.onClose === 'function') {\n\t\t\tthis.options.onClose(this.model);\n\t\t}\n\t},\n\tdeleteTemplate: function () {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this template?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tif (typeof this.options.onDelete === 'function') {\n\t\t\t\t\tthis.options.onDelete(this.model);\n\t\t\t\t}\n\t\t\t\tthis.removeModal();\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.bidPackages.ManageBidPackagesModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Manage-Bid-Packages'),\n\t\tmaxWidth: '60%',\n\t\tfitHeight: true,\n\t\tonClose: null\n\t},\n\tevents: {\n\t\t'click .btn-close': 'close'\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tprojectName: this.options.project ? this.options.project.get('projectName') : ''\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.views.bidPackages.BidPackagesView({\n\t\t\tel: this.$('.manage-bid-packages'),\n\t\t\tprojectId: this.options.project ? this.options.project.get('projectId') : null,\n\t\t\tproject: this.options.project ? this.options.project : null\n\t\t});\n\t},\n\tclose: function () {\n\t\tif (typeof this.options.onClose === 'function') {\n\t\t\tthis.options.onClose({\n\t\t\t\tchanged: true\n\t\t\t});\n\t\t}\n\t}\n});\n\nPJQ.views.bidPackages.BidPackagesView = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Bid-Packages')\n\t},\n\tevents: {\n\t\t'click .add-bid-package': 'addBidPackageClicked',\n\t\t'click .btn-import-template': 'importTemplate',\n\t\t'click .btn-save-a-template': 'saveAsTemplate',\n\t\t'click .btn-delete-bid-package': 'deleteBidPackageClicked',\n\t\t'click .btn-edit-bid-package': 'editBidPackageClicked'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.collection) {\n\t\t\tthis.listenTo(this.collection, 'fetch', this.render);\n\t\t\tthis.render();\n\t\t}\n\t\telse if (this.options.projectId) {\n\t\t\tthis.collection = new PJQ.collections.bidPackages.BidPackages(null, {\n\t\t\t\tprojectId: this.options.projectId\n\t\t\t})\n\t\t\tthis.collection.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.render();\n\t\t\t\t\tthis.listenTo(this.collection, 'fetch', this.render);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.collection = new PJQ.collections.bidPackages.BidPackages();\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$(\".bid-package-table\"),\n\t\t\tdata: _.sortBy(this.collection.models, function (model) {\n\t\t\t\treturn model.get('sortOrder');\n\t\t\t}),\n\t\t\trowId: \"cid\",\n\t\t\torder: [0, 'asc'],\n\t\t\tsortableOptions: {\n\t\t\t\tdata: this.collection,\n\t\t\t\tcontainment: \".bid-package-table\",\n\t\t\t},\n\t\t\tbSort: false,\n\t\t\tscrollRows: true,\n\t\t\tpaging: false,\n\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\tthis.editBidPackage(row.data());\n\t\t\t}, this),\n\t\t\tlanguage: {\n\t\t\t\tzeroRecords: 'Click \"Add New Bid Package\" to create a new Bid Package'\n\t\t\t},\n\t\t\tcontextMenuOptions: {\n\t\t\t\tactions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Edit',\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.editBidPackage(row.data());\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Delete',\n\t\t\t\t\t\tisDanger: true,\n\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\tthis.deleteBidPackage(row);\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tcolumns: [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.sortOrder\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"visible\": false,\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet content = '';\n\t\t\t\t\t\tif (data != null) {\n\t\t\t\t\t\t\tcontent = '<div><i class=\"fas fa-sort\"></i></div>'\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn content\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Name\",\n\t\t\t\t\t\"data\": \"attributes.name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"title\": \"Groups\",\n\t\t\t\t\t\"data\": \"attributes.groups\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\tif (row.groups && _.size(row.groups.models) > 0) {\n\t\t\t\t\t\t\tlet groupNames = [];\n\t\t\t\t\t\t\t_.each(row.groups.models, function (group) {\n\t\t\t\t\t\t\t\tgroupNames.push(group.get('groupName'));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn groupNames.join(\", \");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"render\": _.bind(function () {\n\t\t\t\t\t\treturn '<div class=\"text-align-right show-on-row-hover\"><button type=\"button\" class=\"btn btn-info btn-edit-bid-package wd-30p mr-1\"><i class=\"fal fa-pencil\"></i><button type=\"button\" class=\"btn btn-danger btn-delete-bid-package wd-30p\"><i class=\"fal fa-trash-alt\"></i></button></button></div>'\n\t\t\t\t\t}, this),\n\t\t\t\t\t\"width\": \"80px\"\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t},\n\taddBidPackageClicked: function () {\n\t\tlet newBidPackage = new PJQ.models.bidPackages.BidPackage({\n\t\t\tbidPackageId: null,\n\t\t\tname: \"\",\n\t\t\tgroups: null,\n\t\t\tprojectId: this.options.projectId,\n\t\t\ttemplateId: this.options.templateId\n\t\t});\n\t\tthis.editBidPackage(newBidPackage);\n\t},\n\timportTemplate: function () {\n\t\tnew PJQ.views.bidPackages.ImportTemplateModal({\n\t\t\tproject: this.options.project,\n\t\t\tonImport: _.bind(function (submittals) {\n\t\t\t\tthis.collection = submittals;\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t});\n\t},\n\tsaveAsTemplate: function () {\n\t\tnew PJQ.views.bidPackages.BidPackageTemplateCreatorModal({\n\t\t\tcollection: this.collection,\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\teditBidPackage: function (bidPackage) {\n\t\tnew PJQ.views.bidPackages.EditBidPackageModal({\n\t\t\tmodel: bidPackage,\n\t\t\tonSave: _.bind(function (pkg, isNew) {\n\t\t\t\tif (isNew) {\n\t\t\t\t\tthis.collection.add(pkg);\n\t\t\t\t\tthis.dataTable.addRow(pkg);\n\t\t\t\t}\n\t\t\t\tthis.dataTable.refresh();\n\t\t\t}, this),\n\t\t\tonClose: _.bind(function (pkg) {\n\t\t\t\tif (pkg.hasChanged()) {\n\t\t\t\t\tpkg.fetch({\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tthis.dataTable.refresh();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tonDelete: _.bind(function (pkg) {\n\t\t\t\tlet row = this.dataTable.getRow(pkg.cid);\n\t\t\t\tthis.deleteBidPackage(row);\n\t\t\t}, this)\n\t\t});\n\t},\n\teditBidPackageClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.dataTable.getRow(target.closest('tr')),\n\t\t\tpkg = row.data();\n\n\t\tthis.editBidPackage(pkg);\n\t},\n\tdeleteBidPackageClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.dataTable.getRow(target.closest('tr'));\n\t\tthis.deleteBidPackage(row);\n\t},\n\tdeleteBidPackage: function (row) {\n\t\tlet pkg = row.data();\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this Bid Package?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.collection.remove(pkg);\n\t\t\t\tpkg.destroy();\n\t\t\t\tthis.dataTable.removeRow(row);\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.bidPackages.EditBidPackageModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Edit-Bid-Package'),\n\t\tmaxWidth: '50%',\n\t\tonClose: null\n\t},\n\tevents: {\n\t\t'click .btn-close': 'close',\n\t\t'click .btn-delete': 'deleteBidPackage',\n\t\t'click .btn-save': 'save'\n\t},\n\t// beforeModalCreated: function () {\n\t// // this.listenTo(this.model, 'fetch', this.render);\n\t// // this.model.fetch();\n\t// },\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.Binder(this.$el, this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input',\n\t\t\t\t'textarea'\n\t\t\t]\n\t\t});\n\t\tlet groupUserId = PJQ.app.session.get('masterUserId'),\n\t\t\tgroupLevels = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS)\n\t\tif (this.model.groups == null) {\n\t\t\tthis.model.groups = new PJQ.collections.groups.Groups([], {\n\t\t\t\tgroupLevels: groupLevels\n\t\t\t});\n\t\t}\n\t\tnew PJQ.views.groups.GroupsSelectInput({\n\t\t\tel: this.$('.bid-package-groups'),\n\t\t\tisShowAddButton: false,\n\t\t\tgroupLevels: groupLevels,\n\t\t\tgroupUserId: groupUserId,\n\t\t\tisReadOnly: false,\n\t\t\taddButton: this.$('.btn-edit-groups'),\n\t\t\tselectedGroups: this.model.groups.models,\n\t\t\tonAfterSave: _.bind(function (selectedGroups) {\n\t\t\t\tthis.model.groups.reset(selectedGroups);\n\t\t\t\tthis.model.isDirty = true;\n\t\t\t}, this)\n\t\t});\n\t},\n\tclose: function () {\n\t\tif (typeof this.options.onClose === 'function') {\n\t\t\tthis.options.onClose(this.model);\n\t\t}\n\t\tthis.removeModal();\n\t},\n\tsave: function () {\n\t\tif (this.model.hasChanged() || this.model.isNew()) {\n\t\t\tlet isNew = false;\n\t\t\tif (this.model.isNew()) {\n\t\t\t\tisNew = true;\n\t\t\t}\n\t\t\tthis.model.save(null, {\n\t\t\t\tnotify: true,\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tif (this.options.onSave) {\n\t\t\t\t\t\tthis.options.onSave(this.model, isNew);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.removeModal();\n\t\t}\n\t},\n\tdeleteBidPackage: function () {\n\t\tif (typeof this.options.onDelete === 'function') {\n\t\t\tthis.options.onDelete(this.model);\n\t\t}\n\t\tthis.removeModal();\n\t}\n});\n\nPJQ.views.bidPackages.ImportTemplateModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-import-bid-package-template'),\n\t\tmaxWidth: 500,\n\t\tonImport: null\n\t},\n\tevents: {\n\t\t'click .btn-import': 'save'\n\t},\n\tbeforeModalCreated: function () {\n\t\tPJQ.app.session.fetchBidPackageTemplates(_.bind(function (tmp) {\n\t\t\tthis.templates = tmp;\n\t\t\tthis.render();\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\ttemplates: this.templates\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.templates != null && this.templates.isFetched) {\n\t\t\tthis.templatePicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-template'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.selectedTemplate = this.templates.get(value);\n\t\t\t\t}, this),\n\t\t\t\tisIntChoices: true,\n\t\t\t\tnoneSelectedText: 'Select Template'\n\t\t\t});\n\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet isValid = true;\n\t\tif (this.selectedTemplate == null) {\n\t\t\tthis.templatePicker.showError();\n\t\t\tisValid = false;\n\t\t}\n\t\telse {\n\t\t\tthis.templatePicker.hideError();\n\t\t}\n\n\n\t\tif (!isValid) {\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'bidpackages'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'import',\n\t\t\t\t\tvalue: this.selectedTemplate.id\n\t\t\t\t}\n\t\t\t])\n\t\t}).put().done(_.bind(function (response) {\n\t\t\tif (typeof this.options.onImport === 'function') {\n\t\t\t\tlet result = new PJQ.collections.bidPackages.BidPackages(response);\n\t\t\t\tresult.isFetched = true;\n\t\t\t\tthis.options.onImport(result);\n\t\t\t}\n\t\t\tthis.removeModal();\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Bid Package Template Imported'\n\t\t\t});\n\t\t}, this));\n\t}\n});\n\nPJQ.views.bidPackages.BidPackageTemplateCreatorModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-create-bid-package-template'),\n\t\twidth: '30%'\n\t},\n\tevents: {\n\t\t'click .btn-save': 'save'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.model = new PJQ.models.bidPackages.Template({\n\t\t\tprojectId: this.options.project.id\n\t\t});\n\n\t\tPJQ.app.session.fetchBidPackageTemplates(_.bind(function (tmp) {\n\t\t\tthis.templates = tmp;\n\t\t\tthis.render();\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\ttemplates: this.templates,\n\t\t\tbidPackages: this.collection\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.templates != null && this.templates.isFetched) {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-bid-package'),\n\t\t\t\tisMultiple: true,\n\t\t\t\tnoneSelectedText: 'Select Bid Package',\n\t\t\t\tonChange: _.bind(function (value) {\n\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.inputs.AutocompleteInput({\n\t\t\t\tel: this.$('.input-template-name'),\n\t\t\t\tsource: _.map(this.templates.models, function (template) {\n\t\t\t\t\treturn template.get('name')\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet $name = this.$('.input-template-name'),\n\t\t\tname = $name.val();\n\t\tif (_.size(name.trim()) === 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError($name);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tPJQ.helpers.inputHelpers.setInputError($name, true);\n\t\t}\n\n\t\tlet existingTemplate = this.templates.findWhere({name: name}),\n\t\t\tfnSave = _.bind(function () {\n\t\t\t\tthis.model.set({\n\t\t\t\t\tname: name\n\t\t\t\t});\n\t\t\t\tthis.model.save(null, {\n\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\t\tmessage: 'Bid Package Template Created'\n\t\t\t\t\t\t});\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}, this);\n\t\tif (existingTemplate != null) {\n\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\theader: \"Overwrite Template\",\n\t\t\t\tbody: \"A template already exists with this name. Would you like to overwrite it?\",\n\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\tthis.model.set('templateId', existingTemplate.id);\n\t\t\t\t\tfnSave();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfnSave();\n\t\t}\n\t}\n});\n\nPJQ.views.bidPackages.SelectBidPackagesModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\tisSingleChoice: false,\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Bid-Packages-Select'),\n\t\talertText: null,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t\"click .bid-packages-select-save\": \"onSave\"\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.bidPackageSelector = new PJQ.views.bidPackages.BidPackageSelector({\n\t\t\tel: this.$('.bid-packages-selector'),\n\t\t\tisEnableSelectedFilter: false,\n\t\t\tonBidPackageSelected: _.bind(this.checkBidPackagesSelected, this),\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\tcheckBidPackagesSelected: function (bidPackagesData) {\n\t\tthis.$('.bid-packages-select-save').prop('disabled', _.size(bidPackagesData.new) === 0 && _.size(_.difference(_.map(bidPackagesData.original, function (bidPackage) {\n\t\t\treturn bidPackage.id;\n\t\t}), _.map(bidPackagesData.selected, function (bidPackage) {\n\t\t\treturn bidPackage.id\n\t\t}))) === 0);\n\t\tthis.onSave()\n\t},\n\tonSave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave(this.bidPackageSelector.getData());\n\t\t}\n\t\tthis.removeModal();\n\t},\n});\n\nPJQ.views.bidPackages.BidPackageSelector = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Bid-Package-Selector-Container'),\n\t\tsubTemplates: {\n\t\t\tselector: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Bid-Package-Selector')\n\t\t},\n\t\tbidPackages: null,\n\t\tincludeBidPackageIds: null,\n\t\tselectedBidPackageIds: null,\n\t\tdisabledBidPackageIds: null,\n\t\tselectedBidPackages: null,\n\t\tonBidPackagesLoaded: null,\n\t\tonBidPackageSelected: null,\n\t\tisAdmin: false,\n\t\tisEnableSelectAll: false,\n\t\tisDisableSelected: false,\n\t\tisHideDisabled: false,\n\t\tisExpandSelected: true,\n\t\tcanEdit: true,\n\t\tonSelect: _.noop,\n\t\tisSingleChoice: false,\n\t\theaderButtons: null,\n\t\tisIncludeGroups: false,\n\t\tonSelected: _.noop\n\t},\n\tevents: {\n\t\t\"keyup .bid-package-search\": \"renderBidPackages\",\n\t\t\"click .btn-header-action\": \"headerAction\",\n\t\t\"click .bid-package-all-select\": \"selectAll\",\n\t\t\"click .bid-package-expand\": \"expandParentClick\",\n\t\t\"click .bid-package-select\": \"selectBidPackage\",\n\t\t\"click .group-select\": \"selectGroup\"\n\t},\n\tafterRender: function () {\n\t\tthis.selectedGroupIds = [];\n\t\tthis.selectedBidPackageIds = [];\n\t\tif (this.options.bidPackages == null) {\n\t\t\tthis.getBidPackages();\n\t\t}\n\t\telse {\n\t\t\tthis.afterSync();\n\t\t}\n\t},\n\tgetBidPackages: function () {\n\t\tif (this.collection != null) {\n\t\t\tthis.collection.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.afterSync();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse if (this.options.project) {\n\t\t\tthis.collection = new PJQ.collections.bidPackages.BidPackages(null, {\n\t\t\t\tprojectId: this.options.project.id\n\t\t\t})\n\t\t\tthis.collection.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.afterSync();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.collection = new PJQ.collections.bidPackages.BidPackages();\n\t\t\tthis.afterSync()\n\t\t}\n\t},\n\tafterSync: function () {\n\t\tthis.options.isBidPackagesLoaded = true;\n\t\tthis.loadBidPackages();\n\t},\n\tloadBidPackages: function () {\n\t\tif (this.removed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderBidPackages();\n\n\t\tif (typeof this.options.onBidPackagesLoaded === 'function') {\n\t\t\tthis.options.onBidPackagesLoaded();\n\t\t}\n\t},\n\trenderBidPackages: function () {\n\t\tlet searchFilter = this.$('.bid-package-search').val().toLowerCase(),\n\t\t\tbidPackages = [];\n\n\t\tif (_.size(searchFilter) > 0) {\n\t\t\t_.each(this.collection.models, _.bind(function (model) {\n\t\t\t\tif (model.get('name').toLowerCase().indexOf(searchFilter) > -1)\n\t\t\t\t\tbidPackages.push(model);\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.$('.bid-package-clear-filters').prop('disabled', true);\n\t\t\tbidPackages = this.collection.models;\n\t\t}\n\n\t\tlet data = {\n\t\t\tmodels: bidPackages,\n\t\t\toptions: this.options,\n\t\t};\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.selector, this.$('.bid-packages-container'), data, _.bind(function () {\n\t\t\tif (this.options.isHideDisabled) {\n\t\t\t\tthis.$('.bid-package-select:disabled').closest('.bid-package-select-container').hide();\n\t\t\t}\n\t\t\tthis.isRendered = true;\n\t\t}, this));\n\t},\n\tshowError: function (errorText) {\n\t\tthis.hideError();\n\t\tthis.errorAlert = new PJQ.Alert(this.$el, {\n\t\t\ttype: 'danger',\n\t\t\textraClasses: ['mt-1, mb-1'],\n\t\t\ttext: errorText,\n\t\t\tisPrepend: true\n\t\t});\n\t},\n\thideError: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\t},\n\treload: function (userId) {\n\t\tthis.getBidPackages();\n\t},\n\tgetParentChildContainer: function (parent) {\n\t\treturn parent.closest('.pretty').siblings('.group-child-container');\n\t},\n\texpandParentClick: function (e) {\n\t\tthis.expandParent($(e.currentTarget).siblings('.group-child-container'));\n\t},\n\texpandParent: function (container) {\n\t\tlet icon = container.siblings('i.bid-package-expand');\n\t\tif (container.hasClass('hidden')) {\n\t\t\tcontainer.removeClass('hidden');\n\t\t\ticon.removeClass('fa-chevron-down text-primary');\n\t\t\ticon.addClass('fa-chevron-up text-muted');\n\t\t}\n\t\telse {\n\t\t\tcontainer.addClass('hidden');\n\t\t\ticon.removeClass('fa-chevron-up text-muted');\n\t\t\ticon.addClass('fa-chevron-down text-primary');\n\t\t}\n\t},\n\tgetData: function () {\n\t\tlet groupIds = [],\n\t\t\tbidPackageIds = [];\n\t\t_.each(this.collection.models, function (bidPackage) {\n\t\t\tif (bidPackage.get('isSelected')) {\n\t\t\t\tbidPackageIds.push(bidPackage.get('bidPackageId'))\n\t\t\t}\n\t\t\t_.each(bidPackage.groups.models, function (group) {\n\t\t\t\tif (group.get('isSelected')) {\n\t\t\t\t\tgroupIds.push(group.get('groupId'));\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this);\n\n\t\tif (typeof this.options.onSelected === 'function') {\n\t\t\tthis.options.onSelected(groupIds, bidPackageIds);\n\t\t}\n\t\treturn {groupIds, bidPackageIds};\n\t},\n\tselectBidPackage: function (e) {\n\t\tlet childContainer = this.getParentChildContainer($(e.currentTarget)),\n\t\t\tisChecked = $(e.currentTarget).is(':checked'),\n\t\t\tbidPackageId = $(e.currentTarget).data('bid-package-id'),\n\t\t\tbidPackage = this.collection.get(bidPackageId);\n\n\t\tlet groupSelects = [];\n\t\tgroupSelects = childContainer.find('.bid-package-select')\n\t\tchildContainer.find('.group-select').prop('checked', isChecked);\n\n\t\tbidPackage.set('isSelected', isChecked);\n\t\t_.each(bidPackage.groups.models, function (group) {\n\t\t\tgroup.set('isSelected', isChecked);\n\t\t}, this)\n\n\t\tif (isChecked) {\n\t\t\t//If its checked, expand the parents/sub-parents to show the groups that were selected\n\t\t\tif (childContainer.hasClass('hidden')) {\n\t\t\t\tthis.expandParent(childContainer);\n\t\t\t}\n\t\t}\n\n\t\tthis.$('.bid-package-all-select').prop('checked', !(this.$('.group-select:not(:checked)').length > 0));\n\n\t\tthis.getData();\n\t},\n\tselectAll: function () {\n\t\tlet groupSelects = this.$('.group-select'),\n\t\t\tbidPackageSelects = this.$('.bid-package-select')\n\t\tif (this.$('.bid-package-all-select').prop('checked')) {\n\t\t\t_.each(this.collection.models, function (model) {\n\t\t\t\tmodel.set('isSelected', true);\n\t\t\t\t_.each(model.groups.models, function (group) {\n\t\t\t\t\tgroup.set('isSelected', true);\n\t\t\t\t}, this)\n\t\t\t}, this)\n\t\t\tgroupSelects.prop('checked', true);\n\t\t\tbidPackageSelects.prop('checked', true);\n\t\t}\n\t\telse {\n\t\t\t_.each(this.collection.models, function (model) {\n\t\t\t\tmodel.set('isSelected', false);\n\t\t\t\t_.each(model.groups.models, function (group) {\n\t\t\t\t\tgroup.set('isSelected', false);\n\t\t\t\t}, this)\n\t\t\t}, this)\n\t\t\tgroupSelects.prop('checked', false);\n\t\t\tbidPackageSelects.prop('checked', false);\n\t\t}\n\t\tthis.getData();\n\t},\n\tselectGroup: function (e) {\n\t\tlet $target = $(e.currentTarget),\n\t\t\tgroupId = $target.data('group-id'),\n\t\t\tbidPackageId = $target.data('bid-package'),\n\t\t\tbidPackage = this.collection.get(bidPackageId),\n\t\t\tremoveBidPackage = true,\n\t\t\tgroup = _.find(bidPackage.groups.models, function (group) {\n\t\t\t\treturn group.get('groupId') === groupId;\n\t\t\t}),\n\t\t\tisChecked = $(e.currentTarget).is(':checked'),\n\t\t\tbidPackageSwitch = this.$('.bid-packages-container').find('[data-bid-package-id=\"' + bidPackageId + '\"]')\n\n\t\tgroup.set('isSelected', isChecked);\n\t\tif (isChecked && !bidPackage.get('isSelected')) {\n\t\t\tbidPackage.set('isSelected', true);\n\t\t\tbidPackageSwitch.prop('checked', isChecked);\n\t\t}\n\n\t\tif (!isChecked) {\n\t\t\t_.each(bidPackage.groups.models, function (group) {\n\t\t\t\tif (group.get('isSelected')) {\n\t\t\t\t\tremoveBidPackage = false;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (removeBidPackage) {\n\t\t\t\tbidPackageSwitch.prop('checked', isChecked);\n\t\t\t\tbidPackage.set('isSelected', false);\n\t\t\t}\n\t\t}\n\t\tthis.$('.bid-package-all-select').prop('checked', !(this.$('.group-select:not(:checked)').length > 0));\n\t\tthis.getData();\n\t}\n});\n\nPJQ.views.bidPackages.BidPackageRadiusModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Bid-Package-Radius'),\n\t\talertText: null,\n\t\tonSave: null,\n\t\tmaxWidth: \"400px\",\n\t\tdefaultRadius: 50\n\t},\n\tevents: {\n\t\t\"click .add-participants\": \"addParticipants\",\n\t\t'keyup .add-participants-radius': 'radiusChanged'\n\t},\n\tbeforeModalCreated: function () {\n\t\tlet prefs;\n\t\tif (this.options.project != null) {\n\t\t\tprefs = this.options.project.preferences;\n\t\t}\n\t\telse {\n\t\t\tprefs = PJQ.app.session.preferences;\n\t\t}\n\n\t\tlet radiusPref = prefs.getPref(PJQ.constants.preferenceTypes.ADD_PARTICIPANTS_BID_PACKAGE_RADIUS);\n\t\tif (radiusPref != null && radiusPref > 0) {\n\t\t\tthis.options.defaultRadius = radiusPref;\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.directoryFilterSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.directory-filter'),\n\t\t\tisIntChoices: true,\n\t\t\tisMultiple: true,\n\t\t\tmustSelectValue: true,\n\t\t\tdefaultValue: [1,2]\n\t\t});\n\n\t\tthis.radiusSlider = new PJQ.Slider(this.$('.add-participants-radius-slider'), {\n\t\t\tticks: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tticks_labels: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tvalue: this.options.defaultRadius,\n\t\t\tonChange: _.bind(function (obj) {\n\t\t\t\tthis.setRadius(obj.newValue);\n\t\t\t}, this)\n\t\t});\n\t},\n\tradiusChanged: function () {\n\t\tthis.setRadius(parseInt(this.$('.add-participants-radius').val()));\n\t},\n\tsetRadius: function (radius) {\n\t\tif (isNaN(radius) || radius < 1)\n\t\t\tradius = 1;\n\t\telse if (radius > 300)\n\t\t\tradius = 300;\n\t\tthis.radiusSlider.setValue(radius);\n\t\t//don't set the radius input yet if the length of the value is 0 in case the user is trying to clear the input to enter a new value\n\t\tif (this.$('.add-participants-radius').val().length > 0)\n\t\t\tthis.$('.add-participants-radius').val(radius);\n\t},\n\taddParticipants: function () {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'participants',\n\t\t\t\t\tvalue: 'bidPackages'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'radius',\n\t\t\t\t\tvalue: this.radiusSlider.getValue()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparameter: 'directoryFilter',\n\t\t\t\t\tvalue: _.size(this.directoryFilterSelectPicker.getValue()) === 2 ? 0 : this.directoryFilterSelectPicker.getValue()[0]\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\tthis.options.onSave(data)\n\t\t\t}\n\t\t\tif (_.size(data) > 0) {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Participants successfully added'\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'No participants were added'\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.removeModal();\n\t\t}, this)).fail(_.bind(function () {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Encountered an error adding participants. Please contact customer service.'\n\t\t\t});\n\t\t}, this));\n\t}\n});\n\n","//Models\nPJQ.models.billing = {};\n\nPJQ.models.billing.BillingInfo = PJQ.models.BaseModel.extend({\n\tendpoint: '/billing',\n\tgetCardholderName: function () {\n\t\tlet name = this.get('firstName');\n\t\tif (_.size(this.get('lastName')) > 0) {\n\t\t\tname = ' ' + this.get('lastName');\n\t\t}\n\t\treturn name;\n\t},\n\tsave: function (mod, opts = {}) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'billing'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: this.toJSON()\n\t\t}).put().done(_.bind(function (data) {\n\t\t\tif (data == null || data.subscription == null) {\n\t\t\t\t//empty the card number in case of error after this point\n\t\t\t\tthis.set({\n\t\t\t\t\tcardNumber: null,\n\t\t\t\t\tcardExpirationMonth: null,\n\t\t\t\t\tcardExpirationYear: null\n\t\t\t\t});\n\n\t\t\t\tif (typeof opts.error === 'function') {\n\t\t\t\t\topts.error(data);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.billingInfo != null) {\n\t\t\t\tthis.parse(data.billingInfo);\n\t\t\t}\n\n\t\t\tPJQ.app.session.subscriptionChanged(data.subscription);\n\n\t\t\tif (typeof opts.success === 'function') {\n\t\t\t\topts.success(data);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (data) {\n\t\t\t//empty the card number in case of error after this point\n\t\t\tthis.set({\n\t\t\t\tcardNumber: null,\n\t\t\t\tcardExpirationMonth: null,\n\t\t\t\tcardExpirationYear: null\n\t\t\t});\n\n\t\t\tif (typeof opts.error === 'function') {\n\t\t\t\topts.error(data);\n\t\t\t}\n\t\t}, this));\n\t},\n\tparse(model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tthis.attributes = model;\n\t}\n});\n","PJQ.Binder = class {\n\tconstructor($el, obj, options = {}) {\n\t\tthis.options = _.defaults(options, {\n\t\t\tattribute: 'data-p-bind',\n\t\t\twatchElements: [\n\t\t\t\t'input',\n\t\t\t\t'textarea'\n\t\t\t],\n\t\t\tsetDefaultValues: false,\n\t\t\tevents: 'keyup change dp.change',\n\t\t\tdelegate: false,\n\t\t\tonChange: null,\n\t\t\tafterChange: null,\n\t\t\tuseDecimalPercentFields: false,\n\t\t\tcanEdit: null,\n\t\t\t//below needed to support events for collections w/ data tables\n\t\t\tdataTable: null,\n\t\t\tidAttribute: 'cid',\n\t\t\tmodelSelectorAttribute: 'cid',\n\t\t\tmodelSelector: 'tr',\n\t\t\tvalidators: {}\n\t\t});\n\n\t\tthis.$outer = $el;\n\n\t\tlet objectType = PJQ.helpers.objectHelpers.refinedType(obj, true);\n\t\tif (objectType === 'backboneCollection') {\n\t\t\tthis.isArray = true;\n\t\t\tthis.obj = obj.models;\n\t\t} else if (objectType === 'array') {\n\t\t\tthis.isArray = true;\n\t\t\tthis.obj = obj;\n\n\t\t} else if (objectType === 'backboneModel' || objectType === 'object') {\n\t\t\tthis.isBackboneObj = (objectType === 'backboneModel');\n\t\t\tthis.obj = obj;\n\t\t}\n\n\t\tthis.bindElements();\n\t}\n\n\tremove() {\n\t\tif (this.options.delegate === true) {\n\t\t\tthis.$outer.off(this.options.events);\n\t\t} else {\n\t\t\tlet self = this;\n\t\t\t_.each(this.options.watchElements, (element) => {\n\t\t\t\tthis.$outer.find(element + '[' + this.options.attribute + ']').each(function () {\n\t\t\t\t\t$(this).off(self.options.events);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tbindElements() {\n\t\tthis.requiredAttributes = [];\n\n\t\tthis.renderInputs();\n\n\t\tif (this.options.delegate === true) {\n\t\t\tthis.$outer.on(this.options.events, this.options.watchElements.join(', '), (e) => {\n\t\t\t\tthis.handleChange($(e.target));\n\t\t\t});\n\t\t} else {\n\t\t\tlet self = this;\n\t\t\t_.each(this.options.watchElements, (element) => {\n\t\t\t\tthis.$outer.find(element + '[' + this.options.attribute + ']').each(function () {\n\t\t\t\t\tif (self.options.canEdit != null) {\n\t\t\t\t\t\t$(this).prop('disabled', !self.options.canEdit);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.bindElement($(this));\n\t\t\t\t\tif (self.options.setDefaultValues && self.obj != null && !self.isArray) {\n\t\t\t\t\t\tself.setElementValue($(this))\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tbindElement($el) {\n\t\tlet attribute = this.getElementAttribute($el);\n\t\tif (attribute != null && attribute.length > 0) {\n\t\t\tif ($el.prop('required') && !_.contains(this.requiredAttributes, attribute)) {\n\t\t\t\tthis.requiredAttributes.push(attribute);\n\t\t\t}\n\n\t\t\tlet self = this;\n\t\t\tswitch (this.getElementType($el)) {\n\t\t\t\tcase 'text':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tself.onChange($el, attribute, $el.val());\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'decimal':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tlet value = parseFloat($el.val());\n\t\t\t\t\t\tvalue = typeof value === 'number' ? value * 100 : 0;\n\t\t\t\t\t\tself.onChange($el, attribute, value);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'number':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getNumberInputValue($el));\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'percent':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getPercentInputValue($el, self.options.useDecimalPercentFields === true));\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'phone':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getPhoneInputValue($el));\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'money':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getMoneyInputValue($el.parent()));\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\t//todo: Support date input (dates use another prototype - attempt to attach this prototype to the element somehow\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'select':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tlet picker = $el.data('selectpickerview'),\n\t\t\t\t\t\t\tvalue = picker != null ? picker.getValue() : $el.val();\n\t\t\t\t\t\tself.onChange($el, attribute, value);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bool':\n\t\t\t\t\t$el.on(this.options.events, function () {\n\t\t\t\t\t\tlet opposite = $el.data('pBindOpposite') === true,\n\t\t\t\t\t\t\tval = $el.prop('checked');\n\t\t\t\t\t\tself.onChange($el, attribute, opposite ? !val : val);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\trenderInputs() {\n\t\tthis.inputs = {\n\t\t\tselectPickers: {},\n\t\t\tdatePickers: {},\n\t\t\tbuttonGroups: {},\n\t\t\tgroupPickers: {},\n\t\t\tlocationPickers: {},\n\t\t\tcontactSelectors: {},\n\t\t\tfileUploaders: {},\n\t\t\tall: {}\n\t\t}\n\t\tthis.attributeListeners = {};\n\n\t\tif (this.options.inputs == null) {\n\t\t\treturn;\n\t\t}\n\n\t\t_.each(this.options.inputs, (inputOpts, attribute) => {\n\t\t\tif (typeof inputOpts.onChange === 'function' || typeof inputOpts.afterChange === 'function') {\n\t\t\t\tthis.attributeListeners[attribute] = {\n\t\t\t\t\tonChange: inputOpts.onChange,\n\t\t\t\t\tafterChange: inputOpts.afterChange\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet $el = this.getAttributeElement(attribute);\n\t\t\tif ($el.length === 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet fnRender = ($input) => {\n\t\t\t\tif (inputOpts.selectPicker != null) {\n\t\t\t\t\tthis.renderSelectPicker($input, attribute, inputOpts.selectPicker);\n\t\t\t\t} else if (inputOpts.datePicker != null) {\n\t\t\t\t\tthis.renderDatePicker($input, attribute, inputOpts.datePicker);\n\t\t\t\t} else if (inputOpts.groupPicker != null) {\n\t\t\t\t\tthis.renderGroupPicker($input, attribute, inputOpts.groupPicker);\n\t\t\t\t} else if (inputOpts.locationPicker != null) {\n\t\t\t\t\tthis.renderLocationPicker($input, attribute, inputOpts.locationPicker);\n\t\t\t\t} else if (inputOpts.contactSelector != null) {\n\t\t\t\t\tthis.renderContactSelector($input, attribute, inputOpts.contactSelector);\n\t\t\t\t} else if (inputOpts.fileUploader != null) {\n\t\t\t\t\tthis.renderFileUploader($input, attribute, inputOpts.fileUploader);\n\t\t\t\t} else if (inputOpts.buttonGroup != null) {\n\t\t\t\t\tthis.renderButtonGroup($input, attribute, inputOpts.buttonGroup);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($el.length > 1) {\n\t\t\t\t$el.each(function () {\n\t\t\t\t\tfnRender($(this));\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tfnRender($el);\n\t\t\t}\n\n\t\t\tif ((inputOpts.required || $el.prop('required')) && !_.contains(this.requiredAttributes, attribute)) {\n\t\t\t\tthis.requiredAttributes.push(attribute);\n\t\t\t}\n\t\t});\n\t}\n\n\tgetInputObj(attribute, modelId = null) {\n\t\tlet attr = attribute;\n\t\tif (modelId != null) {\n\t\t\tattr = attribute + \"_\" + modelId;\n\t\t}\n\t\treturn this.inputs.all[attr];\n\t}\n\n\tgetInput(attribute, modelId = null) {\n\t\treturn this.getInputObj(attribute, modelId)?.input ?? null;\n\t}\n\n\trenderGroupPicker($el, attribute, pickerOpts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null;\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet optChange = pickerOpts?.onChange;\n\t\tthis.inputs.all[attribute] = this.inputs.groupPickers[attribute] = {\n\t\t\tinput: new PJQ.inputs.GroupPicker(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tproject: this.options.project,\n\t\t\t\tcanEdit: pickerOpts.canEdit != null ? pickerOpts.canEdit : (this.options.canEdit ?? true),\n\t\t\t\tdefaultValue: pickerOpts.defaultValue ?? value,\n\t\t\t\tonChange: (value) => {\n\t\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\t\toptChange(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, pickerOpts))\n\t\t};\n\t}\n\n\trenderLocationPicker($el, attribute, pickerOpts) {\n\t\tif (this.options.project == null && pickerOpts.project == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null;\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet optChange = pickerOpts?.onChange;\n\t\tthis.inputs.all[attribute] = this.inputs.locationPickers[attribute] = {\n\t\t\tinput: new PJQ.inputs.ProjectLocationPicker(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tproject: this.options.project,\n\t\t\t\tcanEdit: pickerOpts.canEdit != null ? pickerOpts.canEdit : (this.options.canEdit ?? true),\n\t\t\t\tdefaultValue: pickerOpts.defaultValue ?? value,\n\t\t\t\tonChange: (value) => {\n\t\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\t\toptChange(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, pickerOpts))\n\t\t};\n\t}\n\n\trenderContactSelector($el, attribute, pickerOpts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\t// first try to get a collection object inside the model (not the attributes)\n\t\tlet value = obj[attribute],\n\t\t\tobjectType = PJQ.helpers.objectHelpers.refinedType(value, true),\n\t\t\tcollection = null;\n\t\tif (value == null) {\n\t\t\tif (typeof obj.get === 'function') {\n\t\t\t\tvalue = obj.get(attribute);\n\t\t\t} else {\n\t\t\t\tvalue = obj[attribute];\n\t\t\t}\n\t\t} else if (objectType === 'backboneCollection') {\n\t\t\tcollection = value;\n\t\t}\n\n\t\tlet optChange = pickerOpts?.onChange;\n\t\tthis.inputs.all[attribute] = this.inputs.contactSelectors[attribute] = {\n\t\t\tinput: new PJQ.views.contacts.ContactsSelectInput(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tproject: this.options.project,\n\t\t\t\tcanEdit: pickerOpts.canEdit != null ? pickerOpts.canEdit : (this.options.canEdit ?? true),\n\t\t\t\tselectedContact: pickerOpts.selectedContact ?? collection?.models ?? value,\n\t\t\t\tonChange: (value) => {\n\t\t\t\t\tif (this.isBackboneObj) {\n\t\t\t\t\t\tobj.set('isDirty', true);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\t\toptChange(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, pickerOpts)),\n\t\t\tsetValue: (value) => {\n\t\t\t\tif (collection != null) {\n\t\t\t\t\tcollection.reset(value);\n\t\t\t\t} else {\n\t\t\t\t\tobj[attribute] = value;\n\t\t\t\t}\n\n\t\t\t\tif (this.isBackboneObj) {\n\t\t\t\t\tobj.isDirty = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\trenderSelectPicker($el, attribute, pickerOpts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null;\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet optChange = pickerOpts?.onChange;\n\t\tthis.inputs.all[attribute] = this.inputs.selectPickers[attribute] = {\n\t\t\tinput: new PJQ.inputs.Selectpicker(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tcanEdit: pickerOpts.canEdit != null ? pickerOpts.canEdit : (this.options.canEdit ?? true),\n\t\t\t\tdefaultValue: pickerOpts.defaultValue ?? value,\n\t\t\t\tonChange: (value) => {\n\t\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\t\toptChange(...arguments);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, pickerOpts))\n\t\t};\n\t}\n\n\trenderDatePicker($el, attribute, pickerOpts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null;\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet optChange = pickerOpts?.onChange;\n\t\tpickerOpts = _.defaults({\n\t\t\tel: $el,\n\t\t\tcanEdit: pickerOpts.canEdit != null ? pickerOpts.canEdit : (this.options.canEdit ?? true),\n\t\t\tonChange: (value) => {\n\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\toptChange(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}, pickerOpts);\n\n\t\tif (pickerOpts.datepickerOptions == null) {\n\t\t\tpickerOpts.datepickerOptions = {\n\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n\t\t\t}\n\t\t}\n\n\t\tlet defVal = pickerOpts.datepickerOptions.defaultValue ?? value;\n\t\tpickerOpts.datepickerOptions.defaultDate = typeof defVal === 'function' ? defVal(obj) : defVal;\n\n\t\t// todo: support datepicker collections\n\t\tthis.inputs.all[attribute] = this.inputs.datePickers[attribute] = {\n\t\t\tinput: new PJQ.inputs.Datepicker(pickerOpts)\n\t\t};\n\t}\n\n\trenderButtonGroup($el, attribute, opts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null;\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet optChange = opts?.onChange;\n\t\tthis.inputs.all[attribute] = this.inputs.buttonGroups[attribute] = {\n\t\t\tinput: new PJQ.inputs.ButtonGroup(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tdefaultValue: opts.defaultValue ?? value,\n\t\t\t\tbuttons: typeof opts.buttons === 'function' ? opts.buttons(obj) : opts.buttons,\n\t\t\t\tcanEdit: opts.canEdit != null ? opts.canEdit : (this.options.canEdit ?? true),\n\t\t\t\tonChange: (value) => {\n\t\t\t\t\tthis.onChange($el, attribute, value);\n\n\t\t\t\t\tif (typeof optChange === 'function') {\n\t\t\t\t\t\toptChange(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, opts))\n\t\t};\n\t}\n\n\trenderFileUploader($el, attribute, opts) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\t// first try to get a collection object inside the model (not the attributes)\n\t\tlet value = obj[attribute],\n\t\t\tobjectType = PJQ.helpers.objectHelpers.refinedType(value, true),\n\t\t\tcollection = null;\n\t\tif (value == null) {\n\t\t\tif (typeof obj.get === 'function') {\n\t\t\t\tvalue = obj.get(attribute);\n\t\t\t} else {\n\t\t\t\tvalue = obj[attribute];\n\t\t\t}\n\t\t} else if (objectType === 'backboneCollection') {\n\t\t\tcollection = value;\n\t\t}\n\n\t\tlet optSuccess = opts.onSuccess,\n\t\t\toptDelete = opts.onDelete;\n\t\tthis.inputs.all[attribute] = this.inputs.fileUploaders[attribute] = {\n\t\t\tinput: new PJQ.views.files.FileUploaderGrid(_.defaults({\n\t\t\t\tel: $el,\n\t\t\t\tcollection: collection,\n\t\t\t\tcanUpload: opts.canUpload != null ? opts.canUpload : (this.options.canEdit ?? true),\n\t\t\t\tcanDelete: opts.canDelete != null ? opts.canDelete : (this.options.canEdit ?? true),\n\t\t\t\tonSuccess: this.isBackboneObj ? () => {\n\t\t\t\t\tobj.isDirty = true;\n\n\t\t\t\t\tif (typeof optSuccess === 'function') {\n\t\t\t\t\t\toptSuccess(value);\n\t\t\t\t\t}\n\t\t\t\t} : null,\n\t\t\t\tonDelete: (attachment, callback) => {\n\t\t\t\t\tif (attachment.id > 0) {\n\t\t\t\t\t\tattachment.set('delete', true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattachment.destroy();\n\t\t\t\t\t}\n\n\t\t\t\t\tobj.isDirty = true;\n\n\t\t\t\t\tif (typeof optDelete === 'function') {\n\t\t\t\t\t\toptDelete(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}, opts))\n\t\t};\n\t}\n\n\tgetAttributeElement(attr) {\n\t\treturn this.$outer.find('[' + this.options.attribute + '=\"' + attr + '\"]');\n\t}\n\n\tgetArrayObjectForElement($el) {\n\t\tlet id = $el.closest(_.size(this.options.modelSelector) > 0 ? this.options.modelSelector : 'tr').attr(this.options.modelSelectorAttribute);\n\t\tif (_.size(id) <= 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn _.find(this.obj, function (obj) {\n\t\t\treturn obj[this.options.idAttribute] === id;\n\t\t}, this);\n\t}\n\n\tsetValue(attribute, value, changedObj, $el = null, updateElement = true) {\n\t\tif (_.size(attribute) === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if there is a contact selector associated with this\n\t\t// then we need to update the contacts collection/model at the root of the object\n\t\tlet input = this.getInputObj(attribute);\n\t\tif (this.isArray) {\n\t\t\tif (!changedObj) {\n\t\t\t\tif (_.size($el) === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchangedObj = this.getArrayObjectForElement($el);\n\t\t\t}\n\n\t\t\tif (changedObj == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof changedObj.set === 'function') {\n\t\t\t\tchangedObj.set(attribute, value);\n\t\t\t} else {\n\t\t\t\tchangedObj[attribute] = value;\n\t\t\t}\n\t\t} else if (input != null && typeof input.setValue === 'function') {\n\t\t\tinput.setValue(value);\n\t\t} else if (this.isBackboneObj) {\n\t\t\tthis.obj.set(attribute, value);\n\t\t} else {\n\t\t\tthis.obj[attribute] = value;\n\t\t}\n\n\t\tif (updateElement) {\n\t\t\tif (_.size($el) === 0) {\n\t\t\t\t$el = this.getAttributeElement(attribute);\n\t\t\t}\n\n\t\t\tif (input != null) {\n\t\t\t\t// todo: update input if not null\n\t\t\t} else if (_.size($el) > 0) {\n\t\t\t\tthis.setElementValue($el);\n\t\t\t}\n\t\t}\n\t}\n\n\tsetElementValue($el) {\n\t\tlet obj = this.obj;\n\t\tif (this.isArray) {\n\t\t\tobj = this.getArrayObjectForElement($el);\n\t\t}\n\n\t\tif (obj == null)\n\t\t\treturn;\n\n\t\tlet value = null,\n\t\t\tattribute = this.getElementAttribute($el);\n\t\tif (typeof obj.get === 'function') {\n\t\t\tvalue = obj.get(attribute);\n\t\t} else {\n\t\t\tvalue = obj[attribute];\n\t\t}\n\n\t\tlet elType = this.getElementType($el);\n\t\tif (elType === 'bool') {\n\t\t\tlet opposite = $el.data('pBindOpposite') === true;\n\t\t\tvalue = opposite ? value === false : value;\n\t\t}\n\n\t\tif (value != null) {\n\t\t\tswitch (this.getElementType($el)) {\n\t\t\t\tcase 'text':\n\t\t\t\tcase 'number':\n\t\t\t\t\t$el.val(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'percent':\n\t\t\t\t\t$el.val(PJQ.helpers.formatHelpers.formatPercent(this.options.useDecimalPercentFields === true ? value : value / 100));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bool':\n\t\t\t\t\t$el.prop('checked', value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'phone':\n\t\t\t\t\t$el.val(PJQ.helpers.formatHelpers.formatPhoneNumber(value));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'decimal':\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'select':\n\t\t\t\t\t// this is handled in the selectpicker when it is initialized\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\tcase 'datetime':\n\t\t\t\tcase 'time':\n\t\t\t\t\t// this is handled in the datetimepicker when it is initialized\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'money':\n\t\t\t\t\t$el.val(PJQ.helpers.formatHelpers.formatCurrency(value, 2));\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\thandleChange($el) {\n\t\tlet attribute = this.getElementAttribute($el),\n\t\t\tself = this;\n\t\tif (_.size(attribute) > 0) {\n\t\t\tswitch (this.getElementType($el)) {\n\t\t\t\tcase 'text':\n\t\t\t\t\tself.onChange($el, attribute, $el.val());\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'decimal':\n\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getMoneyInputValue($el) / 100);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'number':\n\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getNumberInputValue($el));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'percent':\n\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getPercentInputValue($el, self.options.useDecimalPercentFields === true));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'phone':\n\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getPhoneInputValue($el));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'money':\n\t\t\t\t\tself.onChange($el, attribute, PJQ.helpers.inputHelpers.getMoneyInputValue($el.parent()));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'hours':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'time':\n\t\t\t\t\t//todo: Support date input (dates use another prototype - attempt to attach this prototype to the element somehow\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\tcase 'datetime':\n\t\t\t\t\t// date/datetime is handled by the datepicker\n\t\t\t\t\t// this should never be hit\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'select':\n\t\t\t\t\t// select is ideally handled by defining an input so the binder initializes the selectpicker\n\t\t\t\t\t// if select is provided in the watchElements, then we can handle it here\n\t\t\t\t\tlet picker = $el.data('selectpicker'),\n\t\t\t\t\t\tvalue = picker != null ? picker.getValue() : $el.val();\n\t\t\t\t\tself.onChange($el, attribute, value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bool':\n\t\t\t\t\tlet opposite = $el.data('pBindOpposite') === true,\n\t\t\t\t\t\tval = $el.prop('checked');\n\t\t\t\t\tself.onChange($el, attribute, opposite ? !val : val);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElementAttribute($el) {\n\t\treturn $el.attr(this.options.attribute);\n\t}\n\n\tgetElementType($el) {\n\t\tif ($el.is('input')) {\n\t\t\tif ($el.hasClass('input-dollars-full') || $el.hasClass('input-dollars') || $el.hasClass('input-cents')) {\n\t\t\t\treturn 'money';\n\t\t\t} else if ($el.hasClass('input-phone')) {\n\t\t\t\treturn 'phone';\n\t\t\t} else if ($el.hasClass('input-percent')) {\n\t\t\t\treturn 'percent';\n\t\t\t} else if ($el.hasClass('input-numeric')) {\n\t\t\t\treturn 'number';\n\t\t\t} else if ($el.hasClass('input-decimal')) {\n\t\t\t\treturn 'decimal';\n\t\t\t} else if ($el.hasClass('input-time')) {\n\t\t\t\treturn 'time';\n\t\t\t} else if ($el.hasClass('input-hours')) {\n\t\t\t\treturn 'hours';\n\t\t\t} else if ($el.attr('type') === 'checkbox') {\n\t\t\t\treturn 'bool';\n\t\t\t} else if ($el.data('DateTimePicker') != null || $el.hasClass('input-date')) {\n\t\t\t\treturn 'date';\n\t\t\t} else {\n\t\t\t\treturn 'text';\n\t\t\t}\n\t\t} else if ($el.is('textarea')) {\n\t\t\treturn 'text';\n\t\t} else if ($el.is('select')) {\n\t\t\treturn 'select';\n\t\t}\n\t}\n\n\tonChange($el, attribute, value) {\n\t\tif (attribute.length > 0) {\n\t\t\tlet attrListener = this.attributeListeners[attribute],\n\t\t\t\tchangedObj = this.obj;\n\t\t\tif (this.isArray) {\n\t\t\t\tchangedObj = this.getArrayObjectForElement($el);\n\t\t\t}\n\n\t\t\tif (typeof attrListener?.onChange === 'function') {\n\t\t\t\tattrListener.onChange($el, attribute, value, changedObj);\n\t\t\t} else if (typeof this.options.onChange === 'function') {\n\t\t\t\tthis.options.onChange($el, attribute, value, changedObj);\n\t\t\t} else {\n\t\t\t\tthis.setValue(attribute, value, changedObj, $el, false);\n\t\t\t}\n\n\t\t\tif (typeof this.options.afterChange === 'function') {\n\t\t\t\tthis.options.afterChange($el, attribute, value, changedObj);\n\t\t\t}\n\t\t\tif (typeof attrListener?.afterChange === 'function') {\n\t\t\t\tattrListener.afterChange($el, value, changedObj);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetValidator(attribute) {\n\t\tlet inputOpts = this.options.inputs != null ? this.options.inputs[attribute] : null,\n\t\t\tvalidator = null;\n\t\tif (inputOpts != null) {\n\t\t\tvalidator = inputOpts.validator;\n\n\t\t\tif (validator == null) {\n\t\t\t\tvalidator = {\n\t\t\t\t\tfunc: inputOpts.validate ?? null\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (this.options.validators != null) {\n\t\t\tvalidator = this.options.validators[attribute];\n\t\t}\n\n\t\treturn validator ?? null;\n\t}\n\n\tvalidate(options = {showInputErrors: true}) {\n\t\tlet self = this,\n\t\t\tresult = {\n\t\t\t\tisValid: true,\n\t\t\t\tvalidAttributes: [],\n\t\t\t\tinvalidAttributes: [],\n\t\t\t\terrors: []\n\t\t\t};\n\t\tif (this.isArray) {\n\t\t\t// add if needed\n\t\t} else {\n\t\t\t_.each(this.requiredAttributes, (attr) => {\n\t\t\t\tlet validator = this.getValidator(attr),\n\t\t\t\t\tvalue = this.isBackboneObj ? this.obj.get(attr) : self.obj[attr],\n\t\t\t\t\tisValid = true,\n\t\t\t\t\t$el = null;\n\t\t\t\tif (typeof validator?.func === 'function') {\n\t\t\t\t\tlet validatorRes = validator.func(value, this.obj);\n\t\t\t\t\tif (typeof validatorRes === 'boolean') {\n\t\t\t\t\t\tisValid = validatorRes;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisValid = validatorRes?.isValid ?? false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_.size(validatorRes?.errors) > 0) {\n\t\t\t\t\t\tresult.errors.push(...validatorRes.errors);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$el = self.getAttributeElement(attr);\n\n\t\t\t\t\t// todo: allow rules to be passed in rather than always needing a function validator\n\t\t\t\t\tlet rules = validator?.rules ?? [],\n\t\t\t\t\t\telType = self.getElementType($el);\n\t\t\t\t\tswitch (elType) {\n\t\t\t\t\t\tcase 'text':\n\t\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\t\tisValid = _.size(value) > 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'select':\n\t\t\t\t\t\t\tlet picker = $el.data('selectpickerview');\n\t\t\t\t\t\t\tif (picker && value != null) {\n\t\t\t\t\t\t\t\t// it is valid if we find at least 1 matching choice\n\t\t\t\t\t\t\t\tlet isArr = _.isArray(value);\n\t\t\t\t\t\t\t\tisValid = null != _.find(picker.options.choices, (choice) => {\n\t\t\t\t\t\t\t\t\treturn isArr ? _.contains(value, choice.id) : choice.id === value;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tisValid = typeof value === 'number' || _.size(value) > 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tisValid = value != null;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isValid) {\n\t\t\t\t\tresult.validAttributes.push(attr);\n\t\t\t\t} else {\n\t\t\t\t\tresult.invalidAttributes.push(attr);\n\t\t\t\t}\n\n\t\t\t\tif (options.showInputErrors !== false) {\n\t\t\t\t\tif ($el == null) {\n\t\t\t\t\t\t$el = self.getAttributeElement(attr);\n\t\t\t\t\t}\n\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError($el, isValid);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tresult.isValid = _.size(result.invalidAttributes) === 0;\n\t\treturn result;\n\t}\n}","if (PJQ.app.module === PJQ.constants.modules.APP) {\n\tPJQ.modules.calendar = {\n\t\troutes: [\n\t\t\t{\n\t\t\t\troute: 'calendar',\n\t\t\t\tname: 'calendar',\n\t\t\t\tcallback: function () {\n\t\t\t\t\tPJQ.app.initNavigator({\n\t\t\t\t\t\tactiveItem: \"calendar\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t};\n\tPJQ.app.addRoutes(PJQ.modules.calendar.routes);\n}\n\nPJQ.views.calendars = {};\n\nPJQ.views.calendars.MiniCalendar = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\tdatepickerOptions: {\n\t\t\tinline: true,\n\t\t\tdefaultDate: new Date(),\n\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE,\n\t\t\tisDaysOnly: true,\n\t\t\ticons: {\n\t\t\t\ttime: 'fal fa-clock',\n\t\t\t\tdate: 'fal fa-calendar-alt',\n\t\t\t\tup: 'fal fa-chevron-up',\n\t\t\t\tdown: 'fal fa-chevron-down',\n\t\t\t\tprevious: 'fal fa-chevron-left',\n\t\t\t\tnext: 'fal fa-chevron-right',\n\t\t\t\ttoday: 'fal fa-crosshairs',\n\t\t\t\tclear: 'fal fa-trash',\n\t\t\t\tclose: 'fal fa-times'\n\t\t\t}\n\t\t},\n\t\tonChange: _.noop,\n\t\tdateRangeChanged: _.noop\n\t},\n\tevents: {\n\t\t\"dp.change\": \"onChange\",\n\t\t\"dp.update\": \"onUpdate\"\n\t},\n\tbeforeInit: function (options) {\n\t\tthis.$el.addClass('mini-calendar');\n\n\t\tif (options.datepickerOptions != null) {\n\t\t\tthis.options.datepickerOptions = _.defaults(options.datepickerOptions ? options.datepickerOptions : {}, this.defaults.datepickerOptions);\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (PJQ.helpers.objectHelpers.refinedType(this.options.datepickerOptions.defaultDate) === 'date') {\n\t\t\tthis.lastSelectedDate = this.options.datepickerOptions.defaultDate;\n\t\t}\n\t\tthis.$el.datetimepicker(this.options.datepickerOptions);\n\t\tthis.onUpdate();\n\t},\n\tonChange: function (e) {\n\t\tthis.onUpdate();\n\t\tif (this.lastSelectedDate == null || PJQ.helpers.dateHelpers.getDateDaysDiff(e.date._d, this.lastSelectedDate) !== 0) {\n\t\t\te.date._d.setHours(0, 0, 0, 0);\n\t\t\tthis.lastSelectedDate = e.date._d;\n\t\t\tthis.options.onChange(typeof e.date._d === 'undefined' ? null : e.date._d);\n\t\t\tthis.renderStatusMarkers();\n\t\t}\n\t},\n\tupdateStatusMarker: function (newStatusDate) {\n\t\tif (this.statusDates != null) {\n\t\t\tthis.statusDates = _.filter(this.statusDates, function (statusDate) {\n\t\t\t\treturn PJQ.helpers.dateHelpers.getDateDaysDiff(newStatusDate.date, statusDate.date) !== 0;\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.statusDates = [];\n\t\t}\n\t\tthis.statusDates.push(newStatusDate);\n\t\tthis.renderStatusMarker(newStatusDate);\n\t},\n\trenderStatusMarkers: function (dates) {\n\t\tif (dates != null) {\n\t\t\tthis.statusDates = dates;\n\t\t}\n\t\t//this.$('.status-marker').remove();\n\t\t_.each(this.statusDates, function (dayObj) {\n\t\t\tthis.renderStatusMarker(dayObj)\n\t\t}, this);\n\t},\n\trenderStatusMarker: function (statusDate) {\n\t\tlet dateString = PJQ.helpers.dateHelpers.getDateString(statusDate.date, 'MM/dd/yyyy'),\n\t\t\t$dayContainer = this.$('.day[data-day=\"' + dateString + '\"]');\n\t\tif ($dayContainer.hasClass('active')) {\n\t\t\t$dayContainer.css('background-color', statusDate.color);\n\t\t}\n\t\tif(statusDate.textColor != null) {\n\t\t\t$dayContainer.css('color', statusDate.textColor);\n\t\t}\n\t\tlet $existingMarker = $dayContainer.find('.status-marker');\n\t\tif (_.size($existingMarker) > 0) {\n\t\t\t$existingMarker.remove();\n\t\t}\n\t\tif (statusDate.color != null) {\n\t\t\tlet textColor = ''\n\t\t\tif(statusDate.textColor != null) {\n\t\t\t\ttextColor = 'color: ' + statusDate.textColor + ';';\n\t\t\t}\n\t\t\tlet $newMarker = $('<span>', {\n\t\t\t\tclass: 'status-marker',\n\t\t\t\tstyle: 'background-color: ' + statusDate.color + ';' + textColor\n\t\t\t});\n\t\t\t$newMarker.on('click', function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t$(e.currentTarget).closest('td').trigger('click');\n\t\t\t});\n\t\t\t$dayContainer.append($newMarker);\n\t\t}\n\t},\n\tonUpdate: function () {\n\t\tlet currentDateRange = this.getCurrentDateRange(),\n\t\t\ttoString = function (date) {\n\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(date, 'MM/dd/yyyy');\n\t\t\t};\n\t\tif (currentDateRange != null && (this.lastDateRange == null || (toString(currentDateRange.start) !== toString(this.lastDateRange.start) || toString(currentDateRange.end) !== toString(this.lastDateRange.end)))) {\n\t\t\tthis.lastDateRange = currentDateRange;\n\t\t\tthis.options.dateRangeChanged(currentDateRange);\n\t\t}\n\t},\n\tgetCurrentDateRange: function () {\n\t\tlet $startDayEl = this.$('.datepicker-days').find('td.day').first(),\n\t\t\t$endDayEl = this.$('.datepicker-days').find('td.day').last();\n\t\tif (_.size($startDayEl) === 0 || _.size($endDayEl) === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tstart: new Date($startDayEl.data('day')),\n\t\t\tend: new Date($endDayEl.data('day'))\n\t\t};\n\t},\n\tsetDate: function (date) {\n\t\tthis.lastSelectedDate = date;\n\t\tthis.$el.data(\"DateTimePicker\").date(date);\n\t\tthis.renderStatusMarkers();\n\t\tthis.onUpdate();\n\t}\n});\n\nPJQ.views.calendars.FullCalendar = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Calendar-Base'),\n\t\tsubTemplates: {\n\t\t\ttaskTooltip: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Task-Tooltip')\n\t\t},\n\t\tcanEdit: true,\n\t\tcanDelete: true,\n\t\tonTaskEdit: null,\n\t\tonTaskDelete: null,\n\t\tfetchTasks: null\n\t},\n\tevents: {\n\t\t'click .btn-edit-task': 'editTaskClicked',\n\t\t'click .btn-delete-task': 'deleteTaskClicked',\n\t\t'click .btn-close-tooltip': 'closeEventTooltip',\n\t\t'contextmenu .fc-day-grid-event': 'eventRightClicked'\n\t},\n\tafterRender: function () {\n\t\tthis.initCalendar();\n\t},\n\tinitCalendar: function () {\n\t\tlet fnParseTasks = function (tasks) {\n\t\t\treturn _.map(tasks, function (task) {\n\t\t\t\treturn _.defaults({\n\t\t\t\t\textendedProps: {\n\t\t\t\t\t\tmodel: task.model ? task.model : task,\n\t\t\t\t\t\tprogress: task.get('progress') != null ? task.get('progress') : task\n\t\t\t\t\t},\n\t\t\t\t\ttitle: task.get('isMilestone') ? ('<span class=\"far fa-flag mr-1\"></span>' + task.get('title')) : task.get('title'),\n\t\t\t\t}, task.attributes);\n\t\t\t});\n\t\t};\n\n\t\tthis.calendar = new FullCalendar.Calendar(this.$('.calendar-outer')[0], _.defaults(this.options, {\n\t\t\theight: 'parent',\n\t\t\tplugins: ['dayGrid', 'bootstrap'],\n\t\t\tthemeSystem: 'bootstrap',\n\t\t\tdefaultView: 'dayGridMonth',\n\t\t\ttimezone: 'local',\n\t\t\theader: {\n\t\t\t\tleft: '',\n\t\t\t\tcenter: 'title',\n\t\t\t\tright: 'today prev,next'\n\t\t\t},\n\t\t\tevents: typeof this.options.fetchTasks === 'function' ? _.bind(function (filter, callback) {\n\t\t\t\tthis.options.fetchTasks(filter, _.bind(function (res) {\n\t\t\t\t\tthis.collection = res;\n\t\t\t\t\tcallback(fnParseTasks(this.collection.models));\n\t\t\t\t}, this));\n\t\t\t}, this) : fnParseTasks(this.collection.models),\n\t\t\teventRender: _.bind(this.eventRender, this)\n\t\t}));\n\t\tthis.calendar.render();\n\t},\n\teventRightClicked: function (e) {\n\t\t$(e.currentTarget).trigger('click');\n\t\te.preventDefault();\n\t},\n\teventRender: function (info) {\n\t\tthis.addEventTooltip(info);\n\n\t\tlet $ev = $(info.el);\n\t\t$ev.addClass('schedule-event');\n\t\tif (info.event.id != null) {\n\t\t\t$ev.attr('data-id', info.event.id);\n\t\t\t$ev.attr('title', info.event.title);\n\n\t\t\tif (typeof this.options.onTaskEdit === 'function') {\n\t\t\t\t$ev.bind('dblclick', _.bind(function () {\n\t\t\t\t\tthis.options.onTaskEdit(this.getTask(info.event.id));\n\t\t\t\t}, this));\n\t\t\t}\n\t\t}\n\t},\n\taddEventTooltip: function (info) {\n\t\tthis.tooltip = new PJQ.Tooltip($(info.el), {\n\t\t\ttemplate: this.options.subTemplates.taskTooltip,\n\t\t\tcontainer: this.$el,\n\t\t\ttrigger: 'click',\n\t\t\trenderData: _.bind(function () {\n\t\t\t\treturn {\n\t\t\t\t\tmodel: info.event.extendedProps.model,\n\t\t\t\t\tschedule: this.options.schedule,\n\t\t\t\t};\n\t\t\t}, this)\n\t\t});\n\t},\n\tgetTask: function (taskId) {\n\t\tlet calTask = this.collection.get(taskId);\n\t\treturn calTask.model ? calTask.model : calTask;\n\t},\n\teditTaskClicked: function (e) {\n\t\tlet taskId = $(e.currentTarget).closest('.task-popup').data('taskId');\n\t\tthis.editTask(this.getTask(taskId));\n\t},\n\teditTask: function (task) {\n\t\tif (typeof this.options.onTaskEdit === 'function') {\n\t\t\tthis.options.onTaskEdit(task);\n\t\t}\n\t},\n\tdeleteTaskClicked: function (e) {\n\t\tlet taskId = $(e.currentTarget).closest('.task-popup').data('taskId');\n\t\tthis.deleteTask(this.getTask(taskId));\n\t},\n\tdeleteTask: function (task) {\n\t\tif (typeof this.options.onTaskDelete === 'function') {\n\t\t\tthis.options.onTaskDelete(task);\n\t\t}\n\t},\n\tcloseEventTooltip: function () {\n\t\tif (this.tooltip != null) {\n\t\t\tthis.tooltip.remove();\n\t\t\tthis.tooltip = null;\n\t\t}\n\t}\n});\n\nPJQ.views.calendars.SystemCalendar = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'System-Calendar')\n\t},\n\tevents: {\n\t\t'click .btn-add-task': 'addTaskClicked',\n\t\t'click .btn-add-milestone': 'addMilestoneClicked',\n\t\t'click .btn-export': 'exportCalendar',\n\t\t'click .btn-calendar-settings': 'editSettings'\n\t},\n\tbeforeFirstRender: function () {\n\t\tPJQ.app.session.fetchProjectCustomFields(null, _.bind(function (customFields) {\n\t\t\tthis.projectCustomFields = customFields;\n\t\t\tPJQ.app.session.fetchScheduleStatuses(_.bind(function (statuses) {\n\t\t\t\tthis.taskStatuses = statuses;\n\t\t\t\tPJQ.app.session.fetchCalendarSettings(_.bind(function (stResult) {\n\t\t\t\t\tthis.settings = stResult;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this));\n\t\t\t}, this));\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tsettings: this.settings\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.settings != null) {\n\t\t\tthis.calendar = new PJQ.views.calendars.FullCalendar({\n\t\t\t\tel: this.$('.system-calendar'),\n\t\t\t\tfetchTasks: _.bind(this.fetchTasks, this),\n\t\t\t\tonTaskEdit: _.bind(function (task) {\n\t\t\t\t\tthis.editTask(task);\n\t\t\t\t}, this),\n\t\t\t\tonTaskDelete: _.bind(function (task) {\n\t\t\t\t\tthis.deleteTaskClicked(task);\n\t\t\t\t}, this),\n\t\t\t\tcanDelete: false\n\t\t\t});\n\t\t}\n\t},\n\tfetchTasks: function (filter, callback) {\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'calendar'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'start',\n\t\t\t\tvalue: PJQ.helpers.dateHelpers.getDateString(new Date(filter.start), 'yyyy-MM-dd')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'finish',\n\t\t\t\tvalue: PJQ.helpers.dateHelpers.getDateString(new Date(filter.end), 'yyyy-MM-dd')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'bidsDue',\n\t\t\t\tvalue: this.settings.get('bidsDueFilter')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'startFinish',\n\t\t\t\tvalue: this.settings.get('startFinishFilter')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'tasks',\n\t\t\t\tvalue: this.settings.get('scheduleTasksFilter')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'cfProjects',\n\t\t\t\tvalue: this.settings.get('customFieldProjectsFilter')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'cfFilter',\n\t\t\t\tvalue: this.settings.get('customFieldIdsFilter')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'cfDisplay',\n\t\t\t\tvalue: this.settings.get('customFieldIdsDisplay')\n\t\t\t},\n\t\t\t{\n\t\t\t\tparameter: 'statusFilter',\n\t\t\t\tvalue: this.settings.get('projectStatusFilter')\n\t\t\t}\n\t\t]);\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpoint\n\t\t}).get().done(_.bind(function (response) {\n\t\t\tthis.collection = new PJQ.collections.calendars.CalendarTasks();\n\n\t\t\tlet sysTasks = new PJQ.collections.schedule.Tasks(response.tasks);\n\t\t\t_.each(sysTasks.models, function (sysTask) {\n\t\t\t\tlet status = this.taskStatuses.get(sysTask.get('statusId'));\n\t\t\t\tif (status == null) {\n\t\t\t\t\tstatus = this.taskStatuses.getDefault();\n\t\t\t\t}\n\t\t\t\tsysTask.status = status;\n\n\t\t\t\tlet calTask = sysTask.getCalendarTask(),\n\t\t\t\t\ttaskName = sysTask.get('userId') > 0 ? sysTask.get('name') : sysTask.get('name') + ' - ' + sysTask.get('projectName');\n\t\t\t\tcalTask.set('title', taskName);\n\t\t\t\tthis.collection.add(calTask);\n\t\t\t}, this);\n\n\t\t\t_.each(response.events, function (task) {\n\t\t\t\tlet taskName = task.name + ' - ' + task.projectName;\n\t\t\t\tif (_.size(this.settings.get('customFieldIdsDisplay')) > 0) {\n\t\t\t\t\t_.each(this.settings.get('customFieldIdsDisplay'), function (cfId) {\n\t\t\t\t\t\tlet cfValueMatch = _.find(task.customFields, function (cf) {\n\t\t\t\t\t\t\treturn cf.id === cfId;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (cfValueMatch != null) {\n\t\t\t\t\t\t\tlet cfMatch = this.projectCustomFields.get(cfId);\n\t\t\t\t\t\t\tif (cfMatch != null) {\n\t\t\t\t\t\t\t\tlet cfValue = '';\n\t\t\t\t\t\t\t\tif (cfMatch.get('fieldType') === 'DATE') {\n\t\t\t\t\t\t\t\t\tif (_.size(cfValueMatch.value) > 0) {\n\t\t\t\t\t\t\t\t\t\tcfValue = PJQ.helpers.dateHelpers.getDateString(new Date(cfValueMatch.value), 'MM-dd-yyyy', true);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcfValue = 'Not set';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttaskName += '<br /><strong>' + cfMatch.get('fieldName') + \"</strong>: \" + cfValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (cfMatch.get('fieldType') === 'DATETIME') {\n\t\t\t\t\t\t\t\t\tif (_.size(cfValueMatch.value) > 0) {\n\t\t\t\t\t\t\t\t\t\tcfValue = PJQ.helpers.dateHelpers.getDateString(new Date(cfValueMatch.value), 'MM-dd-yyyy hh:mm:ss');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tcfValue = 'Not set';\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttaskName += '<br /><strong>' + cfMatch.get('fieldName') + \"</strong>: \" + cfValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (_.size(cfValueMatch.value) > 0) {\n\t\t\t\t\t\t\t\t\t\tcfValue = cfValueMatch.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttaskName += '<br /><strong>' + cfMatch.get('fieldName') + \"</strong>: \" + cfValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this);\n\t\t\t\t}\n\n\t\t\t\tlet finish = PJQ.helpers.dateHelpers.parseDateString(task.finish ? task.finish : task.start, !task.isAllDay),\n\t\t\t\t\tevent = new PJQ.models.calendars.CalendarTask({\n\t\t\t\t\t\tid: -_.uniqueId(),\n\t\t\t\t\t\tname: task.name,\n\t\t\t\t\t\tprojectId: task.projectId,\n\t\t\t\t\t\tprojectName: task.projectName,\n\t\t\t\t\t\ttitle: taskName,\n\t\t\t\t\t\tstart: PJQ.helpers.dateHelpers.parseDateString(task.start, !task.isAllDay),\n\t\t\t\t\t\tfinish: task.finish ? finish : null,\n\t\t\t\t\t\tend: finish,\n\t\t\t\t\t\tallDay: task.isAllDay,\n\t\t\t\t\t\tisAllDay: task.isAllDay,\n\t\t\t\t\t\tbackgroundColor: task.color != null ? task.color + ' !important' : '#5E35B1 !important',\n\t\t\t\t\t\tborderColor: task.color != null ? task.color + ' !important' : '#5E35B1 !important'\n\t\t\t\t\t});\n\t\t\t\tthis.collection.add(event);\n\t\t\t}, this);\n\t\t\tcallback(this.collection);\n\t\t}, this));\n\t},\n\taddTaskClicked: function () {\n\t\tlet newTask = new PJQ.models.schedule.Task({\n\t\t\tname: \"\",\n\t\t\tduration: 1,\n\t\t\tstart: null,\n\t\t\tfinish: null,\n\t\t\tweekendWork: false,\n\t\t\tisAllDay: true,\n\t\t\tisMilestone: false,\n\t\t\tpercentComplete: 0,\n\t\t\tnotes: \"\",\n\t\t\tstatus: this.taskStatuses.getDefault()\n\t\t});\n\t\tthis.editTask(newTask);\n\t},\n\taddMilestoneClicked: function () {\n\t\tlet newTask = new PJQ.models.schedule.Task({\n\t\t\tname: \"\",\n\t\t\tduration: 1,\n\t\t\tstart: null,\n\t\t\tfinish: null,\n\t\t\tweekendWork: false,\n\t\t\tisAllDay: true,\n\t\t\tisMilestone: true,\n\t\t\tpercentComplete: 0,\n\t\t\tnotes: \"\",\n\t\t\tstatus: this.taskStatuses.getDefault()\n\t\t});\n\t\tthis.editTask(newTask);\n\t},\n\teditTask: function (task) {\n\t\tif (task.id > 0 || task.isNew()) {\n\t\t\t// if this is a new task, global calendar task, or project task in the context of a project schedule then we can edit it here\n\t\t\tif (this.model != null || task.isNew() || task.get('projectId') == null) {\n\t\t\t\tif (!task.isNew()) {\n\t\t\t\t\ttask.fetch({\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tnew PJQ.views.schedule.EditTaskModal({\n\t\t\t\t\t\t\t\tschedule: this.model,\n\t\t\t\t\t\t\t\tmodel: task,\n\t\t\t\t\t\t\t\tstatuses: this.taskStatuses,\n\t\t\t\t\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\t\t\t\t\tthis.render()\n\t\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\t\tonDelete: _.bind(function () {\n\t\t\t\t\t\t\t\t\tthis.deleteTask(task);\n\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnew PJQ.views.schedule.EditTaskModal({\n\t\t\t\t\t\tschedule: this.model,\n\t\t\t\t\t\tmodel: task,\n\t\t\t\t\t\tstatuses: this.taskStatuses,\n\t\t\t\t\t\tonSave: _.bind(function (task) {\n\t\t\t\t\t\t\tthis.render();\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tonDelete: _.bind(function () {\n\t\t\t\t\t\t\tthis.deleteTask(task);\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.app.router.navigate('projects/' + task.get('projectId').toString() + '/schedule/' + task.id.toString(), {\n\t\t\t\t\ttrigger: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tPJQ.app.router.navigate('projects/' + task.get('projectId').toString(), {\n\t\t\t\ttrigger: true\n\t\t\t});\n\t\t}\n\t},\n\tdeleteTaskClicked: function (task) {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: \"Are you sure you want to delete this task?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.deleteTask(task);\n\t\t\t}, this)\n\t\t});\n\t},\n\tdeleteTask: function (task) {\n\t\tthis.collection.remove(task);\n\t\ttask.destroy({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tthis.render()\n\t\t\t}, this)\n\t\t});\n\t},\n\texportCalendar: function () {\n\t\tlet loader = new PJQ.Loader(this.$('.btn-export'), {\n\t\t\ttype: 'button',\n\t\t\tloadingText: 'Exporting'\n\t\t});\n\t\tnew PJQ.models.reporting.Report({\n\t\t\tname: 'system-calendar',\n\t\t\tfileName: 'Calendar'\n\t\t}).generate({\n\t\t\thtml: this.calendar.$el.find('.calendar-outer').outerHTML()\n\t\t}, function () {\n\t\t\tloader.remove();\n\t\t});\n\t},\n\teditSettings: function () {\n\t\tnew PJQ.views.calendars.CalendarSettingsModal({\n\t\t\tmodel: this.settings,\n\t\t\tonSave: _.bind(function () {\n\t\t\t\tthis.render();\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.calendars.CalendarSettingsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Calendar-Settings'),\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t'click .btn-save': 'save'\n\t},\n\tbeforeModalCreated: function () {\n\t\tlet fnFetch = _.bind(function () {\n\t\t\tPJQ.app.session.fetchProjectCustomFields(null, _.bind(function (cfs) {\n\t\t\t\tthis.customFields = cfs\n\t\t\t\tPJQ.app.session.fetchProjectStatuses(_.bind(function (statuses) {\n\t\t\t\t\tthis.projectStatuses = statuses;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this));\n\t\t\t}, this));\n\t\t}, this);\n\t\tif (this.model == null) {\n\t\t\tPJQ.app.session.fetchCalendarSettings(_.bind(function (settings) {\n\t\t\t\tthis.model = settings;\n\t\t\t\tfnFetch();\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tfnFetch();\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tprojectStatuses: this.projectStatuses,\n\t\t\tcustomFields: _.filter(this.customFields.models, function (cf) {\n\t\t\t\tlet fieldType = cf.get('fieldType').toUpperCase();\n\t\t\t\treturn fieldType === 'TEXT' || fieldType === 'INT';\n\t\t\t}),\n\t\t\tdateCustomFields: _.filter(this.customFields.models, function (cf) {\n\t\t\t\tlet fieldType = cf.get('fieldType').toUpperCase();\n\t\t\t\treturn fieldType === 'DATE' || fieldType === 'DATETIME';\n\t\t\t})\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (typeof this.customFields !== 'undefined') {\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.bids-due-filter'),\n\t\t\t\tdefaultValue: this.model.get('bidsDueFilter'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('bidsDueFilter', value);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.start-finish-filter'),\n\t\t\t\tdefaultValue: this.model.get('startFinishFilter'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('startFinishFilter', value);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.project-tasks-filter'),\n\t\t\t\tisMultiple: true,\n\t\t\t\tdefaultValue: this.model.get('scheduleTasksFilter'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('scheduleTasksFilter', value);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_STATUS_ID)) {\n\t\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\t\tel: this.$('.project-status-filter'),\n\t\t\t\t\tdefaultValue: this.model.get('projectStatusFilter'),\n\t\t\t\t\tisMultiple: true,\n\t\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\t\tthis.model.set('projectStatusFilter', value);\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet defaultVal = {\n\t\t\t\tprojects: this.model.get('customFieldProjectsFilter'),\n\t\t\t\tfields: this.model.get('customFieldIdsFilter')\n\t\t\t};\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.custom-fields-filter'),\n\t\t\t\tdefaultValue: defaultVal,\n\t\t\t\tisGrouped: true,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('customFieldIdsFilter', value.fields ? value.fields : null);\n\t\t\t\t\tthis.model.set('customFieldProjectsFilter', value.projects ? value.projects : 'NONE');\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.custom-fields-display'),\n\t\t\t\tdefaultValue: this.model.get('customFieldIdsDisplay'),\n\t\t\t\tisMultiple: true,\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('customFieldIdsDisplay', value);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t},\n\tsave: function () {\n\t\tif (this.model.hasChanged()) {\n\t\t\tthis.model.save(null, {\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Calendar settings saved'\n\t\t\t\t\t});\n\t\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t\t}\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n\n\nPJQ.models.calendars = {};\nPJQ.models.calendars.CalendarSettings = PJQ.models.BaseModel.extend({\n\tidAttribute: 'userId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'calendar'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'settings'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.models.calendars.CalendarTask = PJQ.models.BaseModel.extend({\n\tparse: function (model) {\n\t\tif (model.model != null) {\n\t\t\tthis.model = model.model;\n\t\t}\n\n\t\treturn model;\n\t}\n});\n\nPJQ.collections.calendars = {};\nPJQ.collections.calendars.CalendarTasks = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.calendars.CalendarTask\n});\n","PJQ.charts = {\r\n colors: {\r\n RED_80: 'rgba(255, 99, 132, 0.8)',\r\n BLUE_80: 'rgba(54, 162, 235, 0.8)',\r\n YELLOW_80: 'rgba(255, 206, 86, 0.8)',\r\n GREEN_80: 'rgba(75, 192, 192, 0.8)'\r\n }\r\n};\r\n\r\nPJQ.charts.Chart = class {\r\n constructor($el, options = {}) {\r\n this.$outer = $el;\r\n this.$outer.addClass('chart-outer');\r\n this.options = _.defaults(options, {\r\n width: null,\r\n height: null,\r\n showTotal: false,\r\n onClick: _.noop\r\n });\r\n this.renderChart();\r\n }\r\n\r\n renderChart() {\r\n if (_.size(this.$el) > 0) {\r\n this.$el.remove();\r\n }\r\n if (this.options.width && this.options.height) {\r\n this.options.options = _.defaults({\r\n maintainAspectRatio: false\r\n }, this.options.options ? this.options.options : {});\r\n }\r\n this.$el = $('<canvas>', {\r\n height: this.options.height,\r\n width: this.options.width,\r\n style: 'z-index:100 !important;',\r\n });\r\n this.$outer.append(this.$el);\r\n\r\n if (this.options.type.toLowerCase() === 'doughnut' && this.options.showTotal) {\r\n let total = this.options.total;\r\n if (isNaN(total)) {\r\n total = _.reduce(this.options.data.datasets[0].data, function (memo, num) {\r\n return num + memo;\r\n }, 0)\r\n }\r\n this.$outer.append($('<span />', {\r\n class: 'chart-total text-align-center fs-40 wd-50 font-weight-light p-absolute left-25',\r\n style: 'z-index:1 !important;top:' + (this.options.height / 3).toString() + 'px;',\r\n text: total\r\n }));\r\n }\r\n\r\n this.chart = new Chart(this.$el, this.options);\r\n\r\n if (this.options.onClick != null) {\r\n this.$el.on('click', _.bind(function (e) {\r\n this.options.onClick(this.chart.getElementsAtEvent(e));\r\n }, this));\r\n }\r\n }\r\n};\r\n\r\nPJQ.views.charts = {};\r\nPJQ.views.charts.dhtmlxGantt = PJQ.views.BaseView.extend({\r\n defaults: {\r\n enableSorting: false,\r\n sortField: \"sortOrder\",\r\n sortAsc: false,\r\n onSort: null,\r\n isShowCriticalPath: false\r\n },\r\n events: {\r\n 'click .grid-toggle': 'toggleGrid'\r\n },\r\n beforeFirstRender: function () {\r\n this.collection = this.options.schedule.tasks;\r\n // Order by id by default\r\n this.currentSort = {\r\n field: this.options.sortField != null ? this.options.sortField : 'sortOrder',\r\n asc: this.options.sortAsc != null ? this.options.sortAsc : false\r\n };\r\n },\r\n afterRender: function () {\r\n this.initChart();\r\n this.renderContextMenu();\r\n },\r\n getDataObject: function () {\r\n let result = {\r\n tasks: [],\r\n links: [],\r\n minStartDate: null,\r\n maxStartDate: null,\r\n maxEndDate: null,\r\n hasTaskNearToday: false\r\n },\r\n rangeStart = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), -7),\r\n rangeEnd = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(), 7);\r\n _.each(this.collection.models, function (task) {\r\n let start = null;\r\n if (task.get('start') != null) {\r\n start = new Date(task.get('start'));\r\n if (result.minStartDate == null || start < result.minStartDate) {\r\n result.minStartDate = start;\r\n }\r\n if (result.maxStartDate == null || start > result.maxStartDate) {\r\n result.maxStartDate = start;\r\n }\r\n }\r\n\r\n let end = null;\r\n if (task.get('finish') != null) {\r\n end = new Date(task.get('finish'));\r\n if (result.maxEndDate == null || end > result.maxEndDate) {\r\n result.maxEndDate = end;\r\n }\r\n }\r\n\r\n result.hasTaskNearToday = result.hasTaskNearToday\r\n || (start != null && end != null && PJQ.helpers.dateHelpers.checkDateRangesOverlap(rangeStart, rangeEnd, start, end))\r\n || (start != null && PJQ.helpers.dateHelpers.checkDateBetweenDays(rangeStart, rangeEnd, start))\r\n || (end != null && PJQ.helpers.dateHelpers.checkDateBetweenDays(rangeStart, rangeEnd, end));\r\n\r\n if (task instanceof PJQ.models.schedule.Task) {\r\n let color = task.get('isMilestone') ? '#43A047' : task.status ? task.status.get('color') : '#0b7bc1'\r\n let taskObj = {\r\n text: task.get('name'),\r\n start_date: task.get('start') ? task.get('start') : result.maxStartDate,\r\n duration: task.get('isMilestone') ? 1 : task.get('duration'),\r\n id: task.get('taskId'),\r\n type: task.get('isMilestone') ? 'milestone' : (task.get('isSummaryTask') ? 'project' : 'task'),\r\n progress: (task.get('percentComplete') / 100),\r\n parent: task.get('summaryTaskId') && task.get('summaryTaskId') !== task.get('taskId') ? task.get('summaryTaskId') : task.get('parentTaskId'),\r\n calendar_id: task.get('weekendWork') ? \"weekend_work\" : null,\r\n details: task.get('notes'),\r\n bar_height: task.get('isSummaryTask') ? 18 : null,\r\n unscheduled: task.get('start') == null && !task.get('isSummaryTask'),\r\n color: color,\r\n textColor: PJQ.helpers.colorHelpers.idealLinkColorForBackground(color),\r\n listTextColor: color,\r\n sortOrder: task.get('sortOrder')\r\n }\r\n result.tasks.push(taskObj);\r\n }\r\n }, this);\r\n\r\n _.each(this.options.schedule.dependencies.models, function (dependency) {\r\n if (!dependency.get('isDeleted')) {\r\n let linkObj = {\r\n id: dependency.get('dependencyId'),\r\n target: dependency.get('taskId'),\r\n source: dependency.get('dependTaskId'),\r\n type: Object.keys(PJQ.constants.schedule.linkTypes).find(key => PJQ.constants.schedule.linkTypes[key] === dependency.get('type')),\r\n lag: dependency.get('offset')\r\n }\r\n\r\n result.links.push(linkObj);\r\n }\r\n }, this);\r\n\r\n return result;\r\n },\r\n startInlineEdit: function (taskId, column = 'text') {\r\n if (!(taskId > 0)) {\r\n return;\r\n }\r\n\r\n this.gantt.ext.inlineEditors.startEdit(taskId, column ?? 'text');\r\n },\r\n initChart: function () {\r\n if (this.gantt) {\r\n this.gantt.destructor();\r\n }\r\n\r\n let gantt = Gantt.getGanttInstance();\r\n this.gantt = gantt;\r\n\r\n // Clear all tasks to prevent persistence between projects\r\n gantt.clearAll();\r\n\r\n gantt.templates.scale_cell_class = (date) => {\r\n\r\n\r\n if (date.getDay() === 0 || date.getDay() === 6) {\r\n return \"weekend-highlight\";\r\n }\r\n };\r\n gantt.templates.timeline_cell_class = (task, date) => {\r\n // let taskModel = this.collection.get(task.id);\r\n // if (taskModel != null && taskModel.get('weekendWork')) {\r\n // return;\r\n // }\r\n\r\n if (date.getDay() === 0 || date.getDay() === 6) {\r\n return \"weekend-highlight\";\r\n }\r\n };\r\n\r\n // Expand chart date range when task is changed\r\n gantt.config.fit_tasks = true;\r\n\r\n // Make skin broadway. Default is set to terrace\r\n gantt.skin = \"broadway\";\r\n\r\n // Make Gantt change tasks that fall on weekend\r\n gantt.config.work_time = true;\r\n gantt.config.correct_work_time = true;\r\n\r\n // Add calendar to Make Gantt respect weekendWork\r\n gantt.addCalendar({\r\n id: \"weekend_work\",\r\n worktime: {\r\n days: [1, 1, 1, 1, 1, 1, 1]\r\n }\r\n });\r\n\r\n // Define custom editors\r\n // Date Editor\r\n let self = this;\r\n gantt.config.editor_types.dateEditor = {\r\n show: function (id, column, config, placeholder) {\r\n placeholder.innerHTML = '<div class=\"input-group\"><input type=\"text\" class=\"form-control input-date date-editor-input fs-13\"></div>';\r\n let task = self.getTask(id),\r\n taskModel = self.collection.get(id);\r\n self.showDate(taskModel.get('start'));\r\n\r\n this.datePicker = new PJQ.inputs.Datepicker({\r\n el: self.$('.date-editor-input'),\r\n canEdit: true,\r\n datepickerOptions: {\r\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.ALT_DATE,\r\n defaultDate: taskModel.get('start') ? taskModel.get('start') : new Date(),\r\n minDate: column.name === 'end_date' ? taskModel.get('start') : taskModel.getMinStart(),\r\n widgetPositioning: {\r\n horizontal: column.name === 'start_date' ? 'left' : 'right'\r\n }\r\n },\r\n onChange: function (value) {\r\n if (column.name === 'start_date') {\r\n self.gantt.ext.inlineEditors.startEdit(taskModel.get('taskId'), 'end_date');\r\n }\r\n }\r\n });\r\n },\r\n hide: function (a) {\r\n this.datePicker.remove();\r\n },\r\n set_value: function (value, id, column, node) {\r\n let taskModel = self.collection.get(value.id);\r\n let date = new Date(taskModel && taskModel.get('start') ? taskModel.get('start') : value.start_date);\r\n if (column.name === 'end_date') {\r\n date = new Date(taskModel && taskModel.get('finish') ? taskModel.get('finish') : value.end_date - 1);\r\n }\r\n date.setHours(0, 0, 0, 0);\r\n\r\n this.datePicker.setValue(date);\r\n },\r\n get_value: function (id, column, node) {\r\n return this.datePicker.getValue();\r\n },\r\n is_changed: function (value, id, column, node) {\r\n let d1 = new Date(column.name === 'start_date' ? value.start_date : value.end_date - 1),\r\n d2 = new Date(this.datePicker.getValue());\r\n\r\n d1.setHours(0, 0, 0, 0);\r\n d2.setHours(0, 0, 0, 0);\r\n\r\n return d1.getTime() !== d2.getTime() || (value.unscheduled && this.datePicker.getValue() != null);\r\n },\r\n is_valid: function (value, id, column, node) {\r\n return value !== null\r\n },\r\n save: function (id, column, node) {\r\n let task = self.getTask(id),\r\n taskModel = self.collection.get(id);\r\n\r\n if (column.name === 'start_date') {\r\n task.start_date = PJQ.helpers.dateHelpers.getNewDateAddDays(new Date(this.datePicker.getValue()), 1, !taskModel.get('weekendWork'), true);\r\n task.end_date = PJQ.helpers.dateHelpers.getNewDateAddDays(task.start_date, task.duration > 0 ? task.duration : 1, !taskModel.get('weekendWork'), true);\r\n } else {\r\n let duration = PJQ.helpers.dateHelpers.getDateDaysDiff(this.datePicker.getValue(), task.start_date, !taskModel.get('weekendWork'), true);\r\n task.end_date = PJQ.helpers.dateHelpers.getNewDateAddDays(task.start_date, duration > 0 ? duration : 1, !taskModel.get('weekendWork'), true);\r\n }\r\n\r\n if (typeof self.options.onTaskMoved === 'function') {\r\n self.options.onTaskMoved(taskModel, task, column.name, true);\r\n }\r\n if (self.currentSort) {\r\n self.sort();\r\n }\r\n },\r\n focus: function (node) {\r\n let input = self.getInput(node);\r\n\r\n if (!input) {\r\n return;\r\n }\r\n if (input.focus) {\r\n input.focus();\r\n }\r\n\r\n if (input.select) {\r\n input.select();\r\n }\r\n }\r\n }\r\n\r\n //Duration Editor\r\n gantt.config.editor_types.durationEditor = {\r\n show: function (id, column, config, placeholder) {\r\n let task = self.getTask(id);\r\n self.showDate(task.start_date);\r\n\r\n placeholder.innerHTML = '<input type=\"number\" class=\"form-control number-editor-input fs-13\">';\r\n },\r\n set_value: function (value, id, column, node) {\r\n let input = self.getInput(node)\r\n if (input) {\r\n input.value = value.duration;\r\n }\r\n },\r\n get_value: function (id, column, node) {\r\n let input = self.getInput(node)\r\n if (input) {\r\n return input.value || 0;\r\n }\r\n },\r\n is_changed: function (value, id, column, node) {\r\n let currentValue = this.get_value(id, column, node);\r\n return Number(value.duration) !== Number(currentValue);\r\n },\r\n is_valid: function (value, id, column, node) {\r\n return !isNaN(parseInt(value)) && value > 0;\r\n },\r\n save: function (id, column, node) {\r\n let task = self.getTask(id),\r\n taskModel = self.collection.get(id);\r\n\r\n task.duration = parseInt(this.get_value(id, column, node));\r\n task.end_date = PJQ.helpers.dateHelpers.getNewDateAddDays(task.start_date, task.duration, !taskModel.get('weekendWork'), true);\r\n\r\n if (typeof self.options.onTaskMoved === 'function') {\r\n self.options.onTaskMoved(taskModel, task, column.name, true);\r\n }\r\n if (self.currentSort) {\r\n self.sort();\r\n }\r\n },\r\n focus: function (node) {\r\n let input = self.getInput(node);\r\n\r\n if (!input) {\r\n return;\r\n }\r\n if (input.focus) {\r\n input.focus();\r\n }\r\n\r\n if (input.select) {\r\n input.select();\r\n }\r\n }\r\n }\r\n\r\n //Name Editor\r\n gantt.config.editor_types.nameEditor = {\r\n show: function (id, column, config, placeholder) {\r\n let task = self.getTask(id);\r\n self.showDate(task.start_date);\r\n placeholder.innerHTML = '<input type=\"text\" class=\"form-control name-editor-input fs-13\">';\r\n },\r\n hide: function () {\r\n },\r\n set_value: function (value, id, column, node) {\r\n self.getInput(node).value = value.text;\r\n },\r\n get_value: function (id, column, node) {\r\n return self.getInput(node).value || '';\r\n },\r\n is_changed: function (value, id, column, node) {\r\n let currentValue = this.get_value(id, column, node);\r\n return value.text !== currentValue;\r\n },\r\n is_valid: function (value, id, column, node) {\r\n return value != null;\r\n },\r\n save: function (id, column, node) {\r\n let task = self.getTask(id),\r\n taskModel = self.collection.get(id);\r\n\r\n task.text = this.get_value(id, column, node);\r\n\r\n if (typeof self.options.onTaskMoved === 'function') {\r\n self.options.onTaskMoved(taskModel, task, column.name);\r\n }\r\n if (self.currentSort) {\r\n self.sort();\r\n }\r\n },\r\n focus: function (node) {\r\n let input = self.getInput(node);\r\n\r\n if (!input) {\r\n return;\r\n }\r\n if (input.focus) {\r\n input.focus();\r\n }\r\n\r\n if (input.select) {\r\n input.select();\r\n }\r\n }\r\n }\r\n\r\n let formatter = gantt.ext.formatters.durationFormatter({\r\n enter: \"day\",\r\n store: \"day\",\r\n format: \"auto\"\r\n });\r\n let linksFormatter = gantt.ext.formatters.linkFormatter({durationFormatter: formatter});\r\n\r\n let dateEditor = {\r\n type: \"dateEditor\",\r\n map_to: \"auto\"\r\n },\r\n durationEditor = {\r\n type: \"durationEditor\",\r\n map_to: \"auto\"\r\n },\r\n nameEditor = {\r\n type: \"nameEditor\",\r\n map_to: \"auto\"\r\n },\r\n predecessorEditor = {type: \"predecessor\", map_to: \"auto\", formatter: linksFormatter}\r\n\r\n // Change task list display\r\n gantt.config.columns = [\r\n {name: \"wbs\", label: \"#\", width: 40, template: gantt.getWBSCode, resize: true},\r\n {name: \"text\", label: \"Name\", tree: true, width: 200, resize: true, editor: nameEditor},\r\n {name: \"start_date\", label: \"Start\", width: 85, align: \"center\", resize: true, editor: dateEditor},\r\n {name: \"end_date\", label: \"Finish\", width: 85, align: \"center\", resize: true, editor: dateEditor},\r\n {\r\n name: \"duration\",\r\n label: \"Duration\",\r\n width: 75,\r\n align: \"center\",\r\n resize: true,\r\n editor: durationEditor,\r\n sort: false\r\n },\r\n {\r\n name: \"predecessors\", label: \"WBS\", width: 80, align: \"left\",\r\n editor: predecessorEditor, resize: true, template: function (task) {\r\n let links = task.$target;\r\n let labels = [];\r\n for (let i = 0; i < links.length; i++) {\r\n let link = gantt.getLink(links[i]);\r\n labels.push(linksFormatter.format(link));\r\n }\r\n return labels.join(\", \")\r\n }\r\n },\r\n {name: \"add\"}\r\n ];\r\n\r\n // Display text on task if it fits in the task, otherwise display to the right of the task\r\n gantt.templates.task_text = _.bind(function (start, end, task) {\r\n if (this.checkTaskOverflow(task)) return \" \"\r\n else return task.text\r\n }, this);\r\n\r\n gantt.templates.rightside_text = _.bind(function (start, end, task) {\r\n if (this.checkTaskOverflow(task) || task.type === 'milestone')\r\n return task.text;\r\n }, this);\r\n\r\n //Change open/closed folder icons for gantt tree\r\n gantt.templates.grid_folder = _.bind(function (item) {\r\n if (item.$open) {\r\n return '<div class=\"text-align-center\"><i class=\"fad fa-folder-open ml-1 mr-1\" style=\"margin-top: 50%;\"></i></div>'\r\n } else {\r\n return '<div class=\"text-align-center\"><i class=\"fad fa-folder-closed ml-1 mr-1\" style=\"margin-top: 50%;\"></i></div>'\r\n }\r\n }, this)\r\n\r\n gantt.templates.grid_row_class = _.bind(function (start, end, task) {\r\n if (task.type !== 'project') {\r\n return \"normal_task\"\r\n }\r\n return \"\";\r\n }, this);\r\n\r\n // Change icons for non-parent tasks on gantt tree - Changed to no icon\r\n gantt.templates.grid_file = _.bind(function (item) {\r\n if (item.unscheduled) {\r\n return '<div class=\"text-align-center\"><i class=\"fad fa-exclamation-circle text-danger ml-1 mr-1 p-1\" title=\"Unscheduled Task\" style=\"margin-top: 25%;\"></i></div>'\r\n } else if (item.type === 'milestone') {\r\n return '<div class=\"text-align-center\"><i class=\"fad fa-flag text-success ml-1 mr-1 p-1\" title=\"Milestone\" style=\"margin-top: 25%;\"></i></div>'\r\n }\r\n return '<div class=\"text-align-center\"><i class=\"fad fa-check ml-1 mr-1 p-1\" style=\"margin-top: 25%;\"></i></div>'\r\n }, this)\r\n\r\n // define class for summary tasks\r\n gantt.templates.task_class = (start, end, task) => {\r\n if (task.type === 'project') {\r\n return \"summary-task-bar\";\r\n }\r\n };\r\n\r\n // Resize Scales\r\n gantt.config.scale_height = 75;\r\n\r\n //Enable row drag and drop\r\n if (!this.options.enableSorting) {\r\n gantt.config.order_branch = true;\r\n }\r\n // gantt.config.order_branch_free = false;\r\n\r\n // The gantt will display 1 duration day as the next date, where we interpret it as the same date, e.g, 1 duration date to the gantt will display\r\n // Sept. 19, 2022 - Sept. 20, 2022. We interpret 1 duration day as Sept. 19, 2022 - Sept. 19, 2022\r\n gantt.templates.task_end_date = function (date, a) {\r\n return gantt.templates.task_date(new Date(date.valueOf() - 1));\r\n };\r\n\r\n // Expand all nested tasks initially\r\n gantt.config.open_tree_initially = true;\r\n\r\n //Set gantt to read only\r\n gantt.config.readonly = !this.options.canEdit || this.options.settings.get('lockSchedule');\r\n\r\n // addTaskLayer functions added to onGanttReady, so they are added every time the gantt is initialized\r\n gantt.attachEvent(\"onGanttReady\", _.bind(function (field, direction, parent) {\r\n let sizeEl = document.querySelectorAll(\".gantt_grid\")[0],\r\n ganttContainer = document.querySelectorAll(\".schedule-dashboard-view\")[0],\r\n sizeElRect = sizeEl.getBoundingClientRect();\r\n\r\n this.gridCollapse = document.createElement(\"div\");\r\n ganttContainer.append(this.gridCollapse);\r\n this.gridCollapse.innerHTML = '<i class=\"fas fa-caret-left\" style=\"margin-top: 60%; margin-left: 35%\"></i>'\r\n\r\n this.gridCollapse.classList.add('grid-toggle');\r\n this.gridCollapse.style.top = (sizeElRect.height / 2) + 'px';\r\n this.gridCollapse.style.left = sizeElRect.width + 'px';\r\n\r\n //Display Percent Complete on task bar\r\n gantt.addTaskLayer(function (task) {\r\n if (gantt.getState().drag_id == task.id && task.type !== 'milestone') {\r\n let sizes = gantt.getTaskPosition(task, task.start_date, task.end_date),\r\n el = document.createElement('div'),\r\n progressAmount = Math.round(task.progress * 100)\r\n el.className = 'progress_value';\r\n el.innerHTML = progressAmount + \"%\";\r\n el.style.left = sizes.left + (sizes.width / 3) + 'px';\r\n el.style.top = sizes.top + 40 + 'px';\r\n if (progressAmount === 100) {\r\n el.style.backgroundColor = '#28a745'\r\n } else if (progressAmount >= 60) {\r\n el.style.backgroundColor = '#ffc107'\r\n } else {\r\n el.style.backgroundColor = '#dc3545'\r\n }\r\n return el;\r\n }\r\n return false;\r\n });\r\n\r\n // Summary Task left triangle\r\n gantt.addTaskLayer(function (task) {\r\n if (task.type === 'project') {\r\n let sizes = gantt.getTaskPosition(task, task.start_date, task.end_date),\r\n el = document.createElement('div')\r\n el.className = 'summary-task-left';\r\n el.style.left = sizes.left + 'px';\r\n el.style.top = sizes.top + 22 + 'px';\r\n\r\n return el;\r\n }\r\n });\r\n\r\n // Summary Task right triangle\r\n gantt.addTaskLayer(function (task) {\r\n if (task.type === 'project') {\r\n let sizes = gantt.getTaskPosition(task, task.start_date, task.end_date),\r\n el = document.createElement('div')\r\n el.className = 'summary-task-right';\r\n el.style.left = (sizes.left + sizes.width - 20) + 'px';\r\n el.style.top = sizes.top + 22 + 'px';\r\n\r\n return el;\r\n }\r\n });\r\n }, this));\r\n\r\n // Define date format\r\n let gridDateToStr = gantt.date.date_to_str(\"%m-%d-%Y\");\r\n\r\n // Modify grid date format to fix display\r\n gantt.templates.date_grid = function (date, task, column) {\r\n if (task.unscheduled) {\r\n task.duration = 0;\r\n return '';\r\n } else if (column === \"end_date\" && task.type !== 'milestone') {\r\n return gridDateToStr(new Date(date.valueOf() - 1));\r\n } else {\r\n return gridDateToStr(date);\r\n }\r\n };\r\n\r\n // Enable critical path\r\n gantt.plugins({\r\n critical_path: true,\r\n marker: true\r\n });\r\n\r\n // Declare zoom scales\r\n let zoomConfig = {\r\n levels: [\r\n {\r\n name: \"day\",\r\n scale_height: 40,\r\n min_column_width: 25,\r\n scales: [\r\n {\r\n unit: \"week\",\r\n format: function (date) {\r\n let dateToStr = gantt.date.date_to_str(\"%d %M\");\r\n return dateToStr(date);\r\n }\r\n },\r\n {\r\n unit: \"day\",\r\n step: 1,\r\n format: function (date) {\r\n let dateToStr = gantt.date.date_to_str(\"%D\"),\r\n day = dateToStr(date),\r\n dayNum = date.getDay();\r\n return (dayNum === 0 || dayNum === 4) ? day.substring(0, 2) : day[0];\r\n },\r\n css: function (date) {\r\n if (date.getDay() === 0 || date.getDay() === 6) {\r\n return \"weekend-highlight\";\r\n }\r\n return \"\";\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n name: \"week\",\r\n scale_height: 35,\r\n min_column_width: 100,\r\n scales: [\r\n {unit: \"month\", format: \"%F %Y\"},\r\n {\r\n unit: \"week\", step: 1, format: function (date) {\r\n let dateToStr = gantt.date.date_to_str(\"%d\"),\r\n endDate = gantt.date.add(date, 6, \"day\");\r\n return dateToStr(date) + \"-\" + dateToStr(endDate);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n name: \"month\",\r\n scale_height: 35,\r\n min_column_width: 80,\r\n scales: [\r\n {unit: \"year\", format: \"%Y\"},\r\n {unit: \"month\", format: \"%M\"}\r\n ]\r\n },\r\n {\r\n name: \"quarter\",\r\n scale_height: 35,\r\n min_column_width: 90,\r\n scales: [\r\n {unit: \"year\", format: \"%Y\"},\r\n {\r\n unit: \"quarter\", step: 1, format: function (date) {\r\n return \"Quarter \" + (Math.floor((date.getMonth() / 3)) + 1)\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n name: \"year\",\r\n scale_height: 35,\r\n min_column_width: 30,\r\n scales: [\r\n {unit: \"year\", step: 1, format: \"%Y\"}\r\n ]\r\n }\r\n ],\r\n activeLevelIndex: 0\r\n };\r\n\r\n // initialize zoom\r\n gantt.ext.zoom.init(zoomConfig);\r\n\r\n // Allows sorting tasks on task bar\r\n gantt.config.sort = this.options.enableSorting;\r\n\r\n // Initialize Chart\r\n gantt.init(this.options.el[0]);\r\n\r\n // Parse tasks into gantt from existing data\r\n let ganttData = this.getDataObject();\r\n gantt.parse(ganttData);\r\n\r\n if (ganttData.hasTaskNearToday) {\r\n let pos = gantt.posFromDate(new Date());\r\n gantt.scrollTo(pos);\r\n } else if (ganttData.minStartDate != null) {\r\n let pos = gantt.posFromDate(ganttData.minStartDate);\r\n gantt.scrollTo(pos);\r\n }\r\n\r\n // Set default sort to start date\r\n if (this.currentSort) {\r\n this.sort();\r\n }\r\n\r\n this.attachEvents();\r\n this.renderTodayMarker();\r\n\r\n if (this.options.isShowCriticalPath) {\r\n this.toggleCriticalPath(this.options.isShowCriticalPath);\r\n }\r\n },\r\n renderTodayMarker: function () {\r\n if (this.isExporting) {\r\n if (this.todayMarkerId == null) {\r\n return;\r\n }\r\n\r\n this.gantt.deleteMarker(this.todayMarkerId);\r\n this.todayMarkerId = null;\r\n } else {\r\n if (this.todayMarkerId != null) {\r\n this.gantt.deleteMarker(this.todayMarkerId);\r\n this.todayMarkerId = null;\r\n }\r\n\r\n // Add today marker\r\n let dateToStr = this.gantt.date.date_to_str(gantt.config.task_date);\r\n this.todayMarkerId = this.gantt.addMarker({\r\n start_date: new Date(), //a Date object that sets the marker's date\r\n css: \"today-marker\", //a CSS class applied to the marker\r\n text: \"Today\",\r\n title: dateToStr(new Date())\r\n });\r\n }\r\n },\r\n checkTaskOverflow: function (task, dateText) {\r\n let task_width = this.gantt.getTaskPosition(task, task.start_date, task.end_date);\r\n\r\n let element = document.createElement('canvas'),\r\n context = element.getContext(\"2d\"),\r\n task_element = document.getElementsByClassName(\"gantt_task_content\")[0];\r\n if (task_element) {\r\n let task_font_family = getComputedStyle(task_element)['font-family'],\r\n task_font_size = getComputedStyle(task_element)['font-size'];\r\n context.font = task_font_size + ' ' + task_font_family;\r\n }\r\n let date_text_width = 0\r\n let task_text_width = context.measureText(task.text).width;\r\n if (dateText) {\r\n date_text_width = context.measureText(dateText).width;\r\n }\r\n if ((task_text_width + 60) > task_width.width || (date_text_width + 60) > task_width.width)\r\n return true;\r\n },\r\n renderForExport: function () {\r\n this.isExporting = true;\r\n\r\n this.gantt.templates.task_text = _.bind(function (start, end, task) {\r\n let dateString = PJQ.helpers.dateHelpers.getDateString(task.start_date, PJQ.helpers.dateHelpers.dateFormats.DATE, false);\r\n if (task.type !== 'milestone') {\r\n dateString += ' - ' + PJQ.helpers.dateHelpers.getDateString(new Date(task.end_date - 1), PJQ.helpers.dateHelpers.dateFormats.DATE, false);\r\n }\r\n if (this.checkTaskOverflow(task, dateString)) return \" \"\r\n else return '<div style=\"position: absolute; top: -4px\"><div style=\"height: 12px; line-height: 75%; margin-top: 7px\">' + task.text + '</div> <div class=\"mb-1\" style=\"height: 12px; line-height: 100%;\">' + dateString + '</div></div>';\r\n }, this);\r\n\r\n this.gantt.templates.rightside_text = _.bind(function (start, end, task) {\r\n let dateString = PJQ.helpers.dateHelpers.getDateString(task.start_date, PJQ.helpers.dateHelpers.dateFormats.DATE, false);\r\n if (task.type !== 'milestone') {\r\n dateString += ' - ' + PJQ.helpers.dateHelpers.getDateString(new Date(task.end_date - 1), PJQ.helpers.dateHelpers.dateFormats.DATE, false);\r\n }\r\n if (this.checkTaskOverflow(task, dateString) || task.type === 'milestone')\r\n return '<div><div style=\"height: 10px; line-height: 75%; margin-top: 7px\">' + task.text + '</div> <div class=\"mb-1\" style=\"height: 12px; line-height: 100%;\">' + dateString + '</div></div>';\r\n }, this);\r\n\r\n this.renderTodayMarker();\r\n\r\n this.gantt.render();\r\n },\r\n renderForViewing: function () {\r\n this.isExporting = false;\r\n\r\n this.gantt.templates.task_text = _.bind(function (start, end, task) {\r\n if (this.checkTaskOverflow(task)) return \" \"\r\n else return task.text\r\n }, this);\r\n\r\n this.gantt.templates.rightside_text = _.bind(function (start, end, task) {\r\n if (this.checkTaskOverflow(task) || task.type === 'milestone')\r\n return task.text;\r\n }, this);\r\n\r\n this.renderTodayMarker();\r\n\r\n this.gantt.render();\r\n },\r\n toggleGrid: function () {\r\n this.gantt.config.show_grid = !this.gantt.config.show_grid;\r\n this.gantt.render();\r\n\r\n if (this.gantt.config.show_grid) {\r\n let sizeEl = document.querySelectorAll(\".gantt_grid\")[0],\r\n sizeElRect = sizeEl.getBoundingClientRect();\r\n this.gridCollapse.style.top = (sizeElRect.height / 2) + 'px';\r\n this.gridCollapse.style.left = sizeElRect.width + 'px';\r\n this.gridCollapse.innerHTML = '<i class=\"fas fa-caret-left\" style=\"margin-top: 60%; margin-left: 35%\"></i>'\r\n } else {\r\n let sizeEl = document.querySelectorAll(\".gantt_container\")[0],\r\n sizeElRect = sizeEl.getBoundingClientRect();\r\n this.gridCollapse.style.top = (sizeElRect.height / 2) + 'px';\r\n this.gridCollapse.style.left = 0 + 'px';\r\n this.gridCollapse.innerHTML = '<i class=\"fas fa-caret-right\" style=\"margin-top: 60%; margin-left: 35%\"></i>'\r\n }\r\n },\r\n attachEvents: function () {\r\n // Reopen the datePicker if scales are adjusted when editing the start_date\r\n this.gantt.attachEvent(\"onScaleAdjusted\", _.bind(function () {\r\n let editorState = this.gantt.ext.inlineEditors.getState();\r\n if (editorState.columnName === 'end_date') {\r\n editorState.editor.datePicker.show();\r\n }\r\n }, this));\r\n\r\n this.gantt.attachEvent(\"onBeforeGanttRender\", () => {\r\n let range = this.gantt.getSubtaskDates();\r\n if (range.start_date == null || range.end_date == null) {\r\n return;\r\n }\r\n\r\n if (this.isExporting) {\r\n this.gantt.config.start_date = this.gantt.calculateEndDate(range.start_date, -3, 'day');\r\n this.gantt.config.end_date = this.gantt.calculateEndDate(range.end_date, 5, 'day');\r\n } else {\r\n this.gantt.config.start_date = this.gantt.calculateEndDate(range.start_date, -30, 'day');\r\n this.gantt.config.end_date = this.gantt.calculateEndDate(range.end_date, 30, 'day');\r\n }\r\n });\r\n\r\n // Override the default dhtmlx modal for updating task\r\n this.gantt.attachEvent(\"onBeforeLightBox\", _.bind(function (id) {\r\n id = parseInt(id);\r\n if (id != null && typeof this.options.onTaskEdit === 'function') {\r\n let taskModel = this.collection.get(id),\r\n ganttTask = this.getTask(id);\r\n if (taskModel != null) {\r\n // gantt.ext.quickInfo.hide();\r\n this.options.onTaskEdit(taskModel);\r\n } else {\r\n if (typeof this.options.onTaskAdd === 'function') {\r\n let callback = _.bind(function (taskModel) {\r\n this.gantt.ext.inlineEditors.startEdit(taskModel.get('taskId'), 'text');\r\n }, this);\r\n this.options.onTaskAdd(ganttTask, callback);\r\n }\r\n }\r\n } else\r\n return true;\r\n }, this));\r\n\r\n // Change position of gridCollapse button when grid is resized\r\n this.gantt.attachEvent(\"onGridResizeEnd\", _.bind(function (old_width, new_width) {\r\n this.gridCollapse.style.left = new_width + 'px';\r\n return true;\r\n }, this));\r\n\r\n // Disable editing on certain inline editors in certain cases\r\n this.gantt.ext.inlineEditors.attachEvent(\"onBeforeEditStart\", _.bind(function (state) {\r\n let task = this.getTask(state.id);\r\n if (task && state.columnName === 'duration' && (task.unscheduled || task.type === 'project')) {\r\n return false;\r\n } else if (task && (state.columnName === 'start_date' || state.columnName === 'end_date') && task.type === 'project') {\r\n return false;\r\n } else if (task && state.columnName === 'start_date' && _.size(task.$target) > 0) {\r\n if ((PJQ.app.session.project && PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ASAP_SCHEDULE_CONTRAINT_ENABLED)) ||\r\n (PJQ.app.session.project == null && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ASAP_SCHEDULE_CONTRAINT_ENABLED))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }, this));\r\n\r\n // Store the sort if it is changed\r\n this.gantt.attachEvent(\"onAfterSort\", _.bind(function (field, direction, parent) {\r\n this.gantt.config.order_branch = false;\r\n if (field === 'wbs') {\r\n field = 'sortOrder';\r\n this.gantt.config.order_branch = true;\r\n this.gantt.clearAll();\r\n this.gantt.parse(this.getDataObject());\r\n }\r\n this.currentSort = {\r\n field: field,\r\n asc: direction\r\n };\r\n if (typeof this.options.onSort === 'function') {\r\n this.options.onSort(this.currentSort);\r\n }\r\n this.gantt.render();\r\n }, this));\r\n\r\n // Override dhtmlx gantt error with our own\r\n this.gantt.attachEvent(\"onError\", _.bind(function (errorMessage) {\r\n PJQ.notifications.notify.errorNotify({\r\n message: errorMessage\r\n });\r\n return false;\r\n }, this));\r\n\r\n // Override dhtmlx gantt error with our own\r\n this.gantt.attachEvent(\"onTaskCreated\", _.bind(function (task) {\r\n let callback = _.bind(function (taskModel) {\r\n this.gantt.showTask(taskModel.get('taskId'));\r\n this.gantt.ext.inlineEditors.startEdit(taskModel.get('taskId'), 'text');\r\n }, this);\r\n this.options.onTaskAdd(task, callback);\r\n }, this));\r\n\r\n // Handle task deletion through gantt\r\n this.gantt.attachEvent(\"onAfterTaskDelete\", _.bind(function (id, item) {\r\n let taskModel = this.collection.get(id);\r\n if (typeof this.options.onTaskDelete === 'function') {\r\n this.options.onTaskDelete(taskModel);\r\n }\r\n }, this));\r\n\r\n // Handle on task dragging\r\n this.gantt.attachEvent(\"onTaskDrag\", _.bind(function (id, mode, task, original, e) {\r\n let taskModel = this.collection.get(id);\r\n if (!taskModel) {\r\n return;\r\n }\r\n // Prevent dragging before the minimum start date\r\n if (task.start_date < taskModel.getMinStart()) {\r\n task.start_date = original.start_date;\r\n task.end_date = original.end_date;\r\n }\r\n\r\n //Prevent dragging on tasks with a predecessor && ASAP Constraints enabled\r\n if (mode === 'move' && _.size(task.$target) > 0 &&\r\n ((PJQ.app.session.project && PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ASAP_SCHEDULE_CONTRAINT_ENABLED)) ||\r\n (PJQ.app.session.project == null && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ASAP_SCHEDULE_CONTRAINT_ENABLED)))) {\r\n task.start_date = original.start_date;\r\n task.end_date = original.end_date;\r\n }\r\n }, this));\r\n\r\n this.gantt.attachEvent(\"onRowDragEnd\", _.bind(function (id, target) {\r\n let task = this.getTask(id);\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'schedule'\r\n },\r\n {\r\n endpoint: 'tasks',\r\n value: task.id\r\n },\r\n {\r\n endpoint: 'sort',\r\n value: task.$local_index + 1\r\n }\r\n ])\r\n }).put().done(_.bind(function () {\r\n let newSort = task.$local_index + 1,\r\n oldSort = task.sortOrder;\r\n if (this.collection) {\r\n let taskModel = this.collection.get(id),\r\n summaryTaskId = taskModel.get('summaryTaskId'),\r\n sorted = _.sortBy(_.filter(this.collection.models, (mod) => {\r\n return (!(summaryTaskId > 0) && mod.get('summaryTaskId') == null) || mod.get('summaryTaskId') === summaryTaskId;\r\n }), (mod) => {\r\n let mSort = mod.get('sortOrder');\r\n if (mod.id.toString() === id) {\r\n return newSort;\r\n } else if (oldSort > newSort && mSort >= newSort) {\r\n return mSort + 1;\r\n } else if (oldSort < newSort && mSort === newSort) {\r\n return mSort - 1\r\n } else if (oldSort < newSort && mSort > newSort) {\r\n return mSort + 1;\r\n }\r\n return mSort;\r\n });\r\n _.each(sorted, (mod, i) => {\r\n mod.set('sortOrder', i + 1);\r\n });\r\n }\r\n task.sortOrder = newSort;\r\n }, this));\r\n }, this));\r\n\r\n // Disable dragging between summary tasks\r\n this.gantt.attachEvent(\"onBeforeRowDragEnd\", _.bind(function (id, parent) {\r\n let task = this.getTask(id);\r\n return task.parent === parent;\r\n }, this));\r\n\r\n // Handle after task dragging\r\n this.gantt.attachEvent(\"onAfterTaskDrag\", _.bind(function (id, mode, e) {\r\n let task = this.getTask(id),\r\n taskModel = this.collection.get(id);\r\n if (typeof this.options.onTaskMoved === 'function') {\r\n this.options.onTaskMoved(taskModel, task);\r\n }\r\n if (this.currentSort) {\r\n this.sort();\r\n }\r\n }, this));\r\n\r\n // Handle Dependency adding\r\n this.gantt.attachEvent(\"onAfterLinkAdd\", _.bind(function (id, item) {\r\n let taskModel = this.collection.get(parseInt(item.target));\r\n if (typeof this.options.onDependencyAdd === 'function') {\r\n this.options.onDependencyAdd(taskModel, item);\r\n }\r\n }, this));\r\n\r\n // Handle Dependency deletion\r\n this.gantt.attachEvent(\"onAfterLinkDelete\", _.bind(function (id, item) {\r\n let taskModel = this.collection.get(parseInt(item.target));\r\n if (typeof this.options.onDependencyAdd === 'function') {\r\n this.options.onDependencyDelete(taskModel, item);\r\n }\r\n }, this));\r\n },\r\n sort: function (override) {\r\n this.gantt.sort(override != null ? override : this.currentSort.field, this.currentSort.asc);\r\n },\r\n getTask: function (id) {\r\n return this.gantt.getTask(id);\r\n },\r\n getZoom: function () {\r\n return this.gantt.ext.zoom.getCurrentLevel();\r\n },\r\n zoomIn: function () {\r\n this.gantt.ext.zoom.zoomIn();\r\n },\r\n zoomOut: function () {\r\n this.gantt.ext.zoom.zoomOut();\r\n },\r\n getInput: function (node) {\r\n return node.querySelector(\"input\");\r\n },\r\n showTask: function (id) {\r\n this.gantt.showTask(id);\r\n },\r\n showDate: function (date) {\r\n this.gantt.showDate(date);\r\n },\r\n updateLink: function (id) {\r\n this.gantt.updateLink(id);\r\n },\r\n renderContextMenu: function () {\r\n this.options.contextMenuOptions = {\r\n actions: [\r\n {\r\n name: 'View Details',\r\n onClick: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n this.editTask(task);\r\n }, this)\r\n },\r\n {\r\n name: 'Add Sub-Task',\r\n onClick: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n this.addSubTaskClicked(task);\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n return !this.options.settings.get('lockSchedule');\r\n }, this)\r\n },\r\n {\r\n name: 'Add to Summary Task',\r\n onClick: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n this.addToSummaryTaskClicked(task);\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n return !this.options.settings.get('lockSchedule');\r\n }, this)\r\n },\r\n {\r\n name: 'Remove from Summary Task',\r\n onClick: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n this.removeSummaryTask(task);\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n return task.get('summaryTaskId') > 0 && !this.options.settings.get('lockSchedule');\r\n }, this)\r\n },\r\n {\r\n name: 'Delete',\r\n isDanger: true,\r\n onClick: _.bind(function (row) {\r\n let id = row.data('task-id'),\r\n task = this.collection.get(id);\r\n this.deleteTask(task);\r\n }, this),\r\n isShown: _.bind(function (row) {\r\n return !this.options.settings.get('lockSchedule');\r\n }, this)\r\n }\r\n ]\r\n }\r\n this.contextMenu = new PJQ.menus.ContextMenu(_.defaults(this.options.contextMenuOptions, {\r\n el: this.$('.gantt_container'),\r\n selector: '.gantt_bar_task, .gantt_row_task, .gantt_bar_project, .gantt_row_project, .gantt_row_milestone, .gantt_bar_milestone',\r\n fetchElementData: _.bind(function (element) {\r\n return element\r\n }, this),\r\n onOpen: _.bind(function (row) {\r\n }, this),\r\n onClose: _.bind(function () {\r\n this.$('.context-row').removeClass('context-row');\r\n }, this)\r\n }));\r\n },\r\n editTask: function (task) {\r\n if (typeof this.options.onTaskEdit === 'function') {\r\n this.options.onTaskEdit(task);\r\n }\r\n },\r\n removeSummaryTask: function (task) {\r\n if (typeof this.options.onTaskUpdateSummary === 'function') {\r\n this.options.onTaskUpdateSummary(task, 0);\r\n }\r\n },\r\n addToSummaryTaskClicked: function (task) {\r\n new PJQ.views.charts.SummaryTaskModal({\r\n tasks: this.collection,\r\n task: task,\r\n project: this.options.project,\r\n schedule: this.options.schedule,\r\n onSave: _.bind(function (task, summaryTaskId, isNewTask = false) {\r\n if (typeof this.options.onTaskUpdateSummary === 'function') {\r\n this.options.onTaskUpdateSummary(task, summaryTaskId, isNewTask);\r\n }\r\n }, this)\r\n });\r\n },\r\n addSubTaskClicked: function (task) {\r\n if (typeof this.options.onAddSubTask === 'function') {\r\n this.options.onAddSubTask(task);\r\n }\r\n },\r\n deleteTaskClicked: function (e) {\r\n let taskId = $(e.currentTarget).closest('.task-popup').data('taskId'),\r\n task = this.collection.get(taskId);\r\n this.deleteTask(task);\r\n },\r\n deleteTask: function (task) {\r\n if (typeof this.options.onTaskDelete === 'function') {\r\n this.options.onTaskDelete(task);\r\n }\r\n },\r\n addTask: function (taskModel, parentId) {\r\n let taskObj = {\r\n text: taskModel.get('name'),\r\n start_date: taskModel.get('start'),\r\n duration: taskModel.get('duration'),\r\n id: taskModel.get('taskId'),\r\n type: taskModel.get('isMilestone') ? 'milestone' : taskModel.get('isSummaryTask') ? 'project' : 'task',\r\n progress: (taskModel.get('percentComplete') / 100),\r\n parent: taskModel.get('summaryTaskId') ? taskModel.get('summaryTaskId') : taskModel.get('parentTaskId'),\r\n calendar_id: taskModel.get('weekendWork') ? \"weekend_work\" : null\r\n };\r\n\r\n this.gantt.addTask(taskObj);\r\n\r\n // Handle dependencies for new task\r\n _.each(taskModel.dependencies.models, function (dependency) {\r\n if (dependency.get('taskId') === taskModel.get('taskId')) {\r\n let linkObj = {\r\n id: dependency.get('dependencyId'),\r\n target: dependency.get('taskId'),\r\n source: dependency.get('dependTaskId'),\r\n type: dependency.get('type') === 'FS' ? \"0\" : \"1\",\r\n lag: dependency.get('offset')\r\n }\r\n\r\n this.addLink(linkObj);\r\n }\r\n }, this);\r\n },\r\n addLink: function (linkObj) {\r\n this.gantt.addLink(linkObj);\r\n },\r\n toggleCriticalPath: function (bool) {\r\n this.gantt.config.highlight_critical_path = bool;\r\n this.gantt.render();\r\n },\r\n refreshTasks: function () {\r\n let scroll = this.gantt.getScrollState();\r\n this.gantt.clearAll();\r\n this.gantt.parse(this.getDataObject());\r\n if (this.currentSort) {\r\n this.sort();\r\n }\r\n this.gantt.scrollTo(scroll.x, scroll.y);\r\n this.renderTodayMarker();\r\n },\r\n updateTask: function (taskModel) {\r\n let task = this.gantt.getTask(taskModel.get('taskId')),\r\n // If start date is null we want to use the latest task start date. If there are no other tasks we just want to use today's date.\r\n hasTaskWithStartDate = _.find(this.collection.models, function (model) {\r\n return model.get('start') != null;\r\n }),\r\n maxStartDate = hasTaskWithStartDate ? new Date(Math.max(...this.collection.models.map(model => new Date(model.get('start'))))) : new Date();\r\n // Since we subtracted a day for the API, we have to add it back for the gantt to be correct.\r\n let endDate = new Date(taskModel.get('finish'));\r\n endDate = endDate.addDays(1);\r\n endDate.setHours(0, 0, 0, 0);\r\n task.start_date = taskModel.get('start') != null ? taskModel.get('start') : maxStartDate;\r\n task.end_date = endDate;\r\n task.duration = taskModel.get('duration');\r\n task.unscheduled = taskModel.get('start') == null || taskModel.get('finish') == null;\r\n\r\n this.gantt.updateTask(task.id);\r\n },\r\n exportToPDF: function (callback) {\r\n if (!this.gantt) {\r\n return;\r\n }\r\n this.getCompanyLogoUrl(_.bind(function (logoURL) {\r\n this.renderForExport();\r\n setTimeout(() => {\r\n this.gantt.exportToPDF({\r\n name: (PJQ.app.session.project ? PJQ.app.session.project.get('projectName') : 'Project') + \"_Gantt.pdf\",\r\n header: \"<style>.weekend-highlight{background-color: #eee !important;}.chart-outer{position:relative}.gantt-container{height:100%!important;flex:1;display:flex;position:relative}.task-list-header{height:39px;width:600px;background-color:#fff;z-index:9999999}.task-list-task{height:50px;width:600px;text-align:left;align-content:start;font-size:16px;border-bottom:1px solid #eaeaea;transition:border-right-width 0.2s linear;&:hover{color:#156cb1!important;background:#f8f9fa!important;border-right-width:10px!important}}.task-list-div{height:100%!important;flex:0 0 600px;width:600px!important;background-color:#fff;position:absolute;left:0;top:0}.task-list-fill{height:100%!important;flex:0 0 600px;width:600px!important;background-color:#fff}.task-list-input{padding:.39rem .3rem!important;margin-top:0.6rem!important}.gantt{display:flex;.lower-text{font-size:15px!important;font-weight:300!important}.upper-text{font-size:16px!important;font-weight:500!important}.bar-label{font-size:14px!important;font-weight:500!important;&.big{font-weight:700!important;color:#343a40!important}}.today-highlight{fill:rgba(0,109,255,.35)!important;opacity:inherit!important}.weekend-highlight{fill:rgba(94,53,177,.1)!important;opacity:inherit!important}.row-line{stroke:#b6b6b6!important;stroke-width:.4!important}.tick{stroke:transparent!important;stroke-width:.4!important}}.gantt_qi_big_icon.icon_delete{font-family:Roboto,sans-serif;font-weight:400;color:#fff;background-color:#dc3545;display:inline-block;text-align:center;vertical-align:middle;user-select:none;border:1px solid #dc3545;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer;padding-left:10px;&:hover{color:#fff;background-color:#c82333;border-color:#bd2130;text-decoration:none}}.gantt_qi_big_icon.icon_edit{font-family:Roboto,sans-serif;font-weight:400;color:#fff;background-color:#17a2b8;display:inline-block;text-align:center;vertical-align:middle;user-select:none;border:1px solid #17a2b8;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer;padding-left:12px;min-width:50px;&:hover{color:#fff;background-color:#138496;border-color:#117a8b;text-decoration:none}}.icon_edit{background-image:none!important;width:0!important}.icon_delete{background-image:none!important;width:0!important}.progress_value{position:absolute;border-radius:5px;margin-top:-7px;height:20px;width:40px;color:#fff;z-index:99999;text-align:center}.summary-task-bar{background-color:#000!important;border:1px solid #000!important}.summary-task-bar .gantt_task_progress_wrapper .gantt_task_progress{border:1px solid #4f4f4f!important;background:#5a5a5a!important;box-shadow:none!important}.summary-task-left{position:absolute;border-top:20px solid #000;border-right:20px solid transparent;z-index:0;margin-top:-7px;color:#fff;text-align:center}.summary-task-right{position:absolute;border-top:20px solid #000;border-left:20px solid transparent;z-index:0;margin-top:-7px;color:#fff;text-align:center}.milestone-icon{position:absolute;z-index:99999;padding:3px;margin-left:-10px;margin-top:8px;pointer-events:none}.gantt_task_line.gantt_milestone{border-radius:50%}.gantt_critical_task{background-color:#e63030!important;border-color:#9d3a3a!important}.gantt_container{font-family:Roboto,sans-serif;font-weight:400}.gantt_row.odd,.gantt_task_row.odd,.gantt_row,.gantt_task_row{background:white!important;border-bottom:1px solid #e8e8e8!important}.gantt_grid_data{background:white!important}.gantt_task .gantt_task_scale .gantt_scale_cell{background-color:#FFFFFF!important}.gantt_grid_scale .gantt_grid_head_cell{border-left:none!important;border-right:none!important;background-color:#FFFFFF!important;color:#212529;font-size:12px!important}.gantt_task_scale{border-bottom:none!important}.gantt_scale_line{border-bottom:none;border-top:none!important}.gantt_scale_cell{font-size:12px!important;border-bottom:1px solid #b3b3b3}.today-marker{background-color:rgb(0 0 0 / 60%)}.normal_task .gantt_add{display:none} </style>\" + (PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_GANTT_HEADER_CUSTOM_MARKUP) != null ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_GANTT_HEADER_CUSTOM_MARKUP) : \"<div style='display: flex; font-size: 24px; background: #022c52; color: #FFFFFF; padding: 20px; font-family: sans-serif;'> <img src='\" + logoURL + \"' alt='Company Logo' style='margin-bottom: auto; max-width: 200px; margin-right:20px;'/> <div style='align-self: flex-end; margin-left:20px;'> <div style='font-weight: bold;'>\" + PJQ.app.session.project.get('projectName') + \"</div><div>\" + PJQ.app.session.project.get('address1') + \"</div><div>\" + PJQ.app.session.project.get('city') + \", \" + PJQ.app.session.project.get('state') + \" \" + PJQ.app.session.project.get('zip') + \" </div></div></div>\"),\r\n raw: true,\r\n server: PJQ.helpers.urlHelpers.buildApiUrl('/schedule/export', {\r\n service: PJQ.constants.services.APIv2\r\n })\r\n });\r\n\r\n this.renderForViewing();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }, 1);\r\n }, this));\r\n },\r\n exportToExcel: function (callback) {\r\n if (!this.gantt) {\r\n return;\r\n }\r\n this.getCompanyLogoUrl(_.bind(function (logoURL) {\r\n this.gantt.exportToExcel({\r\n name: (PJQ.app.session.project ? PJQ.app.session.project.get('projectName') : 'Project') + \"_Gantt.xlsx\",\r\n visual: \"base-colors\",\r\n cellColors: true,\r\n date_format: \"mmmm d, yyyy\",\r\n project: PJQ.app.session.project,\r\n logoURL: logoURL,\r\n server: PJQ.helpers.urlHelpers.buildApiUrl('/schedule/export', {\r\n service: PJQ.constants.services.APIv2\r\n })\r\n });\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }, this));\r\n },\r\n exportToPNG: function (callback) {\r\n if (!this.gantt) {\r\n return;\r\n }\r\n this.getCompanyLogoUrl(_.bind(function (logoURL) {\r\n this.renderForExport();\r\n this.gantt.exportToPNG({\r\n name: (PJQ.app.session.project ? PJQ.app.session.project.get('projectName') : 'Project') + \"_Gantt.png\",\r\n header: \"<style>.gantt_container{margin: 20px;}.chart-outer{position:relative}.gantt-container{height:100%!important;flex:1;display:flex;position:relative}.task-list-header{height:39px;width:600px;background-color:#fff;z-index:9999999}.task-list-task{height:50px;width:600px;text-align:left;align-content:start;font-size:16px;border-bottom:1px solid #eaeaea;transition:border-right-width 0.2s linear;&:hover{color:#156cb1!important;background:#f8f9fa!important;border-right-width:10px!important}}.task-list-div{height:100%!important;flex:0 0 600px;width:600px!important;background-color:#fff;position:absolute;left:0;top:0}.task-list-fill{height:100%!important;flex:0 0 600px;width:600px!important;background-color:#fff}.task-list-input{padding:.39rem .3rem!important;margin-top:0.6rem!important}.gantt{display:flex;.lower-text{font-size:15px!important;font-weight:300!important}.upper-text{font-size:16px!important;font-weight:500!important}.bar-label{font-size:14px!important;font-weight:500!important;&.big{font-weight:700!important;color:#343a40!important}}.today-highlight{fill:rgba(0,109,255,.35)!important;opacity:inherit!important}.weekend-highlight{fill:rgba(94,53,177,.1)!important;opacity:inherit!important}.row-line{stroke:#b6b6b6!important;stroke-width:.4!important}.tick{stroke:transparent!important;stroke-width:.4!important}}.gantt_qi_big_icon.icon_delete{font-family:Roboto,sans-serif;font-weight:400;color:#fff;background-color:#dc3545;display:inline-block;text-align:center;vertical-align:middle;user-select:none;border:1px solid #dc3545;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer;padding-left:10px;&:hover{color:#fff;background-color:#c82333;border-color:#bd2130;text-decoration:none}}.gantt_qi_big_icon.icon_edit{font-family:Roboto,sans-serif;font-weight:400;color:#fff;background-color:#17a2b8;display:inline-block;text-align:center;vertical-align:middle;user-select:none;border:1px solid #17a2b8;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer;padding-left:12px;min-width:50px;&:hover{color:#fff;background-color:#138496;border-color:#117a8b;text-decoration:none}}.icon_edit{background-image:none!important;width:0!important}.icon_delete{background-image:none!important;width:0!important}.progress_value{position:absolute;border-radius:5px;margin-top:-7px;height:20px;width:40px;color:#fff;z-index:99999;text-align:center}.summary-task-bar{background-color:#000!important;border:1px solid #000!important}.summary-task-bar .gantt_task_progress_wrapper .gantt_task_progress{border:1px solid #4f4f4f!important;background:#5a5a5a!important;box-shadow:none!important}.summary-task-left{position:absolute;border-top:20px solid #000;border-right:20px solid transparent;z-index:0;margin-top:-7px;color:#fff;text-align:center}.summary-task-right{position:absolute;border-top:20px solid #000;border-left:20px solid transparent;z-index:0;margin-top:-7px;color:#fff;text-align:center}.milestone-icon{position:absolute;z-index:99999;padding:3px;margin-left:-10px;margin-top:8px;pointer-events:none}.gantt_task_line.gantt_milestone{border-radius:50%}.gantt_critical_task{background-color:#e63030!important;border-color:#9d3a3a!important}.gantt_container{font-family:Roboto,sans-serif;font-weight:400}.gantt_row.odd,.gantt_task_row.odd,.gantt_row,.gantt_task_row{background:white!important;border-bottom:1px solid #e8e8e8!important}.gantt_grid_data{background:white!important}.gantt_task .gantt_task_scale .gantt_scale_cell{background-color:#FFFFFF!important}.gantt_grid_scale .gantt_grid_head_cell{border-left:none!important;border-right:none!important;background-color:#FFFFFF!important;color:#212529;font-size:12px!important}.gantt_task_scale{border-bottom:none!important}.gantt_scale_line{border-bottom:none;border-top:none!important}.gantt_scale_cell{font-size:12px!important;border-bottom:1px solid #b3b3b3}.today-marker{background-color:rgb(0 0 0 / 60%)}.normal_task .gantt_add{display:none}</style>\" + (PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_GANTT_HEADER_CUSTOM_MARKUP) != null ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_GANTT_HEADER_CUSTOM_MARKUP) : \"<div style='display: flex; font-size: 24px; background: #022c52; color: #FFFFFF; padding: 20px; font-family: sans-serif;'> <img src='\" + logoURL + \"' alt='Company Logo' style='margin-bottom: auto; margin-right:20px; max-width: 200px;'/> <div style='align-self: flex-end; margin-left:20px;'> <div style='font-weight: bold;'>\" + PJQ.app.session.project.get('projectName') + \"</div><div>\" + PJQ.app.session.project.get('address1') + \"</div><div>\" + PJQ.app.session.project.get('city') + \", \" + PJQ.app.session.project.get('state') + \" \" + PJQ.app.session.project.get('zip') + \" </div></div></div>\"),\r\n skin: 'broadway',\r\n raw: true,\r\n server: PJQ.helpers.urlHelpers.buildApiUrl('/schedule/export', {\r\n service: PJQ.constants.services.APIv2\r\n })\r\n });\r\n this.renderForViewing();\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }, this));\r\n },\r\n getCompanyLogoUrl: function (callback) {\r\n if (this.logoURL != null) {\r\n callback(this.logoURL);\r\n return;\r\n }\r\n\r\n if (PJQ.app.session.project.get('masterUserId') > 0) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'users',\r\n value: PJQ.app.session.project.get('masterUserId')\r\n },\r\n {\r\n endpoint: 'logo'\r\n }\r\n ])\r\n }).get().done(_.bind(function (response) {\r\n this.logoURL = response.url;\r\n callback(response.url);\r\n }, this));\r\n } else {\r\n callback(null);\r\n }\r\n },\r\n exportToPrimavera: function (callback) {\r\n this.gantt.exportToPrimaveraP6({\r\n name: (PJQ.app.session.project ? PJQ.app.session.project.get('projectName') : 'Project') + \"_Gantt.xer\",\r\n });\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n },\r\n exportToMSProject: function (callback) {\r\n this.gantt.exportToMSProject({\r\n name: (PJQ.app.session.project ? PJQ.app.session.project.get('projectName') : 'Project') + \"_Gantt.mpp\",\r\n });\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.charts.SummaryTaskModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'summary-task-modal'),\r\n width: '30%',\r\n maxWidth: 700,\r\n onSave: _.noop\r\n },\r\n events: {\r\n 'click .btn-save': 'save',\r\n 'click .btn-new-summary-task': 'newSummaryTaskClicked'\r\n },\r\n beforeRender: function () {\r\n this.existingTasks = _.filter(this.options.tasks.models, function (task) {\r\n let taskModel = task.get('model') ? task.get('model') : task;\r\n return taskModel.get('isSummaryTask')\r\n }, this);\r\n\r\n this.targetTask = this.options.task;\r\n this.renderData = {\r\n tasks: this.options.tasks.models,\r\n targetTask: this.targetTask\r\n };\r\n },\r\n afterRender: function () {\r\n let invalidTasks = this.getAllDescendantTaskIds();\r\n\r\n this.existingTaskPicker = new PJQ.inputs.Selectpicker({\r\n el: $('.select-existing-summary-task'),\r\n isLiveSearch: true,\r\n noneSelectedText: 'Select Existing Task',\r\n choices: _.map(_.filter(this.options.tasks.models, function (task) {\r\n return !_.contains(invalidTasks, task.get('taskId')) && task.get('taskId') !== this.targetTask.get('taskId') && task.get('taskId') !== this.targetTask.get('summaryTaskId');\r\n }, this), function (task) {\r\n return {\r\n id: task.get('taskId'),\r\n name: task.get('name')\r\n }\r\n }),\r\n onChange: _.bind(function (value) {\r\n let existingSummary = _.find(this.existingTasks, function (model) {\r\n return model.id === parseInt(value);\r\n })\r\n if (this.warningAlert) {\r\n this.warningAlert.destroy();\r\n }\r\n\r\n if (existingSummary == null) {\r\n this.warningAlert = new PJQ.Alert(this.$('.summary-warning'), {\r\n type: 'danger',\r\n text: 'Selected task is not currently a summary task. Saving will cause selected task to convert into a summary task.'\r\n });\r\n }\r\n this.summaryTaskId = value;\r\n this.$('.btn-save').prop('disabled', false);\r\n }, this)\r\n });\r\n },\r\n getAllDescendantTaskIds: function () {\r\n let descendants = [],\r\n findDescendants = _.bind(function (currentTaskId) {\r\n _.each(this.options.tasks.models, function (task) {\r\n task = task.model ? task.model : task;\r\n if (task.get('summaryTaskId') === currentTaskId) {\r\n descendants.push(task.get('taskId'));\r\n findDescendants(task.get('taskId'));\r\n }\r\n });\r\n }, this);\r\n\r\n findDescendants(this.targetTask.get('taskId'));\r\n return descendants;\r\n },\r\n newSummaryTaskClicked: function () {\r\n let newTask = new PJQ.models.schedule.Task({\r\n projectId: this.targetTask ? this.targetTask.get('projectId') : null,\r\n templateId: this.targetTask ? this.targetTask.get('templateId') : null\r\n });\r\n this.newSummaryTask(newTask)\r\n },\r\n newSummaryTask: function (task) {\r\n new PJQ.views.schedule.EditTaskModal({\r\n project: this.options.project,\r\n schedule: this.options.schedule,\r\n isSummaryTask: true,\r\n model: task,\r\n onSave: _.bind(function () {\r\n task.save(null, {\r\n success: _.bind(function (model) {\r\n this.summaryTaskId = model.get('taskId');\r\n this.options.onSave(model, null, true);\r\n this.save()\r\n }, this)\r\n })\r\n }, this),\r\n onClose: _.bind(function () {\r\n this.removeModal();\r\n }, this)\r\n });\r\n },\r\n save: function () {\r\n if (this.summaryTaskId != null) {\r\n this.options.onSave(this.targetTask, this.summaryTaskId)\r\n this.removeModal();\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.charts.AssigneeListModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'assignee-list-modal'),\r\n subTemplates: {\r\n assignees: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'assignee-list'),\r\n },\r\n width: '30%',\r\n maxWidth: 700\r\n },\r\n events: {\r\n 'click .btn-edit-assignee': 'editAssignee'\r\n },\r\n afterRender: function () {\r\n this.renderAssignees()\r\n },\r\n renderAssignees: function () {\r\n this.renderSubTemplate(false, this.options.subTemplates.assignees, this.$('.assignee-outer'), {\r\n assignees: this.options.assignees.models\r\n });\r\n },\r\n editAssignee: function (e) {\r\n let target = $(e.currentTarget).closest('.assignee-card'),\r\n cid = target.data('cid'),\r\n assignee = this.options.assignees.get(cid),\r\n model = new PJQ.models.contacts.Contact(assignee);\r\n\r\n new PJQ.views.contacts.BaseEditContactModal({\r\n model: model\r\n })\r\n }\r\n});\r\n\r\nPJQ.models.charts = {};\r\nPJQ.models.charts.GanttTask = PJQ.models.BaseModel.extend({\r\n parse: function (model) {\r\n if (model.model != null) {\r\n this.model = model.model;\r\n }\r\n return model;\r\n }\r\n});\r\n\r\nPJQ.collections.charts = {};\r\nPJQ.collections.charts.GanttTasks = PJQ.collections.BaseCollection.extend({\r\n model: PJQ.models.charts.GanttTask\r\n});\r\n","PJQ.compression = {\n\tencode: {\n\t\tdelta(values) {\n\t\t\tvalues = values.sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\n\t\t\treturn values.reduce(function (state, value) {\n\t\t\t\tlet diff = value - state.lastValue;\n\t\t\t\tstate.encoded.push(isNaN(diff) ? value : diff);\n\t\t\t\tstate.lastValue = value;\n\t\t\t\treturn state;\n\t\t\t}, {\n\t\t\t\tencoded: []\n\t\t\t}).encoded;\n\t\t},\n\t\trunLength(values) {\n\t\t\tlet len = _.size(values);\n\t\t\treturn values.reduce(function (state, value, index) {\n\t\t\t\t//if this is the last value in array, we need to do things a bit differently\n\t\t\t\tif (index === len - 1) {\n\t\t\t\t\tif (state.lastValue !== value) {\n\t\t\t\t\t\t// if the last value doesn't match this one, add it to the result\n\t\t\t\t\t\tif (!isNaN(state.lastValue)) {\n\t\t\t\t\t\t\tstate.encoded.push(state.multiple > 1 ? state.multiple.toString() + '_' + state.lastValue.toString() : state.lastValue.toString());\n\t\t\t\t\t\t\tstate.multiple = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstate.encoded.push(value.toString());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tstate.multiple++;\n\t\t\t\t\t\tstate.encoded.push(state.multiple.toString() + '_' + value.toString());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (state.lastValue === value) {\n\t\t\t\t\t\t// if the last value matches this one, just increment the counter\n\t\t\t\t\t\tstate.multiple++;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!isNaN(state.lastValue)) {\n\t\t\t\t\t\t// if the last value doesn't match this one AND this isn't the first iteration\n\t\t\t\t\t\t// add the multiple+lastValue or lastValue (if multiple === 1)\n\t\t\t\t\t\tstate.encoded.push(state.multiple > 1 ? state.multiple.toString() + '_' + state.lastValue.toString() : state.lastValue.toString());\n\t\t\t\t\t\tstate.multiple = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate.lastValue = value;\n\t\t\t\treturn state;\n\t\t\t}, {\n\t\t\t\tencoded: [],\n\t\t\t\tmultiple: 1\n\t\t\t}).encoded;\n\t\t}\n\t},\n\tdecode: {}\n};","PJQ.models.contacts = {};\nPJQ.collections.contacts = {};\nPJQ.views.contacts = {};\n\nPJQ.helpers.contacts = {\n getContactAnchor: function (options = {}) {\n if (options.contact != null) {\n if (PJQ.helpers.objectHelpers.refinedType(options.contact, true) === 'backboneModel') {\n options.id = options.contact.get('id') != null ? options.contact.get('id') : options.contact.id;\n if (options.useCompanyName && options.contact.get('companyName') != null)\n options.name = options.contact.get('companyName');\n else\n options.name = options.contact.get('contactName');\n } else {\n options.id = options.contact.id;\n if (options.useCompanyName && options.contact.companyName != null)\n options.name = options.contact.companyName;\n else\n options.name = options.contact.contactName;\n }\n }\n\n if (_.size(options.name) == 0) {\n // options.name = '<No Contact Name>';\n options.name = '(No Contact Name)';\n }\n\n let canViewContacts = PJQ.app.session.hasPermission('contacts.canView');\n if (canViewContacts && PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n canViewContacts = false;\n }\n\n if (options.id != null && options.id !== 0\n && ((PJQ.app.session.user != null && -options.id === PJQ.app.session.user.id)\n || canViewContacts\n )) {\n return `<a href=\"javascript:void(0)\" class=\"font-weight-normal watch-contact-edit contact-name text-primary\" data-contact-id=\"${options.id.toString()}\">${options.name}</a>`;\n }\n\n return '<span>' + options.name + '</span>';\n }\n};\n\n//Models\nPJQ.models.contacts.Company = PJQ.models.BaseModel.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'companies',\n value: this.id\n }\n ])\n },\n beforeConstruct: function (attributes) {\n if (attributes && attributes.groups != null) {\n this.parseContactData(attributes);\n }\n },\n beforeInit: function () {\n this.on('change:userTypeId', function () {\n if (PJQ.app.session != null) {\n let userTypeId = this.get('userTypeId');\n if (userTypeId != null) {\n this.userType = PJQ.app.session.userTypes.get(userTypeId);\n if (this.userType === null) {\n this.userType = PJQ.app.session.userTypes.getDefault(this.id < 0);\n }\n } else {\n this.userType = PJQ.app.session.userTypes.getDefault(this.id < 0);\n }\n }\n });\n },\n parse: function (model) {\n this.parseContactData(model);\n this.parseAttachmentData(model);\n return model;\n },\n parseContactData: function (model) {\n this.contacts = new PJQ.collections.contacts.Contacts(model ? model.contacts : null);\n },\n parseAttachmentData: function (model) {\n this.attachments = new PJQ.collections.files.Files(model ? model.attachments : null);\n },\n getGroups: function () {\n let result = [],\n ids = [];\n _.each(this.contacts.models, function (contact) {\n _.each(contact.groups.models, function (group) {\n if (ids.indexOf(group.id) === -1) {\n ids.push(group.id);\n result.push(group);\n }\n });\n });\n return result;\n },\n checkHasGroup: function (filter) {\n let result = false;\n _.each(this.contacts.models, function (contact) {\n result = result || contact.checkHasGroup(filter);\n });\n return result;\n },\n beforeSave: function () {\n this.set({\n attachments: this.attachments.getChangedModels()\n })\n },\n fetchERPObject: function (callback) {\n if (this.get('externalObject') == null && !this.externalObjectFetched) {\n this.externalObjectFetched = true;\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n },\n {\n endpoint: 'erpobject'\n }\n ]),\n isAPIv2: true\n }).get().done((data) => {\n if (data != null) {\n this.set({\n externalObject: data\n }, {\n silent: true\n });\n }\n if (typeof callback === 'function') {\n callback(this.get('externalObject'));\n }\n }).fail(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n });\n } else {\n callback(this.get('externalObject'));\n }\n },\n erpSyncStatus: function (forCompany = false) {\n let exObj = this.get('externalObject');\n if (exObj != null) {\n let minModified = this.get('modifiedOn'),\n status = typeof exObj.status === 'number' ? exObj.status : 0;\n\n if (this.contacts != null) {\n minModified = _.min(_.union([minModified], _.map(this.contacts.models, function (contact) {\n let mod = contact.get('modifiedOn');\n return mod ? new Date(mod) : null;\n })))\n }\n\n if (status !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING\n && status !== PJQ.constants.integrations.erp.syncStatuses.APPROVED\n && minModified > new Date(exObj.lastSync)) {\n return PJQ.constants.integrations.erp.syncStatuses.STALE;\n }\n return status;\n }\n return 0;\n },\n unlinkERP: function (callback) {\n if (!this.id || this.id === 0) {\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: `/erp/vendors/${this.id}/unlink`,\n isAPIv2: true,\n }).post().done(_.bind(function () {\n this.set('externalObject', null);\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(_.bind(function (xhr) {\n if (typeof callback === 'function') {\n let err;\n if (xhr.responseJSON != null) {\n err = xhr.responseJSON.type;\n } else {\n err = null;\n }\n callback(false, err);\n }\n }, this));\n }\n});\n\nPJQ.models.contacts.Contact = PJQ.models.contacts.Company.extend({\n defaults: {\n type: 'contact'\n },\n endpoint: function (options) {\n let params = [];\n if (options) {\n if (options.approve) {\n params.push({\n parameter: 'approve',\n value: true\n });\n }\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n }\n ], params)\n },\n sendPasswordReset: function (callback) {\n PJQ.helpers.users.sendPasswordReset(this.get('username'), function (result) {\n if (typeof callback === 'function') {\n callback(result);\n }\n });\n },\n parseContactData: function (model) {\n if (model != null) {\n let isCompanyUser = (this instanceof PJQ.models.users.User || this.id < 0);\n if (PJQ.app.session != null) {\n if (model.userTypeId != null) {\n this.userType = PJQ.app.session.userTypes.get(model.userTypeId);\n }\n\n if (this.userType == null) {\n if (isCompanyUser || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE)) {\n this.userType = PJQ.app.session.userTypes.getDefault(isCompanyUser);\n\n if (this.userType != null)\n model.userTypeId = this.userType.id;\n\n }\n }\n }\n\n if (model.user != null) {\n this.user = new PJQ.models.users.User(model.user);\n }\n\n if (this.approvals == null) {\n this.approvalUpdates = new PJQ.collections.contacts.ApprovalUpdates(model.approvalUpdates)\n }\n\n if (this.groups == null) {\n this.groups = new PJQ.collections.groups.Groups(model.groups, {\n groupLevels: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS)\n });\n } else {\n //Override for groups being returned in a nested object\n //This is some old api stuff that will soon be deprecated\n //We will remove this when that happens\n if (model.groups != null) {\n model.groups = model.groups;\n }\n this.groups.reset(_.size(model.groups) > 0 ? model.groups : null);\n this.groups.options.groupLevels = PJQ.app.session ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS) : 1;\n }\n\n if (this.workAreas) {\n this.workAreas.reset(model.workAreas);\n } else {\n this.workAreas = new PJQ.collections.workAreas.ContactWorkAreas(model.workAreas, {\n contactId: model.id\n });\n }\n } else {\n let isCompanyUser = (this instanceof PJQ.models.users.User || this.id < 0);\n\n if (isCompanyUser || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE)) {\n this.userType = PJQ.app.session != null ? PJQ.app.session.userTypes.getDefault(isCompanyUser) : null;\n\n }\n\n this.groups = new PJQ.collections.groups.Groups();\n this.workAreas = new PJQ.collections.workAreas.ContactWorkAreas();\n }\n },\n fetchEditHistory: function (callback) {\n if (this.editHistory == null) {\n this.editHistory = new PJQ.collections.contacts.EditHistory(null, {\n contact: this\n })\n }\n\n this.editHistory.fetch({\n success: _.bind(function () {\n callback(this.editHistory);\n }, this)\n });\n },\n fetchCompanyERPObject: function (callback) {\n if (this.get('companyExternalObject') == null && !this.companyErpObjectFetched) {\n this.companyErpObjectFetched = true;\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactCompanyId')\n },\n {\n endpoint: 'erpobject'\n }\n ]),\n isAPIv2: true\n }).get().done(_.bind(function (data) {\n if (data != null) {\n this.set({\n companyExternalObject: data\n }, {\n silent: true\n });\n }\n if (typeof callback === 'function') {\n callback(this.get('companyExternalObject'));\n }\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n });\n } else {\n callback(this.get('companyExternalObject'));\n }\n },\n externalId: function (forCompany = false) {\n let exObj;\n if (forCompany) {\n exObj = this.get('companyExternalObject');\n } else {\n exObj = this.get('externalObject');\n }\n return exObj != null && typeof exObj.externalId === 'string' ? exObj.externalId : null;\n },\n erpSyncStatus: function (forCompany = false) {\n let exObj;\n if (forCompany) {\n exObj = this.get('companyExternalObject');\n } else {\n exObj = this.get('externalObject');\n }\n if (exObj != null) {\n let status = typeof exObj.status === 'number' ? exObj.status : 0;\n if (status !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING\n && status !== PJQ.constants.integrations.erp.syncStatuses.APPROVED\n && new Date(this.get('modifiedOn')) > new Date(exObj.lastSync)) {\n return PJQ.constants.integrations.erp.syncStatuses.STALE;\n }\n return status;\n }\n return 0;\n },\n isERPSynced: function (forCompany = false) {\n return _.size(this.externalId(forCompany)) > 0;\n },\n fetchSystemPermissions: function (callback) {\n let perm;\n if (!this.isNew()) {\n perm = new PJQ.models.permissions.SystemPermissions({\n id: this.get('id')\n });\n } else {\n perm = new PJQ.models.permissions.SystemPermissions({\n userTypeId: this.userType != null ? this.userType.id : null\n });\n }\n perm.fetch({\n success: _.bind(function () {\n callback(perm);\n }, this)\n });\n },\n fetchProjectPermissions: function (projectId = null, callback) {\n let perm;\n if (!this.isNew()) {\n perm = new PJQ.models.permissions.ProjectPermissions({\n id: this.get('id'),\n projectId: projectId\n });\n } else {\n perm = new PJQ.models.permissions.ProjectPermissions({\n userTypeId: this.userType != null ? this.userType.id : null\n });\n }\n perm.fetch({\n success: _.bind(function () {\n callback(perm);\n }, this)\n });\n },\n fetchSystemNotificationSettings: function (callback) {\n let notificationSettings = null;\n if (!this.isNew()) {\n notificationSettings = new PJQ.models.notificationSettings.SystemNotificationSettings({\n id: this.get('id')\n });\n } else {\n notificationSettings = new PJQ.models.notificationSettings.SystemNotificationSettings({\n userTypeId: this.get('userTypeId')\n });\n }\n\n notificationSettings.fetch({\n success: _.bind(function () {\n callback(notificationSettings);\n }, this)\n });\n },\n fetchProjectNotificationSettings: function (projectId, callback) {\n let notificationSettings = null;\n if (!this.isNew()) {\n notificationSettings = new PJQ.models.notificationSettings.ProjectNotificationSettings({\n id: this.get('id'),\n projectId: projectId\n });\n } else {\n notificationSettings = new PJQ.models.notificationSettings.ProjectNotificationSettings({\n userTypeId: this.get('userTypeId'),\n projectId: projectId\n });\n }\n\n notificationSettings.fetch({\n success: _.bind(function () {\n callback(notificationSettings);\n }, this)\n });\n },\n unlinkUser: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n },\n {\n endpoint: 'user'\n }\n ])\n }).delete().done(_.bind(function () {\n this.userid = null;\n this.username = null;\n this.user = null;\n if (typeof callback === 'function') {\n callback();\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n\n }, this));\n },\n copyContact: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n },\n {\n endpoint: 'copy'\n }\n ])\n }).post().done(_.bind(function (model) {\n if (typeof callback === 'function') {\n callback(model);\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n\n }, this));\n },\n getVcard: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n },\n {\n endpoint: 'vcard'\n }\n ]));\n },\n showProjectHistory: function () {\n new PJQ.views.projects.ProjectParticipantHistoryModal({\n contactId: this.get('contactId')\n });\n },\n sendUpdater: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactId')\n },\n {\n endpoint: 'updater'\n }\n ])\n }).post().done(_.bind(function () {\n callback();\n }, this)).fail(function (xhr, err, result) {\n });\n },\n exportExcel: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.id\n },\n {\n endpoint: 'export'\n }\n ]));\n },\n beforeSave: function () {\n let flatCustomFields = this.get('contactCustomFieldValuesFlat');\n if (_.size(flatCustomFields) > 0) {\n let parsed = [];\n _.each(flatCustomFields, function (number, value) {\n parsed.push({\n fieldNumber: number,\n value: value\n });\n });\n this.set({\n contactCustomFieldValues: parsed,\n contactCustomFieldValuesFlat: null\n })\n }\n\n let flatCompanyCustomFields = this.get('companyCustomFieldValuesFlat');\n if (_.size(flatCompanyCustomFields) > 0) {\n let parsed = [];\n _.each(flatCompanyCustomFields, function (value, id) {\n parsed.push({\n id: id,\n value: value\n });\n });\n this.set({\n companyCustomFieldValues: parsed,\n contactCustomFieldValuesFlat: null\n })\n }\n\n if (this.groups) {\n this.set({\n groups: _.map(this.groups.models, function (group) {\n return {\n groupId: group.id,\n isDeleted: group.get('isDeleted')\n }\n })\n });\n }\n\n if (this.workAreas) {\n this.set({\n workAreas: _.map(this.workAreas.models, function (workArea) {\n return {\n contactWorkAreaId: workArea.id,\n workAreaId: workArea.get('workAreaId'),\n isDeleted: workArea.get('isDeleted')\n }\n })\n });\n }\n\n if (this.userType != null) {\n this.set('userTypeId', this.userType.id);\n }\n },\n approve: function (callback) {\n this.set('approvalUpdates', this.approvalUpdates ? this.approvalUpdates.toJSON() : null);\n this.save(null, {\n urlOptions: {\n approve: true\n },\n success: _.bind(function () {\n this.set('isApprovalRequired', false);\n callback();\n }, this),\n error: _.bind(callback, this)\n });\n },\n addCompanyCustomFieldValue: function (value) {\n this.attributes.companyCustomFieldValues = _.filter(this.attributes.companyCustomFieldValues, function (exValue) {\n return value.id !== exValue.id;\n });\n this.attributes.companyCustomFieldValues.push(value);\n },\n addContactCustomFieldValue: function () {\n this.attributes.contactCustomFieldValues = _.filter(this.attributes.contactCustomFieldValues, function (exValue) {\n return value.id !== exValue.id;\n });\n this.attributes.contactCustomFieldValues.push(value);\n },\n mergeCustomFields: function () {\n\n }\n});\n\nPJQ.models.contacts.EditHistoryItem = PJQ.models.BaseModel.extend({\n idAttribute: 'auditId'\n});\n\nPJQ.models.contacts.ApprovalUpdates = PJQ.models.BaseModel.extend({\n idAttribute: 'id'\n});\n\nPJQ.models.contacts.ContactCustomField = PJQ.models.customFields.CustomField.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'contactcustomfields',\n value: this.id\n }\n ])\n }\n});\n\nPJQ.models.contacts.CompanyCustomField = PJQ.models.customFields.CustomField.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'companycustomfields',\n value: this.id\n }\n ]);\n },\n});\n\nPJQ.models.contacts.CompanyPhoto = PJQ.models.BaseModel.extend({\n idAttribute: 'companyPhotoId',\n endpoint: function () {\n if (_.size(this.get('profileKey')) > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'profiles',\n value: this.get('profileKey')\n },\n {\n endpoint: 'companyphotos',\n value: this.id\n }\n ])\n } else if (this.get('contactCompanyId') > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactCompanyId')\n },\n {\n endpoint: 'photos',\n value: this.id\n }\n ])\n }\n }\n});\n\nPJQ.models.contacts.ContactFieldSetting = PJQ.models.BaseModel.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'fields'\n }\n ]);\n }\n});\n\nPJQ.models.contacts.ContactGroup = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n idAttribute: 'groupId'\n});\n\n//Collections\nPJQ.collections.contacts.ContactFieldSettings = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.ContactFieldSetting,\n endpoint: function () {\n let params;\n if (this.options.masterUserId > 0) {\n params = [\n {\n parameter: 'masterUserId',\n value: this.options.masterUserId\n }\n ];\n } else {\n params = null;\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'fields'\n }\n ], params)\n }\n});\n\nPJQ.collections.contacts.Contacts = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.Contact,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n }\n ]);\n },\n filteredByGroups: function (filter) {\n let groupContacts = PJQ.collections.contacts.Contacts();\n _.each(this.models, function (model) {\n if (model.checkHasGroup(filter))\n groupContacts.add(model);\n });\n return groupContacts;\n }\n});\n\nPJQ.collections.contacts.ContactInfoList = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.Contact,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'list'\n }\n ], [\n {\n parameter: 'contactIds',\n value: this.options.contactIds\n }\n ]);\n }\n});\n\nPJQ.collections.contacts.EditHistory = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.EditHistoryItem,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.options.contact.id\n },\n {\n endpoint: 'edithistory'\n }\n ]);\n }\n});\n\nPJQ.collections.contacts.CompanyPhotos = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.CompanyPhoto,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.get('contactCompanyId')\n },\n {\n endpoint: 'photos'\n }\n ]);\n }\n});\n\nPJQ.collections.contacts.ContactCustomFields = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.ContactCustomField,\n options: {\n masterUserId: null\n },\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'contactcustomfields'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.options.masterUserId ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n }\n ]);\n }\n});\n\nPJQ.collections.contacts.CompanyCustomFields = PJQ.collections.customFields.CustomFields.extend({\n model: PJQ.models.contacts.CompanyCustomField,\n options: {\n masterUserId: null\n },\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n },\n {\n endpoint: 'companycustomfields'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n }\n ]);\n }\n});\n\nPJQ.collections.contacts.ApprovalUpdates = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.ApprovalUpdates\n})\n\nPJQ.collections.contacts.ContactGroups = PJQ.collections.BaseCollection.extend({\n defaults: {\n isAPIv2: true\n },\n model: PJQ.models.contacts.ContactGroup,\n endpoint: function () {\n let params = [];\n if (this.options.projectId)\n params.push({\n parameter: 'projectId',\n value: this.options.projectId\n });\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.options.contactId\n },\n {\n endpoint: 'groups'\n }\n ], params);\n }\n});\n//Views\nPJQ.views.contacts.BaseEditContactView = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'contact-edit-base'),\n subTemplates: {\n sso: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'user-edit-sso'),\n },\n canEdit: true,\n alert: null,\n onSave: null,\n onCancel: null,\n onDelete: null\n },\n events: {\n \"click .btn-edit-permissions\": \"editPermissions\",\n \"click .btn-edit-notifications\": \"editNotifications\",\n \"change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell\": \"formatPhone\",\n \"keydown .contact-edit-phone-ext\": \"numbersOnly\",\n \"keyup .contact-edit-phone-ext\": \"numbersOnly\",\n \"click .btn-unlock-user\": \"unlockUser\",\n 'click .btn-unlink-user': 'unlinkContactUser',\n 'click .btn-send-user-reg': 'sendSignUp',\n \"click .btn-send-password-reset\": \"sendPasswordReset\",\n \"click .btn-screening-request-contact\": \"newScreeningRequest\",\n \"click .contact-edit-add\": \"addNew\",\n \"click .contact-edit-cancel\": \"cancel\",\n \"click .contact-edit-save\": \"save\",\n \"click .contact-edit-save-and-add-project\": \"saveAndAddToProject\",\n \"click .contact-edit-delete\": \"delete\",\n \"change .cb-sso-enabled\": \"userSSOChanged\"\n },\n beforeFirstRender: function () {\n this.options.project = this.options.project ? this.options.project : PJQ.app.session.project;\n\n let prefs = this.options.project ? this.options.project.preferences : PJQ.app.session.preferences,\n isUser = this.model && (this.model.get('id') < 0 || this.model instanceof PJQ.models.users.User);\n\n if (!this.options.fieldSettingsEnabled) {\n if (isUser) {\n this.options.fieldSettingsEnabled = prefs.hasPref(PJQ.constants.preferenceTypes.ENABLE_USER_FIELD_SETTINGS);\n } else {\n this.options.fieldSettingsEnabled = prefs.hasPref(PJQ.constants.preferenceTypes.ENABLE_CONTACT_FIELD_SETTINGS);\n }\n }\n\n if (!(this.options.masterUserId > 0)) {\n if (this.options.project != null) {\n this.options.masterUserId = this.options.project.get('masterUserId');\n }\n }\n\n let fetchContact = (callback) => {\n if (this.model == null) {\n this.model = new PJQ.models.contacts.Contact({\n id: this.options.contactId,\n country: \"US\"\n });\n } else if (_.size(this.model.get('country')) === 0) {\n this.model.set('country', 'US');\n }\n\n if (!this.model.isNew() && !this.model.isFetched) {\n this.model.fetch({\n success: _.bind(function () {\n this.listenTo(this.model, 'sync', this.render);\n callback();\n }, this)\n });\n } else {\n this.listenTo(this.model, 'sync', this.render);\n callback();\n }\n },\n fetchERP = (callback) => {\n PJQ.app.session.fetchERPIntegration(_.bind(function (erp) {\n this.erpIntegration = erp;\n if (this.erpIntegration != null) {\n this.model.fetchCompanyERPObject(_.bind(function () {\n callback();\n }, this));\n } else {\n callback();\n }\n }, this));\n },\n fnRender = () => {\n if (isUser) {\n PJQ.app.session.fetchUserCustomFields(this.options.masterUserId, _.bind(function (userCustomFields) {\n this.userCustomFields = userCustomFields;\n PJQ.app.session.fetchSSOProviders(_.bind(function (providers) {\n this.ssoProviders = providers;\n this.render();\n }, this));\n }, this));\n } else {\n this.render();\n PJQ.app.session.fetchCompanyCustomFields(this.options.masterUserId, _.bind(function (customFields) {\n this.companyCustomFields = customFields;\n if (this.isRendered) {\n this.renderCompanyCustomFields();\n }\n }, this));\n PJQ.app.session.fetchContactCustomFields(this.options.masterUserId, _.bind(function (customFields) {\n this.contactCustomFields = customFields;\n if (this.isRendered) {\n this.renderContactCustomFields();\n }\n }, this));\n }\n };\n\n fetchContact(() => {\n fetchERP(() => {\n if (this.options.fieldSettingsEnabled) {\n if (isUser) {\n PJQ.app.session.fetchUserFieldSettings(this.options.masterUserId, _.bind(function (settings) {\n this.coreFieldSettings = settings;\n fnRender();\n }, this));\n } else {\n PJQ.app.session.fetchContactFieldSettings(this.options.masterUserId, _.bind(function (settings) {\n this.coreFieldSettings = settings;\n fnRender();\n }, this));\n }\n } else {\n fnRender();\n }\n });\n })\n },\n beforeRender: function () {\n let mod = this.company != null ? this.company : this.model;\n if (mod == null || (this.options.fieldSettingsEnabled && this.coreFieldSettings == null)) {\n return false;\n }\n\n this.initPermissionOptions();\n this.initViewOptions();\n\n this.listenTo(mod, 'change:isActive', function () {\n this.render();\n });\n\n this.listenTo(mod, 'change:itbUser change:pmUser', function () {\n this.featuresDidChange = true;\n });\n this.featuresDidChange = false;\n\n this.options.showScreenings = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_SCREENINGS);\n },\n renderERP: function () {\n let company;\n if (this.company != null) {\n company = this.company;\n } else {\n company = this.model;\n }\n\n let isUser = ((company instanceof PJQ.models.users.User) || (company instanceof PJQ.models.projectContacts.ProjectContact && this.model.id < 0));\n if (this.erpIntegration == null || isUser) {\n return;\n }\n\n let $modal = this.$el.closest('.modal-content');\n $modal.find('.erp-badge').html(PJQ.helpers.erp.getERPBadge(company.erpSyncStatus(), company.get('externalObject')));\n PJQ.helpers.erp.renderERPButtons($modal.find('.erp-sync'), {\n pushSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_VENDORS),\n status: company.erpSyncStatus(true),\n unlinkSupported: this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.UNLINK_VENDOR),\n });\n $modal.find('.btn-push-erp').off().on('click', () => this.pushERP());\n $modal.find('.btn-undo-push-erp').off().on('click', () => this.undoPushERP());\n $modal.find('.btn-unlink-erp').off().on('click', () => this.unlinkERP());\n },\n pushERP: async function () {\n if (this.erpIntegration == null || !this.erpIntegration.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_VENDORS)) {\n return;\n }\n\n let mod = this.company != null ? this.company : this.model,\n fnPush = () => {\n this.erpIntegration.pushVendor(mod, () => {\n PJQ.notifications.notify.successNotify({\n message: 'Company pushed to ERP'\n });\n this.render();\n });\n };\n\n if (mod.isNew()) {\n this.save(() => {\n fnPush();\n });\n } else {\n fnPush();\n }\n },\n undoPushERP: function () {\n let mod = this.company != null ? this.company : this.model;\n if (this.erpIntegration == null || mod.erpSyncStatus() !== PJQ.constants.integrations.erp.syncStatuses.REVIEWING) {\n return;\n }\n\n this.erpIntegration.undoPush(mod, () => {\n PJQ.notifications.notify.successNotify({\n message: 'Company removed from ERP approval'\n });\n this.render();\n });\n },\n unlinkERP: function () {\n if (this.erpIntegration == null) {\n return;\n }\n\n new PJQ.views.modals.YesNo({\n header: \"Unlink from ERP\",\n body: \"Are you sure you want to unlink this Company from your ERP system?\",\n onYes: () => {\n let loader = new PJQ.Loader(this.$('.modal-content')),\n mod = this.company != null ? this.company : this.model;\n this.erpIntegration.unlinkVendor(mod, (success) => {\n if (success) {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Company unlinked from ERP'\n });\n this.render();\n }\n });\n }\n });\n },\n initViewOptions: function () {\n let mod = this.company != null ? this.company : this.model;\n this.options.groupLevels = null;\n this.options.maxGroups = null;\n if (PJQ.app.session.project != null) {\n // in a project/contact context, all contacts must have a Contact Name and a Phone, to match with old system logic per Bart.\n if (mod.id > 0) {\n this.options.allowMultipleEmails = !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.SUB_RESTRICT_SINGLE_EMAIL);\n }\n\n // if this is a contact editing their own contact record\n if (!this.options.isAdmin) {\n if (mod.id > 0 && this.options.isSelfEdit) {\n this.options.allowMultipleEmails = !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.SUB_RESTRICT_SINGLE_EMAIL);\n }\n }\n\n this.options.prevailingWageLabel = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PREVAILING_WAGE_LABEL);\n\n this.options.groupLevels = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS);\n this.options.maxGroups = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT);\n } else {\n this.options.prevailingWageLabel = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PREVAILING_WAGE_LABEL);\n this.options.groupLevels = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS);\n this.options.maxGroups = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.RESTRICT_GROUP_COUNT);\n }\n\n if (this.options.isAdmin && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP)) {\n this.options.maxGroups = null;\n }\n },\n initPermissionOptions: function () {\n this.options.enablePermissions = true;\n\n let mod = this.company != null ? this.company : this.model;\n this.options.isSelfEdit = false;\n this.options.canModifyAttachments = false;\n if (!mod.isNew()) {\n let sessionUserId = PJQ.app.session.user != null ? PJQ.app.session.user.id : null,\n sessionContactId = PJQ.app.session.contact != null ? PJQ.app.session.contact.id : null;\n if (((sessionUserId != null && mod.get('userId') === sessionUserId)) ||\n (sessionContactId != null && mod.get('contactId') === sessionContactId)) {\n this.options.isSelfEdit = true;\n }\n\n if (mod.id > 0)\n this.options.canModifyAttachments = PJQ.app.session.hasPermission('contacts.canViewAttachments');\n }\n\n this.options.isAdmin = false;\n this.options.isPrequalVisible = false;\n this.options.canEdit = false;\n this.options.canModifyNotifications = false;\n this.options.canViewCustomFields = true;\n this.options.canEditCustomFields = false;\n let isUser = ((mod instanceof PJQ.models.users.User) || (mod instanceof PJQ.models.projectContacts.ProjectContact && mod.id < 0));\n if (mod.isNew()) {\n this.options.canEdit = true;\n this.options.canEditCustomFields = true;\n this.options.isAdmin = PJQ.app.session.get('masterUserId') > 0;\n this.options.canModifyNotifications = this.options.isAdmin && PJQ.app.session.hasPermission('users.canModifyNotifications');\n this.options.canModifyAttachments = !isUser && PJQ.app.session.hasPermission('contacts.canViewAttachments');\n } else if (this.options.isSelfEdit) {\n this.options.canEdit = true;\n this.options.canEditCustomFields = true;\n this.options.isAdmin = PJQ.app.session.hasPermission('settings.canManageUsers') && (PJQ.app.session.user != null && mod.get('masterUserId') === PJQ.app.session.user.get('masterUserId'));\n this.options.canModifyNotifications = this.options.isAdmin && PJQ.app.session.hasPermission('users.canModifyNotifications');\n } else if ((((isUser || mod.id < 0) && PJQ.app.session.hasPermission('settings.canManageUsers'))\n || (mod.id > 0 && PJQ.app.session.hasPermission('contacts.isAdmin')) || (mod.id > 0 && PJQ.app.session.hasPermission('contacts.canEditContact')))\n && mod.get('masterUserId') === PJQ.app.session.get('masterUserId')) {\n this.options.canEdit = true;\n this.options.canViewCustomFields = mod.get('masterUserId') === PJQ.app.session.get('masterUserId');\n this.options.canEditCustomFields = true;\n this.options.isAdmin = (this.options.project == null || this.options.project.hasPermission('projectContacts.isAdmin')) && mod.get('masterUserId') === PJQ.app.session.get('masterUserId');\n this.options.isPrequalVisible = !isUser && mod.get('masterUserId') === PJQ.app.session.get('masterUserId') && PJQ.app.session.hasPermission('prequal.canView');\n this.options.canModifyNotifications = this.options.isAdmin && PJQ.app.session.hasPermission('users.canModifyNotifications');\n } else if (mod.get('masterUserId') === 39) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DIRECTORY_EDIT)) {\n this.options.canEdit = true;\n }\n this.options.canEditCustomFields = true;\n }\n this.options.isPrequalVisible = !mod.isNew() && !this.options.isSelfEdit && !isUser && mod.get('masterUserId') === PJQ.app.session.get('masterUserId') && PJQ.app.session.hasPermission('prequal.canView');\n\n this.options.isCompanyUser = mod instanceof PJQ.models.users.User || mod.id < 0;\n },\n renderData: function () {\n return {\n isContact: this.model.get('id') > 0 || (this.model.isNew() && !(this.model instanceof PJQ.models.users.User)),\n isUser: this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User)),\n model: this.model,\n userTypes: PJQ.app.session.userTypes.getByIsCompany(this.options.isCompanyUser),\n isUserTypeRequired: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE) && this.options.isCompanyUser,\n prevailingWageLabel: this.options.prevailingWageLabel,\n checkFieldVisible: _.bind(this.checkFieldVisible, this),\n checkFieldRequired: _.bind(this.checkFieldRequired, this),\n maxGroups: this.options.maxGroups ? this.options.maxGroups : 0,\n isSelfEdit: this.options.isSelfEdit,\n alert: this.options.alert,\n enablePermissions: this.options.enablePermissions,\n canEdit: this.options.canEdit,\n canViewCustomFields: this.options.canViewCustomFields,\n canEditCustomFields: this.options.canEditCustomFields,\n ssoProviders: this.ssoProviders,\n isAdmin: this.options.isAdmin,\n isPrequalVisible: this.options.isPrequalVisible,\n canModifyNotifications: this.options.canModifyNotifications,\n canModifyAttachments: this.options.canModifyAttachments,\n userCustomFields: this.userCustomFields,\n showScreenings: this.options.showScreenings\n };\n },\n afterRender: function () {\n if (this.model == null || (!this.model.isFetched && !this.model.isNew())) {\n new PJQ.Loader(this.$('.modal-body'));\n } else {\n if (this.options.masterUserId == null) {\n this.options.masterUserId = this.model.get('masterUserId');\n }\n this.renderERP();\n this.renderContact();\n }\n },\n checkFieldRequired: function (fieldName) {\n if (!this.checkFieldVisible(fieldName) || !this.options.canEdit) {\n return false;\n }\n\n if (!this.options.isSelfEdit && fieldName === 'userType')\n return true;\n\n if (this.coreFieldSettings == null) {\n let prefs;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else {\n prefs = PJQ.app.session.preferences;\n }\n switch (fieldName) {\n case 'contactName':\n case 'email':\n return true;\n case 'address1':\n case 'address2':\n case 'city':\n case 'state':\n return false;\n case 'country':\n return (!this.options.isAdmin && prefs.hasPref(PJQ.constants.preferenceTypes.SUB_ADDRESS_REQUIRED)) ||\n (this.options.isAdmin && (prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_CORE) || ((prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP) && prefs.hasPref(PJQ.constants.preferenceTypes.SUB_ADDRESS_REQUIRED)))));\n case 'zip':\n return (!this.options.isAdmin && prefs.hasPref(PJQ.constants.preferenceTypes.SUB_ZIP_REQUIRED)) ||\n (this.options.isAdmin && (prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_CORE) || ((prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP) && prefs.hasPref(PJQ.constants.preferenceTypes.SUB_ZIP_REQUIRED)))));\n case 'phone':\n return !this.options.isAdmin ||\n prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_CORE) ||\n (prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP) && prefs.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_CONTACT_UPDATE_REQ));\n case 'laborStatus':\n return this.checkFieldVisible(fieldName) && !prefs.hasPref(PJQ.constants.preferenceTypes.NO_REQUIRE_UNION_SUB) &&\n (!this.options.isAdmin || prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP));\n case 'groups':\n let isUser = (this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User)));\n if (isUser) {\n return false;\n }\n return prefs.hasPref(PJQ.constants.preferenceTypes.ALLOW_SUB_GROUP_EDIT_REQUIRED) &&\n (this.options.isSelfEdit || prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP));\n }\n } else {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return !this.options.isAdmin ? fieldSettings.get('isRequiredContact') : fieldSettings.get('isRequiredAdmin');\n }\n }\n return false;\n },\n checkFieldVisible: function (fieldName) {\n // special fields\n if (fieldName === 'title' && (this.model == null ? false : (this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User))))) {\n return false;\n } else if (this.options.isSelfEdit && (fieldName === 'userType' || fieldName === 'companyNotes' || fieldName === 'contactNotes' || fieldName === 'active')) {\n return false;\n } else if (!this.options.isSelfEdit && fieldName === 'userType') {\n return true;\n }\n\n if (this.coreFieldSettings == null) {\n let prefs;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else {\n prefs = PJQ.app.session.preferences;\n }\n let result;\n switch (fieldName) {\n case 'sector':\n result = !prefs.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_SECTOR);\n break;\n case 'laborStatus':\n result = prefs.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS) !== true;\n if (!this.options.isAdmin) {\n if (result && prefs.hasPref(PJQ.constants.preferenceTypes.CAN_EDIT_UNION_STATUS_SUB)) {\n result = prefs.getPref(PJQ.constants.preferenceTypes.CAN_EDIT_UNION_STATUS_SUB);\n }\n }\n break;\n case 'classifications':\n result = prefs.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_HIDE_MINORITY_STATUS) === false &&\n (this.options.isAdmin || prefs.getPref(PJQ.constants.preferenceTypes.CAN_EDIT_MINORITY_CLASS_SUB));\n break;\n case 'groups':\n result = !(this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User)));\n break;\n default:\n result = true;\n }\n return result;\n } else {\n let fieldSettings = this.coreFieldSettings.findWhere({fieldName: fieldName});\n if (fieldSettings != null) {\n return this.options.isSelfEdit ? fieldSettings.get('isVisibleContact') : fieldSettings.get('isVisibleAdmin');\n }\n }\n return true;\n },\n renderContact: function () {\n if (this.checkFieldVisible('userType') !== false) {\n let isCompanyUser = (this.model instanceof PJQ.models.users.User || this.model.id < 0),\n defaultUserType = (!isCompanyUser && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE)) ? null : (this.model.get('userTypeId') != null ? this.model.get('userTypeId') : null);\n this.userTypePicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-user-type'),\n noneSelectedText: 'Select Value',\n isIntChoices: true,\n defaultValue: this.model.userType ? this.model.userType.id : defaultUserType,\n onChange: _.bind(function (value) {\n this.model.set('userTypeId', value);\n this.model.userType = PJQ.app.session.userTypes.getById(value);\n }, this)\n });\n }\n\n let statePicker = new PJQ.inputs.StatePicker({\n el: this.$('.contact-edit-state'),\n country: this.model.get('country') ?? null,\n defaultValue: this.model.get('state') ?? null,\n size: 20,\n onChange: (value) => {\n this.model.set('state', value);\n }\n });\n\n new PJQ.inputs.CountryPicker({\n el: this.$('.contact-edit-country'),\n defaultValue: this.model.get('country') ?? null,\n statePicker: statePicker,\n zipInput: this.$('.contact-edit-zip'),\n enableInternational: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_INTERNATIONAL_COUNTRIES),\n size: 20,\n onChange: (value) => {\n this.model.set('country', value);\n }\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-selection-status'),\n noneSelectedText: 'Select Value',\n defaultValue: this.model.get('isAutoSelectDisabled'),\n onChange: _.bind(function (value) {\n this.model.set('isAutoSelectDisabled', value === \"true\");\n }, this)\n });\n\n if (this.options.canEdit) {\n new PJQ.Binder(this.$el, this.model);\n }\n\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-phone'));\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-fax'));\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-cell'));\n\n this.renderLaborStatus(this.model);\n this.renderSector(this.model);\n this.renderMinority(this.model);\n\n if (this.$('#contactInfoCollapseContainer').length > 0) {\n new PJQ.views.collapse.BaseCollapse({\n el: this.$('#contactInfoCollapseContainer'),\n onShown: _.bind(function (id) {\n switch (id) {\n case 'prequalCollapse':\n this.renderPrequal();\n break;\n case 'screeningCollapse':\n this.renderScreenings();\n break;\n case 'contactEditWorkAreasCollapse':\n if (this.workAreaMap == null || this.workAreaMap.options.contactId !== this.model.id) {\n if (this.model.workAreas != null) {\n this.renderWorkAreas();\n }\n } else {\n this.workAreaMap.refresh();\n }\n break;\n case 'companyAttachmentsCollapse':\n this.renderCompanyAttachments();\n break;\n }\n }, this)\n });\n } else {\n this.renderWorkAreas();\n }\n\n if (!(this.model instanceof PJQ.models.users.User) && (this.model.id > 0 || this.model.isNew())) {\n if (this.model.groups != null) {\n this.renderGroupSelector();\n }\n\n if (this.options.canViewCustomFields) {\n this.renderCompanyCustomFields();\n this.renderContactCustomFields();\n }\n }\n\n\n if (this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User))) {\n\n if (this.model.groups != null && this.checkFieldVisible('groups'))\n this.renderGroupSelector();\n\n if (this.options.canViewCustomFields) {\n this.renderUserCustomFields();\n }\n if (this.options.isAdmin) {\n this.renderSSO();\n }\n }\n\n this.isRendered = true;\n },\n renderPrequal: function () {\n if (!PJQ.app.session.hasPermission('prequal.canView') || !PJQ.app.session.subscription.hasFeature('projectmessaging')) {\n // this element shouldn't even be rendered if the user doesn't meet this criteria\n // but we remove it just for good measure\n this.$('.prequal-section').remove();\n return;\n }\n\n if (this.prequalEditor != null) {\n return;\n }\n\n let contact;\n if (!this.model.isNew()) {\n contact = this.model.clone();\n } else {\n contact = _.find(this.company.contacts.models, function (compContact) {\n return compContact.id > 0;\n });\n }\n if (contact != null) {\n let self = this,\n mod = this.company != null ? this.company : this.model;\n let fnRender = function () {\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.PROFILE, 'Screening-Editor-Dashboard'), self.$('.company-prequal-data'), {\n prequal: mod.prequal,\n isAdmin: self.options.isAdmin,\n isPrequalVisible: self.options.isPrequalVisible\n }, function ($outer) {\n self.$('.company-prequal-data .prequal-export-pdf').click(function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: contact.get('contactId')\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: mod.prequal.get('masterUserId') > 0 ? mod.prequal.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n },\n {\n parameter: 'isExcel',\n value: false\n }\n ]));\n });\n\n self.$('.company-prequal-data .prequal-export-excel').click(function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: contact.get('contactId')\n },\n {\n endpoint: 'prequal'\n },\n {\n endpoint: 'export'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: mod.prequal.get('masterUserId') > 0 ? mod.prequal.get('masterUserId') : (PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.app.session.get('masterUserId'))\n },\n {\n parameter: 'isExcel',\n value: true\n }\n ]));\n });\n\n self.prequalEditor = new PJQ.views.prequal.PrequalEditor({\n el: $outer.find('.screening-dashboard-body'),\n isAdmin: self.model.get('masterUserId') === PJQ.app.session.user.get('masterUserId'),\n canEdit: PJQ.app.session.hasPermission('prequal.canEdit'),\n clients: new PJQ.collections.screenings.ScreeningClients(),\n navContainer: $outer.find('.screening-dashboard-nav-extend'),\n preferences: PJQ.app.session.preferences,\n model: mod.prequal,\n contact: contact,\n onContactChange: function (contact, ch) {\n if (contact.id === self.model.id) {\n self.model.groups = contact.groups;\n self.model.workAreas = contact.workAreas;\n self.model.set(ch.prop, ch.value);\n mod.set(ch.prop, ch.value);\n self.renderContact();\n }\n },\n onCompanyCustomFieldChange: function (ch) {\n if (self.companyCustomFieldsForm != null && ch != null && ch.id > 0) {\n _.each(self.model.attributes.companyCustomFieldValues, function (cfv) {\n if (cfv.id === ch.id) {\n cfv.value = ch.value;\n }\n });\n\n self.companyCustomFieldsForm.setValue(ch.id, ch.value);\n }\n },\n onContactCustomFieldChange: function (ch) {\n if (self.contactCustomFieldsForm != null && ch != null && ch.id > 0) {\n _.each(self.model.attributes.contactCustomFieldValues, function (cfv) {\n if (cfv.id === ch.id) {\n cfv.value = ch.value;\n }\n });\n\n self.contactCustomFieldsForm.setValue(ch.id, ch.value);\n }\n }\n });\n });\n };\n if (mod.prequal == null || !mod.prequal.isFetched) {\n mod.prequal = new PJQ.models.prequal.Prequal({\n contact: contact\n });\n mod.prequal.fetch({\n success: function () {\n fnRender();\n }\n });\n } else {\n mod.prequal.contact = contact;\n fnRender();\n }\n }\n },\n renderScreenings: function () {\n if (!this.options.isAdmin) {\n // this element shouldn't even be rendered if the user isnt an admin\n // but we remove it just for good measure\n this.$('.screening-section').remove();\n return;\n }\n\n let contactId = null;\n if (!this.model.isNew()) {\n contactId = this.model.id;\n } else if (this.company != null) {\n let contact = _.find(this.company.contacts.models, function (compContact) {\n return compContact.id > 0;\n });\n if (contact != null) {\n contactId = contact.id;\n }\n }\n\n if (this.screenings == null && contactId != null) {\n let self = this;\n this.screenings = new PJQ.models.screenings.ScreeningClient({\n masterUserId: PJQ.app.session.get('masterUserId'),\n contactId: contactId\n });\n this.screenings.fetch({\n success: _.bind(function () {\n let $screenings = this.$('.contact-screenings');\n if (_.size(this.screenings.categories) > 0) {\n this.screeningEditor = new PJQ.views.screenings.ScreeningClientEditor({\n el: $screenings,\n canManage: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROQUAL_CUSTOMER),\n isAdmin: self.options.isAdmin,\n model: this.screenings\n });\n } else {\n $screenings.empty();\n new PJQ.Alert($screenings, {\n text: 'This contact has not been requested to complete any screening items'\n });\n }\n }, this)\n })\n }\n },\n newScreeningRequest: function () {\n new PJQ.views.addressbook.ProqualRequestModal({\n contactId: this.model.id,\n onSend: _.bind(function () {\n this.screenings = null;\n this.renderScreenings();\n }, this)\n });\n },\n renderCompanyAttachments: function () {\n if (!PJQ.app.session.hasPermission('contacts.canViewAttachments')) {\n return;\n }\n if (this.companyAttachmentFileUploader == null) {\n\n let sortSettings;\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.SORT_COMPANY_ATTACHMENTS))\n sortSettings = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.SORT_COMPANY_ATTACHMENTS);\n\n this.companyAttachmentFileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.company-documents'),\n collection: this.model.attachments,\n sortBy: sortSettings ? sortSettings.sortBy : null,\n sortDirection: sortSettings ? (sortSettings.sortBy ? 'asc' : 'desc') : null,\n // canDelete: this.options.canEdit && this.options.isAdmin,\n previewImageDimension: 150,\n canUpload: PJQ.app.session.hasPermission('contacts.canEditContact'),\n canDownloadAll: true,\n onSuccess: _.bind(function () {\n this.model.isDirty = true;\n }, this),\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n attachment.destroy();\n }\n this.model.isDirty = true;\n callback();\n }, this)\n });\n }\n },\n renderLaborStatus: function (mod) {\n if (this.checkFieldVisible('laborStatus') && mod != null) {\n let laborStatus = [];\n if (mod.get('isUnion')) {\n laborStatus.push('union');\n }\n if (mod.get('isNonUnion')) {\n laborStatus.push('nonUnion');\n }\n if (mod.get('isPrevailingWage')) {\n laborStatus.push('prevWage');\n }\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-labor-status'),\n noneSelectedText: 'Select Value',\n isMultiple: true,\n isDisabled: !this.options.canEdit,\n defaultValue: laborStatus,\n onChange: _.bind(function (value) {\n mod.set({\n isUnion: (value?.indexOf(\"union\") ?? -1) !== -1,\n isNonUnion: (value?.indexOf(\"nonUnion\") ?? -1) !== -1,\n isPrevailingWage: (value?.indexOf(\"prevWage\") ?? -1) !== -1\n });\n\n //temporary fix for api call on contact overriding the company in the address book\n // we set this.company to the same as mod (if it exists)\n if (this.company != null) {\n this.company.set({\n isUnion: (value?.indexOf(\"union\") ?? -1) !== -1,\n isNonUnion: (value?.indexOf(\"nonUnion\") ?? -1) !== -1,\n isPrevailingWage: (value?.indexOf(\"prevWage\") ?? -1) !== -1\n });\n }\n }, this)\n });\n }\n },\n renderSector: function (mod) {\n if (this.checkFieldVisible('sector') && mod != null) {\n let sectors = [];\n if (mod.get('isPrivateSector')) {\n sectors.push('privateSector');\n }\n if (mod.get('isPublicSector')) {\n sectors.push('publicSector');\n }\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-sector'),\n noneSelectedText: 'Select Value',\n isMultiple: true,\n isDisabled: !this.options.canEdit,\n defaultValue: sectors,\n onChange: _.bind(function (value) {\n mod.set({\n isPrivateSector: value.indexOf(\"privateSector\") !== -1,\n isPublicSector: value.indexOf(\"publicSector\") !== -1,\n });\n\n //temporary fix for api call on contact overriding the company in the address book\n // we set this.company to the same as mod (if it exists)\n if (this.company != null) {\n this.company.set({\n isPrivateSector: value.indexOf(\"privateSector\") !== -1,\n isPublicSector: value.indexOf(\"publicSector\") !== -1,\n });\n }\n }, this)\n });\n }\n },\n renderMinority: function (mod) {\n if (this.checkFieldVisible('classifications') && mod != null) {\n let minorityClass = [];\n if (mod.get('isDBE')) {\n minorityClass.push('isDBE');\n }\n if (mod.get('isDVBE')) {\n minorityClass.push('isDVBE');\n }\n if (mod.get('isMBE')) {\n minorityClass.push('isMBE');\n }\n if (mod.get('isSBE')) {\n minorityClass.push('isSBE');\n }\n if (mod.get('isSDVBE')) {\n minorityClass.push('isSDVBE');\n }\n if (mod.get('isWBE')) {\n minorityClass.push('isWBE');\n }\n\n if (minorityClass.length === 0)\n minorityClass.push('NA');\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-minority-class'),\n noneSelectedText: 'Select Value',\n isMultiple: true,\n isDisabled: !this.options.canEdit,\n defaultValue: minorityClass,\n exclusiveChoices: \"NA\",\n onChange: _.bind(function (value) {\n mod.set({\n isDBE: value.indexOf(\"isDBE\") !== -1,\n isDVBE: value.indexOf(\"isDVBE\") !== -1,\n isMBE: value.indexOf(\"isMBE\") !== -1,\n isSBE: value.indexOf(\"isSBE\") !== -1,\n isSDVBE: value.indexOf(\"isSDVBE\") !== -1,\n isUDBE: value.indexOf(\"isUDBE\") !== -1,\n isVSBE: value.indexOf(\"isVSBE\") !== -1,\n isWBE: value.indexOf(\"isWBE\") !== -1\n });\n\n //temporary fix for api call on contact overriding the company in the address book\n // we set this.company to the same as mod (if it exists)\n if (this.company != null) {\n this.company.set({\n isDBE: value.indexOf(\"isDBE\") !== -1,\n isDVBE: value.indexOf(\"isDVBE\") !== -1,\n isMBE: value.indexOf(\"isMBE\") !== -1,\n isSBE: value.indexOf(\"isSBE\") !== -1,\n isSDVBE: value.indexOf(\"isSDVBE\") !== -1,\n isUDBE: value.indexOf(\"isUDBE\") !== -1,\n isVSBE: value.indexOf(\"isVSBE\") !== -1,\n isWBE: value.indexOf(\"isWBE\") !== -1\n });\n }\n }, this)\n });\n }\n },\n renderGroupSelector: function () {\n let $groups = this.$('.contact-edit-groups');\n if (_.size($groups) > 0) {\n if (this.groupSelector != null) {\n this.groupSelector.remove();\n }\n\n this.groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.contact-edit-groups'),\n contactId: this.model != null ? this.model.id : null,\n groupLevels: this.options.groupLevels,\n groupUserId: this.options.masterUserId,\n selectedGroups: this.model.groups,\n maxGroups: this.options.maxGroups,\n detectGroupLevels: this.options.detectGroupLevels,\n isAdmin: this.options.canEdit && !this.options.isSelfEdit && !(PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK) || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DIRECTORY_EDIT)),\n canEdit: this.options.canEdit,\n onGroupSelected: _.bind(this.groupsChanged, this)\n });\n }\n },\n groupsChanged: function (data) {\n this.model.isDirty = true;\n },\n sendPasswordReset: function () {\n this.model.sendPasswordReset(_.bind(function () {\n let $container = this.$('.btn-send-password-reset').closest('div');\n $container.html('<div class=\"fs-16 text-success\"><i class=\"fal fa-check mr-1\"></i>Password Reset Sent</div>');\n }, this));\n },\n unlinkContactUser: function () {\n if (this.model.user != null) {\n this.model.unlinkUser(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'User successfully unlinked from contact'\n });\n this.render();\n }, this));\n }\n },\n sendSignUp: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.model.id\n },\n {\n endpoint: 'requestsignup'\n },\n ])\n }).post().done(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Sign up link sent'\n });\n this.$('button.btn-send-user-reg').remove();\n this.$('.sign-up-alert').replaceWith('<div class=\"fs-16 text-success\"><i class=\"fal fa-check mr-1\"></i>Sign-Up Link Sent</div>');\n }, this)).fail(function (xhr, err, result) {\n\n });\n },\n userSSOChanged: function () {\n this.model.set('isSSOEnabled', this.$('.cb-sso-enabled').prop('checked'));\n this.renderSSO();\n },\n renderSSO: function () {\n if (this.model.get('isSSOEnabled')) {\n this.$('.btn-send-password-reset').addClass('hidden');\n } else {\n this.$('.btn-send-password-reset').removeClass('hidden');\n }\n this.renderSubTemplate(false, this.options.subTemplates.sso, this.$('.user-sso'), {\n model: this.model,\n ssoProviders: this.ssoProviders\n }, _.bind(function () {\n this.tagSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-sso-provider'),\n defaultValue: this.model.get('samlId'),\n noneSelectedText: 'Default Provider',\n isIntChoices: true,\n onChange: _.bind(function (value) {\n this.model.set('samlId', value);\n }, this)\n });\n }, this));\n },\n renderUserCustomFields: function () {\n let $cf = this.$('.user-custom-fields');\n if (this.userCustomFields != null) {\n if (_.size(this.userCustomFields.models) > 0) {\n this.$('.user-custom-fields-outer').removeClass('hidden');\n\n let reqField = _.find(this.userCustomFields.models, function (customField) {\n return customField.get('isRequired');\n }, this);\n if (reqField != null) {\n this.$('.user-custom-fields-header').html('Additional User Details ' + PJQ.constants.markup.requiredAst);\n }\n\n let cfArray = [];\n _.each(this.userCustomFields.models, function (field) {\n let fieldValue = _.find(this.model.get('userCustomFieldValues'), function (cfv) {\n return cfv && cfv.id === field.get('id');\n }, this);\n if (_.size(field.get('defaultValue')) > 0 && (fieldValue == null || fieldValue.value == null || (typeof fieldValue.value !== 'number' && typeof fieldValue.value !== 'boolean' && _.size(fieldValue.value) === 0))) {\n let defaultValue;\n switch (field.get('fieldType')) {\n case 'CHOICE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'CHOICEMULTIPLE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'BOOL':\n defaultValue = field.get('defaultValue') === 'true';\n break;\n default:\n defaultValue = field.get('defaultValue');\n break;\n }\n\n if (fieldValue != null) {\n fieldValue.value = defaultValue;\n } else {\n fieldValue = {\n id: field.get('id'),\n fieldNumber: field.get('fieldNumber'),\n value: defaultValue\n }\n }\n }\n if (fieldValue != null) {\n cfArray.push(fieldValue);\n }\n }, this);\n this.model.set({\n 'userCustomFieldValues': cfArray\n }, {\n silent: true\n });\n\n this.userCustomFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: $cf,\n isAdmin: true,\n isEdit: this.options.canEdit,\n collection: this.userCustomFields,\n fieldValues: this.model.get('userCustomFieldValues'),\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n }\n },\n renderCompanyCustomFields: function () {\n let $cf = this.$('.company-custom-fields');\n if (this.companyCustomFields != null && (this.model.id > 0 || this.model.isNew()) && $cf.length > 0) {\n if (_.size(_.filter(this.companyCustomFields.models, _.bind(function (field) {\n return (!this.options.isSelfEdit || field.get('isVisibleInRSVP'));\n }, this))) > 0) {\n this.$('.company-custom-fields-outer').removeClass('hidden');\n\n let reqField = _.find(this.companyCustomFields.models, function (customField) {\n return (!this.options.isAdmin && customField.get('isRequired')) || customField.get('isRequiredAdmin');\n }, this);\n if (reqField != null) {\n this.$('.company-custom-fields-header').html('Additional Company Details ' + PJQ.constants.markup.requiredAst);\n }\n\n let cfAdmin = PJQ.app.session.user != null && (this.model.get('masterUserId') === PJQ.app.session.user.get('masterUserId') || this.model.isNew());\n if (this.companyCustomFields != null) {\n let cfArray = [];\n _.each(this.companyCustomFields.models, function (field) {\n let fieldValue = _.find(this.model.get('companyCustomFieldValues'), function (cfv) {\n return cfv && cfv.id === field.get('id');\n }, this);\n if (_.size(field.get('defaultValue')) > 0 && (fieldValue == null || fieldValue.value == null || (typeof fieldValue.value !== 'number' && typeof fieldValue.value !== 'boolean' && _.size(fieldValue.value) === 0))) {\n let defaultValue;\n switch (field.get('fieldType')) {\n case 'CHOICE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'CHOICEMULTIPLE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'BOOL':\n defaultValue = field.get('defaultValue') === 'true';\n break;\n default:\n defaultValue = field.get('defaultValue');\n break;\n }\n\n if (fieldValue != null) {\n fieldValue.value = defaultValue;\n } else {\n fieldValue = {\n id: field.get('id'),\n fieldNumber: field.get('fieldNumber'),\n value: defaultValue\n }\n }\n }\n if (fieldValue != null) {\n cfArray.push(fieldValue);\n }\n }, this);\n this.model.set({\n 'companyCustomFieldValues': cfArray\n }, {\n silent: true\n });\n }\n\n this.companyCustomFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: $cf,\n isAdmin: cfAdmin,\n isEdit: this.options.canEditCustomFields,\n collection: this.companyCustomFields,\n fieldValues: this.model.get('companyCustomFieldValues'),\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n }\n },\n renderContactCustomFields: function () {\n let $cf = this.$('.contact-custom-fields');\n if (this.contactCustomFields != null && $cf.length > 0) {\n if (_.size(_.filter(this.contactCustomFields.models, _.bind(function (field) {\n return (!this.options.isSelfEdit || field.get('isVisibleInRSVP'));\n }, this))) > 0) {\n this.$('.contact-custom-fields-outer').removeClass('hidden');\n\n let reqField = _.find(this.contactCustomFields.models, function (customField) {\n return (!this.options.isAdmin && customField.get('isRequired')) || customField.get('isRequiredAdmin');\n }, this);\n if (reqField != null) {\n this.$('.contact-custom-fields-header').html('Additional Contact Details ' + PJQ.constants.markup.requiredAst);\n }\n\n let cfAdmin = PJQ.app.session.user != null && (this.model.get('masterUserId') === PJQ.app.session.user.get('masterUserId') || this.model.isNew());\n if (this.contactCustomFields != null) {\n let cfArray = [];\n _.each(this.contactCustomFields.models, function (field) {\n let fieldValue = _.find(this.model.get('contactCustomFieldValues'), function (cfv) {\n return cfv && cfv.id === field.get('id');\n }, this);\n if (_.size(field.get('defaultValue')) > 0 && (fieldValue == null || fieldValue.value == null || (typeof fieldValue.value !== 'number' && typeof fieldValue.value !== 'boolean' && _.size(fieldValue.value) === 0))) {\n let defaultValue;\n switch (field.get('fieldType')) {\n case 'CHOICE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'CHOICEMULTIPLE':\n defaultValue = parseInt(field.get('defaultValue'));\n break;\n case 'BOOL':\n defaultValue = field.get('defaultValue') === 'true';\n break;\n default:\n defaultValue = field.get('defaultValue');\n break;\n }\n\n if (fieldValue != null) {\n fieldValue.value = defaultValue;\n } else {\n fieldValue = {\n id: field.get('id'),\n fieldNumber: field.get('fieldNumber'),\n value: defaultValue\n }\n }\n }\n if (fieldValue != null) {\n cfArray.push(fieldValue);\n }\n }, this);\n this.model.set({\n 'contactCustomFieldValues': cfArray\n }, {\n silent: true\n });\n }\n\n this.contactCustomFieldsForm = new PJQ.views.customFields.CustomFieldsForm({\n el: $cf,\n isAdmin: cfAdmin,\n isEdit: this.options.canEditCustomFields,\n collection: this.contactCustomFields,\n fieldValues: this.model.get('contactCustomFieldValues'),\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n }\n },\n renderWorkAreas: function () {\n let $workAreas = this.$('.contact-edit-work-areas');\n if (_.size($workAreas) > 0) {\n this.workAreaMap = new PJQ.views.workAreas.WorkAreaMap({\n el: $workAreas,\n collection: this.model.workAreas,\n isInline: false,\n isEdit: this.options.canEdit,\n isSync: false,\n contactId: this.model.id,\n onChange: _.bind(function () {\n this.model.isDirty = true;\n }, this),\n onDelete: _.bind(function () {\n this.model.isDirty = true;\n }, this)\n });\n }\n },\n countryChanged: function () {\n let country = this.model.get('country') && this.model.get('country').length > 0 ? this.model.get('country').toLowerCase() : 'us',\n options = '<option value=\"\">Select Value</option>';\n _.each(PJQ.constants.states[country], function (state) {\n options += '<option value=\"' + state.abbreviation.toLowerCase() + '\">' + state.name + '</option>';\n });\n this.statePicker.$el.html(options);\n this.statePicker.refresh();\n if (this.model.get('state'))\n this.statePicker.setValue(this.model.get('state').toLowerCase());\n\n PJQ.helpers.inputHelpers.inputMaskZip(this.$('.contact-edit-zip'), country);\n },\n formatPhone: function (e) {\n let target = $(e.currentTarget);\n target.val(PJQ.helpers.formatHelpers.formatPhoneNumber(target.val()));\n },\n numbersOnly: function (e) {\n if (e.keyCode === 86 && (e.ctrlKey === true || e.metaKey === true)) {\n return true;\n } else {\n return PJQ.helpers.inputHelpers.numbersOnly(e);\n }\n },\n editPermissions: function () {\n new PJQ.views.permissions.PermissionsEditorModal({\n model: this.model,\n project: this.options.project\n });\n },\n editNotifications: function () {\n new PJQ.views.notificationSettings.NotificationSettingsEditorModal({\n model: this.model,\n project: this.options.project\n });\n },\n validateCoreFields: function () {\n let hasError = false,\n $scrollTo = null;\n if (this.checkFieldRequired('companyName')) {\n let $company = this.$('.contact-edit-company');\n if ($company.length > 0) {\n PJQ.helpers.inputHelpers.setInputError($company, true);\n if (_.size(this.model.get('companyName')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($company, false);\n hasError = true;\n }\n }\n }\n\n if (this.checkFieldRequired('contactName')) {\n let $contactName = this.$('.contact-edit-name');\n PJQ.helpers.inputHelpers.setInputError($contactName, true);\n if (_.size(this.$('.contact-edit-name').val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($contactName, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('title')) {\n let $title = this.$('.contact-edit-title');\n PJQ.helpers.inputHelpers.setInputError($title, true);\n if (_.size(this.model.get('title')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($title, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('phone')) {\n let $phone = this.$('.contact-edit-phone');\n PJQ.helpers.inputHelpers.setInputError($phone, true);\n if (_.size(this.model.get('phone')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($phone, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('cell')) {\n let $cell = this.$('.contact-edit-cell');\n PJQ.helpers.inputHelpers.setInputError($cell, true);\n if (_.size(this.model.get('cell')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($cell, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('fax')) {\n let $fax = this.$('.contact-edit-fax');\n PJQ.helpers.inputHelpers.setInputError($fax, true);\n if (_.size(this.model.get('fax')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($fax, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('email')) {\n let $email = this.$('.contact-edit-email');\n PJQ.helpers.inputHelpers.setInputError($email, true);\n if (_.size(this.model.get('email')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($email, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('address1')) {\n let $add1 = this.$('.contact-edit-address-1');\n PJQ.helpers.inputHelpers.setInputError($add1, true);\n if (_.size(this.model.get('address1')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($add1, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('address2')) {\n let $add2 = this.$('.contact-edit-address-2');\n PJQ.helpers.inputHelpers.setInputError($add2, true);\n if (_.size(this.model.get('address2')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($add2, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('city')) {\n let $city = this.$('.contact-edit-city');\n PJQ.helpers.inputHelpers.setInputError($city, true);\n if (_.size(this.model.get('city')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($city, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('state')) {\n let $state = this.$('.contact-edit-state');\n PJQ.helpers.inputHelpers.setInputError($state, true);\n if (_.size(this.model.get('state')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($state, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('zip')) {\n let $zip = this.$('.contact-edit-zip');\n PJQ.helpers.inputHelpers.setInputError($zip, true);\n if (_.size(this.model.get('zip')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($zip, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('country')) {\n let $country = this.$('.contact-edit-country');\n PJQ.helpers.inputHelpers.setInputError($country, true);\n if (_.size(this.model.get('country')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($country, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('laborStatus') && !(this.model instanceof PJQ.models.users.User) && (!(this.model instanceof PJQ.models.projectContacts.ProjectContact) || this.model.get('id') > 0)) {\n let $union = this.$('.contact-edit-labor-status,.company-edit-labor-status');\n PJQ.helpers.inputHelpers.setInputError($union, true);\n if (!this.model.get('isUnion') && !this.model.get('isNonUnion') && !this.model.get('isPrevailingWage')) {\n PJQ.helpers.inputHelpers.setInputError($union, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('classifications') && !(this.model instanceof PJQ.models.users.User) && (!(this.model instanceof PJQ.models.projectContacts.ProjectContact) || this.model.get('id') > 0)) {\n let $certifications = this.$('.contact-edit-minority-class,.contact-edit-minority-class');\n PJQ.helpers.inputHelpers.setInputError($certifications, true);\n if (!this.model.get('isDBE') && !this.model.get('isDVBE') && !this.model.get('isMBE') && !this.model.get('isSBE') && !this.model.get('isSDVBE') && !this.model.get('isWBE')) {\n PJQ.helpers.inputHelpers.setInputError($certifications, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldRequired('sector') && !(this.model instanceof PJQ.models.users.User) && (!(this.model instanceof PJQ.models.projectContacts.ProjectContact) || this.model.get('id') > 0)) {\n let $sector = this.$('.contact-edit-sector,.company-edit-sector');\n PJQ.helpers.inputHelpers.setInputError($sector, true);\n if (!this.model.get('isPublicSector') && !this.model.get('isPrivateSector')) {\n PJQ.helpers.inputHelpers.setInputError($sector, false);\n hasError = true;\n }\n }\n\n if (this.checkFieldVisible('userType') && !(this.model instanceof PJQ.models.users.User) && (!(this.model instanceof PJQ.models.projectContacts.ProjectContact) || this.model.get('id') > 0)) {\n let $usertype = this.$('.contact-edit-user-type');\n PJQ.helpers.inputHelpers.setInputError($usertype, true);\n if (!this.model.get('userTypeId')) {\n PJQ.helpers.inputHelpers.setInputError($usertype, false);\n hasError = true;\n }\n }\n\n if (hasError) {\n $scrollTo = this.$('.validation-error')\n }\n\n if (this.groupSelector != null) {\n this.groupSelector.hideError();\n if (this.checkFieldRequired('groups') && _.size(this.groupSelector.getGroupsData().selected) === 0) {\n this.groupSelector.showError('Please select at least one value');\n hasError = true;\n\n let $gac = this.$('#contactEditGroupsCollapse');\n if ($gac.length > 0) {\n if (!$gac.hasClass('show'))\n $gac.siblings('.card-header').click();\n\n if ($scrollTo == null) {\n $scrollTo = $gac;\n }\n } else if ($scrollTo == null) {\n $scrollTo = this.$('.contact-edit-groups');\n }\n }\n }\n\n if (this.workAreaMap != null) {\n this.workAreaMap.hideError();\n if (this.checkFieldRequired('workAreas') && _.size(_.filter(this.model.workAreas.models, function (workArea) {\n return !workArea.get('isDeleted')\n })) === 0) {\n hasError = true;\n\n let $wac = this.$('#contactEditWorkAreasCollapse');\n if ($wac.length > 0) {\n if (!$wac.hasClass('show'))\n $wac.siblings('.card-header').click();\n\n if ($scrollTo == null) {\n $scrollTo = $wac;\n }\n } else if ($scrollTo == null) {\n $scrollTo = this.$('.contact-edit-work-areas');\n }\n\n this.workAreaMap.showError('Please select at least one work area');\n }\n }\n\n return {\n valid: !hasError,\n $scrollTo: $scrollTo\n };\n },\n unlockUser: function () {\n this.model.unlock(_.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'User unlocked'\n });\n this.render();\n }, this));\n },\n saveAndAddToProject: function () {\n this.save(null, false, true);\n },\n save: function (e, isAddNew, isAddToProject, callback) {\n let hasError = false,\n $scrollTo = null;\n //only validate core contact information if they can actually edit it\n //they may only be able to edit the custom fields\n\n let errorText = 'Required fields are empty or have an incorrect value';\n if (this.options.canEdit) {\n let validate = this.validateCoreFields();\n if (!validate.valid) {\n hasError = true;\n $scrollTo = validate.$scrollTo;\n }\n\n if (this.model instanceof PJQ.models.users.User) {\n if (this.model.isNew()) {\n let $username = this.$('.input-username');\n PJQ.helpers.inputHelpers.setInputError($username, true);\n if (_.size(this.model.get('username')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($username, false);\n hasError = true;\n if ($scrollTo == null) {\n $scrollTo = $username;\n }\n }\n\n let $password = this.$('.input-password');\n PJQ.helpers.inputHelpers.setInputError($password, true);\n if (_.size(this.model.get('password')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($password, false);\n hasError = true;\n if ($scrollTo == null) {\n $scrollTo = $password;\n }\n }\n }\n\n let $itbUser = this.$('.cb-itb-user'),\n $pmUser = this.$('.cb-pm-user');\n PJQ.helpers.inputHelpers.setInputError($itbUser, true);\n PJQ.helpers.inputHelpers.setInputError($pmUser, true);\n if (!this.model.get('itbUser') && !this.model.get('pmUser')) {\n PJQ.helpers.inputHelpers.setInputError($itbUser, false);\n PJQ.helpers.inputHelpers.setInputError($pmUser, false);\n hasError = true;\n $scrollTo = this.$('.cb-itb-user');\n\n errorText = 'User must be enabled for either ITB or PM features';\n }\n }\n }\n\n if (this.options.canEditCustomFields) {\n if (this.contactCustomFieldsForm) {\n if (!this.contactCustomFieldsForm.validate()) {\n let $cac = this.$('#contactEditContactCustomFieldsCollapse');\n if (!$cac.hasClass('show'))\n $cac.siblings('.card-header').click();\n hasError = true;\n if ($scrollTo == null) {\n $scrollTo = this.contactCustomFieldsForm.$el;\n }\n }\n }\n if (this.companyCustomFieldsForm) {\n if (!this.companyCustomFieldsForm.validate()) {\n let $cac = this.$('#contactEditCompanyCustomFieldsCollapse');\n if (!$cac.hasClass('show'))\n $cac.siblings('.card-header').click();\n hasError = true;\n if ($scrollTo == null) {\n $scrollTo = this.companyCustomFieldsForm.$el;\n }\n }\n }\n\n if (this.userCustomFieldsForm) {\n if (!this.userCustomFieldsForm.validate()) {\n let $cac = this.$('#contactEditUserCustomFieldsCollapse');\n if (!$cac.hasClass('show'))\n $cac.siblings('.card-header').click();\n hasError = true;\n if ($scrollTo == null) {\n $scrollTo = this.userCustomFieldsForm.$el;\n }\n }\n }\n }\n\n if (hasError) {\n new PJQ.Alert(this.$('.validation-error'), {\n type: 'danger',\n text: errorText\n });\n\n if ($scrollTo != null) {\n this.scrollTo($scrollTo.offset().top);\n }\n return;\n } else {\n this.$('.validation-error').empty();\n\n if (this.options.isSelfEdit && !this.model.isDirty) {\n // this is a self edit context and the contact wasn't changed\n // don't save to the api to avoid getting added to the approval queue\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model);\n }\n return;\n }\n }\n\n let currentGroups = this.model.groups,\n currentCompanyCustomFieldValues = this.model.get('companyCustomFieldValues'),\n currentContactCustomFieldValues = this.model.get('contactCustomFieldValues'),\n currentUserCustomFieldValues = this.model.get('userCustomFieldValues');\n if (this.model.get('id') < 0 || (this.model.isNew() && (this.model instanceof PJQ.models.users.User))) {\n if (this.groupSelector != null) {\n this.model.groups.reset(this.groupSelector.getGroupsData().all);\n }\n\n this.model.set('userCustomFieldValues', this.userCustomFieldsForm != null ? this.userCustomFieldsForm.getChanged() : null);\n } else if (!(this.model.id < 0)) {\n if (this.groupSelector != null) {\n this.model.groups.reset(this.groupSelector.getGroupsData().all);\n }\n this.model.set('companyCustomFieldValues', this.companyCustomFieldsForm != null ? this.companyCustomFieldsForm.getChanged() : null);\n this.model.set('contactCustomFieldValues', this.contactCustomFieldsForm != null ? this.contactCustomFieldsForm.getChanged() : null);\n }\n\n let loader = new PJQ.Loader(this.$('.modal-content')),\n isNew = this.model.isNew();\n if (isNew && this.model instanceof PJQ.models.projectParticipants.ProjectParticipant) {\n this.model.set({\n isPreventAddToProject: !isAddToProject,\n isForceSaveExistingEmail: false\n });\n }\n\n let currentWorkAreas = new PJQ.collections.workAreas.ContactWorkAreas();\n if (isAddNew) {\n _.each(this.model.workAreas.models, _.bind(function (workArea) {\n if (!workArea.get('isDeleted')) {\n currentWorkAreas.add(new PJQ.models.workAreas.ContactWorkArea({\n country: workArea.get('country'),\n state: workArea.get('state'),\n county: workArea.get('county'),\n isDeleted: false,\n workAreaId: workArea.get('workAreaId')\n }));\n }\n }, this));\n }\n\n this.model.save(null, {\n notify: false,\n success: _.bind(function (model, data) {\n if (isAddNew) {\n this.model = new PJQ.models.projectParticipants.ProjectParticipant({\n projectId: PJQ.app.session.project.id,\n contactId: 0,\n contactCompanyId: this.model.get('contactCompanyId'),\n companyName: this.model.get('companyName'),\n masterUserId: PJQ.app.session.user.get('masterUserId'),\n address1: this.model.get('address1'),\n address2: this.model.get('address2'),\n city: this.model.get('city'),\n state: this.model.get('state'),\n country: this.model.get('country'),\n zip: this.model.get('zip'),\n phone: this.model.get('phone'),\n fax: this.model.get('fax'),\n groups: currentGroups,\n companyCustomFieldValues: currentCompanyCustomFieldValues,\n contactCustomFieldValues: currentContactCustomFieldValues,\n userCustomFieldValues: currentUserCustomFieldValues\n });\n this.model.groups = currentGroups;\n this.model.workAreas = currentWorkAreas;\n\n if (typeof this.options.onAddNew === 'function') {\n this.options.onAddNew(this.model);\n } else {\n this.render();\n }\n return;\n }\n\n let message = 'Successfully saved contact';\n if (this.options.isSelfEdit) {\n message = 'Successfully saved your info'\n\n if (this.featuresDidChange) {\n PJQ.app.session.fetchSystemPermissions(function () {\n PJQ.app.navigator.refreshCommands();\n });\n }\n } else {\n if (this.model instanceof PJQ.models.projectContacts.ProjectContact) {\n if (isNew) {\n PJQ.app.session.project.projectContacts.add(this.model);\n message = 'Successfully added project contact';\n } else {\n message = 'Successfully saved project contact';\n }\n } else if (this.model instanceof PJQ.models.projectParticipants.ProjectParticipant) {\n if (isNew) {\n PJQ.app.session.project.participants.add(this.model);\n message = isAddToProject ? 'Successfully added bid participant' : 'Successfully saved contact';\n } else {\n message = 'Successfully saved contact';\n }\n } else if (this.model instanceof PJQ.models.users.User) {\n if (isNew) {\n PJQ.app.session.users.add(this.model);\n message = 'Successfully added user';\n } else {\n message = 'Successfully saved user';\n }\n }\n }\n PJQ.notifications.notify.successNotify({\n message: message\n });\n\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model, isNew);\n }\n\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this),\n error: _.bind(function (model, response) {\n if (typeof callback === 'function') {\n callback(true);\n }\n\n loader.remove();\n if (response.responseJSON && response.responseJSON.message) {\n if (response.responseJSON.message === 'ACTIVE_USERS_EXCEEDS_SEATS') {\n PJQ.app.session.subscription.getCostsPerUser(_.bind(function (changeCosts) {\n let subscription = PJQ.app.session.subscription,\n cost;\n switch (subscription.id) {\n case PJQ.constants.subscriptions.types.BASIC:\n cost = changeCosts.basic;\n break;\n case PJQ.constants.subscriptions.types.PRO:\n cost = changeCosts.pro;\n break;\n case PJQ.constants.subscriptions.types.ENTERPRISE:\n cost = changeCosts.enterprise;\n break;\n default:\n cost = 0;\n break;\n }\n let userSeatModal = new PJQ.views.modals.YesNo({\n header: \"Not Enough User Seats\",\n body: \"You don't have enough user seats to activate this user. Would you like to add one? \" + PJQ.helpers.formatHelpers.formatCurrency(cost, 2, true) + \" will be charged to your credit card on file.\",\n onYes: _.bind(function () {\n PJQ.app.session.changeUserSeats(PJQ.app.session.subscription.get('userSeats') + 1, _.bind(function () {\n userSeatModal.removeModal();\n this.save();\n }, this), _.bind(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Encountered an error adding user seats. Please contact customer service.'\n });\n this.removeModal();\n }, this));\n }, this)\n });\n }, this));\n return;\n } else if (response.responseJSON.message === 'EmailExists') {\n new PJQ.views.modals.YesNo({\n header: \"Email Exists\",\n body: \"Another contact in your Address Book has this email address already. Do you still want to save this record?\",\n onYes: _.bind(function () {\n this.model.set('isForceSaveExistingEmail', true);\n loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n success: _.bind(function () {\n let message = 'Successfully saved contact';\n if (isNew) {\n PJQ.app.session.project.participants.add(this.model);\n message = isAddToProject ? 'Successfully added bid participant' : 'Successfully saved contact';\n }\n PJQ.notifications.notify.successNotify({\n message: message\n });\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.model, isNew);\n }\n\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this),\n error: function () {\n loader.remove();\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to save'\n });\n }\n }, this);\n }, this)\n });\n return;\n } else if (response.responseJSON.message === 'USERNAME_EXISTS') {\n new PJQ.Alert(this.$('.validation-error'), {\n type: 'danger',\n text: 'The entered username is already taken'\n });\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-username'), false);\n return;\n }\n }\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to save'\n });\n }, this)\n });\n },\n scrollTo: function (y) {\n if (typeof this.options.scrollTo === 'function') {\n this.options.scrollTo(y);\n } else {\n this.$el.animate({\n scrollTop: y\n }, 500);\n }\n },\n cancel: function () {\n if (this.model.isDirty && this.options.canEdit) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.model.restore();\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n }, this)\n });\n } else if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(this.model);\n }\n },\n delete: function () {\n let message = \"Are you sure you want to delete this contact?\";\n if (this.model instanceof PJQ.models.users.User) {\n message = \"Are you sure you want to delete this user?\";\n } else if (this.model instanceof PJQ.models.projectContacts.ProjectContact) {\n message = \"Are you sure you want to remove this contact from the project?\";\n } else if (this.model instanceof PJQ.models.projectParticipants.ProjectParticipant) {\n message = \"Are you sure you want to remove this bid participant from the project?\";\n }\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: message,\n onDelete: _.bind(function () {\n this.model.destroy();\n if (this.model instanceof PJQ.models.projectContacts.ProjectContact && PJQ.app.session.project.projectContacts != null) {\n PJQ.app.session.project.projectContacts.remove(this.model.id);\n message = \"Are you sure you want to remove this contact from the project?\";\n } else if (this.model instanceof PJQ.models.projectParticipants.ProjectParticipant) {\n PJQ.app.session.project.participants.remove(this.model.id);\n message = \"Are you sure you want to remove this bid participant from the project?\";\n }\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(this.model);\n }\n }, this)\n });\n }\n});\n\nPJQ.views.contacts.BaseEditContactModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-contact-edit-base'),\n canEdit: true,\n minWidth: 600,\n maxWidth: 1200,\n isShowAddContact: false,\n alert: null,\n onDelete: _.noop,\n onCancel: _.noop,\n onSave: _.noop\n },\n events: {\n \"click .btn-edit-permissions\": \"editPermissions\",\n \"click .btn-edit-notifications\": \"editNotifications\",\n \"change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell\": \"formatPhone\",\n \"keydown .contact-edit-phone-ext\": \"numbersOnly\",\n \"click .btn-send-password-reset\": \"sendPasswordReset\",\n \"click .contact-edit-add\": \"addNew\",\n \"click .contact-edit-cancel\": \"cancel\",\n \"click .contact-edit-save\": \"save\",\n \"click .contact-edit-save-without-approval\": \"saveWithoutApproval\",\n \"click .contact-edit-save-and-add-project\": \"saveAndAddToProject\",\n \"click .contact-edit-delete\": \"delete\"\n },\n beforeModalCreated: function () {\n if (this.model == null) {\n this.model = new PJQ.models.contacts.Contact({\n id: this.options.contactId\n });\n }\n this.listenTo(this.model, 'sync', this.render);\n if (!this.model.isNew() && !this.model.isFetched) {\n this.model.fetch();\n } else if (!this.isRendered) {\n this.render();\n }\n },\n beforeRender: function () {\n PJQ.views.contacts.BaseEditContactView.prototype.initPermissionOptions.call(this);\n },\n renderData: function () {\n return {\n model: this.model,\n isSelfEdit: this.options.isSelfEdit,\n isShowAddContact: this.options.isShowAddContact,\n deleteLabel: this.options.deleteLabel ? this.options.deleteLabel : 'Delete',\n canEdit: this.options.canEdit,\n canEditCustomFields: this.options.canEditCustomFields,\n enablePermissions: this.options.enablePermissions,\n isAdmin: this.options.isAdmin,\n canModifyNotifications: this.options.canModifyNotifications\n };\n },\n shouldRenderInnerView: function () {\n return this.model != null && (this.model.isNew() || this.model.isFetched);\n },\n getContactElement: function () {\n return this.$('.modal-body');\n },\n afterRender: function () {\n if (this.shouldRenderInnerView()) {\n let $cel = this.getContactElement(),\n opts = _.extend(this.getInnerViewOptions(), {\n el: $cel,\n len: $cel.length,\n scrollTo: _.bind(function (y) {\n $('div.modal').animate({\n scrollTop: y\n }, 500);\n }, this),\n onAddNew: _.bind(function (model) {\n this.model = model;\n this.render();\n }, this),\n onSave: _.bind(function (model, isNew, options = {contextClosed: true}) {\n if (options.contextClosed !== false) {\n this.removeModal();\n }\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(model, isNew);\n }\n }, this),\n onCancel: _.bind(function (model, options = {contextClosed: true}) {\n if (options.contextClosed !== false) {\n this.removeModal();\n }\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel(model);\n }\n }, this),\n onDelete: _.bind(function (model, options = {contextClosed: true}) {\n if (options.contextClosed !== false) {\n this.removeModal();\n }\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(model);\n }\n }, this)\n });\n this.editView = new (this.getInnerViewType())(opts);\n }\n },\n getInnerViewType: function () {\n return PJQ.views.contacts.BaseEditContactView;\n },\n getInnerViewOptions: function () {\n return {\n model: this.model,\n modal: this\n };\n },\n editPermissions: function () {\n this.editView.editPermissions();\n },\n editNotifications: function () {\n this.editView.editNotifications();\n },\n addNew: function () {\n this.editView.save(null, true);\n },\n saveAndAddToProject: function () {\n this.editView.saveAndAddToProject(...arguments);\n },\n save: function () {\n this.editView.save(...arguments);\n },\n cancel: function () {\n this.editView.cancel(...arguments);\n },\n delete: function () {\n this.editView.delete(...arguments);\n }\n});\n\nPJQ.views.contacts.SelectContactsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-contacts-select'),\n onCancel: _.noop,\n onSave: _.noop,\n hideContacts: null,\n hideEmails: null,\n disableBadEmail: false,\n disableBlacklisted: false,\n disableContacts: null,\n isSingleChoice: true,\n contacts: null,\n showAddress: false,\n context: PJQ.constants.contacts.contexts.CONTACTS,\n minWidth: '500px',\n width: '100%',\n maxWidth: '1000px',\n userTypeFilter: null,\n isUserTypeFilterDisabled: false,\n titleOverride: null,\n canSwitchContext: false,\n hideUsers: false,\n shouldHideContacts: false,\n enableSelectAll: false,\n saveButtonText: 'Save'\n },\n events: {\n \"change .select-contact\": \"selectContact\",\n \"click .contacts-select-cancel\": \"cancel\",\n \"click .contacts-select-save\": \"save\",\n 'click .switch-context': 'switchContext',\n 'click .project-contacts-new-contact': 'newContactClicked',\n 'click .project-contacts-add-from-bid-participants': 'addFromBidParticipants',\n 'click .project-contacts-add-from-address-book': 'addFromAddressBook',\n 'click .project-contacts-quick-search': 'quickSearch',\n 'click .project-contacts-add-from-project': 'addFromProject',\n 'click .project-contacts-add-from-company': 'addFromCompany',\n 'click .select-all-contacts': 'selectAllContacts',\n },\n beforeModalCreated: function () {\n this.options.project = PJQ.app.session.project ? PJQ.app.session.project : null;\n this.options.isAdmin = this.options.project ? this.options.project.hasPermission('projectContacts.isAdmin') : false;\n this.selectedContact = this.options.isSingleChoice ? null : [];\n\n let context = this.options.context;\n if (context === PJQ.constants.contacts.contexts.USERS) {\n if (this.users == null) {\n this.users = new PJQ.collections.users.Users();\n this.listenTo(this.users, 'sync', this.render);\n this.users.fetch();\n } else {\n this.listenTo(this.users, 'sync', this.render);\n }\n } else {\n if (this.options.contacts) {\n this.contacts = this.options.contacts;\n }\n if (this.contacts == null) {\n let contactsRef = [];\n let fnGet = _.bind(function (ctx) {\n switch (ctx) {\n case PJQ.constants.contacts.contexts.PARTICIPANTS:\n return PJQ.app.session.project.participants;\n case PJQ.constants.contacts.contexts.PROJECTCONTACTS:\n return PJQ.app.session.project.projectContacts;\n case PJQ.constants.contacts.contexts.CONTACTS:\n default:\n return new PJQ.collections.contacts.Contacts();\n }\n }, this);\n this.forParticipants = false;\n if (PJQ.helpers.objectHelpers.refinedType(this.options.context) === 'array') {\n _.each(this.options.context, function (ctx) {\n contactsRef.push(fnGet(ctx));\n\n if (ctx === PJQ.constants.contacts.contexts.PARTICIPANTS) {\n this.forParticipants = true;\n }\n }, this);\n } else {\n this.contacts = fnGet(this.options.context);\n\n if (this.options.context === PJQ.constants.contacts.contexts.PARTICIPANTS) {\n this.forParticipants = true;\n }\n }\n\n let fnContinue = _.bind(function () {\n if (_.size(contactsRef) > 0) {\n this.contacts = new PJQ.collections.contacts.Contacts();\n let fnFetch = (index) => {\n if (_.size(contactsRef) > index) {\n contactsRef[index].fetch({\n success: _.bind(function (ctn) {\n this.contacts.add(ctn.models);\n fnFetch(index + 1);\n }, this)\n });\n } else {\n this.render();\n }\n };\n fnFetch(0);\n } else if (this.options.context !== PJQ.constants.contacts.contexts.CONTACTS && !this.contacts.isFetched) {\n this.contacts.fetch();\n this.listenTo(this.contacts, 'reset update', _.bind(function () {\n this.render();\n }, this));\n\n this.listenTo(this.contacts, 'sync', _.bind(function () {\n this.dataTable.refresh('page');\n }, this));\n }\n }, this)\n\n if (this.forParticipants) {\n this.options.project.getProjectStatuses(_.bind(function (statuses) {\n this.projectStatuses = statuses;\n fnContinue();\n }, this));\n } else {\n fnContinue();\n }\n } else {\n this.listenTo(this.contacts, 'reset update', _.bind(function () {\n this.render();\n }, this));\n\n this.listenTo(this.contacts, 'sync', _.bind(function () {\n this.dataTable.refresh('page');\n }, this));\n }\n }\n },\n beforeRender: function () {\n if (this.options.titleOverride) {\n this.options.title = this.options.titleOverride;\n } else {\n if (this.options.context === PJQ.constants.contacts.contexts.USERS) {\n this.options.title = \"Select User\";\n } else if (this.options.context === PJQ.constants.contacts.contexts.PROJECTCONTACTS) {\n this.options.title = \"Select Project Contact\";\n } else if (this.options.context === PJQ.constants.contacts.contexts.PARTICIPANTS) {\n this.options.title = \"Select Bid Participant\";\n } else if (this.options.context === PJQ.constants.contacts.contexts.COMPANIES) {\n this.options.title = \"Select Company\"\n } else {\n this.options.title = \"Select Contact\";\n }\n }\n\n if (!this.options.isSingleChoice) {\n this.options.title += 's';\n }\n this.renderData = {\n options: this.options\n };\n },\n afterRender: function () {\n let columns = [],\n isUsersOnly = this.options.context === PJQ.constants.contacts.contexts.USERS;\n if (isUsersOnly) {\n columns = [\n {\n \"data\": \"attributes.id\",\n \"title\": !this.options.enableSelectAll ? \"\" : '<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-contacts\" /><div class=\"state p-primary ml-auto\"><label class=\"wd-0\"> </label></div></div>',\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let isSelected = false;\n if (this.selectedContact != null) {\n if (this.options.isSingleChoice && this.selectedContact != null) {\n isSelected = this.selectedContact.id === data;\n } else {\n isSelected = _.find(this.selectedContact, function (contact) {\n return data === contact.id;\n }) != null;\n }\n }\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\"' + (isSelected ? ' checked ' : '') + ' class=\"select-contact\" ' + (row.get('isBlacklisted') ? 'disabled' : '') + '/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this)\n },\n {\n 'title': \"Active\",\n \"data\": \"attributes.isActive\",\n 'width': '40px',\n \"render\": _.bind(function (data, type, row) {\n let content = '';\n if (data === true) {\n content = '<i class=\"fas fa-circle\" style=\"color: #5cb85c\"><div hidden>true</div></i>'\n } else {\n content = '<i class=\"fas fa-circle\" style=\"color: #d9534f\"><div hidden>false</div></i>'\n }\n return content\n })\n },\n {\n \"title\": \"Type\",\n \"width\": \"120px\",\n \"orderable\": true,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let userType;\n if (row.userType != null) {\n userType = row.userType;\n } else {\n userType = PJQ.app.session.userTypes.getDefault(row.get('id') < 0);\n }\n if (type === 'sort') {\n return userType.get('sortOrder');\n }\n return '<span style=\"color:' + userType.get('color') + ';\">' + userType.get('name') + '</span>';\n }, this)\n },\n {\"data\": \"attributes.contactName\", \"title\": \"Contact Name\"},\n {\"data\": \"attributes.email\", \"title\": \"Email\"}\n ];\n } else {\n columns = [\n {\n \"data\": \"attributes.id\",\n \"title\": !this.options.enableSelectAll ? \"\" : '<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\" class=\"select-all-contacts\" /><div class=\"state p-primary ml-auto\"><label class=\"wd-0\"> </label></div></div>',\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let isSelected = false, isDisabled = false;\n\n if (this.selectedContact != null) {\n if (this.options.isSingleChoice) {\n isSelected = this.selectedContact.id === data;\n } else {\n isSelected = _.find(this.selectedContact, function (contact) {\n return data === contact.id;\n }) != null;\n }\n }\n\n if (row.get('isBlacklisted')) {\n isDisabled = true\n } else if (this.options.disableContacts) {\n if (this.options.isSingleChoice) {\n if (this.options.disableContacts.id === data) {\n isDisabled = true;\n }\n } else {\n if (_.find(this.options.disableContacts, function (disableContact) {\n return disableContact.id === data;\n }) !== undefined) {\n isSelected = true;\n isDisabled = true;\n }\n }\n }\n\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\" ' + (isSelected ? 'checked' : '') + (isDisabled ? ' disabled' : '') + ' class=\"select-contact\"/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this)\n },\n {\n \"data\": \"userType\",\n \"title\": \"Type\",\n \"width\": \"120px\",\n \"orderable\": true,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let userType;\n if (row.userType != null) {\n userType = row.userType;\n } else {\n userType = PJQ.app.session.userTypes.getDefault(row.get('id') < 0);\n }\n if (type === 'sort') {\n return userType.get('sortOrder');\n }\n return '<span style=\"color:' + userType.get('color') + ';\">' + userType.get('name') + '</span>';\n }, this)\n },\n {\"data\": \"attributes.companyName\", \"title\": \"Company Name\"},\n {\"data\": \"attributes.contactName\", \"title\": \"Contact Name\"},\n {\"data\": \"attributes.email\", \"title\": \"Email\"}\n ];\n\n if (this.projectStatuses != null) {\n columns.push({\n \"data\": \"attributes.status\",\n \"title\": 'Status',\n \"width\": \"80px\",\n \"render\": _.bind(function (data, type, row) {\n let status = _.size(data) > 0 ? data.toUpperCase() : 'PENDING';\n return '<span style=\"color:' + this.getStatusColor(status) + '\">' + status + '</span>';\n }, this)\n });\n }\n }\n\n if (this.options.showAddress) {\n columns.push({\"data\": \"attributes.address1\", \"title\": \"Address\"});\n columns.push({\"data\": \"attributes.city\", \"title\": \"City\"});\n columns.push({\"data\": \"attributes.state\", \"title\": \"State\"});\n }\n\n let getPageCallback = null,\n data;\n if (this.options.context === PJQ.constants.contacts.contexts.CONTACTS) {\n getPageCallback = _.bind(function (pageNumber, pageSize, orderArr, callback) {\n let order = orderArr[0];\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n }], [\n {\n parameter: 'search',\n value: this.$('.datatable-search').val(),\n includeIfEmpty: false\n },\n {\n parameter: 'page',\n value: pageNumber\n },\n {\n parameter: 'pageSize',\n value: pageSize\n },\n {\n parameter: 'orderBy',\n value: order.name,\n },\n {\n parameter: 'orderDirection',\n value: order.direction\n },\n {\n parameter: 'userTypes',\n value: this.dataTable ? this.dataTable.userTypeFilter : null,\n includeIfEmpty: false\n },\n {\n parameter: 'projectId',\n value: this.options.project ? this.options.project.id : null,\n includeIfEmpty: false\n }\n ])\n }).get().success(_.bind(function (data) {\n let newContacts = new PJQ.collections.contacts.Contacts(data.contacts);\n callback(newContacts.models, data.totalRows);\n }, this)).fail(_.bind(function (xhr) {\n callback();\n }, this));\n }, this);\n } else if (this.options.context === PJQ.constants.contacts.contexts.COMPANIES) {\n getPageCallback = _.bind(function (pageNumber, pageSize, orderArr, callback) {\n let order = orderArr[0];\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'companiessimple'\n }], [\n {\n parameter: 'search',\n value: this.$('.datatable-search').val(),\n includeIfEmpty: false\n },\n {\n parameter: 'page',\n value: pageNumber\n },\n {\n parameter: 'pageSize',\n value: pageSize\n },\n {\n parameter: 'orderBy',\n value: order.name,\n },\n {\n parameter: 'orderDirection',\n value: order.direction\n },\n {\n parameter: 'userTypes',\n value: this.dataTable ? this.dataTable.userTypeFilter : null,\n includeIfEmpty: false\n },\n {\n parameter: 'projectId',\n value: this.options.project ? this.options.project.id : null,\n includeIfEmpty: false\n }\n ])\n }).get().success(_.bind(function (data) {\n let newContacts = new PJQ.collections.contacts.Contacts(data.companies);\n callback(newContacts.models, data.totalRows);\n }, this)).fail(_.bind(function (xhr) {\n callback();\n }, this));\n }, this);\n } else {\n data = this.getContactsList();\n }\n\n if (_.size(data) > 0 && this.options.hideUsers) {\n data = _.filter(data, function (model) {\n return model.get('contactId') > 0;\n }, this)\n }\n\n if (_.size(data) > 0 && this.options.shouldHideContacts) {\n data = _.filter(data, function (model) {\n return model.get('contactId') == null;\n }, this)\n }\n\n let userTypes,\n zeroRecordsLabel,\n emptyTableLabel;\n\n if ((this.options.context === PJQ.constants.contacts.contexts.USERS)) {\n userTypes = PJQ.app.session.userTypes.getByIsCompany(true);\n zeroRecordsLabel = \"No users match the search criteria\";\n if (_.size(data) === 0 && _.size(this.users.models) > 0) {\n emptyTableLabel = \"All users have already been added\";\n } else {\n emptyTableLabel = \"You don't have any other users in your company\";\n }\n } else if (this.options.context === PJQ.constants.contacts.contexts.PARTICIPANTS) {\n userTypes = PJQ.app.session.userTypes.getByIsCompany(false);\n zeroRecordsLabel = \"No bid participants match the search criteria\";\n if (_.size(data) === 0 && _.size(this.contacts.models) > 0) {\n emptyTableLabel = \"All bid participants have already been added\";\n } else {\n emptyTableLabel = \"No bid participants have been added to this project\";\n }\n } else if (this.options.context === PJQ.constants.contacts.contexts.PROJECTCONTACTS) {\n userTypes = PJQ.app.session.userTypes.getByIsCompany();\n zeroRecordsLabel = \"No project contacts match the search criteria\";\n if (_.size(data) === 0 && (this.contacts == null || _.size(this.contacts.models) > 0)) {\n emptyTableLabel = \"All project contacts have already been added\";\n } else {\n emptyTableLabel = \"No project contacts have been added to this project\";\n }\n } else {\n if (this.options.context === PJQ.constants.contacts.contexts.CONTACTS) {\n userTypes = PJQ.app.session.userTypes.getByIsCompany(false);\n } else {\n userTypes = _.union(PJQ.app.session.userTypes.getByIsCompany(), PJQ.app.session.userTypes.getByIsCompany(false));\n }\n zeroRecordsLabel = \"No contacts match the search criteria\";\n if (_.size(data) === 0 && (this.contacts == null || _.size(this.contacts.models) > 0)) {\n emptyTableLabel = \"All contacts have already been added\";\n } else {\n emptyTableLabel = \"No contacts match the search criteria\";\n }\n }\n\n this.dataTable = new PJQ.views.contacts.ContactSelectDataTable({\n el: this.$('.contacts-data-table'),\n data: data,\n deferRender: true,\n order: this.options.context === PJQ.constants.contacts.contexts.USERS ? [2, 'asc'] : [1, 'asc'],\n columns: columns,\n userTypeFilter: this.options.userTypeFilter,\n isUserTypeFilterDisabled: this.options.isUserTypeFilterDisabled,\n headerData: {\n userTypes: userTypes,\n projectStatuses: this.projectStatuses,\n filterGroups: this.forParticipants,\n context: this.options.context,\n isAdmin: this.options.isAdmin\n },\n language: {\n emptyTable: emptyTableLabel,\n zeroRecords: zeroRecordsLabel\n },\n getPageCallback: getPageCallback,\n createdRow: _.bind(this.createdRow, this)\n });\n },\n getStatusColor: function (name) {\n let status = _.find(this.projectStatuses, function (status) {\n return status.name.toUpperCase() === name.toUpperCase();\n });\n\n return status != null ? status.backgroundColor : \"#eee\";\n },\n switchContext: function () {\n this.options.context = this.options.context === PJQ.constants.contacts.contexts.CONTACTS ? PJQ.constants.contacts.contexts.USERS : PJQ.constants.contacts.contexts.CONTACTS\n this.render();\n },\n getContactsList: function () {\n let contacts = [];\n if (this.users != null && this.users.length > 0)\n contacts = _.union(contacts, this.users.models);\n if (this.contacts != null && this.contacts.length > 0)\n contacts = _.union(contacts, this.contacts.models);\n\n if (this.options.hideContacts) {\n if (this.options.isSingleChoice) {\n contacts = _.filter(contacts, _.bind(function (contact) {\n return (contact.id !== this.options.hideContacts.id);\n }, this));\n } else {\n contacts = _.filter(contacts, _.bind(function (contact) {\n return _.find(this.options.hideContacts, function (hideContact) {\n return hideContact.id === contact.id;\n }) == null;\n }, this));\n }\n }\n\n if (this.options.hideEmails && Array.isArray(this.options.hideEmails) && _.size(this.options.hideEmails) > 0) {\n let hideEmailsLower = this.options.hideEmails.map(email => email.toLowerCase());\n contacts = _.filter(contacts, (contact) => {\n let contactEmail = contact.get('email')?.toLowerCase();\n return !hideEmailsLower.includes(contactEmail);\n });\n }\n\n return contacts;\n },\n createdRow: function (row, data, dataIndex) {\n if (data.attributes.isBlacklisted)\n $(row).css({cssText: 'text-decoration: line-through !important;'});\n },\n selectAllContacts: function (e) {\n let $target = $(e.currentTarget),\n isChecked = $target.prop('checked');\n\n if (!isChecked) {\n this.selectedContact = (this.options.isSingleContact ? null : []);\n } else {\n this.selectedContact = this.getContactsList();\n }\n\n this.$('.select-contact').prop('checked', isChecked);\n this.$('.contacts-select-save').prop('disabled', this.selectedContact == null || _.size(this.selectedContact) === 0);\n },\n selectContact: function (e) {\n let target = $(e.currentTarget),\n isSelected = target.prop('checked');\n if (this.options.isSingleChoice)\n this.$('.select-contact').not(target).prop('checked', false);\n\n let data = this.dataTable.dataTable.row(target.parents('tr')).data();\n if (isSelected) {\n if (this.options.isSingleChoice)\n this.selectedContact = data;\n else\n this.selectedContact.push(data);\n } else {\n if (this.options.isSingleChoice)\n this.selectedContact = null;\n else\n this.selectedContact = _(this.selectedContact).filter(function (item) {\n return item.attributes.id !== data.attributes.id\n });\n }\n this.$('.contacts-select-save').prop('disabled', this.selectedContact == null || _.size(this.selectedContact) === 0);\n },\n addFromBidParticipants: function () {\n this.options.project.fetchParticipants(_.bind(function (participants) {\n new PJQ.views.contacts.SelectContactsModal({\n contacts: participants,\n hideContacts: this.contacts.models,\n context: PJQ.constants.contacts.contexts.PARTICIPANTS,\n isSingleChoice: false,\n subtitle: \"Add Project Contacts from Bid Participants\",\n onSave: _.bind(function (selectedContacts) {\n this.contacts.addContactsToProject(_.map(selectedContacts, function (contact) {\n return contact.id;\n }), () => {\n this.render();\n });\n }, this)\n });\n }, this));\n },\n addFromAddressBook: function () {\n $('form[name=\"modal-add-participants\"]').remove();\n let options = {\n onSave: (selectedContactsAll, data) => {\n this.contacts.addContactsToProject(selectedContactsAll, () => {\n this.render();\n });\n },\n disableContacts: _.map(this.contacts.models, function (contact) {\n return contact.id;\n })\n };\n\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n options.isWrapForm = false;\n options.wrapFormName = null;\n options.isUseNewAddressBook = true;\n options.isMultipleProjects = true;\n }\n\n new PJQ.views.projects.AddParticipantsDetailedModal(options);\n },\n quickSearch: function () {\n new PJQ.views.contacts.SelectContactsModal({\n context: PJQ.constants.contacts.contexts.CONTACTS,\n isSingleChoice: false,\n project: this.options.project,\n subtitle: \"Add Project Contacts From Address Book\",\n onSave: _.bind(function (selectedContacts) {\n this.contacts.addContactsToProject(_.map(selectedContacts, function (contact) {\n return contact.id;\n }), () => {\n this.render();\n });\n }, this)\n });\n },\n addFromProject: function () {\n\n },\n addFromCompany: function () {\n new PJQ.views.contacts.SelectContactsModal({\n context: PJQ.constants.contacts.contexts.USERS,\n isSingleChoice: false,\n hideContacts: this.contacts.models,\n subtitle: \"Add Project Contacts from My Company Users\",\n onSave: _.bind(function (selectedContacts) {\n this.contacts.addContactsToProject(_.map(selectedContacts, function (contact) {\n return -contact.id;\n }), () => {\n this.render();\n });\n }, this)\n });\n },\n newContactClicked: function () {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectContacts.ProjectContact({\n projectId: this.options.project.id,\n country: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US'\n })\n });\n },\n newUserClicked: function () {\n new PJQ.views.contacts.BaseEditContactModal({\n model: new PJQ.models.projectContacts.ProjectContact({\n projectId: this.options.project.id\n })\n });\n },\n save: function () {\n let callback = _.bind(function () {\n this.options.onSave(this.selectedContact);\n this.removeModal();\n }, this);\n\n if (this.options.disableBadEmail) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'checkpcg'\n }]),\n data: {\n contactIds: this.options.isSingleChoice ? [this.selectedContact] : _.map(this.selectedContact, function (selectedContact) {\n return selectedContact.get('contactId');\n }),\n contactCompanyIds: [],\n contactGroupIds: []\n }\n }).post().done(_.bind(function (data) {\n if (data.results.length > 0) {\n new PJQ.views.projects.AddParticipantsErrorModal({\n data: data.results,\n onContinue: _.bind(function () {\n // remove bad items from this.selectedContact\n _.each(data.results, _.bind(function (contact) {\n if (this.options.isSingleChoice && contact.contactId === this.selectedContact.get('contactId'))\n this.selectedContact = null;\n else if (!this.options.isSingleChoice) {\n this.selectedContact = _.filter(this.selectedContact, _.bind(function (selectedContact) {\n return selectedContact.get('contactId') !== contact.contactId;\n }, this));\n }\n }, this));\n\n callback();\n }, this)\n });\n } else\n callback();\n\n }, this)).fail(function () {\n });\n } else {\n callback();\n }\n },\n cancel: function () {\n this.options.onCancel();\n }\n});\n\nPJQ.views.contacts.ContactSelectDataTable = PJQ.views.dataTables.DataTable.extend({\n defaults: {\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Contact-Select')\n },\n userTypeFilter: null,\n isUserTypeFilterDisabled: false\n },\n events: {\n 'keyup .datatable-search': 'search',\n \"click .btn-filter-groups\": \"filterGroups\",\n 'click .contact-select-clear-filters': 'clearFilters'\n },\n beforeDataTableRender: function () {\n if (this.options.userTypeFilter)\n this.userTypeFilter = this.options.userTypeFilter;\n\n this.filterPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contacts-filter'),\n onChange: _.bind(function (value) {\n let companyUserTypes = value[\"companyUserType\"],\n contactUserTypes = value[\"contactUserType\"];\n\n this.userTypeFilter = [];\n if (_.size(companyUserTypes) > 0) {\n this.userTypeFilter.push(...companyUserTypes);\n }\n if (_.size(contactUserTypes) > 0) {\n this.userTypeFilter.push(...contactUserTypes);\n }\n\n this.projectStatusFilter = value[\"projectStatus\"];\n\n this.filter();\n }, this),\n isGrouped: true,\n isMultiple: true,\n isDisabled: this.options.isUserTypeFilterDisabled,\n defaultValue: this.userTypeFilter,\n noneSelectedText: 'No Filters'\n });\n },\n getFilterData: function () {\n if (_.size(this.userTypeFilter) === 0 && _.size(this.projectStatusFilter) === 0 && _.size(this.groupsFilter) === 0) {\n return this.options.data;\n }\n\n let results = this.options.data;\n if (_.size(this.userTypeFilter) > 0) {\n results = _.filter(results, function (row) {\n return _.contains(this.userTypeFilter, row.userType.id.toString());\n }, this);\n }\n\n if (_.size(this.groupsFilter) > 0) {\n results = _.filter(results, function (row) {\n let noGroups = _.contains(this.groupsFilter, 0);\n return (noGroups && _.size(row.groups.models) === 0) || _.find(row.groups.models, _.bind(function (group) {\n return _.contains(this.groupsFilter, group.id);\n }, this)) != null;\n }, this);\n }\n\n if (_.size(this.projectStatusFilter) > 0) {\n return _.filter(results, function (row) {\n let st = row.get('status');\n if (_.size(st) === 0) {\n st = \"PENDING\";\n }\n return _.size(st) > 0 && _.contains(this.projectStatusFilter, st.toUpperCase());\n }, this);\n } else {\n return results;\n }\n },\n filterGroups: function () {\n new PJQ.views.addressbook.FilterTradesModal({\n selectedGroups: this.groupsFilter,\n onFilter: _.bind(function (groups) {\n this.updateGroupsFilter(groups);\n this.filter();\n }, this)\n });\n },\n updateGroupsFilter: function (groups) {\n this.groupsFilter = groups;\n\n let groupLen = _.size(groups)\n this.$('.filter-groups-text').text((groupLen > 0 ? groupLen.toString() : 'All') + ' Trades');\n },\n afterSearch: function () {\n this.$('.contact-select-clear-filters').prop('disabled', _.size(this.$('input.datatable-search').val()) === 0 && _.size(this.userTypeFilter) === 0 && _.size(this.projectStatusFilter) === 0 && _.size(this.groupsFilter) === 0);\n },\n clearFilters: function () {\n this.userTypeFilter = null;\n this.projectStatusFilter = null;\n this.updateGroupsFilter(null);\n this.filterPicker.deselectAll();\n this.$('input.datatable-search').val('');\n this.filter();\n }\n});\n\nPJQ.views.contacts.ContactsSelectInput = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Select-Input'),\n subTemplates: {\n contactBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Select-Input-Contacts')\n },\n contacts: null,\n selectedContact: null,\n disableContacts: null,\n isSingleChoice: true,\n isShowAddButtonByLabel: true,\n addButton: null,\n onAdd: _.noop,\n onChange: _.noop,\n onDelete: _.noop,\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n emptyNotice: \"No Contacts Selected\",\n isRequired: false,\n isReadOnly: null, // this value is null by default, if its not null it will be used to set canEdit\n showSelectorAddress: false,\n contactsRenderData: null,\n isSortable: false,\n onStop: _.noop,\n canSwitchContext: false,\n canViewContacts: null,\n canEdit: true,\n hideUsers: false,\n shouldHideContacts: false,\n saveButtonText: null\n },\n events: {\n \"click .btn-approve-behalf\": \"approveBehalf\",\n \"click .contact-select-input-add\": \"edit\",\n \"click .contact-select-input-delete\": \"deleteContact\"\n },\n beforeRender() {\n this.selectedContact = this.options.selectedContact ? this.options.selectedContact : (this.options.isSingleChoice ? null : []);\n\n if (!this.options.isSingleChoice && this.selectedContact != null && PJQ.helpers.objectHelpers.refinedType(this.selectedContact) !== 'array') {\n this.selectedContact = [this.selectedContact];\n }\n\n if (this.options.isReadOnly != null) {\n this.options.canEdit = !this.options.isReadOnly;\n }\n },\n afterRender() {\n if (this.options.addButton != null && this.options.canEdit) {\n this.options.addButton.off().on('click', _.bind(this.edit, this));\n } else if (this.options.canEdit) {\n let addButton = $('<button type=\"button\" class=\"btn btn-transparent-light text-info btn-sm contact-select-input-add ml-1\"><i class=\"fal fa-pencil\"></i></button>');\n if (this.options.isShowAddButtonByLabel) {\n this.$el.closest('.form-group').find('label').append(addButton);\n addButton.on('click', _.bind(this.edit, this));\n } else {\n this.find('.contact-select-input-buttons').append(addButton);\n }\n }\n\n if (this.options.isSortable) {\n let self = this;\n self.approversSortable = new PJQ.Sortable(self.$('.contact-select-list'), {\n containment: \"document\",\n items: '.select-contact-container',\n connectWith: '.select-contact-container',\n onStop: _.bind(function () {\n // self.options.onStop();\n let dataArray = []\n self.$('.select-contact-container').each(function (a, b) {\n let data = $(b).data('contactId');\n dataArray.push(data);\n });\n self.options.onStop(dataArray);\n }, this)\n });\n }\n\n this.renderSelectedContact();\n },\n approveBehalf: function (e) {\n let id = $(e.target).closest('.select-contact-container').data('contactId'),\n contact = _.find(this.selectedContact, function (contact) {\n return contact.id === id\n });\n if (typeof this.options.onApproveBehalf === 'function') {\n this.options.onApproveBehalf(contact);\n }\n },\n deleteContact: function (e) {\n let cid = $(e.target).closest('.select-contact-container').data('cid');\n if (this.options.isSingleChoice) {\n this.options.onDelete(this.selectedContact, null);\n this.options.onChange(null);\n this.selectedContact = null;\n } else {\n let deletedContact = _.find(this.selectedContact, function (contact) {\n return contact.cid === cid;\n });\n if (deletedContact != null) {\n this.selectedContact = _.filter(this.selectedContact, function (contact) {\n return contact.cid !== cid;\n });\n this.options.onDelete(deletedContact, this.selectedContact);\n this.options.onChange(this.selectedContact);\n }\n }\n this.renderSelectedContact();\n },\n edit: function () {\n this.selector = new PJQ.views.contacts.SelectContactsModal({\n contacts: this.options.contacts,\n hideUsers: this.options.hideUsers,\n shouldHideContacts: this.options.shouldHideContacts,\n hideContacts: this.options.allowDuplicate ? null : this.selectedContact,\n disableContacts: this.options.disableContacts,\n context: this.options.context,\n canSwitchContext: this.options.canSwitchContext,\n showAddress: this.options.showSelectorAddress,\n isSingleChoice: this.options.isSingleChoice,\n saveButtonText: this.options.saveButtonText,\n onSave: (newContacts) => {\n if (this.options.allowDuplicate && !this.options.isSingleChoice) {\n this.selectedContact.push(...newContacts);\n } else {\n this.selectedContact = this.options.isSingleChoice ? newContacts : _.union(this.selectedContact, newContacts);\n }\n this.renderSelectedContact();\n this.options.onAdd(newContacts, this.selectedContact);\n this.options.onChange(this.selectedContact);\n }\n });\n },\n renderSelectedContact: function () {\n let data = this.selectedContact;\n if (this.selectedContact && this.options.isSingleChoice)\n data = [this.selectedContact];\n\n if (_.size(data) === 0) {\n this.$('.contact-select-list').html('<div class=\"text-muted font-weight-light mt-1 fs-16\">' + this.options.emptyNotice + '</div>');\n } else {\n let crd;\n if (typeof this.options.contactsRenderData === 'function') {\n crd = this.options.contactsRenderData(data);\n } else {\n crd = this.options.contactsRenderData ? this.options.contactsRenderData : {};\n }\n\n this.renderSubTemplate(false, this.options.subTemplates.contactBadge, this.$('.contact-select-list'),\n {\n models: data,\n contactsRenderData: crd,\n isSingleChoice: this.options.isSingleChoice,\n displayContactsBlock: this.options.displayContactsBlock,\n canView: this.options.canViewContacts ?? this.options.canEdit,\n canEdit: this.options.canEdit\n });\n }\n },\n validate: function () {\n if (_.size(this.selectedContact) > 0) {\n return true;\n } else {\n this.$('.contact-select-list').html('<div class=\"text-danger mt-1\">This field is required.</div>');\n return false;\n }\n }\n});\n\nPJQ.views.contacts.ReportContactModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALL, 'Modal-Report-Contact'),\n minWidth: '400px',\n reason: \"\",\n onReport: null,\n showRemoveFromProject: false\n },\n events: {\n 'keyup .input-other-reason': 'otherReasonChanged',\n 'click .btn-report': 'reportParticipant'\n },\n afterRender: function () {\n new PJQ.inputs.Selectpicker({\n noneSelectedText: 'Select Reason',\n el: this.$('.select-reason'),\n onChange: _.bind(function (value) {\n if (value && value.toLowerCase() === 'other') {\n this.$('.other-reason').removeClass('hidden');\n } else {\n this.$('.other-reason').addClass('hidden');\n }\n this.setReason(value);\n }, this)\n });\n\n if (this.options.showRemoveFromProject)\n this.$('.remove-from-project').removeClass('hidden');\n },\n otherReasonChanged: function (e) {\n this.setReason($(e.currentTarget).val());\n },\n setReason: function (reason) {\n this.options.reason = reason;\n this.$('.btn-report').prop('disabled', _.size(this.options.reason) === 0);\n },\n reportParticipant: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts',\n value: this.options.contactId\n },\n {\n endpoint: 'report'\n }\n ]),\n data: {\n projectId: PJQ.app.session.project ? PJQ.app.session.project.id : null,\n reason: this.options.reason,\n removeFromProject: this.$('.input-remove-from-project').prop('checked')\n }\n }).post().done(_.bind(function (data) {\n if (typeof this.options.onReport === 'function') {\n this.options.onReport(this.$('.input-remove-from-project').prop('checked'));\n }\n\n this.removeModal();\n\n PJQ.notifications.notify.successNotify({\n message: 'Contact successfully reported'\n });\n }, this)).fail(_.bind(function (xhr, err, result) {\n this.removeModal();\n\n PJQ.notifications.notify.errorNotify({\n message: 'Failed to report contact'\n });\n\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.REPORT_CONTACT, {\n error: err,\n result: result\n });\n }, this));\n }\n});\n","PJQ.views.email = {};\r\n\r\nPJQ.views.email.ComposeEmailModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-compose-email'),\r\n subTemplates: {\r\n emailBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Email-Badge')\r\n },\r\n header: \"Send Email\",\r\n enableCC: true,\r\n subject: '',\r\n onSave: null,\r\n onSaveWait: null,\r\n onCancel: null,\r\n maxWidth: '1200px'\r\n },\r\n events: {\r\n 'keyup .input-share-search': 'searchChanged',\r\n 'focus .input-share-search': 'focusSearch',\r\n 'click .share-email-delete': 'deleteEmail',\r\n 'click .modal-share-send': 'send',\r\n 'click .modal-share-cancel': 'cancel',\r\n 'mousedown .modal-dialog': 'checkIsFocused',\r\n 'click .btn-add-project-contact': 'addProjectContact'\r\n },\r\n beforeModalCreated: function () {\r\n this.selectedEmailsTo = [];\r\n this.selectedEmailsCC = [];\r\n this.focusType = null;\r\n },\r\n renderData: function () {\r\n return {\r\n options: this.options\r\n };\r\n },\r\n afterRender: function () {\r\n this.bodyEditor = new PJQ.inputs.HTMLEditor({\r\n el: this.$('.email-body'),\r\n editorHeight: 300,\r\n isHideTokens: true,\r\n onChange: _.bind(function (contents) {\r\n\r\n }, this)\r\n });\r\n },\r\n focusSearch: function (e) {\r\n this.focusType = $(e.currentTarget).data('email-line');\r\n if (this.contactEmailSelector != null)\r\n this.contactEmailSelector.remove();\r\n\r\n this.contactEmailSelector = new PJQ.views.email.ContactSearchSelect({\r\n el: this.focusType === \"to\" ? this.$('.contact-emails-to') : this.$('.contact-emails-cc'),\r\n selectedEmails: this.focusType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC,\r\n search: this.getFocusSearchText(),\r\n project: this.options.project,\r\n onAdd: _.bind(function (email) {\r\n this.addEmail(email);\r\n }, this)\r\n });\r\n },\r\n checkIsFocused: function (e) {\r\n if (this.$(e.target).closest('.share-contact').length > 0) {\r\n return;\r\n }\r\n\r\n // Removes contact email selector if not selecting a contact, or entering an email\r\n let target = $(e.target),\r\n targetParent = $(e.target.parentElement);\r\n\r\n if (this.focusType != null\r\n && !target.hasClass('share-contact')\r\n && !targetParent.hasClass('share-contact')\r\n && !target.hasClass('input-share-search')\r\n && !target.hasClass('share-contact-email')\r\n && !target.hasClass('share-email-entry')\r\n && !target.hasClass('share-contact-name')) {\r\n this.contactEmailSelector.remove();\r\n this.focusType = null;\r\n }\r\n },\r\n getFocusSearchText: function () {\r\n return this.focusType != null ? this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').val().toLowerCase() : this.$('.input-share-search').val().toLowerCase();\r\n },\r\n searchChanged: function () {\r\n this.contactEmailSelector.searchChanged(this.getFocusSearchText());\r\n },\r\n renderRecipientCount: function () {\r\n let emailCount = _.size(this.selectedEmailsTo) + _.size(this.selectedEmailsCC);\r\n this.$('.recipient-count').html(emailCount.toString() + (emailCount === 1 ? ' recipient' : ' recipients'));\r\n },\r\n addProjectContact: function (e) {\r\n let $target = $(e.currentTarget),\r\n emailLine = $target.data('email-line');\r\n\r\n new PJQ.views.contacts.SelectContactsModal({\r\n hideEmails: emailLine === 'to' ? this.selectedEmailsTo : this.selectedEmailsCC,\r\n subtitle: `Add Project Contacts to the ${emailLine === 'to' ? 'To' : 'CC'} line`,\r\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\r\n canSwitchContext: false,\r\n showAddress: false,\r\n isSingleChoice: false,\r\n saveButtonText: \"Add\",\r\n onSave: (newContacts) => {\r\n this.focusType = emailLine;\r\n _.each(newContacts, (contact) => {\r\n let email = contact.get('email').toLowerCase();\r\n if (_.size(email) === 0) {\r\n return;\r\n }\r\n\r\n if (emailLine === 'to') {\r\n this.selectedEmailsTo.push(email);\r\n } else {\r\n this.selectedEmailsCC.push(email);\r\n }\r\n this.addEmail(email, true);\r\n });\r\n this.focusType = null;\r\n }\r\n });\r\n },\r\n addEmail: function (email, shouldNotFocus) {\r\n this.renderSubTemplate(true, this.options.subTemplates.emailBadge, this.$('.share-selected-emails[data-email-line=\"' + (this.focusType) + '\"]'), {\r\n email: email\r\n });\r\n this.$('.input-share-search').val('');\r\n this.$('.modal-share-send').prop('disabled', false);\r\n this.renderRecipientCount();\r\n\r\n if (!shouldNotFocus) {\r\n this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').focus();\r\n }\r\n },\r\n deleteEmail: function (e) {\r\n let emailContainer = $(e.currentTarget).closest('.share-email'),\r\n emailLineType = $(e.currentTarget).closest('.share-selected-emails').data('email-line'),\r\n emailArray = emailLineType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC;\r\n emailArray = _.without(emailArray, emailContainer.data('email').toLowerCase());\r\n\r\n if (emailLineType === \"to\")\r\n this.selectedEmailsTo = emailArray\r\n else\r\n this.selectedEmailsCC = emailArray\r\n\r\n emailContainer.remove();\r\n this.searchChanged();\r\n this.$('.modal-share-send').prop('disabled', _.size(emailArray) === 0);\r\n this.renderRecipientCount();\r\n },\r\n validate: function () {\r\n return true;\r\n },\r\n send: function () {\r\n let $subject = this.$('.input-share-subject'),\r\n data = {\r\n toEmails: this.selectedEmailsTo,\r\n ccEmails: this.selectedEmailsCC,\r\n subject: $subject.val(),\r\n body: this.bodyEditor.getValue()\r\n };\r\n\r\n let isSubjectValid = _.size(data.subject) > 0;\r\n PJQ.helpers.inputHelpers.setInputError($subject, isSubjectValid);\r\n if (!isSubjectValid) {\r\n return;\r\n }\r\n\r\n if (typeof this.options.onSave === 'function') {\r\n this.options.onSave(data);\r\n this.removeModal();\r\n } else if (typeof this.options.onSaveWait === 'function') {\r\n new PJQ.Loader(this.$('.modal-content'));\r\n this.options.onSaveWait(data, () => {\r\n this.removeModal();\r\n });\r\n } else {\r\n this.removeModal();\r\n }\r\n },\r\n cancel: function () {\r\n if (typeof this.options.onCancel === 'function') {\r\n this.options.onCancel();\r\n }\r\n },\r\n});\r\n\r\nPJQ.views.email.ContactSearchSelect = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'contact-email-search-select'),\r\n subTemplates: {\r\n contact: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Contact')\r\n },\r\n search: ''\r\n },\r\n events: {\r\n 'click .share-contact': 'addEmail',\r\n },\r\n beforeFirstRender: function () {\r\n this.selectedEmails = this.options.selectedEmails;\r\n this.render();\r\n },\r\n afterRender: function () {\r\n if (this.options.project != null) {\r\n let contactsLoader = new PJQ.Loader(this.$('.share-contacts-outer'));\r\n this.options.project.fetchProjectContacts(_.bind(function (projectContacts) {\r\n this.contacts = projectContacts;\r\n contactsLoader.remove();\r\n this.searchChanged(this.options.search);\r\n }, this));\r\n } else {\r\n this.contacts = new PJQ.collections.contacts.Contacts();\r\n this.searchChanged(this.options.search);\r\n }\r\n },\r\n searchChanged: function (searchVal) {\r\n let searchText = searchVal != null ? searchVal : \"\",\r\n filteredContacts;\r\n if (_.size(searchText) > 0) {\r\n filteredContacts = _.filter(this.contacts.models, _.bind(function (contact) {\r\n let email = contact.get('email').toLowerCase();\r\n if (_.size(email) === 0 || _.indexOf(this.selectedEmails, email) !== -1) {\r\n return false;\r\n }\r\n\r\n return contact.get('contactName').toLowerCase().indexOf(searchText) !== -1 || email.indexOf(searchText) !== -1;\r\n }, this));\r\n } else {\r\n filteredContacts = _.filter(this.contacts.models, _.bind(function (contact) {\r\n let email = contact.get('email').toLowerCase();\r\n return _.size(email) > 0 && _.indexOf(this.selectedEmails, email) === -1;\r\n }, this))\r\n }\r\n\r\n let $addEmail = this.$('.share-add-email'),\r\n isValidEmail = PJQ.helpers.validators.validateEmail(searchText).success;\r\n if (isValidEmail && _.size(filteredContacts) === 0) {\r\n this.$('.share-suggested-contacts').append($('<div>', {\r\n text: searchText\r\n }));\r\n this.$('.share-add-email .share-contact').data('email', searchText);\r\n this.$('.share-email-entry-letter').html(searchText[0].toUpperCase());\r\n this.$('.share-email-entry').text(searchText);\r\n $addEmail.removeClass('hidden');\r\n } else {\r\n $addEmail.addClass('hidden');\r\n }\r\n\r\n let $searchResults = this.$('.share-search-results'),\r\n $searchResultsOuter = this.$('.share-search-results-outer');\r\n $searchResults.empty();\r\n if (_.size(filteredContacts) > 0) {\r\n _.each(_.sortBy(filteredContacts, function (contact) {\r\n return contact.get('contactName')\r\n }), _.bind(function (contact) {\r\n this.renderSubTemplate(true, this.options.subTemplates.contact, $searchResults, {\r\n model: contact\r\n });\r\n }, this));\r\n\r\n $searchResultsOuter.removeClass('hidden');\r\n } else {\r\n $searchResultsOuter.addClass('hidden');\r\n }\r\n\r\n let $noResults = this.$('.share-search-no-results');\r\n if (isValidEmail || _.size(filteredContacts) > 0) {\r\n $noResults.addClass('hidden');\r\n } else {\r\n $noResults.removeClass('hidden');\r\n }\r\n },\r\n addEmail: function (e) {\r\n let email = $(e.currentTarget).closest('.share-contact').data('email');\r\n this.selectedEmails.push(email.toLowerCase());\r\n this.searchChanged();\r\n if (typeof this.options.onAdd === 'function') {\r\n this.options.onAdd(email)\r\n }\r\n },\r\n})","//Date Prototype functions\nDate.daysBetween = function (date1, date2) {\n\tlet one_day = 1000 * 60 * 60 * 24,\n\t\tdate1_ms = date1.getTime(),\n\t\tdate2_ms = date2.getTime(),\n\t\tdifference_ms = date2_ms - date1_ms;\n\treturn Math.round(difference_ms / one_day);\n};\n\nDate.prototype.addDays = function(days) {\n\tlet date = new Date(this.valueOf());\n\tdate.setDate(date.getDate() + days);\n\treturn date;\n};","// Models\n\nPJQ.models.featureSettings = {};\n\nPJQ.models.featureSettings.FeatureSetting = PJQ.models.BaseModel.extend({\n endpoint: function () {\n if(this.options.project) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.get('projectId')\n },\n {\n endpoint: 'featuresettings'\n }\n ])\n }\n else{\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'featuresettings'\n }\n ])\n }\n },\n});\n\n\n// Views\n\nPJQ.views.featureSettings = {};\n\nPJQ.views.featureSettings.FeatureSettings = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'feature-settings')\n },\n events: {\n\n },\n beforeFirstRender: function() {\n if(this.model && !this.options.project && !this.model.isFetched){\n this.model.fetch({\n success: _.bind(function(){\n this.render();\n }, this)\n })\n }\n else{\n this.render();\n }\n },\n renderData: function () {\n return {\n model: this.model,\n project: this.options.project\n }\n },\n afterRender: function() {\n new PJQ.Binder(this.$('.settings'), this.model, {\n setDefaultValues: true,\n watchElements: [\n 'input'\n ],\n afterChange: _.bind(function () {\n this.onChange();\n }, this)\n });\n },\n onChange: function() {\n if(typeof this.options.onChange === 'function'){\n this.options.onChange(this.model);\n }\n }\n})\n\nPJQ.views.featureSettings.FeatureSettingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Feature-Settings'),\n minWidth: 700\n },\n defaultEvents: {\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel'\n },\n renderData: function () {\n return {\n model: this.model,\n project: this.options.project\n };\n },\n afterRender: function () {\n new PJQ.views.featureSettings.FeatureSettings({\n el: this.$('.feature-settings'),\n project: this.options.project,\n model: this.model\n })\n },\n save: function() {\n this.model.save(null, {\n success: _.bind(function(featureSettings) {\n PJQ.app.session.project.set('featureSettings', featureSettings.toJSON());\n PJQ.app.navigator.refreshCommands();\n PJQ.app.navigator.renderHeader();\n this.removeModal();\n }, this)\n })\n },\n cancel: function() {\n this.removeModal();\n }\n});\n","PJQ.files = {\n downloadDrawings: function (attachments, project, options) {\n let objType = PJQ.helpers.objectHelpers.refinedType(attachments, true);\n if (objType === 'backboneCollection' || objType === 'array') {\n let versions = {},\n versionIds = _.uniq(_.map(_.filter(objType === 'array' ? attachments : attachments.models, function (attachment) {\n return attachment.get(\"isDrawing\") && attachment.get('guid') != null;\n }), function (attachment) {\n return attachment.get('versionId');\n }));\n _.each(versionIds, function (versionId) {\n versions[versionId] = _.map(_.filter(objType === 'array' ? attachments : attachments.models, function (attachment) {\n return attachment.get('versionId') === versionId\n }), function (drawing) {\n return drawing.get('guid');\n });\n });\n\n let params = [];\n if (options) {\n if (options.raster) {\n params.push({\n parameter: 'raster',\n value: options.raster\n });\n }\n if (options.merge) {\n params.push({\n parameter: 'merge',\n value: options.merge\n });\n }\n\n if (options.includeAttachments) {\n params.push({\n parameter: 'attachments',\n value: options.includeAttachments\n });\n }\n }\n\n let endpoint;\n if (project != null) {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'downloads'\n }\n ], params)\n } else {\n endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'downloads'\n }\n ], params)\n }\n let data = {\n versions: versions,\n fileGuids: _.map(_.filter(objType === 'array' ? attachments : attachments.models, function (attachment) {\n return !attachment.get(\"isDrawing\");\n }), function (attachment) {\n return attachment.get('guid');\n })\n };\n PJQ.files.queueDownload(endpoint, data);\n } else {\n new PJQ.models.drawings.Drawing({\n drawingId: -attachments.get('entryId'),\n guid: attachments.get('guid')\n }).download();\n }\n },\n queueDownload: function (endpoint, data, downloadStartCallback, isApiv2 = false) {\n PJQ.files.createDownloadFrame();\n let req = new PJQ.ajax.Request({\n endpoint: endpoint,\n data: data,\n isApi2: true,\n isAPIv2: isApiv2\n });\n if (data != null) {\n req = req.post();\n } else {\n req = req.get();\n }\n req.done(_.bind(function (download) {\n if (typeof downloadStartCallback === 'function') {\n downloadStartCallback();\n }\n this.handleDownload(download);\n }, this)).fail(function (jqXHR) {\n PJQ.files.logDownloadFailure({\n endpoint: endpoint,\n error: jqXHR.responseText\n });\n });\n },\n handleDownload: function (download) {\n let minWaitSeconds;\n let showPromo;\n let promoType = 'fora'\n // force a minimum wait for downloads on projects that they don't own or when the user is not logged in\n if (PJQ.app.session && PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId && PJQ.app.options.isPanteraApp &&\n (PJQ.app.session.user == null\n || (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') !== PJQ.app.session.get('masterUserId')))) {\n let contact = PJQ.app.session.contact,\n groupIds = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.QUIKBID_GROUP_IDS);\n // Make groupids an array\n if (groupIds != null) {\n groupIds = groupIds.split(\",\");\n // Fetch contact if contact isn't fetched. Rerun handleDownload after they are fetched\n if (contact != null && !contact.isFetched) {\n contact.fetch({\n success: _.bind(function () {\n this.handleDownload(download);\n }, this)\n })\n return;\n }\n // Check if any of the the contacts groups match the specified quikbids groups.\n if (contact != null) {\n _.each(contact.groups.models, function (group) {\n let quikBidGroup = _.contains(groupIds, group.get('groupId').toString());\n if (quikBidGroup) {\n promoType = 'quikbid';\n }\n }, this);\n }\n }\n minWaitSeconds = 20;\n showPromo = true;\n } else {\n minWaitSeconds = null;\n showPromo = false;\n }\n if (download.isReady && download.url && (!(download.isZip || download.isDrawing) || minWaitSeconds <= 0 || minWaitSeconds == null)) {\n PJQ.files.downloadFile(download.url, {\n isEndpoint: false\n });\n } else {\n if (download.isZip) {\n new PJQ.views.files.ZipProgressModal({\n model: new PJQ.models.files.ZipFile(download),\n minWaitSeconds: minWaitSeconds,\n showPromo: showPromo,\n promoType: promoType\n });\n } else if (download.isDrawing) {\n new PJQ.views.files.DrawingProgressModal({\n model: new PJQ.models.drawings.DrawingDownload(download),\n minWaitSeconds: minWaitSeconds,\n showPromo: showPromo,\n promoType: promoType\n });\n } else {\n new PJQ.views.files.FileProgressModal({\n model: new PJQ.models.files.File(download)\n });\n }\n }\n },\n logDownloadFailure: function (data) {\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.FILE_DOWNLOAD_FAILED, data);\n },\n downloadFile: function (url, options = {}) {\n PJQ.files.createDownloadFrame();\n if (options.isEndpoint !== false) {\n options.includeSessionId = true;\n options.includeAccessToken = true;\n if (options.isAPIv2 === true) {\n options.service = PJQ.constants.services.APIv2;\n } else if (options.isApi2 === true) {\n options.service = PJQ.constants.services.FILES;\n }\n url = PJQ.helpers.urlHelpers.buildApiUrl(url, options);\n }\n window.open(url, PJQ.constants.files.downloadFrameId);\n },\n createDownloadFrame: function () {\n let iFrame = $('#' + PJQ.constants.files.downloadFrameId);\n if (_.size(iFrame) === 0) {\n iFrame = $('<iframe/>', {\n id: PJQ.constants.files.downloadFrameId,\n name: PJQ.constants.files.downloadFrameId,\n class: 'hidden'\n });\n $('body').append(iFrame);\n }\n return iFrame;\n }\n};\n\n//Models\nPJQ.models.files = {};\nPJQ.models.files.File = PJQ.models.BaseModel.extend({\n idAttribute: 'entryId',\n endpointArr: function () {\n let arr;\n if (this.get('isFolder')) {\n if (_.size(this.get('guid')) > 0) {\n arr = [\n {\n endpoint: 'files',\n value: this.get('guid')\n }\n ];\n } else {\n arr = [\n {\n endpoint: 'folders',\n value: this.get('folderGuid')\n }\n ];\n }\n } else {\n if (_.size(this.get('guid')) > 0) {\n if (this.get('entryId') < 0) {\n arr = [\n {\n endpoint: 'drawings',\n value: this.get('guid')\n }\n ];\n } else {\n arr = [\n {\n endpoint: 'files',\n value: this.get('guid')\n }\n ];\n }\n } else if (_.size(this.get('key')) > 0) {\n arr = [\n {\n endpoint: 'files',\n value: this.get('key')\n }\n ];\n } else {\n arr = [\n {\n endpoint: 'files',\n value: this.get('entryId')\n }\n ];\n }\n }\n return arr;\n },\n endpoint: function (urlOptions) {\n let params;\n if (urlOptions != null && urlOptions.params != null) {\n params = urlOptions.params;\n } else {\n params = [];\n }\n return PJQ.helpers.urlHelpers.generateEndpoint(this.endpointArr(), params);\n },\n renderUrl: function (pageNumber) {\n //currently returns renderid as a fallback for old places that only have the entryid and not the guid\n return PJQ.helpers.urlHelpers.buildAPIURL(PJQ.helpers.urlHelpers.generateEndpoint(_.union(this.endpointArr(), [{\n endpoint: _.size(this.get('guid')) > 0 ? 'render' : 'renderid'\n }]),\n [\n {\n parameter: 'pageNumber',\n value: pageNumber > 0 ? pageNumber : 1\n }\n ]), false, false, true);\n },\n urlForKey: function (key) {\n return PJQ.helpers.urlHelpers.buildApiUrl(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files',\n value: _.size(key) > 0 ? key : this.get('key')\n }\n ]), {\n service: PJQ.constants.services.APIv2\n });\n },\n thumbnailUrl: function () {\n let thumbUrl = this.get('thumbUrl');\n if (_.size(thumbUrl) > 0) {\n return thumbUrl;\n } else {\n if (_.size(this.get('key')) > 0) {\n return this.urlForKey() + '/thumbnail';\n }\n return this.dataUrl;\n }\n },\n getSize() {\n if (this.get('isFolder')) {\n return _.reduce(this.getFolderAttachments(), function (memo, file) {\n return memo + file.getSize();\n }, 0);\n } else {\n return this.get('size');\n }\n },\n exportFileList: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files',\n value: this.get('entryId')\n },\n {\n endpoint: 'export'\n }\n ]));\n },\n addNotification: function (email) {\n new PJQ.models.files.DrawingNotification({\n guid: this.get('guid'),\n email: email\n }).save();\n },\n download: function () {\n let url = this.get('url');\n if (_.size(url) === 0 && _.size(this.get('key')) > 0) {\n url = this.urlForKey() + '/download';\n }\n\n if (_.size(url) > 0) {\n PJQ.files.downloadFile(url, {\n isEndpoint: false,\n isApi2: true\n });\n } else if (_.size(this.get('guid')) > 0) {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint(this.endpointArr()) + '/download', {\n isApi2: true\n });\n }\n },\n move: function (files, options, callback) {\n let params = [];\n if (options.project != null) {\n params.push({\n parameter: \"projectId\",\n value: options.project.id\n });\n }\n // move files to this folder\n if (this.get('isFolder')) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files',\n value: this.get('entryId')\n },\n {\n endpoint: 'moveto'\n }\n ], params),\n data: {\n entryList: _.map(files, function (file) {\n return file.get('entryId')\n })\n }\n }).put().done(_.bind(function (changedFiles) {\n _.each(changedFiles, function (changedFile) {\n let matchFile = _.find(files, function (file) {\n return file.get('entryId') === changedFile.entryId;\n });\n if (matchFile != null) {\n matchFile.set('folderId', changedFile.folderId);\n }\n }, this);\n callback(files);\n }, this));\n } else {\n callback(files);\n }\n },\n copy: function (files, options, callback) {\n let params = [];\n if (options.project != null) {\n params.push({\n parameter: \"projectId\",\n value: options.project.id\n });\n }\n // move files to this folder\n if (this.get('isFolder')) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files',\n value: this.get('entryId')\n },\n {\n endpoint: 'copyto'\n }\n ], params),\n data: {\n entryList: _.map(files, function (file) {\n return file.get('entryId')\n })\n }\n }).put().done(_.bind(function (newFiles) {\n callback(newFiles);\n }, this));\n } else {\n callback(files);\n }\n },\n destroy: function (options) {\n if (this.get('isFolder')) {\n this.deleteFolderContents();\n }\n return Backbone.Model.prototype.destroy.call(this, options);\n },\n deleteFolderContents: function () {\n _.each(this.getFolderAttachments(), _.bind(function (file) {\n if (file.get('isFolder')) {\n file.deleteFolderContents();\n }\n if (this.collection != null) {\n this.collection.remove(file);\n }\n }, this));\n },\n detachFromProject: function (project, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: project.id\n },\n {\n endpoint: 'attachments',\n value: this.get('guid')\n },\n {\n endpoint: 'detach'\n }\n ])\n }).delete().done(callback);\n },\n parse: function (model) {\n if (model != null) {\n if (model.key != null) {\n model.url = this.urlForKey(model.key) + \"/download\";\n model.thumbUrl = this.urlForKey(model.key) + \"/thumbnail\";\n }\n\n if (model.createdOn != null) {\n model.createdOn = new Date(model.createdOn);\n }\n\n if (model.versions != null) {\n this.versions = new PJQ.collections.files.Files(model.versions);\n }\n }\n return model;\n },\n convert: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint(this.endpointArr()) + '/convert',\n isApi2: true\n }).post().done(callback).fail(_.bind(function () {\n PJQ.files.logDownloadFailure({\n file: this,\n error: \"Failed to convert file\"\n })\n }, this));\n },\n checkStatus: function (callback) {\n new PJQ.ajax.Request({\n url: this.get('url')\n }).get().done(callback).fail(_.bind(function () {\n PJQ.files.logDownloadFailure({\n file: this,\n error: \"Failed to process file\"\n })\n }, this));\n },\n canRender: function () {\n let extension = PJQ.helpers.fileHelpers.getExtension(this.get(\"name\"));\n return extension === 'pdf' || extension === 'tiff' || extension === 'tif';\n },\n isImage: function () {\n return _.contains(PJQ.constants.files.imageExtensions, PJQ.helpers.fileHelpers.getExtension(this.get(\"name\")));\n },\n getNameNoExtension: function () {\n return this.get('name').replace(this.getExtension(), '');\n },\n getExtension: function () {\n let ext = this.get('name').split('.').pop();\n return ext === \"\" ? ext : ('.' + ext);\n },\n icon: function (isColored = false) {\n let icon;\n if (this.get('isFolder')) {\n icon = 'folder';\n } else {\n icon = 'file';\n switch (PJQ.helpers.fileHelpers.getExtension(this.get(\"name\"))) {\n case 'avi':\n case 'mp4':\n case 'flv':\n case 'mov':\n case 'qt':\n case 'wmv':\n case 'webm':\n icon = 'file-video';\n break;\n case 'mp3':\n case 'wav':\n case 'flac':\n case 'm4a':\n case 'm4b':\n case 'wma':\n case 'aac':\n case 'aiff':\n icon = 'file-audio';\n break;\n case 'png':\n case 'jpg':\n case 'jpeg':\n case 'bmp':\n case 'gif':\n case 'tif':\n case 'tiff':\n icon = 'file-image';\n break;\n case 'pdf':\n icon = 'file-pdf';\n break;\n case 'xls':\n case 'xlsx':\n icon = 'file-excel';\n break;\n case 'doc':\n case 'docx':\n icon = 'file-word';\n break;\n case 'ppt':\n case 'pptx':\n icon = 'file-powerpoint';\n break;\n case 'csv':\n icon = 'file-csv';\n break;\n case 'zip':\n case 'rar':\n case '7z':\n case 'gz':\n case 'tar':\n icon = 'file-archive';\n break;\n case 'eml':\n case 'mbox':\n case 'msg':\n icon = 'envelope';\n break;\n }\n }\n return (isColored ? 'file-type ' : '') + 'fal fa-' + icon;\n },\n getFolderAttachments: function (isRecursive = false, filter) {\n return this.collection.getFolderAttachments(this, isRecursive, filter);\n },\n fetchFolderAttachments: function (options = {recursive: false}, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n }\n ], [\n {\n parameter: 'folderId',\n value: this.get('guid')\n },\n {\n parameter: 'recursive',\n value: options && options.recursive\n }\n ])\n //isApi2: true //dont do this yet\n }).get().done(_.bind(function (files) {\n if (this.collection != null) {\n this.collection.add(files, {\n silent: true\n });\n }\n this.isFetched = true;\n callback(this.collection.get(_.map(files, function (file) {\n return file.entryId;\n })));\n }, this)).fail(_.bind(function (xhr, err, result) {\n callback(null);\n }, this));\n },\n getSiblingAttachments: function () {\n let folderId = this.get('folderId');\n if (this.collection == null || !(folderId > 0)) {\n return [this];\n }\n\n return this.collection.where({folderId: folderId});\n },\n getParentFolder: function (recursive = false, contextFolder = null, folders = null) {\n let folderId = this.get('folderId');\n if (recursive) {\n if (contextFolder != null) {\n folderId = contextFolder.get('folderId');\n }\n\n if (folders == null) {\n folders = [];\n }\n\n if (folderId != null) {\n let parentFolder = this.collection.findWhere({\n entryId: folderId\n });\n if (parentFolder != null) {\n folders.push(parentFolder);\n return this.getParentFolder(recursive, parentFolder, folders);\n }\n }\n return folders;\n }\n\n if (this.collection == null) {\n return null;\n }\n\n return this.collection.findWhere({\n entryId: folderId\n });\n },\n getDepth: function () {\n if (this.collection == null) {\n return 0;\n }\n\n let folder = this.getParentFolder(),\n depth = 0;\n while (folder != null) {\n depth++;\n folder = folder.getParentFolder();\n }\n return depth;\n }\n});\n\nPJQ.models.files.ZipFile = PJQ.models.files.File.extend({\n idAttribute: \"guid\",\n endpoint: function () {\n if (PJQ.app.options.isV2Zips) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'zips',\n value: this.get('guid')\n }\n ]);\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'zips',\n value: this.get('guid')\n }\n ]);\n },\n beforeInit: function (options) {\n if (PJQ.app.options.isV2Zips) {\n options.isAPIv2 = true;\n }\n },\n downloadEndpoint: function () {\n return this.endpoint() + '/download';\n },\n download: function () {\n let url = this.get('url');\n if (_.size(url) === 0 && _.size(this.get('key')) > 0) {\n url = this.urlForKey() + '/download';\n }\n\n if (_.size(url) > 0) {\n PJQ.files.downloadFile(url, {\n isEndpoint: false,\n isApi2: true,\n isAPIv2: PJQ.app.options.isV2Zips\n });\n } else {\n PJQ.files.queueDownload(this.endpoint(), {guids: this.get('guids')}, null, PJQ.app.options.isV2Zips)\n }\n },\n addNotification: function (email) {\n new PJQ.models.files.ZipFileNotification({\n guid: this.get('guid'),\n email: email\n }).save();\n },\n cancel: function () {\n if (!this.get('isReady')) {\n this.set('status', PJQ.constants.files.zipStatus.CANCELLED);\n new PJQ.ajax.Request({\n endpoint: this.endpoint('cancel')\n }).delete();\n }\n }\n});\n\nPJQ.models.files.ZipFileNotification = PJQ.models.BaseModel.extend({\n idAttribute: 'zipFileNotificationId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'zips',\n value: this.get('guid')\n },\n {\n endpoint: 'notifications'\n }\n ]);\n }\n});\n\nPJQ.models.files.DrawingNotification = PJQ.models.BaseModel.extend({\n idAttribute: 'notificationId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'downloads',\n value: this.get('guid')\n },\n {\n endpoint: 'notifications'\n }\n ]);\n }\n});\n\n//Collections\nPJQ.collections.files = {};\n\nPJQ.collections.files.Files = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.files.File,\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n }\n ], [\n {\n parameter: 'folderId',\n value: this.options ? this.options.folderId : null\n }\n ]),\n share: function (data, project, callback) {\n let endpoint;\n if (project != null) {\n if (this.options.isPhotos) {\n endpoint = \"/projects/\" + project.id.toString() + \"/photos/share\";\n } else {\n endpoint = \"/projects/\" + project.id.toString() + \"/attachments/share\";\n }\n } else {\n endpoint = \"/files/share\";\n }\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n subject: data != null ? data.subject : null,\n emails: data != null ? data.emails : null,\n guids: _.map(this.models, function (model) {\n return model.get('guid');\n })\n }\n }).post().done(function (data) {\n if (typeof callback === 'function') {\n callback(data);\n }\n }).fail(function () {\n callback();\n });\n },\n download: function () {\n let hasDrawings = _.find(this.models, function (attachment) {\n return attachment.get('isDrawing');\n }) != null;\n if (hasDrawings) {\n PJQ.files.downloadDrawings(this.models);\n } else {\n new PJQ.models.files.ZipFile({\n guids: _.map(this.models, function (file) {\n return file.get('guid')\n })\n }).download();\n }\n },\n getRootAttachments: function () {\n return this.where({folderId: 0});\n },\n getSharedFolder: function () {\n let sharedFolderRoot = this.get(-1);\n if (sharedFolderRoot == null) {\n let rootFolder = new PJQ.models.files.File({\n entryId: -1,\n folderId: 0,\n name: 'Shared',\n isFolder: true\n });\n this.add(rootFolder);\n _.each(this.models, _.bind(function (model) {\n if (model.get('entryId') !== -1 && null == _.find(this.models, function (modelComp) {\n return modelComp.get('entryId') === model.get('folderId');\n })) {\n model.set('folderId', -1);\n }\n }, this));\n }\n\n return _.find(this.models, function (model) {\n return model.get('folderId') === 0 && model.get('entryId') === -1;\n });\n },\n getPrivateFolder: function () {\n return _.find(this.models, function (model) {\n return model.get('folderId') === 0 && model.get('entryId') > 0;\n });\n },\n getRootSharedAttachments: function () {\n let sharedFolders = this.where({folderId: 0});\n if (_.size(sharedFolders) > 1) {\n return sharedFolders\n }\n let result = [];\n _.each(sharedFolders, function (sharedFolder) {\n result.push(...this.getFolderAttachments(sharedFolder));\n }, this);\n return result;\n },\n fetchFoldersAttachments: function (folders, options = {recursive: false}, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n }\n ], [\n {\n parameter: 'folderIds',\n value: _.map(_.filter(folders, function (folder) {\n return folder.get('isFolder');\n }), function (f) {\n return f.get('guid');\n })\n },\n {\n parameter: 'recursive',\n value: options && options.recursive\n }\n ])\n //isApi2: true //dont do this yet\n }).get().done(_.bind(function (files) {\n this.add(files, {\n silent: true\n });\n callback(this.get(_.map(files, function (file) {\n return file.guid;\n })));\n }, this)).fail(_.bind(function (xhr, err, result) {\n callback(null);\n }, this));\n },\n getFolderAttachments: function (folder, isRecursive = false, filter = {hideFiles: false, hideFolders: false}) {\n if (folder == null || !folder.get('isFolder')) {\n return [];\n }\n\n if (isRecursive) {\n let result = [];\n _.each(this.where({folderId: folder.get('entryId')}), function (attachment) {\n if (attachment.get('isFolder')) {\n if (!filter.hideFolders) {\n result.push(attachment);\n }\n\n result = _.union(result, this.getFolderAttachments(attachment, isRecursive, filter));\n } else if (!filter.hideFiles) {\n result.push(attachment);\n }\n }, this);\n return result;\n } else {\n let where = {\n folderId: folder.get('entryId')\n };\n if (filter.hideFolders)\n where.isFolder = true;\n else if (filter.hideFiles) {\n where.isFolder = false;\n }\n\n return this.where(where);\n }\n },\n destroy: function (callback) {\n let privateFolder = this.getPrivateFolder(),\n privateFolderId = privateFolder ? privateFolder.get('entryId') : null,\n models = _.filter(this.models, _.bind(function (model) {\n return model.get('entryId') !== privateFolderId;\n }, this));\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n }\n ]),\n data: {\n entryList: _.map(models, function (model) {\n return model.get('entryId')\n })\n },\n }).delete().done(_.bind(function () {\n callback(true);\n }, this)).fail(_.bind(function () {\n callback(false);\n }, this));\n }\n});\n\nPJQ.collections.files.FileShare = PJQ.collections.files.Files.extend({\n model: PJQ.models.files.File,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files'\n },\n {\n endpoint: 'share',\n value: this.options.accessKey\n }\n ]);\n }\n});\n\n//Views\nPJQ.views.files = {};\n\nPJQ.views.files.FileUploader = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader'),\n endpoint: \"/files\",\n canUpload: true,\n canDelete: true,\n dictRemoveFile: \"Delete\",\n isRemoveOnComplete: false,\n ignoreHiddenFiles: false,\n allowedExtensions: null,\n dictDefaultMessage: \"Drop files here or click to upload\",\n parallelUploads: 2,\n chunking: true,\n onError: _.noop,\n onSuccess: _.noop,\n onDrop: _.noop,\n useFileAPI: true,\n useApiV2: false,\n uuid: null\n },\n events: {\n 'click .download-import-template': 'downloadImportTemplate'\n },\n downloadImportTemplate: function (e) {\n e.stopPropagation();\n\n if (typeof this.options.uploadTemplateCallback === 'function') {\n this.options.uploadTemplateCallback();\n }\n },\n getUrl: function (files) {\n let svc, endpoint;\n if (this.options.useApiV2) {\n svc = PJQ.constants.services.APIv2;\n endpoint = '/uploads';\n } else if (this.options.useFileAPI) {\n svc = PJQ.constants.services.FILES;\n endpoint = this.options.endpoint;\n } else {\n svc = PJQ.constants.services.API;\n endpoint = this.options.endpoint;\n }\n\n let result = PJQ.helpers.urlHelpers.buildApiUrl(endpoint, {\n service: svc\n });\n result += (result.indexOf('?') === -1 ? \"?\" : \"&\") + \"folder=\" + this.options.uuid;\n // there should only ever be one file in the files array\n if (_.size(files) === 1) {\n let file = files[0];\n if (_.size(file.fullPath) > 0 && file.fullPath !== file.name) {\n let folderPath = file.fullPath.replace('/' + file.name, '');\n if (_.size(folderPath) > 0) {\n result += ('&fp=' + encodeURIComponent(folderPath));\n }\n }\n }\n return result;\n },\n beforeRender: function () {\n if (this.options.uuid === null)\n this.options.uuid = PJQ.helpers.guid();\n\n if (this.collection == null) {\n this.collection = new PJQ.collections.files.Files();\n }\n },\n renderData: function () {\n return {\n options: this.options,\n collection: this.collection,\n uuid: \"fileUpload_\" + this.options.uuid\n };\n },\n afterRender: function () {\n if (!this.options.canDelete)\n this.options.dictRemoveFile = \"\";\n this.options.headers = PJQ.helpers.apiHelpers.getHeaders();\n\n let acceptedFilesFormatted = _.map(this.options.allowedExtensions, function (extension) {\n return '.' + extension.toLowerCase();\n });\n this.options.dropzoneOptions = _.defaults(this.options, {\n url: _.bind(this.getUrl, this),\n hiddenInputContainer: this.$el[0],\n maxFilesize: 15000,\n acceptedFiles: _.size(acceptedFilesFormatted) > 0 ? acceptedFilesFormatted.join(',') : null\n });\n\n this.renderDropzone();\n\n if (this.options.canUpload) {\n let hasUploadTemplateCallback = typeof this.options.uploadTemplateCallback === 'function';\n let $footer = $('<div class=\"mt-1\" />');\n this.$el.append($footer);\n\n if (_.size(this.options.allowedExtensions) > 0) {\n $footer.append($('<span>', {\n class: 'text-muted fs-12 ml-1'\n }).append('<strong>Allowed File Types: </strong>' + this.options.allowedExtensions.join(',') + ((this.options.maxFiles || hasUploadTemplateCallback) ? ' |' : '')));\n }\n\n if (this.options.maxFiles) {\n $footer.append($('<span>', {\n class: 'text-muted fs-12 ml-1'\n }).append('<strong>Max Files: </strong>' + this.options.maxFiles + (hasUploadTemplateCallback ? ' |' : '')));\n }\n\n if (hasUploadTemplateCallback) {\n $footer.append($('<span>', {\n class: 'text-muted fs-12 ml-1'\n }).append('<strong>Upload Template: </strong>' + '<a class=\"download-import-template\" href=\"javascript:void(0)\">Download</a>'));\n }\n }\n },\n renderDropzone() {\n if (this.$('#fileUpload_' + this.options.uuid).length > 0) {\n this.dropzone = new Dropzone('#fileUpload_' + this.options.uuid, this.options.dropzoneOptions);\n this.dropzone.on('complete', _.bind(function (file) {\n if (this.options.isRemoveOnComplete) {\n this.removeFile(file);\n }\n if (file.status === 'success') {\n this.onSuccess(file);\n } else if (file.status === 'error') {\n if (_.size(this.options.dropzoneOptions.acceptedFiles) > 0 && !_.contains(this.options.dropzoneOptions.acceptedFiles, function (extension) {\n return file.name.toLowerCase().indexOf(extension);\n })) {\n this.removeFile(file);\n this.showError('The file type you uploaded is not allowed');\n }\n\n this.onError(file);\n }\n }, this));\n this.dropzone.on('drop', _.bind(function () {\n if (typeof this.options.onDrop === 'function') {\n this.options.onDrop();\n }\n }, this));\n }\n },\n showError: function (errorText, timeout = 2000) {\n this.errorAlert = new PJQ.Alert(this.$('.file-upload'), {\n type: 'danger',\n extraClasses: ['dropzone-error-alert', 'p-absolute', 'wd-100', 'left-0', 'text-align-center'],\n style: 'bottom:-13px !important;',\n text: errorText,\n isAppend: true,\n animation: {\n in: 'fadeIn',\n out: 'fadeOut'\n },\n timeout: timeout\n });\n\n return this.errorAlert;\n },\n isUploading: function () {\n return this.dropzone != null && _.size(this.dropzone.getQueuedFiles()) + _.size(this.dropzone.getUploadingFiles()) > 0;\n },\n clearError: function () {\n if (this.errorAlert != null) {\n this.errorAlert.destroy();\n }\n },\n removeFile: function (file) {\n if (this.dropzone != null) {\n this.dropzone.removeFile(file);\n }\n\n if (this.collection != null && file.model != null) {\n this.collection.remove(file.model);\n }\n },\n onError: function (data) {\n this.options.onError(data);\n },\n onSuccess: function (data) {\n let res = JSON.parse(data.xhr.response);\n res.name = res.fileName ?? res.name;\n this.options.onSuccess(res, data);\n }\n});\n\nPJQ.views.files.FileUploaderGrid = PJQ.views.files.FileUploader.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-Grid'),\n subTemplates: {\n gridFile: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-Grid-File'),\n listFile: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-List-File')\n },\n style: 'grid',\n sideBySide: false,\n isSmall: false, //this is used when the uploader is in a small location so the elements/text sizes need to be smaller\n endpoint: \"/files\",\n canUpload: true,\n canDelete: true,\n canView: true,\n dictRemoveFile: \"Delete\",\n isRemoveOnComplete: false,\n ignoreHiddenFiles: false,\n allowedExtensions: null,\n dictDefaultMessage: \"Drop files here or click to upload\",\n canDownloadAll: false,\n includeProjectAttachments: false,\n parallelUploads: 1,\n chunking: true,\n offsetTopText: false,\n onError: _.noop,\n onSuccess: _.noop,\n onFileStatusChange: _.noop,\n onDrop: _.noop,\n onDelete: null, //this must be null or correctly use the callback (2nd param)\n afterDelete: _.noop,\n previewImageDimension: 150,\n showCreatedByLink: true,\n useFileAPI: true,\n useApiV2: false,\n hasNotes: false,\n isVersioned: false,\n onNewVersion: _.noop,\n context: null,\n contextId: null,\n onAnnotationChange: null,\n canAddAnnotations: true,\n mergeAnnotations: null,\n sortDirection: 'desc',\n maxFiles: null,\n onNoteChanged: null\n },\n events: {\n 'click .file-preview-image': 'viewFile',\n 'click .file-view-pdf': 'viewPdfFile',\n 'click .file-preview-download': 'downloadFile',\n 'click .file-preview-delete': 'deleteFile',\n 'click .btn-versions': 'viewFileVersions',\n 'click .file-edit-note': 'editNote',\n 'click .download-all': 'downloadAll',\n 'click .dz-upload-project-attachments': 'uploadFromProjectAttachments',\n 'click .download-import-template': 'downloadImportTemplate'\n },\n viewFileVersions: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n\n if (file == null && this.options.isVersioned) {\n // Find the model in the collection the versioned file belongs to\n file = _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n return true;\n }\n }\n return false;\n });\n }\n\n new PJQ.views.files.FileVersionsModal({\n model: file,\n collectionDefinition: this.collection ? this.collection.constructor : null,\n onSave: _.bind(function (files) {\n let parentAttachment = files[0].get('parentAttachmentId') != null ? this.collection.get(files[0].get('parentAttachmentId')) : null;\n\n if (parentAttachment != null) {\n parentAttachment.versions.add(files);\n }\n\n this.collection.add(files);\n if (this.options.onNewVersion) {\n this.options.onNewVersion();\n }\n }, this)\n });\n },\n beforeFirstRender: function () {\n this.options.uuid = PJQ.helpers.guid();\n\n let prefs = null;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else if (PJQ.app.session != null) {\n prefs = PJQ.app.session.preferences;\n }\n if (prefs != null) {\n this.options.sideBySide = prefs.hasPref(PJQ.constants.preferenceTypes.FILE_UPLOADER_SIDE_BY_SIDE);\n }\n },\n renderDropzone() {\n if (this.options.isSmall) {\n this.$('.file-upload').addClass('file-upload-small');\n }\n\n if (this.options.style.toLowerCase() === 'list') {\n this.$('.file-upload').addClass('file-upload-list');\n } else {\n this.$('.file-upload').addClass('file-upload-grid');\n }\n\n if (this.options.canUpload) {\n this.dropzone = new Dropzone(this.$('#fileUpload_' + this.options.uuid)[0], _.extend(this.options.dropzoneOptions, {\n maxFiles: this.options.maxFiles,\n maxfilesexceeded: _.bind(function (file) {\n this.removeFile(file);\n this.showError('Maximum files exceeded');\n }, this),\n addedfile: _.bind(function (file) {\n if (this.options.maxFiles && _.size(_.filter(this.collection.models, function (model) {\n return !model.get('delete') && !model.get('isDeleted');\n }, this)) >= this.options.maxFiles) {\n this.removeFile(file);\n this.showError('Maximum files exceeded');\n return;\n }\n let fileModel = new this.collection.model({\n name: file.name,\n status: 'queued'\n });\n\n if (PJQ.app.session.contact != null) {\n fileModel.set('createdBy', PJQ.app.session.contact.toJSON());\n } else if (PJQ.app.session.user != null) {\n fileModel.set('createdBy', PJQ.app.session.user.toJSON());\n }\n\n if (this.options.versionByName) {\n let parentAttachment;\n if (typeof this.options.getParentAttachment === 'function') {\n parentAttachment = this.options.getParentAttachment(fileModel);\n } else {\n parentAttachment = _.find(this.collection.models, (file) => {\n return file.get('name') === fileModel.get('name') && !file.get('delete')\n && (file.get('parentAttachmentId') == null || file.get('parentAttachmentId') === file.id);\n });\n }\n if (parentAttachment != null) {\n fileModel.set('parentAttachmentId', parentAttachment.id);\n }\n }\n\n fileModel.file = file;\n file.model = fileModel;\n this.collection.add(fileModel);\n file.$previewElement = this.renderFile(fileModel, this.options.style.toLowerCase() === 'grid');\n file.$previewElement.addClass('uploading queued');\n file.previewElement = file.$previewElement[0];\n }, this),\n thumbnail: function (file, dataUrl) {\n if (file.$previewElement != null) {\n file.$previewElement.find('.file-preview-image').attr('src', dataUrl);\n }\n },\n uploadprogress: function (file, progress) {\n file.$previewElement.removeClass('queued');\n\n if (file.model.get('status') !== file.status) {\n file.model.set('status', file.status);\n this.options.onFileStatusChange(file);\n }\n\n //This is a fix for chunking progress\n //Dropzone triggers a progress event for the end of a chunk w/ a progress of 100%\n //We want to ignore all progress events that are not related to the total upload progress of this file\n if ((file.status === 'uploading' && progress < 100) || file.status === 'success') {\n file.lastProgress = Math.ceil(progress);\n let width = file.lastProgress.toString() + '%';\n file.$previewElement.find(\".file-preview-progress .progress-bar\").css('width', width).html(width);\n }\n },\n drop: _.bind(function () {\n if (typeof this.options.onDrop === 'function') {\n this.options.onDrop();\n }\n }, this),\n complete: _.bind(function (file) {\n file.model.set('status', file.status);\n this.options.onFileStatusChange(file);\n if (file.status === 'success') {\n file.$previewElement.removeClass('uploading').addClass('uploaded');\n\n file.model.dataUrl = file.dataURL;\n let response = JSON.parse(file.xhr.response);\n if (this.options.useApiV2 || (this.options.endpoint !== '/files' && !this.options.useApiV2)) {\n file.model.set({\n uploadId: response.uploadId,\n name: response.name ?? response.fileName ?? response.fileData?.fileName\n }, {\n silent: true\n });\n } else {\n file.model.set({\n folder: response.folder,\n name: response.name ?? response.fileName ?? response.fileData?.fileName\n }, {\n silent: true\n });\n }\n\n if (!this.options.useApiV2 && this.options.endpoint !== '/files') {\n let fileResponse;\n if (PJQ.helpers.objectHelpers.refinedType(response) === 'array') {\n _.each(response, function (responseFile) {\n if (responseFile.isFolder) {\n this.collection.add(responseFile);\n } else {\n fileResponse = responseFile;\n }\n }, this);\n } else {\n fileResponse = response;\n }\n file.model.set(fileResponse, {\n silent: true\n });\n }\n\n if (file.model.id > 0) {\n file.$previewElement.find('.file-preview-download').removeClass('hidden');\n }\n\n this.onSuccess(file);\n } else if (file.status === 'error') {\n if (_.size(this.options.dropzoneOptions.acceptedFiles) > 0 && !_.contains(this.options.dropzoneOptions.acceptedFiles, function (extension) {\n return file.name.toLowerCase().indexOf(extension);\n })) {\n this.removeFile(file);\n this.showError('The file type you uploaded is not allowed');\n } else {\n let retries = file.model.get('retries');\n retries = retries != null ? retries : 0;\n if (retries > -1) {\n file.$previewElement.removeClass('uploading').addClass('failed');\n } else {\n file.model.set('retries', 1);\n new File([file], file.name, {type: file.type});\n this.dropzone.uploadFile(file);\n }\n }\n\n this.onError(file);\n }\n }, this)\n }));\n\n }\n\n this.renderFiles();\n },\n renderFiles() {\n if (this.options.canUpload) {\n this.renderUploadMessage();\n }\n\n _.each(_.sortBy(_.filter(this.collection.models, function (model) {\n return !model.get('isDeleted');\n }), _.bind(function (model) {\n if (this.options.sortBy)\n return model.get(this.options.sortBy);\n\n if (this.options.sortDirection && this.options.sortDirection.toLowerCase() === 'asc') {\n return model.id;\n }\n return -model.id;\n }, this)), _.bind(function (model) {\n let fileToRender = model;\n\n // If the model is versioned, we want to render the newest version.\n if (this.options.isVersioned) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n fileToRender = _.max(model.versions.models, (v) => v.get('version'));\n } else if (model.get('version') > 1) {\n fileToRender = null;\n }\n }\n\n if (fileToRender != null) {\n this.renderFile(fileToRender);\n }\n }, this));\n PJQ.app.lazyLoad().update();\n },\n renderFile(file, isPrepend = false) {\n let fileTemplate;\n if (this.options.style.toLowerCase() === 'list') {\n fileTemplate = this.options.subTemplates.listFile;\n } else {\n fileTemplate = this.options.subTemplates.gridFile;\n }\n let $fileEl = PJQ.templating.TemplateRenderer.parseTemplate(fileTemplate, {\n model: file,\n showCreatedByLink: this.options.showCreatedByLink,\n canDelete: this.options.canDelete,\n canView: this.options.canView,\n isImage: file.isImage(),\n thumbUrl: file.thumbnailUrl(),\n previewImageDimension: this.options.previewImageDimension,\n hasNotes: this.options.hasNotes,\n isVersioned: this.options.isVersioned,\n versions: this.options.versions ? this.options.versions : null\n });\n if (this.options.canUpload && !this.$('.dz-message').hasClass('dz-message-top')) {\n $fileEl.addClass('hidden');\n this.renderUploadMessage(_.bind(function () {\n $fileEl.removeClass('hidden');\n }, this));\n }\n let $outer;\n if (this.options.sideBySide && file.id > 0) {\n $outer = this.$('.files-existing-container');\n } else {\n $outer = this.$('.files-container');\n }\n if (isPrepend) {\n $outer.prepend($fileEl);\n } else {\n $outer.append($fileEl);\n }\n return $fileEl;\n },\n renderUploadMessage: function (callback = _.noop) {\n let $message = this.$('.dz-message'),\n topClass = 'dz-message-top',\n topCSS = {\n height: '40px'\n };\n\n if (this.options.offsetTopText)\n topCSS.right = '3rem';\n\n if ((!this.options.sideBySide && this.collection.length > 0) || (this.collection.findWhere(function (attachment) {\n return attachment.isNew();\n }) != null)) {\n this.$('.file-upload').removeClass('dz-clickable');\n if (!$message.hasClass('dz-message-top')) {\n $message.addClass(topClass).animate(topCSS, 500, _.bind(function () {\n $message.css(topCSS).html('Drop files or <a href=\"javascript:void(0)\" class=\"file-upload-upload ml-1 text-orange\">click here to upload</a>');\n if (this.options.offsetTopText) {\n $message.removeAttr('left')\n $message.css('right', '3rem');\n }\n if (callback != null) {\n callback();\n }\n }, this)).addClass(topClass);\n } else {\n callback();\n }\n } else {\n $message.html('Drop files or click to upload');\n if (callback != null) {\n callback();\n }\n }\n },\n uploadFromProjectAttachments: function (e) {\n new PJQ.views.projects.AttachmentsModal({\n onSave: _.bind(function (files) {\n _.each(files, function (file) {\n let fileModel = new PJQ.models.files.File(file.toJSON());\n if (!fileModel.get('isFolder')) {\n if (fileModel.get('drawingId') > 0) {\n fileModel.set('entryId', -fileModel.get('drawingId'));\n }\n fileModel.set('attachmentId', null);\n this.collection.add(fileModel);\n this.options.onSuccess(fileModel);\n }\n }, this)\n this.render();\n }, this)\n });\n },\n viewFile: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n\n // Find and set file to the newest version if the file is versioned.\n if (file == null && this.options.isVersioned) {\n _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n file = versionFile;\n return true;\n }\n }\n return false;\n });\n }\n\n PJQ.app.view.renderPhotoViewer({\n model: file,\n collection: this.collection,\n canDelete: this.options.canDelete,\n onDelete: _.bind(function () {\n this.render()\n }, this)\n });\n },\n viewPdfFile: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n\n // Find and set file to the newest version if the file is versioned.\n if (file == null && this.options.isVersioned) {\n _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n file = versionFile;\n return true;\n }\n }\n return false;\n });\n }\n\n if (file.get('entryId') < 0) {\n let drawing = new PJQ.models.drawings.Drawing({\n drawingId: -file.get('entryId')\n });\n drawing.fetch({\n success: _.bind(function () {\n new PJQ.views.drawings.DrawingViewer({\n model: drawing,\n context: this.options.context,\n contextId: this.options.contextId,\n isAnnotationsEnabled: true,\n noNavigation: true,\n canAddAnnotations: this.options.canAddAnnotations,\n onAnnotationChange: this.options.onAnnotationChange,\n mergeAnnotations: this.options.mergeAnnotations != null ? this.options.mergeAnnotations.models : null\n });\n }, this)\n })\n } else {\n new PJQ.views.files.FileViewer({\n model: file\n });\n }\n },\n downloadFile: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n\n // Find and set file to the newest version if the file is versioned.\n if (file == null && this.options.isVersioned) {\n _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n file = versionFile;\n return true;\n }\n }\n return false;\n });\n }\n\n if (file.versions != null && _.size(file.versions.models) > 0) {\n let newestVersion = file.versions.sortBy((v) => {\n return -v.id;\n })[0];\n return newestVersion.download();\n }\n file.download();\n },\n downloadAll: function () {\n this.collection.download();\n },\n downloadVersion: function (e) {\n let file = this.options.versions.get($(e.currentTarget).closest('.btn-download-version').data('cid'))\n file.download();\n },\n editNote: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n\n // Find the collection model the version belongs to. Keep all notes on the collection model.\n if (file == null && this.options.isVersioned) {\n file = _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n return true;\n }\n }\n return false;\n });\n }\n\n new PJQ.views.submittals.FileEditorModal({\n model: file,\n isNoteEdit: true,\n collection: this.collection,\n isNewVersion: true,\n onSave: () => {\n this.render();\n\n if (typeof this.options.onNoteChanged === 'function') {\n this.options.onNoteChanged(file);\n }\n }\n });\n },\n deleteFile: function (e) {\n let previewContainer = $(e.currentTarget).closest('.file-preview'),\n file = this.collection.get(previewContainer.data('cid'));\n\n // Find the collection model the version file belongs to and delete that.\n if (file == null && this.options.isVersioned) {\n file = _.find(this.collection.models, function (model) {\n if (model.versions != null && _.size(model.versions.models) > 0) {\n let versionFile = model.versions.get($(e.currentTarget).closest('.file-preview').data('cid'));\n if (versionFile != null) {\n return true;\n }\n }\n return false;\n });\n }\n\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(file, _.bind(function () {\n previewContainer.remove();\n this.options.afterDelete();\n }, this));\n } else {\n file.destroy();\n previewContainer.remove();\n this.options.afterDelete();\n }\n }\n});\n\nPJQ.views.files.ZipProgressModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Zip-Progress'),\n subTemplates: {\n content: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Zip-Progress-Content')\n },\n checkProgressInterval: 2000,\n minWaitSeconds: null\n },\n events: {\n 'click .zip-download-button': 'downloadZip',\n 'click .zip-email-button': 'emailZip',\n 'keyup .zip-email': 'emailChanged',\n 'click .zip-cancel-button': 'cancelZip'\n },\n beforeModalCreated: function () {\n if (this.options.minWaitSeconds > 0) {\n this.isWaiting = true;\n this.waitTimeout = setTimeout(_.bind(function () {\n this.isWaiting = false;\n let status = this.model.get('status');\n if (this.model.get('isReady') && (status === PJQ.constants.files.zipStatus.COMPLETE || status === PJQ.constants.files.zipStatus.COMPLETE_ASYNC)) {\n this.downloadZip();\n this.stopChecking();\n }\n }, this), this.options.minWaitSeconds * 1000);\n }\n },\n renderData: function () {\n return {\n model: this.model,\n showPromo: this.options.showPromo,\n promoType: this.options.promoType\n };\n },\n afterRender: function () {\n this.renderContent();\n this.checkZipStatus();\n },\n checkZipStatus: function () {\n let status = this.model.get('status');\n if (this.model.get('isReady') && (status === PJQ.constants.files.zipStatus.COMPLETE || status === PJQ.constants.files.zipStatus.COMPLETE_ASYNC)) {\n if (this.isWaiting) {\n this.renderContent();\n } else {\n this.downloadZip();\n }\n } else if (status === PJQ.constants.files.zipStatus.NEW || status === PJQ.constants.files.zipStatus.QUEUED || status === PJQ.constants.files.zipStatus.IN_PROGRESS) {\n this.checkStatusTimeout = setTimeout(_.bind(function () {\n this.model.fetch({\n success: _.bind(function () {\n this.checkZipStatus();\n }, this),\n fail: _.bind(function (model, result) {\n this.model.set('status', PJQ.constants.files.zipStatus.FAILED);\n this.renderContent();\n PJQ.files.logDownloadFailure({\n model: model,\n result: result\n });\n }, this)\n });\n }, this), this.options.checkProgressInterval);\n } else if (status === PJQ.constants.files.zipStatus.CANCELLED || status === PJQ.constants.files.zipStatus.FAILED) {\n this.renderContent();\n }\n },\n renderContent: function () {\n let defaultEmail = \"\";\n if (PJQ.app.session.user != null) {\n defaultEmail = PJQ.app.session.user.get('email');\n } else if (PJQ.app.session.contact != null) {\n defaultEmail = PJQ.app.session.contact.get('email');\n }\n this.renderSubTemplate(false, this.options.subTemplates.content, this.$('.download-content'), {\n model: this.model,\n defaultEmail: defaultEmail,\n isWaiting: this.isWaiting\n }, _.bind(function () {\n if (this.model.get('status') === PJQ.constants.files.zipStatus.CANCELLED || this.model.get('status') === PJQ.constants.files.zipStatus.FAILED) {\n this.$('.zip-cancel-button').text('Close');\n } else {\n new PJQ.Loader(this.$('.zip-loader'), {\n type: 'block'\n });\n }\n }, this));\n },\n downloadZip: function () {\n if (!this.cancel && !this.downloaded) {\n this.downloaded = true;\n\n this.model.download();\n\n if (this.options.showPromo) {\n this.renderContent();\n } else {\n this.removeModal();\n }\n }\n },\n emailChanged: function () {\n this.$('.zip-email-button').prop('disabled', this.$('.zip-email').val().indexOf('@') <= 0);\n },\n emailZip: function () {\n this.stopChecking();\n this.model.addNotification(this.$('.zip-email').val());\n },\n cancelZip: function () {\n //Clear the timeout for checking the status since we are cancelling it\n //Do this first because once its cancelled the /download endpoint will return 404\n this.stopChecking();\n if (this.model.get('status') === PJQ.constants.files.zipStatus.IN_PROGRESS) {\n //Only send the cancel request to the server if its in progress\n this.model.cancel();\n }\n },\n stopChecking: function () {\n this.cancel = true;\n if (this.checkStatusTimeout != null) {\n clearTimeout(this.checkStatusTimeout);\n }\n if (this.waitTimeout != null) {\n clearTimeout(this.waitTimeout);\n }\n }\n});\n\nPJQ.views.files.FileProgressModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-File-Progress'),\n subTemplates: {\n content: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-File-Progress-Content')\n }\n },\n events: {\n 'click .file-cancel-button': 'cancelDownload'\n },\n afterRender: function () {\n this.renderContent();\n },\n renderContent: function () {\n this.renderSubTemplate(false, this.options.subTemplates.content, this.$('.modal-body'), {\n model: this.model\n }, _.bind(function () {\n new PJQ.Loader(this.$('.file-loader'), {\n type: 'block'\n });\n if (this.model.get('isReady')) {\n this.downloadFile();\n } else if (this.model.get('isProcess') && _.size(this.model.get('url')) > 0) {\n this.checkStatus();\n } else {\n this.model.convert(_.bind(function () {\n this.downloadFile();\n }, this));\n }\n }, this));\n },\n downloadFile: function () {\n if (!this.isCancel) {\n this.model.download();\n this.removeModal();\n }\n },\n checkStatus: function () {\n setTimeout(_.bind(function () {\n this.model.checkStatus(_.bind(function (data) {\n this.model.set(data);\n if (!data.isReady) {\n this.checkStatus();\n } else {\n this.downloadFile();\n }\n }, this));\n }, this), 2000);\n },\n cancelDownload: function () {\n this.isCancel = true;\n }\n});\n\nPJQ.views.files.DrawingProgressModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Drawing-Progress'),\n subTemplates: {\n content: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Drawing-Progress-Content')\n },\n checkProgressInterval: 2000,\n minWaitSeconds: null\n },\n events: {\n 'click .drawing-download-button': 'downloadZip',\n 'click .drawing-email-button': 'emailZip',\n 'keyup .drawing-email': 'emailChanged',\n 'click .drawing-cancel-button': 'cancelZip'\n },\n beforeModalCreated: function () {\n if (this.options.minWaitSeconds > 0) {\n this.isWaiting = true;\n this.waitTimeout = setTimeout(_.bind(function () {\n this.isWaiting = false;\n let status = this.model.get('status');\n if (this.model.get('isReady') && (status === PJQ.constants.drawings.downloadStatus.COMPLETE)) {\n this.downloadDrawings();\n this.stopChecking();\n }\n }, this), this.options.minWaitSeconds * 1000);\n }\n },\n renderData: function () {\n return {\n model: this.model,\n showPromo: this.options.showPromo,\n promoType: this.options.promoType\n };\n },\n afterRender: function () {\n this.renderContent();\n this.checkDownloadStatus();\n },\n checkDownloadStatus: function () {\n let status = this.model.get('status');\n if (this.model.get('isReady') && status === PJQ.constants.drawings.downloadStatus.COMPLETE) {\n if (this.isWaiting) {\n this.renderContent();\n } else {\n this.downloadDrawings();\n }\n } else if (status === PJQ.constants.drawings.downloadStatus.QUEUED || status === PJQ.constants.drawings.downloadStatus.IN_PROGRESS) {\n this.checkStatusTimeout = setTimeout(_.bind(function () {\n this.model.fetch({\n success: _.bind(function () {\n this.checkDownloadStatus();\n }, this),\n fail: _.bind(function (model, result) {\n this.model.set('status', PJQ.constants.drawings.downloadStatus.FAILED);\n this.renderContent();\n PJQ.files.logDownloadFailure({\n model: model,\n result: result\n });\n }, this)\n });\n }, this), this.options.checkProgressInterval);\n } else if (status === PJQ.constants.drawings.downloadStatus.FAILED) {\n this.renderContent();\n }\n },\n renderContent: function () {\n let defaultEmail = \"\";\n if (PJQ.app.session.user != null) {\n defaultEmail = PJQ.app.session.user.get('email');\n } else if (PJQ.app.session.contact != null) {\n defaultEmail = PJQ.app.session.contact.get('email');\n }\n this.renderSubTemplate(false, this.options.subTemplates.content, this.$('.modal-body'), {\n model: this.model,\n defaultEmail: defaultEmail,\n isWaiting: this.isWaiting\n }, _.bind(function () {\n if (this.model.get('status') === PJQ.constants.drawings.downloadStatus.FAILED) {\n this.$('.drawing-cancel-button').text('Close');\n }\n }, this));\n },\n downloadDrawings: function () {\n if (!this.cancel && !this.downloaded) {\n this.downloaded = true;\n\n this.model.download();\n if (this.options.showPromo) {\n this.renderContent();\n } else {\n this.removeModal();\n }\n }\n },\n emailChanged: function () {\n this.$('.drawing-email-button').prop('disabled', this.$('.drawing-email').val().indexOf('@') <= 0);\n },\n emailZip: function () {\n this.stopChecking();\n this.model.addNotification(this.$('.drawing-email').val());\n },\n cancelZip: function () {\n //Clear the timeout for checking the status since we are cancelling it\n //Do this first because once its cancelled the /download endpoint will return 404\n this.stopChecking();\n if (this.model.get('status') === PJQ.constants.files.zipStatus.IN_PROGRESS) {\n //Only send the cancel request to the server if its in progress\n this.model.cancel();\n }\n },\n stopChecking: function () {\n this.cancel = true;\n if (this.checkStatusTimeout != null) {\n clearTimeout(this.checkStatusTimeout);\n }\n }\n});\n\nPJQ.views.files.FileUploaderModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.FILES, 'Modal-Upload'),\n fileUploaderOptions: {},\n onDone: _.noop,\n maxFiles: null\n },\n events: {\n 'click .btn-done': 'done'\n },\n beforeModalCreated: function () {\n this.files = new PJQ.collections.files.Files();\n },\n renderData: function () {\n return {\n options: this.options\n };\n },\n afterRender: function () {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid(_.defaults({\n el: this.$('.file-uploader-container'),\n collection: this.files,\n endpoint: this.options.project != null ? PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'attachments',\n value: this.options.folder != null ? this.options.folder.get('entryId') : null\n }\n ]) : PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'files',\n value: this.options.folder != null ? this.options.folder.get('entryId') : null\n }\n ]),\n allowedExtensions: this.options.allowedExtensions,\n maxFiles: this.options.maxFiles,\n style: 'list',\n onSuccess: _.bind(this.dataChanged, this),\n onFileStatusChange: _.bind(this.dataChanged, this),\n onDrop: _.bind(this.dataChanged, this),\n afterDelete: _.bind(this.dataChanged, this)\n }, this.options.fileUploaderOptions));\n },\n dataChanged: function () {\n let queued = 0,\n uploading = 0,\n success = 0,\n failed = 0;\n _.each(this.files.models, function (file) {\n switch (file.get('status')) {\n case 'queued':\n queued++;\n break;\n case 'uploading':\n uploading++;\n break;\n case 'success':\n success++;\n break;\n case 'error':\n failed++;\n break;\n }\n\n let $queued = $('<span class=\"text-primary mr-2\">Queued: ' + queued.toString() + '</span>');\n if (queued === 0) {\n $queued.addClass('op-6 font-weight-light');\n }\n\n let $uploaded = $('<span class=\"text-orange mr-2\">Uploading: ' + uploading.toString() + '</span>');\n if (uploading === 0) {\n $uploaded.addClass('op-6 font-weight-light');\n }\n\n let $success = $('<span class=\"text-success mr-2\">Uploaded: ' + success.toString() + '</span>');\n if (success === 0) {\n $success.addClass('op-6 font-weight-light');\n }\n\n let data;\n if (failed === 0) {\n data = [$queued, $uploaded, $success];\n } else {\n data = [$queued, $uploaded, $success, $('<span class=\"text-danger\">Failed: ' + failed.toString() + '</span>')];\n }\n\n this.$('.upload-files-status').empty().append(data);\n }, this);\n },\n done: function () {\n if (this.fileUploader.isUploading()) {\n new PJQ.views.BaseModal({\n header: \"Files Uploading\",\n body: \"You cannot finish while files are still uploading. Would you like to stop uploading?\",\n isShowOkButton: false,\n isShowCancelButton: true,\n isShowSecondaryButton: true,\n secondaryButtonText: \"Stop Upload\",\n secondaryButtonColorClass: \"danger\",\n onSecondary: _.bind(function () {\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n if (typeof this.options.onDone === 'function') {\n this.options.onDone(this.files.models);\n }\n }\n },\n cancel: function () {\n this.removeModal();\n }\n});\n\nPJQ.views.files.RawFileUploaderModal = PJQ.views.files.FileUploaderModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-File-Uploader-Raw'),\n maxWidth: '530px'\n },\n events: {\n 'keyup .input-revision-name': 'dataChanged',\n 'click .btn-submit': 'submit'\n },\n beforeModalCreated: function () {\n if (this.options.project == null) {\n this.options.project = PJQ.app.session.project;\n }\n\n this.files = new PJQ.collections.files.Files();\n },\n beforeRender: function () {\n this.renderData = {\n uploadId: this.uploadId,\n options: this.options\n }\n },\n afterRender: function () {\n if (this.uploadId == null) {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.raw-file-upload'),\n collection: this.files,\n useFileAPI: false,\n style: 'list',\n onSuccess: _.bind(this.dataChanged, this),\n onFileStatusChange: _.bind(this.dataChanged, this),\n onDrop: _.bind(this.dataChanged, this),\n afterDelete: _.bind(this.dataChanged, this)\n });\n }\n },\n dataChanged: function () {\n let hasName = _.size(this.$('.input-revision-name').val()) > 0,\n attachmentsCount = _.size(this.files.models),\n hasAttachments = attachmentsCount > 0;\n\n let queued = 0,\n uploading = 0,\n success = 0;\n _.each(this.files.models, function (attachment) {\n switch (attachment.get('status')) {\n case 'queued':\n queued++;\n break;\n case 'uploading':\n uploading++;\n break;\n case 'success':\n success++;\n break;\n }\n\n let $queued = $('<span class=\"text-primary mr-2\">Queued: ' + queued.toString() + '</span>');\n if (queued === 0) {\n $queued.addClass('op-6 font-weight-light');\n }\n\n let $uploaded = $('<span class=\"text-orange mr-2\">Uploading: ' + uploading.toString() + '</span>');\n if (uploading === 0) {\n $uploaded.addClass('op-6 font-weight-light');\n }\n\n\n let $success = $('<span class=\"text-success\">Uploaded: ' + success.toString() + '</span>');\n if (success === 0) {\n $success.addClass('op-6 font-weight-light');\n }\n\n this.$('.upload-files-status').empty().append([$queued, $uploaded, $success]);\n }, this);\n this.$('.btn-submit').prop('disabled', !hasName || !hasAttachments || this.fileUploader.isUploading());\n },\n submit: function () {\n let postData = {\n name: this.$('.input-revision-name').val(),\n notes: this.$('.input-revision-notes').val(),\n attachments: this.files.toJSON()\n };\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'revisions'\n },\n ]),\n data: postData,\n //isApi2: true //dont do this yet\n }).post().done(_.bind(function (data) {\n this.uploadId = data.uploadId;\n if (this.options.project != null) {\n this.options.project.set('status', 'BUSY');\n }\n this.render();\n }, this)).fail(_.bind(function (xhr, err, result) {\n this.uploadId = 0;\n this.render();\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.UPLOAD_RAW_FILES, {\n data: postData,\n error: err,\n result: result\n });\n }, this));\n }\n});\n\nPJQ.views.files.FileUploaderBackground = PJQ.views.files.FileUploader.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-Grid'),\n subTemplates: {\n gridFile: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-Grid-File'),\n listFile: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Uploader-List-File')\n },\n style: 'grid',\n isSmall: false, //this is used when the uploader is in a small location so the elements/text sizes need to be smaller\n endpoint: \"/files\",\n canUpload: true,\n canDelete: true,\n canView: true,\n dictRemoveFile: \"Delete\",\n isRemoveOnComplete: false,\n allowedExtensions: null,\n dictDefaultMessage: \"Drop files here or click to upload\",\n parallelUploads: 1,\n chunking: true,\n onError: _.noop,\n onSuccess: _.noop,\n onFileStatusChange: _.noop,\n onDrop: _.noop,\n onDelete: null, //this must be null or correctly use the callback (2nd param)\n afterDelete: _.noop,\n previewImageDimension: 160,\n showCreatedByLink: true,\n useFileAPI: true,\n hasNotes: false,\n isVersioned: false\n },\n events: {\n 'click .file-preview-image': 'viewFile',\n 'click .file-preview-download': 'downloadFile',\n 'click .file-preview-delete': 'deleteFile',\n 'click .file-preview': 'renderHistoryFiles'\n },\n beforeFirstRender: function () {\n if (this.collection == null) {\n this.collection = new PJQ.collections.files.Files();\n }\n },\n renderDropzone() {\n if (this.options.isSmall) {\n this.$('.file-upload').addClass('file-upload-small');\n }\n\n if (this.options.style.toLowerCase() === 'list') {\n this.$('.file-upload').addClass('file-upload-list');\n } else {\n this.$('.file-upload').addClass('file-upload-grid');\n }\n\n this.dropzone = new Dropzone('#fileUpload_' + this.options.uuid, _.extend(this.options.dropzoneOptions, {\n addedfile: _.bind(function (file) {\n let fileModel = new this.collection.model({\n name: file.name,\n status: 'queued'\n });\n\n if (PJQ.app.session.contact != null) {\n fileModel.set('createdBy', PJQ.app.session.contact.toJSON());\n } else if (PJQ.app.session.user != null) {\n fileModel.set('createdBy', PJQ.app.session.user.toJSON());\n }\n\n fileModel.file = file;\n file.model = fileModel;\n this.collection.add(fileModel);\n file.$previewElement = this.renderFile(fileModel, this.options.style.toLowerCase() === 'grid');\n file.$previewElement.addClass('uploading queued');\n file.previewElement = file.$previewElement[0];\n }, this),\n thumbnail: function (file, dataUrl) {\n if (file.$previewElement != null) {\n file.$previewElement.find('.file-preview-image').attr('src', dataUrl);\n }\n },\n uploadprogress: function (file, progress) {\n file.$previewElement.removeClass('queued');\n\n if (file.model.get('status') !== file.status) {\n file.model.set('status', file.status);\n this.options.onFileStatusChange(file);\n }\n\n //This is a fix for chunking progress\n //Dropzone triggers a progress event for the end of a chunk w/ a progress of 100%\n //We want to ignore all progress events that are not related to the total upload progress of this file\n if ((file.status === 'uploading' && progress < 100) || file.status === 'success') {\n file.lastProgress = Math.ceil(progress);\n let width = file.lastProgress.toString() + '%';\n file.$previewElement.find(\".file-preview-progress .progress-bar\").css('width', width).html(width);\n }\n },\n drop: _.bind(function () {\n if (typeof this.options.onDrop === 'function') {\n this.options.onDrop();\n }\n }, this),\n complete: _.bind(function (file) {\n if (file.status === 'success') {\n file.$previewElement.removeClass('uploading').addClass('uploaded');\n\n file.model.dataUrl = file.dataURL;\n let response = JSON.parse(file.xhr.response);\n if (this.options.useApiV2) {\n file.model.set({\n uploadId: response.uploadId,\n name: response.fileName\n }, {\n silent: true\n });\n } else {\n file.model.set({\n folder: response.folder,\n name: response.fileData.fileName\n }, {\n silent: true\n });\n }\n\n if (!this.options.useApiV2 && this.options.endpoint !== '/files') {\n let fileResponse;\n if (PJQ.helpers.objectHelpers.refinedType(response) === 'array') {\n _.each(response, function (responseFile) {\n if (responseFile.isFolder) {\n this.collection.add(responseFile);\n } else {\n fileResponse = responseFile;\n }\n }, this);\n } else {\n fileResponse = response;\n }\n file.model.set(fileResponse, {\n silent: true\n });\n }\n\n if (file.model.id > 0) {\n file.$previewElement.find('.file-preview-download').removeClass('hidden');\n }\n\n this.onSuccess(file);\n } else if (file.status === 'error') {\n if (_.size(this.options.dropzoneOptions.acceptedFiles) > 0 && !_.contains(this.options.dropzoneOptions.acceptedFiles, function (extension) {\n return file.name.toLowerCase().indexOf(extension);\n })) {\n this.removeFile(file);\n this.showError('The file type you uploaded is not allowed');\n } else {\n let retries = file.model.get('retries');\n retries = retries != null ? retries : 0;\n if (retries > -1) {\n file.$previewElement.removeClass('uploading').addClass('failed');\n } else {\n file.model.set('retries', 1);\n new File([file], file.name, {type: file.type});\n this.dropzone.uploadFile(file);\n }\n }\n }\n }, this)\n }));\n\n if (!this.options.canUpload) {\n this.$(\".dz-hidden-input\").remove();\n }\n\n this.renderFiles();\n },\n renderFiles() {\n if (this.options.canUpload) {\n this.renderUploadMessage();\n }\n\n _.each(_.sortBy(_.filter(this.collection.models, function (model) {\n return !model.get('isDeleted');\n }), function (model) {\n return -model.get('entryId');\n }), _.bind(function (model) {\n this.renderFile(model);\n }, this));\n PJQ.app.lazyLoad().update();\n },\n renderFile(file, isPrepend = false) {\n let fileTemplate;\n if (this.options.style.toLowerCase() === 'list') {\n fileTemplate = this.options.subTemplates.listFile;\n } else {\n fileTemplate = this.options.subTemplates.gridFile;\n }\n let $fileEl = PJQ.templating.TemplateRenderer.parseTemplate(fileTemplate, {\n model: file,\n showCreatedByLink: this.options.showCreatedByLink,\n canDelete: this.options.canDelete,\n canView: this.options.canView,\n isImage: file.isImage(),\n thumbUrl: file.thumbnailUrl(),\n previewImageDimension: this.options.previewImageDimension,\n hasNotes: this.options.hasNotes,\n isVersioned: this.options.isVersioned,\n versions: file.fileHistory ? file.fileHistory : null\n });\n if (this.options.canUpload && !this.$('.dz-message').hasClass('dz-message-top')) {\n $fileEl.addClass('hidden');\n this.renderUploadMessage(_.bind(function () {\n $fileEl.removeClass('hidden');\n }, this));\n }\n\n let $outer;\n if (this.options.sideBySide && file.id > 0) {\n $outer = this.$('.files-existing-container');\n } else {\n $outer = this.$('.files-container');\n }\n if (isPrepend) {\n $outer.prepend($fileEl);\n } else {\n $outer.append($fileEl);\n }\n return $fileEl;\n },\n renderUploadMessage: function (callback = _.noop) {\n let $message = this.$('.dz-message'),\n topClass = 'dz-message-top',\n topCSS = {\n height: '40px'\n };\n\n let hasNewAttachment = this.collection.findWhere(function (attachment) {\n return attachment.isNew();\n }) != null;\n if (hasNewAttachment) {\n this.$('.file-upload').removeClass('dz-clickable');\n if (!$message.hasClass('dz-message-top')) {\n $message.addClass(topClass).animate(topCSS, 500, _.bind(function () {\n $message.css(topCSS).html('Drop files or <a href=\"javascript:void(0)\" class=\"file-upload-upload ml-1 text-orange\">click here to upload</a>');\n if (callback != null) {\n callback();\n }\n }, this)).addClass(topClass);\n } else {\n callback();\n }\n } else {\n $message.html('Drop files or click to upload');\n if (callback != null) {\n callback();\n }\n }\n },\n viewFile: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n PJQ.app.view.renderPhotoViewer({\n model: file,\n collection: this.collection\n });\n },\n downloadFile: function (e) {\n let file = this.collection.get($(e.currentTarget).closest('.file-preview').data('cid'));\n file.download();\n },\n deleteFile: function (e) {\n let previewContainer = $(e.currentTarget).closest('.file-preview'),\n file = this.collection.get(previewContainer.data('cid'));\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(file, _.bind(function () {\n previewContainer.remove();\n this.options.afterDelete();\n }, this));\n } else {\n file.destroy();\n previewContainer.remove();\n this.options.afterDelete();\n }\n }\n});\n\nPJQ.views.files.FileSelectInput = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Select-Input'),\n subTemplates: {\n changeButton: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Select-Input-Change-Button')\n },\n isShowChangeButton: false,\n emptyNotice: \"No Files Selected\"\n },\n events: {\n \"click .file-select-input-edit\": \"edit\"\n },\n beforeFirstRender() {\n if (this.options.isShowChangeButton) {\n this.options.template = this.options.subTemplates.changeButton;\n }\n\n let addButton = $('<button type=\"button\" class=\"btn btn-transparent-light text-info btn-sm file-select-input-edit ml-1\"><i class=\"fal fa-pencil\"></i></button>');\n this.$el.closest('.form-group').find('label').append(addButton);\n addButton.on('click', _.bind(this.edit, this));\n\n this.selectedFiles = this.options.selectedFiles ? this.options.selectedFiles : [];\n },\n renderData: function () {\n return {\n selectedFiles: this.selectedFiles\n };\n },\n edit: function () {\n new PJQ.views.files.FileSelector(_.defaults(this.options.selectorOptions, {\n project: this.options.project,\n selectedAttachmentIds: _.map(this.selectedFiles, function (file) {\n return file.cid;\n }),\n collection: this.options.collection,\n onSave: _.bind(function (files) {\n this.selectedFiles = this.options.ignoreFolders ? _.filter(files, function (file) {\n return !file.get('isFolder')\n }) : files;\n\n this.render();\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.selectedFiles);\n }\n }, this)\n }));\n },\n validate: function () {\n if (_.size(this.selectedFiles) > 0) {\n return true;\n } else {\n this.$('.file-select-value').html('<div class=\"text-danger mt-1\">This field is required.</div>');\n return false;\n }\n }\n});\n\nPJQ.views.files.FileVersionsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-file-versions'),\n width: '40%',\n maxWidth: 800,\n },\n events: {\n 'click .btn-download-version': 'downloadVersion',\n 'click .btn-save': 'save'\n },\n beforeRender: function () {\n this.versions = _.union(this.model.versions ? this.model.versions.models : [], [this.model]);\n\n if (this.collectionDefinition == null) {\n this.collectionDefinition = PJQ.collections.files.Files;\n }\n\n this.newVersions = new this.collectionDefinition();\n\n this.renderData = {\n model: this.model\n };\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$(\".file-versions\"),\n data: this.versions,\n isHideSearch: true,\n rowId: \"cid\",\n paging: false,\n order: [0, 'desc'],\n language: {\n zeroRecords: 'No other versions'\n },\n columns: [\n {\n \"title\": \"Version\",\n \"data\": \"attributes.version\",\n \"render\": function (data, type, row) {\n return data ?? 1;\n }\n },\n {\n \"title\": \"Name\",\n \"data\": \"attributes.name\"\n },\n {\n \"title\": \"Uploaded\",\n \"data\": \"attributes.createdOn\",\n \"render\": function (data, type, row) {\n if (row.get('createdOn') == null) {\n return '';\n }\n\n return PJQ.helpers.dateHelpers.getDateString(row.get('createdOn'), PJQ.helpers.dateHelpers.dateFormats.DATE);\n }\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"width\": '80px',\n \"render\": _.bind(function (data, type, row) {\n return '<div class=\"show-on-row-hover\"><button type=\"button\" data-cid=\"' + row.cid + '\" class=\"btn btn-primary btn-download-version\"><i class=\"fal fa-download\"></i></button></div>';\n }, this)\n }\n ]\n });\n\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.file-versions-uploader'),\n collection: this.newVersions,\n style: 'list',\n canUpload: this.newVersions.length === 0,\n canDelete: true,\n canDownload: true,\n isRemoveOnComplete: true,\n previewImageDimension: 150,\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n attachment.destroy();\n }\n this.model.isDirty = true;\n callback();\n }, this)\n });\n },\n downloadVersion: function (e) {\n let file = _.findWhere(this.versions, {cid: $(e.currentTarget).data('cid')});\n file.download();\n },\n save: function () {\n _.each(this.newVersions.models, (newFile) => {\n newFile.set({\n parentAttachmentId: this.model.get('attachmentId'),\n version: this.versions.length + 1,\n createdOn: new Date()\n });\n this.model.versions.add(newFile);\n });\n\n this.options.onSave(this.newVersions.models);\n this.removeModal();\n }\n});\n\nPJQ.helpers.fileHelpers = {\n getExtension: function (filename) {\n return filename ? filename.split('.').pop().toLowerCase() : null;\n },\n getDisplayFileSize(bytes, si = true) {\n let thresh = si ? 1000 : 1024;\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n let units = si\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'],\n u = -1;\n do {\n bytes /= thresh;\n ++u;\n } while (Math.abs(bytes) >= thresh && u < units.length - 1);\n return bytes.toFixed(1) + ' ' + units[u];\n }\n};\n\nPJQ.modules.files = {\n routes: [\n {\n route: 'files/share/:accessKey',\n name: 'shareFiles',\n callback: function (accessKey) {\n let files = new PJQ.collections.files.FileShare(null, {\n accessKey: accessKey\n });\n files.fetch({\n success: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'orders'\n },\n {\n endpoint: 'settings'\n }\n ], [\n {\n parameter: 'entryId',\n value: files.models[0].get('entryId')\n }\n ])\n }).get().done(_.bind(function (settings) {\n let $container = $('<div>', {\n class: 'p-3'\n });\n PJQ.app.$el.html($container);\n _.each(files.models, function (attachment) {\n if (attachment.get('isFolder'))\n attachment.isFetched = true;\n });\n\n PJQ.app.view.renderView(PJQ.views.projects.Attachments, {\n el: $container,\n collection: files,\n isAdmin: false,\n orderSettings: settings\n });\n }, this));\n\n },\n error: function (data, response) {\n let $container = $('<div>', {\n class: 'p-3'\n });\n PJQ.app.$el.html($container);\n if (response.responseJSON.message == 'BUSY') {\n $container.html(`\n <div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n <div>\n <div><i class=\"fal fa-circle-exclamation fa-9x text-orange mb-2\"></i></div>\n <div class=\"fs-36\">File Share Unavailable</div>\n <div class=\"fs-24\">Files for this project are currently being processed.<br />Please try again later.</div>\n </div>\n </div>\n\t\t\t\t\t\t `);\n } else if (response.responseJSON.message == 'OFFLINE') {\n $container.html(`\n <div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n <div>\n <div><i class=\"fal fa-circle-exclamation fa-9x text-orange mb-2\"></i></div>\n <div class=\"fs-36\">File Share Unavailable</div>\n <div class=\"fs-24\">This project is currently unavailable for download.<br />Please try again later, or check with the sender if the issue persists.</div>\n </div>\n </div>\n\t\t\t\t\t\t `);\n } else {\n $container.html(`\n <div class=\"d-flex align-items-center justify-content-center ht-100 text-align-center wd-100\">\n <div>\n <div><i class=\"fal fa-clock fa-9x text-orange mb-2\"></i></div>\n <div class=\"fs-36\">File Share Invalid</div>\n <div class=\"fs-24\">This file share has expired or is invalid.</div>\n </div>\n </div>\n\t\t\t\t\t\t `);\n }\n }\n });\n }\n }\n ]\n};\n\nPJQ.app.addRoutes(PJQ.modules.files.routes);","//Models\nPJQ.models.groups = {};\n\nPJQ.models.groups.Group = PJQ.models.BaseModel.extend({\n\tidAttribute: \"groupId\",\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'groups',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t}\n});\n\n//Collections\nPJQ.collections.groups = {};\n\nPJQ.collections.groups.Groups = PJQ.collections.BaseCollection.extend({\n\tdefaults: {\n\t\tgroupLevels: 1\n\t},\n\tmodel: PJQ.models.groups.Group,\n\tendpoint: function () {\n\t\tlet endpoint = [\n\t\t\t{\n\t\t\t\tendpoint: 'groups'\n\t\t\t}\n\t\t];\n\t\tif (this.options.userId > 0) {\n\t\t\tendpoint = [\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users',\n\t\t\t\t\tvalue: this.options.userId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'groups'\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\telse if (this.options.project != null) {\n\t\t\tendpoint = [\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'groups'\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint(endpoint);\n\t},\n\tafterInit: function () {\n\t\tthis.on('sync', this.setSelectedGroups, this);\n\t},\n\tsetSelectedGroups: function (selectedGroupIds) {\n\t\tif (_.size(this.models) > 0) {\n\t\t\t_.each(this.models, _.bind(function (model) {\n\t\t\t\tif (selectedGroupIds != null) {\n\t\t\t\t\tif (selectedGroupIds.indexOf(model.id) !== -1) {\n\t\t\t\t\t\tmodel.set('isSelected', true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tmodel.set('isSelected', false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmodel.set('isSelected', false);\n\t\t\t\t}\n\n\t\t\t}, this));\n\t\t}\n\t},\n\taddSelectedGroups: function (selectedGroupIds) {\n\t\t_.each(typeof selectedGroupIds === \"number\" ? [selectedGroupIds] : selectedGroupIds, function (groupId) {\n\t\t\tlet group = this.get(groupId);\n\t\t\tif (group != null) {\n\t\t\t\tgroup.set('isSelected', true);\n\t\t\t}\n\t\t}, this);\n\t},\n\tdeleteSelectedGroups: function (selectedGroupIds) {\n\t\t_.each(typeof selectedGroupIds === \"number\" ? [selectedGroupIds] : selectedGroupIds, function (groupId) {\n\t\t\tlet group = this.get(groupId);\n\t\t\tif (group != null) {\n\t\t\t\tgroup.set('isSelected', false);\n\t\t\t}\n\t\t}, this);\n\t},\n\tsetDisabledGroups: function (disabledGroupIds) {\n\t\tif (_.size(this.models) > 0) {\n\t\t\t_.each(this.models, _.bind(function (model) {\n\t\t\t\tif (disabledGroupIds.indexOf(model.id) !== -1)\n\t\t\t\t\tmodel.set('isDisabled', true);\n\t\t\t\telse\n\t\t\t\t\tmodel.set('isDisabled', false);\n\t\t\t}, this));\n\t\t}\n\t},\n\tsetPublicDisabledGroups: function (disabledPublicGroupIds = []) {\n\t\tif (_.size(this.models) > 0) {\n\t\t\t_.each(this.models, _.bind(function (model) {\n\t\t\t\tif (disabledPublicGroupIds.indexOf(model.id) !== -1) {\n\t\t\t\t\tmodel.set('isDisabled', true);\n\t\t\t\t\tmodel.set('isPublic', true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmodel.set('isDisabled', false);\n\t\t\t\t\tmodel.set('isPublic', false);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t},\n\tgetGroupIds: function () {\n\t\tlet groupIds = [];\n\t\t_.each(this.models, function (model) {\n\t\t\tgroupIds.push(model.id);\n\t\t});\n\t\treturn groupIds;\n\t},\n\tgetSelectedGroups: function () {\n\t\tlet selectedGroups = new PJQ.collections.groups.Groups([], {\n\t\t\tgroupLevels: this.options.groupLevels ? this.options.groupLevels : PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS)\n\t\t});\n\t\t_.each(this.models, function (model) {\n\t\t\tif (model.get('isSelected'))\n\t\t\t\tselectedGroups.add(model);\n\t\t});\n\t\treturn selectedGroups;\n\t},\n\tgetGroupsLeveled: function (filterGroups) {\n\t\tlet result = null;\n\t\tif (this.options.groupLevels === 1) {\n\t\t\tresult = (filterGroups == null ? this.models : _.filter(this.models, function (model) {\n\t\t\t\treturn _.find(filterGroups, {id: model.id}) != null;\n\t\t\t}));\n\t\t}\n\t\telse if (this.options.groupLevels > 1) {\n\t\t\tresult = [];\n\t\t\t_.each(this.models, function (model) {\n\t\t\t\tif (filterGroups === null || _.find(filterGroups, {id: model.id}) != null) {\n\t\t\t\t\tlet parentName1 = model.get('groupDescription'),\n\t\t\t\t\t\tparentName2 = '';\n\t\t\t\t\tif (_.size(parentName1) === 0) {\n\t\t\t\t\t\tparentName1 = \"No Parent\";\n\t\t\t\t\t}\n\t\t\t\t\tif (this.options.groupLevels === 3) {\n\t\t\t\t\t\tparentName2 = parentName1.split('|')[1];\n\t\t\t\t\t\tparentName1 = parentName1.split('|')[0];\n\n\t\t\t\t\t\tif (_.size(parentName2) === 0) {\n\t\t\t\t\t\t\tparentName2 = \"No Parent\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet existingParent1 = _.find(result, function (group) {\n\t\t\t\t\t\treturn group.name === parentName1;\n\t\t\t\t\t});\n\t\t\t\t\tif (existingParent1 != null) {\n\t\t\t\t\t\tif (this.options.groupLevels === 3) {\n\t\t\t\t\t\t\tlet existingParent2 = _.find(existingParent1.parents, function (parent) {\n\t\t\t\t\t\t\t\treturn parent.name === parentName2;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (existingParent2 != null) {\n\t\t\t\t\t\t\t\texistingParent2.groups.push(model);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\texistingParent1.parents.push({\n\t\t\t\t\t\t\t\t\tname: parentName2,\n\t\t\t\t\t\t\t\t\tgroups: [model]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\texistingParent1.groups.push(model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (this.options.groupLevels === 3) {\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\tname: parentName1,\n\t\t\t\t\t\t\t\tparents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: parentName2,\n\t\t\t\t\t\t\t\t\t\tgroups: [model]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\tname: parentName1,\n\t\t\t\t\t\t\t\tgroups: [model]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t\treturn result;\n\t}\n});\n\n//Views\nPJQ.views.groups = {};\n\nPJQ.views.groups.GroupSelector = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Group-Selector-Container'),\n\t\tsubTemplates: {\n\t\t\tselector: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Group-Selector')\n\t\t},\n\t\tgroups: null,\n\t\tgroupLabel: null,\n\t\tgroupUserId: null,\n\t\tgroupLevels: null,\n\t\tdetectGroupLevels: false,\n\t\tincludeGroupIds: null,\n\t\tselectedGroupIds: null,\n\t\tdisabledGroupIds: null,\n\t\tselectedGroups: null,\n\t\tonGroupsLoaded: null,\n\t\tonGroupSelected: null,\n\t\tisAdmin: false,\n\t\tisPublicGroups: false,\n\t\tisEnableSelectedFilter: true,\n\t\tisEnableSelectAll: true,\n\t\tisDisableSelected: false,\n\t\tisHideDisabled: false,\n\t\tisExpandSelected: true,\n\t\tisDisableParents: false,\n\t\tisDisableCollapsedParents: false,\n\t\tisShowGroupCount: false,\n\t\tcanEdit: true,\n\t\tisShowNoGroup: false,\n\t\tonSelect: _.noop,\n\t\tisSingleChoice: false,\n\t\tmaxGroups: null,\n\t\theaderButtons: null\n\t},\n\tevents: {\n\t\t\"keyup .group-search\": \"renderGroups\",\n\t\t\"click .btn-header-action\": \"headerAction\",\n\t\t\"click .group-clear-filters\": \"clearFilters\",\n\t\t\"click .group-all-select\": \"selectAll\",\n\t\t\"click .group-parent-select\": \"selectParent\",\n\t\t\"click .group-select\": \"groupSelected\",\n\t\t\"click .group-expand\": \"expandParentClick\",\n\t\t\"click .report-contact-groups\": \"reportContactGroups\",\n\t\t\"click .no-group-select\": \"noGroupClicked\"\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.options.maxGroups > 0) {\n\t\t\tthis.options.isEnableSelectAll = true;\n\t\t\tthis.options.isDisableParents = true;\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tthis.isNoGroupSelected = false;\n\t\tthis.options.groupUserId = this.options.isPublicGroups ? PJQ.constants.publicUserId : this.options.groupUserId;\n\t\tif (this.options.groups == null) {\n\t\t\tthis.getGroups();\n\t\t}\n\t\telse {\n\t\t\tthis.afterSync();\n\t\t}\n\t},\n\treload: function (userId) {\n\t\tif (typeof userId === 'number') {\n\t\t\tthis.options.groupUserId = userId;\n\t\t}\n\t\tthis.getGroups();\n\t},\n\tgetGroups: function () {\n\t\tPJQ.app.session.fetchUserGroups(this.options.groupUserId, _.bind(function (groups) {\n\t\t\tthis.options.groups = groups.toJSON();\n\t\t\tthis.afterSync();\n\t\t}, this));\n\t},\n\tafterSync: function () {\n\t\tthis.options.isGroupsLoaded = true;\n\t\tthis.loadGroups();\n\t},\n\tloadGroups: function () {\n\t\tif (this.removed) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet groups = this.options.groups != null ? this.options.groups : PJQ.app.session.groups[this.options.groupUserId > 0 ? this.options.groupUserId : -1].toJSON();\n\t\tif (this.options.groupUserId === PJQ.constants.publicUserId) {\n\t\t\tthis.options.groupLevels = 2;\n\t\t}\n\t\telse if (this.options.detectGroupLevels) {\n\t\t\tfor (let i = 0; i < _.size(groups); i++) {\n\t\t\t\tlet group = groups[i];\n\t\t\t\tif (_.size(group.groupDescription) > 0) {\n\t\t\t\t\tif (group.groupDescription.indexOf('|') !== -1) {\n\t\t\t\t\t\t// this group has a pipe, it is group level 3\n\t\t\t\t\t\tthis.options.groupLevels = 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.options.groupLevels < 2) {\n\t\t\t\t\t\t// this group has a description, it is at least group level 2\n\t\t\t\t\t\t// we need to keep checking other groups to make sure its not group level 3\n\t\t\t\t\t\tthis.options.groupLevels = 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t_.each(groups, _.bind(function (group) {\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (this.options.groupLevels == null) {\n\t\t\tlet groupLevels = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS);\n\t\t\tthis.options.groupLevels = groupLevels ? groupLevels : 1;\n\t\t}\n\n\t\tif (this.options.groupLabel == null) {\n\t\t\tlet groupLabel = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL);\n\t\t\tthis.options.groupLabel = typeof groupLabel === 'string' ? groupLabel.toLowerCase() : 'trades';\n\t\t}\n\n\t\tthis.collection = new PJQ.collections.groups.Groups(groups, {\n\t\t\tgroupLevels: this.options.groupLevels,\n\t\t\tuserId: this.options.groupUserId\n\t\t});\n\n\t\tif (_.size(this.options.selectedGroupIds) > 0) {\n\t\t\t//if init with selectedGroupIds, just set those groups as selected\n\t\t\tthis.collection.setSelectedGroups(this.options.selectedGroupIds);\n\t\t}\n\t\telse {\n\t\t\t//Else if init with selectedGroups, loop through them and set selected by groupId\n\t\t\t//Also set disabled accordingly\n\t\t\t// This is used to disable groups related to public contacts when admins are editing\n\t\t\tthis.disabledPublicGroups = [];\n\t\t\tlet selectedGroupIds = [];\n\t\t\tif (_.size(this.options.selectedGroups) > 0) {\n\t\t\t\t_.each(this.options.selectedGroups.models, function (group) {\n\t\t\t\t\tselectedGroupIds.push(group.id);\n\n\t\t\t\t\t//Custom functionality for public groups on contacts - only when admin is editing\n\t\t\t\t\t//This piggybacks off of disabledGroupIds for disabling checkboxes\n\t\t\t\t\tif (this.options.isAdmin && group.get('isPublic') && PJQ.app.session.get('masterUserId') !== 23) {\n\t\t\t\t\t\tthis.disabledPublicGroups.push(group.id);\n\t\t\t\t\t}\n\t\t\t\t}, this);\n\t\t\t}\n\t\t\tthis.collection.setSelectedGroups(selectedGroupIds);\n\t\t}\n\n\t\t//If editing is disabled, disable all group checkboxes\n\t\tif (!this.options.canEdit) {\n\t\t\tthis.collection.setDisabledGroups(_.map(this.collection.models, function (model) {\n\t\t\t\treturn model.id;\n\t\t\t}));\n\t\t}\n\t\telse if (this.options.contactId > 0 && _.size(this.disabledPublicGroups) > 0) {\n\t\t\tthis.createDisabledPublicGroupsAlert();\n\t\t\tthis.collection.setPublicDisabledGroups(this.disabledPublicGroups);\n\t\t}\n\n\t\t//If there are disabledGroupIds passed in, mirror that to this.collection\n\t\t//These will render as disabled\n\t\tif (_.size(this.options.disabledGroupIds) > 0) {\n\t\t\tthis.collection.setDisabledGroups(this.options.disabledGroupIds);\n\t\t}\n\t\tthis.originalGroups = this.collection.getSelectedGroups().models;\n\n\t\tthis.renderFilters();\n\t\tthis.renderGroups();\n\n\t\tif (_.size(this.options.selectedGroupIds) > 0 && this.options.isShowNoGroup && this.options.selectedGroupIds.indexOf(0) !== -1)\n\t\t\tthis.$('.no-group-select').prop('checked', true);\n\n\t\tif (typeof this.options.onGroupsLoaded === 'function') {\n\t\t\tthis.options.onGroupsLoaded();\n\t\t}\n\t},\n\trenderFilters: function () {\n\t\tif (_.size(this.disabledPublicGroups) > 0) {\n\t\t\tthis.$('.group-status-filter').append('<option value=\"public\">Public</option>');\n\t\t}\n\t\tif (this.options.isEnableSelectedFilter) {\n\t\t\tthis.filterPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.group-status-filter'),\n\t\t\t\tonChange: _.bind(this.renderGroups, this),\n\t\t\t\tnoneSelectedText: 'No Filters',\n\t\t\t\thideDisabled: false\n\t\t\t});\n\t\t}\n\t},\n\trenderGroups: function () {\n\t\tlet searchFilter = this.$('.group-search').val().toLowerCase(),\n\t\t\tfilterVal = this.options.isEnableSelectedFilter ? this.filterPicker.getValue().toLowerCase() : '',\n\t\t\tselectedFilter = null,\n\t\t\tpublicFilter = null,\n\t\t\tgroups = [];\n\n\t\tif (filterVal.toLowerCase() === 'public') {\n\t\t\tpublicFilter = true;\n\t\t}\n\t\telse if (filterVal.toLowerCase() === 'selected') {\n\t\t\tselectedFilter = true;\n\t\t}\n\t\telse if (filterVal.toLowerCase() === 'unselected') {\n\t\t\tselectedFilter = false;\n\t\t}\n\t\tif (_.size(searchFilter) > 0 || selectedFilter != null || publicFilter != null || _.size(this.options.includeGroupIds) > 0) {\n\t\t\tthis.$('.group-clear-filters').prop('disabled', false);\n\t\t\t_.each(this.collection.models, _.bind(function (model) {\n\t\t\t\tif (_.size(this.options.includeGroupIds) === 0 || this.options.includeGroupIds.indexOf(model.id) !== -1) {\n\t\t\t\t\tif ((publicFilter == null || model.get('isPublic') === publicFilter) && (selectedFilter === null || model.get('isSelected') === selectedFilter) && ((model.get('groupName').toLowerCase().indexOf(searchFilter) > -1) || (model.get('groupDescription').toLowerCase().indexOf(searchFilter) > -1)))\n\t\t\t\t\t\tgroups.push(model);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.$('.group-clear-filters').prop('disabled', true);\n\t\t\tgroups = this.collection.models;\n\t\t}\n\n\t\tlet data = {\n\t\t\tmodels: this.collection.getGroupsLeveled(groups),\n\t\t\toptions: this.options,\n\t\t\tisNoGroupSelected: this.isNoGroupSelected\n\t\t};\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.selector, this.$('.groups-container'), data, _.bind(function () {\n\t\t\tthis.setSelectedParents();\n\t\t\tif (!this.isRendered && this.options.groupLevels > 1 && this.options.isExpandSelected) {\n\t\t\t\tthis.expandSelectedParents();\n\t\t\t}\n\t\t\tthis.setDisabledParents();\n\t\t\tif (this.options.isHideDisabled) {\n\t\t\t\tthis.$('.group-select:disabled').closest('.group-select-container').hide();\n\t\t\t}\n\t\t\tthis.isRendered = true;\n\n\t\t\tthis.checkMaxGroups();\n\t\t}, this));\n\t},\n\tsetDisabledParents: function () {\n\t\tlet self = this;\n\t\tthis.$('.group-parent-select').each(function () {\n\t\t\t//Disable the parent if:\n\t\t\t//isDisableCollapsedParents == true and there are no visible groups within the corresponding child container (shown group parents do not qualify)\n\t\t\t//or\n\t\t\t//there are no enabled groups shown within the corresponding child container\n\t\t\tlet childContainer = self.getParentChildContainer($(this));\n\t\t\t$(this).prop('disabled', (self.options.isDisableCollapsedParents && (childContainer.hasClass('hidden') || _.size(childContainer.find('.group-child-container.hidden')) > 0)) || _.size(childContainer.find('.group-select,.group-parent-select').not(':disabled')) === 0);\n\t\t});\n\t\tif (this.options.isEnableSelectAll && !this.options.isDisableCollapsedParents && !this.options.isDisableParents) {\n\t\t\tthis.$('.group-all-select').prop('disabled', !(this.$('.group-select:not(:disabled)').length > 0));\n\t\t}\n\t},\n\tsetSelectedParents: function () {\n\t\tlet self = this;\n\t\tthis.$('.group-parent-select').each(function () {\n\t\t\t$(this).prop('checked', _.size(self.getParentChildContainer($(this)).find('.group-select').not(':checked')) === 0);\n\t\t});\n\t\tthis.$('.group-all-select').prop('checked', !(this.$('.group-select:not(:checked)').length > 0));\n\t},\n\tcreateDisabledPublicGroupsAlert: function () {\n\t\tnew PJQ.Alert(this.$el, {\n\t\t\ttext: \"<div>This contact has \" + this.options.groupLabel.toLowerCase() + \" that are linked to a public account. They can only be removed by this contact.</div><div class='mt-1'>Think these are incorrect? <a href='javascript:void(0)' class='report-contact-groups font-weight-normal'>Report their groups</a></div>\",\n\t\t\tisPrepend: true\n\t\t});\n\t},\n\tgetGroupSwitch: function (groupId) {\n\t\treturn this.$('input[data-group-id=\"' + groupId.toString() + '\"]');\n\t},\n\texpandSelectedParents: function () {\n\t\tif (this.options.groupLevels > 1) {\n\t\t\t_.each(this.collection.getSelectedGroups().models, function (group) {\n\t\t\t\tlet childContainer = this.getGroupSwitch(group.id).closest('.group-child-container');\n\t\t\t\tif (childContainer.hasClass('hidden')) {\n\t\t\t\t\tthis.expandParent(childContainer);\n\t\t\t\t}\n\t\t\t\tif (this.options.groupLevels === 3) {\n\t\t\t\t\tchildContainer = childContainer.parent().closest('.group-child-container');\n\t\t\t\t\tif (childContainer.hasClass('hidden')) {\n\t\t\t\t\t\tthis.expandParent(childContainer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t},\n\tgetParentChildContainer: function (parent) {\n\t\treturn parent.closest('.pretty').siblings('.group-child-container');\n\t},\n\tsetIncludedGroups: function (includeGroupIds) {\n\t\tthis.options.includeGroupIds = includeGroupIds;\n\t\tthis.renderGroups();\n\t},\n\theaderAction: function (e) {\n\t\tlet actionId = $(e.currentTarget).data('id'),\n\t\t\theaderButton = _.findWhere(this.options.headerButtons, {id: actionId});\n\n\t\tif (headerButton != null && typeof headerButton.callback === 'function') {\n\t\t\theaderButton.callback(this);\n\t\t}\n\t},\n\tclearFilters: function () {\n\t\tthis.$('.group-search').val('');\n\t\tif (this.options.isEnableSelectedFilter) {\n\t\t\tthis.filterPicker.deselectAll();\n\t\t}\n\t\tthis.renderGroups();\n\t},\n\tselectAll: function (override) {\n\t\tif (typeof override === 'boolean')\n\t\t\tthis.$('.group-all-select').prop('checked', override);\n\n\t\tlet groupSelects = this.$('.group-select:not(:disabled)');\n\t\tif (this.$('.group-all-select').prop('checked')) {\n\t\t\tthis.isNoGroupSelected = true;\n\t\t\tthis.collection.addSelectedGroups(_.map(groupSelects, function (select) {\n\t\t\t\treturn $(select).data('groupId');\n\t\t\t}));\n\t\t\tgroupSelects.prop('checked', true);\n\t\t}\n\t\telse {\n\t\t\tthis.isNoGroupSelected = false;\n\t\t\tthis.collection.deleteSelectedGroups(_.map(groupSelects, function (select) {\n\t\t\t\treturn $(select).data('groupId');\n\t\t\t}));\n\t\t\tgroupSelects.prop('checked', false);\n\t\t}\n\t\tthis.onGroupSelected();\n\t},\n\tnoGroupClicked: function (e) {\n\t\tthis.isNoGroupSelected = this.$('.no-group-select').prop('checked');\n\t},\n\tselectParent: function (e) {\n\t\tif (!this.options.isDisableParents) {\n\t\t\t//Select all child groups/parents that aren't disabled\n\t\t\tlet childContainer = this.getParentChildContainer($(e.currentTarget)),\n\t\t\t\tisChecked = $(e.currentTarget).is(':checked');\n\n\t\t\t//If only un-collapsed parents can be selected, ensure we only select visible groups\n\t\t\t//This mainly only matters for groupLevels == 3, but it doesn't hurt to do for all levels\n\t\t\tlet groupSelects = [];\n\t\t\tif (this.options.isDisableCollapsedParents) {\n\t\t\t\tgroupSelects = childContainer.find('.group-select:visible').not(':disabled');\n\t\t\t\tchildContainer.find('.group-select:visible,.group-parent-select:visible').not(':disabled').prop('checked', isChecked);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgroupSelects = childContainer.find('.group-select').not(':disabled');\n\t\t\t\tchildContainer.find('.group-select,.group-parent-select').not(':disabled').prop('checked', isChecked);\n\t\t\t}\n\n\t\t\tif (isChecked) {\n\t\t\t\t//If its checked, expand the parents/sub-parents to show the groups that were selected\n\t\t\t\tif (childContainer.hasClass('hidden')) {\n\t\t\t\t\tthis.expandParent(childContainer);\n\t\t\t\t}\n\t\t\t\t//Check if there is another level underneath the first one to expand\n\t\t\t\tchildContainer = childContainer.find('.group-child-container');\n\t\t\t\tif (_.size(childContainer) > 0) {\n\t\t\t\t\tif (childContainer.hasClass('hidden')) {\n\t\t\t\t\t\tthis.expandParent(childContainer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.collection.addSelectedGroups(_.map(groupSelects, function (select) {\n\t\t\t\t\treturn $(select).data('groupId');\n\t\t\t\t}));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection.deleteSelectedGroups(_.map(groupSelects, function (select) {\n\t\t\t\t\treturn $(select).data('groupId');\n\t\t\t\t}));\n\t\t\t}\n\t\t\tthis.onGroupSelected();\n\t\t}\n\t},\n\tselectGroups: function (groupIds) {\n\t\tif (this.options.canEdit && _.size(groupIds) > 0) {\n\t\t\t_.each(groupIds, function (groupId) {\n\t\t\t\tthis.selectGroup(groupId, true, true, true);\n\t\t\t}, this);\n\t\t\tthis.options.onSelect();\n\t\t\tthis.onGroupSelected();\n\t\t}\n\t},\n\tgroupSelected: function (e) {\n\t\tif (this.options.canEdit) {\n\t\t\tlet select = $(e.currentTarget),\n\t\t\t\tgroupId = select.data('groupId'),\n\t\t\t\tisSelected = select.is(':checked');\n\t\t\tthis.selectGroup(groupId, isSelected, false);\n\t\t}\n\t},\n\tselectGroup: function (groupId, isSelected, setSwitch = false, silent = false) {\n\t\tif (this.options.canEdit && groupId > 0) {\n\t\t\tif (isSelected) {\n\t\t\t\tif (this.options.isSingleChoice) {\n\t\t\t\t\tthis.collection.setSelectedGroups();\n\t\t\t\t}\n\t\t\t\tthis.collection.addSelectedGroups(groupId);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection.deleteSelectedGroups(groupId);\n\t\t\t}\n\n\t\t\tif (setSwitch) {\n\t\t\t\tthis.getGroupSwitch(groupId).prop('checked', isSelected);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\t\t\t\tthis.options.onSelect();\n\t\t\t\tthis.onGroupSelected();\n\t\t\t}\n\t\t}\n\t},\n\tonGroupSelected: function () {\n\t\tthis.checkMaxGroups();\n\t\tthis.setSelectedParents();\n\t\tif (typeof this.options.onGroupSelected === 'function') {\n\t\t\tthis.options.onGroupSelected(this.getGroupsData());\n\t\t}\n\t},\n\tcheckMaxGroups: function () {\n\t\tif (this.options.maxGroups == null) {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet result = this.options.maxGroups <= this.getGroupsData().selected.length;\n\t\tif (result) {\n\t\t\t_.each((this.$('.group-select:not(:disabled)') && this.$('.group-select:not(:checked)')), function (group) {\n\t\t\t\t$(group).prop('disabled', true);\n\t\t\t})\n\t\t}\n\t\telse if(this.options.canEdit) {\n\t\t\t_.each(this.$('.group-select:disabled'), function (group) {\n\t\t\t\t$(group).prop('disabled', false);\n\t\t\t})\n\t\t}\n\t\treturn result;\n\t},\n\texpandParentClick: function (e) {\n\t\tthis.expandParent($(e.currentTarget).siblings('.group-child-container'));\n\t},\n\texpandParent: function (container) {\n\t\tlet icon = container.siblings('i.group-expand');\n\t\tif (container.hasClass('hidden')) {\n\t\t\tcontainer.removeClass('hidden');\n\t\t\ticon.removeClass('fa-chevron-down text-primary');\n\t\t\ticon.addClass('fa-chevron-up text-muted');\n\t\t}\n\t\telse {\n\t\t\t//If its being collapsed, find all sub-parents and collapse those as well\n\t\t\tcontainer = container.add(container.find('.group-child-container'));\n\t\t\ticon = icon.add(container.find('i.group-expand'));\n\t\t\tcontainer.addClass('hidden');\n\t\t\ticon.removeClass('fa-chevron-up text-muted');\n\t\t\ticon.addClass('fa-chevron-down text-primary');\n\t\t}\n\t\tthis.setDisabledParents();\n\t},\n\tgetGroupsData: function () {\n\t\tlet selectedGroups = this.collection.getSelectedGroups().models;\n\t\tif (this.options.isSingleChoice) {\n\t\t\treturn _.size(selectedGroups) > 0 ? selectedGroups[0] : null;\n\t\t}\n\t\telse {\n\t\t\tif (this.options.isShowNoGroup && this.$('.no-group-select').prop('checked')) {\n\t\t\t\tselectedGroups.push(new PJQ.models.groups.Group({\n\t\t\t\t\tgroupId: 0\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tlet newGroups = _.filter(selectedGroups, function (group) {\n\t\t\t\t\treturn !_.findWhere(this.originalGroups, {id: group.id});\n\t\t\t\t}, this),\n\t\t\t\tallGroups = _.union([], this.originalGroups);\n\n\t\t\t_.each(selectedGroups, function (group) {\n\t\t\t\tif (!_.findWhere(allGroups, {id: group.id}))\n\t\t\t\t\tallGroups.push(group);\n\t\t\t});\n\t\t\t_.each(allGroups, _.bind(function (group) {\n\t\t\t\tif (_.findWhere(this.originalGroups, {id: group.id}) && !_.findWhere(selectedGroups, {id: group.id}))\n\t\t\t\t\tgroup.set('isDeleted', true);\n\t\t\t\telse\n\t\t\t\t\tgroup.set('isDeleted', false);\n\t\t\t}, this));\n\t\t\tif (this.options.isSync) {\n\t\t\t\tthis.originalGroups = selectedGroups;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tselected: selectedGroups,\n\t\t\t\tnew: newGroups,\n\t\t\t\toriginal: this.originalGroups,\n\t\t\t\tall: allGroups\n\t\t\t};\n\t\t}\n\t},\n\treportContactGroups: function () {\n\t\tnew PJQ.views.groups.ReportContactGroupsModal({\n\t\t\tcontactId: this.options.contactId,\n\t\t\tgroups: this.collection\n\t\t});\n\t},\n\tshowError: function (errorText) {\n\t\tthis.hideError();\n\t\tthis.errorAlert = new PJQ.Alert(this.$el, {\n\t\t\ttype: 'danger',\n\t\t\textraClasses: ['mt-1, mb-1'],\n\t\t\ttext: errorText,\n\t\t\tisPrepend: true\n\t\t});\n\t},\n\thideError: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\t},\n\tremove: function () {\n\t\tthis.removed = true;\n\t\treturn PJQ.views.BaseView.prototype.remove.call(this);\n\t}\n});\n\nPJQ.views.groups.ReportContactGroupsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Report-Contact-Groups'),\n\t\tonSave: _.noop\n\t},\n\tevents: {\n\t\t\"click .btn-report-contact-groups\": \"report\"\n\t},\n\tafterRender: function () {\n\t\tlet grps = _.where(this.options.groups.getSelectedGroups().toJSON(), {isPublic: true});\n\t\t_.each(grps, function (grp) {\n\t\t\tgrp.isDisabled = false;\n\t\t});\n\t\tthis.groupSelector = new PJQ.views.groups.GroupSelector({\n\t\t\tel: this.$('.group-selector'),\n\t\t\tgroups: grps,\n\t\t\tisEnableSelectedFilter: false,\n\t\t\tonGroupSelected: _.bind(this.checkGroupsSelected, this)\n\t\t});\n\t\tthis.checkGroupsSelected(this.groupSelector.getGroupsData());\n\t},\n\tcheckGroupsSelected: function (groupsData) {\n\t\tthis.$('.btn-report-contact-groups').prop('disabled', _.size(groupsData.selected) === 0)\n\t},\n\treport: function () {\n\t\tlet reportedGroups = new PJQ.collections.groups.Groups(this.groupSelector.getGroupsData().selected).toJSON();\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: this.options.contactId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'groups'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'report'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tgroups: reportedGroups,\n\t\t\t\tprojectId: PJQ.app.session.project ? PJQ.app.session.project.id : null\n\t\t\t}\n\t\t}).post().done(_.bind(function () {\n\t\t\tlet reportedGroupCount = _.size(reportedGroups),\n\t\t\t\tmodalCreated = PJQ.notifications.createNotifyModal({\n\t\t\t\t\theader: 'Groups Reported',\n\t\t\t\t\tnotification: reportedGroupCount.toString() + \" groups linked to this contact's public account were successfully reported. Customer service will determine if they are valid.\",\n\t\t\t\t\tcookie: PJQ.constants.cookies.NOTIFY_CONTACT_GROUPS_REPORTED\n\t\t\t\t});\n\t\t\tif (!modalCreated) {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: reportedGroupCount.toString() + ' groups successfully reported.'\n\t\t\t\t});\n\t\t\t}\n\t\t}, this)).fail(function () {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Failed to report groups. Contact customer service.'\n\t\t\t});\n\t\t});\n\t}\n});\n\n\nPJQ.views.groups.SelectGroupsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\tisSingleChoice: false,\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Groups-Select'),\n\t\talertText: null,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t\"click .groups-select-save\": \"onSave\"\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.options.selectorOptions = _.defaults(this.options.selectorOptions, {\n\t\t\tel: this.$('.group-selector'),\n\t\t\tisEnableSelectedFilter: false,\n\t\t\tonGroupSelected: _.bind(this.checkGroupsSelected, this),\n\t\t});\n\t\tthis.groupSelector = new PJQ.views.groups.GroupSelector(this.options.selectorOptions);\n\t},\n\tcheckGroupsSelected: function (groupsData) {\n\t\tthis.$('.groups-select-save').prop('disabled', _.size(groupsData.new) === 0 && _.size(_.difference(_.map(groupsData.original, function (group) {\n\t\t\treturn group.id;\n\t\t}), _.map(groupsData.selected, function (group) {\n\t\t\treturn group.id\n\t\t}))) === 0);\n\t\tif (this.options.selectorOptions.isSingleChoice) {\n\t\t\tthis.onSave()\n\t\t}\n\t},\n\tonSave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave(this.groupSelector.getGroupsData());\n\t\t}\n\t\tthis.removeModal();\n\t},\n});\n\nPJQ.views.groups.GroupsSelectInput = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Groups-Select-Input'),\n\t\tsubTemplates: {\n\t\t\tgroupBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Groups-Select-Input-Groups')\n\t\t},\n\t\tselectedGroups: null,\n\t\tisShowAddButton: true,\n\t\taddButton: null,\n\t\tisReadOnly: false,\n\t\tonAfterSave: _.noop,\n\t\tlimitGroups: false\n\t},\n\tevents: {\n\t\t\"click .group-select-input-edit\": \"modify\",\n\t\t\"click .group-select-input-delete\": \"deleteGroup\",\n\t\t\"click .btn-show-groups\": \"showAllGroups\"\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tisReadOnly: this.options.isReadOnly\n\t\t};\n\t},\n\tbeforeRender() {\n\t\tif (!this.options.isShowAddButton) {\n\t\t\tthis.options.template = new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Groups-Select-Input-No-Button');\n\n\t\t\tif (_.size(this.options.addButton) > 0) {\n\t\t\t\tthis.options.addButton.on('click', _.bind(this.modify, this));\n\t\t\t}\n\t\t}\n\n\t\tthis.selectedGroups = this.options.selectedGroups ? this.options.selectedGroups : [];\n\t},\n\tafterRender() {\n\t\tthis.renderSelectedGroups();\n\t},\n\tdeleteGroup: function () {\n\t\tlet id = jQuery(event.target).closest('.select-group-container').data('group-id');\n\n\t\tthis.selectedGroups = _(this.selectedGroups).filter(function (item) {\n\t\t\treturn item.id !== id;\n\t\t});\n\n\t\tthis.options.onAfterSave(this.selectedGroups);\n\n\t\tthis.renderSelectedGroups();\n\t},\n\tmodify: function () {\n\t\tthis.selector = new PJQ.views.groups.SelectGroupsModal({\n\t\t\tselectorOptions: {\n\t\t\t\tgroupUserId: this.options.groupUserId,\n\t\t\t\tselectedGroupIds: _.map(this.selectedGroups, function (model) {\n\t\t\t\t\treturn model.attributes.groupId\n\t\t\t\t}),\n\t\t\t\tgroupLevels: this.options.groupLevels,\n\t\t\t},\n\t\t\tonSave: _.bind(function (data) {\n\t\t\t\tthis.selectedGroups = _.union(this.selectedGroups, data.new);\n\t\t\t\tthis.renderSelectedGroups();\n\t\t\t\tthis.options.onAfterSave(this.selectedGroups);\n\t\t\t}, this)\n\t\t});\n\t},\n\trenderSelectedGroups: function () {\n\t\tlet data;\n\t\tif (this.options.limitGroups && _.size(this.selectedGroups) > 5) {\n\t\t\tdata = _.rest(this.selectedGroups.reverse(), _.size(this.selectedGroups) - 5).reverse();\n\t\t}\n\t\telse {\n\t\t\tdata = this.selectedGroups;\n\t\t}\n\n\t\tif (_.size(data) === 0) {\n\t\t\tthis.$('.group-select-list').html('<div class=\"text-muted font-weight-light fs-16 mb-2 mt-2\">No Trades Selected</div>');\n\t\t}\n\t\telse {\n\t\t\tthis.renderSubTemplate(false, this.options.subTemplates.groupBadge, this.$('.group-select-list'),\n\t\t\t\t{\n\t\t\t\t\tmodels: data,\n\t\t\t\t\tisReadOnly: this.options.isReadOnly\n\t\t\t\t});\n\t\t}\n\n\t\tif (this.options.limitGroups && _.size(this.selectedGroups) > 5) {\n\t\t\tthis.$('.group-select-list').append(\"<a href='javascript:void(0)' class='btn-show-groups' title='Click to show complete list of Trades'> Show \" + (_.size(this.selectedGroups) - 5) + \" more item(s)</a>\")\n\t\t}\n\t},\n\tshowAllGroups: function () {\n\t\tlet data = this.selectedGroups.reverse();\n\n\t\tif (_.size(data) === 0) {\n\t\t\tthis.$('.group-select-list').html('<div class=\"text-muted font-weight-light fs-16 mb-2\">No Trades Selected</div>');\n\t\t}\n\t\telse {\n\t\t\tthis.renderSubTemplate(false, this.options.subTemplates.groupBadge, this.$('.group-select-list'),\n\t\t\t\t{\n\t\t\t\t\tmodels: data,\n\t\t\t\t\tisReadOnly: this.options.isReadOnly\n\t\t\t\t});\n\t\t}\n\t}\n});\n","PJQ.inputs = {};\n\nPJQ.inputs.EditorInput = PJQ.views.BaseView.extend({\n baseOptions: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input'),\n value: \"\",\n label: \"\",\n title: '',\n extraLabelClasses: \"\",\n extraValueDisplayClasses: \"\",\n extraEditButtonClasses: \"\",\n editButtonText: \"edit\",\n isFormInput: false,\n canEdit: true,\n showSaveButton: true,\n showCancelButton: true,\n onEditStart: _.noop,\n onCancel: _.noop,\n onSave: _.noop\n },\n events: {\n \"click .ei-edit-button\": \"edit\",\n \"click .ei-cancel-button\": \"cancel\",\n \"click .ei-save-button\": \"save\",\n \"keyup .ei-input\": \"onChange\",\n \"dp.change .ei-input\": \"onChange\"\n },\n inputType: \"\",\n beforeFirstRender: function () {\n //set value initially in case setValue has custom formatting\n this.setValue(this.getValue());\n },\n beforeRender: function () {\n this.beforeInputRender();\n this.renderData = {\n value: this.getDisplayValue(),\n isEdit: this.isEdit,\n inputType: this.inputType,\n options: this.options\n };\n },\n beforeInputRender: function () {\n\n },\n afterRender: function () {\n if (this.isEdit) {\n this.$('.ei-input').focus().select();\n }\n this.afterInputRender();\n },\n afterInputRender: function () {\n\n },\n getDisplayValue: function () {\n return typeof this.options.getDisplayValue === 'function' ? this.options.getDisplayValue(this.options.value) : this.options.value;\n },\n getValue: function () {\n return this.options.value;\n },\n setValue: function (value) {\n this.options.value = value;\n },\n onChange: function (e) {\n if (e && e.which === 13) {\n this.save();\n return;\n }\n\n this.setValue(this.$('.ei-input').val());\n },\n onEditStart: function () {\n if (typeof this.options.onEditStart === 'function') {\n this.options.onEditStart();\n }\n },\n edit: function () {\n this.onEditStart();\n this.isEdit = true;\n this.render();\n },\n cancel: function () {\n this.options.onCancel(this.getValue());\n this.isEdit = false;\n this.render();\n },\n save: function () {\n this.options.onSave(this.getValue());\n this.isEdit = false;\n this.render();\n }\n});\n\nPJQ.inputs.CurrencyEditorInput = PJQ.inputs.EditorInput.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Currency'),\n digits: 2\n },\n inputType: 'currency',\n afterRender: function () {\n if (this.isEdit) {\n let $input = this.$('.ei-input');\n PJQ.helpers.inputHelpers.inputMaskCurrency($input, this.options.digits);\n if (this.options.value == null) {\n this.options.value = 0;\n }\n $input.val(this.options.digits === 2 ? this.options.value / 100 : this.options.value);\n $input.focus().select();\n }\n },\n onChange: function (e) {\n let inputVal = $(e.currentTarget).val().replace(/ /g, '0'),\n val = parseInt(PJQ.helpers.formatHelpers.numbersOnly(inputVal));\n if (!isNaN(val)) {\n if (this.options.digits === 0) {\n val = val * 100;\n }\n } else {\n val = 0;\n }\n this.setValue(val);\n return val;\n }\n});\n\nPJQ.inputs.TextEditorInput = PJQ.inputs.EditorInput.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Text')\n },\n inputType: 'text'\n});\n\nPJQ.inputs.SelectPickerEditorInput = PJQ.inputs.EditorInput.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Select-Picker'),\n subTemplates: {\n formTemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Select-Picker-Form'),\n }\n },\n inputType: 'select',\n beforeInputRender: function () {\n if (this.options.isFormInput) {\n this.options.template = this.options.subTemplates.formTemplate;\n }\n this.options.selectPickerOptions = this.options.selectPickerOptions != null ? this.options.selectPickerOptions : {};\n },\n afterInputRender: function () {\n new PJQ.inputs.Selectpicker(_.extend(this.options.selectPickerOptions, {\n el: this.$('select.ei-input'),\n defaultValue: this.options.value,\n onChange: _.bind(function (value) {\n this.options.value = value;\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(...arguments);\n }\n }, this)\n }));\n },\n onEditStart: function () {\n if (typeof this.options.getChoices === 'function') {\n let fnRender = (choices) => {\n if (PJQ.helpers.objectHelpers.refinedType(choices) === 'array') {\n this.options.selectPickerOptions.choices = choices;\n this.render();\n }\n }, choices = this.options.getChoices((ch) => {\n fnRender(ch);\n });\n fnRender(choices);\n }\n\n return PJQ.inputs.EditorInput.prototype.onEditStart.apply(this, arguments);\n },\n getDisplayValue: function () {\n if (this.options.value != null && _.size(this.options.selectPickerOptions.choices) > 0) {\n let displayVal = _.find(this.options.selectPickerOptions.choices, _.bind(function (choice) {\n return choice.id === this.options.value;\n }, this));\n if (displayVal != null) {\n return displayVal.name;\n }\n } else if (_.size(this.options.defaultDisplayValue) > 0) {\n return this.options.defaultDisplayValue;\n }\n return 'N/A';\n },\n});\n\nPJQ.inputs.TextAreaEditorInput = PJQ.inputs.EditorInput.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Textarea'),\n value: \"\",\n label: \"\",\n nullText: \"\",\n canEdit: true,\n extraLabelClasses: \"\",\n extraValueDisplayClasses: \"\",\n extraEditButtonClasses: \"\",\n onEditStart: _.noop,\n onCancel: _.noop,\n onSave: _.noop\n },\n inputType: 'textarea',\n onChange: function (e) {\n this.setValue($(e.currentTarget).val());\n }\n});\n\nPJQ.inputs.DateEditorInput = PJQ.inputs.EditorInput.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Editor-Input-Date'),\n value: \"\",\n label: \"\",\n nullText: \"\",\n canEdit: true,\n extraLabelClasses: \"\",\n extraValueDisplayClasses: \"\",\n extraEditButtonClasses: \"\",\n onEditStart: _.noop,\n onCancel: _.noop,\n onSave: _.noop,\n dateOrientation: \"left bottom\",\n dateFormat: PJQ.helpers.dateHelpers.dateFormats.DATE_TIME\n },\n inputType: 'date',\n afterRender: function () {\n if (_.size(this.$('.ei-date').find('.ei-input')) > 0) {\n this.datepicker = this.$('.ei-date').find('.ei-input');\n new PJQ.inputs.Datepicker({\n el: this.datepicker,\n datepickerOptions: {\n format: this.options.dateFormat === PJQ.helpers.dateHelpers.dateFormats.DATE ? PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE : PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n defaultDate: this.getValue()\n }\n })\n }\n },\n setValue: function (value) {\n if (PJQ.helpers.objectHelpers.refinedType(value) === 'string')\n this.options.value = new Date(value);\n else\n this.options.value = value;\n },\n onChange: function (e) {\n this.setValue(e.date._d);\n },\n getDisplayValue: function () {\n let value = this.getValue();\n return value == null ? this.options.nullText : PJQ.helpers.dateHelpers.getDateString(value, this.options.dateFormat);\n }\n});\n\nPJQ.inputs.AutocompleteInput = PJQ.views.BaseView.extend({\n defaults: {\n data: null,\n dataDisplayProperty: null,\n source: [],\n value: null,\n onSelect: _.noop\n },\n events: {\n 'keyup': 'onKeyup'\n },\n afterRender: function () {\n if (!this.$el.hasClass('pt-autocomplete'))\n this.$el.addClass('pt-autocomplete');\n\n //If there is data passed in, that means we want to be able to return a data object related to the autocomplete item selected\n this.parseSource();\n\n this.autocomplete = this.$el.autocomplete(_.defaults(this.options, {\n select: _.bind(this.select, this),\n change: _.bind(this.change, this)\n }));\n\n let self = this;\n this.autocomplete.data('ui-autocomplete')._renderMenu = function (ul, items) {\n _.each(items, _.bind(function (item) {\n this._renderItemData(ul, item);\n }, this));\n $(ul).addClass('pt-autocomplete-menu');\n };\n this.autocomplete.data('ui-autocomplete')._resizeMenu = function () {\n this.menu.element.outerWidth(self.$el.outerWidth());\n };\n\n if (this.options.value != null) {\n this.setValue(this.getValue());\n }\n },\n parseSource: function () {\n if (PJQ.helpers.objectHelpers.refinedType(this.options.data) === 'array' && this.options.dataDisplayProperty != null) {\n this.options.source = [];\n _.each(this.options.data, _.bind(function (dataItem) {\n this.options.source.push(this.getDataItemValue(dataItem));\n }, this));\n }\n },\n reloadSource: function (obj) {\n if (obj != null) {\n if (obj.data && this.options.dataDisplayProperty) {\n this.options.data = obj.data;\n this.parseSource();\n } else if (PJQ.helpers.objectHelpers.refinedType(obj.source) === 'array') {\n this.options.source = obj.source;\n }\n }\n if (this.autocomplete) {\n this.$el.autocomplete('option', 'source', this.options.source);\n }\n },\n getValue: function () {\n return this.$el.val();\n },\n setValue: function (value) {\n this.$el.val(value);\n },\n refresh: function (e) {\n $(e.currentTarget).autocomplete('search');\n },\n onKeyup: function (e) {\n //Force a refresh after the first character is entered in case there is any page altering markup changes made\n //The autocomplete menu is absolutely positioned, so any dom changes will result in it shifting down/up\n if (_.size(this.$el.val()) === 1) {\n setTimeout(_.bind(function () {\n this.refresh(e);\n }, this), 300);\n }\n },\n change: function (e, ui) {\n if (typeof this.options.onChange === 'function') {\n this.options.onChange($(e.currentTarget).val());\n }\n },\n select: function (e, ui) {\n let $target = $(e.target);\n $target.val(ui.item.value);\n $target.trigger('keyup');\n if (typeof this.options.onSelect === 'function') {\n this.options.onSelect({\n value: ui.item.value,\n match: PJQ.helpers.objectHelpers.refinedType(this.options.data) === 'array' ? (_.find(this.options.data, _.bind(function (dataItem) {\n return this.getDataItemValue(dataItem).toLowerCase() === ui.item.value.toLowerCase()\n }, this))) : null,\n e\n });\n }\n },\n getDataItemValue: function (dataItem) {\n let result = PJQ.helpers.objectHelpers.refinedType(dataItem, true) === 'backboneModel' ? dataItem.get(this.options.dataDisplayProperty) : dataItem[this.options.dataDisplayProperty];\n return result ? result : '';\n }\n});\n\nPJQ.inputs.Datepicker = PJQ.views.BaseView.extend({\n defaults: {\n datepickerOptions: {\n defaultDate: null,\n allowInputToggle: true,\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE_TIME,\n icons: {\n time: 'fal fa-clock',\n date: 'fal fa-calendar-alt',\n up: 'fal fa-chevron-up',\n down: 'fal fa-chevron-down',\n previous: 'fal fa-chevron-left',\n next: 'fal fa-chevron-right',\n today: 'fal fa-crosshairs',\n clear: 'fal fa-trash',\n close: 'fal fa-times'\n },\n useCurrent: false,\n minDate: false\n },\n disabledDays: [],\n disableWeekends: false,\n isTimeOnly: false,\n onChange: _.noop,\n onShow: _.noop,\n isShowTimezone: true,\n isEditTimezone: false,\n canEdit: true,\n timezone: new Date().toLocaleTimeString('en-us', {timeZoneName: 'short'}).split(' ')[2]\n },\n events: {\n \"dp.show\": \"onShow\",\n \"dp.change\": \"onChange\"\n },\n beforeInit: function (options) {\n if (options.datepickerOptions != null) {\n this.options.datepickerOptions = _.defaults(options.datepickerOptions ? options.datepickerOptions : {}, this.defaults.datepickerOptions);\n\n this.setMinDate(this.options.datepickerOptions.minDate);\n if (this.options.datepickerOptions.defaultDate == null && _.size(this.$el.val()) > 0) {\n this.options.datepickerOptions.defaultDate = this.$el.val();\n this.$el.val('');\n }\n\n if (typeof this.options.datepickerOptions.defaultDate === 'string' && _.size(this.options.datepickerOptions.defaultDate) > 0) {\n if (!this.options.isDateTime) {\n this.options.datepickerOptions.defaultDate.replace(/[^0-9\\/]/g, '');\n }\n\n let parsedDate = parsedDate = PJQ.helpers.dateHelpers.parseDateString(this.options.datepickerOptions.defaultDate, this.options.datepickerOptions.format !== PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE);\n if (!isNaN(parsedDate.getTime())) {\n this.value = parsedDate;\n } else {\n this.options.datepickerOptions.defaultDate = null;\n this.value = null;\n }\n } else if (PJQ.helpers.objectHelpers.refinedType(this.options.datepickerOptions.defaultDate) === 'date') {\n this.value = this.options.datepickerOptions.defaultDate;\n } else {\n this.value = null;\n }\n this.options.datepickerOptions.defaultDate = this.value;\n }\n\n if (this.$el.hasClass('disabled') || this.$el.prop('disabled')) {\n options.canEdit = false;\n }\n\n if (options.isTimeOnly) {\n options.datepickerOptions.format = 'LT';\n }\n\n if (_.size(this.options.timezone) === 0) {\n this.options.timezone = new Date().toLocaleTimeString('en-us', {timeZoneName: 'short'}).split(' ')[2]\n }\n },\n afterRender: function () {\n this.$el.prop('disabled', !this.options.canEdit);\n if (this.options.isEditTimezone && this.options.canEdit) {\n this.$el.after('<select class=\"select-tz wd-75p\"></select>');\n\n let localOffset = new Date().getTimezoneOffset();\n this.timezonePicker = new PJQ.inputs.Selectpicker({\n el: this.$el.parent().find('.select-tz'),\n defaultValue: this.options.timezone,\n isLiveSearch: true,\n choices: this.getTimezoneSelectOptions(),\n isMultiple: false,\n isIntChoices: false,\n onChange: (value) => {\n this.options.timezone = value;\n if (typeof this.options.onTimezoneChange === 'function') {\n this.options.onTimezoneChange(this.options.timezone);\n }\n }\n });\n } else if ((this.options.isShowTimezone || this.options.isEditTimezone) && (this.isDateTime() || this.options.isTimeOnly)) {\n let timezoneInputAddon = $(\"<div>\", {\n class: 'input-group-append'\n }).append($(\"<span>\", {\n class: 'input-group-text'\n }).text(this.options.timezone));\n this.$el.after(timezoneInputAddon);\n }\n\n this.datetimepicker = this.$el.datetimepicker(this.getPickerOptions());\n\n this.$el.on('keyup', _.bind(this.onKeyup, this));\n },\n getPickerOptions: function () {\n return _.defaults({\n daysOfWeekDisabled: this.getDaysOfWeekDisabled()\n }, this.options.datepickerOptions);\n },\n setTimezone: function (tz) {\n if (_.size(tz) === 0 || this.timezonePicker == null) {\n return;\n }\n\n this.options.timezone = tz;\n this.timezonePicker.setValue(tz);\n },\n getTimezoneSelectOptions: function () {\n return _.map(_.sortBy(PJQ.helpers.dateHelpers.timezones, (timezone) => {\n return timezone.offset;\n }), (timezone) => {\n return {\n id: timezone.abbr,\n title: timezone.abbr,\n name: '(GMT' + PJQ.helpers.dateHelpers.getFormattedTimezoneOffset(timezone.offset) + ') ' + timezone.name\n }\n });\n },\n setDisabledDays: function (value) {\n this.options.disabledDays = value;\n\n let picker = this.getPicker();\n if (picker != null) {\n picker.options(this.getPickerOptions());\n }\n },\n getDaysOfWeekDisabled: function () {\n let disableDays = [];\n if (this.options.disableWeekends) {\n disableDays.push(...[0, 6]);\n }\n if (_.size(this.options.disabledDays) > 0) {\n disableDays = _.union(disableDays, this.options.disabledDays);\n }\n return _.size(disableDays) > 0 ? disableDays : false;\n },\n isDateTime: function () {\n return this.options.datepickerOptions.format.indexOf('h') !== -1 || this.options.datepickerOptions.format.indexOf('m') !== -1;\n },\n onKeyup: function () {\n let inputVal = this.$el.val(),\n selectedDate = null;\n if (PJQ.helpers.dateHelpers.validateDate(inputVal)) {\n selectedDate = PJQ.helpers.dateHelpers.parseDateString(inputVal);\n }\n this.dateChanged(selectedDate);\n },\n onChange: function (e) {\n if (e.date) {\n this.dateChanged(e.date._d);\n }\n },\n onShow: function () {\n if (typeof this.options.onShow === 'function')\n this.options.onShow(this);\n },\n hide: function () {\n let picker = this.getPicker();\n if (picker != null) {\n picker.hide();\n }\n },\n show: function () {\n let picker = this.getPicker();\n if (picker != null) {\n picker.show();\n }\n },\n dateChanged: function (selectedDate) {\n let isChanged = false,\n isDateTime = this.isDateTime(),\n isTimeOnly = this.options.isTimeOnly;\n if (this.value == null) {\n isChanged = true;\n } else if ((isDateTime || isTimeOnly) && PJQ.helpers.dateHelpers.getDateDiff(selectedDate, new Date(this.value)) !== 0) {\n isChanged = true;\n } else if (!isDateTime) {\n let parsedValue = PJQ.helpers.dateHelpers.getDateString(this.value, PJQ.helpers.dateHelpers.dateFormats.DATE);\n if (typeof parsedValue !== 'undefined' && parsedValue !== PJQ.helpers.dateHelpers.getDateString(selectedDate, PJQ.helpers.dateHelpers.dateFormats.DATE)) {\n isChanged = true;\n }\n }\n\n if (isChanged) {\n if (!isDateTime && !isTimeOnly && selectedDate != null) {\n selectedDate.setHours(0, 0, 0, 0);\n }\n this.value = selectedDate;\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(typeof selectedDate === 'undefined' ? null : selectedDate);\n }\n }\n },\n disable: function () {\n this.$el.prop('disabled', true);\n },\n setValue: function (newValue) {\n this.value = newValue;\n if (newValue === null) {\n this.$el.val('');\n } else {\n let picker = this.getPicker();\n if (picker != null) {\n picker.setValue(newValue);\n }\n }\n },\n setValueSilently: function (newValue) {\n // This will set the value without triggering the onChange. Useful for initially setting the value.\n this.value = newValue;\n if (newValue === null) {\n this.$el.val('');\n } else {\n this.datetimepicker.off('dp.change');\n\n let picker = this.getPicker();\n if (picker != null) {\n picker.setValue(newValue);\n }\n\n this.datetimepicker.on('dp.change', this.onChange.bind(this));\n }\n },\n getValue: function () {\n return this.value;\n },\n setMinDate: function (value) {\n let minDate = value;\n if (minDate) {\n if (typeof minDate === 'string') {\n minDate = new Date(minDate);\n }\n\n minDate = PJQ.helpers.dateHelpers.getDateString(minDate, PJQ.helpers.dateHelpers.dateFormats.DATE);\n }\n\n this.options.datepickerOptions.minDate = (minDate ?? false);\n\n let picker = this.getPicker();\n if (picker != null) {\n picker.minDate(this.options.datepickerOptions.minDate);\n }\n },\n setPickerOption: function (option, value) {\n this.options.datepickerOptions[option] = value;\n let picker = this.getPicker();\n if (picker != null) {\n picker.options(this.options.datepickerOptions);\n }\n },\n getPicker: function () {\n return this.datetimepicker != null ? this.datetimepicker.data('DateTimePicker') : null;\n },\n showError: function (errorText) {\n PJQ.helpers.inputHelpers.setInputError(this.$el, false, {\n errorText: errorText\n });\n },\n hideError: function () {\n PJQ.helpers.inputHelpers.setInputError(this.$el, true);\n }\n});\n\nPJQ.inputs.SelectPickerCollection = class {\n constructor($el, models, options = {}) {\n this.options = _.defaults(options, {\n selectPickerOptions: {},\n pickerSelector: null,\n idAttribute: 'cid'\n });\n\n if (_.size(this.options.pickerSelector) === 0) {\n return;\n }\n\n this.$el = $el;\n this.models = models;\n\n this.pickers = {};\n this.initPickers();\n }\n\n initPickers() {\n this.cleanPickers();\n this.pickers = {};\n\n let self = this;\n this.$el.find(this.options.pickerSelector).each(function () {\n let model = null,\n id = $(this).closest('tr').attr('id');\n if (_.size(id) > 0) {\n model = _.find(self.models, function (model) {\n return model[self.options.idAttribute]?.toString() === id;\n }, this);\n }\n\n if (model != null) {\n let defaultValue = self.options.selectPickerOptions.defaultValue && typeof self.options.selectPickerOptions.defaultValue === 'function' ? self.options.selectPickerOptions.defaultValue(model) : null;\n let opts = _.defaults({\n el: $(this),\n defaultValue: defaultValue || (() => {\n if (_.size(self.options.valueAttribute) > 0) {\n return PJQ.helpers.objectHelpers.refinedType(model, true) === 'backboneModel'\n ? model.get(self.options.valueAttribute)\n : model[self.options.valueAttribute];\n }\n return null;\n }),\n choices: function () {\n let choices = self.options.selectPickerOptions.choices;\n if (typeof choices === 'function') {\n return choices(model);\n }\n return choices;\n },\n isDisabled: function () {\n let disabled = self.options.selectPickerOptions.isDisabled;\n if (typeof disabled === 'function') {\n return disabled(model);\n }\n return disabled;\n },\n onChange: function (value) {\n if (typeof self.options.onChange === 'function') {\n self.options.onChange(model, value);\n }\n }\n }, self.options.selectPickerOptions);\n self.pickers[model.cid] = new PJQ.inputs.Selectpicker(opts);\n }\n })\n }\n\n getPickerForId(id) {\n return this.pickers[id];\n }\n\n cleanPickers() {\n _.each(this.pickers, function (picker) {\n picker.remove();\n });\n this.pickers = {};\n }\n\n remove() {\n this.cleanPickers();\n }\n};\n\nPJQ.inputs.DatePickerCollection = class {\n constructor($el, models, options = {}) {\n this.options = _.defaults(options, {\n datePickerOptions: {},\n pickerSelector: null,\n idAttribute: 'cid'\n });\n\n if (_.size(this.options.pickerSelector) === 0) {\n return;\n }\n\n this.$el = $el;\n this.models = models;\n\n this.pickers = {};\n this.initPickers();\n }\n\n initPickers() {\n this.cleanPickers();\n this.pickers = {};\n\n let self = this;\n this.$el.find(this.options.pickerSelector).each(function () {\n let model = null,\n id = $(this).closest('tr').attr('id');\n if (_.size(id) > 0) {\n model = _.find(self.models, function (model) {\n return model[self.options.idAttribute]?.toString() === id;\n }, this);\n }\n\n if (model != null) {\n let defaultVal = PJQ.helpers.objectHelpers.refinedType(model, true) === 'backboneModel' ? model.get(self.options.valueAttribute) : model[self.options.valueAttribute],\n defaultValDate = new Date(defaultVal);\n let opts = _.defaults({\n el: $(this),\n onChange: function (value) {\n if (typeof self.options.onChange === 'function') {\n self.options.onChange(model, value);\n }\n },\n datepickerOptions: _.defaults({\n defaultDate: defaultValDate instanceof Date && !isNaN(defaultValDate.getTime()) ? defaultValDate : null\n }, self.options.datePickerOptions.datepickerOptions)\n }, self.options.datePickerOptions);\n self.pickers[model.cid] = new PJQ.inputs.Datepicker(opts);\n }\n })\n }\n\n getPickerForId(id) {\n return this.pickers[id];\n }\n\n cleanPickers() {\n _.each(this.pickers, function (picker) {\n picker.remove();\n });\n this.pickers = {};\n }\n\n remove() {\n this.cleanPickers();\n }\n};\n\nPJQ.inputs.Selectpicker = PJQ.views.BaseView.extend({\n defaults: {\n onChange: _.noop,\n onHide: _.noop,\n onShow: _.noop,\n style: 'btn-default',\n noneSelectedText: 'Select Value',\n selectAllText: 'All Selected',\n defaultValue: null,\n selectOnTab: true,\n isMultiple: false,\n isDisabled: false,\n isGrouped: false,\n allGroupsIsMultiple: false,\n hideDisabled: true,\n isIntChoices: false,\n isLiveSearch: false,\n isBlockSubtext: false,\n mobile: false,\n header: false,\n isMirrorOptionColors: false,\n exclusiveChoices: null,\n mustSelectValue: false,\n mustSelectValuePerOptGroup: false,\n countBeforeTextFormat: 0,\n canEdit: true\n },\n events: {\n \"changed.bs.select\": \"onChange\",\n \"hidden.bs.select\": \"onHidden\",\n \"show.bs.select\": \"onShow\"\n },\n beforeFirstRender: function () {\n if (this.options.isLiveSearch) {\n this.$el.attr('data-live-search', 'true');\n }\n // This will format the text shown in the select picker to be \"x items selected\" instead of the choices once the choices exceed the number passed to this option.\n if (this.options.countBeforeTextFormat > 0) {\n this.$el.attr('data-selected-text-format', 'count > ' + (this.options.countBeforeTextFormat));\n }\n if (this.options.isBlockSubtext) {\n this.$el.addClass('block-subtext');\n }\n\n if (this.$el.hasClass('disabled') || this.$el.prop('disabled')) {\n this.options.canEdit = false;\n }\n\n if (this.$el.length > 0) {\n this.$el.data('selectpickerview', this);\n }\n\n this.$el.prop('disabled', !this.options.canEdit);\n },\n beforeRender: function () {\n // set the multiple flag on the select element, this is required by the selectpicker library\n // we have to determine if any groups are marked as multiple\n // if isMultiple is passed in and none of the optgroups have the multiple data attribute, that means every optgroup is multiple\n // if even 1 optgroup has the multiple data attribute then we refer to those attributes to determine if each group is multiple\n let isMultipleGroupCount = _.size(this.$('optgroup').filter(function () {\n return $(this).data('multiple') !== undefined\n })),\n hasIsMultipleGroup = isMultipleGroupCount > 0;\n this.options.allGroupsIsMultiple = this.options.isGrouped && this.options.isMultiple && isMultipleGroupCount === 0;\n\n this.options.isMultiple = this.options.isMultiple || this.$el.hasClass('multiple') || this.$el.prop('multiple') || hasIsMultipleGroup || this.options.allGroupsIsMultiple;\n this.$el.prop('multiple', this.options.isMultiple);\n\n\n this.options.isDisabled = this.options.isDisabled || this.$el.hasClass('disabled') || this.$el.prop('disabled');\n this.$el.prop('disabled', this.options.isDisabled);\n\n if (this.options.choices) {\n this.updateChoices(this.options.choices);\n }\n\n // if no default value was passed in, try to determine which items are selected by going through the select element\n if (this.options.defaultValue == null) {\n let self = this;\n this.$el.find('option').each(function () {\n if ($(this).attr(\"selected\") && $(this).attr(\"selected\").toLowerCase() === 'selected') {\n // only set the default value as non null once we have a matched item\n if (self.options.defaultValue == null) {\n self.options.defaultValue = self.options.isMultiple ? [] : \"\";\n }\n\n let val = $(this).attr('value');\n if (self.options.isMultiple) {\n self.options.defaultValue.push(val);\n } else {\n self.options.defaultValue = val;\n return false;\n }\n }\n });\n }\n\n this.$el.selectpicker(_.defaults({\n choices: typeof this.options.choices === 'function' ? this.options.choices() : this.options.choices\n }, this.options));\n\n this.$outer = this.$el.closest('.bootstrap-select');\n if ((!this.options.isDisabled || (typeof this.options.isDisabled === 'function' && !this.options.isDisabled()))) {\n this.$outer.find('.dropdown-toggle').removeClass('btn-light');\n }\n //If there are any headers that are empty, hide them\n this.$outer.find('.dropdown-header').each(function () {\n let $header = $(this);\n if (_.size($header.find('.text').html()) === 0) {\n $header.addClass('hidden');\n }\n });\n\n this.isClicking = false;\n let $clickItems = this.$outer.add(this.$outer.find('button.dropdown-toggle'));\n $clickItems.off('mousedown.isClicking click.isClicking').on('mousedown.isClicking click.isClicking', (e) => {\n this.isClicking = true;\n });\n\n this.$outer.find('button.dropdown-toggle').off('focus').on('focus', (e) => {\n if (!this.isClicking && this.isCollapsed()) {\n this.toggle();\n }\n\n this.isClicking = false;\n });\n\n this.setValue(typeof this.options.defaultValue === 'function' ? this.options.defaultValue() : this.options.defaultValue, false);\n\n this.afterRender();\n return false;\n },\n checkGroupIsMultiple: function (group) {\n if (this.options.allGroupsIsMultiple) {\n return true;\n }\n\n if (_.size(group) > 0) {\n let optGroup = this.$('optgroup[data-attr=\"' + group + '\"]');\n if (_.size(optGroup) > 0) {\n return optGroup.data('multiple') === true;\n }\n }\n return false;\n },\n getValue: function () {\n let value = null,\n self = this;\n //If the options call for grouped results, we have to manually get them rather than using built in selectpicker function\n //This is because if there are 2 options in different groups with the same value, we need to check them separately\n if (this.options.isGrouped) {\n value = {};\n this.$('option:selected').each(function () {\n let selectedOptionVal = $(this).val();\n if (selectedOptionVal !== undefined) {\n if (self.options.isIntChoices) {\n selectedOptionVal = parseInt(selectedOptionVal);\n if (isNaN(selectedOptionVal))\n return;\n }\n\n let selectedGroupAttr = self.getOptionGroupAttribute($(this)),\n groupIsMultiple = self.checkGroupIsMultiple(selectedGroupAttr);\n if (value[selectedGroupAttr] == null) {\n value[selectedGroupAttr] = groupIsMultiple ? [selectedOptionVal] : selectedOptionVal;\n } else if (groupIsMultiple) {\n value[selectedGroupAttr].push(selectedOptionVal);\n }\n }\n });\n } else {\n value = this.$el.selectpicker('val');\n if (this.options.isIntChoices) {\n let valueType = PJQ.helpers.objectHelpers.refinedType(value);\n if (valueType === 'array') {\n let newValue = [];\n _.each(value, function (valueItem) {\n let intValueItem = parseInt(valueItem);\n if (!isNaN(intValueItem))\n newValue.push(intValueItem);\n else\n newValue.push(valueItem);\n });\n value = newValue;\n } else if (valueType === 'string') {\n let intValue = parseInt(value);\n if (!isNaN(intValue))\n value = intValue;\n else\n value = null;\n }\n }\n }\n\n if (value != null && typeof value == 'object' && value.length === 0) {\n return null;\n }\n\n return value == null && this.options.isMultiple ? [] : value;\n },\n getOptionGroupAttribute: function (option) {\n let groupAttr = option.closest('optgroup').data('attr');\n return _.size(groupAttr) <= 0 ? 'noGroup' : groupAttr;\n },\n setValue: function (value, isKeepExisting, isAllowSelectDisabled) {\n this.lastValue = value;\n if (this.options.isGrouped) {\n if (typeof value === 'object') {\n let valArr = [];\n _.each(value, function (group) {\n if (typeof group == 'string') {\n valArr.push(group);\n } else if (typeof group == 'object') {\n _.each(group, function (groupValue) {\n valArr.push(groupValue);\n });\n }\n });\n this.$el.selectpicker('val', valArr);\n }\n } else {\n if (this.options.isMultiple) {\n let valArr = [],\n valueType = PJQ.helpers.objectHelpers.refinedType(value);\n if (valueType === 'string') {\n valArr.push(value);\n } else if (valueType === 'array') {\n valArr = value;\n }\n\n if (isKeepExisting) {\n valArr = _.union(valArr, this.getValue());\n }\n\n this.$el.selectpicker('val', valArr);\n } else {\n if (!this.$el.find('option[value=\"' + (value == null ? '' : value.toString()) + '\"]').prop('disabled') || isAllowSelectDisabled) {\n this.$el.selectpicker('val', value == null ? null : value.toString());\n } else {\n this.$el.selectpicker('val', null);\n }\n }\n }\n this.$el.selectpicker('render');\n\n if (this.options.isMirrorOptionColors && !this.options.isMultiple) {\n this.setInputColors();\n }\n },\n selectAll: function () {\n if (this.options.isMultiple)\n this.$el.selectpicker('selectAll');\n },\n deselectAll: function () {\n if (this.options.isMultiple)\n this.$el.selectpicker('deselectAll');\n else\n this.setValue('', false);\n },\n toggle: function () {\n this.$el.selectpicker('toggle');\n },\n isCollapsed: function () {\n return !this.$outer.hasClass('show');\n },\n hide: function () {\n this.$el.selectpicker('hide');\n },\n show: function () {\n this.$el.selectpicker('show');\n },\n enable: function () {\n this.options.isDisabled = false;\n this.$el.prop('disabled', false).removeClass('disabled');\n this.$el.closest('.bootstrap-select').find('.dropdown-toggle').removeClass('btn-light');\n this.refresh();\n },\n disable: function () {\n this.options.isDisabled = true;\n this.$el.prop('disabled', true);\n this.refresh();\n },\n updateChoices: function (choices) {\n this.options.choices = choices;\n this.$el.empty();\n\n let allIntChoices = true,\n fnMakeOption = (choice) => {\n let style = choice.style ?? '';\n if (this.options.pickerWidth != null) {\n style += ';overflow:hidden;width: ' + this.options.pickerWidth;\n }\n\n if (typeof choice === 'string') {\n allIntChoices = false;\n return $('<option>', {\n value: choice,\n text: choice,\n style: style\n });\n } else if (typeof choice === 'object') {\n allIntChoices = allIntChoices && typeof choice.id === 'number';\n\n let opts = {\n value: choice.id,\n 'data-content': choice.name,\n style: style,\n \"data-subtext\": choice.subtext,\n disabled: choice.disabled === true\n }\n if (_.size(choice.title) > 0) {\n opts.title = choice.title;\n }\n return $('<option>', opts).html(choice.name);\n }\n return '';\n }\n\n _.each(typeof choices === 'function' ? choices() : choices, function (choice) {\n if (choice == null) {\n this.$el.append($('<option>', {\n text: this.options.noneSelectedText,\n disabled: true\n }));\n } else if (choice.choices != null) {\n // this is an optgroup\n let optGroup = $('<optgroup data-attr=\"' + (choice.id ?? '') + '\" label=\"' + choice.name + '\"></optgroup>');\n _.each(choice.choices, function (optChoice) {\n optGroup.append(fnMakeOption(optChoice));\n }, this);\n this.$el.append(optGroup);\n } else {\n this.$el.append(fnMakeOption(choice));\n }\n }, this);\n this.refresh();\n\n if (!this.options.isIntChoices && allIntChoices) {\n this.options.isIntChoices = true;\n }\n },\n updateNoneSelectedText: function (newText) {\n this.options.noneSelectedText = newText;\n this.$el.closest('.bootstrap-select').find('.filter-option').html(this.options.noneSelectedText);\n },\n refresh: function () {\n this.$el.selectpicker('refresh');\n this.setValue(this.lastValue);\n },\n onChange: function (event, clickedIndex) {\n if (_.size(this.$el) > 1 && !this.options.isMultiple) {\n let changeEl = $(event.currentTarget);\n this.$el.selectpicker('val', changeEl.selectpicker('val'));\n this.$el.selectpicker('render');\n }\n\n this.lastValue = this.getValue();\n\n let optGroup = $(this.$el.find('option')[clickedIndex]).closest('optgroup'),\n choice = $(this.$el.find('option')[clickedIndex]).attr('value');\n if (this.options.isIntChoices) {\n choice = parseInt(choice);\n if (isNaN(choice)) {\n choice = null;\n }\n }\n\n if (this.options.isMultiple) {\n if (_.size(this.options.exclusiveChoices) > 0) {\n let exclusiveChoices = [];\n if (PJQ.helpers.objectHelpers.refinedType(this.options.exclusiveChoices) === 'array')\n exclusiveChoices = this.options.exclusiveChoices;\n else\n exclusiveChoices.push(this.options.exclusiveChoices);\n\n if (this.options.isGrouped) {\n if (_.indexOf(exclusiveChoices, choice) !== -1) {\n _.each(optGroup.find('option'), _.bind(function (option) {\n let optionValue = parseInt($(option).attr('value'));\n if (optionValue !== choice) {\n this.lastValue[optGroup.data('attr')] = _.filter(this.lastValue[optGroup.data('attr')], function (item) {\n return item !== optionValue;\n });\n }\n }, this));\n }\n } else {\n this.lastValue = (_.indexOf(exclusiveChoices, choice) !== -1) ? [choice] : _.filter(this.lastValue, function (item) {\n return _.indexOf(exclusiveChoices, item) === -1;\n });\n }\n\n this.setValue(this.lastValue);\n }\n\n // if a value must be selected, one cannot unselect the last selected value.\n if (this.options.mustSelectValue) {\n if (_.size(this.lastValue) === 0) {\n this.lastValue = [choice];\n this.setValue(this.lastValue);\n }\n }\n\n if (this.options.mustSelectValuePerOptGroup && optGroup.data('options') !== 'nullable') {\n let optGroupValueSelected = false;\n if (this.options.isGrouped) {\n if (_.size(this.lastValue[optGroup.data('attr')]) === 0) {\n this.lastValue[optGroup.data('attr')] = [choice];\n this.setValue(this.lastValue);\n }\n } else {\n _.each(optGroup.find('option'), _.bind(function (option) {\n if (this.lastValue.indexOf(parseInt($(option).attr('value'))) !== -1)\n optGroupValueSelected = true;\n }, this));\n\n if (!optGroupValueSelected) {\n this.lastValue.push(choice);\n this.setValue(this.lastValue);\n }\n }\n }\n }\n\n if (this.options.isMirrorOptionColors && !this.options.isMultiple) {\n this.setInputColors();\n }\n\n if (this.options.isGrouped && !this.options.allGroupsIsMultiple) {\n let group = optGroup.data('attr');\n if (_.size(group) > 0) {\n let isGroupMultiple = this.checkGroupIsMultiple(group);\n if (!isGroupMultiple) {\n this.lastValue[group] = choice;\n this.setValue(this.lastValue);\n }\n }\n }\n\n this.options.onChange(this.lastValue);\n },\n onHidden: function () {\n this.options.onHide();\n },\n onShow: function () {\n this.options.onShow();\n },\n setInputColors: function () {\n let selectedOption = this.$('option:selected').first(),\n color = 'inherit';\n if (_.size(selectedOption) > 0) {\n color = selectedOption.css('color');\n }\n this.$('.filter-option').css('color', color);\n },\n showError: function (errorText) {\n PJQ.helpers.inputHelpers.setInputError(this.$el, false, {\n errorText: errorText\n });\n },\n hideError: function () {\n PJQ.helpers.inputHelpers.setInputError(this.$el, true);\n }\n});\n\nPJQ.inputs.StatePicker = PJQ.inputs.Selectpicker.extend({\n beforeFirstRender: function () {\n this.options.hideDisabled = false;\n },\n afterRender: function () {\n this.renderStates(this.options.country);\n },\n setValue: function (value, isKeepExisting, isAllowSelectDisabled) {\n PJQ.inputs.Selectpicker.prototype.setValue.call(this, value, isKeepExisting, isAllowSelectDisabled);\n },\n renderStates: function (country) {\n this.$el.find('option').remove();\n\n let choices = [];\n if (country) {\n if (country.toLowerCase() === 'ca') {\n choices = _.map(PJQ.constants.states.ca, (st) => {\n return {\n id: st.abbreviation.toUpperCase(),\n name: st.name,\n }\n });\n } else if (country.toLowerCase() === 'us') {\n choices = _.map(PJQ.constants.states.us, (st) => {\n return {\n id: st.abbreviation.toUpperCase(),\n name: st.name,\n }\n });\n } else {\n let countryDef = _.find(PJQ.constants.internationalCountries, function (c) {\n return c.name === country;\n });\n if (countryDef) {\n choices = _.map(countryDef.states, (st) => {\n return {\n id: st,\n name: st,\n title: st\n };\n });\n }\n }\n }\n\n this.updateChoices(choices);\n }\n});\n\nPJQ.inputs.GroupPicker = PJQ.inputs.Selectpicker.extend({\n beforeFirstRender: function () {\n this.options.noneSelectedText = 'Select Group';\n this.options.isIntChoices = true;\n this.options.isLiveSearch = true;\n this.options.size = 20;size: 20\n return PJQ.inputs.Selectpicker.prototype.beforeFirstRender.call(this);\n },\n afterRender: function () {\n if (this.options.project != null) {\n this.options.project.fetchGroups((groups) => {\n let gGroups = _.groupBy(groups.models, (group) => {\n return group.get('groupDescription');\n });\n this.options.choices = _.map(gGroups, (gGroup, groupDescription) => {\n return {\n name: groupDescription,\n choices: _.map(gGroup, (group) => {\n return {\n id: group.id,\n name: group.get('groupName')\n }\n })\n }\n });\n this.updateChoices(this.options.choices);\n }, true)\n return false;\n } else {\n PJQ.app.session.fetchUserGroups(null, (groups) => {\n let gGroups = _.groupBy(groups.models, (group) => {\n return group.get('groupDescription');\n });\n this.options.choices = _.map(gGroups, (gGroup, groupDescription) => {\n return {\n name: groupDescription,\n choices: _.map(gGroup, (group) => {\n return {\n id: group.id,\n name: group.get('groupName')\n }\n })\n }\n });\n this.updateChoices(this.options.choices);\n });\n }\n }\n});\n\nPJQ.inputs.ProjectLocationPicker = PJQ.inputs.Selectpicker.extend({\n beforeFirstRender: function () {\n this.options.noneSelectedText = 'Select Location';\n this.options.isIntChoices = true;\n this.options.isLiveSearch = true;\n return PJQ.inputs.Selectpicker.prototype.beforeFirstRender.call(this);\n },\n afterRender: function () {\n if (this.options.project != null) {\n this.options.project.fetchLocations((locations) => {\n this.options.choices = locations.getPickerArray();\n this.updateChoices(this.options.choices);\n })\n return false;\n }\n }\n});\n\nPJQ.inputs.CountryPicker = PJQ.inputs.Selectpicker.extend({\n beforeFirstRender: function () {\n this.options.hideDisabled = false;\n },\n afterRender: function () {\n let firstOptGroup = {\n name: '',\n choices: []\n },\n secondOptGroup = {\n name: '',\n choices: []\n };\n if (this.options.enableInternational) {\n firstOptGroup.choices.push({\n id: \"US\",\n name: \"United States\",\n title: \"US\"\n });\n\n firstOptGroup.choices.push({\n id: \"CA\",\n name: \"Canada\",\n title: \"CA\"\n });\n\n _.each(PJQ.constants.internationalCountries, function (country) {\n secondOptGroup.choices.push({\n id: country.name,\n name: country.name,\n title: country.name\n });\n }, this);\n } else {\n _.each(PJQ.constants.countries, function (country) {\n firstOptGroup.choices.push({\n id: country.toUpperCase(),\n name: country.toUpperCase(),\n title: country.toUpperCase(),\n });\n }, this);\n }\n\n this.updateChoices(_.size(secondOptGroup) > 0 ? [firstOptGroup, secondOptGroup] : firstOptGroup.choices);\n\n this.refresh();\n\n if (this.options.statePicker || this.options.zipInput) {\n this.attachStateZipInputs(this.options.statePicker, this.options.zipInput);\n }\n },\n setValue: function (value, isKeepExisting, isAllowSelectDisabled) {\n PJQ.inputs.Selectpicker.prototype.setValue.call(this, value, isKeepExisting, isAllowSelectDisabled);\n if (this.options.statePicker) {\n this.options.statePicker.renderStates(value);\n }\n },\n attachStateZipInputs: function (statePicker, zipInput) {\n let optionOnChange = this.options.onChange;\n this.options.onChange = function (country) {\n if (statePicker instanceof PJQ.inputs.StatePicker) {\n statePicker.renderStates(country);\n }\n if (zipInput.is('input')) {\n zipInput.val('');\n PJQ.helpers.inputHelpers.inputMaskZip(zipInput, country);\n }\n if (typeof optionOnChange === 'function')\n optionOnChange(country);\n };\n\n if (zipInput.is('input')) {\n PJQ.helpers.inputHelpers.inputMaskZip(zipInput, this.getValue());\n }\n }\n});\n\nPJQ.inputs.HTMLEditor = PJQ.views.BaseView.extend({\n defaults: {\n onChange: _.noop,\n defaultValue: null,\n isDisabled: false,\n isHideTokens: false,\n onInit: _.noop,\n editorHeight: 200\n },\n events: {},\n beforeRender: function () {\n },\n afterRender: function () {\n let tokenButton = _.bind(function (context) {\n let ui = $.summernote.ui;\n\n // create button\n let button = ui.button({\n contents: 'Tokens',\n tooltip: 'View the available Message Tokens',\n click: _.bind(function () {\n context.invoke('editor.saveRange');\n new PJQ.inputs.HTMLEditor.HTMLEditorTokensModal({\n editor: this.$el.summernote,\n context: context\n });\n }, this)\n });\n\n return button.render(); // return button as jquery object\n }, this);\n\n let summerNoteOptions = {\n tabsize: 2,\n height: this.options.editorHeight,\n shortcuts: false,\n callbacks: {\n onChange: _.bind(function (contents, $editable) {\n if (typeof this.options.onChange === 'function') {\n //this checks if the actual content of the text is blank without spaces\n try {\n let $c = $(contents);\n if (_.size($c) > 0 && _.size($c.text().replace(/\\s/gm, \"\")) === 0) {\n contents = \"\";\n }\n } catch (err) {\n }\n this.options.onChange(contents);\n }\n }, this)\n },\n toolbar: [\n ['style', ['style']],\n ['font-style', ['bold', 'italic', 'underline', 'clear']],\n ['font', ['fontname']],\n ['font-size', ['fontsize']],\n ['font-color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['table', ['table']],\n ['insert', ['hr']],\n ['misc', ['codeview']],\n ['custom', ['token']]\n ],\n oninit: this.options.onInit\n };\n\n if (!this.options.isHideTokens) {\n summerNoteOptions.buttons = {\n token: tokenButton\n };\n }\n\n this.$el.summernote(summerNoteOptions);\n\n if (this.options.defaultValue)\n this.setValue(this.options.defaultValue);\n },\n getValue: function () {\n return this.$el.summernote('code');\n },\n setValue: function (value) {\n this.$el.summernote('code', value);\n },\n pasteValue: function (value) {\n this.$el.summernote('pasteHTML', value);\n },\n enable: function () {\n this.$el.summernote('enable');\n },\n disable: function () {\n this.$el.summernote('disable');\n }\n});\n\nPJQ.inputs.HTMLEditor.HTMLEditorTokensModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Project-Tokens'),\n minWidth: '60%',\n context: null\n },\n events: {\n 'click .tokens-close': 'onClose',\n 'click table.tokens tr td label': 'insertToken'\n },\n insertToken: function (e) {\n //this.options.editor.pasteValue( $(e.currentTarget).text());\n this.removeModal();\n this.options.context.invoke('editor.restoreRange');\n this.options.context.invoke('editor.focus');\n this.options.context.invoke('editor.insertText', $(e.currentTarget).text());\n },\n onClose: function () {\n this.removeModal();\n }\n});\n\nPJQ.inputs.ButtonGroup = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Input-Button-Group'),\n colorInactiveButtons: false,\n buttons: [],\n defaultValue: null,\n onChange: _.noop,\n buttonClasses: null,\n fitHeight: false,\n fitWidth: false,\n separateButtons: false,\n canEdit: true\n },\n events: {\n 'click .input-btn-group button': 'onChange'\n },\n beforeFirstRender: function () {\n this.value = typeof this.options.defaultValue != 'undefined' ? this.options.defaultValue : null;\n },\n beforeRender: function () {\n this.renderData = {\n options: this.options\n };\n },\n afterRender: function () {\n this.renderButton();\n },\n renderButton: function () {\n let self = this;\n this.$('.input-btn-group button').each(function () {\n if ($(this).data('value') === self.value || ($(this).data('value') === \"null\" && self.value == null)) {\n if (self.options.colorInactiveButtons) {\n $(this).removeClass($(this).data('inactiveClass')).addClass($(this).data('activeClass')).addClass('active');\n } else {\n $(this).removeClass('inactive').addClass('font-weight-normal').addClass('active');\n }\n } else {\n if (self.options.colorInactiveButtons) {\n $(this).addClass($(this).data('inactiveClass')).removeClass($(this).data('activeClass')).removeClass('active');\n } else {\n $(this).addClass('inactive').removeClass('font-weight-normal').addClass('active');\n }\n }\n });\n },\n onChange: function (e) {\n this.value = $(e.currentTarget).data('value');\n this.renderButton();\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.value);\n }\n },\n getValue: function () {\n return this.value;\n },\n setValue: function (value, triggerChange) {\n this.value = value;\n this.renderButton();\n if (triggerChange && typeof this.options.onChange === 'function') {\n this.options.onChange(this.value);\n }\n }\n});\n\nPJQ.inputs.StarRating = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Star-Rating'),\n isReadOnly: false\n },\n events: {\n 'click .btn-rate': 'ratingChanged'\n },\n beforeFirstRender: function () {\n this.rating = this.options.rating;\n if (this.rating == null) {\n this.rating = 0;\n }\n },\n renderData: function () {\n return {\n rating: this.rating,\n isReadOnly: this.options.isReadOnly\n };\n },\n ratingChanged: function (e) {\n this.setRating(parseInt(this.$(e.currentTarget).data('stars')));\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.rating);\n }\n },\n setRating: function (rating) {\n if (rating == null) {\n this.rating = 0;\n } else {\n this.rating = rating;\n }\n this.render();\n }\n});\n\nPJQ.inputs.DayPicker = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'day-picker'),\n isReadOnly: false\n },\n events: {\n 'click .btn-work-day': 'dayClicked'\n },\n beforeFirstRender: function () {\n this.days = this.options.defaultValue;\n if (this.days == null) {\n this.days = 0;\n }\n },\n renderData: function () {\n return {\n days: this.days\n };\n },\n reportDayClicked: function (e) {\n this.notificationPerDayRefresh();\n },\n dayClicked: function (e) {\n let dayBtn = $(e.currentTarget);\n if (dayBtn.hasClass('selected')) {\n dayBtn.removeClass('selected');\n } else {\n dayBtn.addClass('selected');\n }\n\n let val = 0;\n this.$('.btn-work-day.selected').each(function () {\n val += parseInt($(this).data('value'));\n });\n this.days = val;\n\n this.render();\n\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.days);\n }\n },\n getValue: function(){\n return this.days;\n }\n});\n","var dateFormat = function () {\n\tvar token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|[LloSZ]|\"[^\"]*\"|'[^']*'/g,\n\t\ttimezone = /\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,\n\t\ttimezoneClip = /[^-+\\dA-Z]/g,\n\t\tpad = function (val, len) {\n\t\t\tval = String(val);\n\t\t\tlen = len || 2;\n\t\t\twhile (val.length < len) val = \"0\" + val;\n\t\t\treturn val;\n\t\t};\n\n\t// Regexes and supporting functions are cached through closure\n\treturn function (date, mask, utc) {\n\t\tvar dF = dateFormat;\n\n\t\t// You can't provide utc if you skip other args (use the \"UTC:\" mask prefix)\n\t\tif (arguments.length == 1 && Object.prototype.toString.call(date) == \"[object String]\" && !/\\d/.test(date)) {\n\t\t\tmask = date;\n\t\t\tdate = undefined;\n\t\t}\n\n\t\t// Passing date through Date applies Date.parse, if necessary\n\t\tdate = date ? new Date(date) : new Date;\n\t\tif (isNaN(date)) throw SyntaxError(\"invalid date\");\n\n\t\tmask = String(dF.masks[mask] || mask || dF.masks[\"default\"]);\n\n\t\t// Allow setting the utc argument via the mask\n\t\tif (mask.slice(0, 4) == \"UTC:\") {\n\t\t\tmask = mask.slice(4);\n\t\t\tutc = true;\n\t\t}\n\n\t\tvar _ = utc ? \"getUTC\" : \"get\",\n\t\t\td = date[_ + \"Date\"](),\n\t\t\tD = date[_ + \"Day\"](),\n\t\t\tm = date[_ + \"Month\"](),\n\t\t\ty = date[_ + \"FullYear\"](),\n\t\t\tH = date[_ + \"Hours\"](),\n\t\t\tM = date[_ + \"Minutes\"](),\n\t\t\ts = date[_ + \"Seconds\"](),\n\t\t\tL = date[_ + \"Milliseconds\"](),\n\t\t\to = utc ? 0 : date.getTimezoneOffset(),\n\t\t\tflags = {\n\t\t\t\td: d,\n\t\t\t\tdd: pad(d),\n\t\t\t\tddd: dF.i18n.dayNames[D],\n\t\t\t\tdddd: dF.i18n.dayNames[D + 7],\n\t\t\t\tm: m + 1,\n\t\t\t\tmm: pad(m + 1),\n\t\t\t\tmmm: dF.i18n.monthNames[m],\n\t\t\t\tmmmm: dF.i18n.monthNames[m + 12],\n\t\t\t\tyy: String(y).slice(2),\n\t\t\t\tyyyy: y,\n\t\t\t\th: H % 12 || 12,\n\t\t\t\thh: pad(H % 12 || 12),\n\t\t\t\tH: H,\n\t\t\t\tHH: pad(H),\n\t\t\t\tM: M,\n\t\t\t\tMM: pad(M),\n\t\t\t\ts: s,\n\t\t\t\tss: pad(s),\n\t\t\t\tl: pad(L, 3),\n\t\t\t\tL: pad(L > 99 ? Math.round(L / 10) : L),\n\t\t\t\tt: H < 12 ? \"a\" : \"p\",\n\t\t\t\ttt: H < 12 ? \"am\" : \"pm\",\n\t\t\t\tT: H < 12 ? \"A\" : \"P\",\n\t\t\t\tTT: H < 12 ? \"AM\" : \"PM\",\n\t\t\t\tZ: utc ? \"UTC\" : (String(date).match(timezone) || [\"\"]).pop().replace(timezoneClip, \"\"),\n\t\t\t\to: (o > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),\n\t\t\t\tS: [\"th\", \"st\", \"nd\", \"rd\"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]\n\t\t\t};\n\n\t\treturn mask.replace(token, function ($0) {\n\t\t\treturn $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);\n\t\t});\n\t};\n}();\n\n// Some common format strings\ndateFormat.masks = {\n\t\"default\": \"ddd mmm dd yyyy HH:MM:ss\",\n\tshortDate: \"m/d/yy\",\n\tmediumDate: \"mmm d, yyyy\",\n\tlongDate: \"mmmm d, yyyy\",\n\tfullDate: \"dddd, mmmm d, yyyy\",\n\tshortTime: \"h:MM TT\",\n\tmediumTime: \"h:MM:ss TT\",\n\tlongTime: \"h:MM:ss TT Z\",\n\tisoDate: \"yyyy-mm-dd\",\n\tisoTime: \"HH:MM:ss\",\n\tisoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n\tisoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n};\n\n// Internationalization strings\ndateFormat.i18n = {\n\tdayNames: [\n\t\t\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\",\n\t\t\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"\n\t],\n\tmonthNames: [\n\t\t\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\",\n\t\t\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n\t]\n};\n\n// For convenience...\nDate.prototype.format = function (mask, utc) {\n\treturn dateFormat(this, mask, utc);\n};\n\nfunction ValidateEmail2(email) {\n\temail = email.replace(/[ ]/g, '');\n\n\tvar re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n\t\tisValid = true;\n\tif (email.indexOf(';') != -1) {\n\t\tvar emailList = email.split(';');\n\t\tfor (var i = 0; i < emailList.length; i++) {\n\t\t\tif (!re.test(emailList[i])) {\n\t\t\t\tisValid = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tisValid = re.test(email);\n\t}\n\treturn isValid;\n}\n\nfunction ValidateEmail3(email) {\n\temail = email.replace(/[ ]/g, '');\n\n\tvar re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n\t\tisValid = true;\n\tif (email.indexOf(';') != -1) {\n\t\tvar emailList = email.split(';');\n\t\tfor (var i = 0; i < emailList.length; i++) {\n\t\t\tif (!re.test(emailList[i])) {\n\t\t\t\tisValid = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tisValid = re.test(email);\n\t}\n\treturn isValid;\n}","PJQ.maps = {};\n\nPJQ.maps.GoogleMap = class {\n\tconstructor($el, options = {}) {\n\t\tthis.options = _.defaults(options, {\n\t\t\tmapId: 'map_' + _.uniqueId(),\n\t\t\tzoom: 4,\n\t\t\tcenter: new google.maps.LatLng(38.6159, -100.7456),\n\t\t\tmapTypeId: google.maps.MapTypeId.ROADMAP\n\t\t});\n\t\tthis.$el = $el;\n\t\tthis.$el.attr('id', this.options.mapId);\n\t\tthis.initMap();\n\t}\n\n\tinitMap() {\n\t\tthis.mapObjects = {};\n\t\tthis.map = new google.maps.Map(this.$el[0], {\n\t\t\tzoom: this.options.zoom,\n\t\t\tcenter: this.options.center,\n\t\t\tmapTypeId: this.options.mapTypeId,\n\t\t\tgestureHandling: 'cooperative'\n\t\t});\n\t}\n\n\taddMarker(latitude, longitude, options = {}) {\n\t\tlet id = _.uniqueId(),\n\t\t\tmarker = new google.maps.Marker({\n\t\t\t\tposition: new google.maps.LatLng(latitude, longitude),\n\t\t\t\tmap: this.map,\n\t\t\t\ttitle: options.title,\n\t\t\t\tanimation: google.maps.Animation.DROP\n\t\t\t});\n\t\tthis.mapObjects[id] = marker;\n\t\tif (_.size(options.infoWindowContent) > 0) {\n\t\t\tlet infoWindow = new google.maps.InfoWindow({\n\t\t\t\tcontent: options.infoWindowContent\n\t\t\t});\n\t\t\tmarker.addListener('click', function () {\n\t\t\t\tinfoWindow.open(this.map, marker);\n\t\t\t});\n\t\t}\n\t}\n\n\taddKMLStatesLayer(states) {\n\t\tlet id = _.uniqueId(),\n\t\t\tsrc = PJQ.helpers.urlHelpers.buildAPIURL('/workareas/kml?states=' + states.join(','), false, false, true);\n\t\tthis.mapObjects[id] = new google.maps.KmlLayer(src, {\n\t\t\tsuppressInfoWindows: true,\n\t\t\tpreserveViewport: true,\n\t\t\tmap: this.map\n\t\t});\n\t\treturn id;\n\t}\n\n\taddKMLCountiesLayer(countyIds) {\n\t\tlet id = _.uniqueId(),\n\t\t\tcountyEncode = PJQ.compression.encode.runLength(PJQ.compression.encode.delta(countyIds)),\n\t\t\tsrc = PJQ.helpers.urlHelpers.buildAPIURL('/workareas/kml?countyIds=' + countyEncode.join(','), false, false, true);\n\t\tthis.mapObjects[id] = new google.maps.KmlLayer(src, {\n\t\t\tsuppressInfoWindows: true,\n\t\t\tpreserveViewport: true,\n\t\t\tmap: this.map\n\t\t});\n\t\treturn id;\n\t}\n\n\tremoveMapObject(id) {\n\t\tlet object = this.mapObjects[id];\n\t\tif (object != null) {\n\t\t\tobject.setMap(null);\n\t\t}\n\t}\n\n\tresize() {\n\t\tgoogle.maps.event.trigger(this.map, 'resize');\n\t}\n\n\tsetCenter(center) {\n\t\tthis.map.setCenter(center);\n\t}\n\n\tsetZoom(zoom) {\n\t\tthis.map.setZoom(zoom);\n\t}\n};\n\nPJQ.views.SuperMap = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Super-Map'),\n\t\tmapZoom: 4,\n\t\tisDetail: false,\n\t\tisActive: true\n\t},\n\tevents: {\n\t\t'click .btn-edit-super': 'editSuper',\n\t\t'click .btn-go-to-super': 'goToSuper',\n\t\t'click .user-edit-text-map': 'infoWindowEditSuper',\n\t\t'keyup .datatable-search': 'search',\n\t\t'click .clear-filters': 'clearFilters'\n\t},\n\tbeforeFirstRender() {\n\t\tif (this.collection == null) {\n\t\t\tthis.collection = new PJQ.collections.users.Users(null, {\n\t\t\t\tisDetail: this.options.isDetail\n\t\t\t});\n\t\t}\n\n\t\tthis.customFields = null;\n\t\tif (!this.options.isFetched) {\n\t\t\tthis.collection.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tPJQ.app.session.fetchUserCustomFields(PJQ.app.session.user.get('masterUserId'), _.bind(function(customFields) {\n\t\t\t\t\t\tthis.customFields = customFields;\n\t\t\t\t\t\tthis.options.isFetched = true;\n\t\t\t\t\t\tthis.render();\n\n\t\t\t\t\t\tif (typeof this.options.onFetch === 'function') {\n\t\t\t\t\t\t\tthis.options.onFetch();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tisDetail: this.options.isDetail,\n\t\t\toptions: this.options,\n\t\t\tcollection: this.collection\n\t\t};\n\t\tthis.filtered = [];\n\t\t_.each(this.collection.models, function (model) {\n\t\t\tif (model.attributes.userTypeId === 396 || model.attributes.userTypeId === 3738) {\n\t\t\t\tif (!this.options.isActive || model.attributes.isActive)\n\t\t\t\t\tthis.filtered.push(model)\n\t\t\t}\n\t\t}, this);\n\t},\n\tafterRender: function () {\n\t\tlet columns = [];\n\n\t\tif (this.options.isDetail) {\n\t\t\tthis.statusSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('select.status-filter'),\n\t\t\t\tdefaultValue: [10,12,16,15,13,14,11,17,18],\n\t\t\t\tisMultiple: true,\n\t\t\t\tisIntChoices: true,\n\t\t\t\tonChange: _.bind(function () {\n\t\t\t\t\tthis.statusFilterChanged();\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tcolumns = [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.contactName\",\n\t\t\t\t\t\"title\": \"Name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.phone\",\n\t\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn PJQ.helpers.formatHelpers.formatPhoneNumber(data);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.cell\",\n\t\t\t\t\t\"title\": \"Cell\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn PJQ.helpers.formatHelpers.formatPhoneNumber(data);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.email\",\n\t\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn '<a href=\"mailto:' + data + '\">' + data + '</a>';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes\",\n\t\t\t\t\t\"title\": \"Address\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\tlet addr = row.get('address1');\n\t\t\t\t\t\tif (_.size(row.get('address2')) > 0) {\n\t\t\t\t\t\t\taddr += (' ' + row.get('address2'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn addr;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.city\",\n\t\t\t\t\t\"title\": \"City\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.state\",\n\t\t\t\t\t\"title\": \"State\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.zip\",\n\t\t\t\t\t\"title\": \"Zip\",\n\t\t\t\t\t\"render\": _.bind(function (data) {\n\t\t\t\t\t\tif (data.length < 5) {\n\t\t\t\t\t\t\treturn \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn data\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue1\",\n\t\t\t\t\t\"title\": \"Last Safety\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet value = this.getUserCustomFieldValue(row, 1);\n\t\t\t\t\t\treturn value ? PJQ.helpers.dateHelpers.getDateString(new Date(value), PJQ.helpers.dateHelpers.dateFormats.DATE, true) : '';\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue2\",\n\t\t\t\t\t\"title\": \"Last Proc.\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet value = this.getUserCustomFieldValue(row, 2);\n\t\t\t\t\t\treturn value ? PJQ.helpers.dateHelpers.getDateString(new Date(value), PJQ.helpers.dateHelpers.dateFormats.DATE, true) : '';\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue6\",\n\t\t\t\t\t\"title\": \"OSHA\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet value = this.getUserCustomFieldValue(row, 6);\n\t\t\t\t\t\treturn this.getUserCustomFieldChoice(value, 6);\n\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue12\",\n\t\t\t\t\t\"title\": \"Status\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet value = this.getUserCustomFieldValue(row, 12);\n\t\t\t\t\t\treturn this.getUserCustomFieldChoice(value, 12);\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue16\",\n\t\t\t\t\t\"title\": \"Pref. PM\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\treturn this.getUserCustomFieldValue(row, 16);\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.fieldValue17\",\n\t\t\t\t\t\"title\": \"Insurance\",\n\t\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\t\tlet value = this.getUserCustomFieldValue(row, 17);\n\t\t\t\t\t\treturn this.getUserCustomFieldChoice(value, 17);\n\t\t\t\t\t}, this)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.zip\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"width\": \"80px\",\n\t\t\t\t\t\"render\": _.bind(function (data) {\n\t\t\t\t\t\tlet editButtonHtml = PJQ.app.session.hasPermission('settings.canManageUsers') ? '<button type=\"button\" class=\"btn btn-info btn-edit-super ht-30p wd-35p mr-1\"><span class=\"fas fa-pencil\"></span></button>' : '';\n\t\t\t\t\t\tif (data.length === 5) {\n\t\t\t\t\t\t\treturn '<div class=\"text-align-right show-on-row-hover\">'+editButtonHtml+'<button type=\"button\" class=\"btn btn-orange btn-go-to-super ht-30p wd-35p\"><span class=\"fas fa-map-marked-alt\"></span></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn _.size(editButtonHtml)>0 ? '<div class=\"text-align-right show-on-row-hover\">'+editButtonHtml+'</div>' : '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t];\n\t\t} else {\n\t\t\tcolumns = [\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.contactName\",\n\t\t\t\t\t\"title\": \"Name\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.phone\",\n\t\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn PJQ.helpers.formatHelpers.formatPhoneNumber(data);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.email\",\n\t\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\treturn '<a href=\"mailto:' + data + '\">' + data + '</a>';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes\",\n\t\t\t\t\t\"title\": \"Address\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\tlet addr = row.get('address1');\n\t\t\t\t\t\tif (_.size(row.get('address2')) > 0) {\n\t\t\t\t\t\t\taddr += (' ' + row.get('address2'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn addr;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.city\",\n\t\t\t\t\t\"title\": \"City\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.zip\",\n\t\t\t\t\t\"title\": \"Zip\",\n\t\t\t\t\t\"render\": _.bind(function (data) {\n\t\t\t\t\t\tif (data.length < 5) {\n\t\t\t\t\t\t\treturn \"\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn data\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.state\",\n\t\t\t\t\t\"title\": \"State\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.zip\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"width\": \"80px\",\n\t\t\t\t\t\"render\": _.bind(function (data) {\n\t\t\t\t\t\tlet editButtonHtml = PJQ.app.session.hasPermission('settings.canManageUsers') ? '<button type=\"button\" class=\"btn btn-info btn-edit-super ht-30p wd-35p mr-1\"><span class=\"fas fa-pencil\"></span></button>' : '';\n\t\t\t\t\t\tif (data.length === 5) {\n\t\t\t\t\t\t\treturn '<div class=\"text-align-right show-on-row-hover\">'+editButtonHtml+'<button type=\"button\" class=\"btn btn-orange btn-go-to-super ht-30p wd-35p\"><span class=\"fas fa-map-marked-alt\"></span></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn _.size(editButtonHtml)>0 ? '<div class=\"text-align-right show-on-row-hover\">'+editButtonHtml+'</div>' : '';\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\n\t\tthis.superMapDataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.super-map-data-table'),\n\t\t\tdata: this.filtered,\n\t\t\tlanguage: {\n\t\t\t\temptyTable: \"No Superintendents exist\",\n\t\t\t\tzeroRecords: \"No Superintendents match this criteria\"\n\n\t\t\t},\n\t\t\tpaging: false,\n\t\t\tinfo: false,\n\t\t\trowId: \"cid\",\n\t\t\tdeferRender: true,\n\t\t\tcolumns: columns,\n\t\t\tisHideSearch: true,\n\t\t\tdom: \"t\"\n\t\t});\n\t\tif (this.collection.isFetched) {\n\t\t\tthis.renderMap();\n\t\t\tthis.renderCounts(this.filtered);\n\t\t}\n\t},\n\tclearFilters: function() {\n\t\tthis.$('.datatable-search').val('');\n\t\tif (this.options.isDetail) {\n\t\t\tthis.statusSelectPicker.setValue([10, 12, 16, 15, 13, 14, 11, 17, 18]);\n\t\t\tthis.statusFilterChanged();\n\t\t}\n\t\telse {\n\t\t\tthis.search();\n\t\t}\n\t},\n\tstatusFilterChanged: function() {\n\t\tlet values = this.statusSelectPicker.getValue();\n\t\tthis.filtered = [];\n\t\t_.each(this.collection.models, function (model) {\n\t\t\tif (model.attributes.userTypeId === 396 || model.attributes.userTypeId === 3738) {\n\t\t\t\tif ((!this.options.isActive || model.attributes.isActive) && (values.indexOf(parseInt(this.getUserCustomFieldValue(model, 12))) !== -1 || (values.length === 9 && _.size(this.getUserCustomFieldValue(model, 12))===0)))\n\t\t\t\t\tthis.filtered.push(model)\n\t\t\t}\n\t\t}, this);\n\n\t\tthis.superMapDataTable.dataTable.clear();\n\t\tthis.superMapDataTable.dataTable.rows.add(this.filtered);\n\n\t\tthis.search();\n\t},\n\tsearch: function() {\n\t\tthis.superMapDataTable.dataTable.search(this.$('.datatable-search').val()).draw();\n\t},\n\tgetUserCustomFieldValue: function (row, id) {\n\t\tlet match = _.find(row.get('userCustomFieldValues'), function (cf) {\n\t\t\treturn (cf.fieldNumber === id);\n\t\t});\n\t\treturn match ? match.value : null;\n\t},\n\tgetUserCustomFieldChoice: function (value, id) {\n\t\tlet match = _.find(this.customFields.models, function (cf) {\n\t\t\treturn (cf.get('fieldNumber') === id);\n\t\t});\n\t\tlet result = '';\n\t\tif (match) {\n\t\t\t_.each(match.choices.models, function(choice) {\n\t\t\t\tif (choice.id === value)\n\t\t\t\t\tresult = choice.get('choiceName');\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t},\n\trenderCounts: function(models) {\n\t\tlet retired = 0,\n\t\t\tactive = 0,\n\t\t\tactiveNew = 0,\n\t\t\tretiredToOffice = 0,\n\t\t\tactiveSub = 0,\n\t\t\tneverUse = 0,\n\t\t\tretiredSub = 0,\n\t\t\tinactiveSub = 0,\n\t\t\tinactiveSuper = 0;\n\n\t\t_.each(models, function(model) {\n\t\t\t_.each(model.get('userCustomFieldValues'), function(customFieldValue) {\n\t\t\t\tif (customFieldValue.fieldNumber === 12) { // status\n\t\t\t\t\tswitch(customFieldValue.value) {\n\t\t\t\t\t\tcase 10:\n\t\t\t\t\t\t\tretired++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\tactive++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 16:\n\t\t\t\t\t\t\tactiveNew++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 15:\n\t\t\t\t\t\t\tretiredToOffice++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 13:\n\t\t\t\t\t\t\tactiveSub++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 14:\n\t\t\t\t\t\t\tneverUse++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 11:\n\t\t\t\t\t\t\tretiredSub++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 17:\n\t\t\t\t\t\t\tinactiveSub++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 18:\n\t\t\t\t\t\t\tinactiveSuper++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tthis.$('.total-retired').text(retired);\n\t\tthis.$('.total-active').text(active);\n\t\tthis.$('.total-active-new').text(activeNew);\n\t\tthis.$('.total-retired-office').text(retiredToOffice);\n\t\tthis.$('.total-active-sub').text(activeSub);\n\t\tthis.$('.total-never-use').text(neverUse);\n\t\tthis.$('.total-retired-sub').text(retiredSub);\n\t\tthis.$('.total-inactive-sub').text(inactiveSub);\n\t\tthis.$('.total-inactive-super').text(inactiveSuper);\n\t},\n\trenderMap: function () {\n\t\tthis.map = new PJQ.maps.GoogleMap(this.$('.super-map'), {\n\t\t\tzoom: this.options.mapZoom\n\t\t});\n\t\tthis.renderMarkers(this.filtered);\n\t\tthis.watchSearch();\n\t},\n\tmakeInfoWindow: function (user) {\n\t\treturn \"<div class=\\\"fs-18 user-edit-text-map text-primary font-weight-light mb-n3 mt-n1\\\" id='\" + user.get('userId') + \"'>\" + user.get('contactName') + \"</div><p><br />\" +\n\t\t\t\"<b>Phone:</b> \" + PJQ.helpers.formatHelpers.formatPhoneNumber(user.get('phone')) + \"<br />\" +\n\t\t\t\"<b>Email:</b> \" + user.get('email') + \"<br />\" +\n\t\t\t\"<b>Address:</b> \" + user.get('address1') + \"<br/>\" +\n\t\t\t\"<b>City:</b> \" + user.get('city') + \"<br />\" +\n\t\t\t\"<b>State:</b> \" + user.get('state') + \"<br />\" +\n\t\t\t\"<b>Zip:</b> \" + user.get('zip') + \"</p>\";\n\t},\n\trenderMarkers: function (source) {\n\t\t_.each(source, function (user) {\n\t\t\tlet latitude = user.get('latitude'),\n\t\t\t\tlongitude = user.get('longitude');\n\t\t\tif (latitude !== 0 && longitude !== 0) {\n\t\t\t\tthis.map.addMarker(latitude, longitude, {\n\t\t\t\t\tinfoWindowContent: this.makeInfoWindow(user),\n\t\t\t\t\ttitle: user.get('contactName')\n\t\t\t\t});\n\t\t\t}\n\t\t}, this);\n\t},\n\tremoveMarkers() {\n\t\t_.each(this.map.mapObjects, function (marker) {\n\t\t\tmarker.setMap(null)\n\t\t});\n\t},\n\tinfoWindowEditSuper: function (e) {\n\t\tif (!PJQ.app.session.hasPermission('settings.canManageUsers'))\n\t\t\treturn;\n\t\t\n\t\tlet target = $(e.currentTarget);\n\t\tlet id = parseInt(target.context.id);\n\t\t_.each(this.filtered, function (user) {\n\t\t\tif (user.get('userId') === id) {\n\t\t\t\tnew PJQ.views.contacts.BaseEditContactModal({\n\t\t\t\t\tmodel: user,\n\t\t\t\t\tonSave: _.bind(function () {\n\t\t\t\t\t\tthis.superMapDataTable.refresh();\n\t\t\t\t\t\tthis.removeMarkers();\n\t\t\t\t\t\tthis.renderMarkers(this.filtered)\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t}, this);\n\t},\n\teditSuper: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.superMapDataTable.getRow(target.closest('tr')),\n\t\t\tuser = row.data();\n\t\tnew PJQ.views.contacts.BaseEditContactModal({\n\t\t\tmodel: user,\n\t\t\tonSave: _.bind(function () {\n\t\t\t\tthis.superMapDataTable.refresh();\n\t\t\t\tthis.removeMarkers();\n\t\t\t\tthis.renderMarkers(this.filtered)\n\t\t\t}, this)\n\t\t});\n\t},\n\tgoToSuper: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.superMapDataTable.getRow(target.closest('tr')),\n\t\t\tuser = row.data();\n\t\tthis.map.setCenter({lat: user.get('latitude'), lng: user.get('longitude')});\n\t\tthis.map.setZoom(8);\n\t\t_.each(this.map.mapObjects, function (marker) {\n\t\t\tif (user.get('longitude') === 0 || user.get('latitude') === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (marker.getPosition().lng().toFixed(5) === user.get('longitude').toFixed(5) && marker.getPosition().lat().toFixed(5) === user.get('latitude').toFixed(5)) {\n\t\t\t\tif (this.infoWindow) {\n\t\t\t\t\tthis.infoWindow.close();\n\t\t\t\t}\n\t\t\t\tthis.infoWindow = new google.maps.InfoWindow({\n\t\t\t\t\tcontent: this.makeInfoWindow(user)\n\t\t\t\t});\n\t\t\t\tthis.infoWindow.open(this.map, marker)\n\t\t\t}\n\t\t}, this)\n\t},\n\twatchSearch: function () {\n\t\tthis.superMapDataTable.dataTable.on('search.dt', _.bind(function () {\n\t\t\tthis.filterArray = [];\n\n\t\t\tlet self = this;\n\t\t\tthis.superMapDataTable.dataTable.rows({filter: 'applied'}).every(function () {\n\t\t\t\tself.filterArray.push(this.data());\n\t\t\t});\n\n\t\t\tthis.removeMarkers();\n\t\t\tthis.renderMarkers(this.filterArray);\n\t\t\tthis.renderCounts(this.filterArray);\n\t\t}, this))\n\t},\n});\n\nPJQ.app.addRoutes([\n\t{\n\t\troute: 'supermap',\n\t\tname: 'supermap',\n\t\tcallback: function () {\n\t\t\tnew PJQ.views.SuperMap({\n\t\t\t\tel: $('#pjq-main')\n\t\t\t});\n\t\t}\n\t},\n\t{\n\t\troute: 'supermapall',\n\t\tname: 'supermapall',\n\t\tcallback: function () {\n\t\t\tnew PJQ.views.SuperMap({\n\t\t\t\tel: $('#pjq-main'),\n\t\t\t\tisDetail: true,\n\t\t\t\tisActive: false\n\t\t\t});\n\t\t}\n\t}\n]);\n\n","PJQ.menus = {\n\tactiveMenus: [],\n\tcloseActiveMenus: function () {\n\t\t_.each(PJQ.menus.activeMenus, function (contextMenu) {\n\t\t\tcontextMenu.close();\n\t\t});\n\t}\n};\n\nPJQ.menus.ContextMenu = PJQ.views.BaseView.extend({\n\tdefaults: {\n\n\t\t/* user-defined function to obtain specific data about the currently\n\t\t * opened element, to pass it to the rest of user-defined functions\n\t\t * of an action. */\n\t\tfetchElementData: _.noop,\n\n\t\t/* what the source of the context menu should be when opened.\n\t\t * Valid values are 'mouse' and 'element'. */\n\t\tmenuSource: 'mouse',\n\n\t\t/* how to calculate the position of the context menu based on its source.\n\t\t * Valid values are 'aboveLeft', 'aboveRight', 'belowLeft', and 'belowRight'. */\n\t\tmenuPosition: 'belowLeft',\n\n\t\t/* the event to listen to open the menu.\n\t\t * Valid values are 'click', 'right-click', 'hover' */\n\t\tmenuEvent: 'right-click',\n\n\t\t/* group actions to render them next to each other, with a separator\n\t\t * between each group. */\n\t\tactionsGroups: [],\n\n\t\t/* message to show when there are no actions to show in a menu\n\t\t * (isShown() returned false on all actions) */\n\t\tnoActionsMessage: 'No available actions',\n\n\t\t/* Hide the menu entirely if there are no available actions instead of displaying the message. */\n\t\tisHideNoActions: false,\n\n\t\t/* In some weird cases, another plugin may be installing 'click' listeners\n\t\t * in the anchors used for each action of the context menu, and stopping\n\t\t * the event bubbling before it reaches this plugin's listener.\n\t\t *\n\t\t * For those cases, _actionSelectEvent can be used to change the event we\n\t\t * listen to, for example to 'mousedown'.\n\t\t *\n\t\t * Unless the context menu is not working due to this and a workaround is\n\t\t * needed, this option can be safely ignored.\n\t\t */\n\t\t_actionSelectEvent: 'click',\n\n\t\t/* In some situations such as datagrids that contain subgrids, the context menu needs to be wrapped in a fixed div to avoid display issues\n\t\t *\n\t\t */\n\t\tisWrapInFixedContainer: false,\n\n\t\tonOpen: _.noop,\n\t\tonClose: _.noop\n\t},\n\tevents: {},\n\tbeforeFirstRender: function () {\n\t\t// namespaces to use when registering event listeners\n\t\tthis.namespace = _.uniqueId('.ContextMenu_');\n\t\tthis.closeNamespace = _.uniqueId('.ContextMenuClose_');\n\n\t\t// jQuery object of the rendered context menu. Not part of the DOM yet.\n\t\tthis.$menu = this.renderMenu(this);\n\t\tthis.$menuList = this.$menu.children();\n\n\t\t/* append the context menu to <body> to be able to use \"position: absolute\"\n\t\t * absolute to the whole window. */\n\t\tthis.$menu.hide().appendTo(this.$el);\n\n\t\t/* the element in which the context menu was opened. Updated every time\n\t\t * the menu is opened. */\n\t\tthis.$openTarget = null;\n\n\t\t/* event that triggered the context menu to open. Updated every time\n\t\t * the menu is opened. */\n\t\tthis.openEvent = null;\n\n\t\tthis.setupOpenEventListeners();\n\n\t\tthis.setupActionsEventListeners();\n\n\t\t// keep track of all the existing context menu instances in the page\n\t\tPJQ.menus.activeMenus.push(this);\n\n\t\treturn false;\n\t},\n\tupdatePosition: function () {\n\t\tlet menuLocation = null, // my\n\t\t\trelativeToElem = null, // of\n\t\t\trelativeToLocation = null; // at\n\n\t\tswitch (this.options.menuSource) {\n\t\t\tcase 'element':\n\t\t\t\trelativeToElem = this.$openTarget;\n\t\t\t\tbreak;\n\t\t\tcase 'mouse':\n\t\t\t\trelativeToElem = this.openEvent;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unknown ContextMenu 'menuSource' option\");\n\t\t}\n\n\t\tswitch (this.options.menuPosition) {\n\t\t\tcase 'belowRight':\n\t\t\t\tmenuLocation = 'right top';\n\t\t\t\trelativeToLocation = 'right bottom';\n\t\t\t\tbreak;\n\t\t\tcase 'belowLeft':\n\t\t\t\tmenuLocation = 'left top';\n\t\t\t\trelativeToLocation = 'left bottom';\n\t\t\t\tbreak;\n\t\t\tcase 'aboveRight':\n\t\t\t\tmenuLocation = 'right bottom';\n\t\t\t\trelativeToLocation = 'right top';\n\t\t\t\tbreak;\n\t\t\tcase 'aboveLeft':\n\t\t\t\tmenuLocation = 'left bottom';\n\t\t\t\trelativeToLocation = 'left top';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unknown ContextMenu 'menuPosition' option\");\n\t\t}\n\n\t\t// update the menu's height and width manually\n\t\tthis.$menu.css({display: 'block'});\n\n\t\t// once the menu is not hidden anymore, we can obtain its content's height and width,\n\t\t// to manually update it in the menu\n\t\tthis.$menu.css({\n\t\t\theight: this.$menuList.height(),\n\t\t\twidth: this.$menuList.width()\n\t\t});\n\n\t\tthis.$menu.position({my: menuLocation, at: relativeToLocation, of: relativeToElem});\n\t},\n\topen: function ($openTarget) {\n\t\tlet self = this;\n\n\t\t// first close all open instances of opened context menus in the page\n\t\tPJQ.menus.closeActiveMenus();\n\n\t\tself.$openTarget = $openTarget;\n\n\t\tself.openEvent = event;\n\n\t\tlet targetData = self.options.fetchElementData(self.$openTarget),\n\t\t\t$actions = self.$menu.find('[data-action]'),\n\t\t\t$noActionsMsg = self.$menu.find('.noActionsMessage');\n\n\t\t// clear previously hidden actions, and hide by default the 'No actions' message\n\t\t$actions.show();\n\t\t$noActionsMsg.hide();\n\n\t\t/* go through all actions to update the text to show, which ones to show\n\t\t * enabled/disabled and which ones to hide. */\n\t\tlet numShown = 0;\n\t\t$actions.each(function () {\n\t\t\tlet $action = $(this),\n\t\t\t\t$actionName = $action.find('.actionName'),\n\t\t\t\tactionId = $action.data('action'),\n\t\t\t\taction = self.options.actions[actionId];\n\n\t\t\tlet itemClasses = $action.attr('class');\n\t\t\tif (_.size(action.itemClasses) > 0) {\n\t\t\t\titemClasses += (' ' + action.itemClasses);\n\t\t\t}\n\n\t\t\tif (action.isDanger) {\n\t\t\t\titemClasses += (' ' + 'danger-item');\n\t\t\t}\n\t\t\t$action.attr('class', itemClasses);\n\n\t\t\tlet textClasses = $actionName.attr('class');\n\t\t\tif (_.size(action.textClasses) > 0) {\n\t\t\t\ttextClasses = textClasses + ' ' + action.textClasses;\n\t\t\t}\n\t\t\t$actionName.attr('class', textClasses);\n\n\t\t\tif (typeof action.isShown === 'function' && action.isShown(targetData) !== true) {\n\t\t\t\t$action.hide();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnumShown++;\n\t\t\t}\n\n\t\t\t// the name provided for an action may be dynamic, provided as a function\n\t\t\t$actionName.html(\n\t\t\t\t_.isFunction(action.name) && action.name(targetData) || action.name\n\t\t\t);\n\n\t\t\tif (action.isEnabled && action.isEnabled(targetData) === false) {\n\t\t\t\t$action.addClass('disabled');\n\t\t\t}\n\t\t});\n\n\t\tif (numShown === 0) {\n\t\t\t$noActionsMsg.show();\n\t\t}\n\n\t\t// once it is known which actions are or arent being shown\n\t\t// (so we know the final height of the context menu),\n\t\t// calculate its position\n\t\tthis.updatePosition();\n\n\t\tif (numShown === 0 && this.options.isHideNoActions)\n\t\t\tthis.$menu.hide();\n\t\telse {\n\t\t\tthis.$menu.show();\n\n\t\t\tthis.setupCloseEventListeners();\n\n\t\t\tthis.options.onOpen(targetData);\n\t\t}\n\t},\n\tclose: function () {\n\t\t// hide the menu\n\t\tthis.$menu.hide();\n\n\t\tthis.clearCloseEventListeners();\n\n\t\tthis.options.onClose();\n\t},\n\tdestroy: function () {\n\t\tthis.close();\n\t\tthis.clearOpenEventListeners();\n\t\tthis.clearActionsEventListeners();\n\t},\n\trenderMenu: function (_this) {\n\t\tlet $menu = $('<div class=\"dropdown context-menu\"/>'),\n\t\t\t$ul = $('<ul class=\"dropdown-menu\"/>');\n\n\t\t// group all actions following the actionsGroups option, to\n\t\t// add a separator between each of them.\n\t\tlet groups = [];\n\n\t\t// default group where all ungrouped actions will go\n\t\tgroups[0] = [];\n\n\t\t// add the rest of groups\n\t\t_.each(_this.options.actionsGroups, function (groupArr, ind) {\n\t\t\tgroups[ind + 1] = [];\n\t\t});\n\n\t\t// find out if any of the actions has an icon\n\t\tlet actionsHaveIcon = false;\n\n\t\t// add each action to the group it belongs to, or the default group\n\t\t_.each(_this.options.actions, function (action, actionId) {\n\t\t\tlet addedToGroup = false;\n\n\t\t\t_.each(_this.options.actionsGroups, function (groupArr, ind) {\n\t\t\t\tif (_.contains(groupArr, actionId)) {\n\t\t\t\t\tgroups[ind + 1].push(actionId);\n\t\t\t\t\taddedToGroup = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (addedToGroup === false) {\n\t\t\t\tgroups[0].push(actionId);\n\t\t\t}\n\n\t\t\tif (typeof action.iconClass !== 'undefined') {\n\t\t\t\tactionsHaveIcon = true;\n\t\t\t}\n\t\t});\n\n\t\tlet isFirstNonEmptyGroup = true;\n\t\t_.each(groups, function (actionsIds) {\n\t\t\tif (actionsIds.length == 0)\n\t\t\t\treturn;\n\n\t\t\tif (isFirstNonEmptyGroup === false) {\n\t\t\t\t$ul.append('<li class=\"divider\"></li>');\n\t\t\t}\n\t\t\tisFirstNonEmptyGroup = false;\n\n\t\t\t_.each(actionsIds, function (actionId) {\n\t\t\t\tlet action = _this.options.actions[actionId];\n\t\t\t\tif (typeof action.isHidden === 'function' && action.isHidden()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/* At least an action has an icon. Add the icon of the current action,\n\t\t\t\t * or room to align it with the actions which do have one. */\n\t\t\t\tif (actionsHaveIcon === true) {\n\t\t\t\t\t$ul.append(\n\t\t\t\t\t\t'<li role=\"presentation\" class=\"menu-item\" data-action=\"' + actionId + '\">' +\n\t\t\t\t\t\t'<a href=\"javascript:void(0)\" role=\"menuitem\" class=\"menu-item-link\">' +\n\t\t\t\t\t\t'<i class=\"' + (action.iconClass || '') + '\"></i> ' +\n\t\t\t\t\t\t'<span class=\"actionName\"></span>' +\n\t\t\t\t\t\t'</a>' +\n\t\t\t\t\t\t'</li>'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// neither of the actions have an icon.\n\t\t\t\telse {\n\t\t\t\t\t$ul.append(\n\t\t\t\t\t\t'<li role=\"presentation\" class=\"menu-item\" data-action=\"' + actionId + '\">' +\n\t\t\t\t\t\t'<a href=\"javascript:void(0)\" role=\"menuitem\" class=\"menu-item-link\"><span class=\"actionName\"></span></a>' +\n\t\t\t\t\t\t'</li>'\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$ul.append(\n\t\t\t\t'<li role=\"presentation\" class=\"noActionsMessage disabled\">' +\n\t\t\t\t'<a href=\"javascript:void(0)\" role=\"menuitem\">' +\n\t\t\t\t'<span>' + _this.options.noActionsMessage + '</span>' +\n\t\t\t\t'</a>' +\n\t\t\t\t'</li>'\n\t\t\t);\n\t\t});\n\n\t\tlet result = $menu.append($ul);\n\n\t\tif (this.options.isWrapInFixedContainer) {\n\t\t\tlet $wrapper = $('<div style=\"position:fixed;overflow:visible;width:100%;z-index:10000;\"/>')\n\t\t\tresult = $wrapper.append($menu);\n\t\t}\n\n\t\treturn result;\n\t},\n\tsetupOpenEventListeners: function () {\n\t\tlet self = this,\n\t\t\topenEventName = null;\n\n\t\tswitch (self.options.menuEvent) {\n\t\t\tcase 'click':\n\t\t\t\topenEventName = 'click';\n\t\t\t\tbreak;\n\t\t\tcase 'right-click':\n\t\t\t\topenEventName = 'contextmenu';\n\t\t\t\tbreak;\n\t\t\tcase 'hover':\n\t\t\t\topenEventName = 'mouseenter';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unknown ContextMenu 'menuEvent' option\");\n\t\t}\n\n\t\t// install the handler for every future elements where\n\t\t// the context menu will open\n\t\tself.$el.on(openEventName + self.namespace, self.options.selector, function (evt) {\n\t\t\tself.open($(this), evt);\n\n\t\t\t// cancel event propagation, to avoid it bubbling up to this.$el\n\t\t\t// and closing the context menu as if the user clicked outside the menu.\n\t\t\treturn false;\n\t\t});\n\t},\n\tclearOpenEventListeners: function () {\n\t\tthis.$el.off(this.namespace);\n\t},\n\tsetupActionsEventListeners: function () {\n\t\tlet self = this,\n\t\t\tactionSelectEvent = self.options._actionSelectEvent + self.namespace;\n\n\t\t// handler to run when an option is selected\n\t\tthis.$menu.on(actionSelectEvent, function (evt) {\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\n\t\t\tlet $target = $(evt.target),\n\t\t\t\t$action = $target.closest('[data-action]');\n\n\t\t\t// check if the clicked element is an action, and its enabled.\n\t\t\t// if not don't do anything\n\t\t\tif (!$action || !$action.length || $action.is('.disabled')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet actionId = $action.data('action'),\n\t\t\t\ttargetData = self.options.fetchElementData(self.$openTarget);\n\n\t\t\t/* call the user click handler. It receives the optional user-defined data,\n\t\t\t * or undefined. */\n\t\t\tself.options.actions[actionId].onClick(targetData);\n\n\t\t\t// close the menu\n\t\t\tself.close();\n\t\t});\n\t},\n\tclearActionsEventListeners: function () {\n\t\tthis.$menu.off(this.namespace);\n\t},\n\tsetupCloseEventListeners: function () {\n\t\tlet self = this;\n\t\tswitch (self.options.menuEvent) {\n\t\t\tcase 'click':\n\t\t\t\tbreak;\n\t\t\tcase 'right-click':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unknown ContextMenu 'menuEvent' option\");\n\t\t}\n\n\t\t// If the user clicks outside the context menu, close it.\n\t\t// Attach this event to the body to ensure it closes no matter where they click\n\t\t$('html').on('click' + self.closeNamespace, function () {\n\t\t\tself.close();\n\t\t});\n\t},\n\tclearCloseEventListeners: function () {\n\t\tthis.$el.off(this.closeNamespace);\n\t}\n});","PJQ.views.modals = {};\n\nPJQ.views.modals.YesNo = PJQ.views.BaseModal.extend({\n\tbeforeModalCreated: function () {\n\t\tthis.options = _.defaults({\n\t\t\tisShowOkButton: true,\n\t\t\tokButtonText: \"Yes\",\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tif (_.size(this.options.cookie) > 0) {\n\t\t\t\t\tPJQ.helpers.cookieHelpers.setCookie(this.options.cookie, true);\n\t\t\t\t}\n\n\t\t\t\tif (typeof this.options.onYes === 'function') {\n\t\t\t\t\tthis.options.onYes();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowSecondaryButton: true,\n\t\t\tsecondaryButtonText: \"No\",\n\t\t\tonSecondary: _.bind(function () {\n\t\t\t\tif (typeof this.options.onNo === 'function') {\n\t\t\t\t\tthis.options.onNo();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this.options);\n\t}\n});\n\nPJQ.views.modals.SaveDontSave = PJQ.views.BaseModal.extend({\n\tbeforeModalCreated: function () {\n\t\tthis.options = _.defaults({\n\t\t\tisShowOkButton: true,\n\t\t\tokButtonText: \"Save\",\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\tthis.options.onSave();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowSecondaryButton: !(this.options.isShowDontSaveButton === false),\n\t\t\tsecondaryButtonText: \"Don't Save\",\n\t\t\tonSecondary: _.bind(function () {\n\t\t\t\tif (typeof this.options.onDontSave === 'function') {\n\t\t\t\t\tthis.options.onDontSave();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowCancelButton: true,\n\t\t\tcancelButtonColorClass: this.options.declineButtonColorClass ? this.options.declineButtonColorClass : \"secondary\",\n\t\t\tcancelButtonText: \"Cancel\",\n\t\t\tonClose: _.bind(function () {\n\t\t\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\t\t\tthis.options.onCancel();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this.options);\n\t}\n});\n\nPJQ.views.modals.DeleteCancel = PJQ.views.BaseModal.extend({\n\tbeforeModalCreated: function () {\n\t\tthis.options = _.defaults({\n\t\t\tisShowOkButton: true,\n\t\t\tokButtonText: this.options.deleteButtonText ? this.options.deleteButtonText : \"Delete\",\n\t\t\tokButtonColorClass: this.options.deleteButtonColorClass ? this.options.deleteButtonColorClass : 'danger',\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tif (typeof this.options.onDelete === 'function') {\n\t\t\t\t\tthis.options.onDelete();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowCancelButton: true,\n\t\t\tcancelButtonColorClass: this.options.declineButtonColorClass ? this.options.declineButtonColorClass : \"secondary\",\n\t\t\tcancelButtonText: this.options.declineButtonText ? this.options.declineButtonText : \"Cancel\",\n\t\t\tonClose: _.bind(function () {\n\t\t\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\t\t\tthis.options.onCancel();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this.options);\n\t}\n});\n\nPJQ.views.modals.CopyDelete = PJQ.views.BaseModal.extend({\n\tbeforeModalCreated: function () {\n\t\tthis.options = _.defaults({\n\t\t\tisShowOkButton: true,\n\t\t\tsecondaryButtonColorClass: 'danger',\n\t\t\tokButtonText: \"Copy All User Types\",\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tif (typeof this.options.onYes === 'function') {\n\t\t\t\t\tthis.options.onYes();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowSecondaryButton: true,\n\t\t\tsecondaryButtonText: \"Delete All User Types\",\n\t\t\tonSecondary: _.bind(function () {\n\t\t\t\tif (typeof this.options.onNo === 'function') {\n\t\t\t\t\tthis.options.onNo();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this.options);\n\t}\n});\n\n//This modal is used for pages where there should be no other action behind the modal (at least without further action)\n//The template provides no way for the user to close the dialog\nPJQ.views.modals.ErrorModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Error')\n\t}\n});\n","PJQ.nav = {\r\n getDataForOldProjectModules: function (callback) {\r\n window.pjqWallContext = 'project';\r\n new PJQ.ajax.Request({\r\n endpoint: \"/session/project/\" + PJQ.app.session.project.id.toString()\r\n }).put().done(_.bind(function () {\r\n if (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId')) {\r\n let sessionId = window.pjqSessionId ? window.pjqSessionId : PJQ.app.session.id;\r\n PanteraScript.PanteraScriptService.GetProjectWallAdminSettings(sessionId, window.projectContactTemp != null ? window.projectContactTemp : '', function (settings) {\r\n window.settings = $.parseJSON(settings);\r\n window.settings.projectId = PJQ.app.session.project.id;\r\n if (window.settings.LayoutCompany != null) {\r\n window.pjqITBLayoutDefault = window.settings.LayoutCompany;\r\n }\r\n if (window.settings.LayoutGroupCompany != null) {\r\n window.pjqITBLayoutGroupCompany = window.settings.LayoutGroupCompany;\r\n }\r\n\r\n if (window.settings.FieldMappingContact != null) {\r\n window.pjqFMContact = window.settings.FieldMappingContact;\r\n }\r\n\r\n let xmlFile = '/DesktopModules/PJQProjectWallAdmin/GetProjectMessageTemplates.aspx?sessionid=' + PJQ.app.session.id + '&x=' + new Date().getTime();\r\n jQuery.ajax({\r\n type: \"GET\",\r\n url: xmlFile,\r\n dataType: \"json\",\r\n success: _.bind(function (result) {\r\n window.settings.ProjectMessageTemplates = result;\r\n PanteraScript.PanteraScriptService.GetProjectInfo(PJQ.app.session.id, function (project) {\r\n window.project = $.parseJSON(project);\r\n callback();\r\n }, onScriptError);\r\n }, this)\r\n });\r\n }, onScriptError);\r\n } else {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'settings'\r\n },\r\n {\r\n endpoint: 'getsubwallsettings'\r\n }\r\n ]),\r\n isPascal: true\r\n }).get().done(_.bind(function (settings) {\r\n window.settings = settings;\r\n PanteraScript.PanteraScriptService.GetProjectInfo(PJQ.app.session.id, function (project) {\r\n window.project = $.parseJSON(project);\r\n callback();\r\n }, onScriptError);\r\n }, this)).fail(onScriptError);\r\n }\r\n }, this));\r\n }\r\n};\r\nPJQ.nav.NavItem = class {\r\n constructor(options = {}) {\r\n this.id = options.id;\r\n this.title = options.title;\r\n this.isBeta = options.isBeta === true;\r\n this.isLegacy = options.isLegacy;\r\n this.requiresDirectory = options.requiresDirectory === true;\r\n this.isPrimaryProjectManagerCheckExempt = options.isPrimaryProjectManagerCheckExempt === true;\r\n this.sortOrder = options.sortOrder;\r\n this.icon = options.icon;\r\n this.iconImage = options.iconImage;\r\n this.iconImageActive = options.iconImageActive;\r\n this.feature = options.feature;\r\n this.isActive = options.isActive;\r\n this.hasRoute = options.hasRoute;\r\n this.hasPrecedingSeparator = options.hasPrecedingSeparator;\r\n this.extraMarkup = options.extraMarkup;\r\n this.includeMarkup = options.includeMarkup;\r\n this.outsideRoute = options.outsideRoute;\r\n this.isAdmin = options.isAdmin;\r\n if (options.route != null) {\r\n this.route = options.route;\r\n }\r\n if (options.count != null) {\r\n this.count = options.count;\r\n }\r\n if (options.render != null) {\r\n this.render = options.render;\r\n }\r\n if (options.hasPermission != null) {\r\n this.hasPermission = options.hasPermission;\r\n }\r\n if (options.path != null) {\r\n this.path = typeof options.path === 'function' ? options.path : _.noop;\r\n }\r\n if (options.isDisabled != null) {\r\n this.isDisabled = options.isDisabled;\r\n }\r\n\r\n if (options.requireSignUp != null) {\r\n this.requireSignUp = options.requireSignUp;\r\n }\r\n\r\n if (options.leaveView != null) {\r\n this.leaveView = options.leaveView;\r\n }\r\n }\r\n\r\n path() {\r\n return this.id;\r\n }\r\n\r\n routeToRoot() {\r\n if (PJQ.app.session.project != null) {\r\n PJQ.app.router.navigate('projects/' + PJQ.app.session.project.id.toString(), {\r\n trigger: true\r\n });\r\n return;\r\n }\r\n PJQ.app.router.routeToRoot();\r\n }\r\n\r\n route(options, triggerRoute = true, $navBody = null) {\r\n if (!this.hasPermission() || !this.hasFeature() || this.getIsDisabled()) {\r\n this.routeToRoot();\r\n return false;\r\n }\r\n\r\n if (options && options.noRoute)\r\n return;\r\n\r\n if (_.size($navBody) > 0 && this.requiresDirectory && PJQ.app.session.isPanteraPortal() && PJQ.app.session.contact == null) {\r\n if (PJQ.app.session.user != null && PJQ.app.session.user.get('companyType') === 'SUB') {\r\n new PJQ.views.nav.RegisterDirectory({\r\n el: $navBody,\r\n onRegister: _.bind(function () {\r\n this.render($navBody, options);\r\n }, this),\r\n onClose: _.bind(function () {\r\n this.routeToRoot();\r\n }, this)\r\n });\r\n } else {\r\n this.routeToRoot();\r\n }\r\n return false;\r\n } else {\r\n PJQ.app.router.navigate(typeof this.path === 'function' ? this.path(options) : this.path, {\r\n trigger: triggerRoute\r\n });\r\n }\r\n }\r\n\r\n getNavPref() {\r\n if (this.navPref == null) {\r\n let prefs;\r\n if (PJQ.app.session.project != null) {\r\n prefs = PJQ.app.session.project.preferences;\r\n } else {\r\n prefs = PJQ.app.session.preferences;\r\n }\r\n let appNavPref = prefs.getPref(PJQ.constants.preferenceTypes.APP_NAV_ITEMS),\r\n portalNavPref = prefs.getPref(PJQ.constants.preferenceTypes.PORTAL_APP_NAV_ITEMS);\r\n this.navPref = _.findWhere(_.union(portalNavPref != null ? portalNavPref : [], appNavPref != null ? appNavPref : []), {id: this.id});\r\n }\r\n return this.navPref;\r\n }\r\n\r\n getDocumentTitle() {\r\n let result = '',\r\n itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.title != null) {\r\n result = itemPref.title;\r\n } else {\r\n result = typeof this.title === 'function' ? this.title() : this.title;\r\n }\r\n\r\n if (PJQ.app.session.project != null && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_NAME_PAGE_TITLE)) {\r\n let pName = PJQ.app.session.project.get('projectName'),\r\n pCity = PJQ.app.session.project.get('city'),\r\n pState = PJQ.app.session.project.get('state'),\r\n pLoc = '';\r\n if (_.size(pCity) > 0) {\r\n pLoc += pCity;\r\n }\r\n if (_.size(pState) > 0) {\r\n if (_.size(pState) > 0)\r\n pLoc += ', ';\r\n\r\n pLoc += pState;\r\n }\r\n result = pLoc + ' - ' + pName;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getTitle(html = true) {\r\n let result = '',\r\n itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.title != null) {\r\n result = itemPref.title;\r\n } else {\r\n result = typeof this.title === 'function' ? this.title() : this.title;\r\n }\r\n\r\n if (this.isBeta) {\r\n if (html) {\r\n result += \"<span class='ml-1 fs-12 font-weight-medium'>beta</span>\"\r\n } else {\r\n result += ' - beta';\r\n }\r\n } else if ((typeof this.isLegacy === 'function' && this.isLegacy()) || this.isLegacy === true) {\r\n if (html) {\r\n result += \"<span class='ml-1 fs-12 font-weight-medium'>legacy</span>\"\r\n } else {\r\n result += ' - legacy';\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getSortOrder() {\r\n let itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.sortOrder != null) {\r\n return itemPref.sortOrder;\r\n }\r\n return this.sortOrder;\r\n }\r\n\r\n getIsAdmin() {\r\n let itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.isAdmin != null) {\r\n return itemPref.isAdmin;\r\n }\r\n return this.isAdmin;\r\n }\r\n\r\n getIsDisabled() {\r\n //only return item pref if its forced to true\r\n let itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.isDisabled) {\r\n return itemPref.isDisabled;\r\n }\r\n return typeof this.isDisabled === 'function' ? this.isDisabled() : this.isDisabled;\r\n }\r\n\r\n hasPermission() {\r\n return true;\r\n }\r\n\r\n hasFeature() {\r\n if (_.size(this.feature) > 0) {\r\n if (PJQ.app.session.project != null && PJQ.app.session.project.subscription != null) {\r\n return PJQ.app.session.project.subscription.hasFeature(this.feature);\r\n }\r\n return PJQ.app.session.hasFeature(this.feature);\r\n }\r\n return true;\r\n }\r\n\r\n isDisabled() {\r\n return false;\r\n }\r\n\r\n count() {\r\n return 0;\r\n }\r\n};\r\n\r\nPJQ.nav.NavItemGroup = class {\r\n constructor(items, options) {\r\n this.items = items;\r\n this.options = options ? options : {};\r\n }\r\n};\r\n\r\nPJQ.nav.itemGroups = {\r\n main: new PJQ.nav.NavItemGroup([\r\n new PJQ.nav.NavItem({\r\n id: \"myprojects\",\r\n title: \"My Projects\",\r\n sortOrder: 10,\r\n icon: \"fa-hammer\",\r\n feature: \"projects\",\r\n hasRoute: true,\r\n render: function ($el) {\r\n new PJQ.views.projects.MyProjectList({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"biddingprojects\",\r\n title: function () {\r\n return PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.BIDDING_PROJECTS_TAB_NAME) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.BIDDING_PROJECTS_TAB_NAME) : \"Bidding Projects\";\r\n },\r\n sortOrder: 20,\r\n icon: \"fa-hammer\",\r\n hasRoute: true,\r\n render: function ($el) {\r\n new PJQ.views.projects.BiddingProjectsList({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.get('ownsPortal') || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_BIDDING_PROJECTS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectinvites\",\r\n title: \"Project Invites\",\r\n sortOrder: 30,\r\n icon: \"fa-envelope\",\r\n hasRoute: true,\r\n render: function ($el) {\r\n new PJQ.views.projects.ProjectInvitesList({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return (PJQ.app.session.user.get('companyType') === 'GC' && PJQ.app.session.contact == null) || (PJQ.app.session.get('ownsPortal') && !PJQ.app.session.isPanteraPortal());\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"contacts\",\r\n title: \"Contacts\",\r\n sortOrder: 40,\r\n isLegacy: true,\r\n icon: \"fa-users\",\r\n feature: \"contacts\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('contacts.canView');\r\n },\r\n render: function ($el) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'session'\r\n },\r\n {\r\n endpoint: 'project',\r\n value: 0\r\n }\r\n ])\r\n }).put().done(_.bind(function () {\r\n PJQ.app.session.project = null;\r\n window.pjqSessionId = PJQ.app.session.id;\r\n window.pjqABContext = '';\r\n initAddressBook($el);\r\n }, this));\r\n },\r\n count: function () {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PERMISSIONS)) {\r\n if (PJQ.app.session.hasPermission('contacts.canApprove')) {\r\n return PJQ.app.session.get('unApprovedContactsCount');\r\n } else {\r\n return 0;\r\n }\r\n } else {\r\n return PJQ.app.session.get('unApprovedContactsCount');\r\n }\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_OLD_ADDRESSBOOK)) {\r\n return false;\r\n }\r\n return PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId || !PJQ.app.session.get('ownsPortal') || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_OLD_ADDRESSBOOK);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"contactsnew\",\r\n title: \"Contacts\",\r\n sortOrder: 40,\r\n icon: \"fa-users\",\r\n feature: \"contacts\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('contacts.canView');\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.addressbook.AddressBook(_.defaults({\r\n el: $el\r\n }, options));\r\n },\r\n count: function () {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PERMISSIONS)) {\r\n if (PJQ.app.session.hasPermission('contacts.canApprove')) {\r\n return PJQ.app.session.get('unApprovedContactsCount');\r\n } else {\r\n return 0;\r\n }\r\n } else {\r\n return PJQ.app.session.get('unApprovedContactsCount');\r\n }\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal') || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"documents\",\r\n title: \"Documents\",\r\n sortOrder: 50,\r\n icon: \"fa-folder\",\r\n feature: \"documents\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('documents.canView');\r\n },\r\n route: function () {\r\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_DOCUMENTS)) {\r\n PJQ.app.router.navigate(this.path(), {\r\n trigger: true\r\n });\r\n } else {\r\n if (window.location.hash.toLowerCase() !== ('#' + this.path())) {\r\n window.location.href = '#' + this.path();\r\n window.location.reload();\r\n return false;\r\n }\r\n }\r\n },\r\n render: function ($el) {\r\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_DOCUMENTS)) {\r\n new PJQ.views.files.FileNavigator({\r\n el: $el\r\n });\r\n } else {\r\n $el.append($('<iframe/>', {\r\n src: '/Default.aspx?tabid=' + PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.DOCUMENTS_TAB_ID).toString(),\r\n style: 'border:0;width:100%;height:' + $el.height() + 'px;'\r\n }));\r\n }\r\n },\r\n isDisabled: function () {\r\n return (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DOCUMENTS_TAB_ID)\r\n && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_DOCUMENTS)) || PJQ.app.session.user == null || !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"bidfiler\",\r\n title: \"Bid Filer\",\r\n sortOrder: 60,\r\n icon: \"fa-file-import\",\r\n feature: \"bidFiler\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('bidFiler.isAdmin');\r\n },\r\n render: function ($el) {\r\n new PJQ.views.BidFiler({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.isPanteraPortal()) {\r\n return false;\r\n }\r\n\r\n return !PJQ.app.session.get('ownsPortal')\r\n || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FILER);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"printondemand\",\r\n title: \"Order Prints\",\r\n sortOrder: 70,\r\n icon: \"fa-print\",\r\n hasRoute: true,\r\n render: function ($el) {\r\n initPrintOnDemand($el);\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PRINT_ON_DEMAND);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"profile\",\r\n title: \"Profile\",\r\n sortOrder: 80,\r\n icon: \"fa-user\",\r\n hasRoute: true,\r\n requiresDirectory: true,\r\n render: function ($el, options) {\r\n new PJQ.views.profile.CompanyProfile({\r\n el: $el,\r\n key: options ? options.key : null,\r\n activateTab: options ? options.tab : null\r\n });\r\n },\r\n isDisabled: function () {\r\n let companyType = null;\r\n if (PJQ.app.session.user != null) {\r\n companyType = PJQ.app.session.user.get('companyType');\r\n }\r\n return !PJQ.app.session.isPanteraPortal() || companyType != 'SUB';\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"prequal\",\r\n title: \"Prequalification\",\r\n sortOrder: 80,\r\n icon: \"fa-align-justify\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n \treturn PJQ.app.session.isPanteraPortal() || PJQ.app.session.hasPermission('prequal.canView');\r\n },\r\n requiresDirectory: true,\r\n render: function ($el) {\r\n let terms = new PJQ.collections.screenings.ScreeningTerms(),\r\n renderDashboard = function () {\r\n let clients = new PJQ.collections.screenings.ScreeningClients(null, {\r\n contact: PJQ.app.session.contact,\r\n masterUserId: PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.constants.publicUserId\r\n });\r\n clients.fetch({\r\n success: function () {\r\n new PJQ.views.screenings.ScreeningDashboard({\r\n el: $el,\r\n collection: clients\r\n });\r\n },\r\n error: function (model, result) {\r\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.PJQPROFILE_GET_SCREENINGS, {\r\n model: model,\r\n result: result\r\n });\r\n }\r\n });\r\n };\r\n terms.fetch({\r\n success: function () {\r\n if (_.find(terms.models, function (term) {\r\n return term.get('isActive') && !term.get('isAccepted')\r\n }) != null) {\r\n new PJQ.views.screenings.ScreeningTermsModal({\r\n collection: terms,\r\n onComplete: function () {\r\n renderDashboard();\r\n }\r\n });\r\n } else {\r\n renderDashboard();\r\n }\r\n }\r\n });\r\n },\r\n isDisabled: function () {\r\n let companyType = null,\r\n isPanteraPortal = PJQ.app.session.isPanteraPortal();\r\n if (PJQ.app.session.user != null) {\r\n companyType = PJQ.app.session.user.get('companyType');\r\n }\r\n return ((PJQ.app.session.get('ownsPortal') && !isPanteraPortal) || (companyType !== \"SUB\" && isPanteraPortal)) || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PREQUAL);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"screenings\",\r\n title: \"Screenings\",\r\n sortOrder: 90,\r\n icon: \"fa-user\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.isPanteraPortal() || PJQ.app.session.hasPermission('prequal.canView');\r\n },\r\n render: function ($el, options) {\r\n let terms = new PJQ.collections.screenings.ScreeningTerms(),\r\n renderDashboard = function () {\r\n let clients = new PJQ.collections.screenings.ScreeningClients(null, {\r\n contact: PJQ.app.session.contact,\r\n masterUserId: PJQ.app.session.preferences.hasPref('portalOwner') ? PJQ.app.session.preferences.getPref('portalOwner') : PJQ.constants.publicUserId\r\n });\r\n clients.fetch({\r\n success: function () {\r\n new PJQ.views.screenings.ScreeningDashboard({\r\n el: $el,\r\n collection: clients\r\n });\r\n },\r\n error: function (model, result) {\r\n new PJQ.logging.Debug(PJQ.logging.LoggingActions.PJQPROFILE_GET_SCREENINGS, {\r\n model: model,\r\n result: result\r\n });\r\n }\r\n });\r\n };\r\n terms.fetch({\r\n success: function () {\r\n if (_.find(terms.models, function (term) {\r\n return term.get('isActive') && !term.get('isAccepted')\r\n }) != null) {\r\n new PJQ.views.screenings.ScreeningTermsModal({\r\n collection: terms,\r\n onComplete: function () {\r\n renderDashboard();\r\n }\r\n });\r\n } else {\r\n renderDashboard();\r\n }\r\n }\r\n });\r\n },\r\n isDisabled: function () {\r\n return true;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"calendar\",\r\n title: \"Calendar\",\r\n sortOrder: 100,\r\n icon: \"fa-calendar-alt\",\r\n feature: \"calendar\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('calendar.canView');\r\n },\r\n render: function ($el) {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_OLD_CALENDAR)) {\r\n initScheduler($el);\r\n } else {\r\n new PJQ.views.calendars.SystemCalendar({\r\n el: $el\r\n });\r\n }\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.user == null;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"resources\",\r\n title: \"Resources\",\r\n sortOrder: 105,\r\n icon: \"fa-person-carry\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('resources.isAdmin');\r\n },\r\n render: function ($el) {\r\n new PJQ.views.resources.ResourceAllocation({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"timecards\",\r\n title: \"Time Cards\",\r\n sortOrder: 106,\r\n icon: \"fa-user-clock\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('timeCards.canView') || PJQ.app.session.hasPermission('timeCards.isAdmin');\r\n },\r\n render: function ($el) {\r\n new PJQ.views.timecards.TimeCardMain({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"invoices\",\r\n title: \"Invoices\",\r\n sortOrder: 107,\r\n icon: \"fa-file-invoice-dollar\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n // either already on, or in demo mode\r\n return PJQ.app.session.hasPermission('invoices.canView') || PJQ.app.session.hasPermission('invoices.isAdmin') || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_INVOICES);\r\n },\r\n render: function ($el, options) {\r\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_INVOICES)) {\r\n new PJQ.views.invoices.InvoicePreview({\r\n el: $el\r\n });\r\n } else {\r\n new PJQ.views.invoices.Invoices(_.defaults({\r\n el: $el\r\n }, options));\r\n }\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.get('onAccount') ||\r\n (PJQ.app.session.subscription == null || (PJQ.app.session.subscription.id !== PJQ.constants.subscriptions.types.PRO && PJQ.app.session.subscription.id !== PJQ.constants.subscriptions.types.ENTERPRISE));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"erpadmin\",\r\n sortOrder: 108,\r\n title: \"ERP Admin\",\r\n icon: \"fa-check-to-slot\",\r\n feature: \"erpAdmin\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('settings.canManageERPAdmin');\r\n },\r\n path: function (options) {\r\n if (options) {\r\n return 'erpadmin/' + options.feature;\r\n } else {\r\n return 'erpadmin';\r\n }\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.erpAdmin.ERPAdminManagement({\r\n el: $el,\r\n feature: options.feature\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal') || PJQ.app.session.erpIntegration == null || PJQ.app.session.erpIntegration.id == null;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"reports\",\r\n sortOrder: 110,\r\n title: \"Reports\",\r\n icon: \"fa-chart-line\",\r\n feature: \"reports\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('reports.canView');\r\n },\r\n render: function ($el) {\r\n initSystemReports($el);\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"reportsadhoc\",\r\n sortOrder: 110,\r\n title: \"Ad Hoc Reports\",\r\n icon: \"fa-chart-line\",\r\n feature: \"reports\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.hasPermission('reports.canView');\r\n },\r\n render: function ($el) {\r\n PJQ.app.ReportView = new PJQ.views.reporting.NewReportView({\r\n el: $el\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.get('ownsPortal') || (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_REPORTS_NEW) && !(new RegExp(\"://sandbox.\")).test(window.location.href)) ;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"settings\",\r\n title: \"Settings\",\r\n sortOrder: 120,\r\n icon: \"fa-cog\",\r\n hasRoute: true,\r\n render: function ($el, options) {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_SETTINGS)) {\r\n initSystemSettings($el);\r\n } else {\r\n PJQ.helpers.urlHelpers.cleanRouteParams();\r\n new PJQ.views.settings.SettingsNav({\r\n el: $el,\r\n procoreCode: options.procoreCode,\r\n subscriptionId: options.subscriptionId,\r\n initView: options.initView\r\n });\r\n }\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"signout\",\r\n title: \"Sign Out\",\r\n sortOrder: 130,\r\n icon: \"fa-sign-out\",\r\n hasPrecedingSeparator: true,\r\n route: function () {\r\n if (PJQ.app.options.isK8) {\r\n window.location.href = \"/signout\";\r\n } else {\r\n window.location.href = \"/Signout.aspx\";\r\n }\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"resourcecenter\",\r\n title: \"Resource Center\",\r\n sortOrder: 125,\r\n isAdmin: true,\r\n marginTop: '50px',\r\n iconImage: '/assets/modules2/global/images/wrench_icon.png',\r\n hasPermission: function () {\r\n return true\r\n },\r\n outsideRoute: 'https://www.panteratools.com/support/resource-center/',\r\n isDisabled: function () {\r\n return PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_RESOURCE_CENTER);\r\n },\r\n includeMarkup: '<div class=\"d-flex justify-content-end\"><div style=\"margin-top:-12px !important;font-weight: 400;font-size: 12px;\" class=\"p-0 m-0 ht-20p lh-20 wd-85p\">Click here for Tutorials ></div></div>'\r\n })\r\n ]),\r\n project: new PJQ.nav.NavItemGroup([\r\n new PJQ.nav.NavItem({\r\n id: \"dashboard\",\r\n title: \"Dashboard\",\r\n sortOrder: 10,\r\n icon: \"fa-tachometer-alt-fast\",\r\n hasRoute: true,\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/dashboard';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.projects.ProjectDashboard(_.defaults({\r\n el: $el,\r\n model: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.project) {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW';\r\n }\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"details\",\r\n title: \"Project Details\",\r\n sortOrder: 20,\r\n icon: \"fad fa-asterisk\",\r\n hasRoute: true,\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/details';\r\n },\r\n render: function ($el, options) {\r\n this.projectDetails = new PJQ.views.projects.ProjectDetails(_.defaults({\r\n el: $el,\r\n model: PJQ.app.session.project\r\n }, options));\r\n },\r\n leaveView: function () {\r\n if (this.projectDetails != null) {\r\n this.projectDetails.cancelEdit();\r\n }\r\n },\r\n hasPermission: function () {\r\n let proj = PJQ.app.session.project;\r\n return !proj.get('isDetailsAdminOnly') || (proj.get('masterUserId') === PJQ.app.session.get('masterUserId'));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"locations\",\r\n title: \"Locations\",\r\n sortOrder: 25,\r\n icon: \"fa-map-pin\",\r\n hasRoute: true,\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/locations';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.projects.LocationManagement(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('base.canEdit');\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_LOCATIONS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"mall\",\r\n title: \"Mall\",\r\n sortOrder: 20,\r\n isAdmin: true,\r\n icon: \"fa-building\",\r\n hasRoute: true,\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/mall';\r\n },\r\n render: function ($el, options) {\r\n let loader = new PJQ.Loader($el);\r\n PJQ.nav.getDataForOldProjectModules(function () {\r\n window.pjqIsNewProjContainer = true;\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n $el.html('<div><button type=\"button\" id=\"project-save\" onclick=\"SaveProjContainer()\" class=\"btn btn-primary mb-2\">Save Changes</button><div id=\"project-container-home\"></div></div>');\r\n PanteraScript.PanteraScriptService.GetProjectContainerInfo(PJQ.app.session.id, ProjContainerInfoC, onScriptError);\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PROJECT_CONTAINERS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"messaging\",\r\n title: function () {\r\n return PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_TAB_NAME) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_TAB_NAME) : \"Messaging\";\r\n },\r\n sortOrder: 30,\r\n icon: \"fa-poll-people\",\r\n isLegacy: function () {\r\n return !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW_PORTAL);\r\n },\r\n feature: \"projectMessaging\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('messaging.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/messaging';\r\n },\r\n render: function ($el, options) {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW_PORTAL)) {\r\n let muid = PJQ.app.session.get(\"masterUserId\");\r\n PJQ.app.session.fetchCompanyCustomFields(muid, _.bind(function () {\r\n PJQ.app.session.fetchContactCustomFields(muid, _.bind(function () {\r\n PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function () {\r\n new PJQ.views.projects.ProjectMessaging(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n copyProjectMessageId: options.copyProjectMessageId\r\n }, options));\r\n }, this));\r\n }, this));\r\n }, this));\r\n } else {\r\n // cleanup for old itb module\r\n if (window.dlgPM != null) {\r\n window.dlgPM.dialog('destroy');\r\n window.dlgPM = null;\r\n }\r\n window.msgEditor = null;\r\n window.searchGroupList = '';\r\n window.filterGroupTree = null;\r\n window.filterUnsent = false;\r\n\r\n window.validator = jQuery(\"Form[name='Form']\").validate({\r\n onsubmit: false,\r\n onkeyup: false,\r\n showErrors: function showErrors(errorMap, errorList) {\r\n for (var i = 0; errorList[i]; i++) {\r\n var element = this.errorList[i].element;\r\n //solves the problem with brute force\r\n //remove existing error label and thus force plugin to recreate it\r\n //recreation == call to error placement function\r\n this.errorsFor(element).remove();\r\n }\r\n this.defaultShowErrors();\r\n },\r\n errorPlacement: function errorPlacement(error, element) {\r\n error.html('<br />' + error.text());\r\n if (element.attr('tagName') == 'select' || element.hasClass('pjq-numeric-field-width'))\r\n error.appendTo(element.parent().parent());\r\n else\r\n error.appendTo(element.parent());\r\n },\r\n errorClass: \"pjq-errortext\",\r\n ignore: \"pjq-validate-ignore\"\r\n });\r\n\r\n //Render old itb modules\r\n let loader = new PJQ.Loader($el),\r\n render = function (options) {\r\n $('.ui-dialog').remove();\r\n\r\n let $itb = $('<div />', {\r\n id: 'project-itb'\r\n });\r\n $el.html($itb);\r\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALLADMIN, 'ITB', {isOldModule: true}), $itb, {}, function () {\r\n // render project documents hidden because some of the dialogs are needed for messaging\r\n let $docs = $('<div />', {\r\n id: 'project-documents',\r\n class: 'hidden'\r\n });\r\n $el.append($docs);\r\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALLADMIN, 'ProjectDocuments', {isOldModule: true}), $docs, {}, function () {\r\n gridITB = null;\r\n PJQProjectWallAdminITBInitialize();\r\n InitializeGridITB(gridITBGroupBy, _.bind(function () {\r\n if (options.viewProjectMessageId)\r\n HandleViewProjectMessage(options.viewProjectMessageId);\r\n else if (options.copyProjectMessageId) {\r\n CopyProjectMsg(options.copyProjectMessageId);\r\n } else if (options.deleteProjectMessageId) {\r\n selectedCommentId = options.deleteProjectMessageId;\r\n showInfoDialog('Delete Message', 'Are you sure you want to delete this Project Message?', 'ui-icon-alert', 'delete-project-message');\r\n }\r\n }, this));\r\n $itb.find('.btn-new-message').attr('id', 'create-new-itb').removeClass('hidden');\r\n });\r\n });\r\n };\r\n //we have to check a certain value within window.settings to make sure its the project settings\r\n //all old modules used a global settings variable\r\n if (window.settings == null || window.settings.ProjectUser1Label == null || window.project == null || window.settings.projectId !== PJQ.app.session.project.id) {\r\n PJQ.nav.getDataForOldProjectModules(function () {\r\n render(options);\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n });\r\n } else {\r\n render(options);\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n }\r\n }\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW_PORTAL)) {\r\n return false;\r\n }\r\n\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_WALL_MESSAGING_OLD);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"messagingnew\",\r\n title: function () {\r\n return PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_TAB_NAME) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_MESSAGING_TAB_NAME) : \"Messaging\";\r\n },\r\n sortOrder: 30,\r\n icon: \"fa-poll-people\",\r\n feature: \"projectMessaging\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('messaging.canView');\r\n },\r\n path: function (options) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/messagingnew' + ((options && options.viewProjectMessageId) ? '/' + options.viewProjectMessageId : '');\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.session.fetchCompanyCustomFields(PJQ.app.session.get(\"masterUserId\"), _.bind(function () {\r\n PJQ.app.session.fetchContactCustomFields(PJQ.app.session.get(\"masterUserId\"), _.bind(function () {\r\n PJQ.app.session.fetchProjectMessageEmailTemplates(_.bind(function () {\r\n new PJQ.views.projects.ProjectMessaging(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n copyProjectMessageId: options.copyProjectMessageId\r\n }, options));\r\n }, this));\r\n }, this));\r\n }, this));\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW_PORTAL)) {\r\n return true;\r\n }\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.IS_PROJECT_WALL_MESSAGING_NEW);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"privatemessaging\",\r\n title: \"Private Messages\",\r\n sortOrder: 40,\r\n icon: \"fa-comments-alt\",\r\n feature: \"privateMessaging\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('privateMessaging.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/privatemessaging';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.projects.UserMessages({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n userMessageId: options.viewUserMessageId,\r\n view: options.view ? options.view : 'inbox'\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || (PJQ.app.session.user === null && PJQ.app.session.contact === null)\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PRIVATE_MESSAGES);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"bidforms\",\r\n title: \"Bid Forms\",\r\n sortOrder: 50,\r\n icon: \"fa-file-invoice-dollar\",\r\n feature: \"bidForms\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && PJQ.app.session.project.hasPermission('bidForms.canView');\r\n },\r\n path: function (options) {\r\n if (options && options.groupId > 0) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/bidforms/' + options.groupId.toString();\r\n }\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/bidforms';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.BidFormEditor = new PJQ.views.bidForms.BidFormEditorSelector(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n collection: new PJQ.collections.bidForms.GroupBidForms([]),\r\n initProposalId: options.proposalId,\r\n initGroupId: options.groupId\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n let hasPref = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS)\r\n || PJQ.app.session.isPanteraPortal();\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW' || !hasPref || !PJQ.app.session.project.get('featureSettings').isBidFormsEnabled;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"proposals\",\r\n title: \"Proposals\",\r\n sortOrder: 60,\r\n icon: \"fa-file-invoice-dollar\",\r\n isAdmin: false,\r\n hasRoute: true,\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/proposals';\r\n },\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('bidForms.canView');\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.bidForms.ProposalSelector({\r\n el: $el,\r\n model: new PJQ.models.bidForms.Bidder({\r\n contactId: PJQ.app.session.contact.id\r\n })\r\n });\r\n },\r\n isDisabled: function () {\r\n if (PJQ.app.session.contact == null)\r\n return true;\r\n\r\n let itemPref = this.getNavPref();\r\n if (itemPref != null && itemPref.isDisabled != null) {\r\n return itemPref.isDisabled;\r\n }\r\n\r\n let hasPref = PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS)\r\n || (PJQ.app.session.isPanteraPortal() && PJQ.app.session.project.get('portalId') === 4);\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !hasPref\r\n || !PJQ.app.session.project.get('featureSettings').isBidFormsEnabled\r\n || PJQ.app.session.contact == null;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectcontacts\",\r\n title: \"Project Contacts\",\r\n sortOrder: 70,\r\n icon: \"fa-users-class\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n isPrimaryProjectManagerCheckExempt: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('projectContacts.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/contacts';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.projectContactsManagement = new PJQ.views.projectContacts.ProjectContactsManagement(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_CONTACTS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectdocuments\",\r\n title: \"Documents\",\r\n sortOrder: 80,\r\n icon: \"fa-folder-tree\",\r\n feature: \"projectAttachments\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('attachments.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/documents';\r\n },\r\n render: function ($el, options) {\r\n //Render old project documents module\r\n let loader = new PJQ.Loader($el),\r\n render = function () {\r\n let $docs = $('<div />', {\r\n id: 'project-documents'\r\n });\r\n $el.append($docs);\r\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALLADMIN, 'ProjectDocuments', {isOldModule: true}), $docs, {}, function () {\r\n window.loPDocs = null;\r\n PJQProjectWallAdminProjectDocumentsInitialize();\r\n });\r\n };\r\n if (window.settings == null) {\r\n PJQ.nav.getDataForOldProjectModules(function () {\r\n render();\r\n\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n });\r\n } else {\r\n render();\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n }\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_DOCUMENTS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"drawings\",\r\n title: \"Drawings\",\r\n sortOrder: 90,\r\n icon: \"fa-ruler\",\r\n feature: \"drawings\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('drawings.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/drawings';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.drawings.Dashboard({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n isReadOnly: PJQ.app.session.project.get('status') === 'ARCHIVE',\r\n initOptions: options\r\n });\r\n },\r\n isDisabled: function () {\r\n let proj = PJQ.app.session.project;\r\n return proj.get('status') === 'NEW'\r\n || proj.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS)\r\n || (!proj.get('hasDrawings') && (PJQ.app.session.user == null || proj.get('masterUserId') !== PJQ.app.session.user.get('masterUserId')));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"attachments\",\r\n title: \"Attachments\",\r\n sortOrder: 100,\r\n icon: \"fa-paperclip\",\r\n feature: \"projectAttachments\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('attachments.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/attachments';\r\n },\r\n render: function ($el) {\r\n new PJQ.views.projects.Attachments({\r\n el: $el,\r\n expandSharedFolders: PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.EXPAND_PROJECT_ROOT_SHARED_FOLDERS),\r\n project: PJQ.app.session.project,\r\n isReadOnly: PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'NEW' ||\r\n PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_ATTACHMENTS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectphotos\",\r\n title: \"Photo Gallery\",\r\n sortOrder: 110,\r\n icon: \"fa-images\",\r\n feature: \"projectPhotos\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('photoGallery.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/photos';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.ProjectPhotoGallery = new PJQ.views.photos.PhotoGallery(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_PROJECT_PHOTOS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"meetings\",\r\n title: \"Meetings\",\r\n sortOrder: 108,\r\n icon: \"fa-people-group\",\r\n feature: \"meetings\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('meetings.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/meetings';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.meetings.MeetingsList({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n meetingId: options.meetingId\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW';\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectschedule\",\r\n title: \"Schedule\",\r\n category: PJQ.constants.navigation.categories.FIELD_TOOLS,\r\n sortOrder: 105,\r\n icon: \"fad fa-tasks-alt\",\r\n feature: \"schedule\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('schedule.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/schedule';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.schedule.ScheduleDashboard({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n model: options.model,\r\n initTaskId: options.taskId,\r\n initLookAheadId: options.lookAheadId,\r\n shareKey: options.shareKey\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW' ||\r\n PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_SCHEDULING);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"rfi\",\r\n title: \"RFI\",\r\n sortOrder: 120,\r\n icon: \"fa-question\",\r\n feature: \"rfi\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('rfi.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/rfi';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.session.project.fetchRFISettings(_.bind(function (settings) {\r\n PJQ.app.RFIManagement = new PJQ.views.rfi.RFIManagement(_.defaults({\r\n el: $el,\r\n settings: settings,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }, this));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_RFI)\r\n || (PJQ.app.session.user === null && PJQ.app.session.contact === null);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"submittals\",\r\n title: \"Submittals\",\r\n sortOrder: 130,\r\n icon: \"fa-conveyor-belt-alt\",\r\n feature: \"submittals\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('submittals.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/submittals';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.submittals.SubmittalsView({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n initSubmittalId: options.submittalId\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"dailyreports\",\r\n title: \"Daily Reports\",\r\n sortOrder: 140,\r\n icon: \"fa-calendar-day\",\r\n feature: \"dailyReports\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('dailyReports.canView');\r\n },\r\n path: function (options) {\r\n let url = 'projects/' + PJQ.app.session.project.id + '/dailyreports';\r\n if (options != null && options.date != null) {\r\n url += '/' + PJQ.helpers.dateHelpers.getDateString(options.date, PJQ.helpers.dateHelpers.dateFormats.URL_DATE);\r\n }\r\n return url;\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.DailyReportsManagement = new PJQ.views.dailyReports.DailyReportsNavigator(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DAILY_REPORTS);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"timecardsProject\",\r\n title: \"Time Cards\",\r\n sortOrder: 144,\r\n icon: \"fa-user-clock\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n //TODO: This has to either be a user of the company that owns this project, or assigned as a ProjectManagementContact\r\n return (\r\n (PJQ.app.session.contact == null && PJQ.app.session.hasPermission('timeCards.canView')) ||\r\n ((PJQ.app.session.project.hasPermission('timeCards.canView') && PJQ.app.session.project.get('isProjectContact')) || PJQ.app.session.project.hasPermission('timeCards.canViewAll')));\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/timecards';\r\n },\r\n render: function ($el) {\r\n let contact = null;\r\n if ((PJQ.app.session.contact === null && PJQ.app.session.hasPermission('timeCards.canView')) || PJQ.app.session.project.hasPermission('timeCards.canViewAll'))\r\n contact = null;\r\n else if (PJQ.app.session.project.hasPermission('timeCards.canView'))\r\n contact = PJQ.app.session.user;\r\n else\r\n contact = PJQ.app.session.contact;\r\n\r\n new PJQ.views.timecards.TimeCardMain({\r\n el: $el,\r\n project: PJQ.app.session.project,\r\n contact: contact\r\n });\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"punchlists\",\r\n title: \"Punch List\",\r\n sortOrder: 150,\r\n icon: \"fa-clipboard-check\",\r\n feature: \"punchList\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('punchList.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/punchlists';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.PunchlistView = new PJQ.views.punchlists.PunchlistView(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"actionitems\",\r\n title: \"Action Items\",\r\n sortOrder: 150,\r\n icon: \"fa-clipboard-check\",\r\n feature: \"actionItems\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('actionItems.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/actionitems';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.ActionItemsView = new PJQ.views.actionItems.ActionItemView(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectreports\",\r\n title: \"Reports\",\r\n sortOrder: 160,\r\n icon: \"fa-chart-pie\",\r\n feature: \"projectReports\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('reports.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/reports';\r\n },\r\n render: function ($el, options) {\r\n //Render old Reports module\r\n let render = function () {\r\n PJQ.templating.TemplateRenderer.renderTemplate(false, new PJQ.templating.Template(PJQ.constants.modules.PROJECTWALLADMIN, 'ProjectReports', {isOldModule: true}), $el, {}, function () {\r\n PJQProjectWallAdminProjectReportsInitialize();\r\n BuildReportProject();\r\n });\r\n };\r\n if (window.settings == null || window.settings.projectId !== PJQ.app.session.project.id) {\r\n PJQ.nav.getDataForOldProjectModules(function () {\r\n render();\r\n });\r\n } else {\r\n render();\r\n }\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW';\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"projectreportsadhoc\",\r\n title: \"Ad Hoc Reports\",\r\n sortOrder: 160,\r\n icon: \"fa-chart-pie\",\r\n feature: \"projectReports\",\r\n isAdmin: true,\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('reports.canView');\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/reportsadhoc';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.ReportView = new PJQ.views.reporting.NewReportView({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n });\r\n },\r\n isDisabled: function () {\r\n return (PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW') || (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_REPORTS_NEW) && !(new RegExp(\"://sandbox.\")).test(window.location.href));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"rsvpautoreport\",\r\n title: function () {\r\n let result = PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_RSVP_AUTO_REPORT);\r\n if (result.indexOf('|') !== -1)\r\n result = result.substring(0, result.indexOf('|'));\r\n return result;\r\n },\r\n sortOrder: 165,\r\n icon: \"fa-info\",\r\n isAdmin: false,\r\n route: function () {\r\n let options = {};\r\n new PJQ.views.projects.AutoReport(_.defaults({\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_RSVP_AUTO_REPORT);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"costcodes\",\r\n title: \"Cost Codes\",\r\n sortOrder: 169,\r\n icon: \"fa-money-check-dollar\",\r\n feature: \"budget\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('budget.isAdmin') && PJQ.app.session.user != null;\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/costcodes';\r\n },\r\n render: function ($el, options) {\r\n this.costCodeSettings = new PJQ.views.budget.ProjectCostCodeSettings({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW';\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"budget\",\r\n title: \"Budget\",\r\n sortOrder: 170,\r\n icon: \"fa-clipboard-check\",\r\n feature: \"budget\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('budget.canView') && PJQ.app.session.user != null;\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/budget';\r\n },\r\n render: function ($el, options) {\r\n PJQ.app.BudgetView = new PJQ.views.budget.ProjectBudget(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"primecontracts\",\r\n title: \"Contracts\",\r\n sortOrder: 170,\r\n icon: \"fa-signature\",\r\n feature: \"primecontracts\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('primeContracts.canView') && PJQ.app.session.user != null;\r\n },\r\n path: function (options) {\r\n if (options) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/contracts/' + options.view;\r\n } else {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/contracts';\r\n }\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.primeContracts.PrimeContractManagement(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"commitments\",\r\n title: \"Commitments\",\r\n sortOrder: 170,\r\n icon: \"fa-money-bill\",\r\n feature: \"budget\",\r\n hasRoute: true,\r\n requireSignUp: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('commitments.canView') && PJQ.app.session.user != null;\r\n },\r\n path: function (options) {\r\n if (options) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/commitments/' + options.view;\r\n } else {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/commitments';\r\n }\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.commitments.CommitmentManagement(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"changerequests\",\r\n title: \"Change Requests\",\r\n sortOrder: 172,\r\n icon: \"fa-money-bill-transfer\",\r\n feature: \"changerequests\",\r\n hasRoute: true,\r\n requireSignUp: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.user != null\r\n && (PJQ.app.session.project.hasPermission('changeRequests.canView') || PJQ.app.session.project.hasPermission('changeRequests.canViewRFQs'));\r\n },\r\n path: function (options) {\r\n if (options) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/changerequests/' + options.view;\r\n } else {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/changerequests';\r\n }\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.changeRequests.ChangeRequestsList(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW';\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"directcosts\",\r\n title: \"Direct Costs\",\r\n sortOrder: 175,\r\n icon: \"fa-envelope-open-dollar\",\r\n feature: \"budget\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('directCosts.canView') && PJQ.app.session.user != null;\r\n },\r\n path: function () {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/directcosts';\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.directcosts.ProjectDirectCosts(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"invoicing\",\r\n title: \"Invoicing\",\r\n sortOrder: 180,\r\n icon: \"fa-file-invoice-dollar\",\r\n feature: \"invoicing\",\r\n hasRoute: true,\r\n hasPermission: function () {\r\n return (PJQ.app.session.project.hasPermission('payableInvoices.isAdmin') || PJQ.app.session.project.hasPermission('receivableInvoices.isAdmin')) && PJQ.app.session.user != null;\r\n },\r\n path: function (options) {\r\n if (options) {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/invoicing/' + options.view;\r\n } else {\r\n return 'projects/' + PJQ.app.session.project.id.toString() + '/invoicing';\r\n }\r\n },\r\n render: function ($el, options) {\r\n new PJQ.views.invoicing.InvoicingManagement(_.defaults({\r\n el: $el,\r\n project: PJQ.app.session.project\r\n }, options));\r\n }\r\n })\r\n ], {\r\n hasHeader: true\r\n }),\r\n nonAdminExtras: new PJQ.nav.NavItemGroup([\r\n new PJQ.nav.NavItem({\r\n id: \"cloneproject\",\r\n title: \"Clone Project\",\r\n sortOrder: 300,\r\n icon: \"fa-clone\",\r\n isAdmin: false,\r\n hasPrecedingSeparator: true,\r\n route: function () {\r\n let cloneModal = new PJQ.views.modals.YesNo({\r\n header: \"Clone Project\",\r\n body: \"Are you sure you want to clone this into your projects?\",\r\n onYes: function () {\r\n new PJQ.Loader(cloneModal.$('.modal-content'));\r\n PJQ.app.session.project.clone(function (newProject) {\r\n cloneModal.remove();\r\n PJQ.modules.projectWall.initProjectNavigator(newProject.id, \"dashboard\");\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Project cloned successfully'\r\n });\r\n });\r\n }\r\n });\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.isLoggedIn() || !PJQ.app.session.get('ownsPortal');\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"followproject\",\r\n title: \"Follow Project\",\r\n sortOrder: 310,\r\n icon: \"fa-bell\",\r\n isAdmin: false,\r\n hasPrecedingSeparator: true,\r\n route: function () {\r\n new PJQ.views.contacts.BaseEditContactModal({\r\n model: new PJQ.models.projectContacts.ProjectContact({\r\n id: PJQ.app.session.contact.id,\r\n projectId: PJQ.app.session.project.id\r\n }),\r\n alert: \"Please review and update your contact details before registering your account\",\r\n onSave: function () {\r\n new PJQ.views.auth.AuthModal({\r\n contactId: PJQ.app.session.contact.id,\r\n mode: PJQ.app.session.contact.get('userId') > 0 ? 'SIGN_IN' : 'SIGN_UP',\r\n isShowCloseButton: true\r\n });\r\n }\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.isLoggedIn() || PJQ.app.session.contact == null;\r\n }\r\n })\r\n ]),\r\n adminExtras: new PJQ.nav.NavItemGroup([\r\n new PJQ.nav.NavItem({\r\n id: \"copyproject\",\r\n title: \"Copy Project\",\r\n sortOrder: 320,\r\n icon: \"fa-clone\",\r\n isAdmin: true,\r\n hasPrecedingSeparator: true,\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('base.canCopy');\r\n },\r\n route: function () {\r\n let copyModal = new PJQ.views.modals.YesNo({\r\n header: \"Copy Project\",\r\n body: \"Are you sure you want to copy this project?\",\r\n onYes: function () {\r\n new PJQ.Loader(copyModal.$('.modal-content'));\r\n PJQ.app.session.project.copy(function (newProject) {\r\n copyModal.remove();\r\n PJQ.modules.projectWall.initProjectNavigator(newProject.id, \"dashboard\");\r\n PJQ.notifications.notify.successNotify({\r\n message: 'Project copied successfully'\r\n });\r\n });\r\n }\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_COPY_PROJECT);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"orderprints\",\r\n title: \"Order Prints\",\r\n sortOrder: 325,\r\n icon: 'fa-shopping-cart',\r\n isAdmin: true,\r\n hasPermission: function () {\r\n return true;\r\n },\r\n route: function () {\r\n new PJQ.views.files.OrderPrintsModal({\r\n mode: PJQ.constants.files.modes.ALT_PRINT,\r\n project: PJQ.app.session.project\r\n })\r\n },\r\n isDisabled: function () {\r\n return !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PLAN_EXPRESS_PORTAL);\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"bluebookpublish\",\r\n title: \"Message The Blue Book\",\r\n sortOrder: 325,\r\n isAdmin: true,\r\n iconImage: '/assets/modules2/global/images/thebluebook.png',\r\n hasPermission: function () {\r\n return PJQ.app.session.project.hasPermission('messaging.canManage');\r\n },\r\n route: function () {\r\n new PJQ.views.projects.BlueBookPublishModal({\r\n project: PJQ.app.session.project\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_BLUE_BOOK_PUBLISH);\r\n },\r\n extraMarkup: '<li class=\"nav-item\"><div class=\"d-flex justify-content-end\"><a style=\"margin-top:-8px !important;font-weight: 400;font-size: 14px;\" class=\"nav-button-label nav-link p-0 m-0 mr-4 ht-20p lh-20 wd-85p\" target=\"_blank\" href=\"https://www.panteratools.com/the-blue-book-network/\">See Details ></a></div></li>'\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"procorepublish\",\r\n title: \"Publish to Procore\",\r\n sortOrder: 330,\r\n isAdmin: true,\r\n iconImage: '/assets/modules2/global/images/procore.png',\r\n route: function () {\r\n let loader = new PJQ.Loader($('div.nav-body'));\r\n new PJQ.ajax.Request({\r\n endpoint: '/procore/settings/-1'\r\n }).get().done(_.bind(function (response) {\r\n if (loader != null) {\r\n loader.remove();\r\n }\r\n\r\n let fnContinue = function(response, procoreProjectNumber) {\r\n new PJQ.views.projects.ProcorePublishModal({\r\n settings: response,\r\n procoreProjectNumber: procoreProjectNumber\r\n });\r\n };\r\n\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_PROJECT_NUMBER_CUSTOM_FIELD)) {\r\n let customFieldLabel = '', customFieldValue = '', customFieldId = parseInt(PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROCORE_PROJECT_NUMBER_CUSTOM_FIELD));\r\n\r\n _.each(PJQ.app.session.project.customFields.models, function(customField) {\r\n if (customField.get('id') == customFieldId)\r\n customFieldLabel = customField.get('fieldName');\r\n });\r\n\r\n _.each(PJQ.app.session.project.attributes.customFields, function(customFieldValueTemp) {\r\n if (customFieldValueTemp.id == customFieldId)\r\n customFieldValue = customFieldValueTemp.value;\r\n });\r\n\r\n if (_.size(customFieldValue) == 0)\r\n {\r\n PJQ.notifications.notify.errorNotify({\r\n message: customFieldLabel + ' must be entered in order to Publish to Procore'\r\n });\r\n }\r\n else {\r\n fnContinue(response, customFieldValue);\r\n }\r\n }\r\n else {\r\n fnContinue(response);\r\n }\r\n }, this)).fail(_.bind(function (xhr, err, result) {\r\n PJQ.notifications.notify.errorNotify({\r\n message: 'Unable to retrieve Procore settings!'\r\n });\r\n }, this));\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_CLIENT_ID)\r\n || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_ACCESS_REFRESH_TOKEN)\r\n || _.size(PJQ.app.session.project.get('externalProjectId')) > 0;\r\n }\r\n }),\r\n new PJQ.nav.NavItem({\r\n id: \"procoreview\",\r\n title: \"View in Procore\",\r\n sortOrder: 340,\r\n isAdmin: true,\r\n iconImage: '/assets/modules2/global/images/procore.png',\r\n route: function () {\r\n let data = PJQ.app.session.project.get('externalProjectId').substring(8);\r\n new PJQ.views.BaseModal({\r\n header: \"Procore Project\",\r\n body: '<a href=\"https://api.procore.com/' + data + '/project/home\" target=\"_blank\">Click here</a> to open your Procore project in a new window.'\r\n });\r\n },\r\n isDisabled: function () {\r\n return PJQ.app.session.project.get('status') === 'ARCHIVE'\r\n || PJQ.app.session.project.get('status') === 'NEW'\r\n || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_CLIENT_ID)\r\n || !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROCORE_ACCESS_REFRESH_TOKEN)\r\n || (_.size(PJQ.app.session.project.get('externalProjectId')) === 0 || !PJQ.app.session.project.get('externalProjectId').startsWith('PROCORE:'));\r\n }\r\n })\r\n ])\r\n};\r\n\r\nPJQ.views.nav = {};\r\nPJQ.views.nav.AppNavigator = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Navigator'),\r\n subTemplates: {\r\n commands: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'App-Navigator-Commands'),\r\n signUpMessage: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'app-navigator-sign-up-message')\r\n },\r\n itemGroups: [],\r\n isAdmin: true\r\n },\r\n events: {\r\n 'click .nav-link': 'navigate',\r\n 'click .btn-to-top': 'backToTop',\r\n 'click .btn-start-tour': 'startTour'\r\n },\r\n beforeInit: function () {\r\n if (PJQ.app.options.isNavExpanded == null) {\r\n PJQ.app.options.isNavExpanded = window.innerWidth > 768;\r\n }\r\n this.$el.off();\r\n },\r\n expandNav: function (e) {\r\n let $nav = this.$('.app-navigator');\r\n $nav.toggleClass('expanded');\r\n PJQ.app.options.isNavExpanded = $nav.hasClass('expanded');\r\n },\r\n beforeFirstRender: function () {\r\n this.renderHeaderNavExpandButton();\r\n this.renderHeaderSubscription();\r\n },\r\n renderHeaderNavExpandButton: function () {\r\n let $header = $('.skin-header');\r\n if (_.size($header) > 0 && _.size($('.btn-expand-nav')) === 0) {\r\n let bgColor = $header.css('background-color'),\r\n btnColor = _.size(bgColor) > 0 ? PJQ.helpers.colorHelpers.idealLinkColorForBackground(PJQ.helpers.colorHelpers.getHexFromRGB(bgColor)) : '#fff',\r\n $expand = $('<i style=\"color:' + btnColor + ';\" class=\"fad fa-bars btn-expand-nav fa-2x ml-3\"></i>');\r\n $header.prepend($expand);\r\n $expand.on('click', _.bind(this.expandNav, this));\r\n }\r\n },\r\n renderHeaderSubscription: function () {\r\n if (PJQ.app.session.user != null && !PJQ.app.session.get('onAccount') && PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId) {\r\n $('.subscription-name').remove();\r\n $('.start-tour').remove();\r\n\r\n let $header = $('.skin-header'),\r\n showTrial = PJQ.app.session.subscription.get('isFreeTrial') && (PJQ.app.session.subscription.newSubscription != null && PJQ.app.session.subscription.newSubscription.id === PJQ.constants.subscriptions.types.FREE),\r\n $subscription = $('<span class=\"fs-14 subscription-name\"> ' + PJQ.helpers.formatHelpers.upperCaseFirstLetterEachWord(PJQ.app.session.subscription.get('name').toLowerCase()) + (showTrial ? ' Trial' : '') + '</span>');\r\n $header.append($subscription);\r\n if (showTrial) {\r\n let days = PJQ.helpers.dateHelpers.getDateDiff(new Date(PJQ.app.session.subscription.get('trialExpiresOn')), new Date(), 'days') + 1;\r\n let $daysRemaining = $('<span class=\"fs-12\"> (' + days.toString() + 'd remaining)</span>')\r\n $subscription.append($daysRemaining)\r\n }\r\n if (PJQ.app.session.user.get('tourDone') && !PJQ.app.session.get('onAccount') && PJQ.app.session.subscription.get('subscriptionId') > 1) {\r\n let $startTourButton = $('<div class=\"start-tour\" style=\"position: absolute; right: 0; margin-right: 20px;\"><button type=\"button\" class=\"btn btn-link text-light btn-start-tour\">Start Tour</button></div>');\r\n $header.append($startTourButton);\r\n $('.btn-start-tour').on('click', _.bind(function () {\r\n this.startTour();\r\n }, this))\r\n }\r\n }\r\n },\r\n beforeRender: function () {\r\n if (this.options.activeItem != null) {\r\n let mainItem = PJQ.nav.itemGroups.main == null ? null : _.findWhere(PJQ.nav.itemGroups.main.items, {id: this.options.activeItem});\r\n if (mainItem != null) {\r\n // if they are navigating to a main nav item, they will never have a project\r\n // so we make sure its null\r\n PJQ.app.session.project = null;\r\n }\r\n } else {\r\n // there isn't an active item provided, default to the first enabled main item\r\n let defActiveItem = _.find(PJQ.nav.itemGroups.main.items, function (item) {\r\n return !item.getIsDisabled() && item.hasPermission() && item.hasFeature();\r\n });\r\n if (defActiveItem != null) {\r\n this.options.activeItem = defActiveItem.id;\r\n }\r\n }\r\n\r\n this.user = PJQ.app.session.user;\r\n this.project = PJQ.app.session.project;\r\n },\r\n renderData: function () {\r\n return {\r\n project: this.project,\r\n context: this.options.context,\r\n isExpanded: PJQ.app.options.isNavExpanded\r\n };\r\n },\r\n afterRender: function () {\r\n //remove dhtml tooltips for calendar (temporary until old calendar is phased out)\r\n $('.dhtmlXTooltip').remove();\r\n\r\n this.determineCommands();\r\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_TOP_OF_PAGE_BUTTON)) {\r\n $('.scroll-to-top').append('<a id=\"btntotop\" class=\"btn-to-top\" style=\"display: none;\">\\n' +\r\n '<span class=\"fas fa-chevron-up\"></span>\\n' +\r\n '</a>');\r\n this.$('div.nav-content').on('scroll', _.bind(function () {\r\n if (this.$('div.nav-content')[0].scrollTop > 100) {\r\n $('.btn-to-top').fadeIn(300);\r\n\r\n } else {\r\n $('.btn-to-top').fadeOut(300);\r\n }\r\n }, this));\r\n }\r\n\r\n this.setActiveItem(this.options.activeItem);\r\n this.options.activeItem = null;\r\n\r\n this.renderCommands();\r\n this.renderHeader();\r\n this.renderActiveItem(false);\r\n\r\n if (PJQ.app.session.user != null && !PJQ.app.session.get('onAccount') && PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId) {\r\n let trialCookie = PJQ.constants.cookies.SUBSCRIPTION_FREE_TRIAL + \"-\" + PJQ.app.session.user.id.toString();\r\n if (PJQ.app.session.subscription.get('trialExpiresOn') == null && !PJQ.helpers.cookieHelpers.getCookie(trialCookie) && false) {\r\n new PJQ.views.subscriptions.EditSubscriptionModal({\r\n onSave: _.bind(function (type) {\r\n PJQ.helpers.tours.initTour();\r\n }, this)\r\n });\r\n PJQ.helpers.cookieHelpers.setCookie(trialCookie, true, 14);\r\n } else if (!this.options.preventTour && !PJQ.app.navInit && !PJQ.app.session.user.get('tourDone') && PJQ.app.session.subscription.get('subscriptionId') > 1) {\r\n PJQ.app.navInit = true;\r\n PJQ.helpers.tours.initTour();\r\n }\r\n\r\n let expireCookie = PJQ.constants.cookies.SUBSCRIPTION_EXPIRES_ALERT + \"-\" + PJQ.app.session.user.id.toString();\r\n if (PJQ.app.session.subscription.newSubscription != null && !PJQ.helpers.cookieHelpers.getCookie(expireCookie)) {\r\n let expiresOnDays = PJQ.helpers.dateHelpers.getDateDiff(new Date(PJQ.app.session.subscription.get('expiresOn')), new Date(), 'days') + 1;\r\n if (expiresOnDays <= 14 && expiresOnDays > 0) {\r\n let expirationText,\r\n isDowngrade = PJQ.app.session.subscription.newSubscription.id !== PJQ.constants.subscriptions.types.FREE;\r\n if (isDowngrade) {\r\n // its a paid downgrade\r\n expirationText = \"Your current plan will be downgraded in \" + expiresOnDays.toString() + (expiresOnDays === 1 ? \" day\" : \" days\") + \". Upgrade your account to keep your current features! <a class='btn-change-sub no-trial' href='#settings'>Upgrade Now</a>\";\r\n } else {\r\n // its a downgrade to a free account\r\n let isFreeTrial = PJQ.app.session.subscription.get('isFreeTrial');\r\n expirationText = \"Your \" + (isFreeTrial ? \"free trial\" : \"current plan\") + \" will expire in \" + expiresOnDays.toString() + (expiresOnDays === 1 ? \" day\" : \" days\") + \". Upgrade your account to keep your project progress! <a class='btn-change-sub no-trial' href='#settings'>Upgrade Now</a>\";\r\n }\r\n new PJQ.Alert(this.$('.nav-content'), {\r\n type: \"sub-expiration\",\r\n text: expirationText,\r\n isPrepend: true,\r\n cookie: expireCookie,\r\n cookieExpirationDays: expiresOnDays === 1 ? 1 : expiresOnDays / (isDowngrade ? 1.5 : 2) //show this alert every half time (shows more as it gets closer to expiration)\r\n });\r\n }\r\n }\r\n\r\n if (PJQ.app.session.contact && PJQ.app.session.contact.get('isBlacklisted') && !PJQ.app.session.contact.get('isApprovalRequired')) {\r\n new PJQ.views.BaseModal({\r\n header: \"Directory Information Required\",\r\n body: \"Additional information is required in order to be included in the Pantera Directory and begin receiving Project Invites. Please ensure all information is accurate and complete.\",\r\n isShowSecondaryButton: true,\r\n okButtonText: 'Update Information',\r\n secondaryButtonText: 'Cancel',\r\n onOk: _.bind(function () {\r\n window.location.href = 'https://app.panteratools.com/?cg='+PJQ.app.session.contact.get('updateGuid')+'/#register';\r\n }, this)\r\n });\r\n }\r\n }\r\n },\r\n startTour: function () {\r\n new PJQ.views.tours.SubscriptionTourIntro();\r\n },\r\n determineCommands: function () {\r\n if (this.project != null) {\r\n this.projectMenuItems = [];\r\n this.projectMenuItems.push(...PJQ.nav.itemGroups.project.items);\r\n\r\n if (this.project.get('masterUserId') === PJQ.app.session.get('masterUserId')) {\r\n this.projectMenuItems.push(...PJQ.nav.itemGroups.adminExtras.items);\r\n } else {\r\n if (this.project.userMessageTypes != null) {\r\n let userTypeId = PJQ.app.session.contact ? PJQ.app.session.contact.get('userTypeId') : (PJQ.app.session.user ? PJQ.app.session.user.get('userTypeId') : null),\r\n actionItems = _.filter(this.project.userMessageTypes.models, function (item) {\r\n return _.size(item.get('actionButtonText')) > 0 && item.get('userMessageType').toLowerCase() !== 'bid submittal' && (!item.get('userTypeId') || item.get('userTypeId') === userTypeId);\r\n });\r\n\r\n let sortOrder = 300;\r\n _.each(actionItems, function (item, index) {\r\n let menuItem = new PJQ.nav.NavItem({\r\n id: 'msg_' + item.id.toString(),\r\n title: item.get('actionButtonText'),\r\n sortOrder: sortOrder,\r\n icon: \"fa-clone\",\r\n isAdmin: false,\r\n hasPrecedingSeparator: index === 0,\r\n route: _.bind(function () {\r\n new PJQ.views.projects.UserMessageModal({\r\n project: this.project,\r\n userMessageTypeId: item.id\r\n });\r\n }, this)\r\n });\r\n this.projectMenuItems.push(menuItem);\r\n\r\n sortOrder = sortOrder + 10;\r\n }, this);\r\n }\r\n this.projectMenuItems.push(...PJQ.nav.itemGroups.nonAdminExtras.items);\r\n }\r\n }\r\n },\r\n refreshCommands: function () {\r\n this.determineCommands();\r\n this.renderCommands();\r\n },\r\n renderCommands: function () {\r\n this.renderSubTemplate(false, this.options.subTemplates.commands, this.$('.nav-commands-container'), {\r\n project: this.project,\r\n projectMenuItems: this.projectMenuItems,\r\n activeItem: this.activeItem,\r\n context: this.options.context ? this.options.context : \"\"\r\n });\r\n },\r\n setActiveItem: function (id) {\r\n let result = PJQ.nav.itemGroups.main == null ? null : _.findWhere(PJQ.nav.itemGroups.main.items, {id: id});\r\n if (result != null) {\r\n PJQ.app.session.project = null;\r\n this.project = null;\r\n if (result.hasRoute) {\r\n this.activeItem = result;\r\n }\r\n } else if (this.project != null) {\r\n result = _.findWhere(this.projectMenuItems, {id: id});\r\n if (result != null) {\r\n if (result.hasRoute) {\r\n this.activeItem = result;\r\n }\r\n }\r\n } else {\r\n this.activeItem = null;\r\n }\r\n\r\n // they tried to navigate to a disabled active item\r\n if (PJQ.app.session.project) {\r\n if (this.activeItem == null || this.activeItem.getIsDisabled()) {\r\n if (this.project != null) {\r\n let isProjectAdmin = PJQ.app.session.get('masterUserId') === this.project.get('masterUserId');\r\n this.activeItem = _.find(PJQ.nav.itemGroups.project.items, function (item) {\r\n return item.hasFeature() && item.hasPermission() && !item.getIsDisabled() && (item.getIsAdmin() == null || isProjectAdmin === item.getIsAdmin());\r\n });\r\n } else {\r\n this.activeItem = _.find(PJQ.nav.itemGroups.main.items, function (item) {\r\n return item.hasFeature() && item.hasPermission() && !item.getIsDisabled();\r\n });\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n renderHeader: function () {\r\n if (this.user != null) {\r\n this.userHeader = new PJQ.views.nav.UserHeader({\r\n el: this.$('.app-nav-user-header'),\r\n model: this.user\r\n });\r\n } else if (this.userHeader != null) {\r\n this.userHeader.remove();\r\n }\r\n\r\n if (this.project != null) {\r\n this.projectHeader = new PJQ.views.nav.ProjectHeader({\r\n el: this.$('.app-nav-project-header'),\r\n model: this.project\r\n });\r\n } else if (this.projectHeader != null) {\r\n this.projectHeader.remove();\r\n }\r\n },\r\n renderActiveItem: function (triggerRoute) {\r\n let $navBody = this.$('.nav-body');\r\n if (this.activeItem != null) {\r\n if (this.activeItem.route(this.options.viewOptions, triggerRoute, $navBody) === false) {\r\n return;\r\n }\r\n\r\n if (this.activeItem.id === 'dashboard') {\r\n $navBody.addClass('module-content-gray');\r\n } else {\r\n $navBody.removeClass('module-content-gray');\r\n }\r\n\r\n // if (this.activeItem.requireSignUp) {\r\n // this.renderSignUpMessage($navBody);\r\n // } else {\r\n // this.activeItem.render($navBody, this.options.viewOptions != null ? this.options.viewOptions : {});\r\n // }\r\n\r\n this.activeItem.render($navBody, this.options.viewOptions != null ? this.options.viewOptions : {});\r\n\r\n if (this.project != null && PJQ.app.session.get('masterUserId') === this.project.get('masterUserId') && this.activeItem.isPrimaryProjectManagerCheckExempt !== true && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_WALL_PRIMARY_PROJECT_MANAGER_REQUIRED) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK)) {\r\n let fnPMR = _.bind(function () {\r\n // fetch project contacts\r\n PJQ.app.session.project.fetchProjectContacts(_.bind(function () {\r\n let primaryPM = null;\r\n _.each(PJQ.app.session.project.projectContacts.models, _.bind(function (projectContact) {\r\n if (projectContact.get('isPrimary')) {\r\n _.each(PJQ.app.session.userTypes.models, _.bind(function (userType) {\r\n // see if userType is a PM\r\n if (userType.get('userTypeId') === projectContact.get('userTypeId') && userType.get('isProjectManager'))\r\n primaryPM = projectContact;\r\n }, this));\r\n }\r\n }, this));\r\n\r\n if (!primaryPM) {\r\n new PJQ.views.BaseModal({\r\n header: \"Primary Project Manager Required\",\r\n body: 'Please add or select a Primary Project Manager in the Project Contacts list.',\r\n isShowCancelButton: false,\r\n onOk: _.bind(function () {\r\n PJQ.app.router.navigate('projects/' + PJQ.app.session.project.get('projectId') + '/contacts', {\r\n trigger: true\r\n });\r\n }, this)\r\n });\r\n }\r\n }, this));\r\n }, this);\r\n\r\n let value = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_WALL_PRIMARY_PROJECT_MANAGER_REQUIRED);\r\n if (value == 'true') {\r\n fnPMR();\r\n } else {\r\n let cfid = value.split('|')[0], targetValues = value.split('|')[1].split(',');\r\n _.each(PJQ.app.session.project.get('customFields'), _.bind(function (fieldValue) {\r\n if (parseInt(cfid) === fieldValue.id) {\r\n if (targetValues.indexOf(fieldValue.value.toString()) !== -1)\r\n fnPMR();\r\n }\r\n }, this));\r\n }\r\n }\r\n\r\n document.title = this.activeItem.getDocumentTitle();\r\n\r\n // this is here to allow for initial nav routing within it's content\r\n // for example, on RFI if we want to allow for /rfis/{rfiId}\r\n // we don't want the initial load of the tab to route the to /rfis\r\n if (this.options.viewOptions != null && this.options.viewOptions.shouldDoFirstRoute === false) {\r\n this.options.viewOptions.shouldDoFirstRoute = null;\r\n return;\r\n }\r\n\r\n this.options.viewOptions = null;\r\n }\r\n },\r\n renderSignUpMessage: function ($el) {\r\n this.renderSubTemplate(false, this.options.subTemplates.signUpMessage, $el);\r\n },\r\n backToTop: function () {\r\n this.$('div.nav-content').animate({\r\n scrollTop: 0\r\n }, 500);\r\n },\r\n navigate: function (e) {\r\n if (this.activeItem.leaveView != null && typeof this.activeItem.leaveView === \"function\") {\r\n this.activeItem.leaveView();\r\n }\r\n if (this.$(e.currentTarget).hasClass('disabled'))\r\n return;\r\n let selectedItemId = this.$(e.currentTarget).data('action');\r\n if (_.size(selectedItemId) > 0 && (this.activeItem == null || selectedItemId !== this.activeItem.id)) {\r\n let activeItem = this.setActiveItem(selectedItemId);\r\n if (activeItem != null) {\r\n // only re-render the nav if this menu item actually has a render function\r\n // it could be an item that does some logic on route()\r\n if (!activeItem.hasRoute) {\r\n if (typeof activeItem.route === 'function') {\r\n activeItem.route();\r\n } else if (typeof activeItem.render === 'function') {\r\n this.render();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.nav.UserHeader = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Nav-User-Header')\r\n },\r\n beforeFirstRender: function () {\r\n //this.listenTo(this.model, 'sync change:projectName change:address1 change:address2 change:city change:state change:zip change:isFavorite change:bidsDue', this.render);\r\n },\r\n beforeRender: function () {\r\n this.renderData = {\r\n model: this.model\r\n }\r\n }\r\n});\r\n\r\nPJQ.views.nav.ProjectHeader = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Nav-Project-Header')\r\n },\r\n events: {\r\n 'click .btn-favorite-project': 'favoriteProject',\r\n 'change .input-project-online': 'projectOnlineChanged',\r\n 'click .btn-project-map': 'projectMap'\r\n },\r\n beforeFirstRender: function () {\r\n this.listenTo(this.model, 'sync change:projectName change:address1 change:address2 change:city change:state change:zip change:isFavorite change:bidsDue change:isOnline', this.render);\r\n },\r\n beforeRender: function () {\r\n this.renderData = {\r\n model: this.model\r\n }\r\n },\r\n projectMap: function () {\r\n new PJQ.views.projects.ProjectMapModal();\r\n },\r\n favoriteProject: function () {\r\n this.model.set('isFavorite', this.model.get('isFavorite') === false, {\r\n silent: true\r\n });\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.model.id\r\n },\r\n {\r\n endpoint: 'favorite'\r\n }\r\n ], [\r\n {\r\n parameter: 'isFavorite',\r\n value: this.model.get('isFavorite')\r\n }\r\n ])\r\n }).put().done(_.bind(function () {\r\n this.render();\r\n }, this));\r\n },\r\n projectOnlineChanged: function () {\r\n let isOnline = this.$('.input-project-online').prop('checked');\r\n this.model.set('isOnline', isOnline);\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'projects',\r\n value: this.model.id\r\n }\r\n ], [\r\n {\r\n parameter: 'isOnline',\r\n value: isOnline\r\n }\r\n ])\r\n }).patch().done(_.bind(function () {\r\n let alertMessage;\r\n if (isOnline) {\r\n alertMessage = \"Project set to online\";\r\n } else {\r\n alertMessage = \"Project set to offline\";\r\n }\r\n PJQ.notifications.notify.successNotify({\r\n message: alertMessage\r\n });\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.views.nav.RegisterDirectory = PJQ.views.BaseView.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'register-directory'),\r\n },\r\n events: {\r\n 'click .btn-join-directory': 'joinDirectory'\r\n },\r\n joinDirectory: function () {\r\n PJQ.app.session.joinDirectory(_.bind(function () {\r\n if (typeof this.options.onRegister === 'function') {\r\n this.options.onRegister();\r\n }\r\n }, this));\r\n }\r\n});\r\n\r\nPJQ.views.modals.RegisterDirectoryModal = PJQ.views.BaseModal.extend({\r\n defaults: {\r\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-register-directory'),\r\n },\r\n beforeModalCreated: function () {\r\n this.options = _.defaults({\r\n onOk: _.bind(function () {\r\n PJQ.app.session.joinDirectory(_.bind(function () {\r\n if (typeof this.options.onRegister === 'function') {\r\n this.options.onRegister();\r\n }\r\n this.removeModal();\r\n }, this));\r\n }, this)\r\n }, this.options);\r\n }\r\n});\r\n","PJQ.views.collapse = {};\nPJQ.views.collapse.BaseCollapse = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\tonShown: null\n\t},\n\tevents: {\n\t\t\"shown.bs.collapse\": \"onShown\",\n\t\t\"hidden.bs.collapse\": \"renderChevrons\",\n\t\t\"show.bs.collapse\": \"renderChevrons\",\n\t\t\"hide.bs.collapse\": \"renderChevrons\"\n\t},\n\tafterRender: function () {\n\t\tthis.$el.collapse();\n\t\tthis.renderChevrons();\n\t},\n\tonShown: function (e) {\n\t\tif (typeof this.options.onShown === 'function') {\n\t\t\tlet id = e ? $(e.target).attr('id') : null;\n\t\t\tthis.options.onShown(id);\n\t\t}\n\t\tthis.renderChevrons();\n\t},\n\trenderChevrons: function () {\n\t\tthis.$('.card-header[data-target]').each(function () {\n\t\t\tlet chevron,\n\t\t\t\theader = $(this),\n\t\t\t\ttarget = header.data('target'),\n\t\t\t\tcollapseContainer = $(target);\n\t\t\theader.css('position', 'relative');\n\t\t\tif (_.size(header.find('.chevron')) === 0) {\n\t\t\t\tchevron = $('<span />', {\n\t\t\t\t\tclass: 'chevron fal fa-chevron-down position-absolute right-10p top-35 fs-20 text-dark'\n\t\t\t\t});\n\t\t\t\theader.append(chevron);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchevron = header.find('.chevron');\n\t\t\t}\n\t\t\tchevron.removeClass(collapseContainer.hasClass('show') ? 'fa-chevron-down' : 'fa-chevron-up');\n\t\t\tchevron.addClass(collapseContainer.hasClass('show') ? 'fa-chevron-up' : 'fa-chevron-down');\n\t\t});\n\t}\n});\n","PJQ.colors = {};\n\nPJQ.colors.ColorPicker = class {\n\tconstructor($el, options = {}) {\n\t\tthis.$el = $el;\n\t\tthis.options = _.defaults(options, {\n\t\t\tformat: 'auto'\n\t\t});\n\t\tthis.initPicker();\n\t}\n\n\tinitPicker() {\n\t\tthis.$el.colorpicker(this.options).on('change', _.bind(function (e) {\n\t\t\tif (typeof this.options.onChange === 'function') {\n\t\t\t\tthis.options.onChange(e.value);\n\t\t\t}\n\t\t}, this));\n\t}\n\n\tgetColor() {\n\t\treturn this.$el.colorpicker('getValue')\n\t}\n\n\tsetColor(color) {\n\t\treturn this.$el.colorpicker('setValue', color)\n\t}\n};\n\nPJQ.colors.SimpleColorPicker = class {\n\tconstructor($el, options = {}) {\n\t\tthis.colors = [\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.BLUE,\n\t\t\t\tname: 'Blue'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.PURPLE,\n\t\t\t\tname: 'Purple'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.PINK,\n\t\t\t\tname: 'Pink'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.RED,\n\t\t\t\tname: 'Red'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.ORANGE,\n\t\t\t\tname: 'Orange'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.YELLOW,\n\t\t\t\tname: 'Yellow'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.GREEN,\n\t\t\t\tname: 'Green'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.CYAN,\n\t\t\t\tname: 'Cyan'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.GRAY,\n\t\t\t\tname: 'Gray'\n\t\t\t},\n\t\t\t{\n\t\t\t\thex: PJQ.constants.colors.BLACK,\n\t\t\t\tname: 'Black'\n\t\t\t}\n\t\t];\n\n\t\tthis.$el = $el;\n\t\tthis.$picker = null;\n\t\tthis.color = options.color ? options.color : this.colors[0].hex;\n\t\tthis.options = options;\n\t\tthis.render();\n\t}\n\n\tsetColor(color){\n\t\tthis.color = color;\n\t\tthis.render();\n\t}\n\n\trender() {\n\t\tlet template = new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'color-picker');\n\t\tPJQ.templating.TemplateRenderer.renderTemplate(true, template, this.$el, {\n\t\t\tcolors: this.colors,\n\t\t\tcolor: this.color\n\t\t}, _.bind(function ($el) {\n\t\t\tthis.$picker = $el;\n\t\t\t$el.find('.color-item').on('click', _.bind(this.colorPicked, this));\n\t\t}, this));\n\t}\n\n\ttoggle() {\n\t\tif (this.$picker) {\n\t\t\tif (this.$picker.hasClass('hidden')) {\n\t\t\t\tthis.$picker.removeClass('hidden');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.$picker.addClass('hidden');\n\t\t\t}\n\t\t}\n\t}\n\n\tshow() {\n\t\tif (this.$picker) {\n\t\t\tthis.$picker.removeClass('hidden');\n\t\t}\n\t}\n\n\thide() {\n\t\tif (this.$picker) {\n\t\t\tthis.$picker.addClass('hidden');\n\t\t}\n\t}\n\n\tcolorPicked(e) {\n\t\te.stopPropagation();\n\t\tthis.color = $(e.currentTarget).data('color');\n\t\tif (typeof this.options.onColorPicked === 'function') {\n\t\t\tthis.options.onColorPicked(this.color);\n\t\t}\n\t\tthis.hide();\n\t}\n\n\tremove(e) {\n\t\tif (this.$picker && this.$picker.length > 0) {\n\t\t\tthis.$picker.remove();\n\t\t}\n\t}\n}","PJQ.views.comments = {};\n\nPJQ.views.comments.CommentsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-add-comment'),\n\t\tonAddComment: null,\n\t\tonCancel: null\n\t},\n\tevents: {\n\t\t'keyup .textarea-comment': 'commentChanged',\n\t\t'click .btn-add-comment': 'addComment'\n\t},\n\tcommentChanged: function () {\n\t\tthis.$('.btn-add-comment').prop('disabled', _.size(this.$('.textarea-comment').val()) === 0);\n\t},\n\taddComment: function () {\n\t\tif (typeof this.options.onAddComment === 'function') {\n\t\t\tthis.options.onAddComment(this.$('.textarea-comment').val());\n\t\t}\n\t\tthis.removeModal();\n\t}\n});","PJQ.models.companies = {};\n\nPJQ.models.companies.UserLimits = PJQ.models.BaseModel.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'userlimits'\n }\n ]);\n }\n});","PJQ.models.contacts.ContactImportUpload = PJQ.models.BaseModel.extend({\n defaults: {\n isFileAPI: true\n },\n idAttribute: 'contactImportUploadId',\n endpoint: function (urlOptions) {\n let params = [];\n if (urlOptions != null) {\n if (urlOptions.overwrite) {\n params.push({\n parameter: 'overwrite',\n value: true\n });\n } else if (urlOptions.skip) {\n params.push({\n parameter: 'skip',\n value: true\n });\n }\n\n if (urlOptions.createGroups) {\n params.push({\n parameter: 'createGroups',\n value: true\n });\n }\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'imports',\n value: this.id\n }\n ], params);\n },\n parse: function (model) {\n this.columns = new PJQ.collections.contacts.ContactImportUploadColumns(model ? model.columns : null);\n return model;\n }\n});\n\nPJQ.collections.contacts.ContactImportUploads = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.ContactImportUpload,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'imports'\n }\n ]);\n }\n});\n\nPJQ.models.contacts.ContactImportUploadColumn = PJQ.models.BaseModel.extend({\n idAttribute: 'index',\n parse: function (model) {\n if (model && model.customField != null) {\n this.customField = new PJQ.models.customFields.CustomField(model.customField);\n }\n return model;\n }\n});\n\nPJQ.collections.contacts.ContactImportUploadColumns = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.contacts.ContactImportUploadColumn\n});\n\nPJQ.views.contacts.ContactsImportModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Contacts-Import'),\n minWidth: '70%',\n maxWidth: '90%',\n contextUpload: null\n },\n events: {\n 'click .btn-export-template': 'exportTemplate',\n 'click .btn-import': 'import',\n 'click .btn-cancel': 'cancel'\n },\n renderData: function () {\n return {\n contextUpload: this.options.contextUpload\n };\n },\n afterRender: function () {\n if (this.collection == null) {\n this.collection = new PJQ.collections.contacts.ContactImportUploads();\n this.collection.fetch({\n success: _.bind(function () {\n this.renderUI();\n }, this)\n });\n } else {\n this.renderUI();\n }\n },\n renderUI: function () {\n if (this.options.contextUpload != null) {\n this.renderUploadEdit();\n } else {\n this.renderImportUploadPicker();\n }\n },\n renderImportUploadPicker: function () {\n let $container = this.$('.contacts-import-container');\n new PJQ.views.contacts.ContactsImportUploadsSelect({\n el: $container,\n collection: this.collection,\n viewImportUploadCallback: _.bind(function (upload) {\n upload.fetch({\n success: _.bind(function () {\n $container.empty();\n new PJQ.Loader($container);\n this.options.contextUpload = upload;\n this.render();\n }, this)\n });\n }, this)\n });\n },\n renderUploadEdit: function () {\n let $container = this.$('.contacts-import-container');\n this.editor = new PJQ.views.contacts.ContactsImportUploadEdit({\n el: $container,\n model: this.options.contextUpload,\n onDone: _.bind(function () {\n this.collection.fetch({\n success: _.bind(function () {\n this.options.contextUpload = null;\n this.render();\n }, this)\n });\n }, this),\n onCancel: _.bind(function () {\n this.renderImportUploadPicker();\n }, this)\n });\n },\n exportTemplate: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'imports'\n },\n {\n endpoint: 'template'\n }\n ]));\n },\n import: function () {\n this.editor.import();\n },\n cancel: function () {\n this.options.contextUpload = null;\n this.render();\n }\n});\n\nPJQ.views.contacts.ContactsImportUploadsSelect = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Import-Uploads-Select')\n },\n events: {\n 'click .view-contact-import-upload': 'viewImportUpload',\n 'click .delete-contact-import-upload': 'deleteImportUpload'\n },\n beforeRender: function () {\n this.renderData = {\n collection: this.collection\n };\n },\n afterRender: function () {\n this.renderUploads();\n this.renderFileUploader();\n },\n renderUploads: function () {\n _.each(this.collection.models, function (model) {\n model.set('displayUploadedOn', PJQ.helpers.dateHelpers.getDateString(new Date(model.get('uploadedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME))\n });\n\n this.uploadsDataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.contacts-import-upload-data-table'),\n data: this.collection.models,\n language: {\n zeroRecords: \"You haven't uploaded any contact imports yet\"\n },\n isHideSearch: true,\n columns: [\n {\"data\": \"attributes.fileName\", \"title\": \"File Name\"},\n {\"data\": \"attributes.uploadedBy\", \"title\": \"Uploaded By\"},\n {\"data\": \"attributes.displayUploadedOn\", \"title\": \"Uploaded On\"},\n {\n \"title\": \"\",\n \"width\": \"80px\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": function (data, type, row) {\n let status = row.get('status');\n if (status === 1) {\n return '<span class=\"text-info fs-16 font-weight-light\">Processing...</span>';\n } else if (status === 2) {\n return '<span class=\"text-success fs-16 font-weight-light\">Imported</span>';\n } else {\n return '<div class=\"text-align-center\"><button type=\"button\" class=\"btn btn-info view-contact-import-upload mr-1\"><i class=\"fal fa-pencil\"></i></button><button type=\"button\" class=\"btn btn-danger delete-contact-import-upload\"><i class=\"fal fa-trash\"></i></button></div>';\n }\n }\n }\n ],\n onRowDoubleClick: _.bind(function (row) {\n let im = row.data();\n if (im.get('status') === 0) {\n this.options.viewImportUploadCallback(im);\n }\n }, this)\n });\n },\n renderFileUploader: function () {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.contacts-import-file-upload'),\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'contacts'\n },\n {\n endpoint: 'imports'\n }\n ]),\n isRemoveOnComplete: true,\n onSuccess: _.bind(function () {\n this.collection.fetch({\n success: _.bind(function () {\n this.renderUploads();\n }, this)\n })\n }, this)\n });\n },\n viewImportUpload: function (e) {\n let row = this.uploadsDataTable.getRow($(e.currentTarget).parents('tr'));\n this.options.viewImportUploadCallback(row.data());\n },\n deleteImportUpload: function (e) {\n let row = this.uploadsDataTable.getRow($(e.currentTarget).parents('tr')),\n upload = row.data();\n\n upload.destroy();\n this.collection.remove(upload);\n row.remove();\n this.uploadsDataTable.refresh();\n }\n});\n\nPJQ.views.contacts.ContactsImportUploadEdit = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contacts-Import-Uploads-Edit')\n },\n events: {\n 'click .btn-map-groups': 'mapGroups',\n 'click .delete-contact-import-upload-row': 'deleteRow',\n 'click .btn-edit-groups': 'editGroups',\n 'click .btn-edit-work-areas': 'editWorkAreas',\n 'keyup .input-text': 'textValueChanged',\n 'keydown .input-int': 'numbersOnly',\n 'keyup .input-int': 'intValueChanged',\n 'change select.input-state': 'stateValueChanged',\n 'change select.input-country': 'countryValueChanged',\n 'keyup .input-phone': 'phoneValueChanged',\n 'change select.input-bool': 'boolValueChanged',\n 'change select.input-choice': 'singleChoiceValueChanged',\n 'change select.input-user-type': 'userTypeValueChanged'\n },\n afterRender: function () {\n PJQ.app.session.fetchUserGroups(null, _.bind(function (groups) {\n this.groups = groups;\n\n _.each(this.model.get('rows'), _.bind(function(row) {\n _.each(PJQ.app.session.userTypes.getByIsCompany(false), _.bind(function (userType) {\n if (_.size(row.columnData.userTypeId) > 0 && userType.get('name').toLowerCase() === row.columnData.userTypeId.toLowerCase().trim() ||\n userType.get('userTypeId') === parseInt(row.columnData.userTypeId))\n row.columnData.userTypeId = userType.get('userTypeId');\n }, this));\n }, this));\n\n this.renderImportUploadData();\n }, this));\n\n this.$el.closest('.modal').find('.cb-overwrite').on('change', _.bind(this.overwriteOptionChanged, this));\n },\n deleteRow: function (e) {\n let $target = $(e.currentTarget),\n row = this.dataTable.getRow($target.closest('tr'));\n this.dataTable.removeRow(row);\n this.model.set('rows', _.filter(this.model.get('rows'), function (exRow) {\n return exRow.index !== row.data().index;\n }));\n },\n numbersOnly: function (e) {\n return PJQ.helpers.inputHelpers.numbersOnly(e);\n },\n textValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData[attr] = $target.val();\n },\n intValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr')),\n parsedVal = parseInt($target.val());\n row.data().columnData[attr] = isNaN(parsedVal) ? 0 : parsedVal;\n },\n stateValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData[attr] = $target.val();\n },\n countryValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n $row = $target.closest('tr'),\n row = this.dataTable.getRow($row),\n country = $target.val();\n\n if (country !== row.data().columnData[attr]) {\n let $state = $row.find('.input-state'),\n $options = this.getStateOptions(country, $state.val());\n $state.empty();\n $state.append($options);\n\n PJQ.helpers.inputHelpers.inputMaskZip($row.find('.input-zip'), country);\n }\n\n row.data().columnData[attr] = country;\n },\n getUserTypeOptions: function(selectedUserTypeId) {\n let options = '<option value=\"\">Select Value</option>';\n\n _.each(PJQ.app.session.userTypes.getByIsCompany(false), _.bind(function(userType) {\n options += '<option ' + (selectedUserTypeId === userType.get('userTypeId') ? 'selected' : '') + ' value=\"' + userType.get('userTypeId') + '\">' + userType.get('name') + '</option>';\n }, this));\n\n return options;\n },\n userTypeValueChanged: function (e) {\n let $target = $(e.currentTarget),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData['userTypeId'] = $target.val();\n },\n getStateOptions: function (country, selectedState) {\n let options = '<option value=\"\">Select Value</option>';\n _.each(PJQ.constants.states[_.size(country) === 0 ? \"us\" : country.toLowerCase()], function (state) {\n let lowerAbbr = state.abbreviation.toLowerCase();\n options += '<option ' + (selectedState === lowerAbbr || selectedState === state.name.toLowerCase() ? 'selected' : '') + ' value=\"' + lowerAbbr + '\">' + state.abbreviation.toUpperCase() + '</option>';\n });\n return options;\n },\n phoneValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData[attr] = PJQ.helpers.formatHelpers.numbersOnly($target.val());\n },\n boolValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData[attr] = $target.val() === 'true';\n },\n singleChoiceValueChanged: function (e) {\n let $target = $(e.currentTarget),\n attr = $target.data('p-bind'),\n row = this.dataTable.getRow($target.closest('tr'));\n row.data().columnData[attr] = $target.val();\n },\n beforeRender: function () {\n this.renderData = {\n model: this.model\n };\n },\n getColumnWidth: function (column) {\n let width = null;\n switch (column.get('attribute').toLowerCase()) {\n case 'companyname':\n case 'contactname':\n width = '150px';\n break;\n case 'title':\n width = '100px';\n break;\n case 'email':\n width = '200px';\n break;\n case 'address1':\n case 'address2':\n width = '120px';\n break;\n case 'notes':\n width = '200px';\n break;\n case 'groups':\n width = '100px';\n break;\n }\n\n if (width == null) {\n switch (column.get('type').toLowerCase()) {\n case 'choice':\n width = '80px';\n break;\n case 'int':\n width = '60px';\n break;\n case 'bool':\n width = '50px';\n break;\n case 'phone':\n width = '100px';\n break;\n case 'text':\n width = '100px';\n break;\n case 'regions':\n case 'groups':\n case 'workareas':\n width = '80px';\n break;\n case 'state':\n case 'country':\n case 'zip':\n width = '50px';\n break;\n case 'usertype':\n width = '85px';\n break;\n }\n }\n return width;\n },\n renderImportUploadData: function () {\n this.unmatchedGroups = [];\n let columns = [],\n noEmailOrFax = false;\n _.each(this.model.columns.models, function (column) {\n let attrCamel = PJQ.helpers.objectHelpers.convertObjectCamelcase(column.get('attribute'));\n columns.push({\n data: \"columnData.\" + attrCamel,\n title: column.get('name'),\n width: this.getColumnWidth(column),\n render: _.bind(function (data, type, row) {\n if (type === 'sort' || type === 'type')\n return data;\n\n let input,\n isValid = true;\n switch (column.get('type').toLowerCase()) {\n case 'choice':\n if (column.customField != null) {\n let options = '<option value=\"\">No Value</option>';\n _.each(column.customField.choices.models, function (choice) {\n let selected;\n if (PJQ.helpers.objectHelpers.refinedType(data) === 'array') {\n selected = data && data.indexOf(choice.id) !== -1;\n } else {\n selected = data === choice.id;\n }\n options += '<option ' + (selected ? 'selected' : '') + ' value=\"' + choice.id + '\">' + choice.get('choiceName') + '</option>';\n });\n\n input = '<div class=\"d-flex align-items-center ht-100 wd-100\"><select data-p-bind=\"' + attrCamel + '\" class=\"form-control max-wd-150p input-choice ' + (column.customField.get('isMultipleChoice') ? 'input-multiple-choice' : '') + '\">';\n input += options;\n input += '</select>';\n input += '</div>';\n }\n break;\n case 'bool':\n input = '<select class=\"form-control input-bool\" data-p-bind=\"' + attrCamel + '\">';\n input += '<option value=\"\">Select Value</option>';\n input += '<option value=\"true\" ' + (data === true ? 'selected' : '') + '>Yes</option>';\n input += '<option value=\"false\" ' + (data === false ? 'selected' : '') + ' >No</option>';\n input += '</select>';\n break;\n case 'state':\n let selectedState = data != null ? data.toLowerCase() : '';\n input = '<select class=\"form-control max-wd-150p input-state\">';\n input += this.getStateOptions(row.columnData.country, selectedState);\n input += '</select>';\n break;\n case 'usertype':\n input = '<select class=\"form-control max-wd-100p input-user-type\">';\n input += this.getUserTypeOptions(row.columnData.userTypeId);\n input += '</select>';\n break;\n case 'zip':\n isValid = !(_.size(data) > 0 && !PJQ.helpers.validators.validateZip(data));\n input = '<input title=\"original: ' + data + '\" type=\"text\" data-p-bind=\"' + attrCamel + '\" class=\"form-control input-text input-zip' + (!isValid ? ' bg-danger-transparent' : '') + '\" value=\"' + (data != null ? data : \"\") + '\">';\n break;\n case 'country':\n let country = data != null ? data.toLowerCase() : '';\n input = '<select title=\"original: ' + data + '\" class=\"form-control input-country\" data-p-bind=\"' + attrCamel + '\"><option value=\"US\" ' + (country === 'us' ? 'selected' : '') + '>US</option><option value=\"CA\" ' + (country === 'ca' ? 'selected' : '') + ' >CA</option></select>';\n break;\n case 'int':\n input = '<input title=\"original: ' + data + '\" type=\"number\" data-p-bind=\"' + attrCamel + '\" class=\"form-control input-int\" value=\"' + (data != null ? data : \"\") + '\">';\n break;\n case 'phone':\n isValid = true;\n if (column.get('attribute').toLowerCase() === \"fax\" || column.get('attribute').toLowerCase() === \"email\") {\n isValid = _.size(row.columnData.email) > 0 || _.size(row.columnData.fax) > 0;\n noEmailOrFax = noEmailOrFax || !isValid;\n }\n input = '<input type=\"text\" title=\"original: ' + data + '\" data-p-bind=\"' + attrCamel + '\" class=\"form-control input-phone' + (!isValid ? ' bg-danger-transparent' : '') + '\" value=\"' + (data != null ? data : \"\") + '\">';\n break;\n case 'groups':\n let matchResult = this.getColumnGroupNames(data),\n pf = _.size(matchResult.unmatched) > 0;\n this.unmatchedGroups = _.union(this.unmatchedGroups, matchResult.unmatched)\n input = '<div class=\"d-flex align-items-center wd-100 ht-100 ' + (pf ? 'bg-primary-transparent' : '') + '\"><button type=\"button\" title=\"original: ' + data + '\" class=\"btn btn-link btn-edit-groups\">' + _.size(matchResult.matched).toString() + ' selected</button>';\n if (pf) {\n input += '<i class=\"fad fa-history ml-1\" title=\"original: ' + data + '\"></i>';\n }\n input += '</div>';\n break;\n case 'regions':\n let regions = data != null ? data.split(',') : [];\n input = '<button type=\"button\" title=\"original: ' + data + '\" class=\"btn btn-link btn-edit-regions\">' + _.size(regions).toString() + ' selected</button>';\n break;\n case 'workareas':\n input = '<button type=\"button\" class=\"btn btn-link btn-edit-work-areas\">' + _.size(data).toString() + ' selected</button>';\n break;\n case 'text':\n default:\n let rowVal = data;\n isValid = true;\n if (column.get('attribute').toLowerCase() === \"fax\" || column.get('attribute').toLowerCase() === \"email\") {\n if (column.get('attribute').toLowerCase() === \"email\" && rowVal != null && rowVal.indexOf('<') !== -1 && rowVal.indexOf('>') !== -1) {\n let regexp = /<(.*?)>/g;\n rowVal = regexp.exec(rowVal)[1];\n }\n\n isValid = _.size(rowVal) > 0 || _.size(row.columnData.fax) > 0;\n noEmailOrFax = noEmailOrFax || !isValid;\n }\n input = '<input type=\"text\" title=\"original: ' + data + '\" data-p-bind=\"' + attrCamel + '\" class=\"form-control input-text' + (!isValid ? ' bg-danger-transparent' : '') + '\" value=\"' + (rowVal != null ? rowVal : \"\") + '\">';\n break;\n }\n return input;\n }, this)\n });\n }, this);\n columns.push({\n title: \"\",\n defaultContent: '<button type=\"button\" class=\"btn btn-danger delete-contact-import-upload-row\"><i class=\"fal fa-trash\"></i></button>',\n orderable: false,\n searchable: false\n });\n\n _.each(this.model.get('rows'), function (row) {\n if (row.columnData.groups != null && row.columnData.groups.indexOf(',') === -1 && row.columnData.groups.indexOf('|') === -1) {\n row.columnData.groups = row.columnData.groups + ',';\n }\n });\n\n let $table = this.$('.contact-import-upload-data-table'),\n self = this;\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: $table,\n rowId: \"index\",\n autoWidth: false,\n isHideSearch: true,\n data: this.model.get('rows'),\n columns: columns,\n isOverflowAuto: true,\n onTableDraw: function () {\n PJQ.helpers.inputHelpers.inputMaskPhone($table.find('.input-phone'));\n $table.find('.input-multiple-choice').each(function () {\n let attr = $(this).data('p-bind');\n new PJQ.inputs.Selectpicker({\n el: $(this),\n isMultiple: true,\n onChange: _.bind(function (value) {\n let row = self.dataTable.getRow($(this).parents('tr'));\n row.data().columnData[attr] = value;\n }, this)\n });\n });\n\n $table.find('th').each(function (index) {\n let column = self.model.columns.models[index];\n if (column != null) {\n $(this).css('min-width', self.getColumnWidth(column));\n }\n });\n\n let umGroups = _.size(self.unmatchedGroups) > 0;\n if ((umGroups || noEmailOrFax) && self.importAlert == null) {\n let message = '';\n if (noEmailOrFax) {\n message += \"Some of the imported contacts do not have an email or fax number, these are highlighted in red.\";\n }\n if (umGroups) {\n if (_.size(message) > 0) {\n message += '<br/>'\n }\n let groupLabel = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL);\n message += 'Some of the imported contacts have groups that do not exist in the system. If you do not map them by clicking <strong><a href=\"javascript:void(0)\" class=\"btn-map-groups\">Map ' + (groupLabel ? groupLabel : 'Groups') + '</a></strong>, these groups will be created automatically.';\n }\n\n self.importAlert = new PJQ.Alert(self.$el, {\n type: 'primary',\n text: message,\n isPrepend: true\n })\n }\n }\n });\n\n let $footer = this.$el.closest('.modal-content').find('.modal-footer');\n $footer.find('.btn-map-groups').remove();\n if (_.size(this.unmatchedGroups) > 0) {\n let groupLabel = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL),\n $btn = $('<button />', {\n type: 'button',\n class: 'btn btn-info btn-map-groups',\n text: 'Map ' + (groupLabel ? groupLabel : 'Groups')\n });\n $footer.prepend($btn);\n $btn.on('click', _.bind(this.mapGroups, this))\n }\n },\n editWorkAreas: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n data = row.data(),\n collection = new PJQ.collections.workAreas.ContactWorkAreas();\n\n _.each(this.model.get('workAreas'), function (workArea) {\n if (data.columnData.workAreas.indexOf(workArea.workAreaId) !== -1) {\n collection.add(new collection.model(workArea));\n }\n });\n\n new PJQ.views.workAreas.WorkAreaMapModal({\n collection: collection,\n onSave: _.bind(function (workAreaCol) {\n data.columnData.workAreas = _.map(workAreaCol.models, function (workArea) {\n return workArea.get('workAreaId');\n });\n this.dataTable.refresh();\n }, this)\n });\n },\n getColumnGroupNames: function (data) {\n let groupNames,\n result = {\n matched: [],\n unmatched: []\n };\n if (_.size(data) === 0) {\n groupNames = [];\n } else if (data.indexOf('|') !== -1) {\n groupNames = data.split('|');\n } else if (data.indexOf(',') !== -1) {\n groupNames = data.split(',');\n } else {\n groupNames = [data];\n }\n _.each(groupNames, function (groupName) {\n if (groupName == null || _.size(groupName.trim()) === 0) {\n return;\n }\n\n let loweredName = groupName.toLowerCase().trim();\n if (_.find(this.groups.models, function (group) {\n return group.get('groupName').toLowerCase() === loweredName;\n }) != null) {\n result.matched.push(groupName);\n } else {\n let mappedGroup = _.find(this.groupMap, function (map) {\n return map.group != null && map.groupName === groupName;\n });\n if (mappedGroup != null) {\n result.matched.push(mappedGroup.group.get('groupName'));\n } else if (result.unmatched.indexOf(groupName) === -1) {\n result.unmatched.push(groupName);\n }\n }\n }, this);\n return result;\n },\n editGroups: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n data = row.data(),\n selectedGroupIds = [],\n matchResult = this.getColumnGroupNames(data.columnData.groups);\n _.each(matchResult.matched, function (groupName) {\n let group = _.find(this.groups.models, function (group) {\n return group.get('groupName').toLowerCase() === groupName.trim().toLowerCase();\n });\n if (group != null) {\n selectedGroupIds.push(group.id);\n }\n }, this);\n new PJQ.views.groups.SelectGroupsModal({\n selectorOptions: {\n selectedGroupIds: selectedGroupIds\n },\n onSave: _.bind(function (groups) {\n data.columnData.groups = _.map(groups.selected, function (group) {\n return group.get('groupName');\n }).join(',');\n this.dataTable.refresh();\n }, this)\n });\n },\n mapGroups: function () {\n new PJQ.views.contacts.MapGroupsModal({\n groupMap: this.groupMap,\n groupNames: this.unmatchedGroups,\n onSave: _.bind(function (map) {\n this.groupMap = map;\n this.render();\n }, this)\n });\n },\n editRegions: function () {\n\n },\n getIsOverwrite: function () {\n return this.$el.closest('.modal').find('.cb-overwrite').prop('checked') === true;\n },\n overwriteOptionChanged: function () {\n let $mdOuter = this.$el.closest('.modal').find('.cb-merge-data-outer');\n if (this.getIsOverwrite()) {\n $mdOuter.removeClass('hidden');\n } else {\n $mdOuter.addClass('hidden');\n }\n },\n import: function (importOptions) {\n let save = _.bind(function () {\n let $btn = this.$el.closest('.modal').find('.btn-import,.btn-cancel'),\n importLoader = new PJQ.Loader(this.dataTable.$el);\n $btn.prop('disabled', true);\n\n if (this.groupMap != null) {\n _.each(this.model.get('rows'), function (row) {\n let matchResult = this.getColumnGroupNames(row.columnData.groups),\n newNames = [];\n _.each(matchResult.matched, function (gName) {\n if (newNames.indexOf(gName) === -1) {\n newNames.push(gName);\n }\n });\n\n _.each(matchResult.unmatched, function (gName) {\n if (newNames.indexOf(gName) === -1) {\n newNames.push(gName);\n }\n });\n if (_.size(newNames) > 0) {\n row.columnData.groups = newNames.join('|');\n }\n }, this)\n }\n\n let overwrite = this.getIsOverwrite();\n this.model.save({\n overwrite: overwrite,\n mergeData: overwrite && this.$el.closest('.modal').find('.cb-merge-data').prop('checked'),\n rows: this.model.get('rows')\n }, {\n timeout: 600000,\n urlOptions: _.extend(importOptions, {\n createGroups: this.$('.cb-create-groups').prop('checked')\n }),\n notify: false,\n success: _.bind(function (model, data) {\n PJQ.notifications.notify.successNotify({\n message: \"Your contacts have been queued for import\"\n });\n if (typeof this.options.onDone === 'function') {\n this.options.onDone();\n }\n }, this)\n });\n }, this);\n if (importOptions == null || !importOptions.overwrite) {\n let noEmailFaxCount = 0;\n _.each(this.model.get('rows'), function (contact) {\n if (_.size(contact.columnData.email) === 0 && _.size(contact.columnData.fax) === 0) {\n noEmailFaxCount++;\n }\n });\n if (noEmailFaxCount > 0) {\n new PJQ.views.modals.YesNo({\n header: \"Import Data Missing\",\n body: \"Some of the contacts you are importing do not have an email or fax. Do you still want to continue?\",\n onYes: _.bind(function () {\n save();\n }, this)\n });\n } else {\n save();\n }\n } else {\n save();\n }\n }\n});\n\nPJQ.views.contacts.DuplicateEmailModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Contacts-Import-Duplicate-Email'),\n onSkip: null,\n onOverwrite: null\n },\n events: {\n 'click .btn-overwrite': 'overwrite',\n 'click .btn-skip': 'skip',\n 'click .btn-cancel': 'cancel'\n },\n overwrite: function () {\n if (typeof this.options.onOverwrite === 'function') {\n this.options.onOverwrite();\n this.removeModal();\n }\n },\n skip: function () {\n if (typeof this.options.onSkip === 'function') {\n this.options.onSkip();\n this.removeModal();\n }\n },\n cancel: function () {\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel();\n this.removeModal();\n }\n }\n});\n\nPJQ.views.contacts.MapGroupsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-contacts-import-map-groups')\n },\n events: {\n 'click .btn-save': 'save'\n },\n beforeModalCreated: function () {\n if (this.options.groupMap == null) {\n this.options.groupMap = [];\n _.each(this.options.groupNames, function (groupName) {\n this.options.groupMap.push({\n id: _.uniqueId(),\n groupName: groupName,\n group: null\n });\n }, this);\n }\n\n PJQ.app.session.fetchUserGroups(null, _.bind(function (groups) {\n this.groups = groups;\n this.render();\n }, this));\n },\n renderData: function () {\n return {\n groupMap: this.options.groupMap,\n groups: this.groups\n };\n },\n afterRender: function () {\n let groupLabel = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LABEL);\n _.each(this.options.groupMap, function (map) {\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-group[data-tid=\"' + map.id.toString() + '\"]'),\n defaultValue: map.group?.id,\n noneSelectedText: 'Select Group',\n isLiveSearch: true,\n onChange: _.bind(function (groupId) {\n map.group = this.groups.get(groupId);\n }, this)\n });\n }, this);\n },\n save: function () {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.options.groupMap);\n this.removeModal();\n }\n }\n});","PJQ.models.contactus = {};\n\nPJQ.models.contactus.ContactUs = PJQ.models.BaseModel.extend({\n\tidAttribute: \"contactUsId\",\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'contactus'\n\t\t\t}\n\t\t])\n\t}\n});\n\nPJQ.views.ContactUs = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Contact-Us')\n\t},\n\tevents: {\n\t\t'click .contactus-submit': 'onSubmit'\n\t},\n\tbeforeFirstRender: function () {\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {};\n\t},\n\tafterRender: function () {\n\t\tPJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contactus-phone'));\n\t},\n\tonSubmit: function () {\n\t\tlet errors = 0;\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.contactus-company'), true);\n\t\tif (this.$('.contactus-company').val().trim().length == 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.contactus-company'), false);\n\t\t\terrors++;\n\t\t}\n\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.contactus-contact'), true);\n\t\tif (this.$('.contactus-contact').val().trim().length == 0) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.contactus-contact'), false);\n\t\t\terrors++;\n\t\t}\n\n\t\tlet emailValid = PJQ.helpers.validators.validateEmail(this.$('.contactus-email').val());\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.contactus-email'), emailValid.success);\n\t\tif (!emailValid.success)\n\t\t\terrors++;\n\n\t\tlet phone = PJQ.helpers.formatHelpers.numbersOnly(this.$('.contactus-phone').val());\n\n\t\tif (errors == 0) {\n\n\t\t\tlet model = new PJQ.models.contactus.ContactUs();\n\t\t\tlet context = \"Sub LP - General\";\n\t\t\tif (this.getParameterByName('contactcontext'))\n\t\t\t\tcontext = this.getParameterByName('contactcontext');\n\n\t\t\tmodel.set('context', context);\n\t\t\tmodel.set('companyName', this.$('.contactus-company').val());\n\t\t\tmodel.set('contactName', this.$('.contactus-contact').val());\n\t\t\tmodel.set('phone', phone);\n\t\t\tmodel.set('email', this.$('.contactus-email').val());\n\t\t\tmodel.set('message', this.$('.contactus-message').val());\n\n\t\t\tmodel.save(null, {\n\t\t\t\tsuccess: function () {\n\t\t\t\t\twindow.location.href = 'http://app.panteratools.com/Default.aspx?tabid=21997';\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.$('.contactus-company').val('');\n\t\t\tthis.$('.contactus-contact').val('');\n\t\t\tthis.$('.contactus-phone').val('');\n\t\t\tthis.$('.contactus-email').val('');\n\t\t\tthis.$('.contactus-message').val('');\n\t\t}\n\t},\n\tgetParameterByName: function (name) {\n\t\tname = name.replace(/[\\[]/, \"\\\\\\[\").replace(/[\\]]/, \"\\\\\\]\");\n\t\tlet regexS = \"[\\\\?&]\" + name + \"=([^&#]*)\";\n\t\tlet regex = new RegExp(regexS);\n\t\tlet results = regex.exec(window.location.search);\n\t\tif (results == null)\n\t\t\treturn \"\";\n\t\telse\n\t\t\treturn decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n\t}\n});","PJQ.Draggable = class {\n\tconstructor($el, options = {}) {\n\t\tlet self = this;\n\t\tself.$el = $el;\n\t\tself.options = _.defaults(options, {\n\t\t\taddClasses: \"selected\",\n\t\t\tstop: function () {\n\t\t\t\tself.onStop();\n\t\t\t}\n\t\t});\n\t\tif (_.size(self.$el) > 0) {\n\t\t\tself.$el.draggable(self.options);\n\t\t}\n\t}\n\n\tonStop() {\n\t\tif (typeof this.options.onStop === 'function') {\n\t\t\tthis.options.onStop();\n\t\t}\n\t}\n};\n\nPJQ.Droppable = class {\n\tconstructor($el, options = {}) {\n\t\tlet self = this;\n\t\tself.$el = $el;\n\t\tself.options = _.defaults(options, {\n\t\t\taddClasses: \"selected\",\n\t\t\tstop: function () {\n\t\t\t\tself.onStop();\n\t\t\t}\n\t\t});\n\t\tif (_.size(self.$el) > 0) {\n\t\t\tself.$el.droppable(self.options);\n\t\t}\n\t}\n\n\tonStop() {\n\t\tif (typeof this.options.onStop === 'function') {\n\t\t\tthis.options.onStop();\n\t\t}\n\t}\n};","//Models\nPJQ.models.emailTemplates = {};\nPJQ.models.emailTemplates.EmailTemplate = PJQ.models.BaseModel.extend({\n idAttribute: 'emailTemplateId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'emailTemplates',\n value: this.id\n }\n ])\n }\n});\n\n//Collections\nPJQ.collections.emailTemplates = {};\nPJQ.collections.emailTemplates.EmailTemplates = PJQ.collections.BaseCollection.extend({\n options: {\n projectMessage: false\n },\n model: PJQ.models.emailTemplates.EmailTemplate,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'emailTemplates'\n }\n ], [\n {\n parameter: 'projectMessage',\n value: this.options.projectMessage\n },\n ])\n }\n});\n","PJQ.Errors = {\n\tauth: {\n\t\tINACTIVE: 'Your account is currently inactive, contact an administrator to activate it',\n\t\tINACTIVE_USER: 'Your account is currently inactive, contact an administrator to activate it',\n\t\tKEY_LENGTH: 'Access key must be 10 characters',\n\t\tNOT_FOUND: 'Access key not found',\n\t\tUSER_NOT_FOUND: 'Unable to find an account with that username',\n\t\tLOCKED: 'Your account has been locked due to too many failed attempts',\n\t\tLOCKED_USER: 'Your account is currently locked',\n\t\tINCORRECT_PASSWORD: 'Incorrect password',\n\t\tINVALID_GRANT: 'Username does not exist or has been deleted',\n\t\tUNHANDLED: 'An error occurred, please contact customer service or try again later',\n\t\tUSERNAME_EXISTS: 'Username already taken',\n\t\tCUSTOMER_SERVICE: 'An error occurred, please contact customer service or try again later',\n\t\tCURRENT_PASSWORD: 'You cannot use your current password',\n\t\tSSO_DISABLED: 'SSO is not enabled for this user',\n\t\tINVALID_SAML: 'Unable to validate SAML certificate, please contact your system administrator'\n\t}\n};\n\nPJQ.ErrorHandler = class {\n\tconstructor(options = {}) {\n\t\toptions = options != null ? options : {};\n\t\toptions.handlers = _.defaults(options.handlers ? options.handlers : {}, {\n\t\t\t0: {\n\t\t\t\tnotification: {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\tmessage: 'Unable to connect. Please verify you are still connected to the internet.',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t400: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t401: {\n\t\t\t\tnotification: {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\tmessage: 'You do not have permission to view this {0}'\n\t\t\t\t}\n\t\t\t},\n\t\t\t404: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t405: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t500: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t502: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t503: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\t504: {\n\t\t\t\tenableTracking: true,\n\t\t\t\tlevel: 'error',\n\t\t\t\tnotification: {\n\t\t\t\t\tmessage: 'An error occurred',\n\t\t\t\t\tshowContact: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tdefault: {\n\t\t\t\tenableTracking: true,\n\t\t\t}\n\t\t});\n\n\t\tthis.options = _.defaults(options ? options : {}, {});\n\t}\n\n\thandle(request, data) {\n\t\tlet handler = this.options.handlers[request.status];\n\t\tif (handler != null) {\n\t\t\tif (handler.enableTracking && typeof Sentry === 'object') {\n\t\t\t\tSentry.configureScope((scope) => {\n\t\t\t\t\tlet sentryUserId = 0;\n\t\t\t\t\tif (PJQ.app.session.contact != null) {\n\t\t\t\t\t\tsentryUserId = PJQ.app.session.contact.id;\n\t\t\t\t\t}\n\t\t\t\t\telse if (PJQ.app.session.user != null) {\n\t\t\t\t\t\tsentryUserId = -PJQ.app.session.user.id;\n\t\t\t\t\t}\n\t\t\t\t\tscope.setUser({id: sentryUserId});\n\t\t\t\t\tscope.setLevel(handler.level ? handler.level : 'warning');\n\t\t\t\t\tscope.setExtra('statusCode', request.status);\n\t\t\t\t\tscope.setExtra('responseText', request.responseText);\n\t\t\t\t\tscope.setExtra('data', data);\n\t\t\t\t\tSentry.captureMessage(request.status.toString() + \": \" + request.url);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (handler.notification != null) {\n\t\t\t\tlet itemName = handler.itemName != null ? handler.itemName : 'item';\n\t\t\t\thandler.notification.message = PJQ.helpers.stringHelpers.format(handler.notification.message, itemName);\n\t\t\t\tif (handler.level === 'warning' || handler.notification.type === 'warning') {\n\t\t\t\t\tPJQ.notifications.notify.warningNotify(handler.notification);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify(handler.notification);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};","PJQ.views.history = {};\n\nPJQ.views.history.HistoryTimelineModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-history-timeline'),\n width: 600,\n maxWidth: '90%',\n isShowCloseButton: true\n },\n events: {\n 'click .btn-notification-link': 'copyNotificationLink',\n 'click .btn-notification-resend': 'resendNotification'\n },\n beforeModalCreated: async function () {\n this.isFetched = false;\n\n if (this.options.items != null) {\n this.items = this.options.items;\n } else {\n this.items = [];\n }\n\n if (this.collection != null && !this.collection.isFetched) {\n await this.collection.fetch();\n _.each(this.collection.models, (item) => {\n this.items.push({\n action: item.getActionName(),\n description: item.getDescription(),\n date: item.get('createdOn'),\n person: item.get('person')\n });\n });\n }\n\n this.isFetched = true;\n this.render();\n },\n afterRender: function () {\n new PJQ.views.history.HistoryTimeline({\n el: this.$('.history-outer'),\n items: this.items\n });\n },\n renderData: function () {\n return {\n options: this.options,\n isFetched: this.isFetched\n };\n }\n});\n\nPJQ.views.history.HistoryTimeline = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'history-timeline'),\n subTemplates: {},\n },\n renderData: function () {\n return {\n items: this.options.items\n };\n },\n afterRender: function () {\n\n }\n});\n","if (typeof LazyLoad === 'undefined') {\n\t(function (w, d) {\n\t\tvar b = d.getElementsByTagName('head')[0];\n\t\tvar s = d.createElement(\"script\");\n\t\tvar v = !(\"IntersectionObserver\" in w) ? \"8.17.0\" : \"10.19.0\";\n\t\ts.setAttribute('defer', '');\n\t\ts.src = (typeof window.lazyLoadPath === 'string' ? window.lazyLoadPath : \"/DesktopModules/PanteraModuleGlobal/lazyload/js\") + (\"/lazyload-\" + v + \".min.js\");\n\t\tb.appendChild(s);\n\t}(window, document));\n}","PJQ.Loader = class {\n constructor($el, options = {}) {\n this.$el = $el;\n this.options = _.defaults(options, {\n loadingText: 'Loading...',\n type: this.$el.is(':button') ? 'button' : null,\n });\n this.init();\n }\n\n init() {\n switch (this.getType().toLowerCase()) {\n case 'button':\n this.$processing = $('<span>', {\n style: 'position:absolute;color:#fff;',\n text: this.options.loadingText\n });\n this.$el.addClass('loader loader-button').prop('disabled', true);\n\n if(_.size(this.options.loadingText) === 0){\n this.$el.addClass('loader-center')\n } else{\n this.$el.removeClass('loader-center')\n }\n\n this.$el.prepend(this.$processing);\n break;\n case 'iconbutton':\n this.$el.find('i').addClass('hidden');\n this.$el.addClass('loader loader-button').prop('disabled', true);\n\n if(_.size(this.options.loadingText) === 0){\n this.$el.addClass('loader-center')\n } else{\n this.$el.removeClass('loader-center')\n }\n\n this.$processing = $('<span>', {\n style: 'position:absolute;color:#fff;',\n text: this.options.loadingText\n });\n this.$el.prepend(this.$processing);\n break;\n case 'block':\n this.$el.addClass('loader');\n break;\n case 'small':\n this.$el.addClass('loader loader-overlay loader-small');\n break;\n default:\n this.$el.addClass('loader loader-overlay');\n break;\n }\n }\n\n getType() {\n return this.options.type ? this.options.type : '';\n }\n\n remove() {\n if (this.getType().toLowerCase() === 'button') {\n this.$processing.remove();\n this.$el.css('color', '').removeClass('loader loader-overlay').prop('disabled', false);\n } else if (this.getType().toLowerCase() === 'iconbutton') {\n this.$processing.remove();\n this.$el.removeClass('loader loader-overlay').prop('disabled', false);\n this.$el.find('i').removeClass('hidden');\n } else {\n this.$el.removeClass('loader').removeClass('loader-overlay');\n }\n }\n};","PJQ.logging = {\n\tLoggingActions: {\n\t\tGLOBAL_GET_SESSION: 'GLOBAL_GET_SESSION',\n\t\tAUTH_SIGN_IN: 'AUTH_SIGN_IN',\n\t\tAUTH_SIGN_UP: 'AUTH_SIGN_UP',\n\t\tAUTH_RESET_PASSWORD: 'AUTH_RESET_PASSWORD',\n\t\tPJQPROFILE_GET_SCREENINGS: 'PJQPROFILE_GET_SCREENINGS',\n\t\tPJQPROFILE_GET_PREQUAL: 'PJQPROFILE_GET_PREQUAL',\n\t\tSEND_PREQUAL_UPDATE: 'SEND_PREQUAL_UPDATE',\n\t\tPJQPROQUALADMIN_GET_INVITE: 'PJQPROQUALADMIN_GET_INVITE',\n\t\tPJQPROQUALADMIN_GET_ITEM: 'PJQPROQUALADMIN_GET_ITEM',\n\t\tPJQPROQUALADMIN_GET_REQUEST: 'PJQPROQUALADMIN_GET_REQUEST',\n\t\tPJQPROQUALADMIN_GET_ITEM_COMMENTS: 'PJQPROQUALADMIN_GET_ITEM_COMMENTS',\n\t\tPREQUAL_EXPORT: 'PREQUAL_EXPORT',\n\t\tFILE_DOWNLOAD_FAILED: 'FILE_DOWNLOAD_FAILED',\n\t\tSCREENING_PAYMENT: 'SCREENING_PAYMENT',\n\t\tGET_NEW_CONTACT_AB: 'GET_NEW_CONTACT_AB',\n\t\tPAYMENT_ERROR: 'PAYMENT_ERROR',\n\t\tDELETE_PROJECT_CONTACTS_OR_GROUPS: 'DELETE_PROJECT_CONTACTS_OR_GROUPS',\n\t\tUPLOAD_RAW_FILES: 'UPLOAD_RAW_FILES',\n\t\tREPORT_CONTACT: 'REPORT_CONTACT'\n\t}\n};\n\nPJQ.logging.Debug = class {\n\tconstructor(action, data, options = {}) {\n\t\tthis.action = action;\n\t\tthis.data = data;\n\t\tthis.options = _.defaults(options, {\n\t\t\tisIncludeUrl: true,\n\t\t\tisSave: true,\n\t\t\tonSave: _.noop\n\t\t});\n\t\tif (this.options.isSave)\n\t\t\tthis.save();\n\t}\n\n\tsave() {\n\t\tif (PJQ.helpers.objectHelpers.refinedType(this.data) !== 'object') {\n\t\t\tthis.data = {\n\t\t\t\tdata: this.data\n\t\t\t}\n\t\t}\n\t\tif (this.options.isIncludeUrl) {\n\t\t\tthis.data = _.defaults(this.data, {\n\t\t\t\tSESSION_URL: window.location.href\n\t\t\t});\n\t\t}\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'logging'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'debug'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\tauditAction: this.action,\n\t\t\t\tdata: this.data\n\t\t\t}\n\t\t}).post().done(_.bind(function () {\n\t\t\tif (typeof this.options.onSave === 'function')\n\t\t\t\tthis.options.onSave(this);\n\t\t}, this));\n\t}\n};","PJQ.helpers.mobile = {\n\tgetDevice: function () {\n\t\tlet userAgent = window.navigator.userAgent,\n\t\t\tdevice = null;\n\t\tif (userAgent.match(/android/i) != null) {\n\t\t\tdevice = \"android\";\n\t\t}\n\t\telse if (userAgent.match(/iPhone/i) != null\n\t\t\t|| userAgent.match(/iPod/i) != null\n\t\t\t|| userAgent.match(/iPad/i) != null) {\n\t\t\tdevice = \"ios\";\n\t\t}\n\t\treturn device;\n\t}\n};\n\nPJQ.views.mobile = {};\n\nPJQ.views.mobile.AppDownloadModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-App-Download'),\n\t\tcookie: 'PANTERA_APP_DOWNLOAD',\n\t\tisVerticalCenter: true\n\t},\n\tevents: {\n\t\t'click .open-in-app': 'openInApp',\n\t\t'click .no-thanks': 'setCookie'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (PJQ.helpers.cookieHelpers.getCookie(this.options.cookie) != null) {\n\t\t\treturn false;\n\t\t}\n\t},\n\topenInApp: function () {\n\t\tthis.setCookie();\n\t\tPJQ.app.session.project.openInApp();\n\t},\n\tsetCookie: function () {\n\t\tPJQ.helpers.cookieHelpers.setCookie(this.options.cookie, true, 3);\n\t}\n});","PJQ.views.notifications = {};\nPJQ.views.notifications.NotificationHistory = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Notification-History'),\n\t\twidth: 1000,\n\t\tmaxWidth: '90%'\n\t},\n\tevents: {\n\t\t'click .btn-notification-link': 'copyNotificationLink',\n\t\t'click .btn-notification-resend': 'resendNotification'\n\t},\n\tafterRender: function () {\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: '.notifications-data-table',\n\t\t\tdata: this.collection.models,\n\t\t\tisHideSearch: true,\n\t\t\trowId: \"cid\",\n\t\t\torder: [0, 'desc'],\n\t\t\tlanguage: {\n\t\t\t\tzeroRecords: 'No notifications have been sent yet'\n\t\t\t},\n\t\t\t// RFI Notifications have extra columns for times sent and last sent, so check if the collection is RFI Notifications\n\t\t\tcolumns: this.getColumns()\n\t\t});\n\t},\n\tgetColumns: function () {\n\t\tif (this.collection instanceof PJQ.collections.rfi.Notifications) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\t\"data\": {\n\t\t\t\t\t\t\"_\": 'attributes.lastSent',\n\t\t\t\t\t\t\"display\": function (row) {\n\t\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.lastSent), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"filter\": function (row) {\n\t\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.lastSent), \"MM/dd/yyyy hh:mm:ss TT\", false)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"title\": \"Last Sent\",\n\t\t\t\t\t\"width\": \"150px\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"\",\n\t\t\t\t\t\"title\": \"Type\",\n\t\t\t\t\t\"width\": \"20%\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\treturn row.getTypeName();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"recipient\",\n\t\t\t\t\t\"title\": \"Recipient\",\n\t\t\t\t\t\"render\": function (data) {\n\t\t\t\t\t\tif (data != null) {\n\t\t\t\t\t\t\treturn PJQ.helpers.contacts.getContactAnchor({contact: data});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.status\",\n\t\t\t\t\t\"title\": \"Status\",\n\t\t\t\t\t\"width\": \"80px\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"attributes.sentCount\",\n\t\t\t\t\t\"title\": \"Times Sent\",\n\t\t\t\t\t\"width\": \"40px\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"data\": \"\",\n\t\t\t\t\t\"title\": \"\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"width\": \"100px\",\n\t\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\t\tlet wasResent = row.get('wasResent');\n\n\t\t\t\t\t\tif (wasResent) {\n\t\t\t\t\t\t\treturn '<div class=\"text-align-right\"><button type=\"button\" title=\"Copy Link\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-primary btn-notification-link wd-35p ht-30p\"><i class=\"fal fa-link\"></i></button><button type=\"button\" title=\"Resend\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-success btn-notification-resend ml-1 wd-35p ht-30p\" disabled><i class=\"fal fa-check\"></i></button></div>';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn '<div class=\"text-align-right\"><button type=\"button\" title=\"Copy Link\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-primary btn-notification-link wd-35p ht-30p\"><i class=\"fal fa-link\"></i></button><button type=\"button\" title=\"Resend\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-share btn-notification-resend ml-1 wd-35p ht-30p\"><i class=\"fal fa-share\"></i></button></div>';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\n\t\tlet cols = [\n\t\t\t{\n\t\t\t\t\"data\": {\n\t\t\t\t\t\"_\": 'attributes.createdOn',\n\t\t\t\t\t\"display\": function (row) {\n\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.createdOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, false)\n\t\t\t\t\t},\n\t\t\t\t\t\"filter\": function (row) {\n\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.createdOn), \"MM/dd/yyyy hh:mm:ss TT\", false)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"title\": \"Sent\",\n\t\t\t\t\"width\": \"150px\",\n\t\t\t\t// \"render\": function (data) {\n\t\t\t\t// \treturn PJQ.helpers.dateHelpers.getDateString(new Date(data), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n\t\t\t\t// }\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"\",\n\t\t\t\t\"title\": \"Type\",\n\t\t\t\t\"width\": \"20%\",\n\t\t\t\t\"render\": function (data, type, row) {\n\t\t\t\t\treturn row.getTypeName();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"recipient\",\n\t\t\t\t\"title\": \"Recipient\",\n\t\t\t\t\"render\": function (data) {\n\t\t\t\t\tif (data != null) {\n\t\t\t\t\t\treturn PJQ.helpers.contacts.getContactAnchor({contact: data});\n\t\t\t\t\t}\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"attributes.status\",\n\t\t\t\t\"title\": \"Status\",\n\t\t\t\t\"width\": \"80px\"\n\t\t\t}\n\t\t];\n\n\t\tif (_.size(this.options.extraColumns) > 0) {\n\t\t\t_.each(this.options.extraColumns, (column) => {\n\t\t\t\tif (column.index == null || column.index >= cols.length - 1) {\n\t\t\t\t\tcols.push(column);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcols = [\n\t\t\t\t\t...cols.slice(0, column.index),\n\t\t\t\t\tcolumn,\n\t\t\t\t\t...cols.slice(column.index)\n\t\t\t\t];\n\t\t\t});\n\t\t}\n\n\t\tcols.push({\n\t\t\t\"data\": \"\",\n\t\t\t\"title\": \"\",\n\t\t\t\"orderable\": false,\n\t\t\t\"searchable\": false,\n\t\t\t\"width\": \"100px\",\n\t\t\t\"render\": function (data, type, row) {\n\t\t\t\treturn '<div class=\"text-align-right\"><button type=\"button\" title=\"Copy Link\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-primary btn-notification-link wd-35p ht-30p\"><i class=\"fal fa-link\"></i></button><button type=\"button\" title=\"Resend\" data-id=\"' + row.id.toString() + '\" class=\"btn btn-share btn-notification-resend ml-1 wd-35p ht-30p\"><i class=\"fal fa-share\"></i></button></div>';\n\t\t\t}\n\t\t});\n\n\t\treturn cols;\n\t},\n\tcopyNotificationLink: function (e) {\n\t\tlet notificationId = $(e.currentTarget).data('id'),\n\t\t\tnotification = this.collection.get(notificationId),\n\t\t\tinputId = 'h_input_' + _.uniqueId(),\n\t\t\thiddenInput = $('<input>', {\n\t\t\t\tvalue: notification.get('url'),\n\t\t\t\tstyle: 'position: absolute;left:-2000px;top:-2000px',\n\t\t\t\tid: inputId\n\t\t\t});\n\t\tthis.$el.append(hiddenInput);\n\t\thiddenInput[0].select();\n\t\tdocument.execCommand(\"copy\");\n\t\thiddenInput.remove();\n\t},\n\tresendNotification: function (e) {\n\t\tlet resendButton = $(e.currentTarget),\n\t\t\tnotificationId = $(e.currentTarget).data('id'),\n\t\t\tnotification = this.collection.get(notificationId),\n\t\t\trow = this.dataTable.getRow(notification.cid);\n\t\tnotification.resend();\n\n\t\t// If the collection is RFI notifications, we want to update the sentCount and the lastSent. Add an attribute \"wasResent\" to disable the resend button on table redraw.\n\t\tif (this.collection instanceof PJQ.collections.rfi.Notifications) {\n\t\t\tnotification.set({\n\t\t\t\tsentCount: notification.get('sentCount') + 1,\n\t\t\t\tlastSent: new Date(),\n\t\t\t\twasResent: true\n\t\t\t});\n\t\t\trow.data(notification).draw();\n\t\t} else {\n\t\t\tresendButton.find('i').removeClass('fa-share').addClass('fa-check');\n\t\t\tresendButton.removeClass('btn-share').addClass('btn-success').prop('disabled', true);\n\t\t}\n\t}\n});\n\nPJQ.models.notifications = {};\nPJQ.models.notifications.Notification = PJQ.models.BaseModel.extend({\n\tparse: function (model) {\n\t\tif (!model)\n\t\t\treturn model;\n\n\t\tthis.recipient = new PJQ.models.projectContacts.ProjectContact(model.recipient);\n\n\t\treturn model;\n\t},\n\tgetTypeName: function () {\n\t\tlet name = this.notificationTypeNames[this.get('type')];\n\t\treturn name || \"\";\n\t},\n\tresend: function () {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: this.endpoint() + '/resend'\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Notification Resent'\n\t\t\t});\n\t\t}, this)).fail(_.bind(function () {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Encountered an error resending notification.'\n\t\t\t});\n\t\t}, this));\n\t}\n});\n\nPJQ.collections.notifications = {};\nPJQ.collections.notifications.Notifications = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.notifications.Notification\n});\n","// Models\r\nPJQ.models.notificationSettings = {};\r\n\r\nPJQ.models.notificationSettings.NotificationSetting = PJQ.models.BaseModel.extend();\r\n\r\nPJQ.models.notificationSettings.ContactNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.ProjectsNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\n\r\nPJQ.models.notificationSettings.MessagingNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.PrivateMessagingNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.BidFormNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.DrawingNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.AttachmentNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.ProjectContactNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.RFINotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.DailyReportNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.PunchListNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.ActionItemNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.SubmittalNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.ScheduleNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.MeetingNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\nPJQ.models.notificationSettings.PayableInvoiceNotifications = PJQ.models.notificationSettings.NotificationSetting.extend();\r\n\r\nPJQ.models.notificationSettings.NotificationSettings = PJQ.models.BaseModel.extend({\r\n\tidAttribute: \"notificationSettingsId\",\r\n\tendpoint: function () {\r\n\t\tif (this.id > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings',\r\n\t\t\t\t\tvalue: this.id\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') != null && this.get('projectId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects',\r\n\t\t\t\t\tvalue: this.get('projectId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') < 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'users',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('userTypeId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'usertypes',\r\n\t\t\t\t\tvalue: this.get('userTypeId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'projects',\r\n\t\t\t\tvalue: this.get('projectId') > 0 ? this.get('projectId') : null\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t}\r\n\t\t]);\r\n\t},\r\n\thasNotificationSetting: function (notificationSetting, options = {}) {\r\n\t\tlet result = null;\r\n\t\tlet splitNS = _.bind(function (setting) {\r\n\t\t\tlet parts = setting.split('.'),\r\n\t\t\t\tsize = _.size(parts),\r\n\t\t\t\tstack = this,\r\n\t\t\t\tsettingsResult = false;\r\n\t\t\t_.each(parts, function (part, index) {\r\n\t\t\t\tif (stack == null) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index + 1 === size) {\r\n\t\t\t\t\tsettingsResult = stack.get(part) === true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tstack = stack[part];\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\t\treturn settingsResult;\r\n\t\t}, this);\r\n\t\tif (PJQ.helpers.objectHelpers.refinedType(notificationSetting) === 'array') {\r\n\t\t\t_.each(notificationSetting, function (ns) {\r\n\t\t\t\tif (options.or) {\r\n\t\t\t\t\tresult = splitNS(ns) || (result == null ? false : result);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tresult = splitNS(ns) && (result == null ? true : result);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tresult = splitNS(notificationSetting);\r\n\t\t}\r\n\t\treturn result == null ? false : result;\r\n\t},\r\n\tparse: function (model) {\r\n\t\tif (model != null) {\r\n\t\t\tif (PJQ.app.session != null && model.userTypeId != null) {\r\n\t\t\t\tthis.userType = PJQ.app.session.userTypes.get(model.userTypeId);\r\n\t\t\t}\r\n\t\t\telse if (model.userType != null) {\r\n\t\t\t\tmodel.userTypeId = model.userType.id;\r\n\t\t\t\tthis.userType = model.userType;\r\n\t\t\t}\r\n\r\n\t\t\t_.each(this.subItems, function (nsMap, key) {\r\n\t\t\t\tlet modelNotificationSettings = model[key];\r\n\t\t\t\tif (modelNotificationSettings != null) {\r\n\t\t\t\t\tthis[key] = new nsMap(modelNotificationSettings);\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\treturn model;\r\n\t},\r\n\tbeforeSave: function () {\r\n\t\t_.each(this.subItems, function (permMap, key) {\r\n\t\t\tlet notificationSettings = this[key];\r\n\t\t\tif (notificationSettings != null && notificationSettings instanceof PJQ.models.notificationSettings.NotificationSetting) {\r\n\t\t\t\tthis.set(key, notificationSettings.toJSON());\r\n\t\t\t}\r\n\t\t}, this);\r\n\t}\r\n});\r\n\r\nPJQ.models.notificationSettings.SystemNotificationSettings = PJQ.models.notificationSettings.NotificationSettings.extend({\r\n\tsubItems: {\r\n\t\tprojects: PJQ.models.notificationSettings.ProjectsNotifications,\r\n\t\tcontacts: PJQ.models.notificationSettings.ContactNotifications\r\n\t},\r\n\tendpoint: function () {\r\n\t\tif (this.id > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings',\r\n\t\t\t\t\tvalue: this.id\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') < 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'users',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('userTypeId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'usertypes',\r\n\t\t\t\t\tvalue: this.get('userTypeId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t}\r\n\t\t]);\r\n\t}\r\n});\r\n\r\nPJQ.models.notificationSettings.ProjectNotificationSettings = PJQ.models.notificationSettings.NotificationSettings.extend({\r\n\tsubItems: {\r\n\t\tmessaging: PJQ.models.notificationSettings.MessagingNotifications,\r\n\t\tprivateMessaging: PJQ.models.notificationSettings.PrivateMessagingNotifications,\r\n\t\tbidForms: PJQ.models.notificationSettings.BidFormNotifications,\r\n\t\tdrawings: PJQ.models.notificationSettings.DrawingNotifications,\r\n\t\tattachments: PJQ.models.notificationSettings.AttachmentNotifications,\r\n\t\tprojectContacts: PJQ.models.notificationSettings.ProjectContactNotifications,\r\n\t\trfi: PJQ.models.notificationSettings.RFINotifications,\r\n\t\tdailyReports: PJQ.models.notificationSettings.DailyReportNotifications,\r\n\t\tpunchList: PJQ.models.notificationSettings.PunchListNotifications,\r\n\t\tsubmittals: PJQ.models.notificationSettings.SubmittalNotifications,\r\n\t\tschedule: PJQ.models.notificationSettings.ScheduleNotifications,\r\n\t\tactionItems: PJQ.models.notificationSettings.ActionItemNotifications,\r\n\t\tmeetings: PJQ.models.notificationSettings.MeetingNotifications,\r\n\t\tpayableInvoices: PJQ.models.notificationSettings.PayableInvoiceNotifications,\r\n\t},\r\n\tendpoint: function () {\r\n\t\tif (this.id > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings',\r\n\t\t\t\t\tvalue: this.id\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') != null && this.get('projectId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects',\r\n\t\t\t\t\tvalue: this.get('projectId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') < 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'users',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('userTypeId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'usertypes',\r\n\t\t\t\t\tvalue: this.get('userTypeId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'projects',\r\n\t\t\t\tvalue: this.get('projectId') > 0 ? this.get('projectId') : null\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'notificationsettings'\r\n\t\t\t}\r\n\t\t]);\r\n\t}\r\n});\r\n\r\n// Views\r\nPJQ.views.notificationSettings = {};\r\n\r\nPJQ.views.notificationSettings.NotificationSettingsEditorModal = PJQ.views.BaseModal.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Notification-Settings-Editor'),\r\n\t\tminWidth: 700\r\n\t},\r\n\tdefaultEvents: {\r\n\t\t'click .btn-save': 'save',\r\n\t\t'click .btn-cancel': 'cancel'\r\n\t},\r\n\trenderData: function () {\r\n\t\treturn {\r\n\t\t\tmodel: this.model,\r\n\t\t\tproject: this.options.project\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tthis.notificationSettingsEditor = new PJQ.views.notificationSettings.NotificationSettingsEditor({\r\n\t\t\tel: this.$('.notification-settings'),\r\n\t\t\tmodel: this.model,\r\n\t\t\tproject: this.options.project\r\n\t\t});\r\n\t},\r\n\tsave: function () {\r\n\t\tnew PJQ.Loader(this.$('.modal-content'));\r\n\t\tthis.notificationSettingsEditor.save(_.bind(function () {\r\n\t\t\tthis.removeModal();\r\n\t\t\tPJQ.notifications.notify.successNotify({\r\n\t\t\t\tmessage: 'Notification settings saved'\r\n\t\t\t});\r\n\t\t}, this));\r\n\t},\r\n\tcancel: function () {\r\n\t\tthis.removeModal();\r\n\t}\r\n});\r\n\r\nPJQ.views.notificationSettings.NotificationSettingsEditor = PJQ.views.BaseView.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Notification-Settings-Editor'),\r\n\t\thasTooltips: true\r\n\t},\r\n\tevents: {\r\n\t\t'click .btn-system-notification-settings-override': 'overrideSystem',\r\n\t\t'click .btn-system-notification-settings-revert': 'revertSystem',\r\n\t\t'click .btn-project-notification-settings-override': 'overrideProject',\r\n\t\t'click .btn-project-notification-settings-revert': 'revertProject'\r\n\t},\r\n\tbeforeFirstRender: function () {\r\n\t\tthis.fetchNotificationSettings();\r\n\t},\r\n\tfetchNotificationSettings: function () {\r\n\t\tif (this.options.project != null) {\r\n\t\t\tthis.fetchProjectNotificationSettings(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.fetchSystemNotificationSettings(_.bind(function () {\r\n\t\t\t\tthis.fetchProjectNotificationSettings(_.bind(function () {\r\n\t\t\t\t\tthis.render();\r\n\t\t\t\t}, this));\r\n\t\t\t}, this));\r\n\t\t}\r\n\t},\r\n\tfetchSystemNotificationSettings: function (callback) {\r\n\t\tthis.model.fetchSystemNotificationSettings(_.bind(function (settings) {\r\n\t\t\tthis.systemNotificationSettings = settings;\r\n\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\tcallback(settings);\r\n\t\t\t}\r\n\t\t}, this));\r\n\t},\r\n\tfetchProjectNotificationSettings: function (callback) {\r\n\t\tif (this.model instanceof PJQ.models.userTypes.UserType) {\r\n\t\t\tthis.model.fetchProjectNotificationSettings(_.bind(function (settings) {\r\n\t\t\t\tthis.projectNotificationSettings = settings;\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback(settings);\r\n\t\t\t\t}\r\n\t\t\t}, this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.model.fetchProjectNotificationSettings(this.options.project ? this.options.project.id : null, _.bind(function (settings) {\r\n\t\t\t\tthis.projectNotificationSettings = settings;\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback(settings);\r\n\t\t\t\t}\r\n\t\t\t}, this));\r\n\t\t}\r\n\t},\r\n\trenderData: function () {\r\n\t\treturn {\r\n\t\t\tmodel: this.options.model,\r\n\t\t\tproject: this.options.project,\r\n\t\t\tsystemNotificationSettings: this.systemNotificationSettings,\r\n\t\t\tprojectNotificationSettings: this.projectNotificationSettings\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tlet fnInit = _.bind(function (nsEl, nsModel) {\r\n\t\t\tlet $nsEl = $(nsEl),\r\n\t\t\t\tnsKey = $nsEl.data('notificationSetting'),\r\n\t\t\t\tnotificationSetting = nsModel[nsKey];\r\n\t\t\tif (notificationSetting != null) {\r\n\t\t\t\tnew PJQ.Binder($nsEl, notificationSetting, {\r\n\t\t\t\t\tsetDefaultValues: true,\r\n\t\t\t\t\twatchElements: [\r\n\t\t\t\t\t\t'input'\r\n\t\t\t\t\t],\r\n\t\t\t\t\tafterChange: _.bind(function ($ns, attr, val) {\r\n\t\t\t\t\t\tthis.notificationSettingChanged($ns, attr, val);\r\n\t\t\t\t\t\tnsModel.isDirty = true;\r\n\t\t\t\t\t}, this)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, this);\r\n\t\tif (this.systemNotificationSettings != null) {\r\n\t\t\t_.each(this.$('.system-notification-setting-container'), function (nsEl) {\r\n\t\t\t\tfnInit(nsEl, this.systemNotificationSettings);\r\n\t\t\t}, this);\r\n\t\t}\r\n\t\tif (this.projectNotificationSettings != null) {\r\n\t\t\t_.each(this.$('.project-notification-setting-container'), function (nsEl) {\r\n\t\t\t\tfnInit(nsEl, this.projectNotificationSettings);\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\tnotificationSettingChanged: function ($notificationSetting, attr, val) {\r\n\t\tlet level = $notificationSetting.data('level');\r\n\t\tif (level != null) {\r\n\t\t\tlet inputs = $notificationSetting.closest('.notification-setting-container').find('input');\r\n\t\t\tif (val && level > 1) {\r\n\t\t\t\t_.each(inputs, function (otherNS) {\r\n\t\t\t\t\tlet $otherNS = $(otherNS),\r\n\t\t\t\t\t\totherLevel = $otherNS.data('level');\r\n\t\t\t\t\tif (otherLevel != null && otherLevel < level) {\r\n\t\t\t\t\t\t$otherNS.prop('checked', val);\r\n\t\t\t\t\t\t$otherNS.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (!val) {\r\n\t\t\t\t//don't cascade notifications up if there is another permission at this level still enabled\r\n\t\t\t\tif (_.find(inputs, function (otherNS) {\r\n\t\t\t\t\tlet otherAttr = $(otherNS).data('pBind'),\r\n\t\t\t\t\t\totherLevel = $(otherNS).data('level');\r\n\t\t\t\t\treturn otherLevel === level && attr !== otherAttr && $(otherNS).prop('checked');\r\n\t\t\t\t}) != null) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t_.each(inputs, function (otherNS) {\r\n\t\t\t\t\tlet $otherNS = $(otherNS),\r\n\t\t\t\t\t\totherLevel = $otherNS.data('level');\r\n\t\t\t\t\tif (otherLevel != null && otherLevel > level) {\r\n\t\t\t\t\t\t$otherNS.prop('checked', val);\r\n\t\t\t\t\t\t$otherNS.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\toverrideSystem: function () {\r\n\t\t//To override we have to set the correct values for an overridden notification setting\r\n\t\t//This will not have an id so it is temporary until saved to the server\r\n\t\t//When it is saved next, it POST to the correct endpoint to create the overridden notification settings\r\n\t\tthis.systemNotificationSettings.set({\r\n\t\t\tnotificationSettingsId: null,\r\n\t\t\tuserTypeId: null,\r\n\t\t\tid: this.model.get('id'),\r\n\t\t\toverride: true\r\n\t\t});\r\n\t\tthis.render();\r\n\t},\r\n\trevertSystem: function () {\r\n\t\t//To revert we have to delete the overridden notification setting if it has been saved to the server already\r\n\t\t//We then have to fetch the inherited notification settings\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\tthis.fetchSystemNotificationSettings(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}, this);\r\n\t\tif (!this.systemNotificationSettings.isNew()) {\r\n\t\t\tthis.systemNotificationSettings.destroy({\r\n\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\tthis.systemNotificationSettings = null;\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfp();\r\n\t\t}\r\n\t},\r\n\toverrideProject: function () {\r\n\t\t//To override we have to set the correct values for an overridden notification setting\r\n\t\t//This will not have an id so it is temporary until saved to the server\r\n\t\t//When it is saved next, it POST to the correct endpoint to create the overridden notification settings\r\n\t\tthis.projectNotificationSettings.set({\r\n\t\t\tnotificationSettingsId: null,\r\n\t\t\tuserTypeId: null,\r\n\t\t\tid: this.model.get('id'),\r\n\t\t\tprojectId: this.options.project ? this.options.project.id : null,\r\n\t\t\toverride: true\r\n\t\t});\r\n\t\tthis.render();\r\n\t},\r\n\trevertProject: function () {\r\n\t\t//To revert we have to delete the overridden notification setting if it has been saved to the server already\r\n\t\t//We then have to fetch the inherited notification settings\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\tthis.fetchProjectNotificationSettings(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}, this);\r\n\t\tif (!this.projectNotificationSettings.isNew()) {\r\n\t\t\tthis.projectNotificationSettings.destroy({\r\n\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\tthis.projectNotificationSettings = null;\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfp();\r\n\t\t}\r\n\t},\r\n\tsave: function (callback) {\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\t\tthis.fetchProjectNotificationSettings(_.bind(function () {\r\n\t\t\t\t\tthis.render();\r\n\t\t\t\t}, this));\r\n\t\t\t}, this),\r\n\t\t\tsaveP = _.bind(function () {\r\n\t\t\t\tif (this.projectNotificationSettings != null && this.projectNotificationSettings.hasChanged()) {\r\n\t\t\t\t\tthis.projectNotificationSettings.save(null, {\r\n\t\t\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\tif (this.systemNotificationSettings != null && this.systemNotificationSettings.hasChanged()) {\r\n\t\t\tthis.systemNotificationSettings.save(null, {\r\n\t\t\t\tsuccess: function () {\r\n\t\t\t\t\tsaveP();\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsaveP();\r\n\t\t}\r\n\t}\r\n});\r\n","PJQ.notifications = {\n\tcreateNotifyModal: function (options) {\n\t\tif (options.cookie == null || !PJQ.helpers.cookieHelpers.getCookie(options.cookie)) {\n\t\t\tnew PJQ.notifications.NotifyModal(options);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n};\n\nPJQ.notifications.NotifyModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Notify')\n\t},\n\tevents: {\n\t\t\"click .btn-dont-show\": \"setDontShowCookie\"\n\t},\n\tsetDontShowCookie: function () {\n\t\tif (_.size(this.options.cookie) > 0) {\n\t\t\tPJQ.helpers.cookieHelpers.setCookie(this.options.cookie, true);\n\t\t}\n\t}\n});\n\nPJQ.notifications.notify = {\n\tdefaultNotifySettings: {\n\t\tplacement: {\n\t\t\tfrom: 'bottom',\n\t\t\talign: 'right'\n\t\t},\n\t\tanimate: {\n\t\t\tenter: 'animated fadeInDown',\n\t\t\texit: 'animated fadeOutRight'\n\t\t},\n\t\tallow_dismiss: true,\n\t\tdelay: 5000,\n\t\tz_index: 10000000\n\t},\n\tgetTemplate: function (options, callback) {\n\t\tPJQ.templating.TemplateRenderer.parseTemplate(new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Notify'), options, function (template) {\n\t\t\tcallback(template.outerHTML());\n\t\t});\n\t},\n\tnotify: function (options, settings) {\n\t\tlet notifyOptions = {},\n\t\t\tnotifySettings = {};\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(options) === 'object')\n\t\t\tnotifyOptions = options;\n\t\tif (PJQ.helpers.objectHelpers.refinedType(settings) === 'object') {\n\t\t\tnotifySettings = _.defaults(settings, this.defaultNotifySettings);\n\t\t}\n\n\t\tthis.getTemplate({ options: notifyOptions, settings: notifySettings }, function ($template) {\n\t\t\tnotifySettings.template = $template;\n\t\t\t$.notify(notifyOptions, notifySettings);\n\t\t});\n\t},\n\tsuccessNotify: function (options, settings) {\n\t\tlet notifyOptions = {\n\t\t\t\ticon: 'fal fa-check'\n\t\t\t},\n\t\t\tnotifySettings = {\n\t\t\t\ttype: 'notify-success'\n\t\t\t};\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(options) === 'object')\n\t\t\tnotifyOptions = _.defaults(options, notifyOptions);\n\t\tif (PJQ.helpers.objectHelpers.refinedType(settings) === 'object') {\n\t\t\tnotifySettings = _.defaults(settings, notifySettings);\n\t\t}\n\n\t\tthis.notify(notifyOptions, notifySettings);\n\t},\n\twarningNotify: function (options, settings) {\n\t\tlet notifyOptions = {\n\t\t\t\ticon: 'fal fa-lightbulb'\n\t\t\t},\n\t\t\tnotifySettings = {\n\t\t\t\ttype: 'notify-warning'\n\t\t\t};\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(options) === 'object')\n\t\t\tnotifyOptions = _.defaults(options, notifyOptions);\n\t\tif (PJQ.helpers.objectHelpers.refinedType(settings) === 'object') {\n\t\t\tnotifySettings = _.defaults(settings, notifySettings);\n\t\t}\n\n\t\tthis.notify(notifyOptions, notifySettings);\n\t},\n\terrorNotify: function (options, settings) {\n\t\tlet notifyOptions = {\n\t\t\t\ticon: 'fal fa-exclamation-triangle',\n\t\t\t\ttitle: 'Something went wrong!'\n\t\t\t},\n\t\t\tnotifySettings = {\n\t\t\t\ttype: 'notify-error'\n\t\t\t};\n\n\t\tif (PJQ.helpers.objectHelpers.refinedType(options) === 'object')\n\t\t\tnotifyOptions = _.defaults(options, notifyOptions);\n\t\tif (PJQ.helpers.objectHelpers.refinedType(settings) === 'object')\n\t\t\tnotifySettings = _.defaults(settings, notifySettings);\n\n\t\tthis.notify(notifyOptions, notifySettings);\n\t}\n};","PJQ.Pagination = class {\n\tconstructor($el, options = {}) {\n\t\tthis.$el = $el;\n\t\tthis.options = _.defaults(options, {\n\t\t\tcallback: _.bind(function (items) {\n\t\t\t\tthis.$paginationData.empty();\n\t\t\t\t_.each(items, function (item) {\n\t\t\t\t\tthis.renderPageItem(item);\n\t\t\t\t}, this);\n\t\t\t}, this)\n\t\t});\n\t\tthis.createElement();\n\t\tthis.render(options.dataSource);\n\t}\n\n\tcreateElement() {\n\t\t//Create inner elements for pagination and data\n\t\tif(_.size(this.$el.find('.pagination-controller')) === 0){\n\t\t\tthis.$el.append($('<div>', {\n\t\t\t\tclass: 'pagination-controller'\n\t\t\t}));\n\t\t}\n\t\tif(_.size(this.$el.find('.pagination-data')) === 0){\n\t\t\tthis.$el.append($('<div>', {\n\t\t\t\tclass: 'pagination-data mt-2'\n\t\t\t}));\n\t\t}\n\n\t\tthis.$paginationController = this.$el.find('.pagination-controller');\n\t\tthis.$paginationData = this.$el.find('.pagination-data');\n\t}\n\n\trender(data) {\n\t\tif(data != null){\n\t\t\tthis.options.dataSource = data;\n\t\t}\n\n\t\t//Instantiate pagination on the pagination controller element\n\t\tthis.$paginationController.pagination(this.options);\n\t}\n\n\treload(data){\n\t\tthis.render(data);\n\t}\n\n\trenderPageItem(item) {\n\t\t//If there is an override for rendering each page item, do the callback\n\t\tif (typeof this.options.renderPageItem === 'function') {\n\t\t\tthis.options.renderPageItem(item);\n\t\t}\n\t\t//Else if there was a passed in page template, render that, otherwise do nothing\n\t\telse if (typeof this.options.pageItemTemplate != null) {\n\t\t\tPJQ.templating.TemplateRenderer.renderTemplate(true, this.options.pageItemTemplate, this.$paginationData, _.extend({\n\t\t\t\tmodel: item\n\t\t\t}, this.options.renderData));\n\t\t}\n\t}\n};","//Views\nPJQ.views.payment = {};\n\nPJQ.views.payment.PaymentModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Payment'),\n\t\tonSave: _.noop,\n\t\tminWidth: 700,\n\t\tmaxWidth: 800\n\t},\n\tevents: {\n\t\t'click .payment-complete': 'paymentCompleteClicked',\n\t\t'click .payment-cancel': 'paymentCancelClicked'\n\t},\n\terrors: {\n\t\tFORM_NOT_COMPLETE: 'All required fields (*) must be filled out',\n\t\tINVALID_ACCOUNT: \"The card number you entered is invalid\",\n\t\tDECLINED: \"The card you entered was declined. This can be due to an incorrect address, expiration date, security code, or insufficient funds.\",\n\t\tERROR: \"Unable to process payment right now. Please try again later or contact customer service.\"\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (this.options.product instanceof PJQ.models.payment.Product) {\n\t\t\tif (!(this.options.products instanceof PJQ.collections.payment.Products)) {\n\t\t\t\tthis.options.products = new PJQ.collections.payment.Products();\n\t\t\t}\n\t\t\tthis.options.products.add(this.options.product);\n\t\t}\n\n\t\tif (!(this.options.contact instanceof PJQ.models.contacts.Contact)) {\n\t\t\tthis.options.contact = new PJQ.models.contacts.Contact();\n\t\t}\n\n\t\tif (_.size(this.options.products.models) === 0) {\n\t\t\t//todo: error here\n\t\t}\n\n\t\tthis.model = new PJQ.models.payment.Transaction({\n\t\t\tcardholderName: this.options.contact.get('contactName'),\n\t\t\taddress1: this.options.contact.get('address1'),\n\t\t\taddress2: this.options.contact.get('address2'),\n\t\t\tcity: this.options.contact.get('city'),\n\t\t\tstate: this.options.contact.get('state'),\n\t\t\tzip: this.options.contact.get('zip'),\n\t\t\tcountry: _.size(this.options.contact.get('country')) > 0 ? this.options.contact.get('country') : 'US',\n\t\t\tcardNumber: null,\n\t\t\texpirationMonth: null,\n\t\t\texpirationYear: null,\n\t\t\tsecurityCode: null,\n\t\t\tproducts: this.options.products\n\t\t});\n\n\t\tif (this.options.endpoint != null) {\n\t\t\tthis.model.endpoint = this.options.endpoint;\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.Binder(this.$('.payment-container'), this.model, {\n\t\t\twatchElements: [\n\t\t\t\t'input'\n\t\t\t],\n\t\t\tafterChange: _.bind(function ($field) {\n\t\t\t\tthis.validateField($field, true);\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('select.payment-expiration-month'),\n\t\t\thideDisabled: false,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('expirationMonth', value);\n\t\t\t\tthis.validateField(this.$('select.payment-expiration-month'), true);\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('select.payment-expiration-year'),\n\t\t\thideDisabled: false,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('expirationYear', value);\n\t\t\t\tthis.validateField(this.$('select.payment-expiration-year'), true);\n\t\t\t}, this)\n\t\t});\n\n\t\tlet statePicker = new PJQ.inputs.StatePicker({\n\t\t\tel: this.$('select.payment-state'),\n\t\t\tcountry: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tdefaultValue: this.model.get('state') ? this.model.get('state').toUpperCase() : null,\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('state', value);\n\t\t\t\tthis.validateField(this.$('select.payment-state'), true);\n\t\t\t}, this)\n\t\t});\n\n\t\tnew PJQ.inputs.CountryPicker({\n\t\t\tel: this.$('.payment-country'),\n\t\t\tdefaultValue: this.model.get('country') ? this.model.get('country').toUpperCase() : null,\n\t\t\tstatePicker: statePicker,\n\t\t\tzipInput: this.$('.payment-zip'),\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('country', value);\n\t\t\t\tthis.validateField(this.$('select.payment-country'), true);\n\t\t\t}, this)\n\t\t});\n\t},\n\tpaymentCompleteClicked: function () {\n\t\tif (this.validateForm()) {\n\t\t\tif (this.model.endpoint != null) {\n\t\t\t\tthis.$('.payment-cancel').prop('disabled', true);\n\t\t\t\tthis.$('.payment-complete').prop('disabled', true).text('Processing...');\n\t\t\t\tthis.model.save(null, {\n\t\t\t\t\tsuccess: _.bind(function (model, response) {\n\t\t\t\t\t\tif (response.result) {\n\t\t\t\t\t\t\tthis.removeModal();\n\t\t\t\t\t\t\tif (typeof this.options.onComplete === 'function') {\n\t\t\t\t\t\t\t\tthis.options.onComplete(this.model);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet error = response.error;\n\t\t\t\t\t\t\tif (_.size(error) === 0 || error === 'ERROR') {\n\t\t\t\t\t\t\t\terror = 'ERROR';\n\t\t\t\t\t\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.PAYMENT_ERROR, {\n\t\t\t\t\t\t\t\t\tresult: response,\n\t\t\t\t\t\t\t\t\tendpoint: (typeof this.model.endpoint === 'function') ? this.model.endpoint() : this.model.endpoint\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.renderFormError(this.errors[error]);\n\t\t\t\t\t\t\tthis.$('.payment-cancel').prop('disabled', false);\n\t\t\t\t\t\t\tthis.$('.payment-complete').prop('disabled', false).text('Complete Order');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (typeof this.options.onComplete === 'function') {\n\t\t\t\t\tthis.options.onComplete(this.model);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tvalidateForm: function () {\n\t\tlet self = this,\n\t\t\tisFormValid = true,\n\t\t\terrorFields = [];\n\t\tthis.$('.payment-container').find(':required').each(function () {\n\t\t\tif (!self.validateField($(this))) {\n\t\t\t\tisFormValid = false;\n\t\t\t\terrorFields.push($(this).data('pBind'));\n\t\t\t}\n\t\t});\n\n\t\tif (_.size(this.$formError) > 0) {\n\t\t\tthis.$formError.remove();\n\t\t}\n\t\tif (!isFormValid) {\n\t\t\tlet errorText = this.errors.FORM_NOT_COMPLETE;\n\t\t\tif (_.size(errorFields) === 1 && errorFields.indexOf('cardNumber') !== -1) {\n\t\t\t\terrorText = this.errors.INVALID_ACCOUNT\n\t\t\t}\n\t\t\tthis.renderFormError(errorText);\n\t\t}\n\t\treturn isFormValid;\n\t},\n\trenderFormError: function (errorText) {\n\t\tif (_.size(this.$formError) > 0) {\n\t\t\tthis.$formError.remove();\n\t\t}\n\t\tthis.$formError = $('<div>', {\n\t\t\tclass: 'text-danger fs-14 p-absolute left-1d25rem wd-70'\n\t\t}).text(errorText);\n\t\tthis.$('.modal-footer').append(this.$formError);\n\t},\n\tvalidateField: function ($field, isKeyupValidation = false) {\n\t\tlet attribute = $field.data('pBind'),\n\t\t\tvalue = this.model.get(attribute),\n\t\t\tisFieldValid = true;\n\t\tif (attribute === 'zip') {\n\t\t\tlet zipLength = 5;\n\t\t\tif (this.model.get(\"country\") === 'ca') {\n\t\t\t\tzipLength = 6;\n\t\t\t}\n\t\t\tisFieldValid = (_.size(value) === zipLength);\n\t\t}\n\t\telse if (attribute === 'cardNumber') {\n\t\t\tisFieldValid = PJQ.helpers.paymentHelpers.validateCreditCard(value);\n\t\t}\n\t\telse if (!value || _.size(value.toString()) === 0) {\n\t\t\tisFieldValid = false;\n\t\t}\n\n\t\tif (isFieldValid || !isKeyupValidation)\n\t\t\tPJQ.helpers.inputHelpers.setInputError($field, isFieldValid);\n\n\t\treturn isFieldValid;\n\t},\n\tpaymentCancelClicked: function () {\n\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\tthis.options.onCancel();\n\t\t}\n\t}\n});\n\nPJQ.views.payment.PaySimplePaymentModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-paysimple-payment-settings'),\n\t\tminWidth: 500,\n\t\tonSave: null,\n\t\tonError: null,\n\t\tisVerticalCenter: true\n\t},\n\tevents: {\n\t\t'click .btn-save': 'save',\n\t\t'keyup .input-cardholder-name': 'cardholderNameChanged',\n\t\t'keyup .input-card-number': 'setCardIssuer'\n\t},\n\tbeforeModalCreated: function () {\n\t\tPJQ.app.session.fetchBillingInfo(_.bind(function (billingInfo) {\n\t\t\tthis.model = billingInfo;\n\t\t\tthis.render();\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model == null) {\n\t\t\tnew PJQ.Loader(this.$('.modal-content'));\n\t\t\treturn;\n\t\t}\n\n\t\tnew PJQ.Binder(this.$el, this.model);\n\n\t\tPJQ.helpers.inputHelpers.inputMaskCreditCard(this.$('.input-card-number'));\n\n\t\tthis.monthPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.select-card-expiration-month'),\n\t\t\tnoneSelectedText: '',\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('cardExpirationMonth', value);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.yearPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.select-card-expiration-year'),\n\t\t\tnoneSelectedText: '',\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.model.set('cardExpirationYear', value);\n\t\t\t}, this)\n\t\t});\n\t},\n\tcardholderNameChanged: function (e) {\n\t\tlet name = $(e.currentTarget).val().trim(),\n\t\t\tfirstName,\n\t\t\tlastName,\n\t\t\tspaceIndex = name.indexOf(' ');\n\t\tif (spaceIndex !== -1) {\n\t\t\tfirstName = name.substr(0, spaceIndex);\n\t\t\tlastName = name.substr(spaceIndex + 1, _.size(name) - spaceIndex);\n\t\t}\n\t\telse {\n\t\t\tfirstName = name;\n\t\t\tlastName = '';\n\t\t}\n\t\tthis.model.set({\n\t\t\tfirstName: firstName,\n\t\t\tlastName: lastName\n\t\t})\n\t},\n\tsetCardIssuer: function () {\n\t\tlet cardBrand = PJQ.helpers.paymentHelpers.getCardIssuer(this.model.get('cardNumber')),\n\t\t\ticon = PJQ.helpers.paymentHelpers.getCardIssuerIconFAClass(cardBrand);\n\t\tthis.$('.card-issuer').addClass('fs-30 ' + icon);\n\t},\n\tvalidate: function () {\n\t\tlet isValid = true;\n\n\t\tlet isNameValid = _.size(this.model.get('firstName')) > 0 && _.size(this.model.get('lastName')) > 0;\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-cardholder-name'), isNameValid);\n\t\tisValid = isNameValid && isValid;\n\n\t\tlet isZipValid = _.size(this.model.get('zip').trim()) > 4;\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-cardholder-zip'), isZipValid);\n\t\tisValid = isZipValid && isValid;\n\n\t\tlet isCardValid = PJQ.helpers.paymentHelpers.validateCreditCard(this.model.get('cardNumber'));\n\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-card-number'), isCardValid);\n\t\tisValid = isCardValid && isValid;\n\n\t\tlet isYearValid = (this.yearPicker.getValue() != null);\n\t\tisValid = isYearValid && isValid;\n\t\tthis.$('.select-expiration-year').removeClass('p-field-error');\n\t\tif (!isYearValid) {\n\t\t\tthis.$('.select-expiration-year').addClass('p-field-error');\n\t\t}\n\n\t\tlet isMonthValid = (this.monthPicker.getValue() != null);\n\t\tisValid = isMonthValid && isValid;\n\t\tthis.$('.select-expiration-month').removeClass('p-field-error');\n\t\tif (!isMonthValid) {\n\t\t\tthis.$('.select-expiration-month').addClass('p-field-error');\n\t\t}\n\n\t\treturn isValid;\n\t},\n\tsaveBillingInfo: function (onSuccess, onError) {\n\t\tthis.model.save(null, {\n\t\t\tsuccess: _.bind(function (data) {\n\t\t\t\tif (typeof onSuccess === 'function') {\n\t\t\t\t\tonSuccess(this.model);\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\terror: _.bind(function () {\n\t\t\t\tif (typeof onError === 'function') {\n\t\t\t\t\tonError(this.model);\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\tsave: function () {\n\t\tlet loader = new PJQ.Loader(this.$('.modal-content'));\n\t\tif (this.validate()) {\n\t\t\tthis.saveBillingInfo(_.bind(function () {\n\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\tthis.options.onSave(this.model);\n\t\t\t\t}\n\t\t\t\tthis.removeModal();\n\t\t\t}, this), _.bind(function () {\n\t\t\t\tif (typeof this.options.onError === 'function') {\n\t\t\t\t\tthis.options.onError(this.model);\n\t\t\t\t}\n\t\t\t\tthis.removeModal();\n\t\t\t}, this));\n\t\t} else {\n\t\t\tloader.remove();\n\t\t}\n\t}\n});\n\nPJQ.views.payment.SubscriptionPaymentModal = PJQ.views.payment.PaySimplePaymentModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-subscription-payment'),\n\t\tsubTemplates: {\n\t\t\tselectSubscription: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'subscription-payment-select-subcription')\n\t\t},\n\t\tminWidth: 500,\n\t\tonSave: null,\n\t\tonError: null,\n\t\tisVerticalCenter: true,\n\t\tisShowCloseButton: true,\n\t\tselectedSubscriptionId: null\n\t},\n\tevents: {\n\t\t'click .btn-save': 'save',\n\t\t'keyup .input-cardholder-name': 'cardholderNameChanged',\n\t\t'keyup .input-card-number': 'setCardIssuer',\n\t\t'click .sub-option': 'subscriptionSelected'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.selectedSubscriptionId = this.options.selectedSubscriptionId > 0 ? this.options.selectedSubscriptionId : PJQ.app.session.subscription.id;\n\t\tPJQ.app.session.subscription.getCostsPerUser(_.bind(function (costs) {\n\t\t\tthis.changeCosts = costs;\n\t\t\tlet curCost = PJQ.app.session.subscription.get('cost');\n\t\t\tthis.changeCosts.basic = this.changeCosts.basic - curCost;\n\t\t\tif(this.changeCosts.basic < 0){\n\t\t\t\tthis.changeCosts.basic = 0;\n\t\t\t}\n\t\t\tthis.changeCosts.pro = this.changeCosts.pro - curCost;\n\t\t\tif(this.changeCosts.pro < 0){\n\t\t\t\tthis.changeCosts.pro = 0;\n\t\t\t}\n\t\t\tthis.changeCosts.enterprise = this.changeCosts.enterprise - curCost;\n\t\t\tif(this.changeCosts.enterprise < 0){\n\t\t\t\tthis.changeCosts.enterprise = 0;\n\t\t\t}\n\n\t\t\tPJQ.app.session.fetchBillingInfo(_.bind(function (billingInfo) {\n\t\t\t\tthis.model = billingInfo;\n\t\t\t\tthis.hasCardOnFile = this.model.get('cardNumber') != null;\n\t\t\t\tthis.render();\n\t\t\t}, this));\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\thasCardOnFile: this.hasCardOnFile,\n\t\t\tselectedSubscriptionId: this.selectedSubscriptionId,\n\t\t\terror: this.error\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (this.model == null) {\n\t\t\tnew PJQ.Loader(this.$('.modal-content'));\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.hasCardOnFile) {\n\t\t\tnew PJQ.Binder(this.$el, this.model);\n\n\t\t\tPJQ.helpers.inputHelpers.inputMaskCreditCard(this.$('.input-card-number'));\n\n\t\t\tthis.monthPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-card-expiration-month'),\n\t\t\t\tnoneSelectedText: '',\n\t\t\t\tdefaultValue: this.model.get('cardExpirationMonth'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('cardExpirationMonth', value);\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tthis.yearPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.select-card-expiration-year'),\n\t\t\t\tnoneSelectedText: '',\n\t\t\t\tdefaultValue: this.model.get('cardExpirationYear'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tthis.model.set('cardExpirationYear', value);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.renderSelectedSubscription();\n\t},\n\tsubscriptionSelected: function (e) {\n\t\tthis.selectedSubscriptionId = parseInt($(e.currentTarget).data('subId'));\n\t\tthis.renderSelectedSubscription();\n\t},\n\trenderSelectedSubscription: function () {\n\t\tthis.renderSubTemplate(false, this.options.subTemplates.selectSubscription, this.$('.subscription-select'), {\n\t\t\tselectedSubscriptionId: this.selectedSubscriptionId\n\t\t});\n\t\tthis.renderTotal();\n\t},\n\trenderTotal: function () {\n\t\tlet cost;\n\t\tswitch (this.selectedSubscriptionId) {\n\t\t\tcase PJQ.constants.subscriptions.types.BASIC:\n\t\t\t\tcost = this.changeCosts.basic;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.subscriptions.types.PRO:\n\t\t\t\tcost = this.changeCosts.pro;\n\t\t\t\tbreak;\n\t\t\tcase PJQ.constants.subscriptions.types.ENTERPRISE:\n\t\t\t\tcost = this.changeCosts.enterprise;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcost = 0;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.$('.payment-total').html(PJQ.helpers.formatHelpers.formatCurrency(cost * PJQ.app.session.subscription.get('userSeats'), 2, true));\n\t},\n\tsave: function () {\n\t\tlet $err = this.$('.payment-error'),\n\t\t\tloader = new PJQ.Loader(this.$('.modal-content')),\n\t\t\terr = function () {\n\t\t\t\tloader.remove();\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Encountered an error upgrading your subscription. Please contact customer service.'\n\t\t\t\t});\n\t\t\t};\n\t\t$err.empty();\n\n\t\tlet cNumber = this.model.get('cardNumber');\n\t\tlet fnChangeSubscription = _.bind(function () {\n\t\t\tPJQ.app.session.changeSubscription(this.selectedSubscriptionId, _.bind(function (data) {\n\t\t\t\tif (data == null || data.subscription == null) {\n\t\t\t\t\terr();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Subscription successfully updated'\n\t\t\t\t\t});\n\t\t\t\t\tthis.removeModal();\n\t\t\t\t}\n\t\t\t}, this), _.bind(function (response) {\n\t\t\t\tif (response.responseJSON != null && _.size(response.responseJSON.message) > 0) {\n\t\t\t\t\tthis.error = response.responseJSON.message;\n\t\t\t\t\tif (this.hasCardOnFile) {\n\t\t\t\t\t\tthis.model = new PJQ.models.billing.BillingInfo();\n\t\t\t\t\t\tthis.hasCardOnFile = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.model.set('cardNumber', cNumber);\n\t\t\t\t\t}\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$err.html(\"An error occurred processing the payment. Please contact customer service.\");\n\t\t\t\t\tloader.remove();\n\t\t\t\t\tthis.$('.btn-save').prop('disabled', true);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}, this);\n\n\t\tif (this.hasCardOnFile) {\n\t\t\tfnChangeSubscription();\n\t\t}\n\t\telse if (this.validate()) {\n\t\t\tthis.saveBillingInfo(_.bind(function () {\n\t\t\t\tfnChangeSubscription();\n\t\t\t}, this), _.bind(function () {\n\t\t\t\tif (typeof this.options.onError === 'function') {\n\t\t\t\t\tthis.options.onError(this.model);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t}\n});\n\n//Models\nPJQ.models.payment = {};\n\nPJQ.models.payment.Transaction = PJQ.models.BaseModel.extend();\n\nPJQ.models.payment.Product = PJQ.models.BaseModel.extend();\n\n\n//Collections\nPJQ.collections.payment = {};\n\nPJQ.collections.payment.Products = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.payment.Product\n});\n","PJQ.views.paysimple = {};\n\nPJQ.views.paysimple.SignUpOpenedModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-paysimple-sign-up-opened'),\n\t\tmaxWidth: 500,\n\t\tisShowCloseButton: true,\n\t\tisVerticalCenter: true\n\t}\n});","//Models\r\nPJQ.models.permissions = {};\r\n\r\nPJQ.models.permissions.Permission = PJQ.models.BaseModel.extend();\r\n\r\nPJQ.models.permissions.ProjectsPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ContactPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.DocumentPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.BidFilerPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.CalendarPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ReportPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.SettingsPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PrequalPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ResourcePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.TimeCardPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.InvoicePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.UserPermissions = PJQ.models.permissions.Permission.extend();\r\n\r\nPJQ.models.permissions.ProjectBasePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.MessagingPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PrivateMessagingPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.BidFormPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.DrawingPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.AttachmentPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ProjectContactPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PhotoGalleryPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.RFIPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.DailyReportPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PunchListPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ActionItemPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.SubmittalPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ReportPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.SchedulePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.BudgetPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.CommitmentPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.CommitmentChangeOrderPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PrimeContractPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PrimeContractChangeOrderPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.DirectCostPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.PayableInvoicePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ReceivableInvoicePermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.MeetingPermissions = PJQ.models.permissions.Permission.extend();\r\nPJQ.models.permissions.ChangeRequestPermissions = PJQ.models.permissions.Permission.extend();\r\n\r\nPJQ.models.permissions.Permissions = PJQ.models.BaseModel.extend({\r\n\tidAttribute: \"permissionId\",\r\n\tafterInit: function () {\r\n\t\tthis.on('change:userTypeId', function () {\r\n\t\t\tlet userTypeId = this.get('userTypeId');\r\n\t\t\tif (PJQ.app.session != null && userTypeId != null) {\r\n\t\t\t\tthis.userType = PJQ.app.session.userTypes.get(userTypeId);\r\n\t\t\t\tif (this.userType != null) {\r\n\t\t\t\t\tthis.userType.permissions = this;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.userType = null;\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\thasPermission: function (permission, options = {}) {\r\n\t\tlet result = null;\r\n\t\tlet splitPerm = _.bind(function (perm) {\r\n\t\t\tlet parts = perm.split('.'),\r\n\t\t\t\tsize = _.size(parts),\r\n\t\t\t\tstack = this,\r\n\t\t\t\tpermResult = false;\r\n\t\t\t_.each(parts, function (part, index) {\r\n\t\t\t\tif (stack == null) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index + 1 === size) {\r\n\t\t\t\t\tpermResult = stack.get(part) === true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tstack = stack[part];\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\t\treturn permResult;\r\n\t\t}, this);\r\n\t\tif (PJQ.helpers.objectHelpers.refinedType(permission) === 'array') {\r\n\t\t\t_.each(permission, function (perm) {\r\n\t\t\t\tif (options.or) {\r\n\t\t\t\t\tresult = splitPerm(perm) || (result == null ? false : result);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tresult = splitPerm(perm) && (result == null ? true : result);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tresult = splitPerm(permission);\r\n\t\t}\r\n\t\treturn result == null ? false : result;\r\n\t},\r\n\tparse: function (model) {\r\n\t\tif (model != null) {\r\n\t\t\tif (PJQ.app.session != null && model.userTypeId != null) {\r\n\t\t\t\tthis.userType = PJQ.app.session.userTypes.get(model.userTypeId);\r\n\t\t\t}\r\n\t\t\telse if (model.userType != null) {\r\n\t\t\t\tmodel.userTypeId = model.userType.id;\r\n\t\t\t\tthis.userType = model.userType;\r\n\t\t\t}\r\n\r\n\t\t\t_.each(this.subItems, function (permMap, key) {\r\n\t\t\t\tlet modelPermissions = model[key];\r\n\t\t\t\tif (modelPermissions != null) {\r\n\t\t\t\t\tthis[key] = new permMap(modelPermissions);\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\treturn model;\r\n\t},\r\n\tbeforeSave: function () {\r\n\t\t_.each(this.subItems, function (permMap, key) {\r\n\t\t\tlet permissions = this[key];\r\n\t\t\tif (permissions != null && permissions instanceof PJQ.models.permissions.Permission) {\r\n\t\t\t\tthis.set(key, permissions.toJSON());\r\n\t\t\t}\r\n\t\t}, this);\r\n\t}\r\n});\r\n\r\nPJQ.models.permissions.SystemPermissions = PJQ.models.permissions.Permissions.extend({\r\n\tsubItems: {\r\n\t\tprojects: PJQ.models.permissions.ProjectsPermissions,\r\n\t\tcontacts: PJQ.models.permissions.ContactPermissions,\r\n\t\tdocuments: PJQ.models.permissions.DocumentPermissions,\r\n\t\tbidFiler: PJQ.models.permissions.BidFilerPermissions,\r\n\t\tcalendar: PJQ.models.permissions.CalendarPermissions,\r\n\t\treports: PJQ.models.permissions.ReportPermissions,\r\n\t\tsettings: PJQ.models.permissions.SettingsPermissions,\r\n\t\tprequal: PJQ.models.permissions.PrequalPermissions,\r\n\t\tresources: PJQ.models.permissions.ResourcePermissions,\r\n\t\ttimeCards: PJQ.models.permissions.TimeCardPermissions,\r\n\t\tinvoices: PJQ.models.permissions.InvoicePermissions,\r\n\t\tusers: PJQ.models.permissions.UserPermissions\r\n\t},\r\n\tendpoint: function () {\r\n\t\tif (this.id > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions',\r\n\t\t\t\t\tvalue: this.id\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') < 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'users',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('userTypeId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'usertypes',\r\n\t\t\t\t\tvalue: this.get('userTypeId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'permissions'\r\n\t\t\t}\r\n\t\t]);\r\n\t}\r\n});\r\n\r\nPJQ.models.permissions.ProjectPermissions = PJQ.models.permissions.Permissions.extend({\r\n\tsubItems: {\r\n\t\tbase: PJQ.models.permissions.ProjectBasePermissions,\r\n\t\tmessaging: PJQ.models.permissions.MessagingPermissions,\r\n\t\tprivateMessaging: PJQ.models.permissions.PrivateMessagingPermissions,\r\n\t\tbidForms: PJQ.models.permissions.BidFormPermissions,\r\n\t\tdrawings: PJQ.models.permissions.DrawingPermissions,\r\n\t\tattachments: PJQ.models.permissions.AttachmentPermissions,\r\n\t\tprojectContacts: PJQ.models.permissions.ProjectContactPermissions,\r\n\t\tphotoGallery: PJQ.models.permissions.PhotoGalleryPermissions,\r\n\t\trfi: PJQ.models.permissions.RFIPermissions,\r\n\t\tdailyReports: PJQ.models.permissions.DailyReportPermissions,\r\n\t\tpunchList: PJQ.models.permissions.PunchListPermissions,\r\n\t\tactionItems: PJQ.models.permissions.ActionItemPermissions,\r\n\t\tsubmittals: PJQ.models.permissions.SubmittalPermissions,\r\n\t\treports: PJQ.models.permissions.ReportPermissions,\r\n\t\tschedule: PJQ.models.permissions.SchedulePermissions,\r\n\t\ttimeCards: PJQ.models.permissions.TimeCardPermissions,\r\n\t\tbudget: PJQ.models.permissions.BudgetPermissions,\r\n\t\tcommitments: PJQ.models.permissions.CommitmentPermissions,\r\n\t\tcommitmentChangeOrders: PJQ.models.permissions.CommitmentChangeOrderPermissions,\r\n\t\tprimeContracts: PJQ.models.permissions.PrimeContractPermissions,\r\n\t\tprimeContractChangeOrders: PJQ.models.permissions.PrimeContractChangeOrderPermissions,\r\n\t\tdirectCosts: PJQ.models.permissions.DirectCostPermissions,\r\n\t\tpayableInvoices: PJQ.models.permissions.PayableInvoicePermissions,\r\n\t\treceivableInvoices: PJQ.models.permissions.ReceivableInvoicePermissions,\r\n\t\tmeetings: PJQ.models.permissions.MeetingPermissions,\r\n\t\tchangeRequests: PJQ.models.permissions.ChangeRequestPermissions\r\n\t},\r\n\tendpoint: function () {\r\n\t\tif (this.id > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions',\r\n\t\t\t\t\tvalue: this.id\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') != null && this.get('projectId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects',\r\n\t\t\t\t\tvalue: this.get('projectId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') < 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'users',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('id') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'contacts',\r\n\t\t\t\t\tvalue: this.get('id')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\t\telse if (this.get('userTypeId') > 0) {\r\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'usertypes',\r\n\t\t\t\t\tvalue: this.get('userTypeId')\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'projects'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\tendpoint: 'permissions'\r\n\t\t\t\t}\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'projects',\r\n\t\t\t\tvalue: this.get('projectId') > 0 ? this.get('projectId') : null\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tendpoint: 'permissions'\r\n\t\t\t}\r\n\t\t]);\r\n\t}\r\n});\r\n\r\n//Views\r\nPJQ.views.permissions = {};\r\n\r\nPJQ.views.permissions.PermissionsEditorModal = PJQ.views.BaseModal.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Permissions-Editor'),\r\n\t\tminWidth: 800\r\n\t},\r\n\tdefaultEvents: {\r\n\t\t'click .btn-save': 'save',\r\n\t\t'click .btn-cancel': 'cancel'\r\n\t},\r\n\trenderData: function () {\r\n\t\treturn {\r\n\t\t\tmodel: this.model,\r\n\t\t\tproject: this.options.project\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tthis.permissionEditor = new PJQ.views.permissions.PermissionsEditor({\r\n\t\t\tel: this.$('.permissions'),\r\n\t\t\tmodel: this.model,\r\n\t\t\tproject: this.options.project\r\n\t\t});\r\n\t},\r\n\tsave: function () {\r\n\t\tnew PJQ.Loader(this.$('.modal-content'));\r\n\t\tthis.permissionEditor.save(_.bind(function () {\r\n\t\t\tthis.removeModal();\r\n\t\t\tPJQ.notifications.notify.successNotify({\r\n\t\t\t\tmessage: 'Permissions saved'\r\n\t\t\t});\r\n\r\n\t\t\tif (PJQ.app.session.user != null) {\r\n\t\t\t\tlet permFn = function () {\r\n\t\t\t\t\tPJQ.app.session.fetchSystemPermissions(function () {\r\n\t\t\t\t\t\tPJQ.app.navigator.refreshCommands();\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t\tif (this.model.get('id') === PJQ.app.session.user.get('id')) {\r\n\t\t\t\t\tpermFn();\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.model.get('id') == null && this.model.get('userTypeId') === PJQ.app.session.user.get('userTypeId')) {\r\n\t\t\t\t\tpermFn();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, this));\r\n\t},\r\n\tcancel: function () {\r\n\t\tthis.removeModal();\r\n\t}\r\n});\r\n\r\nPJQ.views.permissions.PermissionsEditor = PJQ.views.BaseView.extend({\r\n\tdefaults: {\r\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Permissions-Editor'),\r\n\t\thasTooltips: true\r\n\t},\r\n\tevents: {\r\n\t\t'click .btn-system-permissions-override': 'overrideSystem',\r\n\t\t'click .btn-system-permissions-revert': 'revertSystem',\r\n\t\t'click .btn-project-permissions-override': 'overrideProject',\r\n\t\t'click .btn-project-permissions-revert': 'revertProject'\r\n\t},\r\n\tbeforeFirstRender: function () {\r\n\t\tthis.fetchPermissions();\r\n\t},\r\n\tfetchPermissions: function () {\r\n\t\tif (this.options.project != null) {\r\n\t\t\tthis.fetchProjectPermissions(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.fetchSystemPermissions(_.bind(function () {\r\n\t\t\t\tthis.fetchProjectPermissions(_.bind(function () {\r\n\t\t\t\t\tthis.render();\r\n\t\t\t\t}, this));\r\n\t\t\t}, this));\r\n\t\t}\r\n\t},\r\n\tfetchSystemPermissions: function (callback) {\r\n\t\tthis.model.fetchSystemPermissions(_.bind(function (perm) {\r\n\t\t\tthis.systemPermissions = perm;\r\n\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\tcallback(perm);\r\n\t\t\t}\r\n\t\t}, this));\r\n\t},\r\n\tfetchProjectPermissions: function (callback) {\r\n\t\tif (this.model instanceof PJQ.models.userTypes.UserType) {\r\n\t\t\tthis.model.fetchProjectPermissions(_.bind(function (perm) {\r\n\t\t\t\tthis.projectPermissions = perm;\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback(perm);\r\n\t\t\t\t}\r\n\t\t\t}, this));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.model.fetchProjectPermissions(this.options.project ? this.options.project.id : null, _.bind(function (perm) {\r\n\t\t\t\tthis.projectPermissions = perm;\r\n\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\tcallback(perm);\r\n\t\t\t\t}\r\n\t\t\t}, this));\r\n\t\t}\r\n\t},\r\n\trenderData: function () {\r\n\t\treturn {\r\n\t\t\tmodel: this.model,\r\n\t\t\tproject: this.options.project,\r\n\t\t\tsystemPermissions: this.systemPermissions,\r\n\t\t\tprojectPermissions: this.projectPermissions,\r\n\t\t\thasFeature: this.hasFeature,\r\n\t\t\thasApproval: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_APPROVAL_REQUIRED) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_APPROVAL_REQUIRED) : false,\r\n\t\t\tnewAddressBook: !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)\r\n\t\t};\r\n\t},\r\n\tafterRender: function () {\r\n\t\tlet fnInit = _.bind(function (permissionEl, permissionModel) {\r\n\t\t\tlet $permissionEl = $(permissionEl),\r\n\t\t\t\tpermissionKey = $permissionEl.data('permission'),\r\n\t\t\t\tpermission = permissionModel[permissionKey];\r\n\t\t\tif (permission != null) {\r\n\t\t\t\tnew PJQ.Binder($permissionEl, permission, {\r\n\t\t\t\t\tsetDefaultValues: true,\r\n\t\t\t\t\twatchElements: [\r\n\t\t\t\t\t\t'input'\r\n\t\t\t\t\t],\r\n\t\t\t\t\tafterChange: _.bind(function ($perm, attr, val) {\r\n\t\t\t\t\t\tthis.permissionChanged($perm, attr, val);\r\n\t\t\t\t\t\tpermissionModel.isDirty = true;\r\n\t\t\t\t\t}, this)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (this.systemPermissions != null) {\r\n\t\t\t_.each(this.$('.system-permission-container'), function (permissionEl) {\r\n\t\t\t\tfnInit(permissionEl, this.systemPermissions);\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tif (this.projectPermissions != null) {\r\n\t\t\t_.each(this.$('.project-permission-container'), function (permissionEl) {\r\n\t\t\t\tfnInit(permissionEl, this.projectPermissions);\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\thasFeature: function(feature){\r\n\t\treturn PJQ.app.session.hasFeature(feature);\r\n\t},\r\n\tpermissionChanged: function ($permission, attr, val) {\r\n\t\t// cascading permissions logic\r\n\t\tlet level = $permission.data('level');\r\n\t\tif (level != null) {\r\n\t\t\tlet inputs = $permission.closest('.perm-container').find('input');\r\n\t\t\tif (val && level > 1) {\r\n\t\t\t\t_.each(inputs, function (otherPerm) {\r\n\t\t\t\t\tlet $otherPerm = $(otherPerm),\r\n\t\t\t\t\t\totherLevel = $otherPerm.data('level');\r\n\t\t\t\t\tif (otherLevel != null && otherLevel < level) {\r\n\t\t\t\t\t\t$otherPerm.prop('checked', val);\r\n\t\t\t\t\t\t$otherPerm.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (!val) {\r\n\t\t\t\t//don't cascade permissions up if there is another permission at this level still enabled\r\n\t\t\t\tif (_.find(inputs, function (otherPerm) {\r\n\t\t\t\t\tlet otherAttr = $(otherPerm).data('pBind'),\r\n\t\t\t\t\t\totherLevel = $(otherPerm).data('level');\r\n\t\t\t\t\treturn otherLevel === level && attr !== otherAttr && $(otherPerm).prop('checked');\r\n\t\t\t\t}) != null) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t_.each(inputs, function (otherPerm) {\r\n\t\t\t\t\tlet $otherPerm = $(otherPerm),\r\n\t\t\t\t\t\totherLevel = $otherPerm.data('level');\r\n\t\t\t\t\tif (otherLevel != null && otherLevel > level) {\r\n\t\t\t\t\t\t$otherPerm.prop('checked', val);\r\n\t\t\t\t\t\t$otherPerm.trigger('change');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\toverrideSystem: function () {\r\n\t\t//To override we have to set the correct values for an overridden permission\r\n\t\t//This will not have an id so it is temporary until saved to the server\r\n\t\t//When it is saved next, it POST to the correct endpoint to create the overridden permissions\r\n\t\tthis.systemPermissions.set({\r\n\t\t\tpermissionId: null,\r\n\t\t\tuserTypeId: null,\r\n\t\t\tid: this.model.get('id'),\r\n\t\t\toverride: true\r\n\t\t});\r\n\t\tthis.render();\r\n\t},\r\n\trevertSystem: function () {\r\n\t\t//To revert we have to delete the overridden permissions if it has been saved to the server already\r\n\t\t//We then have to fetch the inherited permissions\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\tthis.fetchSystemPermissions(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}, this);\r\n\t\tif (!this.systemPermissions.isNew()) {\r\n\t\t\tthis.systemPermissions.destroy({\r\n\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\tthis.systemPermissions = null;\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfp();\r\n\t\t}\r\n\t},\r\n\toverrideProject: function () {\r\n\t\t//To override we have to set the correct values for an overridden permission\r\n\t\t//This will not have an id so it is temporary until saved to the server\r\n\t\t//When it is saved next, it POST to the correct endpoint to create the overridden permissions\r\n\t\tthis.projectPermissions.set({\r\n\t\t\tpermissionId: null,\r\n\t\t\tuserTypeId: null,\r\n\t\t\tid: this.model.get('id'),\r\n\t\t\tprojectId: this.options.project ? this.options.project.id : null,\r\n\t\t\toverride: true\r\n\t\t});\r\n\t\tthis.render();\r\n\t},\r\n\trevertProject: function () {\r\n\t\t//To revert we have to delete the overridden permissions if it has been saved to the server already\r\n\t\t//We then have to fetch the inherited permissions\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\tthis.fetchProjectPermissions(_.bind(function () {\r\n\t\t\t\tthis.render();\r\n\t\t\t}, this));\r\n\t\t}, this);\r\n\t\tif (!this.projectPermissions.isNew()) {\r\n\t\t\tthis.projectPermissions.destroy({\r\n\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\tthis.projectPermissions = null;\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfp();\r\n\t\t}\r\n\t},\r\n\tsave: function (callback) {\r\n\t\tlet fp = _.bind(function () {\r\n\t\t\t\tthis.fetchProjectPermissions(_.bind(function () {\r\n\t\t\t\t\tthis.render();\r\n\t\t\t\t}, this));\r\n\t\t\t}, this),\r\n\t\t\tsaveP = _.bind(function () {\r\n\t\t\t\tif (this.projectPermissions != null && this.projectPermissions.hasChanged()) {\r\n\t\t\t\t\tthis.projectPermissions.save(null, {\r\n\t\t\t\t\t\tsuccess: _.bind(function () {\r\n\t\t\t\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}, this)\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\t\t\tcallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}, this);\r\n\t\tif (this.systemPermissions != null && this.systemPermissions.hasChanged()) {\r\n\t\t\tthis.systemPermissions.save(null, {\r\n\t\t\t\tsuccess: function () {\r\n\t\t\t\t\tsaveP();\r\n\t\t\t\t\tfp();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsaveP();\r\n\t\t}\r\n\t}\r\n});\r\n","PJQ.views.photos = {};\nPJQ.views.photos.PhotoGallery = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Photo-Gallery'),\n\t\tsubTemplates: {\n\t\t\tdateGroup: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Photo-Gallery-Date-Group'),\n\t\t\tphoto: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Photo-Gallery-Photo')\n\t\t},\n\t\tcanExport: true,\n\t\tpreviewImageDimension: 160,\n\t\tshowCreatedByLink: true\n\t},\n\tevents: {\n\t\t'click .gallery-photo-image': 'viewPhoto',\n\t\t'click .gallery-photo-download': 'downloadPhoto',\n\t\t'keyup .gallery-search': 'filter',\n\t\t'click .select-photo': 'selectPhoto',\n\t\t'click .select-date-group': 'selectDateGroup',\n\t\t'click .group-by': 'selectGroupBy'\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (this.collection == null && this.options.project != null) {\n\t\t\tthis.options.canExport = this.options.project.hasPermission('photoGallery.canExport');\n\t\t\tthis.options.project.fetchGalleryPhotos(_.bind(function (photos) {\n\t\t\t\tthis.collection = photos;\n\t\t\t\tthis.render();\n\t\t\t}, this));\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeRender: function () {\n\t\tthis.groupBy = \"day\";\n\t\tthis.renderData = {\n\t\t\tcollection: this.collection,\n\t\t\tgroupByDefault: this.groupBy,\n\t\t\tgroupByOptions: [\"Year\", \"Month\", \"Week\", \"Day\"]\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (this.collection == null) {\n\t\t\tnew PJQ.Loader(this.$('.photo-gallery'));\n\t\t}\n\t\telse {\n\t\t\tthis.renderPhotos();\n\t\t}\n\n\t\tthis.filesToolbar = new PJQ.views.toolbars.FilesToolbar({\n\t\t\tel: this.$el,\n\t\t\tisPhotos: true,\n\t\t\tonClose: _.bind(function () {\n\t\t\t\tthis.deselectAll();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.startDatePicker = new PJQ.inputs.Datepicker({\n\t\t\tel: this.$('.gallery-filter-start-date'),\n\t\t\tisShowTimezone: false,\n\t\t\tdatepickerOptions: {\n\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n\t\t\t},\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.filter();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.endDatePicker = new PJQ.inputs.Datepicker({\n\t\t\tel: this.$('.gallery-filter-end-date'),\n\t\t\tisShowTimezone: false,\n\t\t\tdatepickerOptions: {\n\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n\t\t\t},\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.filter();\n\t\t\t}, this)\n\t\t});\n\t},\n\trenderPhotos() {\n\t\tif (_.size(this.collection.models) === 0) {\n\t\t\tthis.$('.photos-container .list-empty').removeClass('hidden');\n\t\t}\n\t\telse {\n\t\t\tlet groupedPhotos;\n\t\t\tswitch (this.groupBy) {\n\t\t\t\tcase 'year':\n\t\t\t\tcase 'month':\n\t\t\t\tcase 'day':\n\t\t\t\t\tlet dateFormat;\n\t\t\t\t\tif (this.groupBy === 'year') {\n\t\t\t\t\t\tdateFormat = 'yyyy';\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.groupBy === 'month') {\n\t\t\t\t\t\tdateFormat = 'MMMM';\n\t\t\t\t\t}\n\t\t\t\t\telse if (this.groupBy === 'day') {\n\t\t\t\t\t\tdateFormat = 'ddd, MMM dd, yyyy';\n\t\t\t\t\t}\n\t\t\t\t\tgroupedPhotos = _.groupBy(this.collection.models, function (model) {\n\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(model.get('createdOn'), dateFormat);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'week':\n\t\t\t\t\tlet startDateFormat = 'MMM dd',\n\t\t\t\t\t\tendDateFormat = 'MMM dd, yyyy';\n\t\t\t\t\tgroupedPhotos = _.groupBy(this.collection.models, function (model) {\n\t\t\t\t\t\tlet weekBounds = PJQ.helpers.dateHelpers.getWeekBounds(model.get('createdOn'));\n\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateString(weekBounds.start, startDateFormat) + ' - ' + PJQ.helpers.dateHelpers.getDateString(weekBounds.end, endDateFormat);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.$('.photos-container').empty();\n\t\t\t_.each(groupedPhotos, _.bind(function (photos, date) {\n\t\t\t\tlet $groupEl = PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.dateGroup, {\n\t\t\t\t\t\tdate: date,\n\t\t\t\t\t\tcanExport: this.options.canExport\n\t\t\t\t\t}),\n\t\t\t\t\t$datePhotos = $groupEl.find('.date-group-photos');\n\t\t\t\t_.each(photos, _.bind(function (photo) {\n\t\t\t\t\tthis.renderPhoto($datePhotos, photo);\n\t\t\t\t}, this));\n\t\t\t\tthis.$('.photos-container').append($groupEl);\n\t\t\t}, this));\n\t\t\tPJQ.app.lazyLoad().update();\n\t\t}\n\t},\n\tfilter: function () {\n\t\tlet self = this,\n\t\t\tsearch = this.$('.gallery-search').val().toLowerCase(),\n\t\t\tstartDateFilter = this.startDatePicker.getValue(),\n\t\t\tendDateFilter = this.endDatePicker.getValue();\n\t\t//Go through each of the date containers\n\t\tthis.$('.gallery-date-group').each(function () {\n\t\t\tlet $date = $(this),\n\t\t\t\tvisiblePhotoCount = 0;\n\t\t\t//Now go through each of the photos in the date containers, keeping count of how many photos are made visible\n\t\t\t$date.find('.gallery-photo-container').each(function () {\n\t\t\t\tlet $photo = $(this),\n\t\t\t\t\tcid = $(this).data('cid'),\n\t\t\t\t\tphoto = self.collection.get(cid);\n\t\t\t\tif (_.size(search) > 0 && photo.get('name').toLowerCase().indexOf(search) === -1) {\n\t\t\t\t\t$photo.addClass('hidden');\n\t\t\t\t}\n\t\t\t\telse if (startDateFilter != null || endDateFilter != null) {\n\t\t\t\t\tlet createdOn = photo.get('createdOn');\n\t\t\t\t\tif (startDateFilter != null && createdOn < startDateFilter) {\n\t\t\t\t\t\t$photo.addClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse if (endDateFilter != null && createdOn > endDateFilter) {\n\t\t\t\t\t\t$photo.addClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t$photo.removeClass('hidden');\n\t\t\t\t\t\tvisiblePhotoCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$photo.removeClass('hidden');\n\t\t\t\t\tvisiblePhotoCount++;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//If there weren't any photos in this date container made visible, hide the whole date container\n\t\t\tif (visiblePhotoCount === 0) {\n\t\t\t\t$date.addClass('hidden');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$date.removeClass('hidden');\n\t\t\t}\n\t\t});\n\t},\n\tselectGroupBy: function (e) {\n\t\tlet $groupBy = $(e.currentTarget);\n\t\tthis.$('.group-by').not($groupBy).removeClass('selected');\n\t\t$groupBy.addClass('selected');\n\n\t\tthis.groupBy = $groupBy.data('groupBy');\n\t\tthis.filesToolbar.close();\n\t\tthis.renderPhotos();\n\t},\n\trenderPhoto($container, file) {\n\t\tlet $fileEl = PJQ.templating.TemplateRenderer.parseTemplate(this.options.subTemplates.photo, {\n\t\t\tmodel: file,\n\t\t\tcanExport: this.options.canExport,\n\t\t\tpreviewImageDimension: this.options.previewImageDimension,\n\t\t\tshowCreatedByLink: this.options.showCreatedByLink\n\t\t});\n\t\t$container.append($fileEl);\n\t\treturn $fileEl;\n\t},\n\tviewPhoto: function (e) {\n\t\tlet file = this.collection.get($(e.currentTarget).closest('.gallery-photo-container').data('cid'));\n\t\tPJQ.app.view.renderPhotoViewer({\n\t\t\tmodel: file,\n\t\t\tcanDownload: this.options.canExport\n\t\t});\n\t},\n\tdownloadPhoto: function (e) {\n\t\tlet file = this.collection.get($(e.currentTarget).closest('.gallery-photo-container').data('cid'));\n\t\tfile.download();\n\t},\n\tselectPhoto: function (e) {\n\t\tlet $photo = $(e.currentTarget).closest('.gallery-photo-container'),\n\t\t\tcid = $photo.data('cid'),\n\t\t\tphotoModel = this.collection.get(cid),\n\t\t\tisSelected = this.filesToolbar.collection.get(cid) != null;\n\n\t\tif (isSelected) {\n\t\t\tthis.filesToolbar.removeFiles(photoModel);\n\t\t\t$photo.removeClass('selected');\n\t\t\t$photo.find('.select-photo').removeClass('fa-check-square').addClass('fa-square');\n\t\t}\n\t\telse {\n\t\t\tthis.filesToolbar.addFiles(photoModel);\n\t\t\t$photo.addClass('selected');\n\t\t\t$photo.find('.select-photo').removeClass('fa-square').addClass('fa-check-square');\n\t\t}\n\n\t\tlet $dateGroup = $photo.closest('.gallery-date-group');\n\t\tif (_.size($dateGroup.find('.gallery-photo-container:not(.selected)')) > 0) {\n\t\t\t$dateGroup.find('.select-date-group').removeClass('fa-check-square').addClass('fa-square');\n\t\t\t$dateGroup.removeClass('selected');\n\t\t}\n\t\telse {\n\t\t\t$dateGroup.find('.select-date-group').removeClass('fa-square').addClass('fa-check-square');\n\t\t\t$dateGroup.addClass('selected');\n\t\t}\n\t},\n\tselectDateGroup: function (e) {\n\t\tlet self = this,\n\t\t\t$dateGroup = $(e.currentTarget).closest('.gallery-date-group'),\n\t\t\tisSelected = $dateGroup.hasClass('selected'),\n\t\t\tdateGroupPhotos = [];\n\t\t$dateGroup.find('.gallery-photo-container').each(function () {\n\t\t\tlet $photo = $(this),\n\t\t\t\tcid = $photo.data('cid');\n\t\t\tdateGroupPhotos.push(self.collection.get(cid));\n\t\t\tif (isSelected) {\n\t\t\t\t$dateGroup.find('.select-date-group, .select-photo').removeClass('fa-check-square').addClass('fa-square');\n\t\t\t\t$photo.removeClass('selected');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$dateGroup.find('.select-date-group, .select-photo').removeClass('fa-square').addClass('fa-check-square');\n\t\t\t\t$photo.addClass('selected');\n\t\t\t}\n\t\t});\n\n\t\tif (isSelected) {\n\t\t\tthis.filesToolbar.removeFiles(dateGroupPhotos);\n\t\t\t$dateGroup.removeClass('selected');\n\t\t}\n\t\telse {\n\t\t\tthis.filesToolbar.addFiles(dateGroupPhotos);\n\t\t\t$dateGroup.addClass('selected');\n\t\t}\n\t},\n\tdeselectAll: function () {\n\t\tthis.$('.gallery-photo-container.selected,.gallery-date-group.selected').removeClass('selected');\n\t\tthis.$('.select-date-group, .select-photo').removeClass('fa-check-square').addClass('fa-square');\n\t}\n});\n\nPJQ.collections.photos = {};\nPJQ.collections.photos.PhotoShare = PJQ.collections.files.FileShare.extend({\n\tmodel: PJQ.models.files.File,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'photos'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'share',\n\t\t\t\tvalue: this.options.shareGuid\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.modules.photos = {\n\troutes: [\n\t\t{\n\t\t\troute: 'photos/share/:id',\n\t\t\tname: 'sharePhotos',\n\t\t\tcallback: function (id) {\n\t\t\t\tlet photos = new PJQ.collections.photos.PhotoShare(null, {\n\t\t\t\t\tshareGuid: id\n\t\t\t\t});\n\t\t\t\tphotos.fetch({\n\t\t\t\t\tsuccess: function () {\n\t\t\t\t\t\tPJQ.app.view.renderView(PJQ.views.photos.PhotoGallery, {\n\t\t\t\t\t\t\tcollection: photos\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/photos',\n\t\t\tname: 'projectPhotos',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectphotos\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/photos/:photoId',\n\t\t\tname: 'projectPhotos',\n\t\t\tcallback: function (projectId, photoId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectphotos\");\n\t\t\t}\n\t\t}\n\t]\n};\n\nPJQ.app.addRoutes(PJQ.modules.photos.routes);","$(function () {\n\tlet lastTime = 0,\n\t\tvendors = ['ms', 'moz', 'webkit', 'o'];\n\tfor (let x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n\t\twindow.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n\t\twindow.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n\t}\n\n\tif (!window.requestAnimationFrame)\n\t\twindow.requestAnimationFrame = function (callback) {\n\t\t\tlet currTime = new Date().getTime(),\n\t\t\t\ttimeToCall = Math.max(0, 16 - (currTime - lastTime)),\n\t\t\t\tid = window.setTimeout(function () {\n\t\t\t\t\t\tcallback(currTime + timeToCall);\n\t\t\t\t\t},\n\t\t\t\t\ttimeToCall);\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\n\tif (!window.cancelAnimationFrame)\n\t\twindow.cancelAnimationFrame = function (id) {\n\t\t\tclearTimeout(id);\n\t\t};\n});\n\nPJQ.helpers.photoHelpers = {\n\teaseOutQuart: function (currentTime, initialVal, changedVal, duration) {\n\t\tcurrentTime /= duration;\n\t\tcurrentTime--;\n\t\treturn -changedVal * (currentTime * currentTime * currentTime * currentTime - 1) + initialVal;\n\t}\n};\n\nPJQ.views.photos.PhotoViewer = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Photo-Viewer'),\n\t\telementId: 'iv-outer',\n\t\tzoomValue: 100,\n\t\tsnapView: true,\n\t\tmaxZoom: 500,\n\t\trefreshOnResize: true,\n\t\tcanDownload: true,\n\t\tzoomOnMouseWheel: true,\n\t\ttriggerRoute: false,\n\t\tonDelete: _.noop,\n\t\tshouldCreateCanvas: false,\n\t\tkeyListeners: [\n\t\t\t{\n\t\t\t\twhich: 27,\n\t\t\t\tkeys: ['Escape', 'Esc'],\n\t\t\t\tcallback: function () {\n\t\t\t\t\tthis.destroy();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\twhich: 37,\n\t\t\t\tcallback: function () {\n\t\t\t\t\tthis.previous();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\twhich: 39,\n\t\t\t\tcallback: function () {\n\t\t\t\t\tthis.next();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\twhich: 68,\n\t\t\t\tshiftKey: true,\n\t\t\t\tcallback: function () {\n\t\t\t\t\tthis.downloadFile();\n\t\t\t\t\t$(window).focus();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\twhich: 82,\n\t\t\t\tshiftKey: true,\n\t\t\t\tcallback: function () {\n\t\t\t\t\tthis.destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t},\n\tevents: {\n\t\t'click .iv-prev': 'previous',\n\t\t'click .iv-next': 'next',\n\t\t'click .iv-rotate-neg-90': 'rotateNeg90',\n\t\t'click .iv-rotate-90': 'rotate90'\n\t},\n\tbeforeFirstRender: function () {\n\t\tlet viewport = document.querySelector('meta[name=\"viewport\"]');\n\t\tif (viewport) {\n\t\t\tviewport.content = \"width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0\";\n\t\t}\n\n\t\tlet $body = $('body');\n\n\t\t//First set the element to the outer container so the photo gallery view renders inside of it\n\t\tthis.setElement($('#' + this.options.elementId));\n\n\t\tif (_.size(this.$el) === 0) {\n\t\t\tlet $outer = $('<div>', {\n\t\t\t\tid: this.options.elementId\n\t\t\t});\n\t\t\t$body.append($outer);\n\t\t\tthis.setElement($outer);\n\t\t}\n\n\t\t$body.css('overflow', 'hidden');\n\n\t\tthis.ZOOM_CONSTANT = 40;\n\t\tthis.MOUSE_WHEEL_COUNT = 5;\n\t\tthis.zoomValue = 100;\n\n\t\tthis.options.previousRoute = PJQ.app.router.getCurrentRoute();\n\t\tif (this.options.route) {\n\t\t\tPJQ.app.router.navigate(this.options.route);\n\t\t}\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tmodel: this.model,\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tsetContainerDimensions: function () {\n\t\tlet $window = $(window);\n\t\tthis.$el.css({\n\t\t\t\"max-width\": $window.width(),\n\t\t\t\"max-height\": $window.height()\n\t\t});\n\t},\n\tafterRender: function () {\n\t\tlet $contain = this.$('.iv-container');\n\t\tthis.setElement($contain);\n\t\tthis.setContainerDimensions();\n\n\t\tif (this.options.canDownload) {\n\t\t\tthis.$('.iv-download').removeClass('hidden');\n\t\t}\n\n\t\tif (this.options.canDelete) {\n\t\t\tthis.$('.iv-delete').removeClass('hidden');\n\t\t}\n\n\t\tif (this.$el.css('position') === 'static') {\n\t\t\tthis.$el.css('position', 'relative');\n\t\t}\n\n\t\tthis.snapView = this.$('.iv-snap-view');\n\t\tthis.snapImageWrap = this.$('.iv-snap-image-wrap');\n\t\tthis.imageView = this.$('.iv-image-view');\n\t\tthis.imageWrap = this.$('.iv-image-wrap');\n\t\tthis.snapHandle = this.$('.iv-snap-handle');\n\t\tthis.zoomHandle = this.$('.iv-zoom-handle');\n\t\tthis.createdOnDate = this.$('.photo-created-date');\n\t\tthis._viewerId = 'iv_' + _.uniqueId();\n\n\t\tthis.keydownListener = _.bind(function (e) {\n\t\t\tif ($(e.target).is(':input')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te = e || window.event;\n\t\t\tlet listener = _.find(this.options.keyListeners, function (listener) {\n\t\t\t\treturn (_.indexOf(listener.keys, e.key) !== -1 || listener.which === e.which) && (!listener.shiftKey || e.shiftKey);\n\t\t\t});\n\t\t\tif (listener != null && typeof listener.callback === 'function') {\n\t\t\t\t_.bind(listener.callback, this)();\n\t\t\t}\n\t\t}, this);\n\n\t\tlet eventSuffix = '.' + this._viewerId;\n\t\t$(document).on('keydown' + eventSuffix, this.keydownListener);\n\n\t\tthis.prevButton = this.$('.iv-prev');\n\t\tthis.nextButton = this.$('.iv-next');\n\n\t\tthis.init();\n\n\t\tthis.initViewer();\n\t},\n\tdownloadFile: function () {\n\t\tthis.model.download();\n\t},\n\tinitViewer: function () {\n\t\tif (this.model != null) {\n\t\t\tthis.initPaging();\n\t\t\tthis.renderPage();\n\t\t}\n\t\telse if (this.options.image) {\n\t\t\tthis.show(this.options.image);\n\t\t}\n\t},\n\tinitPaging: function () {\n\t\tthis.pagingModels = _.sortBy(_.filter(this.model.collection.models, function (model) {\n\t\t\treturn typeof model.isImage === 'function' && model.isImage();\n\t\t}), function (model) {\n\t\t\treturn model.id ? -model.id : 0;\n\t\t});\n\n\t\tthis.pageIndex = null;\n\t\t_.each(this.pagingModels, function (model, index) {\n\t\t\tif (model.cid === this.model.cid) {\n\t\t\t\tthis.pageIndex = index;\n\t\t\t}\n\t\t}, this);\n\n\t\tif (this.pageIndex != null) {\n\t\t\tthis.$('.iv-paging').removeClass('hidden');\n\t\t\tthis.pagingDisplay = this.$('.iv-paging-display');\n\t\t\tthis.renderPaging();\n\t\t}\n\t},\n\trenderPaging: function () {\n\t\tlet modelCount = _.size(this.pagingModels);\n\t\tthis.pagingDisplay.html((this.pageIndex + 1).toString() + ' of ' + modelCount.toString());\n\t\tif (this.pageIndex === 0) {\n\t\t\tthis.prevButton.addClass('disabled');\n\t\t}\n\t\telse {\n\t\t\tthis.prevButton.removeClass('disabled');\n\t\t}\n\n\t\tif ((this.pageIndex + 1) === modelCount) {\n\t\t\tthis.nextButton.addClass('disabled');\n\t\t}\n\t\telse {\n\t\t\tthis.nextButton.removeClass('disabled');\n\t\t}\n\t},\n\trenderPage: function () {\n\t\tthis.model = this.pagingModels[this.pageIndex];\n\t\tlet url = this.model.get('url');\n\t\tif (_.size(url) > 0) {\n\t\t\tthis.show(this.model.get('url'));\n\t\t}\n\t\telse if (this.model.file != null && this.model.file.dataURL != null) {\n\t\t\tthis.show(this.model.file.dataURL);\n\t\t}\n\t},\n\tprevious: function () {\n\t\tif (this.pageIndex > 0) {\n\t\t\t--this.pageIndex;\n\t\t\tthis.renderPaging();\n\t\t\tthis.renderPage();\n\t\t}\n\t},\n\tnext: function () {\n\t\tif ((this.pageIndex + 1) < _.size(this.pagingModels)) {\n\t\t\t++this.pageIndex;\n\t\t\tthis.renderPaging();\n\t\t\tthis.renderPage();\n\t\t}\n\t},\n\trotate: function (degrees) {\n\t\t//this code is only needed if we want to implement saved rotation and not just temporary viewing rotation\n\t\t// new PJQ.ajax.Request({\n\t\t// \tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t// \t\t{\n\t\t// \t\t\tendpoint: 'files',\n\t\t// \t\t\tvalue: this.model.get('guid')\n\t\t// \t\t},\n\t\t// \t\t{\n\t\t// \t\t\tendpoint: 'rotate'\n\t\t// \t\t}\n\t\t// \t], [\n\t\t// \t\t{\n\t\t// \t\t\tparameter: 'degrees',\n\t\t// \t\t\tvalue: degrees\n\t\t// \t\t}\n\t\t// \t])\n\t\t// }).put().done(_.bind(function () {\n\t\t// \tthis.renderPage();\n\t\t// }, this));\n\t\tlet rotation = this.model.get('rotation') != null ? this.model.get('rotation') : 0;\n\t\tif (rotation === 0 && degrees < 0) {\n\t\t\trotation = 360;\n\t\t}\n\t\telse if (rotation === 360 && degrees > 0) {\n\t\t\trotation = 0;\n\t\t}\n\t\tthis.model.set('rotation', (rotation + degrees) % 360);\n\t\tthis.renderPage();\n\t},\n\trotate90: function () {\n\t\tthis.rotate(90);\n\t},\n\trotateNeg90: function () {\n\t\tthis.rotate(-90)\n\t},\n\tcanDrag: function () {\n\t\treturn true;\n\t},\n\tcanZoom: function () {\n\t\treturn true;\n\t},\n\tshouldCreateCanvas: function () {\n\t\treturn this.options.shouldCreateCanvas === true;\n\t},\n\tinit: function () {\n\t\tlet viewer = this,\n\t\t\toptions = this.options,\n\t\t\teventSuffix = '.' + viewer._viewerId,\n\t\t\tsnapHandle = this.snapHandle,\n\t\t\tsnapImgWrap = this.snapImageWrap,\n\t\t\timageWrap = this.imageWrap,\n\t\t\tsnapSlider = new PJQ.views.photos.Slider(snapImgWrap, {\n\t\t\t\tsliderId: viewer._viewerId,\n\t\t\t\tonStart: function () {\n\t\t\t\t\tif (!viewer.loaded) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.curHandleTop = parseFloat(snapHandle.css('top'));\n\t\t\t\t\tthis.curHandleLeft = parseFloat(snapHandle.css('left'));\n\t\t\t\t\tthis.handleWidth = parseFloat(snapHandle.width());\n\t\t\t\t\tthis.handleHeight = parseFloat(snapHandle.height());\n\n\t\t\t\t\tthis.width = snapImgWrap.width();\n\t\t\t\t\tthis.height = snapImgWrap.height();\n\n\t\t\t\t\t//stop momentum on image\n\t\t\t\t\tclearInterval(imageSlider.slideMomentumCheck);\n\t\t\t\t\tcancelAnimationFrame(imageSlider.sliderMomentumFrame);\n\t\t\t\t},\n\t\t\t\tonMove: function (e, position) {\n\t\t\t\t\tlet maxLeft = Math.max(this.width - this.handleWidth, this.curHandleLeft),\n\t\t\t\t\t\tmaxTop = Math.max(this.height - this.handleHeight, this.curHandleTop),\n\t\t\t\t\t\tminLeft = Math.min(0, this.curHandleLeft),\n\t\t\t\t\t\tminTop = Math.min(0, this.curHandleTop),\n\t\t\t\t\t\tleft = PJQ.helpers.mathHelpers.clamp(this.curHandleLeft + position.dx, minLeft, maxLeft),\n\t\t\t\t\t\ttop = PJQ.helpers.mathHelpers.clamp(this.curHandleTop + position.dy, minTop, maxTop),\n\t\t\t\t\t\timgLeft = viewer.imgWidth < viewer.containerDim.w ? (viewer.containerDim.w - viewer.imgWidth) / 2 : -left * viewer.imgWidth / this.width,\n\t\t\t\t\t\timgTop = viewer.imgHeight < viewer.containerDim.h ? (viewer.containerDim.h - viewer.imgHeight) / 2 : -top * viewer.imgHeight / this.height;\n\n\t\t\t\t\tsnapHandle.css({\n\t\t\t\t\t\ttop: top + 'px',\n\t\t\t\t\t\tleft: left + 'px'\n\t\t\t\t\t});\n\n\t\t\t\t\tviewer.currentImg.css({\n\t\t\t\t\t\tleft: imgLeft,\n\t\t\t\t\t\ttop: imgTop\n\t\t\t\t\t});\n\t\t\t\t\tif (viewer.shouldCreateCanvas()) {\n\t\t\t\t\t\tviewer.$canvas.css({\n\t\t\t\t\t\t\tleft: imgLeft,\n\t\t\t\t\t\t\ttop: imgTop\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tviewer.$activeCanvas.css({\n\t\t\t\t\t\t\tleft: imgLeft,\n\t\t\t\t\t\t\ttop: imgTop\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tviewer.$tooltips.css({\n\t\t\t\t\t\t\tleft: imgLeft,\n\t\t\t\t\t\t\ttop: imgTop\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tlet cOff = viewer.$canvas.offset();\n\t\t\t\t\t\tviewer.canvas.x = cOff.left;\n\t\t\t\t\t\tviewer.canvas.y = cOff.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}).init();\n\n\t\t/*Add slide interaction to image*/\n\t\tlet imageSlider = viewer._imageSlider = new PJQ.views.photos.Slider(imageWrap, {\n\t\t\tviewer: viewer,\n\t\t\tsliderId: viewer._viewerId,\n\t\t\tonStart: function (e, position) {\n\t\t\t\tif (!viewer.loaded) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (viewer.zooming) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet self = this;\n\t\t\t\tsnapSlider.onStart();\n\n\t\t\t\tself.positions = [position, position];\n\n\t\t\t\tself.startPosition = position;\n\n\t\t\t\t//clear all animation frame and interval\n\t\t\t\tviewer._clearFrames();\n\n\t\t\t\tself.slideMomentumCheck = setInterval(function () {\n\t\t\t\t\tif (!self.currentPos) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tself.positions.shift();\n\t\t\t\t\tself.positions.push({\n\t\t\t\t\t\tx: self.currentPos.mx,\n\t\t\t\t\t\ty: self.currentPos.my\n\t\t\t\t\t})\n\t\t\t\t}, 30);\n\t\t\t},\n\t\t\tonMove: function (e, position) {\n\t\t\t\tif (viewer.zooming) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.currentPos = position;\n\n\t\t\t\tsnapSlider.onMove(e, {\n\t\t\t\t\tdx: -position.dx * snapSlider.width / viewer.imgWidth,\n\t\t\t\t\tdy: -position.dy * snapSlider.height / viewer.imgHeight\n\t\t\t\t});\n\t\t\t},\n\t\t\tonEnd: function () {\n\t\t\t\tif (viewer.zooming) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet self = this,\n\t\t\t\t\txDiff = this.positions[1].x - this.positions[0].x,\n\t\t\t\t\tyDiff = this.positions[1].y - this.positions[0].y,\n\t\t\t\t\tpositionX = 0,\n\t\t\t\t\tpositionY = 0,\n\t\t\t\t\tstep = 1;\n\n\t\t\t\tif (Math.abs(xDiff) > 30 || Math.abs(yDiff) > 30) {\n\t\t\t\t\tpositionX = self.currentPos.dx;\n\t\t\t\t\tpositionY = self.currentPos.dy;\n\n\t\t\t\t\tfunction momentum() {\n\t\t\t\t\t\tif (step <= 60) {\n\t\t\t\t\t\t\tself.sliderMomentumFrame = requestAnimationFrame(momentum);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpositionX = positionX + PJQ.helpers.photoHelpers.easeOutQuart(step, xDiff / 3, -xDiff / 3, 60);\n\t\t\t\t\t\tpositionY = positionY + PJQ.helpers.photoHelpers.easeOutQuart(step, yDiff / 3, -yDiff / 3, 60);\n\n\t\t\t\t\t\tsnapSlider.onMove(null, {\n\t\t\t\t\t\t\tdx: -((positionX) * snapSlider.width / viewer.imgWidth),\n\t\t\t\t\t\t\tdy: -((positionY) * snapSlider.height / viewer.imgHeight)\n\t\t\t\t\t\t});\n\t\t\t\t\t\tstep++;\n\t\t\t\t\t}\n\n\t\t\t\t\tmomentum();\n\t\t\t\t}\n\t\t\t}\n\t\t}).init();\n\n\t\t/*Add zoom iteration in mouse wheel*/\n\t\tlet changedDelta = 0,\n\t\t\tself = this;\n\t\timageWrap.on(\"mousewheel\" + eventSuffix + \" DOMMouseScroll\" + eventSuffix, function (e) {\n\t\t\tif (!viewer.loaded || !options.zoomOnMouseWheel || !self.canZoom()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//clear all animation frame and interval\n\t\t\tviewer._clearFrames();\n\n\t\t\t// cross-browser wheel delta\n\t\t\tlet delta = Math.max(-1, Math.min(1, (e.originalEvent.wheelDelta || -e.originalEvent.detail))),\n\t\t\t\tzoomValue = viewer.zoomValue * (100 + delta * viewer.ZOOM_CONSTANT) / 100;\n\t\t\tif (!(zoomValue >= 100 && zoomValue <= options.maxZoom)) {\n\t\t\t\tchangedDelta += Math.abs(delta);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchangedDelta = 0;\n\t\t\t}\n\n\t\t\tif (changedDelta > viewer.MOUSE_WHEEL_COUNT) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\n\t\t\tlet contOffset = self.$el.offset(),\n\t\t\t\tx = (e.pageX || e.originalEvent.pageX) - contOffset.left,\n\t\t\t\ty = (e.pageY || e.originalEvent.pageY) - contOffset.top;\n\n\n\t\t\tviewer.zoom(zoomValue, {\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t});\n\n\t\t\t//show the snap viewer\n\t\t\tshowSnapView();\n\t\t});\n\n\n\t\t//apply pinch and zoom feature\n\t\timageWrap.on('touchstart' + eventSuffix, function (eStart) {\n\t\t\tif (!self.canDrag() || !viewer.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet touch0 = eStart.originalEvent.touches[0],\n\t\t\t\ttouch1 = eStart.originalEvent.touches[1];\n\t\t\tif (!(touch0 && touch1)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tviewer.zooming = true;\n\n\t\t\tlet contOffset = self.$el.offset(),\n\t\t\t\tstartDist = Math.sqrt(Math.pow(touch1.pageX - touch0.pageX, 2) + Math.pow(touch1.pageY - touch0.pageY, 2)),\n\t\t\t\tstartZoom = viewer.zoomValue,\n\t\t\t\tcenter = {\n\t\t\t\t\tx: ((touch1.pageX + touch0.pageX) / 2) - contOffset.left,\n\t\t\t\t\ty: ((touch1.pageY + touch0.pageY) / 2) - contOffset.top\n\t\t\t\t},\n\t\t\t\t$document = $(document),\n\t\t\t\tmoveListener = function (eMove) {\n\t\t\t\t\teMove.preventDefault();\n\n\t\t\t\t\tlet touch0 = eMove.originalEvent.touches[0],\n\t\t\t\t\t\ttouch1 = eMove.originalEvent.touches[1],\n\t\t\t\t\t\tnewDist = Math.sqrt(Math.pow(touch1.pageX - touch0.pageX, 2) + Math.pow(touch1.pageY - touch0.pageY, 2)),\n\t\t\t\t\t\tzoomValue = startZoom + (newDist - startDist) / 2;\n\n\t\t\t\t\tviewer.zoom(zoomValue, center);\n\t\t\t\t},\n\t\t\t\tendListener = function () {\n\t\t\t\t\t$document.off('touchmove', moveListener);\n\t\t\t\t\t$document.off('touchend', endListener);\n\t\t\t\t\tviewer.zooming = false;\n\t\t\t\t};\n\n\t\t\t$document.on('touchmove', moveListener);\n\t\t\t$document.on('touchend', endListener);\n\t\t});\n\n\n\t\t//handle double tap for zoom in and zoom out\n\t\tlet touchtime = 0,\n\t\t\tpoint;\n\t\timageWrap.on('click' + eventSuffix, function (e) {\n\t\t\tif (!self.canDrag()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (touchtime === 0) {\n\t\t\t\ttouchtime = Date.now();\n\t\t\t\tpoint = {\n\t\t\t\t\tx: e.pageX,\n\t\t\t\t\ty: e.pageY\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ((Date.now() - touchtime) < 500 && Math.abs(e.pageX - point.x) < 50 && Math.abs(e.pageY - point.y) < 50) {\n\t\t\t\t\tif (viewer.zoomValue === options.zoomValue) {\n\t\t\t\t\t\tviewer.zoom(200)\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tviewer.resetZoom()\n\t\t\t\t\t}\n\t\t\t\t\ttouchtime = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttouchtime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//zoom in zoom out using zoom handle\n\t\tlet slider = viewer.snapView.find('.iv-zoom-slider');\n\t\tnew PJQ.views.photos.Slider(slider, {\n\t\t\tviewer: viewer,\n\t\t\tsliderId: viewer._viewerId,\n\t\t\tonStart: function (eStart) {\n\t\t\t\tif (!viewer.loaded) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.leftOffset = slider.offset().left;\n\t\t\t\tthis.handleWidth = viewer.zoomHandle.width();\n\t\t\t\tthis.onMove(eStart);\n\t\t\t},\n\t\t\tonMove: function (e) {\n\t\t\t\tlet newLeft = (e.pageX || e.originalEvent.touches[0].pageX) - this.leftOffset - this.handleWidth / 2;\n\n\t\t\t\tnewLeft = Math.max(0, newLeft);\n\t\t\t\tnewLeft = Math.min(viewer._zoomSliderLength, newLeft);\n\n\t\t\t\tlet zoomValue = 100 + (options.maxZoom - 100) * newLeft / viewer._zoomSliderLength;\n\t\t\t\tviewer.zoom(zoomValue);\n\t\t\t}\n\t\t}).init();\n\n\t\t//display snapView on interaction\n\t\tlet snapViewTimeout,\n\t\t\tsnapViewVisible;\n\n\t\tfunction showSnapView(noTimeout) {\n\t\t\tif (!options.snapView) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (snapViewVisible || viewer.zoomValue <= 100 || !viewer.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearTimeout(snapViewTimeout);\n\t\t\tsnapViewVisible = true;\n\t\t\tviewer.snapView.css('opacity', 1);\n\t\t\tif (!noTimeout) {\n\t\t\t\tsnapViewTimeout = setTimeout(function () {\n\t\t\t\t\tviewer.snapView.css('opacity', 0);\n\t\t\t\t\tsnapViewVisible = false;\n\t\t\t\t}, 4000);\n\t\t\t}\n\t\t}\n\n\t\timageWrap.on('touchmove' + eventSuffix + ' mousemove' + eventSuffix, function () {\n\t\t\tshowSnapView();\n\t\t});\n\n\t\tlet snapEventsCallback = {};\n\t\tsnapEventsCallback['mouseenter' + eventSuffix + ' touchstart' + eventSuffix] = function () {\n\t\t\tsnapViewVisible = false;\n\t\t\tshowSnapView(true);\n\t\t};\n\n\t\tsnapEventsCallback['mouseleave' + eventSuffix + ' touchend' + eventSuffix] = function () {\n\t\t\tsnapViewVisible = false;\n\t\t\tshowSnapView();\n\t\t};\n\n\t\tviewer.snapView.on(snapEventsCallback);\n\n\t\t//calculate elements size on window resize\n\t\tif (options.refreshOnResize) {\n\t\t\t$(window).on('resize' + eventSuffix, function () {\n\t\t\t\tviewer.refresh()\n\t\t\t});\n\t\t}\n\n\t\t//prevent scrolling the backside if container if fixed positioned\n\t\tthis.imageView.on('touchmove' + eventSuffix + ' mousewheel' + eventSuffix + ' DOMMouseScroll' + eventSuffix, function (e) {\n\t\t\te.preventDefault();\n\t\t});\n\n\t\t//assign event on close button\n\t\tthis.$el.find('.iv-close').on('click' + eventSuffix, function () {\n\t\t\tviewer.destroy();\n\t\t});\n\n\t\t//assign event on delete button\n\t\tthis.$el.find('.iv-delete').on('click' + eventSuffix, function () {\n\t\t\tviewer.delete();\n\t\t});\n\n\t\t//assign event on delete button\n\t\tthis.$el.find('.iv-download').on('click' + eventSuffix, function (e) {\n\t\t\tviewer.download(e);\n\t\t});\n\t},\n\tzoom: function (perc, point) {\n\t\tperc = Math.round(Math.max(100, perc));\n\t\tperc = Math.min(this.options.maxZoom, perc);\n\n\t\tpoint = point || {\n\t\t\tx: this.containerDim.w / 2,\n\t\t\ty: this.containerDim.h / 2\n\t\t};\n\n\t\tthis.lastZoomPoint = point;\n\n\t\tlet maxZoom = this.options.maxZoom,\n\t\t\tcurPerc = this.zoomValue,\n\t\t\tcurImg = this.currentImg,\n\t\t\tcurLeft = parseFloat(curImg.css('left')),\n\t\t\tcurTop = parseFloat(curImg.css('top')),\n\t\t\tstep = 0;\n\n\t\tthis._clearFrames();\n\n\t\t//calculate base top,left,bottom,right\n\t\tlet containerDim = this.containerDim,\n\t\t\timageDim = this.imageDim,\n\t\t\tbaseLeft = (containerDim.w - imageDim.w) / 2,\n\t\t\tbaseTop = (containerDim.h - imageDim.h) / 2,\n\t\t\tbaseRight = containerDim.w - baseLeft,\n\t\t\tbaseBottom = containerDim.h - baseTop;\n\t\tlet zoom = _.bind(function () {\n\t\t\tstep++;\n\n\t\t\tif (step < 5) {\n\t\t\t\tthis._zoomFrame = requestAnimationFrame(zoom);\n\t\t\t}\n\n\t\t\tlet tickZoom = PJQ.helpers.photoHelpers.easeOutQuart(step, curPerc, perc - curPerc, 5),\n\t\t\t\tratio = tickZoom / curPerc,\n\t\t\t\timgWidth = this.imageDim.w * tickZoom / 100,\n\t\t\t\timgHeight = this.imageDim.h * tickZoom / 100,\n\t\t\t\tnewLeft = -((point.x - curLeft) * ratio - point.x),\n\t\t\t\tnewTop = -((point.y - curTop) * ratio - point.y);\n\n\t\t\t//fix for left and top\n\t\t\tif(this.prevItemInfo && step === 5){\n\t\t\t\tlet wIncrease = (this.prevItemInfo.canvas.width / this.canvas.width) * 100,\n\t\t\t\t\thIncrease = (this.prevItemInfo.canvas.height / this.canvas.height) * 100\n\n\t\t\t\tif(wIncrease !== 100){\n\t\t\t\t\tnewLeft = (this.prevItemInfo.position.left / wIncrease) * 100\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tnewLeft = this.prevItemInfo.position.left\n\t\t\t\t}\n\t\t\t\tif(hIncrease !== 100){\n\t\t\t\t\tnewTop = (this.prevItemInfo.position.top / hIncrease) * 100\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tnewTop = this.prevItemInfo.position.top\n\t\t\t\t}\n\t\t\t\tthis.prevItemInfo = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnewLeft = Math.min(newLeft, baseLeft);\n\t\t\t\tnewTop = Math.min(newTop, baseTop);\n\t\t\t}\n\n\t\t\t//fix for right and bottom\n\t\t\tif ((newLeft + imgWidth) < baseRight) {\n\t\t\t\tnewLeft = baseRight - imgWidth; //newLeft - (newLeft + imgWidth - baseRight)\n\t\t\t}\n\n\t\t\tif ((newTop + imgHeight) < baseBottom) {\n\t\t\t\tnewTop = baseBottom - imgHeight; //newTop + (newTop + imgHeight - baseBottom)\n\t\t\t}\n\n\n\t\t\tlet css = {\n\t\t\t\theight: imgHeight + 'px',\n\t\t\t\twidth: imgWidth + 'px',\n\t\t\t\tleft: newLeft + 'px',\n\t\t\t\ttop: newTop + 'px'\n\t\t\t};\n\t\t\tcurImg.css(css);\n\t\t\tif (this.shouldCreateCanvas()) {\n\t\t\t\tthis.$canvas[0].height = imgHeight;\n\t\t\t\tthis.$canvas[0].width = imgWidth;\n\t\t\t\tthis.$canvas.css(css);\n\t\t\t\tthis.$activeCanvas.css(css);\n\t\t\t\tthis.$activeCanvas[0].height = imgHeight;\n\t\t\t\tthis.$activeCanvas[0].width = imgWidth;\n\t\t\t\tthis.$tooltips.css(css);\n\n\t\t\t\tlet cOff = this.$canvas.offset();\n\t\t\t\tthis.canvas = {\n\t\t\t\t\twidth: imgWidth,\n\t\t\t\t\theight: imgHeight,\n\t\t\t\t\tx: cOff.left,\n\t\t\t\t\ty: cOff.top\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.zoomValue = tickZoom;\n\n\t\t\tthis._resizeHandle(imgWidth, imgHeight, newLeft, newTop);\n\n\t\t\t//update zoom handle position\n\t\t\tthis.zoomHandle.css('left', ((tickZoom - 100) * this._zoomSliderLength) / (maxZoom - 100) + 'px');\n\t\t}, this);\n\n\t\tzoom();\n\t},\n\t_clearFrames: function () {\n\t\tclearInterval(this._imageSlider.slideMomentumCheck);\n\t\tcancelAnimationFrame(this._imageSlider.sliderMomentumFrame);\n\t\tcancelAnimationFrame(this._zoomFrame)\n\t},\n\tresetZoom: function () {\n\t\tthis.lastZoomPoint = null;\n\t\tthis.zoom(this.options.zoomValue);\n\t},\n\t//calculate dimensions of image, container and reset the image\n\t_calculateDimensions: function () {\n\t\tthis.setContainerDimensions();\n\n\t\t//calculate content width of image and snap image\n\t\tlet imageWidth = this.currentImg.width(),\n\t\t\timageHeight = this.currentImg.height(),\n\t\t\t$iv = this.$('.iv-image-view'),\n\t\t\tcontWidth = $iv.width(),\n\t\t\tcontHeight = $iv.height(),\n\t\t\tsnapViewWidth = this.snapView.innerWidth(),\n\t\t\tsnapViewHeight = this.snapView.innerHeight();\n\n\t\tthis.containerDim = {\n\t\t\tw: contWidth,\n\t\t\th: contHeight\n\t\t};\n\n\t\t//set the image dimension\n\t\tlet isFlipped = this.currentImg.hasClass('transform-rotate-90') || this.currentImg.hasClass('transform-rotate-270');\n\t\tif (isFlipped) {\n\t\t\tlet ratio = imageHeight / imageWidth,\n\t\t\t\timgHeight = (imageWidth > imageHeight && contHeight >= contWidth) || ratio * contHeight > contWidth ? contWidth : ratio * contHeight,\n\t\t\t\timgWidth = imgHeight / ratio;\n\n\t\t\tthis.imageDim = {\n\t\t\t\tw: imgWidth - 120,\n\t\t\t\th: imgHeight - (120 * ratio)\n\t\t\t};\n\n\t\t\t//set the snap Image dimension\n\t\t\tthis.snapImg.css({\n\t\t\t\twidth: this.imageDim.w > this.imageDim.h ? snapViewHeight : this.imageDim.w * snapViewHeight / this.imageDim.h,\n\t\t\t\theight: this.imageDim.h > this.imageDim.w ? snapViewWidth : this.imageDim.h * snapViewWidth / this.imageDim.w\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tlet ratio = imageWidth / imageHeight,\n\t\t\t\timgWidth = (imageWidth > imageHeight && contHeight >= contWidth) || ratio * contHeight > contWidth ? contWidth : ratio * contHeight,\n\t\t\t\timgHeight = imgWidth / ratio;\n\n\t\t\tthis.imageDim = {\n\t\t\t\th: imgHeight - 120,\n\t\t\t\tw: imgWidth - (120 * ratio)\n\t\t\t};\n\n\t\t\t//set the snap Image dimension\n\t\t\tthis.snapImg.css({\n\t\t\t\twidth: this.imageDim.w > this.imageDim.h ? snapViewWidth : this.imageDim.w * snapViewHeight / this.imageDim.h,\n\t\t\t\theight: this.imageDim.h > this.imageDim.w ? snapViewHeight : this.imageDim.h * snapViewWidth / this.imageDim.w\n\t\t\t});\n\t\t}\n\n\t\tthis.imgWidth = this.imageDim.w * this.zoomValue / 100;\n\t\tthis.imgHeight = this.imageDim.h * this.zoomValue / 100;\n\n\t\t//reset image position and zoom\n\t\tlet newLeft = (contWidth - this.imageDim.w) / 2,\n\t\t\tnewTop = (contHeight - this.imageDim.h) / 2,\n\t\t\tcss = {\n\t\t\t\twidth: this.imageDim.w + 'px',\n\t\t\t\theight: this.imageDim.h + 'px',\n\t\t\t\tleft: newLeft + 'px',\n\t\t\t\ttop: newTop + 'px',\n\t\t\t\t'max-width': 'none',\n\t\t\t\t'max-height': 'none'\n\t\t\t};\n\t\tthis.currentImg.css(css);\n\n\t\tif (this.shouldCreateCanvas()) {\n\t\t\tthis.$canvas.css(css);\n\t\t\tthis.$activeCanvas.css(css);\n\t\t\tthis.$tooltips.css(css);\n\n\t\t\tlet cOff = this.$canvas.offset();\n\t\t\tthis.canvas = {\n\t\t\t\twidth: this.imageDim.w,\n\t\t\t\theight: this.imageDim.h,\n\t\t\t\tx: cOff.left,\n\t\t\t\ty: cOff.top\n\t\t\t};\n\t\t}\n\n\t\t//calculate zoom slider area\n\t\tthis._zoomSliderLength = snapViewWidth - this.zoomHandle.outerWidth();\n\t},\n\trefresh: function (refreshOpts) {\n\t\tif (!this.loaded) {\n\t\t\treturn;\n\t\t}\n\t\tthis._calculateDimensions();\n\t\tthis.resetZoom();\n\t},\n\t_resizeHandle: function (imgWidth, imgHeight, imgLeft, imgTop) {\n\t\tthis.imgWidth = imgWidth || this.imageDim.w * this.zoomValue / 100;\n\t\tthis.imgHeight = imgHeight || this.imageDim.h * this.zoomValue / 100;\n\n\t\tlet left = Math.max(-(imgLeft || parseFloat(this.currentImg.css('left'))) * 100 / this.imgWidth, 0),\n\t\t\ttop = Math.max(-(imgTop || parseFloat(this.currentImg.css('top'))) * 100 / this.imgHeight, 0),\n\t\t\thandleWidth = Math.min(this.containerDim.w * 100 / this.imgWidth, 100),\n\t\t\thandleHeight = Math.min(this.containerDim.h * 100 / this.imgWidth, 100);\n\n\t\tthis.snapHandle.css({\n\t\t\ttop: top + '%',\n\t\t\tleft: left + '%',\n\t\t\twidth: handleWidth + '%',\n\t\t\theight: handleHeight + '%'\n\t\t});\n\n\t\tif (this.loaded) {\n\t\t\tthis.afterDimensionChange();\n\t\t}\n\t},\n\tafterDimensionChange: function () {\n\n\t},\n\tshow: function (image, showOpts) {\n\t\tthis.$el.show();\n\t\tif (image) {\n\t\t\tthis.load(image, showOpts);\n\t\t}\n\t},\n\toptions: function (key, value) {\n\t\tif (!value) {\n\t\t\treturn this.options[key];\n\t\t}\n\t\tthis.options[key] = value;\n\t},\n\tdestroy: function () {\n\t\tif (this.options.route) {\n\t\t\tPJQ.app.router.navigate(this.options.previousRoute, {\n\t\t\t\ttrigger: this.options.triggerRoute\n\t\t\t});\n\t\t\tthis.options.triggerRoute = false;\n\t\t\tthis.options.route = null;\n\t\t}\n\n\t\t$(window).off('.' + this._viewerId);\n\t\t$(document).off('.' + this._viewerId);\n\t\tthis.$el.off();\n\t\tthis.$el.remove();\n\t\tthis.onClose();\n\n\t\t$('body').css('overflow', 'auto');\n\t},\n\tonClose: function(){\n\t\tif (typeof this.options.onClose === 'function') {\n\t\t\tthis.options.onClose();\n\t\t}\n\t},\n\tdelete: function () {\n\t\tthis.model.destroy();\n\t\tthis.collection.remove(this.model);\n\t\tthis.options.onDelete(this.model);\n\t\tthis.destroy()\n\t},\n\tdownload: function () {\n\t\tthis.model.download();\n\t},\n\tload: function (image, loadOpts = {persistZoom: false}) {\n\t\t//Clear any images that are already in the view/snap\n\t\tthis.$('.iv-snap-image,.iv-large-image').remove();\n\n\t\tthis.loader = new PJQ.Loader(this.imageView);\n\n\t\t//Add the snap image\n\t\tthis.snapImg = $('<img>', {\n\t\t\tclass: 'iv-snap-image',\n\t\t\tsrc: image,\n\t\t\tstyle: 'display:none;'\n\t\t});\n\t\tthis.$('.iv-snap-image-wrap').prepend(this.snapImg);\n\n\t\tthis.imageWrap.empty();\n\n\t\t//Add the full image\n\t\tthis.imageWrap.prepend($('<img>', {\n\t\t\tclass: 'iv-large-image noselect',\n\t\t\tsrc: image,\n\t\t\tstyle: 'display:none;'\n\t\t}));\n\n\t\tif (this.shouldCreateCanvas()) {\n\t\t\tthis.imageWrap.prepend($('<div>', {\n\t\t\t\tclass: 'iv-tooltips-outer noselect'\n\t\t\t}));\n\n\t\t\tthis.imageWrap.prepend($('<canvas>', {\n\t\t\t\tclass: 'iv-canvas noselect'\n\t\t\t}));\n\n\t\t\tthis.imageWrap.append($('<canvas>', {\n\t\t\t\tclass: 'iv-active-canvas noselect'\n\t\t\t}));\n\n\t\t\tthis.$canvas = this.$('.iv-canvas');\n\t\t\tthis.ctx = this.$canvas[0].getContext('2d');\n\n\t\t\tthis.$activeCanvas = this.$('.iv-active-canvas');\n\t\t\tthis.activeCtx = this.$activeCanvas[0].getContext('2d');\n\n\t\t\tthis.$tooltips = this.$('.iv-tooltips-outer');\n\t\t}\n\n\t\tthis.currentImg = this.$('.iv-large-image');\n\n\t\tthis.loaded = false;\n\n\t\tif(this.model && this.model.get('createdOn')) {\n\t\t\tthis.createdOnDate.attr('hidden', false);\n\t\t\tthis.createdOnDate.html(PJQ.helpers.dateHelpers.getDateString(this.model.get('createdOn'), PJQ.helpers.dateHelpers.dateFormats.DATE));\n\t\t}\n\t\telse{\n\t\t\tthis.createdOnDate.attr('hidden', true);\n\t\t}\n\n\t\t//refresh the view\n\t\tlet refreshView = _.bind(function () {\n\t\t\tthis.afterImageDownload();\n\n\t\t\tlet fnRender = _.bind(function () {\n\t\t\t\tthis.loader.remove();\n\t\t\t\tthis.loaded = true;\n\n\t\t\t\tlet newZoom = this.zoomValue,\n\t\t\t\t\tnewZoomPoint = this.lastZoomPoint;\n\t\t\t\tthis.zoomValue = 100;\n\t\t\t\tthis.refresh(loadOpts);\n\t\t\t\tif (loadOpts.persistZoom && this.prevItemInfo) {\n\t\t\t\t\tthis.zoom(newZoom, newZoomPoint);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.resetZoom();\n\t\t\t\t}\n\n\t\t\t\tthis.afterLoad();\n\n\t\t\t\tthis.currentImg.show();\n\t\t\t\tthis.snapImg.show();\n\t\t\t}, this);\n\t\t\tlet chromeVer = PJQ.helpers.browserHelpers.getChromeVersion();\n\t\t\tif (this.model.get('rotation') != null && !(this.model instanceof PJQ.models.drawings.Drawing)) {\n\t\t\t\tPJQ.helpers.imageHelpers.rotateElement(this.currentImg.add(this.snapImg), this.model.get('rotation'));\n\t\t\t\tfnRender();\n\t\t\t}\n\t\t\telse if (chromeVer == null || chromeVer >= 81) {\n\t\t\t\tfnRender();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.helpers.imageHelpers.rotateByExif(this.currentImg.add(this.snapImg), _.bind(function () {\n\t\t\t\t\tfnRender();\n\t\t\t\t}, this));\n\t\t\t}\n\t\t}, this);\n\n\t\tlet currentImage = this.currentImg[0];\n\t\tif (currentImage.complete && (typeof currentImage.naturalWidth === 'undefined' || currentImage.naturalWidth !== 0)) {\n\t\t\trefreshView();\n\t\t}\n\t\telse {\n\t\t\t$(currentImage).on('load', refreshView);\n\t\t}\n\t},\n\tafterImageDownload: function () {\n\n\t},\n\tafterLoad: function(){}\n});\n\nPJQ.views.files.FileViewer = PJQ.views.photos.PhotoViewer.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'File-Viewer'),\n\t\tzoomValue: 100,\n\t\tsnapView: true,\n\t\tmaxZoom: 500,\n\t\trefreshOnResize: true,\n\t\tzoomOnMouseWheel: true,\n\t\ttriggerRoute: false,\n\t\tisDisableDownload: true\n\t},\n\tevents: {\n\t\t'click .iv-prev': 'previous',\n\t\t'click .iv-next': 'next',\n\t\t'contextmenu .iv-image-view': 'preventRightClick'\n\t},\n\tinitPaging: function () {\n\t\tthis.pageCount = this.model.get('pages');\n\t\tif (!(this.pageCount > 0)) {\n\t\t\tthis.pageCount = 1;\n\t\t}\n\t\tthis.pageIndex = 0;\n\n\t\tthis.renderPaging();\n\t},\n\trenderPaging: function () {\n\t\tif (this.pageCount > 1) {\n\t\t\tthis.$('.iv-paging').removeClass('hidden');\n\t\t\tthis.pagingDisplay = this.$('.iv-paging-display');\n\n\t\t\tthis.pagingDisplay.html((this.pageIndex + 1).toString() + ' of ' + this.pageCount.toString());\n\t\t\tif (this.pageIndex === 0) {\n\t\t\t\tthis.prevButton.addClass('disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.prevButton.removeClass('disabled');\n\t\t\t}\n\n\t\t\tif ((this.pageIndex + 1) === this.pageCount) {\n\t\t\t\tthis.nextButton.addClass('disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.nextButton.removeClass('disabled');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$('.iv-paging').addClass('hidden');\n\t\t}\n\t},\n\trenderPage: function () {\n\t\tif (this.$('.iv-image-view').length > 0) {\n\t\t\tthis.show(this.model.renderUrl(this.pageIndex + 1));\n\t\t}\n\t},\n\tprevious: function () {\n\t\tif (this.pageIndex > 0) {\n\t\t\t--this.pageIndex;\n\t\t\tthis.renderPaging();\n\t\t\tthis.renderPage();\n\t\t}\n\t},\n\tnext: function () {\n\t\tif ((this.pageIndex + 1) < this.pageCount) {\n\t\t\t++this.pageIndex;\n\t\t\tthis.renderPaging();\n\t\t\tthis.renderPage();\n\t\t}\n\t},\n\tafterImageDownload: function () {\n\t\tif (!(this.model.get('pages') > 0)) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'files',\n\t\t\t\t\t\tvalue: this.model.get('entryId')\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'pages'\n\t\t\t\t\t}])\n\t\t\t}).get().done(_.bind(function (response) {\n\t\t\t\tthis.model.set('pages', response.pages);\n\t\t\t\tthis.initPaging();\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.renderPaging();\n\t\t}\n\t},\n\tpreventRightClick: function () {\n\t\treturn false;\n\t}\n});\n\nPJQ.views.photos.Slider = class {\n\tconstructor($el, options) {\n\t\tthis.container = $el;\n\t\tthis.onStart = options.onStart || _.noop;\n\t\tthis.onMove = options.onMove || _.noop;\n\t\tthis.onEnd = options.onEnd || _.noop;\n\t\tthis.sliderId = options.sliderId || 'slider' + Math.ceil(Math.random() * 1000000);\n\t\tthis.viewer = options.viewer ? options.viewer : null;\n\t}\n\n\tinit() {\n\t\tlet self = this,\n\t\t\teventSuffix = '.' + this.sliderId,\n\t\t\t$document = $(document);\n\n\t\t//assign event on snap image wrap\n\t\tthis.container.on('touchstart' + eventSuffix + ' mousedown' + eventSuffix, function (eStart) {\n\t\t\tlet def = function (eStart) {\n\t\t\t\teStart.preventDefault();\n\t\t\t\tlet touchMove = (eStart.type === \"touchstart\" ? \"touchmove\" : \"mousemove\") + eventSuffix,\n\t\t\t\t\ttouchEnd = (eStart.type === \"touchstart\" ? \"touchend\" : \"mouseup\") + eventSuffix,\n\t\t\t\t\teOriginal = eStart.originalEvent,\n\t\t\t\t\tsx = eOriginal.clientX || eOriginal.touches[0].clientX,\n\t\t\t\t\tsy = eOriginal.clientY || eOriginal.touches[0].clientY,\n\t\t\t\t\tstart = self.onStart(eStart, {\n\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\ty: sy\n\t\t\t\t\t});\n\t\t\t\tif (start === false)\n\t\t\t\t\treturn;\n\n\t\t\t\tlet moveListener = function (eMove) {\n\t\t\t\t\t\teMove.preventDefault();\n\n\t\t\t\t\t\teOriginal = eMove.originalEvent;\n\n\t\t\t\t\t\t//get the coordinates\n\t\t\t\t\t\tlet mx = eOriginal.clientX || eOriginal.touches[0].clientX,\n\t\t\t\t\t\t\tmy = eOriginal.clientY || eOriginal.touches[0].clientY;\n\n\t\t\t\t\t\tself.onMove(eMove, {\n\t\t\t\t\t\t\tdx: mx - sx,\n\t\t\t\t\t\t\tdy: my - sy,\n\t\t\t\t\t\t\tmx: mx,\n\t\t\t\t\t\t\tmy: my\n\t\t\t\t\t\t});\n\n\t\t\t\t\t},\n\t\t\t\t\tendListener = function () {\n\t\t\t\t\t\t$document.off(touchMove, moveListener);\n\t\t\t\t\t\t$document.off(touchEnd, endListener);\n\t\t\t\t\t\tself.onEnd();\n\t\t\t\t\t};\n\n\t\t\t\t$document.on(touchMove, moveListener);\n\t\t\t\t$document.on(touchEnd, endListener);\n\t\t\t}\n\t\t\tif (self.viewer && typeof self.viewer.onMouseDown === 'function' && (false === self.viewer.canDrag() || false === self.viewer.onMouseDown(eStart, def))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdef(eStart);\n\t\t});\n\n\t\treturn this;\n\t}\n};","//Models\nPJQ.models.preferences = {};\n\nPJQ.models.preferences.Preferences = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'preferences'\n\t\t\t}\n\t\t])\n\t},\n\tafterInit: function () {\n\t\tif (this.get('preferences') == null)\n\t\t\tthis.set('preferences', {});\n\t},\n\tgetPref: function (key) {\n\t\treturn this.get('preferences')[key];\n\t},\n\thasPref: function (key) {\n\t\treturn typeof this.get('preferences')[key] !== 'undefined';\n\t},\n\tsetPref: function (key, value) {\n\t\tthis.get('preferences')[key] = value;\n\t},\n\tdeletePref: function (key) {\n\t\tdelete this.get('preferences')[key];\n\t}\n});\n\nPJQ.constants.preferenceTypes = {\n\tACTION_ITEM_WORK_COMPLETED_STATUS_OVERRIDE: \"actionItemWorkCompletedStatusOverride\",\n\tADD_PARTICIPANTS_BID_PACKAGE_RADIUS: \"projectScopeRadius\",\n\tADDRESS_BOOK_DEFAULT_DISPLAY_DIRECTORY: \"addressBookDefaultDisplayDirectory\",\n\tADDRESS_BOOK_COLOR_COLUMNS: \"addressBookColorColumns\",\n\tADDRESS_BOOK_CONTACT_COMPANY_ID_LABEL: \"addressBookContactCompanyIdLabel\",\n\tADDRESS_BOOK_CONTACT_ID_LABEL: \"addressBookContactIdLabel\",\n\tADDRESS_BOOK_SHOW_PREQUAL_URL: \"addressBookShowPrequalURL\",\n\tADDRESS_BOOK_SHOW_PREQUAL_EDITOR: \"addressBookShowPrequalEditor\",\n\tADDRESS_BOOK_HIDE_DEFAULT_SEARCH: \"addressBookHideDefaultSearch\",\n\tADDRESS_BOOK_HIDE_MINORITY_STATUS: \"addressBookHideMinorityStatus\",\n\tADDRESS_BOOK_HIDE_SECTOR: \"addressBookHideSector\",\n\tADDRESS_BOOK_APPROVAL_REQUIRED: \"addressBookSelfAddApprovalRequired\",\n\tADDRESS_BOOK_CONTACT_UPDATER_ENABLED: \"addressBookContactUpdaterEnabled\",\n\tADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_RSVP: \"addressBookEnableAdminRequiredFields\",\n\tADDRESS_BOOK_ENABLE_ADMIN_REQUIRED_FIELDS_CORE: \"addressBookEnableAdminRequiredFieldsCore\",\n\tADDRESS_BOOK_HIDE_INACTIVE_CONTACTS: \"addressBookHideInactiveContacts\",\n\tADDRESS_BOOK_DEFAULT_COUNTRY: \"addressBookDefaultCountry\",\n\tADDRESS_BOOK_DEFAULT_FILTERS: \"addressBookDefaultFilters\",\n\tADDRESS_BOOK_DEFAULT_LOCATION_FILTERS: \"addressBookDefaultLocationFilters\",\n\tADDRESS_BOOK_PREVENT_DEFAULT_USER_TYPE: \"addressBookPreventDefaultUserType\",\n\tALLOW_SUB_GROUP_EDIT: \"addressBookAllowSubGroupEdit\",\n\tPJQ_REGISTRATION_WORKAREAS_OPTIONAL: \"pjqRegistrationWorkAreasOptional\",\n\tALLOW_SUB_GROUP_EDIT_REQUIRED: \"addressBookAllowSubGroupEditRequired\",\n\tAPP_NAV_ITEMS: \"appNavItems\",\n\tASAP_SCHEDULE_CONTRAINT_ENABLED: \"asapScheduleConstraintEnabled\",\n\tBIDDING_PROJECTS_REQUIRE_APPROVAL: \"biddingProjectsRequireApproval\",\n\tBIDDING_PROJECTS_TAB_NAME: \"biddingProjectsTabName\",\n\tDISABLE_BIDDING_PROJECTS: \"disableBiddingProjects\",\n\tBIDDING_PROJECTS_INCLUDE_COLUMNS: \"biddingProjectsIncludeColumns\",\n\tBID_FORM_NOT_SUBMITTED_STATUS_NAME_OVERRIDE: \"bidFormNotSubmittedStatusNameOverride\",\n\tPORTAL_APP_NAV_ITEMS: \"portalAppNavItems\",\n\tCAN_EDIT_MINORITY_CLASS_SUB: \"rsvpEditMinorityClassification\",\n\tCAN_EDIT_UNION_STATUS_SUB: \"rsvpEditUnionStatus\",\n\tCAN_ORDER_ON_ACCOUNT: \"canOrderOnAccount\",\n\tCOPY_SCOPES_GRID_LAYOUT: \"copyProjectScopesGridLayout\",\n\tDAILY_REPORT_ATTACHMENTS_NAME: \"dailyReportAttachmentsName\",\n\tDAILY_REPORT_SURVEY_NAME: \"dailyReportSurveyName\",\n\tDAILY_REPORT_NAV_ORDER: \"dailyReportNavOrder\",\n\tDAILY_REPORT_IS_LOCKED_AFTER_SUBMIT: \"isLockReportAfterSubmit\",\n\tDRAWING_SHARE_PREVENT_EXPIRATION: \"drawingSharePreventExpiration\",\n\tDRAWING_HIDE_TITLE: \"drawingsHideTitle\",\n\tDRAWING_HIDE_TAG: \"drawingsHideTag\",\n\tDEFAULT_AUTO_SELECT_DISABLED: \"defaultAutoSelectDisabled\",\n\tDISABLE_BLUE_BOOK_PUBLISH: \"isBlueBookPublishDisabled\",\n\tDISABLE_DAILY_REPORTS: \"isDailyReportsDisabled\",\n\tDISABLE_DAILY_REPORT_EXPENSES: \"isDisableDailyReportExpenses\",\n\tDISABLE_PREQUAL: \"disablePrequal\",\n\tDISABLE_PROJECT_PRIVATE_ATTACHMENTS: \"disableProjectPrivateAttachments\",\n\tDISABLE_PROJECT_PRIVATE_MESSAGES: \"projectWallHidePrivateMessages\",\n\tDISABLE_PROJECT_CONTACTS: \"disableProjectContacts\",\n\tDISABLE_PROJECT_DOCUMENTS: \"disableProjectDocuments\",\n\tDISABLE_PROJECT_PHOTOS: \"disableProjectPhotos\",\n\tDISABLE_RFI: \"isRFIDisabled\",\n\tDISABLE_SIMPLE_SEARCH: \"disableSimpleSearch\",\n\tDOCUMENTS_TAB_ID: \"appDocumentsTabId\",\n\tDRAWINGS_CURRENT_SET_DEFAULT_OFF: \"drawingsCurrentSetDefaultOff\",\n\tDOWNLOAD_CONTACT_UPDATE_REQ: \"rsvpContactInfoRequired\",\n\tDOWNLOAD_RESPONSE_REQ: \"preventDownloadUntilResponse\",\n\tDOWNLOAD_TERMS_PROJECT_CF: \"rsvpDownloadTermsProjectCustomField\",\n\tDOWNLOAD_TERMS_PROJECT: \"rsvpDownloadTermsProject\",\n\tDOWNLOAD_TERMS_SIGNATURE_REQ: \"rsvpDownloadTermsSignatureRequired\",\n\tDOWNLOAD_TERMS: \"rsvpDownloadTerms\",\n\tEMAIL_LOGO_URL: \"emailLogoURL\",\n\tENABLE_AB_PREQUAL_EDIT: \"enableAbPrequalEdit\",\n\tENABLE_ADMIN_PAID_DOWNLOADS: \"enableAdminPaidDownloads\",\n\tENABLE_BID_FILER: \"isBidFilerEnabled\",\n\tENABLE_BID_FORMS: \"isBidFormsEnabled\",\n\tENABLE_BID_FORM_SEALING: \"enableBidFormSealing\",\n\tENABLE_BID_PACKAGES: \"enableBidPackages\",\n\tENABLE_BID_PACKAGES_COUNT: \"enableBidPackagesCount\",\n\tENABLE_CONTACT_FIELD_SETTINGS: \"enableContactFieldSettings\",\n\tENABLE_USER_FIELD_SETTINGS: \"enableUserFieldSettings\",\n\tENABLE_COPY_PROJECT: \"enableCopyProject\",\n\tENABLE_DATA_TABLE_FIXED_HEADER: \"enableDataTableFixedHeader\",\n\tENABLE_DELIVER_BY_LOCAL: \"enableDeliverByLocal\",\n\tENABLE_DELIVER_BY_PICKUP: \"enableDeliverByPickup\",\n\tENABLE_DIRECTORY: \"isDirectoryEnabled\",\n\tENABLE_DIRECTORY_EDIT: \"isAllowDirectoryEdit\",\n\tDISABLE_DRAWINGS: \"isDrawingsDisabled\",\n\tENABLE_DRAWING_ANNOTATIONS: \"isDrawingAnnotationsEnabled\",\n\tENABLE_DRAWING_ANNOTATION_REFS: \"enableDrawingAnnotationRefs\",\n\tENABLE_FAX: \"enableFax\",\n\tENABLE_FIELD_REPORTS: \"fieldReportEnabled\",\n\tENABLE_GANTT_COLUMN_SORTING: \"enableGanttColumnSorting\",\n\tENABLE_INVOICES: \"enableInvoices\",\n\tENABLE_MEETINGS: \"enableMeetings\",\n\tENABLE_MEETING_TRANSCRIPTIONS: 'enableMeetingTranscriptions',\n\tDISABLE_OLD_SUBMITTALS: \"disableOldSubmittals\",\n\tDISABLE_OLD_ADDRESSBOOK: \"disableOldAddressBook\",\n\tENABLE_NEW_ADDRESSBOOK: \"enableNewAddressBook\",\n\tENABLE_OLD_ADDRESSBOOK: \"enableOldAddressBook\",\n\tENABLE_FINANCES: \"enableFinances\",\n\tENABLE_NEW_FILES: \"isNewFilesEnabled\",\n\tENABLE_NEW_FILE_VIEWER: \"enableNewFileViewer\",\n\tENABLE_NEW_GANTT: \"enableNewGantt\",\n\tENABLE_PERMISSIONS: \"enablePermissions\",\n\tENABLE_PERMISSIONS_PORTAL: \"enablePermissionsPortal\",\n\tENABLE_PREQUAL_AUDITLOG: \"enablePrequalAuditLog\",\n\tENABLE_PREQUAL_COMMENTS: \"enablePrequalComments\",\n\tENABLE_PROJECT_CONTAINERS: \"projectContainerEnabled\",\n\tENABLE_PROJECT_LOCATIONS: \"enableProjectLocations\",\n\tENABLE_PROJECT_MESSAGE_DECLINE_QUESTION: \"enableProjectMessageDeclineQuestion\",\n\tENABLE_PROJECT_NDA_DECLINE: \"enableProjectNDADecline\",\n\tENABLE_NEW_PROJECT_CONTACTS_MANAGEMENT: \"enableNewProjectContactsManagement\",\n\tENABLE_NEW_PROJECT_HISTORY: \"enableNewProjectHistory\",\n\tENABLE_NEW_PROJECT_WALL: \"enableNewProjectWall\",\n\tENABLE_NEW_SUBMITTALS: \"enableNewSubmittals\",\n\tENABLE_NEW_UPLOAD_BID_DOCS: \"enableNewUploadBidDocs\",\n\tENABLE_RAW_FILE_UPLOAD_BILLING: \"enableRawFileUploadBilling\",\n\tENABLE_RESOURCE_ALLOCATION: \"enableResourceAllocation\",\n\tENABLE_SCREENINGS: \"screeningEnabled\",\n\tENABLE_TIME_CARDS: \"enableTimeCards\",\n\tENABLE_TIMECARDS_SIGNATURE: \"enableTimeCardsSignature\",\n\tENABLE_USER_GROUPS: \"enableUserGroups\",\n\tENABLE_WORK_LOG_OVERTIME: \"enableWorkLogOvertime\",\n\tFILE_UPLOADER_SIDE_BY_SIDE: \"fileUploaderSideBySide\",\n\tEXPAND_PROJECT_ROOT_SHARED_FOLDERS: \"expandProjectRootSharedFolders\",\n\tDISABLE_PREQUAL_ATTACHMENT_DELETE: \"disablePrequalAttachmentDelete\",\n\tDISABLE_PREQUAL_CONTACT_ATTACHMENT_LINK: \"disablePrequalContactAttachmentLink\",\n\tDISABLE_PROJECT_ATTACHMENTS: \"isProjAttDisabled\",\n\tDISABLE_PROJECT_WALL_MESSAGING_OLD: \"disableOldProjectWallProjectMessaging\",\n\tENABLE_NEW_CONTACT_IMPORT: \"enableNewContactImport\",\n\tDISABLE_NEW_ADDRESSBOOK: \"isNewAddressBookDisabled\",\n\tDISABLE_NEW_DOCUMENTS: \"isNewDocumentsDisabled\",\n\tENABLE_NEW_RAW_FILE_UPLOAD: \"enableNewRawFileUpload\",\n\tDISABLE_NEW_SETTINGS: \"isNewSettingsDisabled\",\n\tDISABLE_SHARE_PEI: \"disableSharePEI\",\n\tDISABLE_WORK_AREAS: \"disableWorkAreas\",\n\tENABLE_ACTION_ITEMS: \"enableActionItems\",\n\tENABLE_ERP_ADMIN: \"enableERPAdmin\",\n\tENABLE_PREQUAL_PRIVATE_GROUPS: \"enablePrequalPrivateGroups\",\n\tENABLE_SUB_RESPONSE: \"projectMessagingAllowIndecisiveSubs\",\n\tENABLE_PROJECT_NAME_PAGE_TITLE: \"enableProjectNamePageTitle\",\n\tENABLE_PRINT_ON_DEMAND: \"enablePrintOnDemand\",\n\tENABLE_PUNCH_LISTS: \"isPunchListsEnabled\",\n\tENABLE_REGIONS_MAP: \"enableRegionsMap\",\n\tENABLE_RFI_NEW: \"isRFINewEnabled\",\n\tENABLE_RFI: \"isRFIEnabled\",\n\tDISABLE_SCHEDULING: \"isSchedulingDisabled\",\n\tENABLE_SCHEDULING: \"isSchedulingEnabled\",\n\tENABLE_SCHEDULE_TASK_NOTIFICATION_SETTINGS: \"enableScheduleTaskNotificationSettings\",\n\tENABLE_REPORTS_NEW: \"enableNewReports\",\n\tENABLE_OLD_CALENDAR: \"enableOldCalendar\",\n\tENABLE_PROJECT_STATUS_ID: \"enableNewProjectStatusId\",\n\tENABLE_SCOPES: \"enableProjectScope\",\n\tENABLE_SUBMITTALS: \"submittalEnabled\",\n\tENABLE_SUBMITTAL_WORKFLOW: \"enableSubmittalWorkflow\",\n\tENABLE_TOP_OF_PAGE_BUTTON: \"isEnableTopOfPageButton\",\n\tENABLE_WORK_AREAS_ZIP_RADIUS_COUNTY_PICKER: \"enableWorkAreasZipRadiusCountyPicker\",\n\tENABLE_WORK_AREAS: \"enableWorkAreas\",\n\tEXPAND_PROJECT_ATTACHMENTS: \"expandProjectAttachments\",\n\tFILE_NAVIGATOR_VIEW_ON_CLICK: \"fileNavigatorViewOnClick\",\n\tFLATTEN_DL_ALL_PROJECT_ATTACHMENTS: \"flattenDLAllProjAtt\",\n\tGROUP_LABEL: \"addressBookGroupLabel\",\n\tGROUP_LEVELS: \"addressBookGroupLevels\",\n\tHAS_GROUPS_LINKED: \"hasGroupsLinked\",\n\tHIDE_DAILY_REPORT_UNSUBMIT: \"hideDailyReportUnsubmit\",\n\tHIDE_SAVE_PAYMENT_INFO: \"hideSavePaymentInfo\",\n\tHIDE_VERSION_SELECTOR_ISSUED_ON: \"hideDrawingVersionSelectorIssuedOn\",\n\tHIDE_SUBMITTAL_ITEM_TYPE: \"hideSubmittalItemType\",\n\tIS_DISABLE_PARENT_GROUPS: \"isDisableParentGroups\",\n\tIS_DOCUMENT_CLERK: \"isDocumentClerk\",\n\tIS_DOCUMENT_CLERK_COMPANY: \"isDocumentClerkCompany\",\n\tIS_DODGE_CRM: \"dodgeCRMPortal\",\n\tIS_DODGE_WG: \"dodgeWhiteGlovePortal\",\n\tIS_ENABLE_NEW_DOWNLOADS: \"isEnableNewDownloads\",\n\tIS_HIDE_UNION_STATUS: \"addressBookHideUnionStatus\",\n\tIS_PROJECT_HOME_READONLY: \"isProjectHomeReadonly\",\n\tIS_PROJECT_WALL_MESSAGING_NEW: \"enableNewProjectWallProjectMessaging\",\n\tIS_PROJECT_WALL_MESSAGING_NEW_PORTAL: \"portalEnableNewProjectWallProjectMessaging\",\n\tIS_PROQUAL_CUSTOMER: \"isProqualCustomer\",\n\tIS_PROQUAL_PORTAL: \"proQualPortal\",\n\tIS_REQUIRE_BIDFORM_ATTACHMENT: \"isRequireBidformAttachment\",\n\tITB_RESUME_LABEL: \"itbResumeLabel\",\n\tITB_SEND_NEW_LABEL: \"itbSendNewLabel\",\n\tIS_SSO_ENABLED: \"isSSOEnabled\",\n\tITB_TAB_LABEL: \"itbTabLabel\",\n\tMESSAGE_RESPONSE_DUE_LABEL: \"messageResponseDueLabel\",\n\tMESSAGE_STATUS_LIST: \"messageStatusList\",\n\tNEW_APP_PORTAL: 'portalNewApp',\n\tNO_REQUIRE_UNION_SUB: 'addressBookUnionStatusNotRequired',\n\tORDER_DELIVER_BY: 'orderDeliverBy',\n\tORDER_LARGE_FORMAT_BINDING_TYPE: 'orderLargeFormatBindingType',\n\tORDER_LARGE_FORMAT_PAPER_TYPE: 'orderLargeFormatPaperType',\n\tORDER_LARGE_FORMAT_PRINT_SIZE: 'orderLargeFormatPrintSize',\n\tORDER_LARGE_FORMAT_QUANTITY: 'orderLargeFormatQuantity',\n\tORDER_PO_REQUIRED: 'orderPORequired',\n\tORDER_SMALL_FORMAT_BINDING_TYPE: 'orderSmallFormatBindingType',\n\tORDER_SMALL_FORMAT_PAPER_TYPE: 'orderSmallFormatPaperType',\n\tORDER_SMALL_FORMAT_QUANTITY: 'orderSmallFormatQuantity',\n\tPLAN_EXPRESS_PORTAL: \"planExpressPortal\",\n\tPREQUAL_HEADER: \"prequalHeader\",\n\tPREQUAL_ALLOW_SIGNATURE_ALWAYS: \"prequalAllowSignatureAlways\",\n\tPREQUAL_HELP_CONTACT_DETAILS: \"prequalHelpContactDetails\",\n\tPREQUAL_PROJECT_REFERENCE_COUNT: \"prequalProjectReferenceCount\",\n\tPREQUAL_PROJECT_REFS_GC_COL_NAME: \"prequalProjectRefsGcColName\",\n\tPREQUAL_SIGNATURE_ALERT: \"prequalSignatureAlert\",\n\tPREQUAL_TAX_ID_MASK: \"prequalTaxIdMask\",\n\tPREQUAL_TERMS: \"prequalTerms\",\n\tPREVAILING_WAGE_LABEL: \"prevailingWageLabel\",\n\tPREVENT_NATIONWIDE_WORK_AREAS: \"preventNationwideWorkAreas\",\n\tPREVENT_NATIONWIDE_WORK_AREAS_PORTAL: \"portalPreventNationwideWorkAreas\",\n\tPREVENT_NATIONWIDE_WORK_AREAS_SUB: \"portalPreventNationwideWorkAreas_Sub\",\n\tPRIVATE_MESSAGING_USER_ID_DEFAULT: \"internalMessageUserIdDefault\",\n\tPROCORE_ACCESS_REFRESH_TOKEN: \"proCoreAccessRefreshToken\",\n\tPROCORE_CLIENT_ID: \"proCoreClientId\",\n\tPROCORE_CLIENT_REDIRECT: \"proCoreClientRedirect\",\n\tPROCORE_PROJECT_NUMBER_CUSTOM_FIELD: \"procoreProjectNumberCustomFieldId\",\n\tPROCORE_URL_API: \"proCoreURL\",\n\tPROCORE_URL_AUTH: \"proCoreAuthURL\",\n\tPROJ_DASHBOARD_SELECT_ALL_ATTACHMENTS: \"rsvpSelectAllDocuments\",\n\tPROJECT_ACTIVITY_RANK_STATUS_LIST: \"projectActivityRankStatusList\",\n\tPROJECT_DEFAULT_BID_DUE_TIME: \"projectDefaultBidDueTime\",\n\tPROJECT_DEFAULT_BID_DUE_TIME_AMPM: \"projectDefaultBidDueTimeAMPM\",\n\tPROJECT_DETAILS_EXPORT: \"projectDetailsExport\",\n\tPROJECT_MANAGEMENT_CONTACTS_ENABLE_PRIMARY: 'projectManagementContactsEnablePrimary',\n\tPROJECT_MESSAGING_DEFAULT_TEMPLATE: \"projectMessagingDefaultTemplateKey\",\n\tPROJECT_MESSAGING_DISABLE_QUICKADD: \"projectMessagingDisableQuickAdd\",\n\tPROJECT_MESSAGING_DISABLE_RESPONSE_DUE: \"projectMessagingDisableResponseDue\",\n\tPROJECT_MESSAGING_DISTANCE_ICON_THRESHOLD: \"projectMessagingDistanceIconThreshold\",\n\tPROJECT_MESSAGING_ENABLE_REPLYTO_OVERRIDE: \"projectMessagingEnableReplyToOverride\",\n\tPROJECT_MESSAGING_MAX_GROUP_DISPLAY: \"projectMessagingMaxGroupDisplay\",\n\tPROJECT_MESSAGING_SEND_OPTIONS_EMAIL_ALWAYS: \"sendEmail\",\n\tPROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS: \"sendFax\",\n\tPROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED: \"sendFaxIfEmailFailed\",\n\tPROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL: \"sendFaxOnlyIfNoEmail\",\n\tPROJECT_MESSAGING_RESTRICT_TO_EXISTING_GROUPS: \"projectMessagingRestrictToExistingGroups\",\n\tPROJECT_NAV_HEADER_CUSTOM_MARKUP: \"projectNavHeaderCustomMarkup\",\n\tPROJECT_NDA_CHECKED_DEFAULT: \"projectNDACheckedDefault\",\n\tPROJECT_NDA_MODAL_TITLE: \"projectNDAModalTitle\",\n\tPROJECT_NOTES_LABEL: \"projectNotesLabel\",\n\tPROJECT_SHARED_FOLDER_NAME_OVERRIDE: \"projectSharedFolderNameOverride\",\n\tPROJECT_STATUS_LIST: \"projectStatusList\",\n\tPROJECT_STATUS_NON_DEFAULT_REQUIRED: \"projectStatusNonDefaultRequired\",\n\tPROJECT_USER_1_LABEL: \"projectUser1Label\",\n\tPROJECT_USER_2_HIDE: \"projectUser2Hide\",\n\tPROJECT_USER_2_LABEL: \"projectUser2Label\",\n\tPROJECT_WALL_ADMIN_BID_DUE_DATE_REQUIRED: \"projectWallAdminBidDueDateRequired\",\n\tPROJECT_WALL_ADMIN_NOTES_HIDDEN: \"projectWallAdminNotesHidden\",\n\tPROJECT_WALL_ADMIN_NOTES_REQUIRED: \"projectWallAdminNotesRequired\",\n\tPROJECT_WALL_ADMIN_USER_2_REQUIRED: \"projectWallAdminUser2Required\",\n\tPROJECT_WALL_ADMIN_VIEW_BID_PACKAGES: \"enableProjectWallViewBidPackages\",\n\tPROJECT_WALL_ADMIN_VIEW_COMPANY: \"enableProjectWallViewCompany\",\n\tPROJECT_WALL_ADMIN_VIEW_CONTACT: \"enableProjectWallViewContact\",\n\tPROJECT_WALL_ADMIN_VIEW_GROUP_COMPANY: \"enableProjectWallViewGroupCompany\",\n\tPROJECT_WALL_ADMIN_VIEW_GROUP_CONTACT: \"enableProjectWallViewGroupContact\",\n\tPROJECT_WALL_ADMIN_ZIP_REQUIRED: \"projectWallAdminPostalCodeRequired\",\n\tPROJECT_WALL_MESSAGING_SHOW_TEMPLATES: \"projectWallMessagingShowTemplates\",\n\tPROJECT_WALL_RSVP_AUTO_REPORT: \"rsvpAutoReportTab\",\n\tPROJECT_WALL_DEFAULT_MODULE: \"projectWallDefaultModule\",\n\tPROJECT_WALL_DEFAULT_PRIVATE_FOLDERS: \"projectDefaultPrivateRootFolderTemplate\",\n\tPROJECT_WALL_DEFAULT_PUBLIC_FOLDERS: \"projectDefaultPublicRootFolderTemplate\",\n\tPROJECT_WALL_MESSAGING_TAB_NAME: \"projectWallMessagingTabName\",\n\tPROJECT_WALL_PRIMARY_PROJECT_MANAGER_REQUIRED: \"projectWallPrimaryProjectManagerRequired\",\n\tPROJECT_WALL_SORT_GROUPS_BY_RESPONSE: \"projectWallAdminSortGroupsByResponse\",\n\tPROJECT_WALL_HIDE_BIDS_DUE: \"projectWallHideBidsDue\",\n\tPROJECT_WALL_TAB_ID: \"projectWallTabId\",\n\tPROJECT_SCHEDULE_FILTER_USER_ID: \"projectScheduleFilterUserId\",\n\tPUBLIC_PROJECTS_REQ_REG: \"publicProjectsRequireRegistration\",\n\tPUBLIC_PROJECTS_EMPTY_MESSAGE: \"publicProjectsEmptyMessage\",\n\tPUNCH_LIST_WORK_COMPLETED_STATUS_OVERRIDE: \"punchListWorkCompletedStatusOverride\",\n\tQUIKBID_GROUP_IDS: \"quikBidGroupIds\",\n\tQUIKBID_ZIP_CODES: \"quikBidZipCodes\",\n\tREGISTRATION_REDIRECT: \"registrationRedirect\",\n\tREGISTRATION_TAB_ID: \"registrationTabId\",\n\tRESOURCE_ALLOCATION_PRIMARY_ONLY: \"resourceAllocationPrimaryOnly\",\n\tRESPONSE_DUE_LABEL: \"responseDueLabel\",\n\tPROJECT_START_LABEL: \"projectStartLabel\",\n\tPROJECT_FINISH_LABEL: \"projectFinishLabel\",\n\tREQUIRE_PROJECT_START_FINISH: \"requireProjectStartFinish\",\n\tRESTRICT_GROUP_COUNT: \"addressBookGroupsRestrictChoiceCount\",\n\tRESOURCE_ALLOCATION_PROJECT_CUSTOM_FIELD_COLOR_BAR: \"resourceAllocationProjectCustomFieldColorBar\",\n\tRFI_DEFAULT_PUBLIC: \"rfiDefaultPublic\",\n\tRFI_DEFAULT_NOTIFY_PROJECT_CONTACTS: \"rfiDefaultNotifyProjectContacts\",\n\tRFI_DEFAULT_NOTIFY_PARTICIPANTS: \"rfiDefaultNotifyParticipants\",\n\tRFI_LOCATION_LABEL: \"rfiLocationLabel\",\n\tRFI_NAME_OVERRIDE: \"rfiNameOverride\",\n\tRFI_RESPONSE_NAME_OVERRIDE: \"rfiResponseNameOverride\",\n\tRSVP_DISABLE_PER_GROUP: \"rsvpDisablePerGroup\",\n\tRSVP_FOLDER_CHECKBOXES_ONLY: \"rsvpFolderCheckboxesOnly\",\n\tSETTINGS_LOCK: \"settingsLock\",\n\tPROJECT_DETAILS_PROJECT_ID: \"projectDetailsProjectId\",\n\tPROJECT_GANTT_HEADER_CUSTOM_MARKUP: \"projectGanttHeaderCustomMarkup\",\n\tHIDE_RESOURCE_CENTER: \"hideResourceCenter\",\n\tSIMPLE_SEARCH_DEFAULT_ADDRESS_BOOK: \"simpleSearchDefaultAddressBook\",\n\tSIMPLE_SEARCH_DEFAULT_RADIUS: \"simpleSearchDefaultRadius\",\n\tSORT_USER_ATTACHMENTS: \"sortUserAttachments\",\n\tSORT_COMPANY_ATTACHMENTS: \"sortCompanyAttachments\",\n\tSQUARE_TAKEOFF_ENABLED: \"enableSquareTakeoff\",\n\tSTACK_TAKEOFF_ENABLED: \"enableStackTakeoff\",\n\tSTART_END_HIDE: \"startEndHide\",\n\tSUB_ADDRESS_REQUIRED: \"rsvpAddressRequired\",\n\tSUB_RESTRICT_SINGLE_EMAIL: \"addressBookForceSingleEmail\",\n\tSUB_ZIP_REQUIRED: \"rsvpPostalCodeRequired\",\n\tTIMECARD_WEEKLY_EXPORT_TEMPLATE: \"timeCardWeeklyExportTemplate\",\n\tENABLE_WORK_LOG_WORK_ITEMS: 'enableWorkLogWorkItems',\n\tENABLE_WORK_LOG_PROGRESS: 'enableWorkLogProgress',\n\tWORK_LOG_WORK_ITEM_LABEL: 'workLogWorkItemLabel',\n\tWORK_LOG_WORK_ITEM_SUB_TEXT: 'workLogWorkItemSubText',\n};\n","PJQ.progress = {};\n\nPJQ.progress.ProgressBar = class {\n\tconstructor($el, options = {}) {\n\t\tthis.$outer = $el;\n\t\tthis.options = _.defaults(options, {\n\t\t\tisStriped: false,\n\t\t\theight: 20,\n\t\t\twidth: 'auto',\n\t\t\tisShowPercentage: false,\n\t\t\tprogress: 0,\n\t\t\tborderRadius: null\n\t\t});\n\n\t\tif (this.$el != null && this.$el.length > 0) {\n\t\t\tthis.renderProgressBar();\n\t\t}\n\t}\n\n\tmakeProgressBar() {\n\t\tlet colorClass = this.options.colorClass ?? this.getCompletionColorClass();\n\t\tlet $res = $('<div>', {\n\t\t\tclass: 'progress',\n\t\t\tstyle: `height: ${this.options.height}px; width: ${typeof this.options.width === 'number' ? `${this.options.width}px` : this.options.width}; border-radius: ${this.options.borderRadius ?? '.25rem'};`\n\t\t});\n\t\t$res.append($('<div>', {\n\t\t\tclass: 'progress-bar font-weight-light fs-14 bg-' + colorClass + ' text-' + (colorClass === 'warning' ? 'dark' : 'light'),\n\t\t\trole: 'progressbar',\n\t\t\tstyle: 'width:' + this.options.progress + '%;'\n\t\t}).text(this.options.isShowPercentage ? this.options.progress + '%' : ''));\n\t\treturn $res;\n\t}\n\n\tgetCompletionColorClass () {\n\t\tlet textClass = 'danger';\n\t\tif (this.options.progress === 100)\n\t\t\ttextClass = 'success';\n\t\telse if (this.options.progress > 60)\n\t\t\ttextClass = 'warning';\n\n\t\treturn textClass;\n\t}\n\n\trenderProgressBar() {\n\t\tif (_.size(this.$el) > 0) {\n\t\t\tthis.$el.remove();\n\t\t}\n\t\tthis.$el = this.makeProgressBar();\n\n\t\tthis.$outer.append(this.$el);\n\t}\n\n\tupdateProgress(progress = 0, colorClass = PJQ.views.prequal.PrequalEditor.prototype.getCompletionColorClass(progress)) {\n\t\tthis.options = _.defaults({\n\t\t\tprogress: progress,\n\t\t\tcolorClass: colorClass\n\t\t}, this.options);\n\t\tthis.renderProgressBar();\n\t}\n};","//Models\nPJQ.models.projectContacts = {};\n\nPJQ.models.projectContacts.ProjectContact = PJQ.models.contacts.Contact.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'contacts',\n\t\t\t\tvalue: this.get('id')\n\t\t\t}\n\t\t])\n\t},\n\tparse: function (model) {\n\t\tPJQ.models.contacts.Contact.prototype.parseContactData.call(this, model);\n\t\tPJQ.models.contacts.Contact.prototype.parseAttachmentData.call(this, model);\n\n\t\treturn model;\n\t},\n\tfetchProjectNotificationSettings: function (projectId, callback) {\n\t\tlet notificationSettings = null;\n\t\tif (!this.isNew()) {\n\t\t\tnotificationSettings = new PJQ.models.notificationSettings.ProjectNotificationSettings({\n\t\t\t\tid: this.get('id'),\n\t\t\t\tprojectId: this.get('projectId')\n\t\t\t});\n\t\t} else {\n\t\t\tnotificationSettings = new PJQ.models.notificationSettings.ProjectNotificationSettings({\n\t\t\t\tuserTypeId: this.get('userTypeId')\n\t\t\t});\n\t\t}\n\n\t\tnotificationSettings.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tcallback(notificationSettings);\n\t\t\t}, this)\n\t\t});\n\t},\n\tupdateIsPrimary: function (isPrimary, callback) {\n\t\tthis.set('isPrimary', isPrimary);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: this.endpoint() + '?isPrimary=' + isPrimary.toString()\n\t\t}).patch().success(_.bind(function () {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(true);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function () {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(false);\n\t\t\t}\n\t\t}, this));\n\t},\n\tbeforeSave: function () {\n\t\tPJQ.models.contacts.Contact.prototype.beforeSave.call(this);\n\t\tthis.set({\n\t\t\tattachments: this.attachments.getChangedModels()\n\t\t})\n\t}\n});\n\n//Collections\nPJQ.collections.projectContacts = {};\n\nPJQ.collections.projectContacts.ProjectContacts = PJQ.collections.BaseCollection.extend({\n\tidAttribute: 'id',\n\tmodel: PJQ.models.projectContacts.ProjectContact,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'contacts'\n\t\t\t}\n\t\t])\n\t},\n\taddContactsToProject: function (ids, callback) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: this.endpoint() + '/ids',\n\t\t\tdata: {\n\t\t\t\tids: ids\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tthis.reset(data);\n\t\t\tcallback();\n\t\t}, this)).fail(_.bind(function (xhr) {\n\t\t\t//todo: toast error\n\t\t\tcallback();\n\t\t}, this));\n\t}\n});\n\n//Views\nPJQ.views.projectContacts = {};\n\nPJQ.views.projectContacts.ProjectContactsManagement = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Project-Contacts-Management')\n\t},\n\tevents: {\n\t\t'click .btn-edit-pc-perms': 'editPermissionsClicked',\n\t\t'click .btn-edit-pc-notification-settings': 'notificationSettingsClicked',\n\t\t'click .edit-project-contact': 'editClicked',\n\t\t'click .remove-project-contact': 'removeClicked',\n\t\t'click .project-contacts-new-contact': 'newContactClicked',\n\t\t'click .project-contacts-add-from-bid-participants': 'addFromBidParticipants',\n\t\t'click .project-contacts-add-from-address-book': 'addFromAddressBook',\n\t\t'click .project-contacts-quick-search': 'quickSearch',\n\t\t'click .project-contacts-add-from-project': 'addFromProject',\n\t\t'click .project-contacts-new-user': 'newUserClicked',\n\t\t'click .project-contacts-add-from-company': 'addFromCompany',\n\t\t'change .cb-primary': 'changeIsPrimary',\n\t\t'click .export-pdf': 'exportPDF',\n\t\t'click .export-excel': 'exportExcel',\n\t\t'click .btn-copy-email': 'copyEmail'\n\t},\n\tbeforeFirstRender: function () {\n\t\tthis.options.isAdmin = this.options.project.hasPermission('projectContacts.isAdmin');\n\t\tthis.options.canEdit = PJQ.app.session.hasPermission('settings.canManageUsers');\n\n\t\tif (this.options.project.projectContacts != null) {\n\t\t\tthis.collection = this.options.project.projectContacts;\n\t\t} else {\n\t\t\tthis.collection = this.options.project.projectContacts = new PJQ.collections.projectContacts.ProjectContacts(null, {\n\t\t\t\tproject: this.options.project\n\t\t\t});\n\t\t}\n\n\t\tPJQ.app.session.fetchUserGroups(this.options.project.get('masterUserId'), _.bind(function (grResult) {\n\t\t\tthis.groups = grResult;\n\n\t\t\tthis.listenTo(this.collection, 'reset update', _.bind(function () {\n\t\t\t\tthis.renderDataTable();\n\t\t\t}, this));\n\n\t\t\tthis.listenTo(this.collection, 'sync', _.bind(function () {\n\t\t\t\tthis.dataTable.refresh('page');\n\t\t\t}, this));\n\t\t\tthis.collection.fetchReset();\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcanEdit: this.options.canEdit,\n\t\t\tisAdmin: this.options.isAdmin\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.renderDataTable();\n\t},\n\trenderDataTable: function () {\n\t\tlet columns = [\n\t\t\t{\n\t\t\t\t\"title\": \"Type\",\n\t\t\t\t\"width\": \"120px\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": false,\n\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\tif (row.userType != null) {\n\t\t\t\t\t\tif (type === 'sort') {\n\t\t\t\t\t\t\treturn row.userType.get('sortOrder');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn '<span style=\"color:' + row.userType.get('color') + ';\">' + row.userType.get('name') + '</span>';\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t}, this)\n\t\t\t},\n\t\t\t{\"data\": \"attributes.companyName\", \"title\": \"Company Name\"},\n\t\t\t{\"data\": \"attributes.contactName\", \"title\": \"Contact Name\"},\n\t\t\t{\n\t\t\t\t\"data\": \"attributes.email\",\n\t\t\t\t\"title\": \"Email\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": true,\n\t\t\t\t\"render\": function (data) {\n\t\t\t\t\tif (_.size(data) === 0) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn '<div class=\"no-wrap d-flex align-items-center\"><span></span><button type=\"button\" class=\"btn btn btn-transparent-dark btn-copy-email\" title=\"Copy Email\"><i class=\"far fa-envelope text-dark\"></i></button>' + data + '</div>';\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"attributes.phone\",\n\t\t\t\t\"title\": \"Phone\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": true,\n\t\t\t\t\"render\": function (data) {\n\t\t\t\t\treturn PJQ.helpers.formatHelpers.formatPhoneNumber(data);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"attributes.cell\",\n\t\t\t\t\"title\": \"Cell\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": true,\n\t\t\t\t\"render\": function (data) {\n\t\t\t\t\treturn PJQ.helpers.formatHelpers.formatPhoneNumber(data);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"data\": \"attributes.projectGroups\",\n\t\t\t\t\"title\": \"Groups\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": true,\n\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\tif (row.id > 0) {\n\t\t\t\t\t\tlet arr = [];\n\t\t\t\t\t\t_.each(data, function (groupId) {\n\t\t\t\t\t\t\tlet group = this.groups ? this.groups.get(groupId) : null;\n\t\t\t\t\t\t\tif (group != null) {\n\t\t\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t\treturn _.map(_.sortBy(arr, function (group) {\n\t\t\t\t\t\t\treturn group.get('sortOrder');\n\t\t\t\t\t\t}), function (group) {\n\t\t\t\t\t\t\treturn group.get('groupName');\n\t\t\t\t\t\t}).join(', ');\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t}, this)\n\t\t\t}];\n\n\t\tif (PJQ.app.session.get('portalId') === 0 || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MANAGEMENT_CONTACTS_ENABLE_PRIMARY)) {\n\t\t\tcolumns.push({\n\t\t\t\t\"data\": \"attributes.isPrimary\",\n\t\t\t\t\"title\": \"Primary\",\n\t\t\t\t\"width\": \"80px\",\n\t\t\t\t\"orderable\": true,\n\t\t\t\t\"searchable\": false,\n\t\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\t\tif (row.get('id') > 0) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (type === 'sort') {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\t\t\t\t\treturn '<div class=\"pretty p-switch ml-3\"><input type=\"checkbox\" ' + (data ? 'checked' : '') + ' class=\"cb-primary\" /><div class=\"state p-success\"><label> </label></div></div>';\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\tcolumns.push(...[{\n\t\t\t\"data\": \"\",\n\t\t\t\"title\": \"\",\n\t\t\t\"orderable\": false,\n\t\t\t\"searchable\": false,\n\t\t\t\"width\": 120 + (this.options.isAdmin ? 40 : 0) + 'px',\n\t\t\t\"render\": _.bind(function (data, type, row) {\n\t\t\t\tlet buttons = '',\n\t\t\t\t\tnotificationButton = '<button type=\"button\" title=\"Notifications\" class=\"btn btn-purple btn-edit-pc-notification-settings mr-1\"><span class=\"fal fa-bell\"></span></button>';\n\t\t\t\tbuttons += '<button type=\"button\" title=\"Permissions\" class=\"btn btn-dark btn-edit-pc-perms mr-1\"><span class=\"fal fa-key\"></span></button>';\n\n\t\t\t\tif (this.options.isAdmin) {\n\t\t\t\t\tbuttons += (row.get('userId') === PJQ.app.session.user.get('userId') || PJQ.app.session.hasPermission('users.canModifyNotifications')) ? notificationButton : ``\n\t\t\t\t} else if (this.options.isAdmin) {\n\t\t\t\t\tbuttons += notificationButton;\n\t\t\t\t}\n\n\t\t\t\tif (this.options.canEdit) {\n\t\t\t\t\tbuttons += '<button type=\"button\" title=\"Edit\" class=\"btn btn-info edit-project-contact mr-1\"><span class=\"fal fa-pencil\"></span></button>';\n\t\t\t\t} else {\n\t\t\t\t\tbuttons += '<button type=\"button\" title=\"View\" class=\"btn btn-info edit-project-contact mr-1\"><span class=\"fal fa-search\"></span></button>';\n\t\t\t\t}\n\t\t\t\tif (this.options.isAdmin) {\n\t\t\t\t\tbuttons += '<button type=\"button\" title=\"Remove\" class=\"btn btn-danger remove-project-contact\"><span class=\"fal fa-trash\"></span></button>';\n\t\t\t\t}\n\t\t\t\treturn '<div class=\"text-align-center show-on-row-hover\" style=\"min-width: 140px\">' + buttons + '</div>';\n\t\t\t}, this)\n\t\t}]);\n\n\t\tlet self = this,\n\t\t\ttableOpts = {\n\t\t\t\tel: this.$('.project-contacts-data-table-container'),\n\t\t\t\tdata: this.collection.models,\n\t\t\t\tpageLengthCookie: PJQ.constants.cookies.PROJECT_CONTACT_LIST_PAGE_LENGTH,\n\t\t\t\tlanguage: {\n\t\t\t\t\temptyTable: \"No project contacts have been added to this project\",\n\t\t\t\t\tzeroRecords: \"No project contacts match the search criteria\"\n\t\t\t\t},\n\t\t\t\tsubTemplates: {\n\t\t\t\t\theader: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Project-Contacts')\n\t\t\t\t},\n\t\t\t\theaderData: function () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tuserTypes: PJQ.app.session.userTypes.models,\n\t\t\t\t\t\tisAdmin: self.options.isAdmin\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tinitComplete: function (settings, json) {\n\t\t\t\t\tthis.wrap(\"<div style='overflow:auto; width:100%;position:relative;'></div>\");\n\t\t\t\t},\n\t\t\t\tafterHeaderRender: function (view, $header) {\n\t\t\t\t\tnew PJQ.inputs.Selectpicker({\n\t\t\t\t\t\tel: $header.find('.user-type-filter'),\n\t\t\t\t\t\tonChange: function (value) {\n\t\t\t\t\t\t\tview.setFilter('userType', value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tisMultiple: true,\n\t\t\t\t\t\tisIntChoices: true,\n\t\t\t\t\t\tnoneSelectedText: 'No Filters',\n\t\t\t\t\t\tdefaultValue: self.userTypeFilter\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tgetFilterData: function (view, data) {\n\t\t\t\t\tlet userTypeFilter = view.getFilter('userType');\n\t\t\t\t\tif (_.size(userTypeFilter) === 0) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _.filter(data, function (row) {\n\t\t\t\t\t\treturn _.contains(userTypeFilter, row.userType.id);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonRowDoubleClick: _.bind(function (row) {\n\t\t\t\t\tif (row.data()) {\n\t\t\t\t\t\tthis.editContact(row.data());\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t\tcontextMenuOptions: {\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Edit',\n\t\t\t\t\t\t\ticonClass: 'fal fa-pencil',\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn this.options.canEdit;\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tthis.editContact(row.data());\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'View',\n\t\t\t\t\t\t\ticonClass: 'fal fa-search',\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn !this.options.canEdit;\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tthis.editContact(row.data());\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Manage Trades',\n\t\t\t\t\t\t\ticonClass: 'fal fa-hard-hat',\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tnew PJQ.views.projects.ManageProjectParticipantTradesModal({\n\t\t\t\t\t\t\t\t\tcontactId: row.data().get('contactId'),\n\t\t\t\t\t\t\t\t\tonSave: _.bind(function (data) {\n\t\t\t\t\t\t\t\t\t\trow.data().set('projectGroups', _.map(_.filter(data.models, function (model) {\n\t\t\t\t\t\t\t\t\t\t\treturn model.get('isSelected');\n\t\t\t\t\t\t\t\t\t\t}), function (model) {\n\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\tgroupId: model.get('groupId')\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\t\trow.invalidate().draw();\n\t\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn PJQ.app.session.project.hasPermission('messaging.canManage') && this.options.view !== PJQ.constants.projectMessaging.views.MSGCONT_CONT && row.data().id > 0;\n\t\t\t\t\t\t\t}, this)\n\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Permissions',\n\t\t\t\t\t\t\ticonClass: 'fal fa-key',\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn this.options.isAdmin;\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tthis.editPermissions(row.data());\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Notifications',\n\t\t\t\t\t\t\ticonClass: 'fal fa-bell',\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn this.options.isAdmin && PJQ.app.session.hasPermission('users.canModifyNotifications');\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tthis.editNotificationsSettings(row.data());\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Remove',\n\t\t\t\t\t\t\ticonClass: 'fal fa-trash',\n\t\t\t\t\t\t\tisDanger: true,\n\t\t\t\t\t\t\tisShown: _.bind(function (row) {\n\t\t\t\t\t\t\t\treturn this.options.isAdmin;\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\tonClick: _.bind(function (row) {\n\t\t\t\t\t\t\t\tthis.removeContact(row);\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tcolumns: columns\n\t\t\t};\n\t\tthis.dataTable = new PJQ.views.dataTables.DataTable(tableOpts);\n\t},\n\tcopyEmail: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tprojectContact = this.dataTable.getRow(target.closest('tr')).data();\n\t\tif (navigator && navigator.clipboard) {\n\t\t\tnavigator.clipboard.writeText(projectContact.get('email'));\n\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\tmessage: 'Email copied to clipboard'\n\t\t\t});\n\t\t}\n\t},\n\tchangeIsPrimary: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tisPrimary = target.prop('checked'),\n\t\t\tprojectContact = this.dataTable.getRow(target.closest('tr')).data();\n\t\tif (projectContact != null) {\n\t\t\tprojectContact.updateIsPrimary(isPrimary);\n\t\t}\n\t},\n\teditPermissionsClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tprojectContact = this.dataTable.getRow(target.closest('tr')).data();\n\t\tthis.editPermissions(projectContact);\n\t},\n\teditPermissions: function (projectContact) {\n\t\tnew PJQ.views.permissions.PermissionsEditorModal({\n\t\t\tmodel: projectContact,\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\tnotificationSettingsClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tprojectContact = this.dataTable.getRow(target.closest('tr')).data();\n\t\tthis.editNotificationsSettings(projectContact);\n\t},\n\teditNotificationsSettings: function (projectContact) {\n\t\tnew PJQ.views.notificationSettings.NotificationSettingsEditorModal({\n\t\t\tmodel: projectContact,\n\t\t\tproject: this.options.project\n\t\t});\n\t},\n\teditClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tprojectContact = this.dataTable.getRow(target.closest('tr')).data();\n\t\tthis.editContact(projectContact);\n\t},\n\teditContact: function (projectContact) {\n\t\tnew PJQ.views.contacts.BaseEditContactModal({\n\t\t\tmodel: projectContact\n\t\t});\n\t},\n\tremoveClicked: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\trow = this.dataTable.getRow(target.closest('tr'));\n\t\tthis.removeContact(row);\n\t},\n\tremoveContact: function (row) {\n\t\tlet projectContact = row.data();\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Remove\",\n\t\t\tdeleteButtonText: \"Remove\",\n\t\t\tbody: \"Are you sure you want to remove this contact from the project?\",\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\tthis.collection.remove(projectContact);\n\t\t\t\tprojectContact.destroy();\n\t\t\t}, this)\n\t\t});\n\t},\n\taddFromBidParticipants: function () {\n\t\tthis.options.project.fetchParticipants(_.bind(function (participants) {\n\t\t\tnew PJQ.views.contacts.SelectContactsModal({\n\t\t\t\tcontacts: participants,\n\t\t\t\thideContacts: this.collection.models,\n\t\t\t\tcontext: PJQ.constants.contacts.contexts.PARTICIPANTS,\n\t\t\t\tisSingleChoice: false,\n\t\t\t\tsubtitle: \"Add Project Contacts from Bid Participants\",\n\t\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\t\tthis.collection.addContactsToProject(_.map(selectedContacts, function (contact) {\n\t\t\t\t\t\treturn contact.id;\n\t\t\t\t\t}), _.bind(function () {\n\t\t\t\t\t\tthis.renderDataTable();\n\t\t\t\t\t}, this));\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}, this));\n\t},\n\taddFromAddressBook: function () {\n\t\t$('form[name=\"modal-add-participants\"]').remove();\n\t\tlet options = {\n\t\t\tonSave: _.bind(function (selectedContactsAll, data) {\n\t\t\t\tthis.collection.addContactsToProject(selectedContactsAll, _.bind(function () {\n\t\t\t\t\tthis.renderDataTable();\n\t\t\t\t}, this));\n\t\t\t}, this),\n\t\t\tdisableContacts: _.map(this.collection.models, function (contact) {\n\t\t\t\treturn contact.id;\n\t\t\t})\n\t\t};\n\n\t\tif (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n\t\t\toptions.isWrapForm = false;\n\t\t\toptions.wrapFormName = null;\n\t\t\toptions.isUseNewAddressBook = true;\n\t\t\toptions.isMultipleProjects = true;\n\t\t}\n\n\t\tnew PJQ.views.projects.AddParticipantsDetailedModal(options);\n\t},\n\tquickSearch: function () {\n\t\tnew PJQ.views.contacts.SelectContactsModal({\n\t\t\tcontext: PJQ.constants.contacts.contexts.CONTACTS,\n\t\t\tisSingleChoice: false,\n\t\t\tproject: this.options.project,\n\t\t\tsubtitle: \"Add Project Contacts From Address Book\",\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.collection.addContactsToProject(_.map(selectedContacts, function (contact) {\n\t\t\t\t\treturn contact.id;\n\t\t\t\t}), _.bind(function () {\n\t\t\t\t\tthis.renderDataTable();\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\taddFromProject: function () {\n\n\t},\n\taddFromCompany: function () {\n\t\tnew PJQ.views.contacts.SelectContactsModal({\n\t\t\tcontext: PJQ.constants.contacts.contexts.USERS,\n\t\t\tisSingleChoice: false,\n\t\t\thideContacts: this.collection.models,\n\t\t\tsubtitle: \"Add Project Contacts from My Company Users\",\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.collection.addContactsToProject(_.map(selectedContacts, function (contact) {\n\t\t\t\t\treturn -contact.id;\n\t\t\t\t}), _.bind(function () {\n\t\t\t\t\tthis.renderDataTable();\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\tnewContactClicked: function () {\n\t\tnew PJQ.views.contacts.BaseEditContactModal({\n\t\t\tmodel: new PJQ.models.projectContacts.ProjectContact({\n\t\t\t\tprojectId: PJQ.app.session.project.id,\n\t\t\t\tcountry: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_COUNTRY) : 'US'\n\t\t\t})\n\t\t});\n\t},\n\tnewUserClicked: function () {\n\t\tnew PJQ.views.contacts.BaseEditContactModal({\n\t\t\tmodel: new PJQ.models.projectContacts.ProjectContact({\n\t\t\t\tprojectId: PJQ.app.session.project.id\n\t\t\t})\n\t\t});\n\t},\n\texportProjectContacts: function () {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: this.options.project.endpoint(false) + '/contacts/export',\n\t\t\tdata: {\n\t\t\t\tisApi2: true\n\t\t\t}\n\t\t}).post().done(_.bind(function (response) {\n\t\t\tPJQ.files.downloadFile(response.url, {\n\t\t\t\tisEndpoint: false\n\t\t\t});\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t}, this));\n\t},\n\texportExcel: function () {\n\t\tif (this.options.project == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet filters = {},\n\t\t\tuserTypeFilter = this.dataTable.getFilter('userType');\n\n\t\tif (_.size(userTypeFilter) > 0) {\n\t\t\tfilters.userTypes = userTypeFilter;\n\t\t}\n\n\t\tlet order = this.dataTable.dataTable.order()[0],\n\t\t\treport = new PJQ.models.reports.NewReport({\n\t\t\t\ttype: \"projectContacts\",\n\t\t\t\tprojectId: this.options.project.id,\n\t\t\t\toptions: {\n\t\t\t\t\tfilters: filters,\n\t\t\t\t\tcolumns: [\"userType\", \"companyName\", \"contactName\", \"email\", \"phone\", \"cell\", \"trades\"],\n\t\t\t\t\tcolumnOrder: order\n\t\t\t\t}\n\t\t\t});\n\t\treport.export({format: 'excel'}).then(() => {\n\n\t\t});\n\t},\n\texportPDF: function () {\n\t\tif (this.options.project == null) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet filters = {},\n\t\t\tuserTypeFilter = this.dataTable.getFilter('userType');\n\n\t\tif (_.size(userTypeFilter) > 0) {\n\t\t\tfilters.userTypes = userTypeFilter;\n\t\t}\n\n\t\tlet order = this.dataTable.dataTable.order()[0],\n\t\t\treport = new PJQ.models.reports.NewReport({\n\t\t\t\ttype: \"projectContacts\",\n\t\t\t\tprojectId: this.options.project.id,\n\t\t\t\toptions: {\n\t\t\t\t\tfilters: filters,\n\t\t\t\t\tcolumns: [\"userType\", \"companyName\", \"contactName\", \"email\", \"phone\", \"cell\", \"trades\"],\n\t\t\t\t\tcolumnOrder: order\n\t\t\t\t}\n\t\t\t});\n\t\treport.export({format: 'pdf'}).then(() => {\n\n\t\t});\n\t}\n});\n\n//Routes\nPJQ.modules.projectContacts = {\n\troutes: [\n\t\t{\n\t\t\troute: 'projects/:projectId/contacts',\n\t\t\tname: 'projectContacts',\n\t\t\tcallback: function (projectId) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectcontacts\");\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troute: 'projects/:projectId/contacts/:id',\n\t\t\tname: 'projectContact',\n\t\t\tcallback: function (projectId, id) {\n\t\t\t\tPJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"projectcontacts\", {\n\t\t\t\t\tid: id\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t]\n};\n\nPJQ.app.addRoutes(PJQ.modules.projectContacts.routes);","PJQ.views.projectInvites = {};\n\nPJQ.views.projectInvites.ProjectInvite = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Project-Invite'),\n\t\tproject: null,\n\t\temailTemplates: [],\n\t\tonChange: _.noop,\n\t\tisShowQuickAdd: false,\n\t\tisShowAttachments: false,\n\t\tdefaultTemplateKey: null\n\t},\n\tbeforeRender: function () {\n\t\tif (!this.options.project.inviteSettings) {\n\t\t\tthis.options.project.inviteSettings = {\n\t\t\t\tsendEmail: true,\n\t\t\t\tsendFaxIfNoEmail: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL),\n\t\t\t\tsendFaxIfEmailFails: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED),\n\t\t\t\tsendFaxAlways: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS),\n\t\t\t\tresponseDue: this.options.project.get('responseDueDate') === 'ASAP' ? 'ASAP' : this.options.project.get('bidsDue') ? PJQ.helpers.dateHelpers.getDateString(new Date(this.options.project.get('bidsDue')), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD, false) : null,\n\t\t\t\tresponseDueLabel: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) : \"Response Due\",\n\t\t\t\tquickAdd: '',\n\t\t\t\tattachments: new PJQ.collections.files.Files(),\n\t\t\t\tuploaderGuid: PJQ.helpers.guid(),\n\t\t\t\tprivateFolders: new PJQ.collections.files.Files(),\n\t\t\t\ttemplateKey: this.options.defaultTemplateKey,\n\t\t\t\treplyTo: null\n\t\t\t};\n\t\t}\n\n\t\tif (!this.options.project.inviteSettings.emailTemplate) {\n\t\t\tthis.options.project.inviteSettings.emailTemplate = this.options.emailTemplates[0];\n\t\t\tif (this.options.project.inviteSettings.templateKey) {\n\t\t\t\t_.each(this.options.emailTemplates, _.bind(function (item) {\n\t\t\t\t\tif (item.get('templateKey') === this.options.project.inviteSettings.templateKey)\n\t\t\t\t\t\tthis.options.project.inviteSettings.emailTemplate = item;\n\t\t\t\t}, this));\n\t\t\t}\n\n\t\t}\n\n\t\tthis.renderData = {\n\t\t\temailTemplates: this.options.emailTemplates,\n\t\t\treplyToContacts: this.options.replyToContacts,\n\t\t\tisShowQuickAdd: this.options.isShowQuickAdd,\n\t\t\tisShowAttachments: this.options.isShowAttachments,\n\t\t\tresponseDueLabel: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) : \"Response Due\",\n\t\t\tactiveView: ''\n\t\t};\n\t},\n\tafterRender: function () {\n\n\t\tif (this.options.isShowQuickAdd) {\n\t\t\tthis.$('input.quick-add-list').val(this.options.project.inviteSettings.quickAdd);\n\n\t\t\tthis.$('input.quick-add-list').on('change keyup', _.bind(function () {\n\t\t\t\tthis.options.project.inviteSettings.quickAdd = this.$('input.quick-add-list').val();\n\t\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\t\ttypeof this.options.onChange();\n\t\t\t}, this));\n\n\t\t}\n\n\t\tif (_.size(this.options.replyToContacts) > 0) {\n\t\t\tthis.replyToSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\t\tel: this.$('.reply-to'),\n\t\t\t\t\tisIntChoices: true,\n\t\t\t\t\tdefaultValue: this.options.project.inviteSettings.replyTo ? this.options.project.inviteSettings.replyTo : 0,\n\t\t\t\t\tonChange: _.bind(function(value) {\n\t\t\t\t\t\tthis.options.project.inviteSettings.replyTo = value ? value : null;\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\n\t\t}\n\n\t\tthis.$('input.message-subject').val(this.options.project.inviteSettings.messageSubject);\n\t\tthis.$('input.message-subject').on('change keyup', _.bind(function () {\n\t\t\tthis.options.project.inviteSettings.messageSubject = this.$('input.message-subject').val();\n\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\ttypeof this.options.onChange();\n\n\t\t\tthis.queuePreview();\n\t\t}, this));\n\n\t\tif (this.options.project.inviteSettings.responseDue === 'ASAP')\n\t\t\tthis.$('input.response-due').val('').prop('disabled', true);\n\t\telse {\n\t\t\tif (this.options.project.inviteSettings && this.options.project.inviteSettings.responseDue === '1970-01-01')\n\t\t\t\tthis.$('input.response-due').val('');\n\t\t\telse\n\t\t\t\tthis.$('input.response-due').val(this.options.project.inviteSettings.responseDue);\n\t\t}\n\n\t\tthis.$('input.response-due').on('change keyup', _.bind(function () {\n\t\t\tthis.options.project.inviteSettings.responseDue = this.$('input.response-due').val();\n\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\ttypeof this.options.onChange();\n\n\t\t\tthis.queuePreview();\n\t\t}, this));\n\n\t\tthis.$('input.response-due-asap').prop('checked', (this.options.project.inviteSettings.responseDue === 'ASAP'));\n\n\t\tthis.$('input.response-due-asap').on('click', _.bind(function () {\n\t\t\tthis.options.project.inviteSettings.responseDue = this.$('input.response-due-asap').prop('checked') ? 'ASAP' : this.$('input.response-due').val();\n\t\t\tthis.$('input.response-due').val('').prop('disabled', this.$('input.response-due-asap').prop('checked'));\n\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\ttypeof this.options.onChange();\n\n\t\t\tthis.renderPreview();\n\t\t}, this));\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_DISABLE_RESPONSE_DUE)) {\n\t\t\tthis.$('input.response-due, input.response-due-asap').prop('disabled', true);\n\t\t}\n\n\t\tthis.messageType = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('select.message-type'),\n\t\t\tdefaultValue: this.options.project.inviteSettings.emailTemplate ? this.options.project.inviteSettings.emailTemplate.get('templateKey') : this.options.emailTemplates[0].get('templateKey'),\n\t\t\tdropupAuto: false,\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.messageTypeSelected(this.messageType.getValue());\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.responseType = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('select.response-type'),\n\t\t\tdefaultValue: this.options.project.inviteSettings.responseType ? this.options.project.inviteSettings.responseType : 'NONE',\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tif (value === 'NONE')\n\t\t\t\t\tvalue = '';\n\t\t\t\tthis.options.project.inviteSettings.responseType = value;\n\t\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\t\ttypeof this.options.onChange();\n\n\t\t\t\tthis.renderPreview();\n\t\t\t}, this),\n\t\t});\n\n\t\tif (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_FAX)) {\n\t\t\tthis.$('select.send-options option[value=\"2\"]').prop('hidden', true);\n\t\t\tthis.$('select.send-options option[value=\"3\"]').prop('hidden', true);\n\t\t\tthis.$('select.send-options option[value=\"4\"]').prop('hidden', true);\n\t\t}\n\t\telse {\n\t\t\tthis.$('select.send-options option[value=\"2\"]').prop('selected', PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL));\n\t\t\tthis.$('select.send-options option[value=\"3\"]').prop('selected', PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED));\n\t\t\tthis.$('select.send-options option[value=\"4\"]').prop('selected', PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS));\n\t\t}\n\n\t\tlet sendOptions = [\"1\"];\n\n\t\tif (this.options.project.inviteSettings.sendFaxIfNoEmail)\n\t\t\tsendOptions.push(\"2\");\n\n\t\tif (this.options.project.inviteSettings.sendFaxIfEmailFails)\n\t\t\tsendOptions.push(\"3\");\n\n\t\tif (this.options.project.inviteSettings.sendFaxAlways)\n\t\t\tsendOptions.push(\"4\");\n\n\t\tnew PJQ.inputs.SelectpickerProjectMessageSendOptions({\n\t\t\tel: this.$('select.send-options'),\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.options.project.inviteSettings.sendFaxIfNoEmail = value.indexOf(\"2\") !== -1;\n\t\t\t\tthis.options.project.inviteSettings.sendFaxIfEmailFails = value.indexOf(\"3\") !== -1;\n\t\t\t\tthis.options.project.inviteSettings.sendFaxAlways = value.indexOf(\"4\") !== -1;\n\t\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\t\ttypeof this.options.onChange();\n\t\t\t}, this),\n\t\t\tisMultiple: true,\n\t\t\tisIntChoices: false,\n\t\t\thideDisabled: false,\n\t\t\tnoneSelectedText: 'No Options Selected',\n\t\t\tdefaultValue: sendOptions,\n\t\t\texclusiveChoices: [\"4\"]\n\t\t});\n\n\t\tthis.messageBodyEditor = new PJQ.inputs.HTMLEditor({\n\t\t\tel: this.$('div.invite-message'),\n\t\t\tdefaultValue: this.options.project.inviteSettings.messageBody,\n\t\t\tonInit: _.bind(function () {\n\t\t\t\tlet tokenBtn = '<button type=\"button\" class=\"btn btn-default btn-sm btn-small tokenBtn\" title=\"Token List\" data-event=\"something\" tabindex=\"-1\">Tokens</button>',\n\t\t\t\t\ttokenGroup = '<div class=\"note-file btn-group\">' + tokenBtn + '</div>';\n\n\t\t\t\t$(tokenGroup).prependTo(this.$('.note-toolbar'));\n\t\t\t\tthis.$('.tokenBtn').tooltip({container: 'body', placement: 'bottom'});\n\t\t\t\tthis.$('.tokenBtn').click(function (event) {\n\t\t\t\t\t// load token dialog\n\t\t\t\t});\n\n\t\t\t}, this),\n\t\t\tonChange: _.bind(function (contents) {\n\t\t\t\tthis.options.project.inviteSettings.messageBody = contents;\n\t\t\t\tif (typeof this.options.onChange === 'function')\n\t\t\t\t\ttypeof this.options.onChange();\n\n\t\t\t\tthis.queuePreview();\n\t\t\t}, this)\n\t\t});\n\n\t\tif (this.options.isShowAttachments) {\n\t\t\tthis.uploader = new PJQ.views.files.FileUploaderGrid({\n\t\t\t\tel: this.$('.uploader'),\n\t\t\t\tcollection: this.options.project.inviteSettings.attachments,\n\t\t\t\tuuid: this.options.project.inviteSettings.uploaderGuid\n\t\t\t});\n\n\t\t\tthis.options.project.fetchAttachments({\n\t\t\t\tisShared: false,\n\t\t\t\tincludeDrawings: false\n\t\t\t}, _.bind(function (attachments) {\n\t\t\t\tthis.privateFolders = attachments;\n\t\t\t\tif (_.size(attachments.models) > 1)\n\t\t\t\t\tthis.$('.private-folders').closest('div.form-group').show();\n\n\t\t\t\tnew PJQ.views.projects.ProjectAttachments({\n\t\t\t\t\tel: this.$('.private-folders'),\n\t\t\t\t\tcollection: attachments,\n\t\t\t\t\tproject: this.options.project,\n\t\t\t\t\tisHideDownload: true,\n\t\t\t\t\tisHideDrawings: true,\n\t\t\t\t\tpreventSelectAll: true,\n\t\t\t\t\tselectedAttachments: this.options.project.inviteSettings.privateFolders,\n\t\t\t\t\tonChange: _.bind(function (attachments) {\n\t\t\t\t\t\tthis.options.project.inviteSettings.privateFolders = attachments;\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}, this));\n\t\t}\n\n\t\tif (!this.options.project.inviteSettings.messageType)\n\t\t\tthis.messageTypeSelected(this.options.project.inviteSettings.templateKey ? this.options.project.inviteSettings.templateKey : this.options.emailTemplates[0].get('templateKey'));\n\t\telse\n\t\t\tthis.renderPreview();\n\n\t},\n\tmessageTypeSelected: function (templateKey) {\n\t\tlet emailTemplate = _.filter(this.options.emailTemplates, function (template) {\n\t\t\treturn template.get('templateKey') === templateKey\n\t\t})[0];\n\t\tthis.options.project.inviteSettings.emailTemplate = emailTemplate;\n\t\tthis.options.project.inviteSettings.messageType = emailTemplate.get('templateKey');\n\t\tthis.options.project.inviteSettings.messageSubject = emailTemplate.get('subjectTemplate');\n\t\tthis.options.project.inviteSettings.messageBody = emailTemplate.get('defaultTextTemplate');\n\t\tthis.options.project.inviteSettings.responseType = emailTemplate.get('projectMessageType');\n\n\t\tthis.$('.message-subject').val(this.options.project.inviteSettings.messageSubject);\n\t\tthis.responseType.setValue(emailTemplate.get('projectMessageType') ? emailTemplate.get('projectMessageType') : \"NONE\");\n\t\tthis.messageBodyEditor.setValue(emailTemplate.get('defaultTextTemplate'));\n\n\t\tif (typeof this.options.onChange === 'function')\n\t\t\ttypeof this.options.onChange();\n\n\t\tthis.renderPreview();\n\t},\n\tqueuePreview: function() {\n\t\tclearTimeout(this.saveTimeout);\n\t\tthis.saveTimeout = setTimeout(_.bind(function () {\n\t\t\tthis.renderPreview();\n\t\t}, this), 500);\n\t},\n\trenderPreview: function() {\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessagepreview'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: \"templateKey\",\n\t\t\t\tvalue: this.options.project.inviteSettings.emailTemplate.get('templateKey')\n\t\t\t}\n\t\t]);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpoint\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tthis.options.tokens = data;\n\n\t\t\tlet subject = this.options.project.inviteSettings.messageSubject,\n\t\t\t\tbody = this.options.project.inviteSettings.emailTemplate.get('bodyTemplate');\n\n\t\t\tthis.options.tokens.projectMessage.responseType = 'N/A';\n\t\t\tif (this.options.project.inviteSettings.responseType === 'PROJECT')\n\t\t\t\tthis.options.tokens.projectMessage.responseType = 'ACCEPT/DECLINE';\n\t\t\telse if (this.options.project.inviteSettings.responseType === 'MESSAGE')\n\t\t\t\tthis.options.tokens.projectMessage.responseType = 'YES/NO';\n\n\t\t\tthis.options.tokens.projectMessage.bidDueDate = this.options.project.inviteSettings.responseDue;\n\t\t\tthis.options.tokens.projectMessage.responseDueDate = this.options.project.inviteSettings.responseDue;\n\n\t\t\tthis.options.tokens.projectMessage.responseDueDateWithBy = ' by ' + (this.options.project.inviteSettings.responseDue ? this.options.project.inviteSettings.responseDue : 'N/A');\n\n\t\t\tthis.options.tokens.projectMessage.messageBody = this.translateTokens(this.options.project.inviteSettings.messageBody);\n\t\t\tthis.$('.message-preview-subject').html(this.translateTokens(subject));\n\t\t\tthis.$('.message-preview-body').html(this.translateTokens(body)).scrollTop(0);\n\n\t\t}, this)).fail(function () {\n\t\t});\n\n\t},\n\ttranslateTokens: function (input) {\n\t\tinput = input.replace(/\\[Sender.Username\\]/g, this.options.tokens.sender.username);\n\t\tinput = input.replace(/\\[Sender.Company\\]/g, this.options.tokens.sender.company);\n\t\tinput = input.replace(/\\[Sender.Contact\\]/g, this.options.tokens.sender.contact);\n\t\tinput = input.replace(/\\[Sender.Address1\\]/g, this.options.tokens.sender.address1);\n\t\tinput = input.replace(/\\[Sender.Address2\\]/g, this.options.tokens.sender.address2);\n\t\tinput = input.replace(/\\[Sender.City\\]/g, this.options.tokens.sender.city);\n\t\tinput = input.replace(/\\[Sender.State\\]/g, this.options.tokens.sender.state);\n\t\tinput = input.replace(/\\[Sender.Zip\\]/g, this.options.tokens.sender.zip);\n\t\tinput = input.replace(/\\[Sender.Country\\]/g, this.options.tokens.sender.country);\n\t\tinput = input.replace(/\\[Sender.Phone\\]/g, this.options.tokens.sender.phone);\n\t\tinput = input.replace(/\\[Sender.PhoneExtension\\]/g, this.options.tokens.sender.phoneExtension);\n\t\tinput = input.replace(/\\[Sender.Fax\\]/g, this.options.tokens.sender.fax);\n\t\tinput = input.replace(/\\[Sender.Cell\\]/g, this.options.tokens.sender.cell);\n\t\tinput = input.replace(/\\[Sender.Email\\]/g, this.options.tokens.sender.email);\n\t\tinput = input.replace(/\\[Sender.EmailLogoURL\\]/g, this.options.tokens.sender.emailLogoURL);\n\t\tinput = input.replace(/\\[Sender.FullAddress\\]/g, this.options.tokens.sender.fullAddress);\n\t\tinput = input.replace(/\\[Sender.Email2\\]/g, this.options.tokens.sender.email2);\n\t\tinput = input.replace(/\\[Sender.Signature\\]/g, this.options.tokens.sender.signature);\n\t\tinput = input.replace(/\\[Sender.UserType\\]/g, this.options.tokens.sender.userType);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel1\\]/g, this.options.tokens.sender.customFieldLabel1);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue1\\]/g, this.options.tokens.sender.customFieldValue1);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel2\\]/g, this.options.tokens.sender.customFieldLabel2);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue2\\]/g, this.options.tokens.sender.customFieldValue2);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel3\\]/g, this.options.tokens.sender.customFieldLabel3);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue3\\]/g, this.options.tokens.sender.customFieldValue3);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel4\\]/g, this.options.tokens.sender.customFieldLabel4);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue4\\]/g, this.options.tokens.sender.customFieldValue4);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel5\\]/g, this.options.tokens.sender.customFieldLabel5);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue5\\]/g, this.options.tokens.sender.customFieldValue5);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel6\\]/g, this.options.tokens.sender.customFieldLabel6);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue6\\]/g, this.options.tokens.sender.customFieldValue6);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel7\\]/g, this.options.tokens.sender.customFieldLabel7);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue7\\]/g, this.options.tokens.sender.customFieldValue7);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel8\\]/g, this.options.tokens.sender.customFieldLabel8);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue8\\]/g, this.options.tokens.sender.customFieldValue8);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel9\\]/g, this.options.tokens.sender.customFieldLabel9);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue9\\]/g, this.options.tokens.sender.customFieldValue9);\n\t\tinput = input.replace(/\\[Sender.CustomFieldLabel10\\]/g, this.options.tokens.sender.customFieldLabel10);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue10\\]/g, this.options.tokens.sender.customFieldValue10);\n\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue1_CLBR\\]/g, this.options.tokens.sender.customFieldValue1_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue2_CLBR\\]/g, this.options.tokens.sender.customFieldValue2_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue3_CLBR\\]/g, this.options.tokens.sender.customFieldValue3_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue4_CLBR\\]/g, this.options.tokens.sender.customFieldValue4_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue5_CLBR\\]/g, this.options.tokens.sender.customFieldValue5_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue6_CLBR\\]/g, this.options.tokens.sender.customFieldValue6_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue7_CLBR\\]/g, this.options.tokens.sender.customFieldValue7_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue8_CLBR\\]/g, this.options.tokens.sender.customFieldValue8_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue9_CLBR\\]/g, this.options.tokens.sender.customFieldValue9_CLBR);\n\t\tinput = input.replace(/\\[Sender.CustomFieldValue10_CLBR\\]/g, this.options.tokens.sender.customFieldValue10_CLBR);\n\n\n\t\tinput = input.replace(/\\[SenderPM.Username\\]/g, this.options.tokens.senderPM.username);\n\t\tinput = input.replace(/\\[SenderPM.Company\\]/g, this.options.tokens.senderPM.company);\n\t\tinput = input.replace(/\\[SenderPM.Contact\\]/g, this.options.tokens.senderPM.contact);\n\t\tinput = input.replace(/\\[SenderPM.Address1\\]/g, this.options.tokens.senderPM.address1);\n\t\tinput = input.replace(/\\[SenderPM.Address2\\]/g, this.options.tokens.senderPM.address2);\n\t\tinput = input.replace(/\\[SenderPM.City\\]/g, this.options.tokens.senderPM.city);\n\t\tinput = input.replace(/\\[SenderPM.State\\]/g, this.options.tokens.senderPM.state);\n\t\tinput = input.replace(/\\[SenderPM.Zip\\]/g, this.options.tokens.senderPM.zip);\n\t\tinput = input.replace(/\\[SenderPM.Country\\]/g, this.options.tokens.senderPM.country);\n\t\tinput = input.replace(/\\[SenderPM.Phone\\]/g, this.options.tokens.senderPM.phone);\n\t\tinput = input.replace(/\\[SenderPM.PhoneExtension\\]/g, this.options.tokens.senderPM.phoneExtension);\n\t\tinput = input.replace(/\\[SenderPM.Fax\\]/g, this.options.tokens.senderPM.fax);\n\t\tinput = input.replace(/\\[SenderPM.Cell\\]/g, this.options.tokens.senderPM.cell);\n\t\tinput = input.replace(/\\[SenderPM.Email\\]/g, this.options.tokens.senderPM.email);\n\t\tinput = input.replace(/\\[SenderPM.EmailLogoURL\\]/g, this.options.tokens.senderPM.emailLogoURL);\n\t\tinput = input.replace(/\\[SenderPM.FullAddress\\]/g, this.options.tokens.senderPM.fullAddress);\n\t\tinput = input.replace(/\\[SenderPM.Email2\\]/g, this.options.tokens.senderPM.email2);\n\t\tinput = input.replace(/\\[SenderPM.UserType\\]/g, this.options.tokens.senderPM.userType);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel1\\]/g, this.options.tokens.senderPM.customFieldLabel1);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue1\\]/g, this.options.tokens.senderPM.customFieldValue1);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel2\\]/g, this.options.tokens.senderPM.customFieldLabel2);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue2\\]/g, this.options.tokens.senderPM.customFieldValue2);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel3\\]/g, this.options.tokens.senderPM.customFieldLabel3);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue3\\]/g, this.options.tokens.senderPM.customFieldValue3);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel4\\]/g, this.options.tokens.senderPM.customFieldLabel4);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue4\\]/g, this.options.tokens.senderPM.customFieldValue4);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel5\\]/g, this.options.tokens.senderPM.customFieldLabel5);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue5\\]/g, this.options.tokens.senderPM.customFieldValue5);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel6\\]/g, this.options.tokens.senderPM.customFieldLabel6);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue6\\]/g, this.options.tokens.senderPM.customFieldValue6);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel7\\]/g, this.options.tokens.senderPM.customFieldLabel7);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue7\\]/g, this.options.tokens.senderPM.customFieldValue7);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel8\\]/g, this.options.tokens.senderPM.customFieldLabel8);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue8\\]/g, this.options.tokens.senderPM.customFieldValue8);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel9\\]/g, this.options.tokens.senderPM.customFieldLabel9);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue9\\]/g, this.options.tokens.senderPM.customFieldValue9);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldLabel10\\]/g, this.options.tokens.senderPM.customFieldLabel10);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue10\\]/g, this.options.tokens.senderPM.customFieldValue10);\n\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue1_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue1_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue2_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue2_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue3_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue3_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue4_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue4_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue5_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue5_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue6_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue6_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue7_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue7_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue8_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue8_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue9_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue9_CLBR);\n\t\tinput = input.replace(/\\[SenderPM.CustomFieldValue10_CLBR\\]/g, this.options.tokens.senderPM.customFieldValue10_CLBR);\n\n\n\t\tinput = input.replace(/\\[ProjectContact2.Username\\]/g, this.options.tokens.projectContact2.username);\n\t\tinput = input.replace(/\\[ProjectContact2.Company\\]/g, this.options.tokens.projectContact2.company);\n\t\tinput = input.replace(/\\[ProjectContact2.Contact\\]/g, this.options.tokens.projectContact2.contact);\n\t\tinput = input.replace(/\\[ProjectContact2.Address1\\]/g, this.options.tokens.projectContact2.address1);\n\t\tinput = input.replace(/\\[ProjectContact2.Address2\\]/g, this.options.tokens.projectContact2.address2);\n\t\tinput = input.replace(/\\[ProjectContact2.City\\]/g, this.options.tokens.projectContact2.city);\n\t\tinput = input.replace(/\\[ProjectContact2.State\\]/g, this.options.tokens.projectContact2.state);\n\t\tinput = input.replace(/\\[ProjectContact2.Zip\\]/g, this.options.tokens.projectContact2.zip);\n\t\tinput = input.replace(/\\[ProjectContact2.Country\\]/g, this.options.tokens.projectContact2.country);\n\t\tinput = input.replace(/\\[ProjectContact2.Phone\\]/g, this.options.tokens.projectContact2.phone);\n\t\tinput = input.replace(/\\[ProjectContact2.PhoneExtension\\]/g, this.options.tokens.projectContact2.phoneExtension);\n\t\tinput = input.replace(/\\[ProjectContact2.Fax\\]/g, this.options.tokens.projectContact2.fax);\n\t\tinput = input.replace(/\\[ProjectContact2.Cell\\]/g, this.options.tokens.projectContact2.cell);\n\t\tinput = input.replace(/\\[ProjectContact2.Email\\]/g, this.options.tokens.projectContact2.email);\n\t\tinput = input.replace(/\\[ProjectContact2.EmailLogoURL\\]/g, this.options.tokens.projectContact2.emailLogoURL);\n\t\tinput = input.replace(/\\[ProjectContact2.FullAddress\\]/g, this.options.tokens.projectContact2.fullAddress);\n\t\tinput = input.replace(/\\[ProjectContact2.Email2\\]/g, this.options.tokens.projectContact2.email2);\n\t\tinput = input.replace(/\\[ProjectContact2.Signature\\]/g, this.options.tokens.projectContact2.signature);\n\t\tinput = input.replace(/\\[ProjectContact2.UserType\\]/g, this.options.tokens.projectContact2.userType);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel1\\]/g, this.options.tokens.projectContact2.customFieldLabel1);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue1\\]/g, this.options.tokens.projectContact2.customFieldValue1);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel2\\]/g, this.options.tokens.projectContact2.customFieldLabel2);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue2\\]/g, this.options.tokens.projectContact2.customFieldValue2);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel3\\]/g, this.options.tokens.projectContact2.customFieldLabel3);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue3\\]/g, this.options.tokens.projectContact2.customFieldValue3);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel4\\]/g, this.options.tokens.projectContact2.customFieldLabel4);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue4\\]/g, this.options.tokens.projectContact2.customFieldValue4);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel5\\]/g, this.options.tokens.projectContact2.customFieldLabel5);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue5\\]/g, this.options.tokens.projectContact2.customFieldValue5);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel6\\]/g, this.options.tokens.projectContact2.customFieldLabel6);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue6\\]/g, this.options.tokens.projectContact2.customFieldValue6);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel7\\]/g, this.options.tokens.projectContact2.customFieldLabel7);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue7\\]/g, this.options.tokens.projectContact2.customFieldValue7);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel8\\]/g, this.options.tokens.projectContact2.customFieldLabel8);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue8\\]/g, this.options.tokens.projectContact2.customFieldValue8);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel9\\]/g, this.options.tokens.projectContact2.customFieldLabel9);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue9\\]/g, this.options.tokens.projectContact2.customFieldValue9);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldLabel10\\]/g, this.options.tokens.projectContact2.customFieldLabel10);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue10\\]/g, this.options.tokens.projectContact2.customFieldValue10);\n\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue1_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue1_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue2_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue2_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue3_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue3_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue4_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue4_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue5_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue5_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue6_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue6_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue7_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue7_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue8_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue8_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue9_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue9_CLBR);\n\t\tinput = input.replace(/\\[ProjectContact2.CustomFieldValue10_CLBR\\]/g, this.options.tokens.projectContact2.customFieldValue10_CLBR);\n\n\t\tinput = input.replace(/\\[Recipient.Company\\]/g, this.options.tokens.recipient.company);\n\t\tinput = input.replace(/\\[Recipient.Contact\\]/g, this.options.tokens.recipient.contact);\n\t\tinput = input.replace(/\\[Recipient.FirstName\\]/g, this.options.tokens.recipient.firstName);\n\t\tinput = input.replace(/\\[Recipient.Title\\]/g, this.options.tokens.recipient.title);\n\t\tinput = input.replace(/\\[Recipient.Address1\\]/g, this.options.tokens.recipient.address1);\n\t\tinput = input.replace(/\\[Recipient.Address2\\]/g, this.options.tokens.recipient.address2);\n\t\tinput = input.replace(/\\[Recipient.City\\]/g, this.options.tokens.recipient.city);\n\t\tinput = input.replace(/\\[Recipient.State\\]/g, this.options.tokens.recipient.state);\n\t\tinput = input.replace(/\\[Recipient.Zip\\]/g, this.options.tokens.recipient.zip);\n\t\tinput = input.replace(/\\[Recipient.Country\\]/g, this.options.tokens.recipient.country);\n\t\tinput = input.replace(/\\[Recipient.Phone\\]/g, this.options.tokens.recipient.phone);\n\t\tinput = input.replace(/\\[Recipient.PhoneExtension\\]/g, this.options.tokens.recipient.phoneExtension);\n\t\tinput = input.replace(/\\[Recipient.Fax\\]/g, this.options.tokens.recipient.fax);\n\t\tinput = input.replace(/\\[Recipient.Email\\]/g, this.options.tokens.recipient.email);\n\t\tinput = input.replace(/\\[Recipient.EmailLogoURL\\]/g, this.options.tokens.recipient.emailLogoURL);\n\t\tinput = input.replace(/\\[Recipient.FullAddress\\]/g, this.options.tokens.recipient.fullAddress);\n\n\t\tinput = input.replace(/\\[Portal.URL\\]/g, this.options.tokens.portal.url);\n\t\tinput = input.replace(/\\[Portal.Domain\\]/g, this.options.tokens.portal.domain);\n\t\tinput = input.replace(/\\[DateTime.Today\\]/g, this.options.tokens.dateTime.today);\n\n\t\tinput = input.replace(/\\[ProjectMessage.AccessKey\\]/g, this.options.tokens.projectMessage.accessKey);\n\t\tinput = input.replace(/\\[ProjectMessage.RSVPURL\\]/g, this.options.tokens.projectMessage.rsvpurl);\n\t\tinput = input.replace(/\\[ProjectMessage.RecipientGroupList\\]/g, this.options.tokens.projectMessage.recipientGroupList);\n\t\tinput = input.replace(/\\[ProjectMessage.RecipientGroupListComma\\]/g, this.options.tokens.projectMessage.recipientGroupListComma);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueLabel\\]/g, this.options.tokens.projectMessage.responseDueLabel);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageResponseDueLabel\\]/g, this.options.tokens.projectMessage.messageResponseDueLabel);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueDate\\]/g, this.options.tokens.projectMessage.responseDueDate);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueDateWithBy\\]/g, this.options.tokens.projectMessage.responseDueDateWithBy ? this.options.tokens.projectMessage.responseDueDateWithBy : '');\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueTime\\]/g, this.options.tokens.projectMessage.responseDueTime);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageSubject\\]/g, this.options.tokens.projectMessage.messageSubject);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageBody\\]/g, this.options.tokens.projectMessage.messageBody);\n\t\tinput = input.replace(/\\[ProjectMessage.SentOnDate\\]/g, this.options.tokens.projectMessage.sentOnDate);\n\t\tinput = input.replace(/\\[ProjectMessage.EstCompleteDate\\]/g, this.options.tokens.projectMessage.estCompleteDate);\n\t\tinput = input.replace(/\\[ProjectMessage.EstStartDate\\]/g, this.options.tokens.projectMessage.estStartDate);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageType\\]/g, this.options.tokens.projectMessage.messageType);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseType\\]/g, this.options.tokens.projectMessage.responseType);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageName\\]/g, this.options.tokens.projectMessage.messageName);\n\n\t\tinput = input.replace(/\\[Project.ProjectId\\]/g, this.options.tokens.project.projectId);\n\t\tinput = input.replace(/\\[Project.Name\\]/g, this.options.tokens.project.name);\n\t\tinput = input.replace(/\\[Project.Address1\\]/g, this.options.tokens.project.address1);\n\t\tinput = input.replace(/\\[Project.Address2\\]/g, this.options.tokens.project.address2);\n\t\tinput = input.replace(/\\[Project.City\\]/g, this.options.tokens.project.city);\n\t\tinput = input.replace(/\\[Project.State\\]/g, this.options.tokens.project.state);\n\t\tinput = input.replace(/\\[Project.Zip\\]/g, this.options.tokens.project.zip);\n\t\tinput = input.replace(/\\[Project.Country\\]/g, this.options.tokens.project.country);\n\t\tinput = input.replace(/\\[Project.Notes\\]/g, this.options.tokens.project.notes);\n\t\tinput = input.replace(/\\[Project.ResponseDueLabel\\]/g, this.options.tokens.project.responseDueLabel);\n\t\tinput = input.replace(/\\[Project.MessageResponseDueLabel\\]/g, this.options.tokens.project.messageResponseDueLabel);\n\t\tinput = input.replace(/\\[Project.ResponseDueDate\\]/g, this.options.tokens.project.responseDueDate);\n\t\tinput = input.replace(/\\[Project.ResponseDueTime\\]/g, this.options.tokens.project.responseDueTime);\n\t\tinput = input.replace(/\\[Project.ResponseDueShortTime\\]/g, this.options.tokens.project.responseDueShortTime);\n\t\tinput = input.replace(/\\[Project.ResponseDueTimeZone\\]/g, this.options.tokens.project.responseDueTimeZone);\n\t\tinput = input.replace(/\\[Project.ResponseDueDateWithBy\\]/g, this.options.tokens.project.responseDueDateWithBy);\n\t\tinput = input.replace(/\\[Project.StartDate\\]/g, this.options.tokens.project.startDate);\n\t\tinput = input.replace(/\\[Project.EndDate\\]/g, this.options.tokens.project.endDate);\n\t\tinput = input.replace(/\\[Project.ProjectStatus\\]/g, this.options.tokens.project.projectStatus);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel1\\]/g, this.options.tokens.project.customFieldLabel1);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue1\\]/g, this.options.tokens.project.customFieldValue1);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel2\\]/g, this.options.tokens.project.customFieldLabel2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue2\\]/g, this.options.tokens.project.customFieldValue2);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel3\\]/g, this.options.tokens.project.customFieldLabel3);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue3\\]/g, this.options.tokens.project.customFieldValue3);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel4\\]/g, this.options.tokens.project.customFieldLabel4);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue4\\]/g, this.options.tokens.project.customFieldValue4);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel5\\]/g, this.options.tokens.project.customFieldLabel5);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue5\\]/g, this.options.tokens.project.customFieldValue5);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel6\\]/g, this.options.tokens.project.customFieldLabel6);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue6\\]/g, this.options.tokens.project.customFieldValue6);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel7\\]/g, this.options.tokens.project.customFieldLabel7);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue7\\]/g, this.options.tokens.project.customFieldValue7);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel8\\]/g, this.options.tokens.project.customFieldLabel8);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue8\\]/g, this.options.tokens.project.customFieldValue8);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel9\\]/g, this.options.tokens.project.customFieldLabel9);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue9\\]/g, this.options.tokens.project.customFieldValue9);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel10\\]/g, this.options.tokens.project.customFieldLabel10);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue10\\]/g, this.options.tokens.project.customFieldValue10);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel11\\]/g, this.options.tokens.project.customFieldLabel11);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue11\\]/g, this.options.tokens.project.customFieldValue11);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel12\\]/g, this.options.tokens.project.customFieldLabel12);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue12\\]/g, this.options.tokens.project.customFieldValue12);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel13\\]/g, this.options.tokens.project.customFieldLabel13);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue13\\]/g, this.options.tokens.project.customFieldValue13);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel14\\]/g, this.options.tokens.project.customFieldLabel14);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue14\\]/g, this.options.tokens.project.customFieldValue14);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel15\\]/g, this.options.tokens.project.customFieldLabel15);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue15\\]/g, this.options.tokens.project.customFieldValue15);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel16\\]/g, this.options.tokens.project.customFieldLabel16);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue16\\]/g, this.options.tokens.project.customFieldValue16);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel17\\]/g, this.options.tokens.project.customFieldLabel17);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue17\\]/g, this.options.tokens.project.customFieldValue17);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel18\\]/g, this.options.tokens.project.customFieldLabel18);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue18\\]/g, this.options.tokens.project.customFieldValue18);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel19\\]/g, this.options.tokens.project.customFieldLabel19);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue19\\]/g, this.options.tokens.project.customFieldValue19);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel20\\]/g, this.options.tokens.project.customFieldLabel20);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue20\\]/g, this.options.tokens.project.customFieldValue20);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel21\\]/g, this.options.tokens.project.customFieldLabel21);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue21\\]/g, this.options.tokens.project.customFieldValue21);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel22\\]/g, this.options.tokens.project.customFieldLabel22);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue22\\]/g, this.options.tokens.project.customFieldValue22);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel23\\]/g, this.options.tokens.project.customFieldLabel23);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue23\\]/g, this.options.tokens.project.customFieldValue23);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel24\\]/g, this.options.tokens.project.customFieldLabel24);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue24\\]/g, this.options.tokens.project.customFieldValue24);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel25\\]/g, this.options.tokens.project.customFieldLabel25);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue25\\]/g, this.options.tokens.project.customFieldValue25);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel26\\]/g, this.options.tokens.project.customFieldLabel26);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26\\]/g, this.options.tokens.project.customFieldValue26);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel27\\]/g, this.options.tokens.project.customFieldLabel27);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27\\]/g, this.options.tokens.project.customFieldValue27);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel28\\]/g, this.options.tokens.project.customFieldLabel28);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue28\\]/g, this.options.tokens.project.customFieldValue28);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel29\\]/g, this.options.tokens.project.customFieldLabel29);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue29\\]/g, this.options.tokens.project.customFieldValue29);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel30\\]/g, this.options.tokens.project.customFieldLabel30);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue30\\]/g, this.options.tokens.project.customFieldValue30);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel31\\]/g, this.options.tokens.project.customFieldLabel31);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue31\\]/g, this.options.tokens.project.customFieldValue31);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel32\\]/g, this.options.tokens.project.customFieldLabel32);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue32\\]/g, this.options.tokens.project.customFieldValue32);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel33\\]/g, this.options.tokens.project.customFieldLabel33);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue33\\]/g, this.options.tokens.project.customFieldValue33);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel34\\]/g, this.options.tokens.project.customFieldLabel34);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue34\\]/g, this.options.tokens.project.customFieldValue34);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel35\\]/g, this.options.tokens.project.customFieldLabel35);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue35\\]/g, this.options.tokens.project.customFieldValue35);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel36\\]/g, this.options.tokens.project.customFieldLabel36);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue36\\]/g, this.options.tokens.project.customFieldValue36);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel37\\]/g, this.options.tokens.project.customFieldLabel37);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue37\\]/g, this.options.tokens.project.customFieldValue37);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel38\\]/g, this.options.tokens.project.customFieldLabel38);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue38\\]/g, this.options.tokens.project.customFieldValue38);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel39\\]/g, this.options.tokens.project.customFieldLabel39);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue39\\]/g, this.options.tokens.project.customFieldValue39);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_CompanyName\\]/g, this.options.tokens.project.customFieldValue26_CompanyName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_ContactName\\]/g, this.options.tokens.project.customFieldValue26_ContactName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_ContactTitle\\]/g, this.options.tokens.project.customFieldValue26_ContactTitle);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Address26\\]/g, this.options.tokens.project.customFieldValue26_Address26);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Address2\\]/g, this.options.tokens.project.customFieldValue26_Address2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_City\\]/g, this.options.tokens.project.customFieldValue26_City);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_StateProvince\\]/g, this.options.tokens.project.customFieldValue26_StateProvince);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_PostalCode\\]/g, this.options.tokens.project.customFieldValue26_PostalCode);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Country\\]/g, this.options.tokens.project.customFieldValue26_Country);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Phone\\]/g, this.options.tokens.project.customFieldValue26_Phone);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Fax\\]/g, this.options.tokens.project.customFieldValue26_Fax);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Cell\\]/g, this.options.tokens.project.customFieldValue26_Cell);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Email\\]/g, this.options.tokens.project.customFieldValue26_Email);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_CompanyName\\]/g, this.options.tokens.project.customFieldValue27_CompanyName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_ContactName\\]/g, this.options.tokens.project.customFieldValue27_ContactName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_ContactTitle\\]/g, this.options.tokens.project.customFieldValue27_ContactTitle);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Address27\\]/g, this.options.tokens.project.customFieldValue27_Address27);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Address2\\]/g, this.options.tokens.project.customFieldValue27_Address2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_City\\]/g, this.options.tokens.project.customFieldValue27_City);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_StateProvince\\]/g, this.options.tokens.project.customFieldValue27_StateProvince);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_PostalCode\\]/g, this.options.tokens.project.customFieldValue27_PostalCode);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Country\\]/g, this.options.tokens.project.customFieldValue27_Country);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Phone\\]/g, this.options.tokens.project.customFieldValue27_Phone);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Fax\\]/g, this.options.tokens.project.customFieldValue27_Fax);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Cell\\]/g, this.options.tokens.project.customFieldValue27_Cell);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Email\\]/g, this.options.tokens.project.customFieldValue27_Email);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue1_CLBR\\]/g, this.options.tokens.project.customFieldValue1_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue2_CLBR\\]/g, this.options.tokens.project.customFieldValue2_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue3_CLBR\\]/g, this.options.tokens.project.customFieldValue3_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue4_CLBR\\]/g, this.options.tokens.project.customFieldValue4_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue5_CLBR\\]/g, this.options.tokens.project.customFieldValue5_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue6_CLBR\\]/g, this.options.tokens.project.customFieldValue6_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue7_CLBR\\]/g, this.options.tokens.project.customFieldValue7_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue8_CLBR\\]/g, this.options.tokens.project.customFieldValue8_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue9_CLBR\\]/g, this.options.tokens.project.customFieldValue9_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue10_CLBR\\]/g, this.options.tokens.project.customFieldValue10_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue11_CLBR\\]/g, this.options.tokens.project.customFieldValue11_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue12_CLBR\\]/g, this.options.tokens.project.customFieldValue12_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue13_CLBR\\]/g, this.options.tokens.project.customFieldValue13_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue14_CLBR\\]/g, this.options.tokens.project.customFieldValue14_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue15_CLBR\\]/g, this.options.tokens.project.customFieldValue15_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue16_CLBR\\]/g, this.options.tokens.project.customFieldValue16_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue17_CLBR\\]/g, this.options.tokens.project.customFieldValue17_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue18_CLBR\\]/g, this.options.tokens.project.customFieldValue18_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue19_CLBR\\]/g, this.options.tokens.project.customFieldValue19_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue20_CLBR\\]/g, this.options.tokens.project.customFieldValue20_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue21_CLBR\\]/g, this.options.tokens.project.customFieldValue21_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue22_CLBR\\]/g, this.options.tokens.project.customFieldValue22_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue23_CLBR\\]/g, this.options.tokens.project.customFieldValue23_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue24_CLBR\\]/g, this.options.tokens.project.customFieldValue24_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue25_CLBR\\]/g, this.options.tokens.project.customFieldValue25_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_CLBR\\]/g, this.options.tokens.project.customFieldValue26_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_CLBR\\]/g, this.options.tokens.project.customFieldValue27_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue28_CLBR\\]/g, this.options.tokens.project.customFieldValue28_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue29_CLBR\\]/g, this.options.tokens.project.customFieldValue29_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue30_CLBR\\]/g, this.options.tokens.project.customFieldValue30_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue31_CLBR\\]/g, this.options.tokens.project.customFieldValue31_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue32_CLBR\\]/g, this.options.tokens.project.customFieldValue32_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue33_CLBR\\]/g, this.options.tokens.project.customFieldValue33_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue34_CLBR\\]/g, this.options.tokens.project.customFieldValue34_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue35_CLBR\\]/g, this.options.tokens.project.customFieldValue35_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue36_CLBR\\]/g, this.options.tokens.project.customFieldValue36_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue37_CLBR\\]/g, this.options.tokens.project.customFieldValue37_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue38_CLBR\\]/g, this.options.tokens.project.customFieldValue38_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue39_CLBR\\]/g, this.options.tokens.project.customFieldValue39_CLBR);\n\n\t\tinput = input.replace(/\\[BidForms.GroupDueDates\\]/g, this.options.tokens.bidForms.groupDueDates);\n\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_CompanyName\\]/g, this.options.tokens.projectContacts.userType395_CompanyName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_ContactName\\]/g, this.options.tokens.projectContacts.userType395_ContactName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_ContactTitle\\]/g, this.options.tokens.projectContacts.userType395_ContactTitle);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Address26\\]/g, this.options.tokens.projectContacts.userType395_Address);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Address2\\]/g, this.options.tokens.projectContacts.userType395_Address2);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_City\\]/g, this.options.tokens.projectContacts.userType395_City);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_StateProvince\\]/g, this.options.tokens.projectContacts.userType395_StateProvince);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_PostalCode\\]/g, this.options.tokens.projectContacts.userType395_PostalCode);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Country\\]/g, this.options.tokens.projectContacts.userType395_Country);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Phone\\]/g, this.options.tokens.projectContacts.userType395_Phone);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Fax\\]/g, this.options.tokens.projectContacts.userType395_Fax);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Cell\\]/g, this.options.tokens.projectContacts.userType395_Cell);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Email\\]/g, this.options.tokens.projectContacts.userType395_Email);\n\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_CompanyName\\]/g, this.options.tokens.projectContacts.userType396_CompanyName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_ContactName\\]/g, this.options.tokens.projectContacts.userType396_ContactName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_ContactTitle\\]/g, this.options.tokens.projectContacts.userType396_ContactTitle);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Address26\\]/g, this.options.tokens.projectContacts.userType396_Address);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Address2\\]/g, this.options.tokens.projectContacts.userType396_Address2);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_City\\]/g, this.options.tokens.projectContacts.userType396_City);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_StateProvince\\]/g, this.options.tokens.projectContacts.userType396_StateProvince);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_PostalCode\\]/g, this.options.tokens.projectContacts.userType396_PostalCode);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Country\\]/g, this.options.tokens.projectContacts.userType396_Country);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Phone\\]/g, this.options.tokens.projectContacts.userType396_Phone);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Fax\\]/g, this.options.tokens.projectContacts.userType396_Fax);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Cell\\]/g, this.options.tokens.projectContacts.userType396_Cell);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Email\\]/g, this.options.tokens.projectContacts.userType396_Email);\n\n\t\treturn input;\n\t}\n});\n\nPJQ.views.projectInvites.ProjectInviteModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Project-Invite'),\n\t\tminWidth: '90%',\n\t\tonSend: _.noop,\n\t\tonCancel: _.noop,\n\t\tonAddFromThisProject: _.noop,\n\t\tonViewSelected: _.noop,\n\t\tprojectMessagingView: null,\n\t\tproject: null,\n\t\temailTemplates: [],\n\t\tisShowQuickAdd: false,\n\t\tisShowAttachments: false,\n\t\tisShowAddParticipants: false\n\t},\n\tevents: {\n\t\t'click .preview-invite': 'previewInvite',\n\t\t'click .invite-send': 'sendInvite',\n\t\t'click .invite-preview': 'previewInvite',\n\t\t'click .invite-close': 'closeInvite',\n\t\t'click .btn-add-participants-from-project': 'addParticipantsFromProject',\n\t\t'click .btn-add-participants-from-this-project': 'addParticipantsFromThisProject',\n\t\t'click .btn-detailed-search': 'detailedSearch',\n\t\t'click .btn-detailed-search-new': 'detailedSearch',\n\t\t'click .btn-simple-search': 'simpleSearch',\n\t\t'click .btn-quick-search': 'quickSearch',\n\t\t'click .view-selected-contacts': 'viewSelected',\n\t\t'click .preview-export': 'export'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {};\n\t},\n\tafterRender: function () {\n\t\tthis.$('.count-selected-contacts').html(_.size(this.options.projectMessagingView.options.selectedContacts));\n\t\tthis.projectInvite = new PJQ.views.projectInvites.ProjectInvite({\n\t\t\tel: this.$('.project-invite'),\n\t\t\tproject: this.options.project,\n\t\t\temailTemplates: this.options.emailTemplates,\n\t\t\treplyToContacts: this.options.replyToContacts,\n\t\t\tdefaultTemplateKey: this.options.defaultTemplateKey,\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.$('.invite-send').prop('disabled', (_.size(this.options.project.inviteSettings.messageSubject) === 0 ||\n\t\t\t\t\t_.size(this.options.project.inviteSettings.messageBody) === 0 ||\n\t\t\t\t\t(_.size(this.options.projectMessagingView.options.selectedContacts) === 0 &&\n\t\t\t\t\t\t!PJQ.helpers.validators.validateEmail(this.options.project.inviteSettings.quickAdd, true).success)\n\t\t\t\t));\n\n\t\t\t}, this),\n\t\t\tisShowQuickAdd: this.options.isShowQuickAdd,\n\t\t\tisShowAttachments: this.options.isShowAttachments\n\t\t});\n\t},\n\tpreviewInvite: function () {\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessagepreview'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: \"templateKey\",\n\t\t\t\tvalue: this.options.project.inviteSettings.emailTemplate.get('templateKey')\n\t\t\t}\n\t\t]);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpoint\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tnew PJQ.views.projectInvites.ProjectInvitePreviewModal({\n\t\t\t\ttokens: data,\n\t\t\t\tinviteSettings: this.options.project.inviteSettings,\n\t\t\t\tproject: this.options.project\n\t\t\t});\n\t\t}, this)).fail(function () {\n\t\t});\n\n\t},\n\texport: function () {\n\t\tlet responseType = 'N/A';\n\t\tif (this.options.project.inviteSettings.responseType === 'PROJECT')\n\t\t\tresponseType = 'ACCEPT/DECLINE';\n\t\telse if (this.options.project.inviteSettings.responseType === 'MESSAGE')\n\t\t\tresponseType = 'YES/NO';\n\n\t\tthis.$('.preview-export').prop('disabled', true);\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.get('projectId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projectmessagepreview'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'export'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\ttemplateKey: this.options.project.inviteSettings.emailTemplate.get('templateKey'),\n\t\t\t\tresponseType: encodeURIComponent(responseType),\n\t\t\t\tbidDueDate: this.options.project.inviteSettings.responseDue,\n\t\t\t\tresponseDueDate: this.options.project.inviteSettings.responseDue,\n\t\t\t\tmessageSubject: encodeURIComponent(this.projectInvite.translateTokens(this.options.project.inviteSettings.messageSubject)),\n\t\t\t\tmessageBody: encodeURIComponent(this.projectInvite.translateTokens(this.options.project.inviteSettings.messageBody))\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tthis.$('.preview-export').prop('disabled', false);\n\t\t\tPJQ.files.downloadFile(data.url, {isEndpoint: false});\n\t\t}, this));\n\t},\n\tcloseInvite: function () {\n\t\tif (typeof this.options.onCancel === 'function')\n\t\t\tthis.options.onCancel();\n\n\t\tthis.removeModal();\n\t},\n\tsendInvite: function () {\n\t\tlet button = this.$('.invite-send');\n\t\tbutton.attr('disabled', true);\n\t\tif (this.options.project.inviteSettings.attachments && _.size(this.options.project.inviteSettings.attachments.models) > 0) {\n\t\t\t// enforce max file size of 15728640\n\t\t\tlet totalSize = 0;\n\t\t\t_.each(this.options.project.inviteSettings.attachments.models, _.bind(function (fileModel) {\n\t\t\t\ttotalSize += fileModel.file ? fileModel.file.size : fileModel.get('size');\n\t\t\t}, this));\n\n\t\t\tif (totalSize > 15728640) {\n\t\t\t\tPJQ.notifications.notify.warningNotify({\n\t\t\t\t\tmessage: 'The total size of uploaded attachments exceeds the 15mb limit.'\n\t\t\t\t});\n\t\t\t\tbutton.attr('disabled', false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Remove no-space replacement characters\n\t\tthis.options.project.inviteSettings.messageBody = this.options.project.inviteSettings.messageBody.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n\n\t\tlet sendOptions = [{\n\t\t\tprojectId: this.options.project.get('projectId'),\n\t\t\tmessageSubject: this.options.project.inviteSettings.messageSubject,\n\t\t\tmessageBody: this.options.project.inviteSettings.messageBody,\n\t\t\tresponseType: this.options.project.inviteSettings.responseType,\n\t\t\ttemplateKey: this.options.project.inviteSettings.messageType,\n\t\t\tresponseDue: this.options.project.inviteSettings.responseDue,\n\t\t\tsendEmail: true,\n\t\t\tsendFax: this.options.project.inviteSettings.sendFaxAlways,\n\t\t\tsendFaxIfNoEmail: this.options.project.inviteSettings.sendFaxIfNoEmail,\n\t\t\tsendFaxIfEmailFails: this.options.project.inviteSettings.sendFaxIfEmailFails,\n\t\t\tquickAdd: this.options.project.inviteSettings.quickAdd,\n\t\t\tattachments: this.options.project.inviteSettings.attachments.models,\n\t\t\tprivateFolders: this.options.project.inviteSettings.privateFolders.models,\n\t\t\treplyTo: this.options.project.inviteSettings.replyTo\n\t\t}];\n\n\t\tlet endpointCheck = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'sendprojectmessages'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'checkrecipients'\n\t\t\t}\n\t\t]);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpointCheck,\n\t\t\tdata: {\n\t\t\t\tisAddAllGroups: false,\n\t\t\t\tcontacts: this.options.projectMessagingView.options.selectedContacts,\n\t\t\t\tprojectMessageSendOptions: sendOptions\n\t\t\t},\n\t\t\tisApi2: true\n\t\t}).post().done(_.bind(function (data) {\n\n\t\t\tlet sendCallback = _.bind(function () {\n\t\t\t\tlet endpointSend = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'sendprojectmessages'\n\t\t\t\t\t}\n\t\t\t\t]);\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: endpointSend,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tisAddAllGroups: false,\n\t\t\t\t\t\tcontacts: this.options.projectMessagingView.options.selectedContacts,\n\t\t\t\t\t\tprojectMessageSendOptions: sendOptions\n\t\t\t\t\t},\n\t\t\t\t\tisApi2: true\n\t\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\t\tif (typeof this.options.onSend === 'function')\n\t\t\t\t\t\tthis.options.onSend();\n\n\t\t\t\t\tthis.options.project.inviteSettings = null;\n\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Message queued for sending'\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.removeModal();\n\n\t\t\t\t}, this)).fail(function () {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: 'Something went wrong.'\n\t\t\t\t\t});\n\t\t\t\t\tbutton.attr('disabled', false);\n\t\t\t\t});\n\t\t\t}, this);\n\n\t\t\tif (data.nonPendingCount > 0) {\n\t\t\t\tnew PJQ.views.modals.YesNo({\n\t\t\t\t\theader: \"Project Status Warning\",\n\t\t\t\t\tbody: \"Participants in your selection have a non-PENDING status. If you send this message, it will reset their status back to PENDING. Do you want to continue?\",\n\t\t\t\t\tonYes: _.bind(function () {\n\t\t\t\t\t\tsendCallback();\n\t\t\t\t\t}, this)\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\tsendCallback();\n\n\n\t\t}, this)).fail(function () {\n\t\t\tbutton.attr('disabled', false);\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Something went wrong.'\n\t\t\t});\n\t\t});\n\n\n\t},\n\taddSelectedContacts: function (selectedContacts) {\n\t\tthis.options.projectMessagingView.addSelectedContacts(selectedContacts);\n\t\tthis.$('.count-selected-contacts').html(this.options.projectMessagingView.options.selectedContacts.length);\n\t\tthis.options.projectMessagingView.stats.unsentCount += _.size(selectedContacts);\n\t\tthis.options.projectMessagingView.renderContactStats();\n\t\tthis.options.projectMessagingView.renderView();\n\t\tthis.$('.invite-send').prop('disabled', this.options.projectMessagingView.options.selectedContacts.length === 0);\n\t},\n\taddParticipantsFromThisProject: function () {\n\t\tthis.options.onAddFromThisProject(this.options.project.inviteSettings);\n\t\tthis.removeModal();\n\t},\n\taddParticipantsFromProject: function () {\n\t\tlet statuses = this.options.project.getProjectStatusList();\n\t\tnew PJQ.views.projectParticipants.AddParticipantsFromProjectModal({\n\t\t\tmodel: this.options.project,\n\t\t\tisBidFormsEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS),\n\t\t\tprojectResponses: statuses,\n\t\t\tisReturnContactIds: true,\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.addSelectedContacts(selectedContacts);\n\t\t\t}, this)\n\t\t});\n\t},\n\tsimpleSearch: function () {\n\t\tlet showUnionStatus = true;\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS)) {\n\t\t\tshowUnionStatus = !PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.IS_HIDE_UNION_STATUS);\n\t\t}\n\t\tnew PJQ.views.projectParticipants.AddParticipantsModal({\n\t\t\tmodel: this.options.project,\n\t\t\tisDirectoryEnabled: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DIRECTORY),\n\t\t\tisUnionStatusEnabled: showUnionStatus,\n\t\t\tisReturnContactIds: true,\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.addSelectedContacts(selectedContacts);\n\t\t\t}, this)\n\t\t});\n\t},\n\tquickSearch: function () {\n\t\tnew PJQ.views.contacts.SelectContactsModal({\n\t\t\tisSingleChoice: false,\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.options.project.addParticipantsById(selectedContacts, _.bind(function () {\n\t\t\t\t\tthis.addSelectedContacts(_.map(selectedContacts, function (selectedContact) {\n\t\t\t\t\t\treturn selectedContact.get('contactId');\n\t\t\t\t\t}));\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t},\n\tdetailedSearch: function (e) {\n\t\t$('form[name=\"modal-add-participants\"]').remove();\n\t\tlet options = {\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.addSelectedContacts(selectedContacts);\n\t\t\t}, this)\n\t\t};\n\n\t\tif ($(e.currentTarget).hasClass('btn-detailed-search-new') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n\t\t\toptions.isWrapForm = false;\n\t\t\toptions.wrapFormName = null;\n\t\t\toptions.isUseNewAddressBook = true;\n\t\t}\n\n\t\tnew PJQ.views.projects.AddParticipantsDetailedModal(options);\n\t},\n\tviewSelected: function () {\n\t\tif (_.size(this.options.projectMessagingView.options.selectedContacts) > 0) {\n\t\t\tthis.options.onViewSelected();\n\t\t\tthis.removeModal();\n\t\t}\n\t}\n});\n\nPJQ.views.projectInvites.ProjectInvitesModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Project-Invites'),\n\t\tminWidth: '60%',\n\t\tonSend: _.noop,\n\t\tonClose: _.noop,\n\t\tprojects: [],\n\t\temailTemplates: []\n\t},\n\tevents: {\n\t\t'click .project-invites-add-contacts': 'addContacts',\n\t\t'click .btn-remove-contact': 'removeContact',\n\t\t'click .project-invites-jump-step': 'jumpStep',\n\t\t'click .preview-invite': 'previewInvite',\n\t\t'click .remove-invite': 'removeInvite',\n\t\t'click .invites-close': 'onClose',\n\t\t'click .invites-send': 'onSend',\n\t\t'click .btn-detailed-search-new': 'detailedSearch',\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.contacts = [];\n\t\tthis.selectedContacts = [];\n\t\tthis.selectedCompanies = [];\n\t\tthis.selectedGroups = [];\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tprojects: this.options.projects,\n\t\t\temailTemplates: this.options.emailTemplates,\n\t\t\tresponseDueLabel: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.MESSAGE_RESPONSE_DUE_LABEL) : \"Response Due\"\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.contactTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.contact-list'),\n\t\t\tdata: [],\n\t\t\tisHideSearch: true,\n\t\t\torder: [],\n\t\t\tcolumns: [\n\t\t\t\t{\"data\": \"attributes.companyName\", \"title\": \"Company Name\", \"orderable\": false},\n\t\t\t\t{\"data\": \"attributes.contactName\", \"title\": \"Contact Name\", \"orderable\": false},\n\t\t\t\t{\"data\": \"attributes.phone\", \"title\": \"Phone\", \"orderable\": false},\n\t\t\t\t{\"data\": \"attributes.email\", \"title\": \"Email\", \"orderable\": false},\n\t\t\t\t{\n\t\t\t\t\t\"title\": '',\n\t\t\t\t\t\"render\": function () {\n\t\t\t\t\t\treturn '<button type=\"button\" class=\"btn btn-danger btn-remove-contact ml-2\" title=\"Remove Contact\"><i class=\"fal fa-trash\"></i></button>';\n\t\t\t\t\t},\n\t\t\t\t\t\"width\": \"120px\",\n\t\t\t\t\t\"orderable\": false,\n\t\t\t\t\t\"searchable\": false,\n\t\t\t\t\t\"className\": \"text-center\",\n\t\t\t\t\t\"visible\": true\n\t\t\t\t}\n\t\t\t],\n\t\t\tdom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n\t\t\tlanguage: {\n\t\t\t\t\"emptyTable\": \"No contacts have been selected\"\n\t\t\t}\n\t\t});\n\t\t$('#project-invite-step-2').on('shown.bs.collapse', _.bind(function () {\n\t\t\tthis.manageButtonStates(_.size(this.contactTable.dataTable.data()));\n\t\t\tif (this.step === 2 && this.$('#projectInvitesAccordion div.collapse.show').length === 0) {\n\t\t\t\tthis.$('#project-accordion-' + this.options.projects[0].get('projectId')).collapse('show');\n\t\t\t}\n\t\t}, this));\n\n\t\t$('div.collapse.project-accordion-step').on('shown.bs.collapse', _.bind(function (e) {\n\t\t\tlet projectId = parseInt($(e.currentTarget).data('projectId')),\n\t\t\t\tproject = _.filter(this.options.projects, _.bind(function (project, index) {\n\t\t\t\t\treturn projectId === project.get('projectId');\n\t\t\t\t}, this))[0];\n\n\t\t\tif (!project.inviteSettings.isShown) {\n\t\t\t\tproject.inviteSettings.isShown = true;\n\n\t\t\t\t// todo: initialize all other controls here since they don't seem to be working from the other place.\n\n\t\t\t\tif (project.get('rDueText') === 'ASAP') {\n\t\t\t\t\tproject.inviteSettings.responseDueAsapCheckbox.prop('checked', true);\n\t\t\t\t\tproject.inviteSettings.responseDueInput.val('').prop('disabled', true);\n\t\t\t\t}\n\t\t\t\telse if (_.size(project.get('rDueText')) > 0) {\n\t\t\t\t\tproject.inviteSettings.responseDueInput.val(PJQ.helpers.dateHelpers.getDateString(PJQ.helpers.dateHelpers.parseDateString(project.get('rDueText'), false), PJQ.helpers.dateHelpers.dateFormats.DATE_YMD));\n\t\t\t\t}\n\n\t\t\t\tthis.messageTypeSelected(project.get('projectId'), this.options.emailTemplates[0].get('templateKey'));\n\t\t\t}\n\t\t}, this));\n\n\t\t_.each(this.options.projects, _.bind(function (project) {\n\t\t\tproject.inviteSettings = {};\n\t\t\tproject.inviteSettings.isShown = false;\n\t\t\tproject.inviteSettings.messageSubject = this.options.emailTemplates[0].get('subjectTemplate');\n\t\t\tproject.inviteSettings.messageType = this.options.emailTemplates[0].get('templateKey');\n\t\t\tproject.inviteSettings.responseType = this.options.emailTemplates[0].get('projectMessageType');\n\t\t\tproject.inviteSettings.sendOptions = {};\n\t\t\tproject.inviteSettings.sendOptions.sendEmail = true;\n\t\t\tproject.inviteSettings.sendOptions.sendFaxIfNoEmail = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL);\n\t\t\tproject.inviteSettings.sendOptions.sendFaxIfEmailFails = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED);\n\t\t\tproject.inviteSettings.sendOptions.sendFaxAlways = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS);\n\t\t\tproject.inviteSettings.messageBody = this.options.emailTemplates[0].get('defaultTextTemplate');\n\t\t\tproject.inviteSettings.responseDue = (project.get('rDueText') === 'ASAP') ? 'ASAP' : project.get('rDueText');\n\n\t\t\tproject.inviteSettings.messageSubjectInput = this.$('#project-accordion-' + project.get('projectId') + ' input.message-subject');\n\t\t\tproject.inviteSettings.messageSubjectInput.on('change', _.bind(function () {\n\t\t\t\tproject.inviteSettings.messageSubject = project.inviteSettings.messageSubjectInput.val();\n\t\t\t}, this));\n\t\t\tproject.inviteSettings.responseDueInput = this.$('#project-accordion-' + project.get('projectId') + ' input.response-due');\n\t\t\tproject.inviteSettings.responseDueInput.on('change', _.bind(function () {\n\t\t\t\tproject.inviteSettings.responseDue = project.inviteSettings.responseDueAsapCheckbox.prop('checked') ? 'ASAP' : project.inviteSettings.responseDueInput.val();\n\t\t\t}, this));\n\t\t\tproject.inviteSettings.responseDueAsapCheckbox = this.$('#project-accordion-' + project.get('projectId') + ' input.response-due-asap');\n\t\t\tproject.inviteSettings.responseDueAsapCheckbox.on('click', _.bind(function () {\n\t\t\t\tproject.inviteSettings.responseDue = project.inviteSettings.responseDueAsapCheckbox.prop('checked') ? 'ASAP' : project.inviteSettings.responseDueInput.val();\n\t\t\t\tproject.inviteSettings.responseDueInput.val('').prop('disabled', project.inviteSettings.responseDueAsapCheckbox.prop('checked'));\n\t\t\t}, this));\n\n\t\t\tproject.inviteSettings.messageTypeSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('#project-accordion-' + project.get('projectId') + ' select.message-type'),\n\t\t\t\tdropupAuto: false,\n\t\t\t\tonChange: _.bind(function () {\n\t\t\t\t\tthis.messageTypeSelected(project.get('projectId'), project.inviteSettings.messageTypeSelectPicker.getValue());\n\t\t\t\t}, this)\n\t\t\t});\n\n\t\t\tproject.inviteSettings.responseTypeSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('#project-accordion-' + project.get('projectId') + ' select.response-type'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tproject.inviteSettings.responseType = value;\n\t\t\t\t}, this),\n\t\t\t});\n\n\t\t\tlet defaultSendOptions = [\"1\"];\n\t\t\tif (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_FAX)) {\n\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"2\"]').prop('hidden', true);\n\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"3\"]').prop('hidden', true);\n\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"4\"]').prop('hidden', true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_NO_EMAIL)) {\n\t\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"2\"]').prop('selected', true);\n\t\t\t\t\tdefaultSendOptions.push(\"2\");\n\t\t\t\t}\n\n\t\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_EMAIL_FAILED)) {\n\t\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"3\"]').prop('selected', true);\n\t\t\t\t\tdefaultSendOptions.push(\"3\");\n\t\t\t\t}\n\n\t\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_MESSAGING_SEND_OPTIONS_FAX_ALWAYS)) {\n\t\t\t\t\tthis.$('#project-accordion-' + project.get('projectId') + ' select.send-options option[value=\"4\"]').prop('selected', true);\n\t\t\t\t\tdefaultSendOptions.push(\"4\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproject.inviteSettings.sendOptionsSelectPicker = new PJQ.inputs.SelectpickerProjectMessageSendOptions({\n\t\t\t\tel: this.$('#project-accordion-' + project.get('projectId') + ' select.send-options'),\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tproject.inviteSettings.sendFaxIfNoEmail = value.indexOf(\"2\") !== -1;\n\t\t\t\t\tproject.inviteSettings.sendFaxIfEmailFails = value.indexOf(\"3\") !== -1;\n\t\t\t\t\tproject.inviteSettings.sendFaxAlways = value.indexOf(\"4\") !== -1;\n\t\t\t\t}, this),\n\t\t\t\tisMultiple: true,\n\t\t\t\tisIntChoices: false,\n\t\t\t\thideDisabled: false,\n\t\t\t\tnoneSelectedText: 'No Options Selected',\n\t\t\t\tdefaultValue: [\"1\"],\n\t\t\t\texclusiveChoices: [\"4\"]\n\t\t\t});\n\n\t\t\tproject.inviteSettings.messageBodyHTMLEditor = new PJQ.inputs.HTMLEditor({\n\t\t\t\tel: this.$('#project-accordion-' + project.get('projectId') + ' div.invite-message'),\n\t\t\t\tonInit: _.bind(function () {\n\t\t\t\t\tlet tokenBtn = '<button type=\"button\" class=\"btn btn-default btn-sm btn-small tokenBtn\" title=\"Token List\" data-event=\"something\" tabindex=\"-1\">Tokens</button>',\n\t\t\t\t\t\ttokenGroup = '<div class=\"note-file btn-group\">' + tokenBtn + '</div>';\n\n\t\t\t\t\t$(tokenGroup).prependTo(this.$('.note-toolbar'));\n\t\t\t\t\tthis.$('.tokenBtn').tooltip({container: 'body', placement: 'bottom'});\n\t\t\t\t\tthis.$('.tokenBtn').click(function (event) {\n\t\t\t\t\t\t// load token dialog\n\t\t\t\t\t});\n\n\t\t\t\t}, this),\n\t\t\t\tonChange: _.bind(function (contents) {\n\t\t\t\t\tproject.inviteSettings.messageBody = contents;\n\t\t\t\t}, this),\n\t\t\t\tdefaultValue: this.options.emailTemplates[0].get('defaultTextTemplate')\n\t\t\t});\n\t\t}, this));\n\n\t\tthis.$('.project-invites-selected-project-count').text(_.size(this.options.projects));\n\t\tthis.manageButtonStates(0);\n\t\tthis.goToStep(1);\n\t},\n\tonClose: function () {\n\t\tif (typeof this.options.onClose === 'function')\n\t\t\tthis.options.onClose();\n\t\tthis.removeModal();\n\t},\n\tdetailedSearch: function (e) {\n\t\t$('form[name=\"modal-add-participants\"]').remove();\n\t\tlet options = {\n\t\t\tonSave: _.bind(function (selectedContactsAll, data) {\n\t\t\t\tthis.selectedContacts = _.union(this.selectedContacts, data.selectedContacts);\n\t\t\t\tthis.selectedCompanies = _.union(this.selectedCompanies, data.selectedCompanies);\n\t\t\t\tthis.selectedGroups = _.union(this.selectedGroups, data.selectedGroups);\n\n\t\t\t\tif (_.size(selectedContactsAll) > 0) {\n\t\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tendpoint: 'contacts'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tendpoint: 'list'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t], [{\n\t\t\t\t\t\t\tparameter: 'contactIds',\n\t\t\t\t\t\t\tvalue: selectedContactsAll\n\t\t\t\t\t\t}\n\t\t\t\t\t\t])\n\t\t\t\t\t}).get().done(_.bind(function (data) {\n\t\t\t\t\t\tif (_.size(data) > 0) {\n\t\t\t\t\t\t\t_.each(data, function (model) {\n\t\t\t\t\t\t\t\tthis.contacts.push(new PJQ.models.contacts.Contact(model))\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\tthis.contactTable.resetData(this.contacts);\n\t\t\t\t\t\t\tthis.contactTable.dataTable.draw();\n\t\t\t\t\t\t\tthis.manageButtonStates(_.size(this.contactTable.dataTable.data()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)).fail(function (xhr, err, result) {\n\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tdisableContacts: _.map(this.contactTable.dataTable.data(), function (row) {\n\t\t\t\treturn row.attributes.contactId;\n\t\t\t})\n\t\t};\n\n\t\tif ($(e.currentTarget).hasClass('btn-detailed-search-new') && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_NEW_ADDRESSBOOK)) {\n\t\t\toptions.isWrapForm = false;\n\t\t\toptions.wrapFormName = null;\n\t\t\toptions.isUseNewAddressBook = true;\n\t\t\toptions.isMultipleProjects = true;\n\t\t\toptions.projects = this.options.projects;\n\t\t}\n\n\t\tnew PJQ.views.projects.AddParticipantsDetailedModal(options);\n\t},\n\n\tonSend: function () {\n\t\tlet sendOptions = [];\n\t\t_.each(this.options.projects, _.bind(function (project) {\n\t\t\tlet sendOption = {};\n\t\t\tsendOption.projectId = project.get('projectId');\n\t\t\tsendOption.messageSubject = project.inviteSettings.messageSubject;\n\t\t\tsendOption.messageBody = project.inviteSettings.messageBody;\n\t\t\tsendOption.responseType = project.inviteSettings.responseType;\n\t\t\tsendOption.templateKey = project.inviteSettings.messageType;\n\t\t\tsendOption.responseDue = project.inviteSettings.responseDue;\n\t\t\tsendOption.sendEmail = true;\n\t\t\tsendOption.sendFax = project.inviteSettings.sendFaxAlways;\n\t\t\tsendOption.sendFaxIfNoEmail = project.inviteSettings.sendFaxIfNoEmail;\n\t\t\tsendOption.sendFaxIfEmailFails = project.inviteSettings.sendFaxIfEmailFails;\n\t\t\tsendOptions.push(sendOption);\n\t\t}, this));\n\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'sendprojectmessages'\n\t\t\t}\n\t\t]);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpoint,\n\t\t\tdata: {\n\t\t\t\tcontacts: _.map(this.contactTable.dataTable.data(), function (contact) {\n\t\t\t\t\treturn contact.get('contactId')\n\t\t\t\t}),\n\t\t\t\tprojectMessageSendOptions: sendOptions\n\t\t\t}\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (typeof this.options.onSend === 'function')\n\t\t\t\tthis.options.onSend();\n\n\t\t\tnew PJQ.views.BaseModal({\n\t\t\t\theader: \"Project Invites Sent\",\n\t\t\t\tbody: \"Your project invites are now being processed for broadcast.\",\n\t\t\t\tisShowCancelButton: false\n\t\t\t});\n\n\t\t\tthis.removeModal();\n\t\t}, this)).fail(function () {\n\n\t\t});\n\n\t},\n\tjumpStep: function (e) {\n\t\tlet step = parseInt($(e.currentTarget).data('step').toString());\n\t\tthis.goToStep(step);\n\t},\n\tgoToStep: function (step) {\n\t\tthis.step = step;\n\t\tlet thisStep = $('.step-' + this.step.toString()),\n\t\t\tthisStepHeader = $('.step-header-' + this.step.toString());\n\t\tthis.$('[class*=step-]').not(thisStep).collapse('hide');\n\t\tthis.$('[class*=step-header-]').not(thisStepHeader).removeClass('text-primary').addClass('text-dark op-4');\n\t\tthisStepHeader.removeClass('text-dark op-4').addClass('text-primary');\n\n\t\tif (this.step === 1) {\n\t\t\tthis.$('.project-invites-selected-contact-count').parent().removeClass('text-dark op-4').addClass('text-info');\n\t\t\tthis.$('.project-invites-selected-project-count').parent().removeClass('text-info').addClass('text-dark op-4');\n\t\t}\n\t\telse if (this.step === 2) {\n\t\t\tthis.$('.project-invites-selected-contact-count').parent().removeClass('text-info').addClass('text-dark op-4');\n\t\t\tthis.$('.project-invites-selected-project-count').parent().removeClass('text-dark op-4').addClass('text-info');\n\t\t}\n\n\t\tthisStep.collapse('show');\n\t},\n\taddContacts: function () {\n\t\tnew PJQ.views.contacts.SelectContactsModal({\n\t\t\tcontext: PJQ.constants.contacts.contexts.CONTACTS,\n\t\t\tisSingleChoice: false,\n\t\t\tsubtitle: \"Add Contacts to Project Invites\",\n\t\t\tdisableContacts: _.map(this.contactTable.dataTable.data(), function (row) {\n\t\t\t\treturn {id: row.attributes.contactId};\n\t\t\t}),\n\t\t\tonSave: _.bind(function (selectedContacts) {\n\t\t\t\tthis.contactTable.dataTable.rows.add(selectedContacts);\n\t\t\t\tthis.contactTable.dataTable.draw();\n\t\t\t\tthis.manageButtonStates(_.size(this.contactTable.dataTable.data()));\n\t\t\t}, this)\n\t\t});\n\t},\n\tremoveContact: function (e) {\n\t\tlet row = this.contactTable.getRow($(e.currentTarget).closest('tr')),\n\t\t\tcontact = row.data();\n\n\t\tlet deleteText = 'Are you sure you want to remove ' + contact.get('companyName') + ' from the list?';\n\t\tif (this.contactTable.dataTable.data().length === 1)\n\t\t\tdeleteText += ' This is the last contact in the invite list, and if you remove it it will cancel this process.';\n\n\t\tnew PJQ.views.BaseModal({\n\t\t\theader: \"Confirm Remove Contact\",\n\t\t\tokButtonText: 'Remove',\n\t\t\tbody: deleteText,\n\t\t\tisShowCancelButton: true,\n\t\t\tonOk: _.bind(function () {\n\t\t\t\trow.remove().draw();\n\t\t\t\tthis.manageButtonStates(_.size(this.contactTable.dataTable.data()));\n\t\t\t\tif (this.contactTable.dataTable.data().length === 0)\n\t\t\t\t\tthis.onClose();\n\t\t\t}, this)\n\t\t});\n\t},\n\tmanageButtonStates: function (contactCount) {\n\t\tthis.$('.project-invites-selected-contact-count').text(contactCount);\n\t\tthis.$('.invites-send').prop('disabled', (contactCount === 0 || this.step === 1));\n\t\tthis.$('.project-invites-jump-step').prop('disabled', contactCount === 0);\n\t},\n\tmessageTypeSelected: function (projectId, templateKey) {\n\t\tlet emailTemplate = _.filter(this.options.emailTemplates, function (template) {\n\t\t\treturn template.get('templateKey') === templateKey\n\t\t})[0];\n\t\tlet project = _.filter(this.options.projects, function (project) {\n\t\t\treturn project.get('projectId') === projectId\n\t\t})[0];\n\t\tproject.inviteSettings.emailTemplate = emailTemplate;\n\t\tproject.inviteSettings.messageType = emailTemplate.get('templateKey');\n\t\tproject.inviteSettings.messageSubject = emailTemplate.get('subjectTemplate');\n\t\tproject.inviteSettings.messageSubjectInput.val(emailTemplate.get('subjectTemplate'));\n\t\tproject.inviteSettings.responseTypeSelectPicker.setValue(emailTemplate.get('projectMessageType') ? emailTemplate.get('projectMessageType') : \"NONE\");\n\t\tproject.inviteSettings.messageBodyHTMLEditor.setValue(emailTemplate.get('defaultTextTemplate'));\n\t\tproject.inviteSettings.messageBody = emailTemplate.get('defaultTextTemplate');\n\t},\n\tpreviewInvite: function (e) {\n\t\tlet projectId = parseInt($(e.currentTarget).closest('div.project-accordion-step').data('projectId')),\n\t\t\tproject = _.filter(this.options.projects, _.bind(function (project) {\n\t\t\t\treturn project.get('projectId') === projectId\n\t\t\t}, this))[0];\n\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: project.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessagepreview'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: \"templateKey\",\n\t\t\t\tvalue: project.inviteSettings.emailTemplate.get('templateKey')\n\t\t\t}\n\t\t]);\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: endpoint\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tnew PJQ.views.projectInvites.ProjectInvitePreviewModal({\n\t\t\t\ttokens: data,\n\t\t\t\tinviteSettings: project.inviteSettings,\n\t\t\t\tproject: project\n\t\t\t});\n\t\t}, this)).fail(function () {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Something went wrong.'\n\t\t\t});\n\t\t});\n\n\t},\n\tremoveInvite: function (e) {\n\t\tlet projectId = this.$(e.currentTarget).closest('div.project-accordion-step').data('projectId'),\n\t\t\tproject = _.filter(this.options.projects, _.bind(function (project) {\n\t\t\t\treturn project.get('projectId') === projectId\n\t\t\t}, this))[0];\n\t\tlet deleteText = 'Are you sure you want to remove this project from the invite list?';\n\n\t\tif (_.size(this.options.projects) === 1)\n\t\t\tdeleteText += ' This is the last project in the invite list, and if you remove it it will cancel this process.';\n\n\t\tnew PJQ.views.BaseModal({\n\t\t\theader: \"Confirm Remove\",\n\t\t\tokButtonText: 'Remove',\n\t\t\tbody: deleteText,\n\t\t\tisShowCancelButton: true,\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tthis.options.projects = _.filter(this.options.projects, _.bind(function (project) {\n\t\t\t\t\treturn project.get('projectId') !== projectId;\n\t\t\t\t}, this));\n\t\t\t\tthis.$('#project-accordion-' + project.get('projectId')).parent().remove();\n\n\t\t\t\tif (_.size(this.options.projects) === 0)\n\t\t\t\t\tthis.onClose();\n\t\t\t\telse\n\t\t\t\t\tthis.$('#project-accordion-' + this.options.projects[0].get('projectId')).collapse('show');\n\n\t\t\t}, this)\n\t\t});\n\t}\n});\n\nPJQ.views.projectInvites.ProjectInvitePreviewModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Project-Invite-Preview'),\n\t\tminWidth: '60%',\n\t\ttokens: null,\n\t\tinviteSettings: null,\n\t\tproject: null\n\t},\n\tevents: {\n\t\t'click .preview-export': 'export'\n\t},\n\tafterRender: function () {\n\t\tlet subject = this.options.inviteSettings.messageSubject,\n\t\t\tbody = this.options.inviteSettings.emailTemplate.get('bodyTemplate');\n\n\t\tthis.options.tokens.projectMessage.responseType = 'N/A';\n\t\tif (this.options.inviteSettings.responseType === 'PROJECT')\n\t\t\tthis.options.tokens.projectMessage.responseType = 'ACCEPT/DECLINE';\n\t\telse if (this.options.inviteSettings.responseType === 'MESSAGE')\n\t\t\tthis.options.tokens.projectMessage.responseType = 'YES/NO';\n\n\t\tthis.options.tokens.projectMessage.bidDueDate = this.options.inviteSettings.responseDue;\n\t\tthis.options.tokens.projectMessage.responseDueDate = this.options.inviteSettings.responseDue;\n\n\t\tthis.options.tokens.projectMessage.messageBody = this.translateTokens(this.options.inviteSettings.messageBody);\n\t\tthis.$('.message-subject').html(this.translateTokens(subject));\n\t\tthis.$('.message-body').html(this.translateTokens(body));\n\t},\n\ttranslateTokens: function (input) {\n\t\tinput = input.replace(/\\[Sender.Username\\]/g, this.options.tokens.sender.username);\n\t\tinput = input.replace(/\\[Sender.Company\\]/g, this.options.tokens.sender.company);\n\t\tinput = input.replace(/\\[Sender.Contact\\]/g, this.options.tokens.sender.contact);\n\t\tinput = input.replace(/\\[Sender.Address1\\]/g, this.options.tokens.sender.address1);\n\t\tinput = input.replace(/\\[Sender.Address2\\]/g, this.options.tokens.sender.address2);\n\t\tinput = input.replace(/\\[Sender.City\\]/g, this.options.tokens.sender.city);\n\t\tinput = input.replace(/\\[Sender.State\\]/g, this.options.tokens.sender.state);\n\t\tinput = input.replace(/\\[Sender.Zip\\]/g, this.options.tokens.sender.zip);\n\t\tinput = input.replace(/\\[Sender.Country\\]/g, this.options.tokens.sender.country);\n\t\tinput = input.replace(/\\[Sender.Phone\\]/g, this.options.tokens.sender.phone);\n\t\tinput = input.replace(/\\[Sender.PhoneExtension\\]/g, this.options.tokens.sender.phoneExtension);\n\t\tinput = input.replace(/\\[Sender.Fax\\]/g, this.options.tokens.sender.fax);\n\t\tinput = input.replace(/\\[Sender.Cell\\]/g, this.options.tokens.sender.cell);\n\t\tinput = input.replace(/\\[Sender.Email\\]/g, this.options.tokens.sender.email);\n\t\tinput = input.replace(/\\[Sender.EmailLogoURL\\]/g, this.options.tokens.sender.emailLogoURL);\n\t\tinput = input.replace(/\\[Sender.FullAddress\\]/g, this.options.tokens.sender.fullAddress);\n\t\tinput = input.replace(/\\[Sender.Email2\\]/g, this.options.tokens.sender.email2);\n\t\tinput = input.replace(/\\[Sender.Signature\\]/g, this.options.tokens.sender.signature);\n\t\tinput = input.replace(/\\[Sender.UserType\\]/g, this.options.tokens.sender.userType);\n\n\t\tinput = input.replace(/\\[SenderPM.Username\\]/g, this.options.tokens.senderPM.username);\n\t\tinput = input.replace(/\\[SenderPM.Company\\]/g, this.options.tokens.senderPM.company);\n\t\tinput = input.replace(/\\[SenderPM.Contact\\]/g, this.options.tokens.senderPM.contact);\n\t\tinput = input.replace(/\\[SenderPM.Address1\\]/g, this.options.tokens.senderPM.address1);\n\t\tinput = input.replace(/\\[SenderPM.Address2\\]/g, this.options.tokens.senderPM.address2);\n\t\tinput = input.replace(/\\[SenderPM.City\\]/g, this.options.tokens.senderPM.city);\n\t\tinput = input.replace(/\\[SenderPM.State\\]/g, this.options.tokens.senderPM.state);\n\t\tinput = input.replace(/\\[SenderPM.Zip\\]/g, this.options.tokens.senderPM.zip);\n\t\tinput = input.replace(/\\[SenderPM.Country\\]/g, this.options.tokens.senderPM.country);\n\t\tinput = input.replace(/\\[SenderPM.Phone\\]/g, this.options.tokens.senderPM.phone);\n\t\tinput = input.replace(/\\[SenderPM.PhoneExtension\\]/g, this.options.tokens.senderPM.phoneExtension);\n\t\tinput = input.replace(/\\[SenderPM.Fax\\]/g, this.options.tokens.senderPM.fax);\n\t\tinput = input.replace(/\\[SenderPM.Cell\\]/g, this.options.tokens.senderPM.cell);\n\t\tinput = input.replace(/\\[SenderPM.Email\\]/g, this.options.tokens.senderPM.email);\n\t\tinput = input.replace(/\\[SenderPM.EmailLogoURL\\]/g, this.options.tokens.senderPM.emailLogoURL);\n\t\tinput = input.replace(/\\[SenderPM.FullAddress\\]/g, this.options.tokens.senderPM.fullAddress);\n\t\tinput = input.replace(/\\[SenderPM.Email2\\]/g, this.options.tokens.senderPM.email2);\n\t\tinput = input.replace(/\\[SenderPM.UserType\\]/g, this.options.tokens.senderPM.userType);\n\n\n\t\tinput = input.replace(/\\[ProjectContact2.Username\\]/g, this.options.tokens.projectContact2.username);\n\t\tinput = input.replace(/\\[ProjectContact2.Company\\]/g, this.options.tokens.projectContact2.company);\n\t\tinput = input.replace(/\\[ProjectContact2.Contact\\]/g, this.options.tokens.projectContact2.contact);\n\t\tinput = input.replace(/\\[ProjectContact2.Address1\\]/g, this.options.tokens.projectContact2.address1);\n\t\tinput = input.replace(/\\[ProjectContact2.Address2\\]/g, this.options.tokens.projectContact2.address2);\n\t\tinput = input.replace(/\\[ProjectContact2.City\\]/g, this.options.tokens.projectContact2.city);\n\t\tinput = input.replace(/\\[ProjectContact2.State\\]/g, this.options.tokens.projectContact2.state);\n\t\tinput = input.replace(/\\[ProjectContact2.Zip\\]/g, this.options.tokens.projectContact2.zip);\n\t\tinput = input.replace(/\\[ProjectContact2.Country\\]/g, this.options.tokens.projectContact2.country);\n\t\tinput = input.replace(/\\[ProjectContact2.Phone\\]/g, this.options.tokens.projectContact2.phone);\n\t\tinput = input.replace(/\\[ProjectContact2.PhoneExtension\\]/g, this.options.tokens.projectContact2.phoneExtension);\n\t\tinput = input.replace(/\\[ProjectContact2.Fax\\]/g, this.options.tokens.projectContact2.fax);\n\t\tinput = input.replace(/\\[ProjectContact2.Cell\\]/g, this.options.tokens.projectContact2.cell);\n\t\tinput = input.replace(/\\[ProjectContact2.Email\\]/g, this.options.tokens.projectContact2.email);\n\t\tinput = input.replace(/\\[ProjectContact2.EmailLogoURL\\]/g, this.options.tokens.projectContact2.emailLogoURL);\n\t\tinput = input.replace(/\\[ProjectContact2.FullAddress\\]/g, this.options.tokens.projectContact2.fullAddress);\n\t\tinput = input.replace(/\\[ProjectContact2.Email2\\]/g, this.options.tokens.projectContact2.email2);\n\t\tinput = input.replace(/\\[ProjectContact2.Signature\\]/g, this.options.tokens.projectContact2.signature);\n\t\tinput = input.replace(/\\[ProjectContact2.UserType\\]/g, this.options.tokens.projectContact2.userType);\n\n\t\tinput = input.replace(/\\[Recipient.Company\\]/g, this.options.tokens.recipient.company);\n\t\tinput = input.replace(/\\[Recipient.Contact\\]/g, this.options.tokens.recipient.contact);\n\t\tinput = input.replace(/\\[Recipient.FirstName\\]/g, this.options.tokens.recipient.firstName);\n\t\tinput = input.replace(/\\[Recipient.Title\\]/g, this.options.tokens.recipient.title);\n\t\tinput = input.replace(/\\[Recipient.Address1\\]/g, this.options.tokens.recipient.address1);\n\t\tinput = input.replace(/\\[Recipient.Address2\\]/g, this.options.tokens.recipient.address2);\n\t\tinput = input.replace(/\\[Recipient.City\\]/g, this.options.tokens.recipient.city);\n\t\tinput = input.replace(/\\[Recipient.State\\]/g, this.options.tokens.recipient.state);\n\t\tinput = input.replace(/\\[Recipient.Zip\\]/g, this.options.tokens.recipient.zip);\n\t\tinput = input.replace(/\\[Recipient.Country\\]/g, this.options.tokens.recipient.country);\n\t\tinput = input.replace(/\\[Recipient.Phone\\]/g, this.options.tokens.recipient.phone);\n\t\tinput = input.replace(/\\[Recipient.PhoneExtension\\]/g, this.options.tokens.recipient.phoneExtension);\n\t\tinput = input.replace(/\\[Recipient.Fax\\]/g, this.options.tokens.recipient.fax);\n\t\tinput = input.replace(/\\[Recipient.Email\\]/g, this.options.tokens.recipient.email);\n\t\tinput = input.replace(/\\[Recipient.EmailLogoURL\\]/g, this.options.tokens.recipient.emailLogoURL);\n\t\tinput = input.replace(/\\[Recipient.FullAddress\\]/g, this.options.tokens.recipient.fullAddress);\n\n\t\tinput = input.replace(/\\[Portal.URL\\]/g, this.options.tokens.portal.url);\n\t\tinput = input.replace(/\\[Portal.Domain\\]/g, this.options.tokens.portal.domain);\n\t\tinput = input.replace(/\\[DateTime.Today\\]/g, this.options.tokens.dateTime.today);\n\n\t\tinput = input.replace(/\\[ProjectMessage.AccessKey\\]/g, this.options.tokens.projectMessage.accessKey);\n\t\tinput = input.replace(/\\[ProjectMessage.RSVPURL\\]/g, this.options.tokens.projectMessage.rsvpurl);\n\t\tinput = input.replace(/\\[ProjectMessage.RecipientGroupList\\]/g, this.options.tokens.projectMessage.recipientGroupList);\n\t\tinput = input.replace(/\\[ProjectMessage.RecipientGroupListComma\\]/g, this.options.tokens.projectMessage.recipientGroupListComma);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueLabel\\]/g, this.options.tokens.projectMessage.responseDueLabel);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageResponseDueLabel\\]/g, this.options.tokens.projectMessage.messageResponseDueLabel);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueDate\\]/g, this.options.tokens.projectMessage.responseDueDate);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseDueTime\\]/g, this.options.tokens.projectMessage.ResponseDueTime);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageSubject\\]/g, this.options.tokens.projectMessage.messageSubject);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageBody\\]/g, this.options.tokens.projectMessage.messageBody);\n\t\tinput = input.replace(/\\[ProjectMessage.SentOnDate\\]/g, this.options.tokens.projectMessage.sentOnDate);\n\t\tinput = input.replace(/\\[ProjectMessage.EstCompleteDate\\]/g, this.options.tokens.projectMessage.estCompleteDate);\n\t\tinput = input.replace(/\\[ProjectMessage.EstStartDate\\]/g, this.options.tokens.projectMessage.estStartDate);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageType\\]/g, this.options.tokens.projectMessage.messageType);\n\t\tinput = input.replace(/\\[ProjectMessage.ResponseType\\]/g, this.options.tokens.projectMessage.responseType);\n\t\tinput = input.replace(/\\[ProjectMessage.MessageName\\]/g, this.options.tokens.projectMessage.messageName);\n\n\t\tinput = input.replace(/\\[Project.ProjectId\\]/g, this.options.tokens.project.projectId);\n\t\tinput = input.replace(/\\[Project.Name\\]/g, this.options.tokens.project.name);\n\t\tinput = input.replace(/\\[Project.Address1\\]/g, this.options.tokens.project.address1);\n\t\tinput = input.replace(/\\[Project.Address2\\]/g, this.options.tokens.project.address2);\n\t\tinput = input.replace(/\\[Project.City\\]/g, this.options.tokens.project.city);\n\t\tinput = input.replace(/\\[Project.State\\]/g, this.options.tokens.project.state);\n\t\tinput = input.replace(/\\[Project.Zip\\]/g, this.options.tokens.project.zip);\n\t\tinput = input.replace(/\\[Project.Country\\]/g, this.options.tokens.project.country);\n\t\tinput = input.replace(/\\[Project.Notes\\]/g, this.options.tokens.project.notes);\n\t\tinput = input.replace(/\\[Project.ResponseDueLabel\\]/g, this.options.tokens.project.responseDueLabel);\n\t\tinput = input.replace(/\\[Project.MessageResponseDueLabel\\]/g, this.options.tokens.project.messageResponseDueLabel);\n\t\tinput = input.replace(/\\[Project.ResponseDueDate\\]/g, this.options.tokens.project.responseDueDate);\n\t\tinput = input.replace(/\\[Project.ResponseDueTime\\]/g, this.options.tokens.project.responseDueTime);\n\t\tinput = input.replace(/\\[Project.ResponseDueShortTime\\]/g, this.options.tokens.project.responseDueShortTime);\n\t\tinput = input.replace(/\\[Project.ResponseDueTimeZone\\]/g, this.options.tokens.project.responseDueTimeZone);\n\t\tinput = input.replace(/\\[Project.ResponseDueDateWithBy\\]/g, this.options.tokens.project.responseDueDateWithBy);\n\t\tinput = input.replace(/\\[Project.StartDate\\]/g, this.options.tokens.project.startDate);\n\t\tinput = input.replace(/\\[Project.EndDate\\]/g, this.options.tokens.project.endDate);\n\t\tinput = input.replace(/\\[Project.ProjectStatus\\]/g, this.options.tokens.project.projectStatus);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel1\\]/g, this.options.tokens.project.customFieldLabel1);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue1\\]/g, this.options.tokens.project.customFieldValue1);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel2\\]/g, this.options.tokens.project.customFieldLabel2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue2\\]/g, this.options.tokens.project.customFieldValue2);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel3\\]/g, this.options.tokens.project.customFieldLabel3);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue3\\]/g, this.options.tokens.project.customFieldValue3);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel4\\]/g, this.options.tokens.project.customFieldLabel4);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue4\\]/g, this.options.tokens.project.customFieldValue4);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel5\\]/g, this.options.tokens.project.customFieldLabel5);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue5\\]/g, this.options.tokens.project.customFieldValue5);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel6\\]/g, this.options.tokens.project.customFieldLabel6);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue6\\]/g, this.options.tokens.project.customFieldValue6);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel7\\]/g, this.options.tokens.project.customFieldLabel7);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue7\\]/g, this.options.tokens.project.customFieldValue7);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel8\\]/g, this.options.tokens.project.customFieldLabel8);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue8\\]/g, this.options.tokens.project.customFieldValue8);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel9\\]/g, this.options.tokens.project.customFieldLabel9);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue9\\]/g, this.options.tokens.project.customFieldValue9);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel10\\]/g, this.options.tokens.project.customFieldLabel10);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue10\\]/g, this.options.tokens.project.customFieldValue10);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel11\\]/g, this.options.tokens.project.customFieldLabel11);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue11\\]/g, this.options.tokens.project.customFieldValue11);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel12\\]/g, this.options.tokens.project.customFieldLabel12);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue12\\]/g, this.options.tokens.project.customFieldValue12);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel13\\]/g, this.options.tokens.project.customFieldLabel13);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue13\\]/g, this.options.tokens.project.customFieldValue13);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel14\\]/g, this.options.tokens.project.customFieldLabel14);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue14\\]/g, this.options.tokens.project.customFieldValue14);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel15\\]/g, this.options.tokens.project.customFieldLabel15);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue15\\]/g, this.options.tokens.project.customFieldValue15);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel16\\]/g, this.options.tokens.project.customFieldLabel16);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue16\\]/g, this.options.tokens.project.customFieldValue16);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel17\\]/g, this.options.tokens.project.customFieldLabel17);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue17\\]/g, this.options.tokens.project.customFieldValue17);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel18\\]/g, this.options.tokens.project.customFieldLabel18);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue18\\]/g, this.options.tokens.project.customFieldValue18);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel19\\]/g, this.options.tokens.project.customFieldLabel19);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue19\\]/g, this.options.tokens.project.customFieldValue19);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel20\\]/g, this.options.tokens.project.customFieldLabel20);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue20\\]/g, this.options.tokens.project.customFieldValue20);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel21\\]/g, this.options.tokens.project.customFieldLabel21);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue21\\]/g, this.options.tokens.project.customFieldValue21);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel22\\]/g, this.options.tokens.project.customFieldLabel22);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue22\\]/g, this.options.tokens.project.customFieldValue22);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel23\\]/g, this.options.tokens.project.customFieldLabel23);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue23\\]/g, this.options.tokens.project.customFieldValue23);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel24\\]/g, this.options.tokens.project.customFieldLabel24);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue24\\]/g, this.options.tokens.project.customFieldValue24);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel25\\]/g, this.options.tokens.project.customFieldLabel25);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue25\\]/g, this.options.tokens.project.customFieldValue25);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel26\\]/g, this.options.tokens.project.customFieldLabel26);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26\\]/g, this.options.tokens.project.customFieldValue26);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel27\\]/g, this.options.tokens.project.customFieldLabel27);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27\\]/g, this.options.tokens.project.customFieldValue27);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel28\\]/g, this.options.tokens.project.customFieldLabel28);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue28\\]/g, this.options.tokens.project.customFieldValue28);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel29\\]/g, this.options.tokens.project.customFieldLabel29);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue29\\]/g, this.options.tokens.project.customFieldValue29);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel30\\]/g, this.options.tokens.project.customFieldLabel30);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue30\\]/g, this.options.tokens.project.customFieldValue30);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel31\\]/g, this.options.tokens.project.customFieldLabel31);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue31\\]/g, this.options.tokens.project.customFieldValue31);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel32\\]/g, this.options.tokens.project.customFieldLabel32);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue32\\]/g, this.options.tokens.project.customFieldValue32);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel33\\]/g, this.options.tokens.project.customFieldLabel33);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue33\\]/g, this.options.tokens.project.customFieldValue33);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel34\\]/g, this.options.tokens.project.customFieldLabel34);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue34\\]/g, this.options.tokens.project.customFieldValue34);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel35\\]/g, this.options.tokens.project.customFieldLabel35);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue35\\]/g, this.options.tokens.project.customFieldValue35);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel36\\]/g, this.options.tokens.project.customFieldLabel36);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue36\\]/g, this.options.tokens.project.customFieldValue36);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel37\\]/g, this.options.tokens.project.customFieldLabel37);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue37\\]/g, this.options.tokens.project.customFieldValue37);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel38\\]/g, this.options.tokens.project.customFieldLabel38);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue38\\]/g, this.options.tokens.project.customFieldValue38);\n\t\tinput = input.replace(/\\[Project.CustomFieldLabel39\\]/g, this.options.tokens.project.customFieldLabel39);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue39\\]/g, this.options.tokens.project.customFieldValue39);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_CompanyName\\]/g, this.options.tokens.project.customFieldValue26_CompanyName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_ContactName\\]/g, this.options.tokens.project.customFieldValue26_ContactName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_ContactTitle\\]/g, this.options.tokens.project.customFieldValue26_ContactTitle);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Address26\\]/g, this.options.tokens.project.customFieldValue26_Address26);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Address2\\]/g, this.options.tokens.project.customFieldValue26_Address2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_City\\]/g, this.options.tokens.project.customFieldValue26_City);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_StateProvince\\]/g, this.options.tokens.project.customFieldValue26_StateProvince);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_PostalCode\\]/g, this.options.tokens.project.customFieldValue26_PostalCode);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Country\\]/g, this.options.tokens.project.customFieldValue26_Country);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Phone\\]/g, this.options.tokens.project.customFieldValue26_Phone);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Fax\\]/g, this.options.tokens.project.customFieldValue26_Fax);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Cell\\]/g, this.options.tokens.project.customFieldValue26_Cell);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_Email\\]/g, this.options.tokens.project.customFieldValue26_Email);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_CompanyName\\]/g, this.options.tokens.project.customFieldValue27_CompanyName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_ContactName\\]/g, this.options.tokens.project.customFieldValue27_ContactName);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_ContactTitle\\]/g, this.options.tokens.project.customFieldValue27_ContactTitle);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Address27\\]/g, this.options.tokens.project.customFieldValue27_Address27);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Address2\\]/g, this.options.tokens.project.customFieldValue27_Address2);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_City\\]/g, this.options.tokens.project.customFieldValue27_City);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_StateProvince\\]/g, this.options.tokens.project.customFieldValue27_StateProvince);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_PostalCode\\]/g, this.options.tokens.project.customFieldValue27_PostalCode);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Country\\]/g, this.options.tokens.project.customFieldValue27_Country);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Phone\\]/g, this.options.tokens.project.customFieldValue27_Phone);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Fax\\]/g, this.options.tokens.project.customFieldValue27_Fax);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Cell\\]/g, this.options.tokens.project.customFieldValue27_Cell);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_Email\\]/g, this.options.tokens.project.customFieldValue27_Email);\n\n\t\tinput = input.replace(/\\[Project.CustomFieldValue1_CLBR\\]/g, this.options.tokens.project.customFieldValue1_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue2_CLBR\\]/g, this.options.tokens.project.customFieldValue2_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue3_CLBR\\]/g, this.options.tokens.project.customFieldValue3_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue4_CLBR\\]/g, this.options.tokens.project.customFieldValue4_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue5_CLBR\\]/g, this.options.tokens.project.customFieldValue5_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue6_CLBR\\]/g, this.options.tokens.project.customFieldValue6_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue7_CLBR\\]/g, this.options.tokens.project.customFieldValue7_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue8_CLBR\\]/g, this.options.tokens.project.customFieldValue8_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue9_CLBR\\]/g, this.options.tokens.project.customFieldValue9_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue10_CLBR\\]/g, this.options.tokens.project.customFieldValue10_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue11_CLBR\\]/g, this.options.tokens.project.customFieldValue11_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue12_CLBR\\]/g, this.options.tokens.project.customFieldValue12_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue13_CLBR\\]/g, this.options.tokens.project.customFieldValue13_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue14_CLBR\\]/g, this.options.tokens.project.customFieldValue14_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue15_CLBR\\]/g, this.options.tokens.project.customFieldValue15_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue16_CLBR\\]/g, this.options.tokens.project.customFieldValue16_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue17_CLBR\\]/g, this.options.tokens.project.customFieldValue17_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue18_CLBR\\]/g, this.options.tokens.project.customFieldValue18_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue19_CLBR\\]/g, this.options.tokens.project.customFieldValue19_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue20_CLBR\\]/g, this.options.tokens.project.customFieldValue20_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue21_CLBR\\]/g, this.options.tokens.project.customFieldValue21_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue22_CLBR\\]/g, this.options.tokens.project.customFieldValue22_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue23_CLBR\\]/g, this.options.tokens.project.customFieldValue23_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue24_CLBR\\]/g, this.options.tokens.project.customFieldValue24_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue25_CLBR\\]/g, this.options.tokens.project.customFieldValue25_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue26_CLBR\\]/g, this.options.tokens.project.customFieldValue26_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue27_CLBR\\]/g, this.options.tokens.project.customFieldValue27_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue28_CLBR\\]/g, this.options.tokens.project.customFieldValue28_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue29_CLBR\\]/g, this.options.tokens.project.customFieldValue29_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue30_CLBR\\]/g, this.options.tokens.project.customFieldValue30_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue31_CLBR\\]/g, this.options.tokens.project.customFieldValue31_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue32_CLBR\\]/g, this.options.tokens.project.customFieldValue32_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue33_CLBR\\]/g, this.options.tokens.project.customFieldValue33_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue34_CLBR\\]/g, this.options.tokens.project.customFieldValue34_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue35_CLBR\\]/g, this.options.tokens.project.customFieldValue35_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue36_CLBR\\]/g, this.options.tokens.project.customFieldValue36_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue37_CLBR\\]/g, this.options.tokens.project.customFieldValue37_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue38_CLBR\\]/g, this.options.tokens.project.customFieldValue38_CLBR);\n\t\tinput = input.replace(/\\[Project.CustomFieldValue39_CLBR\\]/g, this.options.tokens.project.customFieldValue39_CLBR);\n\n\t\tinput = input.replace(/\\[BidForms.GroupDueDates\\]/g, this.options.tokens.bidForms.groupDueDates);\n\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_CompanyName\\]/g, this.options.tokens.projectContacts.userType395_CompanyName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_ContactName\\]/g, this.options.tokens.projectContacts.userType395_ContactName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_ContactTitle\\]/g, this.options.tokens.projectContacts.userType395_ContactTitle);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Address26\\]/g, this.options.tokens.projectContacts.userType395_Address);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Address2\\]/g, this.options.tokens.projectContacts.userType395_Address2);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_City\\]/g, this.options.tokens.projectContacts.userType395_City);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_StateProvince\\]/g, this.options.tokens.projectContacts.userType395_StateProvince);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_PostalCode\\]/g, this.options.tokens.projectContacts.userType395_PostalCode);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Country\\]/g, this.options.tokens.projectContacts.userType395_Country);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Phone\\]/g, this.options.tokens.projectContacts.userType395_Phone);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Fax\\]/g, this.options.tokens.projectContacts.userType395_Fax);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Cell\\]/g, this.options.tokens.projectContacts.userType395_Cell);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType395_Email\\]/g, this.options.tokens.projectContacts.userType395_Email);\n\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_CompanyName\\]/g, this.options.tokens.projectContacts.userType396_CompanyName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_ContactName\\]/g, this.options.tokens.projectContacts.userType396_ContactName);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_ContactTitle\\]/g, this.options.tokens.projectContacts.userType396_ContactTitle);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Address26\\]/g, this.options.tokens.projectContacts.userType396_Address);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Address2\\]/g, this.options.tokens.projectContacts.userType396_Address2);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_City\\]/g, this.options.tokens.projectContacts.userType396_City);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_StateProvince\\]/g, this.options.tokens.projectContacts.userType396_StateProvince);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_PostalCode\\]/g, this.options.tokens.projectContacts.userType396_PostalCode);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Country\\]/g, this.options.tokens.projectContacts.userType396_Country);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Phone\\]/g, this.options.tokens.projectContacts.userType396_Phone);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Fax\\]/g, this.options.tokens.projectContacts.userType396_Fax);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Cell\\]/g, this.options.tokens.projectContacts.userType396_Cell);\n\t\tinput = input.replace(/\\[ProjectContacts.UserType396_Email\\]/g, this.options.tokens.projectContacts.userType396_Email);\n\n\t\treturn input;\n\t},\n\texport: function () {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.get('projectId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projectmessagepreview'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'export'\n\t\t\t\t}\n\t\t\t]),\n\t\t\tdata: {\n\t\t\t\ttemplateKey: this.options.project.inviteSettings.emailTemplate.get('templateKey'),\n\t\t\t\tresponseType: encodeURIComponent(this.options.tokens.projectMessage.responseType),\n\t\t\t\tbidDueDate: this.options.tokens.projectMessage.bidDueDate,\n\t\t\t\tresponseDueDate: this.options.tokens.projectMessage.responseDueDate,\n\t\t\t\tmessageSubject: encodeURIComponent(this.options.inviteSettings.messageSubject),\n\t\t\t\tmessageBody: encodeURIComponent(this.options.tokens.projectMessage.messageBody)\n\t\t\t}\n\t\t}).post().success(_.bind(function (data) {\n\t\t\tPJQ.files.downloadFile(data.url, {isEndpoint: false});\n\t\t}, this));\n\t}\n});\n","//Models\nPJQ.models.projectMessages = {};\n\nPJQ.models.projectMessages.ProjectMessagesResponse = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessages'\n\t\t\t}\n\t\t])\n\t},\n\tparse: function (model) {\n\t\tthis.messages = new PJQ.collections.projectMessages.ProjectMessages(model.messages);\n\t\tthis.contactGroups = new PJQ.collections.projectMessages.ProjectContactGroups(model.contactGroups);\n\t\treturn model;\n\t},\n\tgetContextMessage: function(){\n\t\tlet contextMessage = null;\n\t\tif (_.size(this.messages.models) > 0) {\n\t\t\tlet sessionMessage = this.messages.findWhere({accessKey: PJQ.app.session.get('accessKey').toUpperCase()});\n\t\t\tif (sessionMessage != null && sessionMessage.canChangeStatus()) {\n\t\t\t\tcontextMessage = sessionMessage;\n\t\t\t}\n\n\t\t\tif(contextMessage == null){\n\t\t\t\t// try to find newest Project Message not responded to yet and open its accordion\n\t\t\t\tlet noResponseMessages = this.messages.getChangeableMessages();\n\t\t\t\tif (_.size(noResponseMessages) > 0) {\n\t\t\t\t\tcontextMessage = _.max(noResponseMessages, function (item) {\n\t\t\t\t\t\treturn PJQ.helpers.dateHelpers.getDateDiff(new Date(), new Date(item.get('createdOn')));\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcontextMessage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn contextMessage;\n\t}\n});\n\nPJQ.models.projectMessages.ProjectMessage = PJQ.models.BaseModel.extend({\n\tidAttribute: 'projectMessageId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessages',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t},\n\tparse: function (model) {\n\t\tif (model.attachments)\n\t\t\tthis.attachments = new PJQ.collections.files.Files(model.attachments);\n\t\telse\n\t\t\tthis.attachments = new PJQ.collections.files.Files();\n\t\treturn model;\n\t},\n\tcanChangeStatus: function(){\n\t\treturn ((this.get('type') === \"PROJECT\" && (this.get('canChange'))) ||\n\t\t\t(this.get('type') === \"MESSAGE\" && (this.get('canChange') || _.size(this.get('status')) === 0 || (this.get('status') === (\"PENDING\" || \"UNSENT\"))))\n\t\t)\n\t}\n});\n\nPJQ.models.projectMessages.ProjectContactGroup = PJQ.models.BaseModel.extend({\n\tidAttribute: 'groupId',\n\tparse: function (model) {\n\t\treturn model;\n\t}\n});\n\n//Collections\nPJQ.collections.projectMessages = {};\n\nPJQ.collections.projectMessages.ProjectMessages = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.projectMessages.ProjectMessage,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessages'\n\t\t\t}\n\t\t])\n\t},\n\tgetChangeableMessages: function(){\n\t\treturn this.models.filter(function(message){\n\t\t\treturn message.get('type') === \"PROJECT\" && (message.get('canChange') || _.size(message.get('status')) === 0 || (message.get('status') === (\"PENDING\" || \"UNSENT\")))\n\t\t});\n\t}\n});\n\nPJQ.collections.projectMessages.ProjectContactGroups = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.projectMessages.ProjectContactGroup,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: PJQ.app.session.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'projectmessages'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'accesskey',\n\t\t\t\tvalue: this.accessKey\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'response'\n\t\t\t}\n\t\t])\n\t}\n});\n","//Models\nPJQ.models.projectParticipants = {};\n\nPJQ.models.projectParticipants.ProjectParticipant = PJQ.models.contacts.Contact.extend({\n\tendpoint: function () {\n\t\tlet endpointArr = [\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.project ? this.project.id : this.get('projectId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants',\n\t\t\t\tvalue: this.get('id')\n\t\t\t}\n\t\t];\n\n\t\tif (this.get('isUpdateBidAmount'))\n\t\t\tendpointArr.push({endpoint: 'bidamount'});\n\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint(endpointArr);\n\t},\n\tparse: function (model) {\n\t\tif (model && model.project) {\n\t\t\tthis.project = model.project;\n\t\t}\n\t\tPJQ.models.contacts.Contact.prototype.parseContactData.call(this, model);\n\t\tPJQ.models.contacts.Contact.prototype.parseAttachmentData.call(this, model);\n\t\treturn model;\n\t},\n\tgetCompanyCustomField: function (customFieldId) {\n\t\treturn _.find(this.get('companyCustomFieldValues'), function (cf) {\n\t\t\treturn (cf.id === customFieldId);\n\t\t});\n\t},\n\tgetContactCustomField: function (customFieldId) {\n\t\treturn _.find(this.get('contactCustomFieldValues'), function (cf) {\n\t\t\treturn (cf.id === customFieldId);\n\t\t});\n\t},\n\tbeforeSave: function () {\n\t\tPJQ.models.contacts.Contact.prototype.beforeSave.call(this);\n\t\tthis.set({\n\t\t\tattachments: this.attachments.getChangedModels()\n\t\t})\n\t}\n});\n\n//Collections\nPJQ.collections.projectParticipants = {};\n\nPJQ.collections.projectParticipants.ProjectParticipants = PJQ.collections.BaseCollection.extend({\n\tidAttribute: 'id',\n\tmodel: PJQ.models.projectContacts.ProjectContact,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'participants'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'includeGroups',\n\t\t\t\tvalue: true\n\t\t\t}\n\t\t])\n\t}\n});\n\n//Views\nPJQ.views.projectParticipants = {};\n\nPJQ.views.projectParticipants.AddParticipantsModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Add-Participants'),\n\t\taddButtonText: \"Add Participants\",\n\t\tisDirectoryEnabled: false,\n\t\tisUnionStatusEnabled: false,\n\t\tisReturnContactIds: false,\n\t\tdefaultDirectoryFilter: [1],\n\t\tdefaultRadius: 50,\n\t\tdefaultZip: '',\n\t\tgroupSelectorOptions: {},\n\t\tonSave: _.noop,\n\t\tonCancel: _.noop\n\t},\n\tevents: {\n\t\t\"click .add-participants-cancel\": \"onCancel\",\n\t\t\"click .add-participants-save\": \"onSave\",\n\t\t'keyup .add-participants-radius': 'radiusChanged',\n\t\t'keyup .add-participants-zip': 'zipChanged',\n\t\t\"keydown .add-participants-radius\": \"numbersOnly\",\n\t\t\"click .send-message-save\": \"sendMessage\"\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.options.isWorkAreasEnabled = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_WORK_AREAS);\n\n\t\tlet projectZip = this.model.get('zip');\n\t\tif (_.size(projectZip) > 0) {\n\t\t\tthis.options.defaultZip = projectZip;\n\t\t}\n\n\t\tthis.model.fetchBidPackages(_.bind(function (bp) {\n\t\t\tthis.bidPackages = bp;\n\t\t\tthis.render();\n\t\t}, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tzipChanged: function () {\n\t\tlet zipInput = this.$('.add-participants-zip');\n\t\tif (PJQ.helpers.validators.validateZip(zipInput.val())) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(zipInput, true);\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tif (this.options.isDirectoryEnabled) {\n\t\t\tlet directoryFilter = this.options.defaultDirectoryFilter ? this.options.defaultDirectoryFilter : [];\n\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.SIMPLE_SEARCH_DEFAULT_ADDRESS_BOOK)) {\n\t\t\t\tlet directoryFilterStr = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.SIMPLE_SEARCH_DEFAULT_ADDRESS_BOOK).toLowerCase();\n\t\t\t\tif (directoryFilterStr.indexOf('private') !== -1) {\n\t\t\t\t\tdirectoryFilter.push(1);\n\t\t\t\t}\n\t\t\t\tif (directoryFilterStr.indexOf('public') !== -1) {\n\t\t\t\t\tdirectoryFilter.push(2);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.directoryFilterSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.add-participants-directory-filter'),\n\t\t\t\tisIntChoices: true,\n\t\t\t\tisMultiple: true,\n\t\t\t\tdefaultValue: directoryFilter,\n\t\t\t\tonChange: _.bind(function () {\n\t\t\t\t\tthis.renderGroups();\n\t\t\t\t\tthis.directoryFilterSelectPicker.hideError();\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tthis.unionFilterSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.add-participants-union-filter'),\n\t\t\tisIntChoices: true,\n\t\t\tisMultiple: true,\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.unionFilterSelectPicker.hideError();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.renderGroups();\n\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_PACKAGES)) {\n\t\t\tthis.renderBidPackages();\n\t\t}\n\n\t\tif (this.options.isWorkAreasEnabled) {\n\t\t\tif (this.locationFilter == null && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS)) {\n\t\t\t\tthis.locationFilter = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ADDRESS_BOOK_DEFAULT_LOCATION_FILTERS)\n\t\t\t}\n\t\t\tthis.locationTypeSelector = new PJQ.inputs.Selectpicker({\n\t\t\t\tel: this.$('.add-participants-location-filter'),\n\t\t\t\tisIntChoices: true,\n\t\t\t\tisMultiple: true,\n\t\t\t\tdefaultValue: this.locationFilter ? this.locationFilter.split(',') : [1, 2],\n\t\t\t\tonChange: _.bind(function (value) {\n\t\t\t\t\tlet $radiusOuter = this.$('.radius-outer'),\n\t\t\t\t\t\t$boundariesOuter = this.$('.boundaries-outer');\n\t\t\t\t\tif (value.indexOf(2) === -1) {\n\t\t\t\t\t\t$radiusOuter.addClass('hidden');\n\t\t\t\t\t\t$boundariesOuter.addClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t$radiusOuter.removeClass('hidden');\n\t\t\t\t\t\t$boundariesOuter.removeClass('hidden');\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\n\t\tlet radius = this.options.defaultRadius;\n\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.SIMPLE_SEARCH_DEFAULT_RADIUS)) {\n\t\t\tradius = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.SIMPLE_SEARCH_DEFAULT_RADIUS);\n\t\t}\n\t\tthis.radiusSlider = new PJQ.Slider(this.$('.add-participants-radius-slider'), {\n\t\t\tticks: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tticks_labels: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tvalue: radius,\n\t\t\tonChange: _.bind(function (obj) {\n\t\t\t\tthis.setRadius(obj.newValue);\n\t\t\t}, this)\n\t\t});\n\t\tthis.setRadius(radius);\n\t},\n\trenderBidPackages: function () {\n\t\tthis.bidPackageSelector = new PJQ.views.bidPackages.BidPackageSelector({\n\t\t\tel: this.$('.bid-package-selector'),\n\t\t\tproject: PJQ.app.session.project,\n\t\t\tisIncludeGroups: true,\n\t\t\tonSelected: _.bind(function (groupIds, bidPackageIds) {\n\t\t\t\tthis.selectedGroupIds = groupIds;\n\t\t\t\tthis.selectedBidPackageIds = bidPackageIds;\n\t\t\t}, this)\n\t\t})\n\t},\n\trenderGroups: function () {\n\t\tlet isPrivate = true,\n\t\t\tisPublic = false,\n\t\t\thasGroupsLinked = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HAS_GROUPS_LINKED),\n\t\t\thasBidPackages = this.bidPackages != null && _.size(this.bidPackages.models) > 0;\n\t\tif (this.options.isDirectoryEnabled) {\n\t\t\tlet selectedDirectoryValues = this.directoryFilterSelectPicker.getValue();\n\t\t\tisPrivate = _.size(selectedDirectoryValues) === 0 || _.indexOf(selectedDirectoryValues, 1) > -1;\n\t\t\tisPublic = _.indexOf(selectedDirectoryValues, 2) > -1;\n\t\t}\n\n\t\tlet $publicA = this.$('a[href=\"#addParticipantsGroupsPublic\"]'),\n\t\t\t$publicLi = $publicA.closest('li'),\n\t\t\t$privateA = this.$('a[href=\"#addParticipantsGroupsPrivate\"]'),\n\t\t\t$privateLi = $privateA.closest('li'),\n\t\t\t$bidPackageA = this.$('a[href=\"#addParticipantsBidPackages\"]'),\n\t\t\t$bidPackageLi = $bidPackageA.closest('li');\n\n\t\tif (this.groupSelectorPrivate != null) {\n\t\t\tthis.groupSelectorPrivate.remove();\n\t\t\tthis.groupSelectorPrivate = null;\n\t\t}\n\t\tif (this.groupSelectorPublic != null) {\n\t\t\tthis.groupSelectorPublic.remove();\n\t\t\tthis.groupSelectorPublic = null;\n\t\t}\n\n\t\tif (hasBidPackages || (isPrivate && isPublic && !hasGroupsLinked)) {\n\t\t\tthis.$('.add-participants-groups-nav-bar').removeClass('hidden');\n\n\t\t\tif (hasBidPackages) {\n\t\t\t\t$bidPackageLi.removeClass('hidden');\n\t\t\t\t$bidPackageA.tab('show');\n\t\t\t}\n\t\t\telse{\n\t\t\t\t$bidPackageLi.addClass('hidden');\n\t\t\t}\n\n\t\t\tif(isPublic && !hasGroupsLinked){\n\t\t\t\t$publicLi.removeClass('hidden');\n\t\t\t\t$publicA.tab('show');\n\t\t\t}\n\t\t\telse{\n\t\t\t\t$publicLi.addClass('hidden');\n\t\t\t}\n\n\t\t\tif(isPrivate || (isPublic && hasGroupsLinked)){\n\t\t\t\t$privateLi.removeClass('hidden');\n\t\t\t\t$privateA.tab('show');\n\t\t\t}\n\t\t\telse{\n\t\t\t\t$privateLi.addClass('hidden');\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$('.add-participants-groups-nav-bar').addClass('hidden');\n\t\t\tif (!hasGroupsLinked) {\n\t\t\t\tif (isPrivate) {\n\t\t\t\t\t$privateA.tab('show');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$publicA.tab('show');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t$privateA.tab('show');\n\t\t\t}\n\t\t}\n\n\t\tlet headerButtons = null;\n\t\tif (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS) && this.model.hasPermission('bidForms.canView')) {\n\t\t\theaderButtons = [\n\t\t\t\t{\n\t\t\t\t\tid: 'filterBFTrades',\n\t\t\t\t\tlabel: 'Select Bid Form Trades',\n\t\t\t\t\tcallback: _.bind(function (selector) {\n\t\t\t\t\t\tlet fnSelect = function (groupIds) {\n\t\t\t\t\t\t\tselector.selectGroups(groupIds);\n\t\t\t\t\t\t\tselector.expandSelectedParents();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (this.options.bidFormGroupIds != null) {\n\t\t\t\t\t\t\tfnSelect(this.options.bidFormGroupIds);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet summary = new PJQ.collections.bidForms.BidFormsSummary(null, {\n\t\t\t\t\t\t\t\tprojectId: this.model.id\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsummary.fetch({\n\t\t\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\t\t\tthis.options.bidFormGroupIds = _.map(summary.models, function (summaryItem) {\n\t\t\t\t\t\t\t\t\t\treturn summaryItem.get('groupId');\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tfnSelect(this.options.bidFormGroupIds);\n\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\n\t\tif (isPrivate || (isPublic && hasGroupsLinked)) {\n\t\t\tthis.groupSelectorPrivate = new PJQ.views.groups.GroupSelector(_.defaults({\n\t\t\t\tel: this.$('.group-selector-private'),\n\t\t\t\theaderButtons: headerButtons,\n\t\t\t\tonGroupSelected: _.bind(function () {\n\t\t\t\t\tthis.groupSelectorPrivate.hideError();\n\t\t\t\t}, this)\n\t\t\t}, this.options.groupSelector));\n\t\t}\n\n\t\tif (isPublic && !hasGroupsLinked) {\n\t\t\tthis.groupSelectorPublic = new PJQ.views.groups.GroupSelector(_.defaults({\n\t\t\t\tel: this.$('.group-selector-public'),\n\t\t\t\tisPublicGroups: true,\n\t\t\t\theaderButtons: headerButtons,\n\t\t\t\tonGroupSelected: _.bind(function () {\n\t\t\t\t\tthis.groupSelectorPublic.hideError();\n\t\t\t\t}, this)\n\t\t\t}, this.options.groupSelector));\n\t\t}\n\t},\n\tnumbersOnly: function (e) {\n\t\treturn PJQ.helpers.inputHelpers.numbersOnly(e);\n\t},\n\tradiusChanged: function () {\n\t\tthis.setRadius(parseInt(this.$('.add-participants-radius').val()));\n\t},\n\tsetRadius: function (radius) {\n\t\tif (isNaN(radius) || radius < 1)\n\t\t\tradius = 1;\n\t\telse if (radius > 300)\n\t\t\tradius = 300;\n\t\tthis.radiusSlider.setValue(radius);\n\t\t//don't set the radius input yet if the length of the value is 0 in case the user is trying to clear the input to enter a new value\n\t\tif (this.$('.add-participants-radius').val().length > 0)\n\t\t\tthis.$('.add-participants-radius').val(radius);\n\t},\n\tonCancel: function () {\n\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\tthis.options.onCancel();\n\t\t}\n\t},\n\tsendMessage: function () {\n\t\tthis.onSave(null, true);\n\t},\n\tonSave: function (e, isSendMessage = false) {\n\t\tlet hasGroupsLinked = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HAS_GROUPS_LINKED),\n\t\t\tpublicGroups = this.groupSelectorPublic ? this.groupSelectorPublic.getGroupsData().selected : [],\n\t\t\tprivateGroups = this.groupSelectorPrivate ? this.groupSelectorPrivate.getGroupsData().selected : [],\n\t\t\tradius = this.$('.add-participants-radius').val(),\n\t\t\tzipInput = this.$('.add-participants-zip'),\n\t\t\tzip = PJQ.helpers.formatHelpers.formatZip(zipInput.val()),\n\t\t\tdirectoryFilter = null,\n\t\t\tisPublic = true,\n\t\t\tisPrivate = false,\n\t\t\tcanCrossStateBoundaries = this.$('.cb-can-cross-state-bounds').prop('checked'),\n\t\t\tlocationFilter = 2,\n\t\t\thasBidPackages = this.bidPackages != null && _.size(this.bidPackages.models) > 0;\n\n\t\tthis.selectedGroupIds = _.union(privateGroups, publicGroups, this.selectedGroupIds);\n\t\tif (this.options.isWorkAreasEnabled) {\n\t\t\tlet locationType = this.locationTypeSelector.getValue(),\n\t\t\t\tisWorkAreas = _.indexOf(locationType, 1) > -1,\n\t\t\t\tisOfficeLocation = _.indexOf(locationType, 2) > -1;\n\t\t\tif (isWorkAreas && isOfficeLocation) {\n\t\t\t\tlocationFilter = 0;\n\t\t\t}\n\t\t\telse if (isWorkAreas) {\n\t\t\t\tlocationFilter = 1;\n\t\t\t}\n\t\t\telse if (isOfficeLocation) {\n\t\t\t\tlocationFilter = 2;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.isDirectoryEnabled) {\n\t\t\tlet selectedDirectoryValues = this.directoryFilterSelectPicker.getValue(),\n\t\t\t\tisPrivate = _.indexOf(selectedDirectoryValues, 1) > -1,\n\t\t\t\tisPublic = _.indexOf(selectedDirectoryValues, 2) > -1;\n\n\t\t\tif (isPrivate && isPublic) {\n\t\t\t\tdirectoryFilter = 0;\n\t\t\t}\n\t\t\telse if (isPrivate) {\n\t\t\t\tdirectoryFilter = 1;\n\t\t\t}\n\t\t\telse if (isPublic) {\n\t\t\t\tdirectoryFilter = 2;\n\t\t\t}\n\t\t}\n\n\t\tlet selectedUnionStatusValues = this.unionFilterSelectPicker.getValue(),\n\t\t\tisUnion = _.indexOf(selectedUnionStatusValues, 1) > -1,\n\t\t\tisNonUnion = _.indexOf(selectedUnionStatusValues, 2) > -1,\n\t\t\tisPrevailingWage = _.indexOf(selectedUnionStatusValues, 3) > -1,\n\t\t\tisNoLaborStatus = _.indexOf(selectedUnionStatusValues, 4) > -1;\n\n\t\tlet isValid = true;\n\t\tif (this.directoryFilterSelectPicker != null) {\n\t\t\tif (directoryFilter == null) {\n\t\t\t\tthis.directoryFilterSelectPicker.showError('You must select an address book');\n\t\t\t\tisValid = false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.directoryFilterSelectPicker.hideError();\n\t\t\t}\n\t\t}\n\n\t\tif (_.size(privateGroups) === 0 && isPrivate && !hasBidPackages) {\n\t\t\tif (!hasGroupsLinked) {\n\t\t\t\tthis.groupSelectorPrivate.showError('You must select at least one private trade');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.groupSelectorPrivate.showError('You must select at least one trade');\n\t\t\t}\n\t\t\tthis.$('a[href=\"#addParticipantsGroupsPrivate\"]').tab('show');\n\t\t\tisValid = false;\n\t\t}\n\t\telse if (this.groupSelectorPublic != null && _.size(publicGroups) === 0 && isPublic && !hasGroupsLinked && !hasBidPackages) {\n\t\t\tthis.groupSelectorPublic.showError('You must select at least one public trade');\n\t\t\tthis.$('a[href=\"#addParticipantsGroupsPublic\"]').tab('show');\n\t\t\tisValid = false;\n\t\t}\n\t\telse if (this.bidPackageSelector != null && _.size(this.selectedGroupIds) === 0 && hasBidPackages) {\n\t\t\tthis.bidPackageSelector.showError('You must select at least one trade or bid package');\n\t\t\tthis.$('a[href=\"#addParticipantsBidPackages\"]').tab('show');\n\t\t\tisValid = false;\n\t\t}\n\t\telse {\n\t\t\tif (this.groupSelectorPrivate != null) {\n\t\t\t\tthis.groupSelectorPrivate.hideError();\n\t\t\t}\n\t\t\tif (this.groupSelectorPublic != null) {\n\t\t\t\tthis.groupSelectorPublic.hideError();\n\t\t\t}\n\t\t\tif (this.bidPackageSelector != null) {\n\t\t\t\tthis.bidPackageSelector.hideError();\n\t\t\t}\n\t\t}\n\n\t\tif (!PJQ.helpers.validators.validateZip(zip)) {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(zipInput, false, {\n\t\t\t\terrorText: 'Invalid zip code'\n\t\t\t});\n\t\t\tisValid = false;\n\t\t}\n\t\telse {\n\t\t\tPJQ.helpers.inputHelpers.setInputError(zipInput, true);\n\t\t}\n\n\t\tif (isValid) {\n\t\t\tlet loader = new PJQ.Loader(this.$('.modal-content'));\n\t\t\tthis.model.addParticipants(this.selectedGroupIds != null ? this.selectedGroupIds : _.union(privateGroups, publicGroups), zip, radius, locationFilter, canCrossStateBoundaries, directoryFilter, isUnion, isNonUnion, isPrevailingWage, isNoLaborStatus, this.options.isReturnContactIds, _.bind(function (data) {\n\t\t\t\tthis.removeModal();\n\t\t\t\tlet participantCount = _.size(data);\n\t\t\t\tif (participantCount > 0) {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Successfully added ' + participantCount.toString() + ' participants'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.notifications.notify.warningNotify({\n\t\t\t\t\t\tmessage: 'No new participants were found'\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\t\tthis.options.onSave(data, isSendMessage);\n\t\t\t\t}\n\t\t\t}, this), function () {\n\t\t\t\tloader.remove();\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Failed to add participants to the project. Please contact customer service.'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n});\n\nPJQ.views.projectParticipants.AddParticipantsFromProjectModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Add-Participants-From-Project'),\n\t\taddButtonText: \"Add Participants\",\n\t\tmaxWidth: '650px',\n\t\tisBidFormsEnabled: false,\n\t\tisReturnContactIds: false,\n\t\tprojectResponses: [],\n\t\tonSave: _.noop,\n\t\tonCancel: _.noop\n\t},\n\tevents: {\n\t\t\"click .add-participants-cancel\": \"onCancel\",\n\t\t\"click .add-participants-save\": \"onSave\",\n\t\t\"click .add-participants-select-projects-continue\": \"completeProjectsStep\",\n\t\t\"click .add-participants-select-trades-continue\": \"completeTradesStep\",\n\t\t\"click .add-participants-jump-step\": \"goToStepEvent\"\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\toptions: this.options\n\t\t}\n\t},\n\tafterRender: function () {\n\t\tnew PJQ.views.projects.ProjectSelector({\n\t\t\tel: this.$('.project-selector'),\n\t\t\texcludeProjectIds: [this.model.id],\n\t\t\tonProjectSelected: _.bind(function (projects) {\n\t\t\t\tthis.selectedProjects = projects;\n\t\t\t\tthis.renderSelectedProjectCount();\n\t\t\t\tthis.$('.add-participants-select-projects-continue').prop('disabled', _.size(this.selectedProjects) === 0);\n\t\t\t}, this),\n\t\t\tdataTableHeaderData: {\n\t\t\t\tisHideDeletedFilter: true\n\t\t\t}\n\t\t});\n\t\tthis.renderSelectedProjectCount();\n\t\tthis.goToStep(1);\n\t},\n\trenderSelectedProjectCount: function () {\n\t\tlet selectedProjectCount = _.size(this.selectedProjects);\n\t\tthis.$('.add-participants-projects-count').html(selectedProjectCount.toString());\n\t\tif (this.step > 1) {\n\t\t\tthis.$('.add-participants-selected-projects').html(selectedProjectCount.toString() + \" selected\");\n\t\t}\n\t\telse {\n\t\t\tthis.$('.add-participants-selected-projects').empty();\n\t\t}\n\t},\n\tcompleteProjectsStep: function () {\n\t\tthis.goToStep(2);\n\t},\n\tcompleteTradesStep: function () {\n\t\tthis.goToStep(3);\n\t},\n\tgoToStepEvent: function (e) {\n\t\tlet step = parseInt($(e.currentTarget).data('step').toString());\n\t\tthis.goToStep(step);\n\t},\n\tgoToStep: function (step) {\n\t\tthis.step = step;\n\t\tlet thisStep = $('.step-' + this.step.toString()),\n\t\t\tthisStepHeader = $('.step-header-' + this.step.toString());\n\t\tthis.$('[class*=step-]').not(thisStep).collapse('hide');\n\t\tthis.$('[class*=step-header-]').not(thisStepHeader).removeClass('text-primary').addClass('text-dark op-4');\n\t\tthisStepHeader.removeClass('text-dark op-4').addClass('text-primary');\n\t\tthisStep.collapse('show');\n\t\tthis.startStep();\n\t},\n\tstartStep: function () {\n\t\tswitch (this.step) {\n\t\t\tcase 1:\n\t\t\t\tthis.$('.add-participants-selected-project-name').empty();\n\t\t\t\tthis.$('.add-participants-selected-trades').empty();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.$('.add-participants-selected-trades').empty();\n\t\t\t\tlet request = new PJQ.ajax.Request({\n\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\t\tvalue: 0\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'groups'\n\t\t\t\t\t\t}\n\t\t\t\t\t], [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparameter: 'projects',\n\t\t\t\t\t\t\tvalue: _.map(this.selectedProjects, function (project) {\n\t\t\t\t\t\t\t\treturn project.id;\n\t\t\t\t\t\t\t}).join(',')\n\t\t\t\t\t\t}\n\t\t\t\t\t])\n\t\t\t\t});\n\t\t\t\trequest.get().done(_.bind(function (data) {\n\t\t\t\t\tthis.createGroupSelector(new PJQ.collections.groups.Groups(data, {\n\t\t\t\t\t\tgroupLevels: PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS)\n\t\t\t\t\t}));\n\t\t\t\t}, this));\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tfor (let i = 0; i < this.options.projectResponses.length; i++) {\n\t\t\t\t\tlet res = this.options.projectResponses[i];\n\t\t\t\t\tif (PJQ.helpers.objectHelpers.refinedType(res) === 'array') {\n\t\t\t\t\t\tres = res[0];\n\t\t\t\t\t}\n\t\t\t\t\tlet resLower = res.toLowerCase();\n\t\t\t\t\tif (resLower !== \"yes\" && resLower !== \"no\" && resLower !== \"true\" && resLower !== \"false\") {\n\t\t\t\t\t\tlet option = \"<option value='\" + res + \"'>\" + res + \"</option>\";\n\t\t\t\t\t\tthis.$('select.add-participants-response-filter').append(option);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.projectResponseFilterSelectPicker = new PJQ.inputs.Selectpicker({\n\t\t\t\t\tel: this.$('.add-participants-response-filter'),\n\t\t\t\t\tisMultiple: true\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.renderSelectedProjectCount();\n\t\tthis.renderSelectedGroupCount();\n\t\tthis.$('.add-participants-save').prop('disabled', this.step !== 3);\n\t},\n\tcreateGroupSelector: function (groups) {\n\t\tif (_.size(groups.models) > 0) {\n\t\t\tthis.$('.select-trades-instruction').show();\n\n\t\t\tlet headerButtons = null;\n\t\t\tif (this.model.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_BID_FORMS) && this.model.hasPermission('bidForms.canView')) {\n\t\t\t\theaderButtons = [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: 'filterBFTrades',\n\t\t\t\t\t\tlabel: 'Select Bid Form Trades',\n\t\t\t\t\t\tcallback: _.bind(function (selector) {\n\t\t\t\t\t\t\tlet fnSelect = function (groupIds) {\n\t\t\t\t\t\t\t\tselector.selectGroups(groupIds);\n\t\t\t\t\t\t\t\tselector.expandSelectedParents();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (this.options.bidFormGroupIds != null) {\n\t\t\t\t\t\t\t\tfnSelect(this.options.bidFormGroupIds);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet summary = new PJQ.collections.bidForms.BidFormsSummary(null, {\n\t\t\t\t\t\t\t\t\tprojectId: this.model.id\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tsummary.fetch({\n\t\t\t\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\t\t\t\tthis.options.bidFormGroupIds = _.map(summary.models, function (summaryItem) {\n\t\t\t\t\t\t\t\t\t\t\treturn summaryItem.get('groupId');\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tfnSelect(this.options.bidFormGroupIds);\n\t\t\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis.groupSelector = new PJQ.views.groups.GroupSelector({\n\t\t\t\tel: this.$('.group-selector'),\n\t\t\t\tisShowNoGroup: true,\n\t\t\t\tgroups: groups.models,\n\t\t\t\theaderButtons: headerButtons,\n\t\t\t\tonGroupSelected: _.bind(function () {\n\t\t\t\t\tthis.selectedGroups = this.groupSelector.getGroupsData().new;\n\t\t\t\t\tthis.renderSelectedGroupCount();\n\t\t\t\t\tthis.$('.add-participants-select-trades-continue').prop('disabled', _.size(this.selectedGroups) === 0);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t\tthis.renderSelectedGroupCount();\n\t\t}\n\t\telse {\n\t\t\tthis.$('.select-trades-instruction').hide();\n\t\t\tnew PJQ.Alert(this.$('.group-selector'), {\n\t\t\t\ttype: 'warning',\n\t\t\t\ttext: _.size(this.selectedProjects) > 0 ? 'These projects do not contain any trades' : 'This project does not contain any trades'\n\t\t\t});\n\t\t}\n\t},\n\trenderSelectedGroupCount: function () {\n\t\tlet selectedGroupCount = _.size(this.selectedGroups);\n\t\tthis.$('.add-participants-trades-count').html(selectedGroupCount);\n\t\tif (this.step > 2) {\n\t\t\tthis.$('.add-participants-selected-trades').html(selectedGroupCount.toString() + \" selected\");\n\t\t}\n\t\telse {\n\t\t\tthis.$('.add-participants-selected-trades').empty();\n\t\t}\n\t},\n\tonCancel: function () {\n\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\tthis.options.onCancel();\n\t\t}\n\t},\n\tonSave: function () {\n\t\tlet isCopyBidForms = this.options.isBidFormsEnabled ? this.$('.add-participants-copy-bid-forms').prop('checked') : false,\n\t\t\tresponseFilter = _.size(this.options.projectResponses) > 0 ? this.projectResponseFilterSelectPicker.getValue() : [],\n\t\t\trequest = new PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\t\tvalue: this.model.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'participants'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'copy'\n\t\t\t\t\t}\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'projects',\n\t\t\t\t\t\tvalue: _.map(this.selectedProjects, function (project) {\n\t\t\t\t\t\t\treturn project.id;\n\t\t\t\t\t\t}).join(',')\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\tdata: {\n\t\t\t\t\tgroupIds: _.map(this.selectedGroups, function (group) {\n\t\t\t\t\t\treturn group.id;\n\t\t\t\t\t}),\n\t\t\t\t\tisCopyBidForms: isCopyBidForms,\n\t\t\t\t\tprojectResponses: responseFilter\n\t\t\t\t}\n\t\t\t}),\n\t\t\tloader = new PJQ.Loader(this.$('.modal-content'));\n\t\trequest.post().done(_.bind(function (response) {\n\t\t\tthis.removeModal();\n\t\t\tlet message = \"\";\n\t\t\tif (response.participantsCopied.length > 0 || response.bidFormsCopied > 0) {\n\t\t\t\tif (isCopyBidForms && response.bidFormsCopied > 0) {\n\t\t\t\t\tmessage = response.participantsCopied.length.toString() + (response.participantsCopied.length === 1 ? ' participant' : ' participants') + ' and ' + response.bidFormsCopied.toString() + ' bid ' + (response.bidFormsCopied === 1 ? 'form' : 'forms') + ' copied successfully.';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmessage = response.participantsCopied.length.toString() + (response.participantsCopied.length === 1 ? ' participant' : ' participants') + ' copied successfully.';\n\t\t\t\t}\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: message\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (isCopyBidForms) {\n\t\t\t\t\tmessage = \"No new participants or bid forms could be found on the selected project\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tmessage = \"No new participants could be found on the selected project\";\n\t\t\t\t}\n\t\t\t\tPJQ.notifications.notify.warningNotify({\n\t\t\t\t\tmessage: message\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof this.options.onSave === 'function') {\n\t\t\t\tthis.options.onSave(this.options.isReturnContactIds ? response.contactsCopied : response.participantsCopied);\n\t\t\t}\n\t\t}, this)).fail(function () {\n\t\t\tloader.remove();\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Failed to add bidders to the project'\n\t\t\t});\n\t\t});\n\t}\n});\n","PJQ.models.projects = {};\nPJQ.collections.projects = {};\nPJQ.views.projects = {};\n\n//Models\nPJQ.models.projects.Project = PJQ.models.BaseModel.extend({\n options: {\n isDetail: false\n },\n idAttribute: \"projectId\",\n notifyName: 'Project',\n endpoint: function (isBase) {\n if (this.options.isDetail && !isBase) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n }\n ], [\n {\n parameter: 'isDetail',\n value: this.options.isDetail\n }\n ]);\n } else {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n }\n ]);\n }\n },\n beforeInit: function (options) {\n if (this.preferences == null) {\n this.preferences = new PJQ.models.preferences.Preferences();\n }\n },\n fetchPermissions: function (callback) {\n if (this.permissions != null) {\n callback(this.permissions);\n return;\n }\n\n this.permissions = new PJQ.models.permissions.ProjectPermissions({\n projectId: PJQ.app.session.project ? PJQ.app.session.project.id : this.id\n });\n this.permissions.fetch({\n success: _.bind(function () {\n callback(this.permissions);\n }, this)\n });\n },\n fetch: function (options) {\n PJQ.models.BaseModel.prototype.fetch.call(this, _.defaults({\n success: (model, response) => {\n this.fetchPermissions((perm) => {\n if (perm && perm.get('contactId') > 0\n && (PJQ.app.session.contact == null || PJQ.app.session.contact.id !== perm.get('contactId'))) {\n PJQ.app.session.contact = new PJQ.models.contacts.Contact({\n id: perm.get('contactId'),\n contactId: perm.get('contactId')\n });\n }\n\n if (options && typeof options.success === 'function') {\n options.success(model, response);\n }\n });\n },\n error: options && typeof options.error === 'function' ? options.error : null\n }, options));\n },\n parse: function (model) {\n if (model) {\n if (model.preferences) {\n if (this.preferences && model.preferences) {\n this.preferences.set(model.preferences);\n this.preferences.parse(model.preferences);\n } else if (model.preferences) {\n if (model.preferences instanceof PJQ.models.preferences.Preferences)\n this.preferences = model.preferences;\n else\n this.preferences = new PJQ.models.preferences.Preferences(model.preferences);\n }\n }\n\n this.subscription = new PJQ.models.subscriptions.Subscription(model.subscription);\n\n if (model.nda) {\n this.nda = new PJQ.models.projects.ProjectNDA(_.extend({project: this}, model.nda));\n } else {\n this.nda = null;\n }\n\n if (model.user) {\n this.user = new PJQ.models.projectContacts.ProjectContact(model.user);\n } else {\n this.user = null;\n }\n\n if (model.user2) {\n this.user2 = new PJQ.models.projectContacts.ProjectContact(model.user2);\n } else {\n this.user2 = null;\n }\n\n if (model.orderSettings) {\n this.orderSettings = new PJQ.models.BaseModel(model.orderSettings)\n } else {\n this.orderSettings = null;\n }\n\n if (model.participants) {\n if (model.participants instanceof PJQ.collections.projectParticipants.ProjectParticipants) {\n this.participants = model.participants;\n this.participants.options.project = this;\n } else {\n this.participants = new PJQ.collections.projectParticipants.ProjectParticipants(model.participants, {\n project: this\n });\n }\n } else {\n this.participants = new PJQ.collections.projectParticipants.ProjectParticipants(null, {\n project: this\n });\n }\n\n if (model.projectContacts) {\n if (model.projectContacts instanceof PJQ.collections.projectContacts.ProjectContacts) {\n this.projectContacts = model.projectContacts;\n this.projectContacts.options.project = this;\n } else {\n //Temporary, the API is currently returning a list of ids for the apps\n if (_.size(model.projectContacts) > 0 && typeof model.projectContacts[0] === 'number') {\n model.projectContacts = [];\n }\n this.projectContacts = new PJQ.collections.projectContacts.ProjectContacts(model.projectContacts, {\n project: this\n });\n }\n } else {\n this.projectContacts = new PJQ.collections.projectContacts.ProjectContacts(null, {\n project: this\n });\n }\n }\n return model;\n },\n hasPermission: function (permission, options = {}) {\n return this.permissions == null || this.permissions.hasPermission(permission, options);\n },\n checkDownloadRequirements: function (callback) {\n callback = typeof callback === 'function' ? callback : _.noop;\n if (this.get('masterUserId') !== PJQ.app.session.get('masterUserId')) {\n if (PJQ.app.session.contact != null && this.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_CONTACT_UPDATE_REQ) === true && PJQ.app.session.contact.get('updatedOn') == null) {\n new PJQ.views.contacts.BaseEditContactModal({\n alert: \"You must update your contact information before downloading.\",\n onSave: _.bind(function () {\n PJQ.app.session.contact.set('updatedOn', new Date());\n this.checkDownloadRequirements(callback);\n }, this),\n model: new PJQ.models.projectContacts.ProjectContact({\n id: PJQ.app.session.contact.id,\n projectId: this.id\n })\n });\n return;\n }\n\n if (PJQ.app.session.contact != null && (this.messages != null && _.size(this.messages.models) > 0) && this.preferences.hasPref(PJQ.constants.preferenceTypes.DOWNLOAD_RESPONSE_REQ) && (_.size(this.get('bidResponse')) === 0 || (this.get('bidResponse') === (\"PENDING\" || \"UNSENT\")))) {\n this.fetchProjectMessageResponses(_.bind(function (messages) {\n let contextMessage = messages.getContextMessage();\n if (contextMessage != null) {\n new PJQ.views.projects.ProjectMessageResponseModal({\n model: contextMessage,\n alert: 'You must update your bid response before downloading.',\n project: this,\n onResponse: _.bind(function (response) {\n this.set('bidResponse', response);\n this.checkDownloadRequirements(callback);\n }, this)\n });\n } else {\n this.checkDownloadRequirements(callback);\n }\n }, this));\n return;\n }\n\n if (_.size(this.get('downloadTerms')) > 0 && !this.get('downloadTermsAgreed')) {\n new PJQ.views.projects.DownloadTermsModal({\n project: this,\n onAccept: _.bind(function () {\n this.checkDownloadRequirements(callback);\n }, this)\n });\n } else {\n callback();\n }\n } else {\n callback();\n }\n },\n clone: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'clone'\n }\n ])\n }).post().done(_.bind(function (response) {\n callback(new PJQ.models.projects.Project(response));\n }, this));\n },\n copy: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'copy'\n }\n ])\n }).post().done(_.bind(function (response) {\n callback(new PJQ.models.projects.Project(response));\n }, this));\n },\n addParticipantsById: function (ids, callback) {\n new PJQ.ajax.Request({\n endpoint: '/projects/' + PJQ.app.session.project.id.toString() + '/participants/ids',\n data: {\n ids: _.map(ids, function (contact) {\n return contact.id;\n })\n }\n }).post().success(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: _.size(ids) + ' participants added successfully'\n });\n if (typeof callback === 'function') {\n callback(data);\n }\n }, this)).fail(_.bind(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n }, this));\n },\n addParticipants: function (groups, zip, radius, locationType, canCrossStateBoundaries, directoryFilter, isUnion, isNonUnion, isPrevailingWage, isNoLaborStatus, isReturnContactIds, success, error) {\n let groupIds = [];\n if (_.size(groups) > 0) {\n if (groups[0].id) {\n groupIds = _.map(groups, function (group) {\n return group.id;\n });\n } else {\n groupIds = _.uniq(groups);\n }\n }\n\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants'\n },\n {\n endpoint: 'simple'\n }\n ]);\n let request = new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n projectId: this.id,\n groupIds: groupIds,\n zip: zip,\n radius: radius,\n locationType: locationType,\n canCrossStateBoundaries: canCrossStateBoundaries,\n directoryFilter: directoryFilter,\n isUnion: isUnion,\n isNonUnion: isNonUnion,\n isPrevailingWage: isPrevailingWage,\n isNoLaborStatus: isNoLaborStatus,\n isReturnContactIds: isReturnContactIds\n }\n });\n request.post().done(_.bind(function (data) {\n success(data);\n }, this)).fail(function () {\n error();\n });\n },\n getCompanyLogoUrl: function (callback) {\n if (this.get('logoUrl') != null) {\n callback(this.get('logoUrl'));\n }\n\n if (this.get('masterUserId') > 0) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'users',\n value: this.get('masterUserId')\n },\n {\n endpoint: 'logo'\n }\n ])\n }).get().done(_.bind(function (response) {\n this.set('logoUrl', response.url);\n callback(response.url);\n }, this));\n } else {\n callback(null);\n }\n },\n updateResponse: function (response, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'respond',\n value: response\n }\n ])\n }).put().done(_.bind(function () {\n callback();\n }, this));\n },\n fetchGroups: function (callback, forCompany = false) {\n return new Promise((resolve, reject) => {\n if (forCompany) {\n if (this.companyGroups != null) {\n if (typeof callback === 'function') {\n callback(this.companyGroups);\n }\n resolve(this.companyGroups);\n return;\n }\n\n PJQ.app.session.fetchUserGroups(this.get('masterUserId'), (groups) => {\n if (groups == null) {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(null);\n return;\n }\n\n this.companyGroups = groups;\n if (typeof callback === 'function') {\n callback(groups);\n }\n resolve(groups);\n });\n return;\n }\n\n if (this.groups == null) {\n this.groups = new PJQ.collections.groups.Groups(null, {\n project: this\n });\n }\n\n if (!this.groups.isFetched) {\n this.groups.fetch({\n success: _.bind(function () {\n callback(this.groups);\n }, this)\n });\n } else {\n callback(this.groups);\n }\n });\n },\n fetchBidPackages: function (callback) {\n if (this.bidPackages == null) {\n this.bidPackages = new PJQ.collections.bidPackages.BidPackages(null, {\n projectId: this.id\n })\n }\n\n if (!this.bidPackages.isFetched) {\n this.bidPackages.fetch({\n success: _.bind(function () {\n callback(this.bidPackages);\n }, this)\n });\n } else {\n callback(this.bidPackages);\n }\n },\n fetchERPObject: function (callback) {\n return new Promise((resolve, reject) => {\n let exObj = this.get('externalObject');\n if (exObj != null || this.erpObjectFetched) {\n if (typeof callback === 'function') {\n callback(exObj);\n }\n resolve(exObj);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'erpobject'\n }\n ]),\n isAPIv2: true\n }).get().done((data) => {\n if (data != null) {\n this.set({\n externalObject: data\n }, {\n silent: true\n });\n }\n this.erpObjectFetched = true;\n if (typeof callback === 'function') {\n callback(data);\n }\n resolve(data);\n }).fail(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(null);\n });\n });\n },\n linkERP: function (externalId, callback) {\n if (_.size(externalId) === 0) {\n callback(null);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: this.endpoint(true) + '/linkerp?externalId=' + externalId,\n isAPIv2: true,\n }).post().done(_.bind(function (res) {\n if (typeof callback === 'function') {\n if (res && _.size(res.externalId) > 0) {\n this.set('externalObject', res);\n }\n callback(res);\n }\n }, this)).fail(_.bind(function (xhr, err, result) {\n if (typeof callback === 'function') {\n callback(null);\n }\n }, this));\n },\n fetchVersions: function (callback) {\n if (this.versions == null) {\n this.versions = new PJQ.collections.drawings.Versions(null, {\n project: this\n });\n }\n if (!this.versions.isFetched) {\n this.versions.fetch({\n success: _.bind(function () {\n callback(this.versions);\n }, this)\n });\n } else {\n callback(this.versions);\n }\n },\n fetchAttachments: function (options, callback) {\n let att;\n if (options && options.isPrivate === false) {\n if (this.sharedAttachments == null) {\n this.sharedAttachments = new PJQ.collections.projects.ProjectAttachments(null, {\n project: this,\n isPrivate: false,\n isShared: true\n });\n }\n att = this.sharedAttachments;\n } else if (options && options.isShared === false) {\n if (this.privateAttachments == null) {\n this.privateAttachments = new PJQ.collections.projects.ProjectAttachments(null, {\n project: this,\n isShared: false,\n isPrivate: true\n });\n }\n att = this.privateAttachments;\n } else {\n if (this.attachments == null) {\n this.attachments = new PJQ.collections.projects.ProjectAttachments(null, {\n project: this\n });\n }\n att = this.attachments;\n }\n\n let fnResult = _.bind(function () {\n let resultAtt = [];\n _.each(att.models, function (attachment) {\n resultAtt.push(attachment.clone());\n });\n let result = new PJQ.collections.projects.ProjectAttachments(resultAtt, {\n project: this,\n isShared: att.options.isShared,\n isPrivate: att.options.isPrivate,\n isDeferred: att.options.isDeferred\n });\n result.isFetched = true;\n if ((!options || options.includeDrawings !== false) && !this.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_DRAWINGS)) {\n if (PJQ.app.session.project.permissions == null || PJQ.app.session.project.permissions.hasPermission('drawings.canView')) {\n this.fetchVersions(_.bind(function (versions) {\n callback(versions.createPsuedoFolders(result));\n }, this));\n } else {\n callback(result);\n }\n } else {\n callback(result);\n }\n }, this);\n\n if (options && options.forceRecursive) {\n att.options.isDeferred = false;\n att.fetch({\n success: function () {\n fnResult();\n }\n });\n } else {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'attachmentscount'\n }\n ])\n }).get().done(_.bind(function (data) {\n att.options.isDeferred = data.total > 1500;\n att.fetch({\n success: function () {\n fnResult();\n }\n });\n }, this)).fail(function () {\n //error();\n });\n }\n },\n downloadAttachments: function (attachments, options) {\n let ids = [],\n entryIds = [],\n hasPrivate = false,\n hasNonPrivate = false,\n objType = PJQ.helpers.objectHelpers.refinedType(attachments, true),\n fnCheck = function (att) {\n if (att.get('entryId') === -1) {\n hasNonPrivate = true;\n\n ids.push(..._.map(att.getFolderAttachments(), function (folderAtt) {\n return folderAtt.id;\n }));\n\n _.each(att.getFolderAttachments(), function (folderAtt) {\n if (!folderAtt.get('isFolder')) {\n entryIds.push(folderAtt.get('isDrawing') ? folderAtt.get('drawingId') * -1 : folderAtt.get('entryId'));\n }\n });\n } else {\n ids.push(att.id);\n\n if (!att.get('isFolder')) {\n entryIds.push(att.get('isDrawing') ? att.get('drawingId') * -1 : att.get('entryId'));\n }\n\n if (!hasNonPrivate) {\n let parents = att.getParentFolder(true);\n if (parents.length === 0) {\n if (att.get('name') !== 'Private')\n hasNonPrivate = true;\n } else if (parents[parents.length - 1].get('name') !== 'Private') {\n hasNonPrivate = true;\n }\n }\n }\n };\n if (objType === 'backboneCollection') {\n _.each(attachments.models, function (attachment) {\n fnCheck(attachment);\n });\n } else if (objType === 'array') {\n _.each(attachments, function (attachment) {\n fnCheck(attachment);\n })\n } else {\n fnCheck(attachments);\n }\n\n if (this.orderSettings != null &&\n this.orderSettings.get('downloadPerFileFee') > 0 &&\n (this.get('masterUserId') !== PJQ.app.session.get('masterUserId') || (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS) && hasNonPrivate)) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK)) {\n\n if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n new PJQ.views.drawings.OrderDownloadAdmin({\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n new PJQ.views.files.OrderPrintsModal({\n mode: PJQ.constants.files.modes.DOWNLOAD,\n files: attachments,\n orderSettings: this.orderSettings,\n project: PJQ.app.session.project != null ? PJQ.app.session.project : options.project\n });\n }\n return;\n }\n\n let hasDrawings = _.find(ids, function (id) {\n return id < -1;\n }) != null;\n if (hasDrawings) {\n PJQ.files.downloadDrawings(attachments, this, options);\n } else {\n PJQ.files.queueDownload(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'attachments'\n }\n ]), {entryList: ids});\n }\n },\n attachFiles: function (files, callback) {\n if (PJQ.helpers.objectHelpers.refinedType(files) === 'object') {\n files = [files];\n }\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'attachments'\n },\n {\n endpoint: 'attach'\n }\n ], [\n {\n parameter: 'entryList',\n value: _.map(files, function (file) {\n return file.get('entryId');\n }).join(',')\n }\n ])\n }).put().done(function () {\n callback(true);\n }).fail(function () {\n callback(false);\n });\n },\n detachFiles: function (files, callback) {\n if (PJQ.helpers.objectHelpers.refinedType(files) === 'object') {\n files = [files];\n }\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'attachments'\n },\n {\n endpoint: 'detach'\n }\n ], [\n {\n parameter: 'entryList',\n value: _.map(files, function (file) {\n return file.get('entryId');\n }).join(',')\n }\n ])\n }).delete().done(_.bind(function () {\n callback(true);\n }, this)).fail(_.bind(function () {\n callback(false);\n }, this));\n },\n fetchProjectMessageResponses: function (callback) {\n if (this.messageResponses == null) {\n this.messageResponses = new PJQ.models.projectMessages.ProjectMessagesResponse({\n projectId: this.id\n });\n }\n\n if (!this.messageResponses.isFetched) {\n this.messageResponses.fetch({\n success: _.bind(function () {\n callback(this.messageResponses);\n }, this)\n });\n } else {\n callback(this.messageResponses);\n }\n },\n fetchParticipants: function (callback) {\n if (this.participants == null) {\n this.participants = new PJQ.collections.projectParticipants.ProjectParticipants(null, {\n project: this\n });\n }\n\n if (!this.participants.isFetched) {\n this.participants.fetch({\n success: _.bind(function () {\n callback(this.participants);\n }, this)\n });\n } else {\n callback(this.participants);\n }\n },\n fetchProjectContacts: function (callback) {\n if (this.projectContacts == null) {\n this.projectContacts = new PJQ.collections.projectContacts.ProjectContacts(null, {\n project: this\n });\n }\n\n if (!this.projectContacts.isFetched) {\n this.projectContacts.fetch({\n success: _.bind(function () {\n callback(this.projectContacts);\n }, this)\n });\n } else {\n callback(this.projectContacts);\n }\n },\n fetchDailyReportSettings: function (callback) {\n this.dailyReportSettings = new PJQ.models.dailyReports.Settings({\n project: this\n });\n this.dailyReportSettings.fetch({\n success: _.bind(function () {\n callback(this.dailyReportSettings);\n }, this)\n });\n },\n fetchBidFormSettings: function (callback) {\n this.bidFormSettings = new PJQ.models.bidForms.Settings({\n projectId: this.id\n });\n this.bidFormSettings.fetch({\n success: _.bind(function () {\n callback(this.bidFormSettings);\n }, this)\n });\n },\n fetchNDA: function (callback) {\n this.nda = new PJQ.models.projects.ProjectNDA({\n project: this\n });\n this.nda.fetch({\n success: _.bind(function () {\n callback(this.nda);\n }, this)\n });\n },\n fetchPunchListItems(callback) {\n return new Promise((resolve, reject) => {\n if (this.punchListItems != null) {\n if (typeof callback === 'function') {\n callback(this.punchListItems);\n }\n resolve(this.punchListItems);\n return;\n }\n\n this.punchListItems = new PJQ.collections.punchlists.PunchlistItems(null, {\n project: this\n });\n this.punchListItems.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.punchListItems);\n }\n resolve(this.punchListItems);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(this.actionItems);\n }\n reject(new Error(\"Failed to fetch project punchlist items\"));\n }\n })\n });\n },\n fetchPunchListCustomFields(callback) {\n return new Promise((resolve, reject) => {\n if (this.punchlistCustomFields != null) {\n resolve(this.punchlistCustomFields);\n if (typeof callback === 'function') {\n callback(this.punchlistCustomFields);\n }\n }\n\n this.punchlistCustomFields = new PJQ.collections.punchlists.PunchlistCustomFields(null, {\n project: this\n });\n this.punchlistCustomFields.fetch({\n success: () => {\n resolve(this.punchlistCustomFields);\n if (typeof callback === 'function') {\n callback(this.punchlistCustomFields);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract field settings\"));\n if (typeof callback === 'function') {\n callback(this.punchlistCustomFields);\n }\n }\n })\n });\n },\n fetchRFICustomFields(callback) {\n if (this.rfiCustomFields == null) {\n this.rfiCustomFields = new PJQ.collections.rfi.CustomFields(null, {\n project: this\n });\n this.rfiCustomFields.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.rfiCustomFields);\n }\n }, this)\n })\n } else {\n if (typeof callback === 'function') {\n callback(this.rfiCustomFields);\n }\n }\n },\n fetchActionItems(callback) {\n return new Promise((resolve, reject) => {\n if (this.actionItems != null) {\n if (typeof callback === 'function') {\n callback(this.actionItems);\n }\n resolve(this.actionItems);\n return;\n }\n\n this.actionItems = new PJQ.collections.actionItems.ActionItems(null, {\n project: this\n });\n this.actionItems.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.actionItems);\n }\n resolve(this.actionItems);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(this.actionItems);\n }\n reject(new Error(\"Failed to fetch project action items\"));\n }\n })\n });\n },\n fetchActionItemCustomFields(callback) {\n if (this.actionItemCustomFields == null) {\n this.actionItemCustomFields = new PJQ.collections.actionItems.ActionItemCustomFields(null, {\n project: this\n });\n this.actionItemCustomFields.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.actionItemCustomFields);\n }\n }, this)\n })\n } else {\n if (typeof callback === 'function') {\n callback(this.actionItemCustomFields);\n }\n }\n },\n fetchSubmittalWorkflowTemplates: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.submittalWorkflowTemplates != null) {\n if (typeof callback === 'function') {\n callback(this.submittalWorkflowTemplates);\n }\n resolve(this.submittalWorkflowTemplates);\n return;\n }\n\n this.submittalWorkflowTemplates = new PJQ.collections.submittals.WorkflowTemplates(null, {\n projectId: this.id\n });\n this.submittalWorkflowTemplates.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.submittalWorkflowTemplates);\n }\n\n resolve(this.submittalWorkflowTemplates);\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal workflow templates\"));\n }\n });\n });\n },\n fetchSubmittalSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.submittalSettings != null) {\n if (typeof callback === 'function') {\n callback(this.submittalSettings);\n }\n resolve(this.submittalSettings);\n return;\n }\n\n this.submittalSettings = new PJQ.models.submittals.Settings({\n projectId: this.id\n });\n this.submittalSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.submittalSettings);\n }\n\n resolve(this.submittalSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal settings\"));\n }\n });\n });\n },\n fetchSubmittalStatuses: function (refresh, callback) {\n return new Promise((resolve, reject) => {\n if (refresh !== true && this.submittalStatuses != null) {\n if (typeof callback === 'function') {\n callback(this.submittalStatuses);\n }\n resolve(this.submittalStatuses);\n return;\n }\n\n this.submittalStatuses = new PJQ.collections.submittals.Statuses(null, {\n projectId: this.id\n });\n this.submittalStatuses.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.submittalStatuses);\n }\n\n resolve(this.submittalStatuses);\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal statuses\"));\n }\n });\n });\n },\n fetchSubmittalItemTypes: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.submittalItemTypes != null) {\n if (typeof callback === 'function') {\n callback(this.submittalItemTypes);\n }\n resolve(this.submittalItemTypes);\n return;\n }\n\n this.submittalItemTypes = new PJQ.collections.submittals.ItemTypes(null, {\n projectId: this.id\n });\n this.submittalItemTypes.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.submittalItemTypes);\n }\n\n resolve(this.submittalItemTypes);\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal item types\"));\n }\n });\n });\n },\n fetchSubmittalCustomFields(masterUserId, callback) {\n return new Promise((resolve, reject) => {\n if (this.submittalCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.submittalCustomFields);\n }\n resolve(this.submittalCustomFields);\n return;\n }\n\n this.submittalCustomFields = new PJQ.collections.submittals.SubmittalCustomField(null, {\n projectId: this.id\n });\n this.submittalCustomFields.fetch({\n success: () => {\n resolve(this.submittalCustomFields);\n if (typeof callback === 'function') {\n callback(this.submittalCustomFields);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal custom fields\"));\n }\n });\n });\n },\n fetchSubmittalTemplates: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.submittalTemplates != null) {\n if (typeof callback === 'function') {\n callback(this.submittalTemplates);\n }\n resolve(this.submittalTemplates);\n return;\n }\n\n this.submittalTemplates = new PJQ.collections.submittals.Templates(null, {\n projectId: this.id\n });\n this.submittalTemplates.fetch({\n success: () => {\n resolve(this.submittalTemplates);\n if (typeof callback === 'function') {\n callback(this.submittalTemplates);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch submittal templates\"));\n }\n });\n });\n },\n fetchActionItemTemplates: function (callback) {\n this.actionItemTemplates = new PJQ.collections.actionItems.Templates();\n this.actionItemTemplates.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.actionItemTemplates);\n }\n }, this)\n });\n },\n fetchPunchlistTemplates: function (callback) {\n this.punchlistTemplates = new PJQ.collections.punchlists.Templates();\n this.punchlistTemplates.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.punchlistTemplates);\n }\n }, this)\n });\n },\n fetchMeetingTemplates: function (callback) {\n this.meetingTemplates = new PJQ.collections.meetings.Templates();\n this.meetingTemplates.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.meetingTemplates);\n }\n }, this)\n });\n },\n fetchActionItemSettings: function (callback) {\n if (this.actionItemSettings == null) {\n this.actionItemSettings = new PJQ.models.actionItems.Settings({\n project: this\n });\n this.actionItemSettings.fetch({\n success: _.bind(function () {\n callback(this.actionItemSettings);\n }, this)\n });\n } else {\n callback(this.actionItemSettings);\n }\n },\n fetchPunchListSettings: function (callback) {\n if (this.punchlistSettings == null) {\n this.punchlistSettings = new PJQ.models.punchlists.Settings({\n project: this\n });\n this.punchlistSettings.fetch({\n success: _.bind(function () {\n callback(this.punchlistSettings);\n }, this)\n });\n } else {\n callback(this.punchlistSettings);\n }\n },\n fetchRFIs: function (callback) {\n if (this.rfis == null) {\n this.rfis = new PJQ.collections.rfi.RFIS(null, {\n project: this\n });\n this.rfis.fetch({\n success: _.bind(function () {\n callback(this.rfis);\n }, this)\n });\n } else {\n callback(this.rfis);\n }\n },\n fetchRFISettings: function (callback) {\n if (this.rfiSettings == null) {\n this.rfiSettings = new PJQ.models.rfi.Settings({\n project: this\n });\n this.rfiSettings.fetch({\n success: _.bind(function () {\n callback(this.rfiSettings);\n }, this)\n });\n } else {\n callback(this.rfiSettings);\n }\n },\n fetchGalleryPhotos: function (callback) {\n if (this.galleryPhotos == null) {\n this.galleryPhotos = new PJQ.collections.projects.ProjectPhotos(null, {\n project: this\n });\n this.galleryPhotos.fetch({\n success: _.bind(function () {\n callback(this.galleryPhotos);\n }, this)\n });\n } else {\n callback(this.galleryPhotos);\n }\n },\n fetchProjectCustomFields(callback) {\n if (this.customFields == null) {\n this.customFields = new PJQ.collections.projects.ProjectCustomFields(null, {\n project: this\n });\n this.customFields.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.customFields);\n }\n }, this)\n })\n } else {\n if (typeof callback === 'function') {\n callback(this.customFields);\n }\n }\n },\n fetchLocations(callback) {\n return new Promise((resolve, reject) => {\n if (this.locations != null) {\n if (typeof callback === 'function') {\n callback(this.locations);\n }\n resolve(this.locations);\n return;\n }\n\n this.locations = new PJQ.collections.projects.Locations(null, {\n project: this\n });\n this.locations.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.locations);\n }\n resolve(this.locations);\n }, this),\n error: () => {\n reject(new Error(\"Failed to fetch project locations\"));\n }\n })\n });\n },\n fetchUserMessageTypes(callback) {\n if (this.userMessageTypes == null) {\n this.userMessageTypes = new PJQ.collections.userMessages.UserMessageTypes(null, {\n project: this\n });\n\n if (PJQ.app.session.contact != null) {\n this.userMessageTypes.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.userMessageTypes);\n }\n }, this)\n });\n } else if (typeof callback === 'function') {\n callback(this.userMessageTypes);\n }\n } else {\n if (typeof callback === 'function') {\n callback(this.userMessageTypes);\n }\n }\n },\n fetchScheduleSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.scheduleSettings != null) {\n if (typeof callback === 'function') {\n callback(this.scheduleSettings);\n }\n resolve(this.scheduleSettings);\n return;\n }\n\n this.scheduleSettings = new PJQ.models.schedule.Settings({\n projectId: this.id\n });\n this.scheduleSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.scheduleSettings);\n }\n resolve(this.scheduleSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch schedule settings\"));\n }\n });\n });\n },\n fetchSchedule: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.schedule != null) {\n if (typeof callback === 'function') {\n callback(this.schedule);\n }\n resolve(this.schedule);\n return;\n }\n\n this.schedule = new PJQ.models.schedule.Schedule({\n projectId: this.id\n });\n this.schedule.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.schedule);\n }\n resolve(this.schedule);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project schedule\"));\n }\n });\n });\n },\n fetchScheduleLookAheads: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.scheduleLookAheads != null) {\n if (typeof callback === 'function') {\n callback(this.scheduleLookAheads);\n }\n resolve(this.scheduleLookAheads);\n return;\n }\n\n this.scheduleLookAheads = new PJQ.collections.schedule.LookAheads([], {\n projectId: this.id\n });\n\n this.scheduleLookAheads.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.scheduleLookAheads);\n }\n resolve(this.scheduleLookAheads);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch schedule look-aheads\"));\n }\n });\n });\n\n },\n fetchScheduleNotifications: function (callback, force) {\n return new Promise((resolve, reject) => {\n if (!force && this.scheduleNotifications != null) {\n if (typeof callback === 'function') {\n callback(this.scheduleNotifications);\n }\n resolve(this.scheduleNotifications);\n return;\n }\n\n this.scheduleNotifications = new PJQ.collections.schedule.Notifications(null, {\n projectId: this.id\n });\n this.scheduleNotifications.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.scheduleNotifications);\n }\n resolve(this.scheduleNotifications);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project schedule notifications\"));\n }\n });\n });\n },\n fetchScheduleTemplates: function (callback) {\n this.scheduleTemplates = new PJQ.collections.schedule.Templates();\n this.scheduleTemplates.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.scheduleTemplates);\n }\n }, this)\n });\n },\n fetchAnnotationLayers: function (callback) {\n if (this.annotationLayers == null) {\n this.annotationLayers = new PJQ.collections.drawings.Layers(null, {\n projectId: this.id\n });\n this.annotationLayers.fetch({\n success: _.bind(function () {\n if (typeof callback === 'function') {\n callback(this.annotationLayers);\n }\n }, this)\n });\n } else {\n if (typeof callback === 'function') {\n callback(this.annotationLayers);\n }\n }\n },\n deleteAllPunchLists: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'punchlists'\n }\n ])\n }).delete().done(_.bind(function () {\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(false);\n }\n });\n },\n deleteAllActionItems: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'actionitems'\n }\n ])\n }).delete().done(_.bind(function () {\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(false);\n }\n });\n },\n deleteAllScheduleTasks: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'schedule'\n },\n {\n endpoint: 'tasks'\n }\n ])\n }).delete().done(_.bind(function () {\n if (typeof callback === 'function') {\n if (this.schedule != null) {\n this.schedule.tasks.reset();\n this.schedule.dependencies.reset();\n this.schedule.dependencies.reset();\n this.schedule.pendingRequestedChanges.reset();\n }\n callback(true);\n }\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(false);\n }\n });\n },\n getProjectStatuses(callback) {\n if (this.projectStatuses != null) {\n callback(this.projectStatuses);\n return;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id\n },\n {\n endpoint: 'statuses'\n }\n ])\n }).get().done(_.bind(function (data) {\n this.projectStatuses = data;\n callback(this.projectStatuses);\n }, this));\n },\n getProjectStatusList() {\n let list = [],\n values = (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_STATUS_LIST)) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_STATUS_LIST) : 'ACCEPT|true,DECLINE|true,BID RECEIVED|false,AWARDED|false';\n _.each(values.split(','), _.bind(function (value) {\n let parts = value.split('|');\n if (parts[0] !== 'PENDING' && parts[0] !== 'UNSENT') {\n list.push([parts[0], parts[1].toLowerCase() === 'true']);\n }\n }, this));\n return list;\n },\n getMessageStatusList() {\n let list = [],\n values = (PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.MESSAGE_STATUS_LIST)) ? PJQ.app.session.project.preferences.getPref(PJQ.constants.preferenceTypes.MESSAGE_STATUS_LIST) : 'YES|true,NO|true';\n _.each(values.split(','), _.bind(function (value) {\n let parts = value.split('|');\n list.push([parts[0], parts[1].toLowerCase() === 'true']);\n }, this));\n return list;\n },\n openInApp: function () {\n let device = PJQ.helpers.mobile.getDevice(),\n storeUrl,\n appRoute;\n if (device === 'android') {\n storeUrl = 'https://play.google.com/store/apps/details?id=com.pantera&hl=en';\n } else {\n storeUrl = 'https://itunes.apple.com/us/app/pantera-mobile/id1208253224?ls=1&mt=8';\n }\n if (PJQ.app.session.contact != null) {\n appRoute = 'pantera://panteratools/project/' + this.id + '/contact/' + PJQ.app.session.contact.id;\n } else {\n appRoute = 'pantera://panteratools/project/' + this.id;\n }\n setTimeout(_.bind(function () {\n window.location = storeUrl;\n }, this), 25);\n window.location = appRoute;\n },\n fetchSubJobs: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.subJobs != null) {\n if (typeof callback === 'function') {\n callback(this.subJobs);\n }\n resolve(this.subJobs);\n return;\n }\n\n this.subJobs = new PJQ.collections.budget.SubJobs(null, {\n projectId: this.id\n });\n this.subJobs.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.subJobs);\n }\n resolve(this.subJobs);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project sub jobs\"));\n }\n });\n });\n },\n fetchCostCodes: function (callback, force) {\n return new Promise((resolve, reject) => {\n if (this.costCodes != null && !force) {\n if (typeof callback === 'function') {\n callback(this.costCodes);\n }\n resolve(this.costCodes);\n return;\n }\n\n this.costCodes = new PJQ.collections.budget.CostCodes(null, {\n projectId: this.id\n });\n this.costCodes.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.costCodes);\n }\n resolve(this.costCodes);\n\n // if (this.get('externalObject') == null) {\n // if (typeof callback === 'function') {\n // callback(this.costCodes);\n // }\n // resolve(this.costCodes);\n // return;\n // }\n\n // PJQ.app.session.fetchERPIntegration((erp) => {\n // if (erp != null && !erp.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_PROJECT_COST_CODES)) {\n // let allowedCostCodes = _.filter(this.costCodes.models, (costCode) => {\n // return costCode.isERPSynced();\n // });\n // this.costCodes.reset(allowedCostCodes);\n // }\n // if (typeof callback === 'function') {\n // callback(this.costCodes);\n // }\n // resolve(this.costCodes);\n // });\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project cost codes\"));\n }\n });\n });\n },\n fetchCostTypes: function (callback, force) {\n return new Promise((resolve, reject) => {\n if (this.costTypes != null && !force) {\n if (typeof callback === 'function') {\n callback(this.costTypes);\n }\n resolve(this.costTypes);\n return;\n }\n\n this.costTypes = new PJQ.collections.budget.CostTypes(null, {\n projectId: this.id\n });\n this.costTypes.fetch({\n success: () => {\n if (this.get('externalObject') == null) {\n if (typeof callback === 'function') {\n callback(this.costTypes);\n }\n resolve(this.costTypes);\n return;\n }\n\n PJQ.app.session.fetchERPIntegration((erp) => {\n if (erp != null && !erp.hasAvailableAction(PJQ.constants.integrations.actions.PUSH_COST_TYPES)) {\n let allowedCostTypes = _.filter(this.costTypes.models, (costType) => {\n return costType.isERPSynced();\n });\n this.costTypes.reset(allowedCostTypes);\n }\n if (typeof callback === 'function') {\n callback(this.costTypes);\n }\n resolve(this.costTypes);\n });\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project cost types\"));\n }\n })\n });\n },\n fetchTaxCodes: function (callback, force) {\n return new Promise((resolve, reject) => {\n if (this.taxCodes != null) {\n if (typeof callback === 'function') {\n callback(this.taxCodes);\n }\n resolve(this.taxCodes);\n return;\n }\n\n this.taxCodes = new PJQ.collections.budget.TaxCodes(null, {\n projectId: this.id\n });\n this.taxCodes.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.taxCodes);\n }\n\n resolve(this.taxCodes);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch tax codes\"));\n }\n })\n });\n },\n fetchUnitsOfMeasure: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.unitsOfMeasure != null) {\n if (typeof callback === 'function') {\n callback(this.unitsOfMeasure);\n }\n resolve(this.unitsOfMeasure);\n return;\n }\n\n this.unitsOfMeasure = new PJQ.collections.budget.UnitsOfMeasure(null, {\n projectId: this.id\n });\n this.unitsOfMeasure.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.unitsOfMeasure);\n }\n\n resolve(this.unitsOfMeasure);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch units of measure\"));\n }\n })\n });\n },\n fetchBudgetTimeStats: function (callback, options) {\n return new Promise((resolve, reject) => {\n // if (this.budgetTimeStats != null && (options == null || options.force !== true)) {\n // if (typeof callback === 'function') {\n // callback(this.budget);\n // }\n // resolve(this.budget);\n // return;\n // }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.id,\n },\n {\n endpoint: 'timecards'\n },\n {\n endpoint: 'stats'\n }\n ]),\n isAPIv2: true\n }).get().done((data) => {\n if (typeof callback === 'function') {\n callback(data);\n }\n resolve(data);\n }).fail(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(null);\n });\n });\n },\n fetchBudget: function (callback, options) {\n return new Promise((resolve, reject) => {\n if (this.budget != null && (options == null || options.force !== true)) {\n if (typeof callback === 'function') {\n callback(this.budget);\n }\n resolve(this.budget);\n return;\n }\n\n this.budget = new PJQ.models.budget.Budget({\n projectId: this.id\n });\n this.budget.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.budget);\n }\n\n resolve(this.budget);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project budget\"));\n }\n })\n });\n },\n fetchBudgetViews: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.budgetViews != null) {\n if (typeof callback === 'function') {\n callback(this.budgetViews);\n }\n resolve(this.budgetViews);\n return;\n }\n\n this.budgetViews = new PJQ.collections.budget.BudgetViews();\n this.budgetViews.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.budgetViews);\n }\n\n resolve(this.budgetViews);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project budget views\"));\n }\n })\n });\n },\n fetchBudgetSnapshots: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.snapshots != null) {\n if (typeof callback === 'function') {\n callback(this.snapshots);\n }\n resolve(this.snapshots);\n return;\n }\n\n this.snapshots = new PJQ.collections.budget.Snapshots(null, {\n projectId: this.id\n });\n this.snapshots.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.snapshots);\n }\n\n resolve(this.snapshots);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch project budget snapshots\"));\n }\n })\n });\n },\n fetchCommitmentSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentSettings != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentSettings);\n }\n resolve(this.commitmentSettings);\n return;\n }\n\n this.commitmentSettings = new PJQ.models.commitments.Settings({}, {\n projectId: this.id\n });\n this.commitmentSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentSettings);\n }\n\n resolve(this.commitmentSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch commitment settings\"));\n }\n });\n });\n },\n fetchCommitmentFieldSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentFieldSettings != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentFieldSettings);\n }\n resolve(this.commitmentFieldSettings);\n return;\n }\n\n this.commitmentFieldSettings = new PJQ.collections.commitments.FieldSettings(null, {\n projectId: this.id\n });\n this.commitmentFieldSettings.fetch({\n success: () => {\n resolve(this.commitmentFieldSettings);\n if (typeof callback === 'function') {\n callback(this.commitmentFieldSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch commitment field settings\"));\n }\n });\n });\n },\n fetchCommitmentTerms: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentTerms != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentTerms);\n }\n resolve(this.commitmentTerms);\n return;\n }\n\n this.commitmentTerms = new PJQ.collections.commitments.Terms(null, {\n projectId: this.id\n });\n this.commitmentTerms.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentTerms);\n }\n\n resolve(this.commitmentTerms);\n },\n error: () => {\n reject(new Error(\"Failed to fetch commitment terms\"));\n }\n });\n });\n },\n fetchCommitmentCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentCustomFields);\n }\n resolve(this.commitmentCustomFields);\n return;\n }\n\n this.commitmentCustomFields = new PJQ.collections.commitments.CustomFields(null, {\n projectId: this.id\n });\n this.commitmentCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentCustomFields);\n }\n\n resolve(this.commitmentCustomFields);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch commitment custom fields\"));\n }\n });\n });\n },\n fetchDirectCostCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.directCostCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.directCostCustomFields);\n }\n resolve(this.directCostCustomFields);\n return;\n }\n\n this.directCostCustomFields = new PJQ.collections.directcosts.CustomFields(null, {\n projectId: this.id\n });\n this.directCostCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.directCostCustomFields);\n }\n\n resolve(this.directCostCustomFields);\n },\n error: () => {\n reject(new Error(\"Failed to fetch direct cost custom fields\"));\n }\n });\n });\n },\n fetchMeetingCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.meetingCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.meetingCustomFields);\n }\n resolve(this.meetingCustomFields);\n return;\n }\n\n this.meetingCustomFields = new PJQ.collections.meetings.CustomFields(null, {\n projectId: this.id\n });\n this.meetingCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.meetingCustomFields);\n }\n\n resolve(this.meetingCustomFields);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch meeting custom fields\"));\n }\n });\n });\n },\n fetchMeetingSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.meetingSettings != null) {\n if (typeof callback === 'function') {\n callback(this.meetingSettings);\n }\n resolve(this.meetingSettings);\n return;\n }\n\n this.meetingSettings = new PJQ.models.meetings.Settings(null, {\n projectId: this.id\n });\n this.meetingSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.meetingSettings);\n }\n\n resolve(this.meetingSettings);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch meeting settings\"));\n }\n });\n });\n },\n fetchCommitmentChangeOrderSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentChangeOrderSettings != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentChangeOrderSettings);\n }\n resolve(this.commitmentChangeOrderSettings);\n return;\n }\n\n this.commitmentChangeOrderSettings = new PJQ.models.commitments.ChangeOrderSettings({}, {\n projectId: this.id\n });\n this.commitmentChangeOrderSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentChangeOrderSettings);\n }\n\n resolve(this.commitmentChangeOrderSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch commitment change order settings\"));\n }\n });\n });\n },\n fetchCommitmentChangeOrderFieldSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentChangeOrderFieldSettings != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentChangeOrderFieldSettings);\n }\n resolve(this.commitmentChangeOrderFieldSettings);\n return;\n }\n\n this.commitmentChangeOrderFieldSettings = new PJQ.collections.commitments.ChangeOrderFieldSettings(null, {\n projectId: this.id\n });\n this.commitmentChangeOrderFieldSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentChangeOrderFieldSettings);\n }\n\n resolve(this.commitmentChangeOrderFieldSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch commitment change order field settings\"));\n }\n });\n });\n },\n fetchCommitmentChangeOrderCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.commitmentCOCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.commitmentCOCustomFields);\n }\n resolve(this.commitmentCOCustomFields);\n return;\n }\n\n this.commitmentCOCustomFields = new PJQ.collections.commitments.ChangeOrderCustomFields(null, {\n projectId: this.id\n });\n this.commitmentCOCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.commitmentCOCustomFields);\n }\n\n resolve(this.commitmentCOCustomFields);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch commitment change order custom fields\"));\n }\n });\n });\n },\n fetchPrimeContractFieldSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractFieldSettings != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractFieldSettings);\n }\n resolve(this.primeContractFieldSettings);\n return;\n }\n\n this.primeContractFieldSettings = new PJQ.collections.primeContracts.FieldSettings(null, {\n projectId: this.id\n });\n this.primeContractFieldSettings.fetch({\n success: () => {\n resolve(this.primeContractFieldSettings);\n if (typeof callback === 'function') {\n callback(this.primeContractFieldSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract field settings\"));\n }\n });\n });\n },\n fetchPrimeContractTerms: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractTerms != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractTerms);\n }\n resolve(this.primeContractTerms);\n return;\n }\n\n this.primeContractTerms = new PJQ.collections.primeContracts.Terms(null, {\n projectId: this.id\n });\n this.primeContractTerms.fetch({\n success: () => {\n resolve(this.primeContractTerms);\n if (typeof callback === 'function') {\n callback(this.primeContractTerms);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract terms\"));\n }\n });\n });\n },\n fetchPrimeContractSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractSettings != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractSettings);\n }\n resolve(this.primeContractSettings);\n return;\n }\n\n this.primeContractSettings = new PJQ.models.primeContracts.Settings({}, {\n projectId: this.id\n });\n this.primeContractSettings.fetch({\n success: () => {\n resolve(this.primeContractSettings);\n if (typeof callback === 'function') {\n callback(this.primeContractSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract settings \"));\n }\n });\n });\n },\n fetchPrimeContractCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractCustomFields);\n }\n resolve(this.primeContractCustomFields);\n return;\n }\n\n this.primeContractCustomFields = new PJQ.collections.primeContracts.CustomFields(null, {\n projectId: this.id\n });\n this.primeContractCustomFields.fetch({\n success: () => {\n resolve(this.primeContractCustomFields);\n if (typeof callback === 'function') {\n callback(this.primeContractCustomFields);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract custom fields\"));\n }\n });\n });\n },\n fetchPayableInvoiceSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.payableInvoiceSettings != null) {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceSettings);\n }\n resolve(this.payableInvoiceSettings);\n return;\n }\n\n this.payableInvoiceSettings = new PJQ.models.invoicing.PayableInvoiceSettings(null, {\n projectId: this.id\n });\n this.payableInvoiceSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceSettings);\n }\n\n resolve(this.payableInvoiceSettings);\n },\n error: () => {\n if (typeof callback === 'function') {\n callback(null);\n }\n reject(new Error(\"Failed to fetch payable invoice settings\"));\n }\n });\n });\n },\n fetchPayableInvoiceFieldSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.payableInvoiceFieldSettings != null) {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceFieldSettings);\n }\n resolve(this.payableInvoiceFieldSettings);\n return;\n }\n\n this.payableInvoiceFieldSettings = new PJQ.collections.invoicing.PayableInvoiceFieldSettings(null, {\n projectId: this.id\n });\n this.payableInvoiceFieldSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceFieldSettings);\n }\n\n resolve(this.payableInvoiceFieldSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch payable invoice field settings\"));\n }\n });\n });\n },\n fetchPayableInvoiceCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.payableInvoiceCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceCustomFields);\n }\n resolve(this.payableInvoiceCustomFields);\n return;\n }\n\n this.payableInvoiceCustomFields = new PJQ.collections.invoicing.PayableInvoiceCustomFields(null, {\n projectId: this.id\n });\n this.payableInvoiceCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.payableInvoiceCustomFields);\n }\n\n resolve(this.payableInvoiceCustomFields);\n },\n error: () => {\n reject(new Error(\"Failed to fetch payable invoice custom fields\"));\n }\n });\n });\n },\n fetchReceivableInvoiceSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.receivableInvoiceSettings != null) {\n if (typeof callback === 'function') {\n callback(this.receivableInvoiceSettings);\n }\n resolve(this.receivableInvoiceSettings);\n return;\n }\n\n this.receivableInvoiceSettings = new PJQ.models.invoicing.ReceivableInvoiceSettings();\n this.receivableInvoiceSettings.fetch({\n success: () => {\n resolve(this.receivableInvoiceSettings);\n if (typeof callback === 'function') {\n callback(this.receivableInvoiceSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch receivable invoice settings \"));\n }\n });\n });\n },\n fetchReceivableInvoiceCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.receivableInvoiceCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.receivableInvoiceCustomFields);\n }\n resolve(this.receivableInvoiceCustomFields);\n return;\n }\n\n this.receivableInvoiceCustomFields = new PJQ.collections.invoicing.ReceivableInvoiceCustomFields(null, {\n projectId: this.id\n });\n this.receivableInvoiceCustomFields.fetch({\n success: () => {\n resolve(this.receivableInvoiceCustomFields);\n if (typeof callback === 'function') {\n callback(this.receivableInvoiceCustomFields);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch receivable invoice custom fields\"));\n }\n });\n });\n },\n fetchPrimeContractChangeOrderFieldSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractChangeOrderFieldSettings != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractChangeOrderFieldSettings);\n }\n resolve(this.primeContractChangeOrderFieldSettings);\n return;\n }\n\n this.primeContractChangeOrderFieldSettings = new PJQ.collections.primeContracts.ChangeOrderFieldSettings(null, {\n projectId: this.id\n });\n this.primeContractChangeOrderFieldSettings.fetch({\n success: () => {\n resolve(this.primeContractChangeOrderFieldSettings);\n if (typeof callback === 'function') {\n callback(this.primeContractChangeOrderFieldSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract change order field settings\"));\n }\n });\n });\n },\n fetchPrimeContractChangeOrderSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractChangeOrderSettings != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractChangeOrderSettings);\n }\n resolve(this.primeContractChangeOrderSettings);\n return;\n }\n\n this.primeContractChangeOrderSettings = new PJQ.models.primeContracts.ChangeOrderSettings({}, {\n projectId: this.id\n });\n this.primeContractChangeOrderSettings.fetch({\n success: () => {\n resolve(this.primeContractChangeOrderSettings);\n if (typeof callback === 'function') {\n callback(this.primeContractChangeOrderSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract change order settings\"));\n }\n });\n });\n },\n fetchPrimeContractChangeOrderCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.primeContractCOCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.primeContractCOCustomFields);\n }\n resolve(this.primeContractCOCustomFields);\n return;\n }\n\n this.primeContractCOCustomFields = new PJQ.collections.primeContracts.ChangeOrderCustomFields(null, {\n projectId: this.id\n });\n this.primeContractCOCustomFields.fetch({\n success: () => {\n resolve(this.primeContractCOCustomFields);\n if (typeof callback === 'function') {\n callback(this.primeContractCOCustomFields);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch contract change order custom custom fields\"));\n }\n });\n });\n },\n fetchChangeRequestSettings: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.changeRequestSettings != null) {\n if (typeof callback === 'function') {\n callback(this.changeRequestSettings);\n }\n resolve(this.changeRequestSettings);\n return;\n }\n\n this.changeRequestSettings = new PJQ.models.changeRequests.Settings({}, {\n projectId: this.id\n });\n this.changeRequestSettings.fetch({\n success: () => {\n resolve(this.changeRequestSettings);\n if (typeof callback === 'function') {\n callback(this.changeRequestSettings);\n }\n },\n error: () => {\n reject(new Error(\"Failed to fetch change request settings\"));\n }\n });\n });\n },\n fetchChangeRequestCustomFields: function (callback) {\n return new Promise((resolve, reject) => {\n if (this.changeRequestCustomFields != null) {\n if (typeof callback === 'function') {\n callback(this.changeRequestCustomFields);\n }\n resolve(this.changeRequestCustomFields);\n return;\n }\n\n this.changeRequestCustomFields = new PJQ.collections.changeRequests.CustomFields(null, {\n projectId: this.id\n });\n this.changeRequestCustomFields.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.changeRequestCustomFields);\n }\n\n resolve(this.changeRequestCustomFields);\n },\n error: () => {\n reject(new Error(\"Failed to fetch change request custom fields\"));\n }\n });\n });\n },\n fetchBillingPeriodSettings: function (callback, allowAutomate = false) {\n return new Promise((resolve, reject) => {\n if (this.billingPeriodSettings != null) {\n if (allowAutomate && !this.billingPeriodSettings.get('allowAutomate')) {\n this.billingPeriodSettings.set('allowAutomate', allowAutomate);\n fnFetch();\n }\n\n if (typeof callback === 'function') {\n callback(this.billingPeriodSettings);\n }\n resolve(this.billingPeriodSettings);\n return;\n }\n\n this.billingPeriodSettings = new PJQ.models.budget.BillingPeriodSettings({\n projectId: this.id,\n allowAutomate: allowAutomate\n });\n this.billingPeriodSettings.fetch({\n success: () => {\n if (typeof callback === 'function') {\n callback(this.billingPeriodSettings);\n }\n\n resolve(this.billingPeriodSettings);\n },\n error: () => {\n reject(new Error(\"Failed to fetch billing period settings\"));\n }\n });\n });\n },\n});\n\nPJQ.models.projects.ProjectCustomField = PJQ.models.customFields.CustomField.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'customfields',\n value: this.id\n }\n ]);\n },\n});\n\nPJQ.models.projects.ProjectSettings = PJQ.models.BaseModel.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'settings'\n }\n ]);\n },\n parse: function (model) {\n return model;\n },\n isColumnSelected: function (column) {\n return (_.find(this.get('columns'), function (col) {\n return col === column\n }) !== undefined);\n }\n});\n\n//right now this model is 100% cookie based\nPJQ.models.projects.ProjectInvitesSettings = PJQ.models.BaseModel.extend({\n setFavoriteFilter: function (val) {\n if (val) {\n PJQ.helpers.cookieHelpers.setCookie(PJQ.constants.cookies.PROJECT_INVITES_FAVORITE_FILTER, true);\n } else {\n PJQ.helpers.cookieHelpers.removeCookie(PJQ.constants.cookies.PROJECT_INVITES_FAVORITE_FILTER);\n }\n },\n getFavoriteFilter: function () {\n return PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.PROJECT_INVITES_FAVORITE_FILTER) === \"true\";\n }\n});\n\n//Collections\nPJQ.collections.projects.Projects = PJQ.collections.BaseCollection.extend({\n options: {\n isSimple: true,\n isBidding: false,\n customFieldIds: [],\n isMyProjects: false,\n isProjectInvites: false\n },\n model: PJQ.models.projects.Project,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n }\n ], [\n {\n parameter: 'isSimple',\n value: this.options.isSimple\n },\n {\n parameter: 'isBidding',\n value: this.options.isBidding\n },\n {\n parameter: 'status',\n value: this.options.status\n },\n {\n parameter: 'customFieldIds',\n value: this.options.customFieldIds\n },\n {\n parameter: 'isMyProjects',\n value: this.options.isMyProjects\n },\n {\n parameter: 'isProjectInvites',\n value: this.options.isProjectInvites\n }\n ])\n }\n});\n\nPJQ.collections.projects.ProjectPhotos = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.files.File,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'photos'\n }\n ])\n }\n});\n\nPJQ.collections.projects.ProjectCustomFields = PJQ.collections.customFields.CustomFields.extend({\n model: PJQ.models.projects.ProjectCustomField,\n options: {\n masterUserId: null\n },\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project ? this.options.project.id : null\n },\n {\n endpoint: 'customfields'\n }\n ], [\n {\n parameter: 'masterUserId',\n value: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n }\n ]);\n }\n});\n\n//Views\nPJQ.views.projects.ProjectParticipantHistoryModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Project-Participant-History'),\n subTemplates: {\n singleProjectHistory: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Participant-Single-Project-History'),\n overallHistory: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Participant-Overall-History'),\n },\n isShowCloseButton: true,\n maxWidth: '1000px',\n type: 'THIS',\n onGoToProject: _.noop\n },\n events: {\n 'keyup .input-history-search': 'search',\n 'click .link-project': 'goToProject',\n 'click .btn-copy-access-key': 'copyAccessKey',\n 'click .btn-view-downloads': 'viewDownloads',\n 'click .btn-export': 'export',\n 'click .btn-show-message': 'showProjectMessage'\n },\n beforeModalCreated: function () {\n this.options.project = PJQ.app.session.project;\n },\n search: function () {\n this.$('.datatable-search').val(this.$('.input-history-search').val());\n },\n getContextMenuItems: function () {\n return [\n {\n name: 'Resend Message',\n iconClass: 'fal fa-paper-plane',\n onClick: _.bind(function (row) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'projectmessages',\n value: row.data().projectMessageId\n },\n {\n endpoint: 'resend'\n }\n ], [\n {\n parameter: 'projectMessageContactBroadcastIds',\n value: [row.data().projectMessageContactBroadcastId]\n }\n ])\n }).post().done(_.bind(function (data) {\n PJQ.notifications.notify.successNotify({\n message: 'Message is being resent.'\n });\n }, this));\n\n }, this),\n isShown: _.bind(function (row) {\n let data = row.data();\n return data.projectMessageContactBroadcastId > 1 && data.auditAction.toLowerCase() === 'projectmessage';\n }, this)\n }\n ];\n },\n afterRender: function () {\n if (this.options.project) {\n this.historyTypeSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.history-type'),\n onChange: _.bind(function (value) {\n this.renderHistory(value);\n }, this)\n });\n this.options.project.getProjectStatuses(_.bind(function (statuses) {\n this.statuses = statuses;\n this.renderHistory(this.options.type);\n }, this));\n } else {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'settings'\n },\n {\n endpoint: 'statuses'\n }\n ])\n }).get().done(_.bind(function (data) {\n this.statuses = data;\n this.$('.select-project-history-type').hide();\n this.renderHistory('ALL');\n }, this)).fail(_.bind(function () {\n this.statuses = null;\n this.$('.select-project-history-type').hide();\n this.renderHistory('ALL');\n }, this));\n }\n },\n renderHistory: function (type) {\n let $history = this.$('.history-data');\n if (type === 'THIS') {\n this.renderSubTemplate(false, this.options.subTemplates.singleProjectHistory, $history, {}, _.bind(function () {\n if (this.singleProjectData == null) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: \"projects\",\n value: this.options.project.id\n },\n {\n endpoint: \"participants\",\n value: this.options.contactId\n },\n {\n endpoint: \"history\"\n }\n ])\n }).get().done(_.bind(function (data) {\n this.singleProjectData = data;\n this.renderSingleProjectHistory();\n }, this));\n } else {\n this.renderSingleProjectHistory();\n }\n }, this));\n } else {\n let loader = new PJQ.Loader($history);\n let callback = _.bind(function (data) {\n this.overallData = data;\n this.renderSubTemplate(false, this.options.subTemplates.overallHistory, $history, {\n statuses: _.uniq(_.map(this.overallData, function (project) {\n return (_.size(project.projectStatus) > 0 ? project.projectStatus.toUpperCase() : \"PENDING\");\n }))\n }, _.bind(function () {\n this.renderOverallHistory();\n loader.remove();\n }, this));\n }, this);\n if (this.overallData == null) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: \"contacts\",\n value: this.options.contactId\n },\n {\n endpoint: \"projecthistory\"\n }\n ])\n }).get().done(callback);\n } else {\n callback(this.overallData);\n }\n }\n },\n getStatusColor: function (name) {\n let status = _.find(this.statuses, function (status) {\n return status.name.toUpperCase() === name.toUpperCase();\n });\n\n return status != null ? status.backgroundColor : \"#eee\";\n },\n renderSingleProjectHistory: function () {\n _.each(this.singleProjectData, _.bind(function (data) {\n if (data.auditAction === 'MessageKeyDownload')\n this.$('.btn-view-downloads').removeClass('hidden');\n }, this));\n\n let responseDueLabel = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : \"Response Due\";\n new PJQ.views.dataTables.DataTable({\n el: this.$('.single-project-data-table'),\n rowId: 'projectMessageContactBroadcastId',\n pageLength: 5,\n isHideSearch: true,\n data: this.singleProjectData,\n dom: \"<'row no-gutters'<'table-outer col-sm-12'tr>>\" + \"<'row no-gutters'<'col-sm-5 mt-1'l><'col-sm-7 mt-2'p>>\",\n contextMenuOptions: {\n actions: this.getContextMenuItems(),\n isHideNoActions: true\n },\n order: [0, 'desc'],\n columns: [\n {\n \"data\": {\n \"_\": function (row) {\n return new Date(row.created);\n },\n \"filter\": \"created\",\n \"display\": function (row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.created), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n },\n \"title\": \"Date\",\n \"orderable\": false\n },\n {\n \"data\": \"description\",\n \"title\": \"Description\",\n \"width\": '300px',\n \"orderable\": false,\n \"render\": function (data, type, row) {\n if (row.auditAction === \"ProjectMessage\" || row.auditAction === \"PrivateMessage\") {\n if (row.subject != null) {\n return '<a href=\"javascript:void(0)\" data-id=\" ' + row.projectMessageId + '\" class=\"btn-show-message\" title=\"Click to view Message\">' + row.subject + '</a>'\n } else {\n return data;\n }\n } else {\n return data;\n }\n }\n },\n {\n \"data\": {\n \"_\": function (row) {\n let result = (row.auditAction === 'ProjectMessage' ? 'No Response Required' : 'N/A');\n switch (row.messageType) {\n case 'PROJECT':\n result = 'ACCEPT/DECLINE';\n break;\n case 'MESSAGE':\n result = 'YES/NO';\n break;\n }\n return result;\n }\n },\n \"title\": \"Response Type\",\n \"orderable\": false\n },\n {\n \"data\": {\n \"_\": function (row) {\n let result = 'N/A';\n if (row.auditAction === 'ProjectMessage') {\n result = row.bidDueDate;\n\n if (!row.bidDueTime.startsWith(' ')) {\n result += ' ' + row.bidDueTime + ' ' + row.bidDueTimeZone;\n }\n }\n return result;\n }\n },\n \"title\": responseDueLabel,\n \"orderable\": false\n },\n {\n \"data\": \"accessKey\",\n \"title\": \"Access Key\",\n \"orderable\": false,\n \"render\": function (data, type, row) {\n let html = '<div style=\"min-width:100px;\" class=\"d-flex align-items-center\">';\n html += '<div class=\"flex-fill ' + (row.accessKey ? '' : 'text-muted') + '\">' + (row.accessKey ? row.accessKey : '') + '</div>';\n if (_.size(row.accessKey) > 0)\n html += '<button type=\"button\" class=\"btn btn-transparent-dark btn-copy-access-key\" title=\"Copy Access Key\" data-access-key=\"' + row.accessKey + '\"><i class=\"far fa-key text-dark\"></i></button>';\n html += '</div>';\n return html;\n }\n\n },\n {\n \"data\": \"broadcastStatus\",\n \"title\": 'Broadcast Status',\n \"render\": function (data, type, row) {\n let broadcastStatus = row.auditAction === 'ProjectMessage' ? (_.size(row.broadcastStatus) === 0 ? 'PENDING' : row.broadcastStatus) : '';\n return '<span title=\"' + (_.size(row.broadcastErrorMessage) === 0 ? broadcastStatus : row.broadcastErrorMessage) + '\" >' + broadcastStatus + '</span>';\n },\n \"orderable\": false\n },\n {\n \"data\": \"response\",\n \"title\": 'Response',\n \"render\": _.bind(function (data, type, row) {\n let response = 'N/A';\n if (_.size(row.response) > 0) {\n response = '<span style=\"color:' + this.getStatusColor(row.response) + '\">' + row.response + '</span>';\n }\n return response;\n }, this),\n \"orderable\": false\n },\n {\n \"data\": \"responded\",\n \"title\": 'Responded',\n \"render\": function (data, type, row) {\n let response = 'N/A';\n if (row.auditAction === 'ProjectMessage') {\n response = '';\n if (_.size(row.responded) > 0)\n response = PJQ.helpers.dateHelpers.getDateString(new Date(row.responded), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\n }\n return response;\n },\n \"orderable\": false\n }\n ]\n });\n },\n renderOverallHistory: function () {\n let statuses = {},\n statusesDatasets = [],\n responses = {\n responded: 0,\n notResponded: 0\n };\n _.each(this.overallData, function (project) {\n let status = _.size(project.projectStatus) > 0 ? project.projectStatus.toUpperCase() : \"PENDING\";\n if (statuses[status] == null) {\n statuses[status] = 1;\n } else {\n statuses[status] = statuses[status] + 1;\n }\n\n if (status === \"PENDING\") {\n responses.notResponded = responses.notResponded + 1;\n } else {\n responses.responded = responses.responded + 1;\n }\n });\n _.each(statuses, function (count, status) {\n let set = {\n label: status,\n backgroundColor: this.getStatusColor(status),\n data: [\n count\n ]\n };\n statusesDatasets.push(set);\n }, this);\n new PJQ.charts.Chart(this.$('.statuses-chart'), {\n type: 'bar',\n height: 250,\n width: 250,\n data: {\n datasets: statusesDatasets\n },\n options: {\n cutoutPercentage: 70,\n scales: {\n yAxes: [{\n ticks: {\n min: 0\n }\n }]\n }\n },\n onClick: _.bind(function (clickedSegments) {\n if (_.size(clickedSegments) > 0) {\n let segment = clickedSegments[0],\n stat = stats.datasets[segment._index];\n PJQ.app.router.navigate('projects/' + this.options.project.id + '/' + stat.route, {\n trigger: true\n });\n }\n }, this)\n });\n\n let responsesLabels = [\"Responded\", \"Not Responded\"],\n responsesDataset = [responses[\"responded\"], responses[\"notResponded\"]],\n responsesColors = [PJQ.constants.colors.BLUE, PJQ.constants.colors.GRAY];\n new PJQ.charts.Chart(this.$('.responses-chart'), {\n type: 'doughnut',\n height: 250,\n width: 250,\n options: {\n cutoutPercentage: 70\n },\n data: {\n labels: responsesLabels,\n datasets: [\n {\n data: responsesDataset,\n backgroundColor: responsesColors\n }\n ]\n },\n onClick: _.bind(function (clickedSegments) {\n if (_.size(clickedSegments) > 0) {\n let segment = clickedSegments[0],\n stat = stats.datasets[segment._index];\n PJQ.app.router.navigate('projects/' + this.options.project.id + '/' + stat.route, {\n trigger: true\n });\n }\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-history-filter'),\n noneSelectedText: 'No Filters',\n onChange: _.bind(function (value) {\n\n }, this)\n });\n let prefs;\n if (PJQ.app.session.project != null) {\n prefs = PJQ.app.session.project.preferences;\n } else {\n prefs = PJQ.app.session.preferences;\n }\n\n let responseDueLabel = prefs.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? prefs.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : \"Response Due\",\n startDateLabel,\n finishDateLabel;\n if (this.options.project) {\n startDateLabel = prefs.hasPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) ? prefs.getPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) : 'Start Date'\n finishDateLabel = prefs.hasPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) ? prefs.getPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) : 'Finish Date';\n } else {\n startDateLabel = prefs.hasPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) ? prefs.getPref(PJQ.constants.preferenceTypes.PROJECT_START_LABEL) : 'Start Date'\n finishDateLabel = prefs.hasPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) ? prefs.getPref(PJQ.constants.preferenceTypes.PROJECT_FINISH_LABEL) : 'Finish Date';\n }\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.overall-data-table'),\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Participant-Overall-History')\n },\n headerData: _.bind(function () {\n return {\n statuses: this.statuses,\n getStatusColor: this.getStatusColor\n };\n }, this),\n afterHeaderRender: function (view, $header) {\n new PJQ.inputs.Selectpicker({\n el: $header.find('.select-history-filter'),\n onChange: function (value) {\n view.setFilter('status', value);\n },\n isMultiple: true,\n noneSelectedText: 'No Filters'\n });\n },\n getFilterData: function (view, data) {\n let statusFilter = view.getFilter('status');\n if (_.size(statusFilter) > 0) {\n return _.filter(data, function (item) {\n return statusFilter.indexOf(item.projectStatus.toLowerCase()) !== -1;\n });\n }\n return data;\n },\n pageLength: 10,\n data: this.overallData,\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n order: [],\n columns: [\n {\n \"data\": \"projectName\",\n \"title\": 'Name',\n \"render\": _.bind(function (data, type, row) {\n return '<a class=\"link-project\" href=\"/#projects/' + row.projectId.toString() + '/dashboard\">' + data + '</a>';\n }, this)\n },\n {\n \"data\": \"city\",\n \"title\": 'City'\n },\n {\n \"data\": \"projectStatus\",\n \"title\": 'Status',\n \"width\": \"80px\",\n \"render\": _.bind(function (data, type, row) {\n let status = _.size(row.projectStatus) > 0 ? row.projectStatus.toUpperCase() : 'PENDING';\n return '<span style=\"color:' + this.getStatusColor(status) + '\">' + status + '</span>';\n }, this)\n },\n {\n \"data\": {\n \"_\": function (row) {\n\n let dateTemp = new Date();\n if (row.responseDue == null || row.responseDue == 'N/A')\n return dateTemp.addDays(-20000);\n if (row.responseDue === 'ASAP')\n return dateTemp.addDays(-10000);\n\n return new Date(row.responseDue);\n },\n \"filter\": \"responseDue\",\n \"display\": function (row) {\n if (row.responseDue == null || row.responseDue == 'N/A')\n return \"N/A\";\n if (row.responseDue === 'ASAP')\n return row.responseDue;\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.responseDue), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n \"title\": responseDueLabel\n },\n {\n \"data\": {\n \"_\": function (row) {\n\n let dateTemp = new Date();\n if (row.startDate == null)\n return dateTemp.addDays(-20000);\n\n return new Date(row.startDate);\n },\n \"filter\": \"startDate\",\n \"display\": function (row) {\n if (row.startDate == null)\n return \"N/A\";\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.startDate), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n \"title\": startDateLabel\n },\n {\n \"data\": {\n \"_\": function (row) {\n\n let dateTemp = new Date();\n if (row.endDate == null)\n return dateTemp.addDays(-20000);\n\n return new Date(row.endDate);\n },\n \"filter\": \"endDate\",\n \"display\": function (row) {\n if (row.endDate == null)\n return \"N/A\";\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.endDate), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n },\n \"title\": finishDateLabel\n },\n {\n \"data\": \"emailSuccessCount\",\n \"title\": \"Sent/Failed\",\n \"width\": \"80px\",\n \"render\": _.bind(function (data, type, row) {\n return '' + (row.emailSuccessCount + row.faxSuccessCount).toString() + ' / ' + (row.emailFailedCount + row.faxFailedCount).toString();\n }, this)\n }\n ]\n });\n },\n goToProject: function () {\n this.removeModal();\n if (this.options.onGoToProject) {\n this.options.onGoToProject();\n }\n },\n showProjectMessage: function (e) {\n let $target = $(e.currentTarget),\n message = _.find(this.singleProjectData, function (data) {\n return data.projectMessageId === parseInt($target.data('id'));\n });\n e.target.outerHTML = message.description;\n },\n copyAccessKey: function (e) {\n let inputId = 'h_input_' + _.uniqueId(),\n hiddenInput = $('<input>', {\n value: $(e.currentTarget).data('accessKey'),\n style: 'position: absolute;left:-2000px;top:-2000px',\n id: inputId\n });\n this.$el.append(hiddenInput);\n hiddenInput[0].select();\n document.execCommand(\"copy\");\n hiddenInput.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Access Key copied to clipboard.'\n });\n },\n viewDownloads: function () {\n new PJQ.views.projects.ProjectParticipantDownloadHistoryModal({\n contactId: this.options.contactId\n });\n },\n export: function () {\n if (this.historyTypeSelectPicker != null && this.historyTypeSelectPicker.getValue() === 'THIS') {\n PJQ.files.downloadFile(\n PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: this.options.contactId\n },\n {\n endpoint: 'history'\n },\n {\n endpoint: 'export'\n }\n ])\n );\n } else {\n PJQ.files.downloadFile(\n PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: \"contacts\",\n value: this.options.contactId\n },\n {\n endpoint: \"projecthistory\"\n },\n {\n endpoint: \"export\"\n }\n ])\n );\n }\n }\n\n});\n\nPJQ.views.projects.ProjectParticipantDownloadHistoryModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Project-Participant-Download-History'),\n minWidth: '900px'\n },\n events: {\n 'click .btn-export': 'export'\n },\n beforeModalCreated: function () {\n this.options.project = PJQ.app.session.project;\n },\n afterRender: function () {\n // build endpoint and fetch\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: this.options.contactId\n },\n {\n endpoint: 'downloadhistory'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n }).get().done(_.bind(function (data) {\n new PJQ.views.dataTables.DataTable({\n el: this.$('.download-table'),\n pageLength: 5,\n isHideSearch: true,\n data: data,\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>',\n order: [],\n columns: [\n {\n \"data\": \"title\",\n \"title\": \"Filename\",\n \"orderable\": false\n },\n {\n \"data\": {\n \"_\": function (row) {\n return new Date(row.downloadedOn);\n },\n \"display\": function (row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.downloadedOn), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\n }\n },\n \"title\": \"Downloaded On\",\n \"orderable\": false\n }\n ]\n });\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong.'\n });\n });\n\n },\n export: function () {\n PJQ.files.downloadFile(\n PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: this.options.contactId\n },\n {\n endpoint: 'downloadhistory'\n },\n {\n endpoint: 'export'\n }\n ])\n );\n }\n});\n\n\nPJQ.views.projects.ProjectSelector = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Project-Selector'),\n isDisableSelected: false,\n isSingleChoice: false,\n onProjectSelected: _.noop,\n excludeProjectIds: [],\n dataTableHeaderData: {\n isHideDeletedFilter: false\n },\n dataTableColumns: null\n },\n events: {\n \"change .select-project\": \"selectProject\"\n },\n beforeFirstRender: function () {\n\n if (this.options.dataTableColumns === null)\n this.options.dataTableColumns = [\n {name: 'projectName', sort: 1},\n {name: 'city', sort: 0},\n {name: 'state', sort: 0}\n ];\n\n if (!this.options.isSingleChoice) {\n this.selectedProjects = [];\n }\n\n this.collection = new PJQ.collections.projects.Projects();\n this.listenTo(this.collection, 'sync', this.render);\n this.collection.fetch();\n },\n afterRender: function () {\n let order = null;\n _.each(this.options.dataTableColumns, _.bind(function (column, index) {\n if (column.sort !== 0)\n order = [index + 1, column.sort === 1 ? 'asc' : 'desc'];\n }, this));\n\n this.dataTable = new PJQ.views.projects.ProjectSelectorDataTable({\n el: '.projects-data-table-container',\n data: _.filter(this.collection.models, _.bind(function (model) {\n return this.options.excludeProjectIds.indexOf(model.id) === -1\n }, this)),\n columns: this.getColumns(),\n order: order,\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Project-Selector')\n },\n headerData: this.options.dataTableHeaderData\n });\n },\n getColumns: function () {\n let columns = [\n {\n \"data\": \"attributes.isSelected\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\" ' + (data ? 'checked' : '') + ' class=\"select-project\"/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this)\n }\n ];\n\n _.each(this.options.dataTableColumns, _.bind(function (column, index) {\n\n switch (column.name) {\n case 'projectId':\n columns.push({\n \"data\": \"attributes.projectId\",\n \"title\": \"Project Id\"\n });\n break;\n case 'projectName':\n columns.push({\n \"data\": \"attributes.projectName\",\n \"title\": \"Project Name\"\n });\n break;\n case 'address1':\n columns.push({\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"data\": \"attributes.state\",\n \"title\": \"State\"\n });\n break;\n case 'zip':\n columns.push({\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\"\n });\n break;\n case 'created':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return new Date(row.attributes.created);\n },\n \"filter\": \"attributes.created\",\n \"display\": function (row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.created), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\n }\n },\n \"title\": \"Created\"\n });\n break;\n case 'bidsdue':\n let responseDueLabel = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : \"Response Due\";\n columns.push({\n \"data\": {\n \"_\": function (row) {\n\n let dateTemp = new Date();\n if (row.attributes.bidsDue == null)\n return dateTemp.addDays(-20000);\n if (row.attributes.rDueText === 'ASAP')\n return dateTemp.addDays(-10000);\n\n return new Date(row.attributes.bidsDue);\n },\n \"filter\": \"attributes.bidsDue\",\n \"display\": function (row) {\n if (row.attributes.bidsDue == null)\n return \"N/A\";\n if (row.attributes.rDueText === 'ASAP')\n return row.attributes.rDueText;\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.bidsDue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n },\n \"title\": responseDueLabel\n });\n break;\n case 'userDisplayName':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return (row.attributes.user && row.attributes.user.displayName) ? row.attributes.user.displayName : '';\n }\n },\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) : \"Project Contact\"\n });\n break;\n case 'user2DisplayName':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return (row.attributes.user2 && row.attributes.user2.displayName) ? row.attributes.user2.displayName : '';\n }\n },\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) : \"Project Contact 2\"\n });\n break;\n }\n }, this));\n\n return columns;\n },\n selectProject: function (e) {\n let target = $(e.currentTarget),\n project = this.dataTable.getRow(target.closest('tr')).data();\n\n if (this.options.isSingleChoice) {\n this.$('.select-project').not(target).text('Select').prop('checked', false); //.removeClass('btn-primary').addClass('btn-secondary');\n if (project.get('isSelected')) {\n project.set('isSelected', false);\n this.selectedProject = null;\n } else {\n project.set('isSelected', true);\n this.selectedProject = project;\n this.collection.get(project.id);\n _.each(this.collection.models, _.bind(function (dtProject) {\n if (project.id !== dtProject.id)\n dtProject.set('isSelected', false);\n }, this));\n }\n\n this.options.onProjectSelected(this.selectedProject);\n } else {\n if (project.get('isSelected')) {\n target.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n project.set('isSelected', false);\n this.selectedProjects = _.reject(this.selectedProjects, function (selProject) {\n return selProject.id === project.id;\n });\n } else {\n target.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n project.set('isSelected', true);\n this.selectedProjects.push(project);\n }\n this.options.onProjectSelected(this.selectedProjects);\n }\n }\n});\n\nPJQ.views.projects.ProjectSelectorModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-project-select'),\n width: '40%',\n maxWidth: 800,\n model: null,\n isShowCloseButton: false,\n isSingleChoice: false,\n onSave: _.noop(),\n excludeProjects: null,\n excludeProjectIds: null\n },\n events: {\n 'click .btn-save': 'save',\n 'click .btn-cancel': 'cancel',\n },\n afterRender: function () {\n this.projects = null;\n\n new PJQ.views.projects.ProjectSelector({\n el: this.$('.project-selector'),\n excludeProjectIds: this.options.excludeProjectIds,\n isSingleChoice: this.options.isSingleChoice,\n onProjectSelected: _.bind(function (projects) {\n this.projects = projects;\n }, this),\n dataTableColumns: [\n {name: 'projectName', sort: 1},\n {name: 'city', sort: 0},\n {name: 'state', sort: 0},\n {name: 'bidsdue', sort: 0},\n {name: 'created', sort: 0}\n ],\n dataTableHeaderData: {\n isHideDeletedFilter: true\n }\n });\n },\n save: function () {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.projects);\n }\n\n this.removeModal();\n },\n cancel: function () {\n this.removeModal();\n }\n});\n\nPJQ.views.projects.ProjectSelectorInput = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Projects-Select-Input'),\n subTemplates: {\n projectBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Projects-Select-Input-Projects')\n },\n isSingleChoice: false,\n onAdd: _.noop,\n onChange: _.noop,\n onDelete: _.noop,\n canEdit: false,\n selectedProjects: null,\n selectedProjectIds: null, // If you only have a list of ids, pass it in as selectedProjectIds,\n emptyNotice: 'No Projects Selected',\n },\n events: {\n \"click .project-select-input-add\": \"edit\",\n \"click .project-select-input-delete\": \"deleteProject\"\n },\n beforeFirstRender() {\n this.selectedProjects = this.options.selectedProjects ? this.options.selectedProjects : (this.options.isSingleChoice ? null : []);\n this.projects = this.options.projects;\n this.isFetched = false;\n\n if (!this.projects) {\n this.projects = new PJQ.collections.projects.Projects()\n }\n\n if (!this.projects.isFetched) {\n this.projects.fetch({\n success: _.bind(function () {\n this.isFetched = true;\n this.render();\n }, this)\n })\n } else {\n this.isFetched = true;\n }\n },\n afterRender() {\n if (!this.isFetched)\n return;\n\n let formGroup = this.$el.closest('.form-group');\n let addButton = formGroup.find('label').find('.project-select-input-add');\n\n // If the button already exists, remove it\n if (_.size(addButton) > 0) {\n addButton.remove();\n }\n\n if (this.options.canEdit) {\n // Always create a new button and append it\n addButton = $('<button type=\"button\" class=\"btn btn-transparent-light text-info btn-sm ml-1 project-select-input-add\"><i class=\"fal fa-sm fa-pencil\"></i></button>');\n formGroup.find('label').first().append(addButton);\n addButton.on('click', _.bind(this.edit, this));\n }\n\n if (this.options.selectedProjectIds) {\n if (this.options.isSingleChoice) {\n let projectId = PJQ.helpers.objectHelpers.refinedType(this.options.selectedProjectIds) !== 'array' ? this.options.selectedProjectIds : this.options.selectedProjectIds[0];\n this.selectedProjects = this.projects.get(projectId);\n } else {\n let selectedProjects = [];\n _.each(this.options.selectedProjectIds, function (id) {\n let project = this.projects.get(id);\n if (project) {\n selectedProjects.push(project);\n }\n }, this)\n this.selectedProjects = selectedProjects;\n }\n }\n\n this.renderSelectedProjects();\n },\n renderSelectedProjects: function () {\n let data = this.selectedProjects;\n if (this.selectedProjects && this.options.isSingleChoice)\n data = [this.selectedProjects];\n\n if (_.size(data) === 0) {\n this.$('.project-select-list').html('<div class=\"text-muted font-weight-light mt-1 fs-16\">' + this.options.emptyNotice + '</div>');\n } else {\n this.renderSubTemplate(false, this.options.subTemplates.projectBadge, this.$('.project-select-list'), {\n models: data,\n isSingleChoice: this.options.isSingleChoice,\n canEdit: this.options.canEdit\n });\n }\n },\n edit: function () {\n let excludeProjectIds = [];\n if (this.options.isSingleChoice && this.selectedProjects) {\n excludeProjectIds.push(this.selectedProjects.id);\n } else {\n excludeProjectIds = _.map(this.selectedProjects, function (project) {\n return project.id;\n }, this)\n }\n this.selector = new PJQ.views.projects.ProjectSelectorModal({\n contacts: this.options.contacts,\n excludeProjectIds: excludeProjectIds,\n isSingleChoice: this.options.isSingleChoice,\n onSave: _.bind(function (newProjects) {\n this.selectedProjects = this.options.isSingleChoice ? newProjects : _.union(this.selectedProjects, newProjects);\n this.renderSelectedProjects();\n this.options.onAdd(newProjects, this.selectedProjects);\n this.options.onChange(this.selectedProjects);\n }, this)\n });\n },\n deleteProject: function (e) {\n let id = $(e.target).closest('.select-project-container').data('projectId');\n if (this.options.isSingleChoice) {\n this.options.onDelete(this.selectedProjects, null);\n this.options.onChange(null);\n this.selectedProjects = null;\n } else {\n let deletedProject = _.find(this.selectedProjects, function (project) {\n return project.id === id\n });\n if (deletedProject != null) {\n this.selectedProjects = _.filter(this.selectedProjects, function (project) {\n return project.id !== id;\n });\n this.options.onDelete(deletedProject, this.selectedProjects);\n this.options.onChange(this.selectedProjects);\n }\n }\n this.renderSelectedProjects();\n },\n})\n\nPJQ.views.projects.ProjectSelectorDataTable = PJQ.views.dataTables.DataTable.extend({\n options: {\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Project-Selector')\n }\n },\n events: {\n 'keyup .datatable-search': 'search',\n 'click .project-selector-clear-filters': 'clearFilters'\n },\n beforeDataTableRender: function () {\n this.projectStatusFilter = [\"ready\"];\n this.projectStatusFilterPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.project-selector-status-filter'),\n onChange: _.bind(function (value) {\n this.projectStatusFilter = value;\n this.filter(value);\n }, this),\n isMultiple: true,\n noneSelectedText: 'No Filters',\n defaultValue: this.projectStatusFilter\n });\n },\n getFilterData: function () {\n return _.filter(this.options.data, function (row) {\n return _.size(this.projectStatusFilter) === 0 || _.indexOf(this.projectStatusFilter, row.attributes.status.toLowerCase()) !== -1;\n }, this);\n },\n afterSearch: function () {\n this.$('.project-selector-clear-filters').prop('disabled', _.size(this.$('input.datatable-search').val()) === 0 && _.size(this.projectStatusFilter) === 0);\n },\n clearFilters: function () {\n this.projectStatusFilter = null;\n this.projectStatusFilterPicker.deselectAll();\n this.$('input.datatable-search').val('');\n this.search();\n }\n});\n\nPJQ.models.projects.ProjectAttachment = PJQ.models.files.File.extend({\n idAttribute: 'entryId'\n});\n\nPJQ.collections.projects.ProjectAttachments = PJQ.collections.files.Files.extend({\n model: PJQ.models.projects.ProjectAttachment,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'attachments'\n }\n ], [\n {\n parameter: 'shared',\n value: this.options.isShared != null ? this.options.isShared : true\n },\n {\n parameter: 'priv',\n value: this.options.isPrivate != null ? this.options.isPrivate : true\n },\n {\n parameter: 'recursive',\n value: !this.options.isDeferred\n }\n ])\n }\n});\n\nPJQ.models.projects.ProjectNDA = PJQ.models.BaseModel.extend({\n idAttribute: 'ndaId',\n endpoint: function () {\n if (this.project != null) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.project.id\n },\n {\n endpoint: 'nda'\n }\n ]);\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'nda',\n value: this.id\n }\n ]);\n },\n parse: function (model) {\n if (model) {\n if (model.project != null) {\n this.project = model.project;\n }\n }\n return model;\n }\n});\n\nPJQ.collections.projects.ProjectNDAs = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.projects.ProjectNDA,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'nda'\n }\n ])\n }\n});\n\nPJQ.views.projects.ProjectSelector = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Project-Selector'),\n isDisableSelected: false,\n isSingleChoice: false,\n onProjectSelected: _.noop,\n excludeProjectIds: [],\n dataTableHeaderData: {\n isHideDeletedFilter: false\n },\n dataTableColumns: null\n },\n events: {\n \"change .select-project\": \"selectProject\"\n },\n beforeFirstRender: function () {\n\n if (this.options.dataTableColumns === null)\n this.options.dataTableColumns = [\n {name: 'projectName', sort: 1},\n {name: 'city', sort: 0},\n {name: 'state', sort: 0}\n ];\n\n if (!this.options.isSingleChoice) {\n this.selectedProjects = [];\n }\n\n this.collection = new PJQ.collections.projects.Projects();\n this.listenTo(this.collection, 'sync', this.render);\n this.collection.fetch();\n },\n afterRender: function () {\n let order = null;\n _.each(this.options.dataTableColumns, _.bind(function (column, index) {\n if (column.sort !== 0)\n order = [index + 1, column.sort === 1 ? 'asc' : 'desc'];\n }, this));\n\n this.dataTable = new PJQ.views.projects.ProjectSelectorDataTable({\n el: '.projects-data-table-container',\n data: _.filter(this.collection.models, _.bind(function (model) {\n return this.options.excludeProjectIds.indexOf(model.id) === -1\n }, this)),\n columns: this.getColumns(),\n order: order,\n subTemplates: {\n header: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Data-Table-Header-Project-Selector')\n },\n headerData: this.options.dataTableHeaderData\n });\n },\n getColumns: function () {\n let columns = [\n {\n \"data\": \"attributes.isSelected\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data) {\n return ('<div class=\"text-align-center\"><div class=\"pretty p-default p-smooth fs-18 m-0\"><input type=\"checkbox\" ' + (data ? 'checked' : '') + ' class=\"select-project\"/><div class=\"state p-primary\"><label class=\"wd-0\"> </label></div></div></div>');\n }, this)\n }\n ];\n\n _.each(this.options.dataTableColumns, _.bind(function (column, index) {\n\n switch (column.name) {\n case 'projectId':\n columns.push({\n \"data\": \"attributes.projectId\",\n \"title\": \"Project Id\"\n });\n break;\n case 'projectName':\n columns.push({\n \"data\": \"attributes.projectName\",\n \"title\": \"Project Name\"\n });\n break;\n case 'address1':\n columns.push({\n \"data\": \"attributes.address1\",\n \"title\": \"Address 1\"\n });\n break;\n case 'address2':\n columns.push({\n \"data\": \"attributes.address2\",\n \"title\": \"Address 2\"\n });\n break;\n case 'city':\n columns.push({\n \"data\": \"attributes.city\",\n \"title\": \"City\"\n });\n break;\n case 'state':\n columns.push({\n \"data\": \"attributes.state\",\n \"title\": \"State\"\n });\n break;\n case 'zip':\n columns.push({\n \"data\": \"attributes.zip\",\n \"title\": \"Zip\"\n });\n break;\n case 'created':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return new Date(row.attributes.created);\n },\n \"filter\": \"attributes.created\",\n \"display\": function (row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.created), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME, true);\n }\n },\n \"title\": \"Created\"\n });\n break;\n case 'bidsdue':\n let responseDueLabel = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.RESPONSE_DUE_LABEL) : \"Response Due\";\n columns.push({\n \"data\": {\n \"_\": function (row) {\n\n let dateTemp = new Date();\n if (row.attributes.bidsDue == null)\n return dateTemp.addDays(-20000);\n if (row.attributes.rDueText === 'ASAP')\n return dateTemp.addDays(-10000);\n\n return new Date(row.attributes.bidsDue);\n },\n \"filter\": \"attributes.bidsDue\",\n \"display\": function (row) {\n if (row.attributes.bidsDue == null)\n return \"N/A\";\n if (row.attributes.rDueText === 'ASAP')\n return row.attributes.rDueText;\n\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.attributes.bidsDue), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n },\n \"title\": responseDueLabel\n });\n break;\n case 'userDisplayName':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return (row.attributes.user && row.attributes.user.displayName) ? row.attributes.user.displayName : '';\n }\n },\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_1_LABEL) : \"Project Contact\"\n });\n break;\n case 'user2DisplayName':\n columns.push({\n \"data\": {\n \"_\": function (row) {\n return (row.attributes.user2 && row.attributes.user2.displayName) ? row.attributes.user2.displayName : '';\n }\n },\n \"title\": PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PROJECT_USER_2_LABEL) : \"Project Contact 2\"\n });\n break;\n }\n }, this));\n\n return columns;\n },\n selectProject: function (e) {\n let target = $(e.currentTarget),\n project = this.dataTable.getRow(target.closest('tr')).data();\n\n if (this.options.isSingleChoice) {\n this.$('.select-project').not(target).text('Select').prop('checked', false); //.removeClass('btn-primary').addClass('btn-secondary');\n if (project.get('isSelected')) {\n project.set('isSelected', false);\n this.selectedProject = null;\n } else {\n project.set('isSelected', true);\n this.selectedProject = project;\n this.collection.get(project.id);\n _.each(this.collection.models, _.bind(function (dtProject) {\n if (project.id !== dtProject.id)\n dtProject.set('isSelected', false);\n }, this));\n }\n this.options.onProjectSelected(this.selectedProject);\n } else {\n if (project.get('isSelected')) {\n target.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n project.set('isSelected', false);\n this.selectedProjects = _.reject(this.selectedProjects, function (selProject) {\n return selProject.id === project.id;\n });\n } else {\n target.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n project.set('isSelected', true);\n this.selectedProjects.push(project);\n }\n this.options.onProjectSelected(this.selectedProjects);\n }\n }\n});\n\nPJQ.views.projects.PublicProjects = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Public-Projects-Note')\n },\n events: {\n 'click .project-header': 'projectClicked'\n },\n beforeFirstRender: function () {\n //this is an app route, make sure the session is fetched\n if (!PJQ.app.session.isFetched) {\n PJQ.app.session.fetch();\n }\n\n this.collection = new PJQ.collections.projects.Projects([], {\n isBidding: true\n });\n this.collection.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n })\n },\n renderData: function () {\n\n return {\n collection: this.collection,\n emptyMessage: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PUBLIC_PROJECTS_EMPTY_MESSAGE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.PUBLIC_PROJECTS_EMPTY_MESSAGE) : \"There currently aren't any public projects\"\n };\n },\n projectClicked: function (e) {\n let cid = $(e.currentTarget).data('cid'),\n project = this.collection.get(cid);\n this.goToProject(project);\n },\n goToProject: function (project) {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PUBLIC_PROJECTS_REQ_REG)) {\n let regTabId = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.REGISTRATION_TAB_ID);\n window.location.href = window.location.origin + '/Default.aspx?tabid=' + regTabId.toString() + '&subselfreg=1';\n } else {\n PJQ.helpers.projectHelpers.accessKeyNavigate(project.get('accessKey'), _.bind(function (err) {\n if (err != null) {\n this.renderError(err);\n }\n }, this));\n }\n }\n});\n\nPJQ.views.projects.BlueBookPublishModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Blue-Book-Publish'),\n subTemplates: {\n dodgeTooltip: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'dodge-details-tooltip')\n },\n maxWidth: '800px',\n onAccept: null\n },\n events: {\n 'click .btn-publish': 'publish'\n },\n renderData: function () {\n return {\n model: this.model\n };\n },\n beforeRender: function () {\n if (this.model == null) {\n let user = PJQ.app.session.user;\n user.fetch({\n success: _.bind(function () {\n this.model = new PJQ.models.projects.BlueBookProject({\n project: this.options.project,\n user: user\n });\n this.model.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n }, this)\n });\n }\n },\n afterRender: function () {\n if (this.model == null) {\n return;\n }\n\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ]\n });\n\n new PJQ.Tooltip(this.$('.dda-details'), {\n template: this.options.subTemplates.dodgeTooltip,\n container: this.$el,\n placement: 'right',\n trigger: 'click',\n renderData: _.bind(function () {\n return {};\n }, this)\n });\n\n let statePicker = new PJQ.inputs.StatePicker({\n el: this.$('.contact-state'),\n defaultValue: this.model.get('contactState') ? this.model.get('contactState').toUpperCase() : null,\n country: this.model.get('contactCountry') ? this.model.get('contactCountry').toUpperCase() : null,\n onChange: _.bind(function (value) {\n this.model.set('contactState', value);\n }, this)\n });\n\n new PJQ.inputs.CountryPicker({\n el: this.$('.contact-country'),\n defaultValue: this.model.get('contactCountry') ? this.model.get('contactCountry').toUpperCase() : null,\n statePicker: statePicker,\n zipInput: this.$('.contact-zip'),\n onChange: _.bind(function (value) {\n this.model.set('contactCountry', value);\n }, this)\n });\n\n let projectStatePicker = new PJQ.inputs.StatePicker({\n el: this.$('.project-state'),\n country: this.model.get('projectCountry') ? this.model.get('projectCountry').toUpperCase() : null,\n defaultValue: this.model.get('projectState') ? this.model.get('projectState').toUpperCase() : null,\n onChange: _.bind(function (value) {\n this.model.set('projectState', value);\n }, this)\n });\n\n new PJQ.inputs.CountryPicker({\n el: this.$('.project-country'),\n defaultValue: this.model.get('projectCountry') ? this.model.get('projectCountry').toUpperCase() : null,\n statePicker: projectStatePicker,\n zipInput: this.$('.project-zip'),\n onChange: _.bind(function (value) {\n this.model.set('projectCountry', value);\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.project-role'),\n defaultValue: this.model.get('projectRole'),\n onChange: _.bind(function (value) {\n this.model.set('projectRole', value);\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.project-type'),\n defaultValue: this.model.get('projectType'),\n onChange: _.bind(function (value) {\n this.model.set('projectType', value);\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.input-labor-status'),\n isMultiple: true,\n defaultValue: this.model.get('laborStatus'),\n onChange: _.bind(function (value) {\n this.model.set('laborStatus', value);\n }, this)\n });\n\n this.model.project.fetchGroups(_.bind(function (projectGroups) {\n this.model.set('groups', projectGroups.models);\n this.groupSelector = new PJQ.views.groups.GroupSelector({\n el: this.$('.group-selector'),\n selectedGroups: projectGroups,\n onGroupSelected: _.bind(function () {\n this.model.set('groups', this.groupSelector.getGroupsData().selected);\n }, this)\n });\n }, this));\n\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.input-contact-phone'));\n\n new PJQ.inputs.Datepicker({\n el: this.$('.input-bids-due'),\n datepickerOptions: {\n defaultDate: this.model.get('bidsDue'),\n },\n onChange: _.bind(function (newTime) {\n this.model.set('bidsDue', newTime);\n }, this)\n });\n },\n publish: function () {\n let $err = this.$('.error-container');\n if (_.size(this.model.get('groups')) === 0) {\n this.groupSelector.showError('You must select at least 1 trade');\n $err.removeClass('hidden');\n return;\n }\n\n // let dodgeEnabled = $(\"input[type=radio][name=dodge]:checked\").val();\n // if (dodgeEnabled == null) {\n // this.$('.dodge-div').addClass('alert-danger');\n // $err.removeClass('hidden');\n // return;\n // }\n // this.model.set('includeDodge', dodgeEnabled.toLowerCase() === 'true' ? true : false);\n // this.$('.dodge-div').removeClass('alert-danger');\n $err.addClass('hidden');\n this.groupSelector.hideError();\n\n let loader = new PJQ.Loader(this.$('.btn-publish'), {\n loadingText: \"Publishing...\"\n });\n this.model.save(null, {\n success: _.bind(function () {\n this.removeModal();\n PJQ.notifications.notify.successNotify({\n message: 'Project Published to The Blue Book'\n });\n }, this),\n error: _.bind(function () {\n loader.remove();\n PJQ.notifications.notify.successNotify({\n message: 'Failed to publish to the blue book. Please try again in a few minutes'\n });\n }, this)\n });\n }\n});\n\nPJQ.models.projects.BlueBookProject = PJQ.models.BaseModel.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.project.id\n },\n {\n endpoint: 'bluebook'\n }\n ]);\n },\n parse: function (model) {\n if (model) {\n if (model.user != null) {\n model.companyName = model.user.get('companyName');\n model.contactName = model.user.get('contactName');\n model.contactAddress = (_.size(model.user.get('address1')) > 0 ? model.user.get('address1') + \" \" : \"\") + (model.user.get('address2') != null ? model.user.get('address2') : \"\");\n model.contactCity = model.user.get('city');\n model.contactState = model.user.get('state');\n model.contactZip = model.user.get('zip');\n model.contactCountry = model.user.get('country');\n model.contactPhone = model.user.get('phone');\n model.contactEmail = model.user.get('email');\n }\n\n if (model.project != null) {\n this.project = model.project;\n model.projectRole = 'General Contractor - Bidding';\n model.projectName = model.project.get('projectName');\n model.projectAddress = (_.size(model.project.get('address1')) > 0 ? model.project.get('address1') + \" \" : \"\") + (model.project.get('address2') != null ? model.project.get('address2') : \"\");\n model.projectCity = model.project.get('city');\n model.projectState = model.project.get('state');\n model.projectZip = model.project.get('zip');\n model.projectCountry = model.project.get('country');\n model.bidsDue = model.project.get('bidsDue');\n }\n\n if (model.contactNameOverride !== null)\n model.contactName = model.contactNameOverride;\n\n if (model.emailOverride !== null)\n model.contactEmail = model.emailOverride;\n }\n return model;\n }\n});\n\nPJQ.views.projects.UploadParticipantBidDocumentsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Upload-Participant-Bid-Docs'),\n minWidth: '500px',\n onSave: _.noop,\n contact: null\n },\n events: {\n 'click .save-attachments': 'onSave'\n },\n beforeRender: function () {\n this.renderData = {\n contact: this.options.contact\n };\n },\n afterRender: function () {\n this.uploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.uploader')\n });\n },\n onSave: function () {\n if (this.uploader.collection.length === 0)\n return;\n\n // construct endpoint and post folder accordingly\n let postData = {\n attachments: this.uploader.collection.toJSON()\n };\n\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'participants',\n value: this.options.contact.get('contactId')\n },\n {\n endpoint: 'bids'\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: postData,\n isApi2: true\n }).post().done(_.bind(function (response) {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(response);\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Bid documents uploaded successfully.'\n });\n }, this)).fail(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Something went wrong!'\n });\n });\n\n this.removeModal();\n }\n});\n","//Collections\nPJQ.collections.projects.Scopes = PJQ.collections.BaseCollection.extend({\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'scopes'\n }\n ])\n }\n});\n\n//Views\nPJQ.views.projectScopes = {};\nPJQ.views.projectScopes.CopyScopesFromProjectModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Copy-Scopes-From-Project'),\n maxWidth: '725px',\n onCancel: _.noop,\n onCopy: _.noop\n },\n events: {\n \"click .copy-scopes-cancel\": \"onCancel\",\n \"click .copy-scopes-save\": \"onCopy\",\n },\n beforeRender: function () {\n this.renderData = {\n }\n },\n afterRender: function () {\n new PJQ.views.projects.ProjectSelector({\n el: this.$('.project-selector'),\n excludeProjectIds: [PJQ.app.session.project.id],\n isSingleChoice: true,\n onProjectSelected: _.bind(function (projects) {\n this.selectedProject = projects;\n this.$('.copy-scopes-save').prop('disabled', _.size(this.selectedProject) === 0 || !this.selectedProject.get('isSelected'));\n }, this),\n dataTableHeaderData: {\n isHideDeletedFilter: true\n },\n dataTableColumns: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.COPY_SCOPES_GRID_LAYOUT) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.COPY_SCOPES_GRID_LAYOUT) : null\n });\n },\n onCancel: function () {\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel();\n }\n this.removeModal();\n },\n onCopy: function () {\n if (typeof this.options.onCopy === 'function') {\n this.options.onCopy(this.selectedProject);\n }\n this.removeModal();\n }\n});","//Models\nPJQ.models.projectStatuses = {};\nPJQ.models.projectStatuses.ProjectStatus = PJQ.models.BaseModel.extend({\n idAttribute: 'projectStatusId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'statuses',\n value: this.id < 0 ? -this.id : this.id\n }\n ])\n }\n});\n\n//Collections\nPJQ.collections.projectStatuses = {};\nPJQ.collections.projectStatuses.ProjectStatuses = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.projectStatuses.ProjectStatus,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'statuses'\n }\n ])\n },\n getDefault: function () {\n return _.find(this.models, function (model) {\n return model.get('isDefault');\n });\n },\n copy: function(callback){\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects'\n },\n {\n endpoint: 'statuses'\n },\n {\n endpoint: 'copy'\n }\n ])\n }).post().done(_.bind(function (projectStatuses) {\n this.reset(projectStatuses);\n callback();\n }, this));\n }\n});\n","PJQ.models.rawFileUploads = {};\n\nPJQ.models.rawFileUploads.RawFileUpload = PJQ.models.BaseModel.extend({\n idAttribute: 'rawFileUploadId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.get('projectId')\n },\n {\n endpoint: 'rawfileuploads',\n value: this.id\n }\n ]);\n }\n});\n","PJQ.views.contacts.Register = PJQ.views.contacts.BaseEditContactView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'register'),\n\t\tdetectGroupLevels: true,\n\t\tcanEdit: true\n\t},\n\tevents: {\n\t\t\"change .contact-edit-phone,.contact-edit-fax,.contact-edit-cell\": \"formatPhone\",\n\t\t\"keydown .contact-edit-phone-ext\": \"numbersOnly\",\n\t\t\"click .btn-continue\": \"register\"\n\t},\n\tbeforeFirstRender: function () {\n\t\tif (PJQ.app.session.contact != null) {\n\t\t\tthis.model = PJQ.app.session.contact;\n\t\t}\n\n\t\tif (PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId) {\n\t\t\tif (this.model != null) {\n\t\t\t\tthis.options.masterUserId = this.model.get('masterUserId');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.options.masterUserId = PJQ.constants.publicUserId;\n\t\t\t}\n\n\t\t\tif (this.model.get('masterUserId') === PJQ.constants.publicUserId) {\n\t\t\t\tthis.options.fieldSettingsEnabled = true;\n\t\t\t\tPJQ.app.session.preferences.setPref(PJQ.constants.preferenceTypes.PREVENT_NATIONWIDE_WORK_AREAS, true);\n\t\t\t}\n\t\t}\n\t\telse if (PJQ.app.session.preferences.hasPref('portalOwner')) {\n\t\t\tthis.options.masterUserId = PJQ.app.session.preferences.getPref('portalOwner');\n\t\t}\n\n\t\treturn PJQ.views.contacts.BaseEditContactView.prototype.beforeFirstRender.call(this);\n\t},\n\tregister: function () {\n\t\tlet validate = this.validateCoreFields(),\n\t\t\t$scrollTo = validate.$scrollTo;\n\n\t\tif (!validate.valid) {\n\t\t\tnew PJQ.Alert(this.$('.validation-error'), {\n\t\t\t\ttype: 'danger',\n\t\t\t\ttext: 'Required fields are empty or have an incorrect value'\n\t\t\t});\n\n\t\t\tif (_.size($scrollTo) > 0) {\n\t\t\t\tthis.scrollTo($scrollTo.offset().top);\n\t\t\t}\n\t\t}\n\t\telse if (validate.valid) {\n\t\t\tif (this.groupSelector != null) {\n\t\t\t\tthis.model.groups.reset(this.groupSelector.getGroupsData().all);\n\t\t\t}\n\t\t\tthis.model.set('companyCustomFieldValues', this.companyCustomFieldsForm != null ? this.companyCustomFieldsForm.getChanged() : null);\n\t\t\tthis.model.set('contactCustomFieldValues', this.contactCustomFieldsForm != null ? this.contactCustomFieldsForm.getChanged() : null);\n\t\t\tthis.model.set({\n\t\t\t\tgroups: _.map(this.model.groups.models, function (group) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tgroupId: group.id,\n\t\t\t\t\t\tisDeleted: group.get('isDeleted')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t\tthis.model.set({\n\t\t\t\tworkAreas: _.map(this.model.workAreas.models, function (workArea) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontactWorkAreaId: workArea.id,\n\t\t\t\t\t\tworkAreaId: workArea.get('workAreaId'),\n\t\t\t\t\t\tisDeleted: workArea.get('isDeleted')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: '/contacts/register',\n\t\t\t\tdata: this.model\n\t\t\t}).post().done(_.bind(function (response) {\n\t\t\t\tif (this.model.isNew() && response.id > 0) {\n\t\t\t\t\tthis.model.set('contactId', response.id);\n\t\t\t\t\tthis.model.set('contactCompanyId', response.contactCompanyId);\n\t\t\t\t\tthis.model.set('userId', response.userId);\n\t\t\t\t\tPJQ.app.session.contact = this.model;\n\t\t\t\t} else if (response.id > 0) {\n\t\t\t\t\tthis.model.set('isApprovalRequired', response.isApprovalRequired);\n\t\t\t\t\tPJQ.app.session.contact = this.model;\n\t\t\t\t}\n\n\t\t\t\tif (PJQ.app.session.user != null) {\n\t\t\t\t\tPJQ.app.router.navigate('/', {\n\t\t\t\t\t\ttrigger: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (this.model.get('userId') > 0) {\n\t\t\t\t\tnew PJQ.views.contacts.RegisterAuth({\n\t\t\t\t\t\tel: PJQ.app.$el,\n\t\t\t\t\t\tmode: 'SIGN_IN'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnew PJQ.views.contacts.RegisterAuth({\n\t\t\t\t\t\tel: PJQ.app.$el,\n\t\t\t\t\t\tmode: 'SIGN_UP'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t}\n});\n\nPJQ.views.contacts.RegisterAuth = PJQ.views.auth.Auth.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'register-auth'),\n\t\trouteToRoot: true\n\t},\n\trenderResetPassword: function () {\n\t\tnew PJQ.views.auth.RequestResetPasswordModal();\n\t}\n})\n\nPJQ.modules.register = {\n\troutes: [\n\t\t{\n\t\t\troute: 'register',\n\t\t\ttitle: 'Register',\n\t\t\tname: 'register',\n\t\t\tcallback: function () {\n\t\t\t\tif ((PJQ.app.session.user != null && PJQ.app.session.contact == null) || PJQ.app.session.get('portalId') !== PJQ.constants.panteraPortalId) {\n\t\t\t\t\tPJQ.app.router.routeToRoot();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnew PJQ.views.contacts.Register({\n\t\t\t\t\t\tel: PJQ.app.$el\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t]\n};\n\nPJQ.app.addRoutes(PJQ.modules.register.routes);\n","//Views\nPJQ.views.reporting = {};\n//This will be remade into a right bar menu when the project wall is redesigned\n//Right now (1/22/2019) a left bar doesnt work with the design of the project wall\nPJQ.views.reporting.GenerateReportModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Generate-Report'),\n\t\tsubTemplates: {\n\t\t\treportOption: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Generate-Report-Option'),\n\t\t},\n\t\tonDownload: null\n\t},\n\tevents: {\n\t\t'click .modal-report-download': 'onDownload'\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\tmodel: this.model\n\t\t};\n\t},\n\tafterRender: function () {\n\t\t_.each(this.model.get('options'), _.bind(function (option) {\n\t\t\tthis.renderSubTemplate(true, this.options.subTemplates.reportOption, this.$('.report-options-outer'), {\n\t\t\t\toption: option\n\t\t\t}, function (content) {\n\t\t\t\tswitch (option.type) {\n\t\t\t\t\tcase 'DATE_RANGE':\n\t\t\t\t\t\tnew PJQ.inputs.Datepicker({\n\t\t\t\t\t\t\tel: content.find('.input-date-from'),\n\t\t\t\t\t\t\tdatepickerOptions: {\n\t\t\t\t\t\t\t\tdefaultDate: option.defaultValue ? option.defaultValue.from : null,\n\t\t\t\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonChange: function (value) {\n\t\t\t\t\t\t\t\tif (typeof option.value !== 'object') {\n\t\t\t\t\t\t\t\t\toption.value = {};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\toption.value.from = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tnew PJQ.inputs.Datepicker({\n\t\t\t\t\t\t\tel: content.find('.input-date-to'),\n\t\t\t\t\t\t\tdatepickerOptions: {\n\t\t\t\t\t\t\t\tdefaultDate: option.defaultValue ? option.defaultValue.to : null,\n\t\t\t\t\t\t\t\tformat: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonChange: function (value) {\n\t\t\t\t\t\t\t\tif (typeof option.value !== 'object') {\n\t\t\t\t\t\t\t\t\toption.value = {};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\toption.value.to = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}, this));\n\t},\n\tonDownload: function () {\n\t\tlet isValid = true;\n\t\t_.each(this.model.get('options'), _.bind(function (option) {\n\t\t\tif (option.isRequired) {\n\t\t\t\tlet isOptionValid = true;\n\t\t\t\tswitch (option.type) {\n\t\t\t\t\tcase 'DATE_RANGE':\n\t\t\t\t\t\tlet to = (option.value != null ? option.value.to : null),\n\t\t\t\t\t\t\tfrom = (option.value != null ? option.value.from : null),\n\t\t\t\t\t\t\tisToValid = (to != null && from < to),\n\t\t\t\t\t\t\tisFromValid = (from != null && from < to);\n\t\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-date-from[data-cid=\"' + option.id + '\"]'), isFromValid);\n\t\t\t\t\t\tPJQ.helpers.inputHelpers.setInputError(this.$('.input-date-to[data-cid=\"' + option.id + '\"]'), isToValid);\n\t\t\t\t\t\tisOptionValid = (isFromValid && isToValid);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!isOptionValid) {\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, this));\n\t\tif (isValid && typeof this.options.onDownload === 'function') {\n\t\t\tlet loader = new PJQ.Loader(this.$('.modal-content'));\n\t\t\tthis.options.onDownload(this.model.get('options'), _.bind(function(){\n\t\t\t\tloader.remove();\n\t\t\t\tthis.removeModal();\n\t\t\t}, this));\n\t\t}\n\t}\n});\n\n//Models\nPJQ.models.reporting = {};\nPJQ.models.reporting.Report = PJQ.models.BaseModel.extend({\n\tidAttribute: 'reportId',\n\tendpoint: function () {\n\n\t},\n\tparse: function (model) {\n\t\treturn model;\n\t},\n\tgenerate: function(data, callback = null){\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'reports'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'js'\n\t\t\t}\n\t\t]);\n\t\tPJQ.files.queueDownload(endpoint, {\n\t\t\tdata: data,\n\t\t\ttemplateName: this.get('name'),\n\t\t\tfileName: _.size(this.get('fileName')) > 0 ? this.get('fileName').replace('.', '') : 'export'\n\t\t}, function(){\n\t\t\tif(typeof callback === 'function'){\n\t\t\t\tcallback();\n\t\t\t}\n\t\t});\n\t}\n});\n","PJQ.Resizable = class {\n constructor($el, options = {}) {\n let self = this;\n self.$el = $el;\n self.options = _.defaults(options, {\n addClasses: \"selected\",\n stop: function () {\n self.onStop();\n }\n });\n if (_.size(self.$el) > 0) {\n self.$el.resizable(self.options);\n }\n }\n\n onStop() {\n if (typeof this.options.onStop === 'function') {\n this.options.onStop();\n }\n }\n};","PJQ.models.sessions = {};\r\nPJQ.models.sessions.Session = PJQ.models.BaseModel.extend({\r\n idAttribute: 'sessionId',\r\n endpoint: '/session',\r\n coreFields: {\r\n contact: {},\r\n user: {}\r\n },\r\n customFields: {\r\n company: {},\r\n contact: {},\r\n project: {},\r\n actionItems: {},\r\n punchList: {},\r\n rfi: {},\r\n primeContracts: {},\r\n payableInvoices: {},\r\n receivableInvoices: {},\r\n schedule: {},\r\n submittals: {},\r\n user: {},\r\n meetings: {}\r\n },\r\n groups: {},\r\n data: {\r\n dailyReports: {\r\n templates: null\r\n }\r\n },\r\n fetch(opts) {\r\n if (1 === 2) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'token'\r\n }\r\n ]),\r\n isAPIv2: true\r\n }).get().done(_.bind(_.bind(function (data) {\r\n this.set('accessToken', data.access_token);\r\n }, this)));\r\n }\r\n return PJQ.models.BaseModel.prototype.fetch.call(this, opts);\r\n },\r\n parse: function (model) {\r\n if (model && _.size(model) > 0) {\r\n if (this.preferences && model.preferences != null) {\r\n this.preferences.set(model.preferences);\r\n this.preferences.parse(model.preferences);\r\n } else if (model.preferences != null) {\r\n if (model.preferences instanceof PJQ.models.preferences.Preferences)\r\n this.preferences = model.preferences;\r\n else\r\n this.preferences = new PJQ.models.preferences.Preferences(model.preferences);\r\n } else {\r\n this.preferences = new PJQ.models.preferences.Preferences();\r\n }\r\n\r\n this.subscription = new PJQ.models.subscriptions.Subscription(model.subscription);\r\n\r\n if (model.systemPermissions != null) {\r\n this.systemPermissions = new PJQ.models.permissions.SystemPermissions(model.systemPermissions);\r\n } else {\r\n this.systemPermissions = null;\r\n }\r\n\r\n if (this.userTypes != null && model.userTypes != null) {\r\n this.userTypes.reset(model.userTypes);\r\n } else if (model.userTypes != null) {\r\n if (model.userTypes instanceof PJQ.collections.userTypes.UserTypes)\r\n this.userTypes = model.userTypes;\r\n else\r\n this.userTypes = new PJQ.collections.users.Users(model.userTypes);\r\n } else {\r\n this.userTypes = new PJQ.collections.userTypes.UserTypes();\r\n }\r\n\r\n if (this.project != null && model.project != null) {\r\n this.project.set(model.project);\r\n this.project.parse(model.project);\r\n } else if (model.project != null) {\r\n if (model.project instanceof PJQ.models.projects.Project)\r\n this.project = model.project;\r\n else\r\n this.project = new PJQ.models.projects.Project(model.project);\r\n } else {\r\n this.project = null;\r\n }\r\n\r\n if (this.contact != null && model.contact != null) {\r\n this.contact.set(model.contact);\r\n this.contact.parse(model.contact);\r\n } else if (model.contact != null) {\r\n if (model.contact instanceof PJQ.models.contacts.Contact)\r\n this.contact = model.contact;\r\n else\r\n this.contact = new PJQ.models.contacts.Contact(model.contact);\r\n } else {\r\n this.contact = null;\r\n }\r\n\r\n if (this.user != null && model.user != null) {\r\n this.user.set(model.user);\r\n this.user.parse(model.user);\r\n } else if (model.user != null) {\r\n if (model.user instanceof PJQ.models.users.User)\r\n this.user = model.user;\r\n else\r\n this.user = new PJQ.models.users.User(model.user);\r\n } else {\r\n this.user = null;\r\n }\r\n\r\n if (this.users != null && model.users != null) {\r\n this.users.reset(model.users);\r\n } else if (model.users != null) {\r\n if (model.users instanceof PJQ.collections.users.Users)\r\n this.users = model.users;\r\n else\r\n this.users = new PJQ.collections.users.Users(model.users);\r\n } else {\r\n this.users = new PJQ.collections.users.Users();\r\n }\r\n\r\n this.emailTemplates = {};\r\n this.emailTemplates.projectMessage = null;\r\n } else {\r\n this.systemPermissions = null;\r\n this.preferences = new PJQ.models.preferences.Preferences();\r\n this.project = null;\r\n this.contact = null;\r\n this.user = null;\r\n this.users = new PJQ.collections.users.Users();\r\n this.userTypes = new PJQ.collections.userTypes.UserTypes();\r\n this.emailTemplates = {};\r\n this.emailTemplates.projectMessage = null;\r\n }\r\n return model;\r\n },\r\n joinDirectory: function (callback) {\r\n let hasContact = this.contact != null;\r\n if ((!hasContact || this.contact.get('isBlacklisted')) && this.user != null) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'users'\r\n },\r\n {\r\n endpoint: 'joindirectory'\r\n }\r\n ])\r\n }).post().done(_.bind(function (contact) {\r\n this.contact = new PJQ.models.contacts.Contact(contact);\r\n if (PJQ.app.navigator != null) {\r\n PJQ.app.navigator.refreshCommands();\r\n }\r\n PJQ.notifications.notify.successNotify({\r\n message: 'You have ' + (hasContact ? 'activated' : 'joined') + ' the Pantera contractor directory'\r\n });\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }, this));\r\n }\r\n },\r\n leaveDirectory: function (callback) {\r\n if (this.contact != null && this.user != null) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'users'\r\n },\r\n {\r\n endpoint: 'leavedirectory'\r\n }\r\n ])\r\n }).post().done(_.bind(function (contact) {\r\n this.contact.set('isBlacklisted', true);\r\n if (PJQ.app.navigator != null) {\r\n PJQ.app.navigator.refreshCommands();\r\n }\r\n PJQ.notifications.notify.successNotify({\r\n message: 'You have de-activated the Pantera contractor directory'\r\n });\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }, this));\r\n }\r\n },\r\n isPanteraPortal: function () {\r\n return this.get('portalId') === 4;\r\n },\r\n hasPermission: function (permission, options = {}) {\r\n if ((!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PERMISSIONS) && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_PERMISSIONS_PORTAL)) || _.size(permission) === 0) {\r\n return true;\r\n } else if (this.systemPermissions == null) {\r\n return false;\r\n }\r\n return this.systemPermissions.hasPermission(permission, options);\r\n },\r\n fetchERPIntegration: function (callback = null) {\r\n return new Promise((resolve, reject) => {\r\n let cb = (erp) => {\r\n if (typeof callback === 'function') {\r\n callback(erp);\r\n }\r\n resolve(erp);\r\n }\r\n\r\n if (PJQ.app.session.user == null || (PJQ.app.session.get('portalId') !== PJQ.constants.panteraPortalId && !PJQ.app.session.get('ownsPortal'))) {\r\n cb(null);\r\n return;\r\n }\r\n\r\n if (this.erpIntegration != null) {\r\n cb(this.erpIntegration);\r\n return;\r\n }\r\n\r\n if (this.integrations != null) {\r\n this.erpIntegration = this.integrations.findWhere({erp: true});\r\n if (this.erpIntegration != null) {\r\n cb(this.erpIntegration);\r\n return;\r\n }\r\n }\r\n\r\n let eInt = new PJQ.integrations.models.Integration({}, {\r\n erp: true\r\n });\r\n eInt.fetch({\r\n success: () => {\r\n if (eInt.id > 0) {\r\n this.erpIntegration = eInt;\r\n }\r\n\r\n cb(this.erpIntegration);\r\n },\r\n error: () => {\r\n cb(null);\r\n reject(new Error(\"Failed to fetch erp integration\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchIntegrations: function (callback) {\r\n if (this.integrations == null) {\r\n this.integrations = new PJQ.integrations.collections.Integrations();\r\n this.integrations.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.integrations);\r\n }\r\n }, this)\r\n });\r\n } else {\r\n callback(this.integrations);\r\n }\r\n },\r\n fetchUserLimits: function (callback) {\r\n if (this.userLimits == null) {\r\n this.userLimits = new PJQ.models.companies.UserLimits();\r\n this.userLimits.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.userLimits);\r\n }\r\n }, this)\r\n });\r\n } else {\r\n callback(this.userLimits);\r\n }\r\n },\r\n fetchNDAs: function (callback) {\r\n if (this.ndas == null) {\r\n this.ndas = new PJQ.collections.projects.ProjectNDAs(null);\r\n }\r\n\r\n if (!this.ndas.isFetched) {\r\n this.ndas.fetch({\r\n success: _.bind(function () {\r\n callback(this.ndas);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.ndas);\r\n }\r\n },\r\n fetchSystemPermissions: function (callback) {\r\n this.systemPermissions = new PJQ.models.permissions.SystemPermissions();\r\n this.systemPermissions.fetch({\r\n success: _.bind(function () {\r\n callback(this.systemPermissions);\r\n }, this)\r\n });\r\n },\r\n fetchBidPackageTemplates: function (callback) {\r\n if (this.bidPackageTemplates == null) {\r\n this.bidPackageTemplates = new PJQ.collections.bidPackages.Templates();\r\n this.bidPackageTemplates.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.bidPackageTemplates);\r\n }\r\n }, this)\r\n });\r\n } else {\r\n callback(this.bidPackageTemplates);\r\n }\r\n },\r\n fetchBidFormTemplates: function (callback) {\r\n this.bidFormTemplates = new PJQ.collections.bidForms.Templates();\r\n this.bidFormTemplates.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.bidFormTemplates);\r\n }\r\n }, this)\r\n });\r\n },\r\n fetchBidFormSettings: function (callback) {\r\n if (this.bidFormSettings == null) {\r\n this.bidFormSettings = new PJQ.models.bidForms.Settings();\r\n this.bidFormSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.bidFormSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.bidFormSettings);\r\n }\r\n },\r\n fetchUnitsOfMeasure: function (callback) {\r\n if (this.unitsOfMeasure == null) {\r\n this.unitsOfMeasure = new PJQ.collections.budget.UnitsOfMeasure();\r\n this.unitsOfMeasure.fetch({\r\n success: _.bind(function () {\r\n callback(this.unitsOfMeasure);\r\n }, this)\r\n })\r\n } else {\r\n callback(this.unitsOfMeasure);\r\n }\r\n },\r\n fetchCostCodes: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.costCodes != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.costCodes);\r\n }\r\n resolve(this.costCodes);\r\n return;\r\n }\r\n\r\n this.costCodes = new PJQ.collections.budget.CostCodes();\r\n this.costCodes.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.costCodes);\r\n }\r\n resolve(this.costCodes);\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n reject(new Error(\"Failed to fetch project cost codes\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCostTypes: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.costTypes != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.costTypes);\r\n }\r\n resolve(this.costTypes);\r\n return;\r\n }\r\n\r\n this.costTypes = new PJQ.collections.budget.CostTypes();\r\n this.costTypes.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.costTypes);\r\n }\r\n resolve(this.costTypes);\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n reject(new Error(\"Failed to fetch project cost types\"));\r\n }\r\n })\r\n });\r\n },\r\n fetchTaxCodes: function (callback, force) {\r\n if (this.taxCodes == null || force) {\r\n this.taxCodes = new PJQ.collections.budget.TaxCodes();\r\n this.taxCodes.fetch({\r\n success: _.bind(function () {\r\n callback(this.taxCodes);\r\n }, this)\r\n })\r\n } else {\r\n callback(this.taxCodes);\r\n }\r\n },\r\n fetchInspectionTypes: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.inspectionTypes != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionTypes);\r\n }\r\n resolve(this.inspectionTypes);\r\n return;\r\n }\r\n\r\n this.inspectionTypes = new PJQ.collections.inspections.Types();\r\n this.inspectionTypes.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionTypes);\r\n }\r\n resolve(this.inspectionTypes);\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n reject(new Error(\"Failed to fetch inspection types\"));\r\n }\r\n })\r\n });\r\n },\r\n fetchInspectionResponseTypes: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.inspectionResponseTypes != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionResponseTypes);\r\n }\r\n resolve(this.inspectionResponseTypes);\r\n return;\r\n }\r\n\r\n this.inspectionResponseTypes = new PJQ.collections.inspections.ResponseTypes();\r\n this.inspectionResponseTypes.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionResponseTypes);\r\n }\r\n resolve(this.inspectionResponseTypes);\r\n },\r\n error: () => {\r\n if (typeof callback === 'function') {\r\n callback(null);\r\n }\r\n reject(new Error(\"Failed to fetch inspection response types\"));\r\n }\r\n })\r\n });\r\n },\r\n fetchInspectionUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.inspectionUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionUserSettings);\r\n }\r\n resolve(this.inspectionUserSettings);\r\n return;\r\n }\r\n\r\n this.inspectionUserSettings = new PJQ.models.inspections.UserSettings();\r\n this.inspectionUserSettings.fetch({\r\n success: () => {\r\n resolve(this.inspectionUserSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.inspectionUserSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch inspection user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchRFISettings: function (callback) {\r\n if (this.rfiSettings == null) {\r\n this.rfiSettings = new PJQ.models.rfi.Settings();\r\n this.rfiSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.rfiSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.rfiSettings);\r\n }\r\n },\r\n fetchPlanRoomSettings: function (callback) {\r\n if (this.planRoomSettings == null) {\r\n this.planRoomSettings = new PJQ.models.settings.PlanRoomSettings();\r\n this.planRoomSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.planRoomSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.planRoomSettings);\r\n }\r\n },\r\n fetchOrderingSettings: function (callback) {\r\n if (this.orderingSettings == null) {\r\n this.orderingSettings = new PJQ.models.settings.OrderingSettings();\r\n this.orderingSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.orderingSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.orderingSettings);\r\n }\r\n },\r\n fetchAddressBookSettings: function (callback) {\r\n if (this.addressBookSettings == null) {\r\n this.addressBookSettings = new PJQ.models.settings.AddressBookSettings();\r\n this.addressBookSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.addressBookSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.addressBookSettings);\r\n }\r\n },\r\n fetchActionItemCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.actionItems[masterUserId] == null) {\r\n this.customFields.actionItems[masterUserId] = new PJQ.collections.actionItems.ActionItemCustomField(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.actionItems[masterUserId].fetch({\r\n success: () => {\r\n resolve(this.customFields.actionItems[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.actionItems[masterUserId]);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch action item field settings\"));\r\n }\r\n })\r\n } else {\r\n resolve(this.customFields.actionItems[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.actionItems[masterUserId]);\r\n }\r\n }\r\n });\r\n },\r\n fetchPunchListCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.punchList[masterUserId] == null) {\r\n this.customFields.punchList[masterUserId] = new PJQ.collections.punchlists.PunchlistCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.punchList[masterUserId].fetch({\r\n success: () => {\r\n resolve(this.customFields.punchList[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.punchList[masterUserId]);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract field settings\"));\r\n\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.punchList[masterUserId]);\r\n }\r\n }\r\n })\r\n } else {\r\n resolve(this.customFields.punchList[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.punchList[masterUserId]);\r\n }\r\n }\r\n });\r\n },\r\n fetchMeetingCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.meetings[masterUserId] == null) {\r\n this.customFields.meetings[masterUserId] = new PJQ.collections.meetings.CustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.meetings[masterUserId].fetch({\r\n success: () => {\r\n resolve(this.customFields.meetings[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.meetings[masterUserId]);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract field settings\"));\r\n }\r\n })\r\n } else {\r\n resolve(this.customFields.meetings[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.meetings[masterUserId]);\r\n }\r\n }\r\n });\r\n },\r\n fetchRFICustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.rfi[masterUserId] == null) {\r\n this.customFields.rfi[masterUserId] = new PJQ.collections.rfi.CustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.rfi[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.rfi[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.rfi[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchContactFieldSettings(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.coreFields.contact[masterUserId] == null) {\r\n this.coreFields.contact[masterUserId] = new PJQ.collections.contacts.ContactFieldSettings(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.coreFields.contact[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.coreFields.contact[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.coreFields.contact[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchUserFieldSettings(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.coreFields.user[masterUserId] == null) {\r\n this.coreFields.user[masterUserId] = new PJQ.collections.users.UserFieldSettings(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.coreFields.user[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.coreFields.user[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.coreFields.user[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchPrimeContractFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractFieldSettings);\r\n }\r\n resolve(this.primeContractFieldSettings);\r\n return;\r\n }\r\n\r\n this.primeContractFieldSettings = new PJQ.collections.primeContracts.FieldSettings();\r\n this.primeContractFieldSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractFieldSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractFieldSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractChangeOrderFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractChangeOrderFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderFieldSettings);\r\n }\r\n resolve(this.primeContractChangeOrderFieldSettings);\r\n return;\r\n }\r\n\r\n this.primeContractChangeOrderFieldSettings = new PJQ.collections.primeContracts.ChangeOrderFieldSettings();\r\n this.primeContractChangeOrderFieldSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractChangeOrderFieldSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderFieldSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract change order field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchReceivableInvoiceFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.receivableInvoiceFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.receivableInvoiceFieldSettings);\r\n }\r\n resolve(this.receivableInvoiceFieldSettings);\r\n return;\r\n }\r\n\r\n this.receivableInvoiceFieldSettings = new PJQ.collections.invoicing.ReceivableInvoiceFieldSettings();\r\n this.receivableInvoiceFieldSettings.fetch({\r\n success: () => {\r\n resolve(this.receivableInvoiceFieldSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.receivableInvoiceFieldSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch receivable invoice field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentFieldSettings);\r\n }\r\n resolve(this.commitmentFieldSettings);\r\n return;\r\n }\r\n\r\n this.commitmentFieldSettings = new PJQ.collections.commitments.FieldSettings();\r\n this.commitmentFieldSettings.fetch({\r\n success: () => {\r\n resolve(this.commitmentFieldSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentFieldSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentChangeOrderFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentChangeOrderFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderFieldSettings);\r\n }\r\n resolve(this.commitmentChangeOrderFieldSettings);\r\n return;\r\n }\r\n\r\n this.commitmentChangeOrderFieldSettings = new PJQ.collections.commitments.ChangeOrderFieldSettings();\r\n this.commitmentChangeOrderFieldSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderFieldSettings);\r\n }\r\n\r\n resolve(this.commitmentChangeOrderFieldSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment change order field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPayableInvoiceFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.payableInvoiceFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.payableInvoiceFieldSettings);\r\n }\r\n resolve(this.payableInvoiceFieldSettings);\r\n return;\r\n }\r\n\r\n this.payableInvoiceFieldSettings = new PJQ.collections.invoicing.PayableInvoiceFieldSettings();\r\n this.payableInvoiceFieldSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.payableInvoiceFieldSettings);\r\n }\r\n\r\n resolve(this.payableInvoiceFieldSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch payable invoice field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchDirectCostFieldSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.directCostFieldSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostFieldSettings);\r\n }\r\n resolve(this.directCostFieldSettings);\r\n return;\r\n }\r\n\r\n this.directCostFieldSettings = new PJQ.collections.directcosts.DirectCostFieldSettings();\r\n this.directCostFieldSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostFieldSettings);\r\n }\r\n\r\n resolve(this.directCostFieldSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch direct cost field settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchContactCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.contact[masterUserId] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.contact[masterUserId]);\r\n }\r\n resolve(this.customFields.contact[masterUserId]);\r\n return;\r\n }\r\n\r\n this.customFields.contact[masterUserId] = new PJQ.collections.contacts.ContactCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.contact[masterUserId].fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.contact[masterUserId]);\r\n }\r\n resolve(this.customFields.contact[masterUserId]);\r\n }\r\n })\r\n });\r\n },\r\n fetchPrimeContractCustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.primeContracts[masterUserId] == null) {\r\n this.customFields.primeContracts[masterUserId] = new PJQ.collections.primeContracts.CustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.primeContracts[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.primeContracts[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.primeContracts[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchPayableInvoiceCustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.payableInvoices[masterUserId] == null) {\r\n this.customFields.payableInvoices[masterUserId] = new PJQ.collections.invoicing.PayableInvoiceCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.payableInvoices[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.payableInvoices[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.payableInvoices[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchPayableInvoiceUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.payableInvoiceUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.payableInvoiceUserSettings);\r\n }\r\n resolve(this.payableInvoiceUserSettings);\r\n return;\r\n }\r\n\r\n this.payableInvoiceUserSettings = new PJQ.models.invoicing.PayableInvoiceUserSettings();\r\n this.payableInvoiceUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.payableInvoiceUserSettings);\r\n }\r\n\r\n resolve(this.payableInvoiceUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch payable invoice user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchReceivableInvoiceCustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.receivableInvoices[masterUserId] == null) {\r\n this.customFields.receivableInvoices[masterUserId] = new PJQ.collections.invoicing.ReceivableInvoiceCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.receivableInvoices[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.receivableInvoices[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.receivableInvoices[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchReceivableInvoiceUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.receivableInvoiceUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.receivableInvoiceUserSettings);\r\n }\r\n resolve(this.receivableInvoiceUserSettings);\r\n return;\r\n }\r\n\r\n this.receivableInvoiceUserSettings = new PJQ.models.invoicing.ReceivableInvoiceUserSettings();\r\n this.receivableInvoiceUserSettings.fetch({\r\n success: () => {\r\n resolve(this.receivableInvoiceUserSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.receivableInvoiceUserSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch receivable invoice user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchUserCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.user[masterUserId] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.user[masterUserId]);\r\n }\r\n resolve(this.customFields.user[masterUserId]);\r\n return;\r\n }\r\n\r\n this.customFields.user[masterUserId] = new PJQ.collections.users.UserCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.user[masterUserId].fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.user[masterUserId]);\r\n }\r\n resolve(this.customFields.user[masterUserId]);\r\n }\r\n })\r\n });\r\n },\r\n fetchScreeningSettings: function (callback) {\r\n if (this.screeningSettings == null) {\r\n this.screeningSettings = new PJQ.models.addressBook.ProqualSettings();\r\n this.screeningSettings.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.screeningSettings);\r\n }\r\n }, this)\r\n });\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.screeningSettings);\r\n }\r\n }\r\n },\r\n fetchSubmittalSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.submittalSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalSettings);\r\n }\r\n resolve(this.submittalSettings);\r\n return;\r\n }\r\n\r\n this.submittalSettings = new PJQ.models.submittals.Settings();\r\n this.submittalSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalSettings);\r\n }\r\n\r\n resolve(this.submittalSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch submittal settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchSubmittalUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.submittalUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalUserSettings);\r\n }\r\n resolve(this.submittalUserSettings);\r\n return;\r\n }\r\n\r\n this.submittalUserSettings = new PJQ.models.submittals.SubmittalUserSettings();\r\n this.submittalUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalUserSettings);\r\n }\r\n\r\n resolve(this.submittalUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch submittal user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchSubmittalStatuses: function (refresh, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (refresh !== true && this.submittalStatuses != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalStatuses);\r\n }\r\n resolve(this.submittalStatuses);\r\n return;\r\n }\r\n\r\n this.submittalStatuses = new PJQ.collections.submittals.Statuses();\r\n this.submittalStatuses.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalStatuses);\r\n }\r\n\r\n resolve(this.submittalStatuses);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch submittal statuses\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchSubmittalItemTypes: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.submittalItemTypes != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalItemTypes);\r\n }\r\n resolve(this.submittalItemTypes);\r\n return;\r\n }\r\n\r\n this.submittalItemTypes = new PJQ.collections.submittals.ItemTypes();\r\n this.submittalItemTypes.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.submittalItemTypes);\r\n }\r\n\r\n resolve(this.submittalItemTypes);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch submittal item types\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchSubmittalCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.customFields.submittals[masterUserId] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.submittals[masterUserId]);\r\n }\r\n resolve(this.customFields.submittals[masterUserId]);\r\n return;\r\n }\r\n\r\n this.customFields.submittals[masterUserId] = new PJQ.collections.submittals.SubmittalCustomField(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.submittals[masterUserId].fetch({\r\n success: () => {\r\n resolve(this.customFields.submittals[masterUserId]);\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.submittals[masterUserId]);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch submittal custom fields\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCompanyCustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.company[masterUserId] == null) {\r\n this.customFields.company[masterUserId] = new PJQ.collections.contacts.CompanyCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.company[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.company[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.company[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchScheduleCustomFields(masterUserId, callback) {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n if (this.customFields.schedule[masterUserId] == null) {\r\n this.customFields.schedule[masterUserId] = new PJQ.collections.schedule.ScheduleCustomFields(null, {\r\n masterUserId: masterUserId\r\n });\r\n this.customFields.schedule[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.schedule[masterUserId]);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.schedule[masterUserId]);\r\n }\r\n }\r\n },\r\n fetchUserTypes(callback) {\r\n if (this.userTypes == null) {\r\n this.userTypes = new PJQ.collections.userTypes.UserTypes();\r\n }\r\n if (!this.userTypes.isFetched) {\r\n this.userTypes.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.userTypes);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.userTypes);\r\n }\r\n }\r\n },\r\n fetchProjectStatuses(callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.projectStatuses != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.projectStatuses);\r\n }\r\n resolve(this.projectStatuses);\r\n return;\r\n }\r\n\r\n this.projectStatuses = new PJQ.collections.projectStatuses.ProjectStatuses();\r\n this.projectStatuses.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.projectStatuses);\r\n }\r\n\r\n resolve(this.projectStatuses);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch project statuses\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchProjectCustomFields(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n let muid = masterUserId > 0 ? masterUserId : PJQ.app.session.get('masterUserId');\r\n if (this.customFields.project[muid] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.project[muid]);\r\n }\r\n resolve(this.customFields.project[muid]);\r\n return;\r\n }\r\n\r\n let fields = new PJQ.collections.projects.ProjectCustomFields(null, {masterUserId: muid});\r\n fields.fetch({\r\n success: () => {\r\n if (muid !== PJQ.app.session.get('masterUserId')) {\r\n fields = new PJQ.collections.projects.ProjectCustomFields(_.filter(fields.models, function (customField) {\r\n if (customField.get('isVisibleInRSVP'))\r\n return customField;\r\n }));\r\n }\r\n\r\n this.customFields.project[muid] = fields;\r\n if (typeof callback === 'function') {\r\n callback(this.customFields.project[muid]);\r\n }\r\n resolve(this.customFields.project[muid]);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch project custom fields\"));\r\n }\r\n })\r\n });\r\n },\r\n fetchScheduleStatuses: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.scheduleTaskStatuses != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.scheduleTaskStatuses);\r\n }\r\n resolve(this.scheduleTaskStatuses);\r\n return;\r\n }\r\n\r\n this.scheduleTaskStatuses = new PJQ.collections.schedule.TaskStatuses();\r\n this.scheduleTaskStatuses.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.scheduleTaskStatuses);\r\n }\r\n\r\n resolve(this.scheduleTaskStatuses);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch schedule task statuses\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrequalForm(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n if (masterUserId == null) {\r\n masterUserId = PJQ.app.session.get('masterUserId');\r\n }\r\n\r\n if (this.prequalForms == null) {\r\n this.prequalForms = {};\r\n }\r\n\r\n if (this.prequalForms[masterUserId] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.prequalForms[masterUserId]);\r\n }\r\n\r\n resolve(this.prequalForms[masterUserId]);\r\n return;\r\n }\r\n\r\n this.prequalForms[masterUserId] = new PJQ.models.prequal.Form({\r\n masterUserId: masterUserId\r\n });\r\n this.prequalForms[masterUserId].fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.prequalForms[masterUserId]);\r\n }\r\n\r\n resolve(this.prequalForms[masterUserId]);\r\n }, this),\r\n error: () => {\r\n reject(new Error(\"Failed to fetch prequal form\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCalendarSettings: function (callback) {\r\n let fnCallback = _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.calendarSettings);\r\n }\r\n }, this);\r\n if (this.calendarSettings != null) {\r\n fnCallback();\r\n } else {\r\n this.calendarSettings = new PJQ.models.calendars.CalendarSettings();\r\n this.calendarSettings.fetch({\r\n success: _.bind(function () {\r\n fnCallback();\r\n }, this)\r\n });\r\n }\r\n },\r\n fetchScheduleSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.scheduleSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.scheduleSettings);\r\n }\r\n resolve(this.scheduleSettings);\r\n return;\r\n }\r\n\r\n this.scheduleSettings = new PJQ.models.schedule.Settings();\r\n this.scheduleSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.scheduleSettings);\r\n }\r\n resolve(this.scheduleSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch schedule settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchUserGroups(masterUserId, callback) {\r\n return new Promise((resolve, reject) => {\r\n let smuid = PJQ.app.session.get('masterUserId');\r\n if (masterUserId == null || masterUserId === smuid) {\r\n masterUserId = -1;\r\n }\r\n if (this.groups[masterUserId] != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.groups[masterUserId]);\r\n }\r\n resolve(this.groups[masterUserId]);\r\n return;\r\n }\r\n\r\n let groups = new PJQ.collections.groups.Groups(null, {\r\n userId: masterUserId\r\n });\r\n groups.fetch({\r\n success: () => {\r\n this.groups[masterUserId] = groups;\r\n if (typeof callback === 'function') {\r\n callback(this.groups[masterUserId]);\r\n }\r\n resolve(this.groups[masterUserId]);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch user groups\"));\r\n }\r\n })\r\n });\r\n },\r\n fetchProjectMessageEmailTemplates(callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.emailTemplates.projectMessage != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.emailTemplates.projectMessage);\r\n }\r\n resolve(this.emailTemplates.projectMessage);\r\n return;\r\n }\r\n\r\n this.emailTemplates.projectMessage = new PJQ.collections.emailTemplates.EmailTemplates(null, {projectMessage: true});\r\n this.emailTemplates.projectMessage.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.emailTemplates.projectMessage);\r\n }\r\n resolve(this.emailTemplates.projectMessage);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch project message templates\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchUsers(callback) {\r\n if (this.users == null) {\r\n this.users = new PJQ.collections.users.Users();\r\n }\r\n if (!this.users.isFetched) {\r\n this.users.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.users);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.users);\r\n }\r\n }\r\n },\r\n fetchSSOProviders(callback) {\r\n if (this.ssoProviders == null) {\r\n this.ssoProviders = new PJQ.collections.sso.Providers();\r\n }\r\n if (!this.ssoProviders.isFetched) {\r\n this.ssoProviders.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.ssoProviders);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.ssoProviders);\r\n }\r\n }\r\n },\r\n fetchDailyReportTemplates(callback) {\r\n if (this.data.dailyReports.templates == null) {\r\n this.data.dailyReports.templates = new PJQ.collections.dailyReports.SurveyTemplates();\r\n this.data.dailyReports.templates.fetch({\r\n success: _.bind(function () {\r\n if (typeof callback === 'function') {\r\n callback(this.data.dailyReports.templates);\r\n }\r\n }, this)\r\n })\r\n } else {\r\n if (typeof callback === 'function') {\r\n callback(this.data.dailyReports.templates);\r\n }\r\n }\r\n },\r\n fetchBillingInfo: function (callback) {\r\n if (this.billingInfo == null) {\r\n this.billingInfo = new PJQ.models.billing.BillingInfo();\r\n }\r\n\r\n if (!this.billingInfo.isFetched) {\r\n this.billingInfo.fetch({\r\n success: _.bind(function () {\r\n callback(this.billingInfo);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.billingInfo);\r\n }\r\n },\r\n fetchCommitmentSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentSettings);\r\n }\r\n resolve(this.commitmentSettings);\r\n return;\r\n }\r\n\r\n this.commitmentSettings = new PJQ.models.commitments.Settings();\r\n this.commitmentSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentSettings);\r\n }\r\n\r\n resolve(this.commitmentSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentTerms: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentTerms != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentTerms);\r\n }\r\n resolve(this.commitmentTerms);\r\n return;\r\n }\r\n\r\n this.commitmentTerms = new PJQ.collections.commitments.Terms();\r\n this.commitmentTerms.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentTerms);\r\n }\r\n\r\n resolve(this.commitmentTerms);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment terms\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentUserSettings);\r\n }\r\n resolve(this.commitmentUserSettings);\r\n return;\r\n }\r\n\r\n this.commitmentUserSettings = new PJQ.models.commitments.CommitmentUserSettings();\r\n this.commitmentUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentUserSettings);\r\n }\r\n\r\n resolve(this.commitmentUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentChangeOrderSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentChangeOrderSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderSettings);\r\n }\r\n resolve(this.commitmentChangeOrderSettings);\r\n return;\r\n }\r\n\r\n this.commitmentChangeOrderSettings = new PJQ.models.commitments.ChangeOrderSettings();\r\n this.commitmentChangeOrderSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderSettings);\r\n }\r\n\r\n resolve(this.commitmentChangeOrderSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment change order settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchCommitmentChangeOrderUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.commitmentChangeOrderUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderUserSettings);\r\n }\r\n resolve(this.commitmentChangeOrderUserSettings);\r\n return;\r\n }\r\n\r\n this.commitmentChangeOrderUserSettings = new PJQ.models.commitments.ChangeOrderUserSettings();\r\n this.commitmentChangeOrderUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.commitmentChangeOrderUserSettings);\r\n }\r\n\r\n resolve(this.commitmentChangeOrderUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch commitment change order user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchDirectCostSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.directCostSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostSettings);\r\n }\r\n resolve(this.directCostSettings);\r\n return;\r\n }\r\n\r\n this.directCostSettings = new PJQ.models.directcosts.Settings();\r\n this.directCostSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostSettings);\r\n }\r\n\r\n resolve(this.directCostSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch direct cost settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchMeetingSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.meetingSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.meetingSettings);\r\n }\r\n resolve(this.meetingSettings);\r\n return;\r\n }\r\n\r\n this.meetingSettings = new PJQ.models.meetings.Settings();\r\n this.meetingSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.meetingSettings);\r\n }\r\n\r\n resolve(this.meetingSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch meetings settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchDirectCostUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.directCostUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostUserSettings);\r\n }\r\n resolve(this.directCostUserSettings);\r\n return;\r\n }\r\n\r\n this.directCostUserSettings = new PJQ.models.directcosts.UserSettings();\r\n this.directCostUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.directCostUserSettings);\r\n }\r\n\r\n resolve(this.directCostUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch direct cost user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractTerms: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractTerms != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractTerms);\r\n }\r\n resolve(this.primeContractTerms);\r\n return;\r\n }\r\n\r\n this.primeContractTerms = new PJQ.collections.primeContracts.Terms();\r\n this.primeContractTerms.fetch({\r\n success: () => {\r\n resolve(this.primeContractTerms);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractTerms);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract terms\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractSettings);\r\n }\r\n resolve(this.primeContractSettings);\r\n return;\r\n }\r\n\r\n this.primeContractSettings = new PJQ.models.primeContracts.Settings();\r\n this.primeContractSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract settings \"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractUserSettings);\r\n }\r\n resolve(this.primeContractUserSettings);\r\n return;\r\n }\r\n\r\n this.primeContractUserSettings = new PJQ.models.primeContracts.PrimeContractUserSettings();\r\n this.primeContractUserSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractUserSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractUserSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractChangeOrderSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractChangeOrderSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderSettings);\r\n }\r\n resolve(this.primeContractChangeOrderSettings);\r\n return;\r\n }\r\n\r\n this.primeContractChangeOrderSettings = new PJQ.models.primeContracts.ChangeOrderSettings();\r\n this.primeContractChangeOrderSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractChangeOrderSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract change order settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchPrimeContractChangeOrderUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.primeContractChangeOrderUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderUserSettings);\r\n }\r\n resolve(this.primeContractChangeOrderUserSettings);\r\n return;\r\n }\r\n\r\n this.primeContractChangeOrderUserSettings = new PJQ.models.primeContracts.ChangeOrderUserSettings();\r\n this.primeContractChangeOrderUserSettings.fetch({\r\n success: () => {\r\n resolve(this.primeContractChangeOrderUserSettings);\r\n if (typeof callback === 'function') {\r\n callback(this.primeContractChangeOrderUserSettings);\r\n }\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch contract change order user settings\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchChangeRequestSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.changeRequestSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.changeRequestSettings);\r\n }\r\n resolve(this.changeRequestSettings);\r\n return;\r\n }\r\n\r\n this.changeRequestSettings = new PJQ.models.changeRequests.Settings();\r\n this.changeRequestSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.changeRequestSettings);\r\n }\r\n\r\n resolve(this.changeRequestSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch change request custom fields\"));\r\n }\r\n });\r\n });\r\n },\r\n fetchChangeRequestUserSettings: function (callback) {\r\n return new Promise((resolve, reject) => {\r\n if (this.changeRequestUserSettings != null) {\r\n if (typeof callback === 'function') {\r\n callback(this.changeRequestUserSettings);\r\n }\r\n resolve(this.changeRequestUserSettings);\r\n return;\r\n }\r\n\r\n this.changeRequestUserSettings = new PJQ.models.changeRequests.ChangeRequestUserSettings();\r\n this.changeRequestUserSettings.fetch({\r\n success: () => {\r\n if (typeof callback === 'function') {\r\n callback(this.changeRequestUserSettings);\r\n }\r\n\r\n resolve(this.changeRequestUserSettings);\r\n },\r\n error: () => {\r\n reject(new Error(\"Failed to fetch change request user settings\"));\r\n }\r\n });\r\n });\r\n\r\n if (this.changeRequestUserSettings == null) {\r\n this.changeRequestUserSettings = new PJQ.models.changeRequests.ChangeRequestUserSettings();\r\n this.changeRequestUserSettings.fetch({\r\n success: _.bind(function () {\r\n callback(this.changeRequestUserSettings);\r\n }, this)\r\n });\r\n } else {\r\n callback(this.changeRequestUserSettings);\r\n }\r\n },\r\n isLoggedIn: function () {\r\n return this.user != null && this.user.id > 0;\r\n },\r\n hasFeature: function (feature) {\r\n if (this.subscription == null) {\r\n return false;\r\n }\r\n return this.subscription.hasFeature(feature);\r\n },\r\n updateTrial: function (subscriptionId, onSuccess, onError) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'trial'\r\n }\r\n ], [\r\n {\r\n parameter: 'id',\r\n value: subscriptionId\r\n }\r\n ])\r\n }).put().done(_.bind(function (data) {\r\n if (data == null || data.subscription == null) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }\r\n\r\n this.subscriptionChanged(data.subscription);\r\n\r\n if (typeof onSuccess === 'function') {\r\n onSuccess(data);\r\n }\r\n }, this)).fail(_.bind(function (data) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }, this));\r\n },\r\n changeSubscription: function (subscriptionId, onSuccess, onError) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'subscription'\r\n }\r\n ], [\r\n {\r\n parameter: 'id',\r\n value: subscriptionId\r\n }\r\n ])\r\n }).put().done(_.bind(function (data) {\r\n if (data == null || data.subscription == null) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }\r\n\r\n this.subscriptionChanged(data.subscription);\r\n\r\n if (typeof onSuccess === 'function') {\r\n onSuccess(data);\r\n }\r\n }, this)).fail(_.bind(function (data) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }, this));\r\n },\r\n subscriptionChanged: function (sub) {\r\n if (sub instanceof PJQ.models.subscriptions.Subscription) {\r\n this.subscription = sub;\r\n } else {\r\n this.subscription = new PJQ.models.subscriptions.Subscription(sub);\r\n }\r\n\r\n if (this.subscription.newSubscription == null) {\r\n $('.alert-sub-expiration').remove();\r\n }\r\n\r\n PJQ.app.navigator.renderHeaderSubscription();\r\n PJQ.app.navigator.refreshCommands();\r\n PJQ.app.navigator.renderActiveItem();\r\n\r\n if (this.subscriptionChangedListeners != null) {\r\n _.each(this.subscriptionChangedListeners, function (listener) {\r\n listener();\r\n });\r\n }\r\n },\r\n listenSubscriptionChanged: function (id, callback) {\r\n if (typeof callback !== 'function') {\r\n return;\r\n }\r\n\r\n if (this.subscriptionChangedListeners == null) {\r\n this.subscriptionChangedListeners = {};\r\n }\r\n this.subscriptionChangedListeners[id] = callback;\r\n },\r\n updateAutoRenew: function (enable, onSuccess, onError) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'autorenew'\r\n }\r\n ], [\r\n {\r\n parameter: 'enable',\r\n value: enable\r\n }\r\n ])\r\n }).put().done(_.bind(function (data) {\r\n if (data == null || data.subscription == null) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }\r\n\r\n this.subscriptionChanged(data.subscription);\r\n\r\n if (this.subscription.newSubscription == null) {\r\n $('.alert-sub-expiration').remove();\r\n }\r\n\r\n if (typeof onSuccess === 'function') {\r\n onSuccess(data);\r\n }\r\n }, this)).fail(_.bind(function (data) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }, this));\r\n },\r\n changeUserSeats: function (userSeats, onSuccess, onError) {\r\n new PJQ.ajax.Request({\r\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\r\n {\r\n endpoint: 'userseats'\r\n }\r\n ], [\r\n {\r\n parameter: 'userSeats',\r\n value: userSeats\r\n }\r\n ])\r\n }).put().done(_.bind(function (data) {\r\n if (data == null || data.subscription == null) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }\r\n\r\n this.subscriptionChanged(data.subscription);\r\n\r\n if (typeof onSuccess === 'function') {\r\n onSuccess(data);\r\n }\r\n }, this)).fail(_.bind(function (data) {\r\n if (typeof onError === 'function') {\r\n onError(data);\r\n }\r\n }, this));\r\n }\r\n});","PJQ.views.sharing = {};\n\nPJQ.views.sharing.SharingModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Share'),\n\t\tsubTemplates: {\n\t\t\tcontact: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Contact'),\n\t\t\temailBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Email-Badge')\n\t\t},\n\t\tisEmailOnly: false,\n\t\tcanEditSubject: true,\n\t\tsubject: 'Files have been shared with you',\n\t\tpreventExpiration: null,\n\t\tonSave: null,\n\t\tonCancel: null\n\t},\n\tevents: {\n\t\t'click .input-share-link,.btn-share-link-copy': 'copyShareLink',\n\t\t'keyup .input-share-search': 'searchChanged',\n\t\t'click .share-contact': 'addEmail',\n\t\t'click .share-email-delete': 'deleteEmail',\n\t\t'change .cb-prevent-expire': 'preventExpiration',\n\t\t'click .modal-share-send': 'send',\n\t\t'click .modal-share-cancel': 'cancel'\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.selectedEmails = [];\n\t\tthis.options.preventExpiration = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_SHARE_PREVENT_EXPIRATION);\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tif (_.size(this.options.url) === 0) {\n\t\t\tthis.urlLoader = new PJQ.Loader(this.$('.share-link-outer'), {\n\t\t\t\ttype: 'small'\n\t\t\t});\n\t\t}\n\n\t\tif (this.options.project != null) {\n\t\t\tlet contactsLoader = new PJQ.Loader(this.$('.share-contacts-outer'));\n\t\t\tthis.options.project.fetchProjectContacts(_.bind(function () {\n\t\t\t\tthis.contacts = this.options.project.projectContacts;\n\t\t\t\tcontactsLoader.remove();\n\t\t\t\tthis.searchChanged();\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.contacts = new PJQ.collections.contacts.Contacts();\n\t\t\tthis.searchChanged();\n\t\t}\n\n\t\tthis.renderPreventExpire();\n\t},\n\tcopyShareLink: function () {\n\t\tthis.$('.input-share-link')[0].select();\n\t\tdocument.execCommand(\"copy\");\n\t\tlet linkCopiedText = this.$('.text-link-copied');\n\t\tlinkCopiedText.animateCSS('fadeIn', function () {\n\t\t\tsetTimeout(function () {\n\t\t\t\tlinkCopiedText.animateCSS('fadeOut');\n\t\t\t}, 1500);\n\t\t});\n\t},\n\turlChanged: function (url) {\n\t\tif (_.size(url) > 0 && !this.options.isEmailOnly) {\n\t\t\tthis.options.url = url;\n\t\t\tthis.$('.input-share-link').val(url);\n\t\t\tthis.$('.share-link-outer').removeClass('hidden');\n\t\t\tif (this.urlLoader != null) {\n\t\t\t\tthis.urlLoader.remove();\n\t\t\t\tthis.urlLoader = null;\n\t\t\t}\n\t\t}\n\n\t\tthis.renderPreventExpire();\n\t},\n\tsearchChanged: function () {\n\t\tlet searchText = this.$('.input-share-search').val().toLowerCase(),\n\t\t\tfilteredContacts;\n\t\tif (_.size(searchText) > 0) {\n\t\t\tfilteredContacts = _.filter(this.contacts.models, _.bind(function (contact) {\n\t\t\t\tlet email = contact.get('email').toLowerCase();\n\t\t\t\tif (_.size(email) === 0 || _.indexOf(this.selectedEmails, email) !== -1) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn contact.get('contactName').toLowerCase().indexOf(searchText) !== -1 || email.indexOf(searchText) !== -1;\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tfilteredContacts = _.filter(this.contacts.models, _.bind(function (contact) {\n\t\t\t\tlet email = contact.get('email').toLowerCase();\n\t\t\t\treturn _.size(email) > 0 && _.indexOf(this.selectedEmails, email) === -1;\n\t\t\t}, this))\n\t\t}\n\n\t\tlet $addEmail = this.$('.share-add-email'),\n\t\t\tisValidEmail = PJQ.helpers.validators.validateEmail(searchText).success;\n\t\tif (isValidEmail && _.size(filteredContacts) === 0) {\n\t\t\tthis.$('.share-suggested-contacts').append($('<div>', {\n\t\t\t\ttext: searchText\n\t\t\t}));\n\t\t\tthis.$('.share-add-email .share-contact').data('email', searchText);\n\t\t\tthis.$('.share-email-entry-letter').html(searchText[0].toUpperCase());\n\t\t\tthis.$('.share-email-entry').text(searchText);\n\t\t\t$addEmail.removeClass('hidden');\n\t\t}\n\t\telse {\n\t\t\t$addEmail.addClass('hidden');\n\t\t}\n\n\t\tlet $searchResults = this.$('.share-search-results'),\n\t\t\t$searchResultsOuter = this.$('.share-search-results-outer');\n\t\t$searchResults.empty();\n\t\tif (_.size(filteredContacts) > 0) {\n\t\t\t_.each(_.sortBy(filteredContacts, function (contact) {\n\t\t\t\treturn contact.get('contactName')\n\t\t\t}), _.bind(function (contact) {\n\t\t\t\tthis.renderSubTemplate(true, this.options.subTemplates.contact, $searchResults, {\n\t\t\t\t\tmodel: contact\n\t\t\t\t});\n\t\t\t}, this));\n\n\t\t\t$searchResultsOuter.removeClass('hidden');\n\t\t}\n\t\telse {\n\t\t\t$searchResultsOuter.addClass('hidden');\n\t\t}\n\n\t\tlet $noResults = this.$('.share-search-no-results');\n\t\tif (isValidEmail || _.size(filteredContacts) > 0) {\n\t\t\t$noResults.addClass('hidden');\n\t\t}\n\t\telse {\n\t\t\t$noResults.removeClass('hidden');\n\t\t}\n\t},\n\trenderRecipientCount: function () {\n\t\tlet emailCount = _.size(this.selectedEmails);\n\t\tthis.$('.recipient-count').html(emailCount.toString() + (emailCount === 1 ? ' recipient' : ' recipients'));\n\t},\n\taddEmail: function (e) {\n\t\tlet email = $(e.currentTarget).closest('.share-contact').data('email');\n\t\tthis.renderSubTemplate(true, this.options.subTemplates.emailBadge, this.$('.share-selected-emails'), {\n\t\t\temail: email\n\t\t});\n\t\tthis.selectedEmails.push(email.toLowerCase());\n\t\tthis.$('.input-share-search').val('');\n\t\tthis.searchChanged();\n\t\tthis.$('.modal-share-send').prop('disabled', false);\n\t\tthis.renderRecipientCount();\n\t},\n\tdeleteEmail: function (e) {\n\t\tlet emailContainer = $(e.currentTarget).closest('.share-email');\n\t\tthis.selectedEmails = _.without(this.selectedEmails, emailContainer.data('email').toLowerCase());\n\t\temailContainer.remove();\n\t\tthis.searchChanged();\n\t\tthis.$('.modal-share-send').prop('disabled', _.size(this.selectedEmails) === 0);\n\t\tthis.renderRecipientCount();\n\t},\n\tsend: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave({\n\t\t\t\temails: this.selectedEmails,\n\t\t\t\tsubject: this.options.canEditSubject ? this.$('.input-share-subject').val() : null\n\t\t\t});\n\t\t}\n\t},\n\tcancel: function () {\n\t\tif (typeof this.options.onCancel === 'function') {\n\t\t\tthis.options.onCancel();\n\t\t}\n\t},\n\tpreventExpiration: function () {\n\t\tthis.options.preventExpiration = this.$('.cb-prevent-expire').prop('checked');\n\n\t\tif (this.options.preventExpiration) {\n\t\t\tPJQ.notifications.createNotifyModal({\n\t\t\t\theader: 'Prevent Drawing Link Expiration',\n\t\t\t\tnotification: \"You have selected for this share link to prevent expiration. <b>With this selected, all drawings in the selected versions will be included in this share</b> and any individual drawing selections you made will be removed.\",\n\t\t\t\tcookie: PJQ.constants.cookies.NOTIFY_DRAWING_SHARE_PREVENT_EXPIRE,\n\t\t\t});\n\t\t}\n\n\t\tif (this.collection != null) {\n\t\t\tthis.collection.options.allDrawings = this.options.preventExpiration;\n\t\t\tthis.collection.update();\n\t\t}\n\n\t\tthis.renderPreventExpire();\n\t},\n\trenderPreventExpire: function () {\n\t\tif (this.collection != null && _.size(this.collection.options.versionIds) > 0) {\n\t\t\tthis.$('.prevent-expire-outer').removeClass('hidden');\n\t\t\tthis.$('.prevent-expire').prop('checked', this.options.preventExpiration);\n\t\t}\n\n\t\tif (this.options.preventExpiration) {\n\t\t\tthis.$preventExpireAlert = new PJQ.Alert(this.$('.alert-header'), {\n\t\t\t\ttext: 'You have selected for this link to prevent expiration. With this selected, only full versions can be shared. When drawings in the shared versions change, this link will be updated with the changes.'\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (this.$preventExpireAlert != null) {\n\t\t\t\tthis.$preventExpireAlert.destroy();\n\t\t\t\tthis.$preventExpireAlert = null;\n\t\t\t}\n\t\t}\n\t}\n});","PJQ.views.signatures = {};\nPJQ.views.signatures.SignatureSubmitModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Signature-Submit'),\n headerText: 'Sign Below',\n headerSubText: '',\n fetchSignature: true\n },\n events: {\n 'click .signature-erase': 'onErase',\n 'click .signature-close': 'onClose',\n 'click .signature-submit': 'onSubmit'\n },\n afterRender: function () {\n this.$canvas = this.$('.signature-canvas');\n this.canvas = this.$canvas[0];\n this.renderSignaturePad();\n\n if(this.options.fetchSignature) {\n this.fetchUserSignature();\n }\n else{\n let signature = this.options.signature;\n this.isNewSignature = true;\n\n if(signature){\n this.signaturePad.fromDataURL(signature);\n }\n }\n },\n renderData: function () {\n return {\n options: this.options\n }\n },\n renderSignaturePad: function () {\n if (this.signaturePad != null) {\n this.signaturePad.off();\n }\n\n this.signaturePad = new SignaturePad(this.canvas);\n this.signaturePad.minWidth = 1;\n this.signaturePad.maxWidth = 1;\n this.resizeCanvas();\n },\n onSubmit: function () {\n new PJQ.Loader(this.$('.modal-content'));\n if (this.options.onSubmit && !this.isSubmitted) {\n this.isSubmitted = true;\n this.options.onSubmit(this.isNewSignature ? this.signaturePad.toDataURL() : null, _.bind(function () {\n this.removeModal();\n }, this));\n }\n },\n onClose: function () {\n if (this.options.onClose) {\n this.options.onClose(this.model);\n }\n },\n onErase: function () {\n this.isNewSignature = true;\n this.renderSignaturePad();\n },\n resizeCanvas: function () {\n let ratio = Math.max(window.devicePixelRatio || 1, 1);\n this.canvas.width = this.canvas.offsetWidth * ratio;\n this.canvas.height = this.canvas.offsetHeight * ratio;\n this.canvas.getContext(\"2d\").scale(ratio, ratio);\n },\n fetchUserSignature: function () {\n this.signaturePad.off();\n this.signaturePad.fromDataURL(PJQ.helpers.urlHelpers.buildAPIURL('/users/signature', false, true));\n new PJQ.ajax.Request({\n endpoint: \"/users/signature\"\n }).get().done(_.bind(function () {\n //If it gets here at all, that means the user doesnt have a signature\n //jQuery ajax will not call done on requests for files\n this.isNewSignature = true;\n this.signaturePad.on();\n }, this));\n }\n});\n\nPJQ.views.signatures.SignatureTermsModal = PJQ.views.signatures.SignatureSubmitModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Signature-Terms'),\n maxWidth: '1200px',\n fitHeight: true\n },\n beforeRender: function () {\n this.renderData = {\n terms: this.options.terms\n }\n }\n});","PJQ.Slider = class {\n\tconstructor($el, options = {}) {\n\t\tthis.$el = $el;\n\t\tthis.options = _.defaults(options, {\n\t\t\tfitHorizontal: true,\n\t\t\tonChange: _.noop\n\t\t});\n\t\tif (_.size(this.$el) > 0) {\n\t\t\tthis.slider = this.$el.bootstrapSlider(this.options).on('change', _.bind(this.onChange, this));\n\t\t\tif (this.options.fitHorizontal) {\n\t\t\t\tthis.$el.prev('.slider.slider-horizontal').addClass('wd-100');\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\trefresh() {\n\t\tthis.slider.bootstrapSlider('refresh');\n\t}\n\n\tgetValue() {\n\t\treturn this.slider.bootstrapSlider('getValue');\n\t}\n\n\tsetValue(value) {\n\t\tthis.slider.bootstrapSlider('setValue', value);\n\t}\n\n\tonChange(obj) {\n\t\tthis.options.onChange(obj.value);\n\t}\n};","PJQ.Sortable = class {\n\tconstructor($el, options = {}) {\n\t\tlet self = this;\n\t\tself.$el = $el;\n\t\tself.options = _.defaults(options, {\n\t\t\tselectedClass: \"selected\",\n\t\t\tstart: function () {\n\t\t\t\tself.onStart();\n\t\t\t},\n\t\t\tstop: function (e, ui) {\n\t\t\t\tself.onStop(e, ui);\n\t\t\t}\n\t\t});\n\t\tif (_.size(self.$el) > 0 && _.size(self.options.items) > 0) {\n\t\t\tself.$el.find(self.options.items).addClass('sortable-item');\n\t\t\tif (self.options.multiple) {\n\t\t\t\tself.$el.multisortable(self.options);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tself.$el.sortable(self.options);\n\t\t\t}\n\t\t}\n\t}\n\n\trefreshPositions() {\n\t\tif (this.options.multiple) {\n\t\t\tthis.$el.multisortable(\"refreshPositions\");\n\t\t}\n\t\telse {\n\t\t\tthis.$el.sortable(\"refreshPositions\");\n\t\t}\n\t}\n\n\tgetSelected() {\n\t\treturn this.$el.find(this.options.items).filter(\".\" + this.options.selectedClass);\n\t}\n\n\tmoveSelectedTop() {\n\t\tthis.getSelected().prependTo(this.$el);\n\t\tthis.$el.scrollTop(0);\n\t\tthis.onStop();\n\t}\n\n\tmoveSelectedBottom() {\n\t\tthis.getSelected().appendTo(this.$el);\n\t\tthis.$el.scrollTop(this.$el.height() + 100);\n\t\tthis.onStop();\n\t}\n\n\tonStop(e, ui) {\n\t\tif (typeof this.options.onStop === 'function') {\n\t\t\tthis.options.onStop(e, ui);\n\t\t}\n\t}\n\n\tonStart() {\n\t\tif (typeof this.options.onStart === 'function') {\n\t\t\tthis.options.onStart();\n\t\t}\n\t}\n};","PJQ.StepIndicator = class {\n constructor($el, options = {}) {\n this.$el = $el;\n this.options = _.defaults(options, {});\n this.steps = this.options.steps ?? [];\n this.activeStep = this.options.activeStep ?? 0;\n if (_.size(this.$el) > 0) {\n this.refresh();\n }\n }\n\n refresh() {\n let html = '<div class=\"stepper-wrapper\">';\n _.each(this.steps, (step, index) => {\n let statusClass = '';\n if (this.activeStep === index) {\n statusClass = 'active';\n } else if (this.activeStep > index) {\n statusClass = 'completed';\n }\n html += '<div class=\"stepper-item ' + statusClass + '\"><div class=\"step-counter\">' + (index + 1).toString() + '</div><div class=\"step-name\">' + step.name + '</div></div>';\n });\n\n html += '</div>';\n this.$el.html(html);\n }\n\n setStep(step) {\n\n }\n};","PJQ.constants.subscriptions = {\n\ttypes: {\n\t\tFREE: 1,\n\t\tBASIC: 2,\n\t\tPRO: 3,\n\t\tENTERPRISE: 4\n\t},\n\tcolors: {\n\t\t1: \"#7e7e7e\",\n\t\t2: \"#EF6C00\",\n\t\t3: \"#3073bb\",\n\t\t4: \"#5E35B1\"\n\t},\n\tnames: {\n\t\t1: \"FREE\",\n\t\t2: \"BASIC\",\n\t\t3: \"PRO\",\n\t\t4: \"ENTERPRISE\"\n\t},\n\tnames: {\n\t\t1: \"FREE\",\n\t\t2: \"BASIC\",\n\t\t3: \"PRO\",\n\t\t4: \"ENTERPRISE\"\n\t},\n\tcosts: {\n\t\t1: 0,\n\t\t2: 999,\n\t\t3: 1999,\n\t\t4: 4999\n\t}\n};\n\nPJQ.models.subscriptions = {};\n\nPJQ.models.subscriptions.Subscription = PJQ.models.BaseModel.extend({\n\tidAttribute: 'subscriptionId',\n\tparse: function (model) {\n\t\tif (model != null) {\n\t\t\tif (model.newSubscription != null) {\n\t\t\t\tthis.newSubscription = new PJQ.models.subscriptions.Subscription(model.newSubscription);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.newSubscription = null;\n\t\t\t}\n\t\t}\n\t\treturn model;\n\t},\n\thasFeature: function (feature) {\n\t\tif (PJQ.app.session.get('onAccount') || (PJQ.app.session.get('portalId') !== PJQ.constants.panteraPortalId)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tswitch (feature.toLowerCase()) {\n\t\t\tcase 'projects':\n\t\t\t\treturn this.get('hasProjects');\n\t\t\tcase 'contacts':\n\t\t\t\treturn this.get('hasContacts');\n\t\t\tcase 'documents':\n\t\t\t\treturn this.get('hasDocuments');\n\t\t\tcase 'calendar':\n\t\t\t\treturn this.get('hasCalendar');\n\t\t\tcase 'reports':\n\t\t\t\treturn this.get('hasReports');\n\t\t\tcase 'projectmessaging':\n\t\t\t\treturn this.get('hasProjectMessaging');\n\t\t\tcase 'privatemessaging':\n\t\t\t\treturn this.get('hasPrivateMessaging');\n\t\t\tcase 'bidforms':\n\t\t\t\treturn this.get('hasBidForms');\n\t\t\tcase 'drawings':\n\t\t\t\treturn this.get('hasDrawings');\n\t\t\tcase 'projectattachments':\n\t\t\t\treturn this.get('hasProjectAttachments');\n\t\t\tcase 'rfi':\n\t\t\t\treturn this.get('hasRFI');\n\t\t\tcase 'submittals':\n\t\t\t\treturn this.get('hasSubmittals');\n\t\t\tcase 'dailyreports':\n\t\t\t\treturn this.get('hasDailyReports');\n\t\t\tcase 'schedule':\n\t\t\t\treturn this.get('hasSchedule');\n\t\t\tcase 'punchlist':\n\t\t\t\treturn this.get('hasPunchList');\n\t\t\tcase 'actionitems':\n\t\t\t\treturn this.get('hasActionItems');\n\t\t\tcase 'projectreports':\n\t\t\t\treturn this.get('hasProjectReports');\n\t\t\tcase 'bidfiler':\n\t\t\t\treturn this.get('hasBidFiler');\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t},\n\tgetCostsPerUser: function (callback) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'subscription'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'cost'\n\t\t\t\t}\n\t\t\t])\n\t\t}).get().done(_.bind(function (data) {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(data);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function () {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(data);\n\t\t\t}\n\t\t}, this));\n\t}\n});\n\nPJQ.views.subscriptions = {};\n\nPJQ.views.subscriptions.EditSubscriptionModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-edit-subscription'),\n\t\tmaxWidth: 1200,\n\t\tisVerticalCenter: true,\n\t\tisShowCloseButton: true,\n\t\tpreventTrial: false,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t'click .sub-option': 'subscriptionSelected',\n\t\t'click .btn-submit': 'submit',\n\t\t'click .btn-submit-trial': 'submitTrial'\n\t},\n\tbeforeModalCreated: function () {\n\t\tif (PJQ.app.session.subscription.id !== PJQ.constants.subscriptions.types.FREE) {\n\t\t\tthis.selectedSubscriptionId = PJQ.app.session.subscription.id;\n\t\t}\n\t\telse {\n\t\t\tthis.selectedSubscriptionId = PJQ.constants.subscriptions.types.FREE;\n\t\t}\n\n\t\tthis.options.forTrialOffer = !this.options.preventTrial && (PJQ.app.session.subscription.get('trialExpiresOn') == null || (PJQ.helpers.dateHelpers.getDateDiff(new Date(PJQ.app.session.subscription.get('trialExpiresOn')), new Date(), 'days') + 1) > 0);\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tforTrialOffer: this.options.forTrialOffer,\n\t\t\tactiveSubscription: PJQ.app.session.subscription,\n\t\t\tselectedSubscriptionId: this.selectedSubscriptionId\n\t\t}\n\t},\n\tsubscriptionSelected: function (e) {\n\t\tthis.selectedSubscriptionId = parseInt($(e.currentTarget).data('subId'));\n\t\tthis.render();\n\t},\n\tsubmitTrial: function () {\n\t\tlet $err = this.$('.error-outer');\n\t\tif (this.selectedSubscriptionId === PJQ.constants.subscriptions.types.FREE) {\n\t\t\t$err.html('Please select a plan');\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\t$err.empty();\n\t\t}\n\n\t\tPJQ.app.session.updateTrial(this.selectedSubscriptionId, _.bind(function (data) {\n\t\t\tif (data == null || data.subscription == null) {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Encountered an error starting your free trial. Please contact customer service.'\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\tmessage: 'Free trial started'\n\t\t\t\t});\n\t\t\t\tthis.removeModal();\n\t\t\t}\n\t\t}, this), _.bind(function () {\n\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\tmessage: 'Encountered an error starting your free trial. Please contact customer service.'\n\t\t\t});\n\t\t\tthis.removeModal();\n\t\t}, this));\n\t},\n\tsubmit: function () {\n\t\tlet $err = this.$('.error-outer'),\n\t\t\tnewSubscription = PJQ.app.session.subscription.get('newSubscription');\n\t\tif (this.selectedSubscriptionId === PJQ.constants.subscriptions.types.FREE) {\n\t\t\t$err.html('Please select a plan');\n\t\t\treturn;\n\t\t}\n\t\telse if (this.selectedSubscriptionId === PJQ.app.session.subscription.id && newSubscription == null) {\n\t\t\t$err.html('This plan is already active on your account');\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\t$err.empty();\n\t\t}\n\n\t\tif (PJQ.app.session.subscription.get('isFreeTrial') || this.selectedSubscriptionId > PJQ.app.session.subscription.id) {\n\t\t\t// this is an upgrade that will trigger a payment, show the payment modal\n\t\t\tthis.removeModal();\n\t\t\tnew PJQ.views.payment.SubscriptionPaymentModal({\n\t\t\t\tselectedSubscriptionId: this.selectedSubscriptionId\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t// this is a change that wont trigger a payment, upgrade the subscription\n\t\t\tlet loader = new PJQ.Loader(this.$('.modal-content')),\n\t\t\t\terr = function () {\n\t\t\t\t\tloader.remove();\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: 'Encountered an error upgrading your subscription. Please contact customer service.'\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\tPJQ.app.session.changeSubscription(this.selectedSubscriptionId, _.bind(function (data) {\n\t\t\t\tif (data == null || data.subscription == null) {\n\t\t\t\t\terr();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Subscription successfully updated'\n\t\t\t\t\t});\n\t\t\t\t\tthis.removeModal();\n\n\t\t\t\t\tif(typeof this.options.onSave === 'function'){\n\t\t\t\t\t\tthis.options.onSave();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this), _.bind(function () {\n\t\t\t\terr();\n\t\t\t}, this));\n\t\t}\n\t},\n});\n\nPJQ.views.subscriptions.DisableAutoRenewModal = PJQ.views.BaseModal.extend({\n\tbeforeModalCreated: function () {\n\t\tthis.options = _.defaults({\n\t\t\theader: \"Disable Auto Renew\",\n\t\t\tbody: \"Are you sure you want to disable auto-renew?<br />Your users will continue to have access to your current subscription's features until it expires on <strong>\" + PJQ.helpers.dateHelpers.getDateString(new Date(this.options.subscription.get('expiresOn')), PJQ.helpers.dateHelpers.dateFormats.DATE, true) + \"</strong>.\",\n\t\t\tisShowOkButton: true,\n\t\t\tokButtonColorClass: 'danger',\n\t\t\tokButtonText: \"Disable Auto-Renew\",\n\t\t\tonOk: _.bind(function () {\n\t\t\t\tif (typeof this.options.onYes === 'function') {\n\t\t\t\t\tthis.options.onYes();\n\t\t\t\t}\n\t\t\t}, this),\n\t\t\tisShowSecondaryButton: true,\n\t\t\tsecondaryButtonText: \"Keep Auto-Renew Enabled\",\n\t\t\tonSecondary: _.bind(function () {\n\t\t\t\tif (typeof this.options.onNo === 'function') {\n\t\t\t\t\tthis.options.onNo();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t}, this.options);\n\t}\n});","PJQ.TokenManager = class {\n\tUPDATE_EVENT = 'TOKENS_UPDATED';\n\n\tconstructor(options = {}) {\n\t\tthis.Key_Access_Token = 'access_token';\n\t\tthis.Key_Refresh_Token = 'refresh_token';\n\n\t\tthis.enabled = options && options.enabled === true;\n\t\tthis.setAccessToken(options.accessToken);\n\t\tthis.setRefreshToken(options.refreshToken);\n\n\t\tif (this.enabled) {\n\t\t\tthis.addBroadcastChannelListener();\n\t\t}\n\t}\n\n\taddBroadcastChannelListener() {\n\t\tthis.bc = new BroadcastChannel('TOKEN_CHANNEL');\n\t\tthis.bc.addEventListener(\"message\", _.bind(function (event) {\n\t\t\tif (event.data != null) {\n\t\t\t\tthis.setAccessToken(event.data.accessToken);\n\t\t\t\tthis.setRefreshToken(event.data.refreshToken);\n\t\t\t}\n\t\t}, this));\n\t}\n\n\tsetAccessToken(accessToken) {\n\t\twindow.sessionStorage.removeItem(this.Key_Access_Token);\n\t\tif (_.size(accessToken) > 0) {\n\t\t\twindow.sessionStorage.setItem(this.Key_Access_Token, accessToken);\n\t\t}\n\t}\n\n\tsetRefreshToken(refreshToken) {\n\t\twindow.sessionStorage.removeItem(this.Key_Refresh_Token);\n\t\tif (_.size(refreshToken)) {\n\t\t\twindow.sessionStorage.setItem(this.Key_Refresh_Token, refreshToken);\n\t\t}\n\t}\n\n\tupdateTokens(accessToken, refreshToken, opts = {}) {\n\t\tthis.setAccessToken(accessToken);\n\t\tthis.setRefreshToken(refreshToken);\n\n\t\tif (opts.expiresOn != null) {\n\t\t\tthis.updateCookies(opts.expiresOn, opts.onCookiesUpdated, opts.cookieParams);\n\t\t}\n\n\t\tif (opts.broadcast !== false) {\n\t\t\tnew BroadcastChannel('TOKEN_CHANNEL').postMessage({\n\t\t\t\taccessToken: this.getAccessToken(),\n\t\t\t\trefreshToken: this.getRefreshToken()\n\t\t\t});\n\t\t}\n\t}\n\n\tupdateCookies(expiresOn, callback, params = []) {\n\t\tlet accessToken = this.getAccessToken(),\n\t\t\trefreshToken = this.getRefreshToken();\n\t\tif (_.size(refreshToken) > 0 && _.size(accessToken) > 0 && expiresOn != null) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: PJQ.app.options.isK8 ? 'token' : 'Token.ashx'\n\t\t\t\t\t}\n\t\t\t\t], _.union(params, [\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'r',\n\t\t\t\t\t\tvalue: refreshToken\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'a',\n\t\t\t\t\t\tvalue: accessToken\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'exp',\n\t\t\t\t\t\tvalue: expiresOn\n\t\t\t\t\t}\n\t\t\t\t])),\n\t\t\t\tisOrigin: true\n\t\t\t}).get().done(_.bind(function () {\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(true);\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function () {\n\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\tcallback(false);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t}\n\t}\n\n\tgetRefreshToken() {\n\t\treturn window.sessionStorage.getItem(this.Key_Refresh_Token);\n\t}\n\n\tgetAccessToken() {\n\t\treturn window.sessionStorage.getItem(this.Key_Access_Token);\n\t}\n\n\tgetTokensForAccessKey(accessKey, callback) {\n\t\treturn this.getTokensForUser(null, null, callback, {accessKey: accessKey});\n\t}\n\n\tgetTokensForUser(username, password, callback, options = {}) {\n\t\tlet cb = function (success, error) {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(success != null ? success : false, error != null ? error : null);\n\t\t\t}\n\t\t}\n\n\t\tlet params;\n\t\tif (_.size(options.accessKey) > 0) {\n\t\t\tif (_.size(this.getAccessToken()) > 0 && this.accessKey === options.accessKey) {\n\t\t\t\tcb(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.accessKey = options.accessKey;\n\t\t\tparams = [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'accessKey',\n\t\t\t\t\tvalue: options.accessKey\n\t\t\t\t}\n\t\t\t];\n\t\t} else {\n\t\t\tparams = [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'username',\n\t\t\t\t\tvalue: username\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparameter: 'password',\n\t\t\t\t\tvalue: password\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'token'\n\t\t\t\t}\n\t\t\t], params),\n\t\t\tisAPIv2: true\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tif (_.size(data.access_token) > 0) {\n\t\t\t\tthis.updateTokens(data.access_token, data.refresh_token);\n\t\t\t\tlet headers = {\n\t\t\t\t\tAuthorization: \"Bearer \" + data.access_token\n\t\t\t\t};\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'token'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tendpoint: 'signin'\n\t\t\t\t\t\t}\n\t\t\t\t\t]),\n\t\t\t\t\theaders: headers\n\t\t\t\t}).get().done(_.bind(function (sessionData) {\n\t\t\t\t\tif (sessionData.success) {\n\t\t\t\t\t\tthis.updateTokens(data.access_token, data.refresh_token, {\n\t\t\t\t\t\t\texpiresOn: PJQ.helpers.dateHelpers.getNewDateAddSeconds(new Date(), 300),\n\t\t\t\t\t\t\tcookieParams: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparameter: 'dnn',\n\t\t\t\t\t\t\t\t\tvalue: sessionData.cookie\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tparameter: 's',\n\t\t\t\t\t\t\t\t\tvalue: sessionData.sessionId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tonCookiesUpdated: _.bind(function () {\n\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcb(true, 'CUSTOMER_SERVICE');\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t} else {\n\t\t\t\tcb(false, _.size(data.error) > 0 ? data.error : 'CUSTOMER_SERVICE');\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (data) {\n\t\t\tcb(false, _.size(data.error) > 0 ? data.error : 'CUSTOMER_SERVICE');\n\t\t}, this));\n\t}\n\n\trefreshAccessToken(callback) {\n\t\tlet refreshToken = this.getRefreshToken();\n\t\tif (_.size(refreshToken) > 0) {\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'token'\n\t\t\t\t\t}\n\t\t\t\t], [\n\t\t\t\t\t{\n\t\t\t\t\t\tparameter: 'refresh_token',\n\t\t\t\t\t\tvalue: refreshToken\n\t\t\t\t\t}\n\t\t\t\t]),\n\t\t\t\tisAPIv2: true,\n\t\t\t\tcanAuthRetry: false\n\t\t\t}).post().done(_.bind(function (data) {\n\t\t\t\tif (_.size(data.access_token) > 0) {\n\t\t\t\t\tthis.updateTokens(data.access_token, data.refresh_token, {\n\t\t\t\t\t\texpiresOn: PJQ.helpers.dateHelpers.getNewDateAddSeconds(new Date(), data.expires_in),\n\t\t\t\t\t\tonCookiesUpdated: _.bind(function () {\n\t\t\t\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\t\t\t\tcallback(this.getAccessToken());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t} else if (typeof callback === 'function') {\n\t\t\t\t\tcallback(this.getAccessToken());\n\t\t\t\t}\n\t\t\t}, this)).fail(_.bind(function () {\n\t\t\t\tthis.handleUnauthorized();\n\t\t\t}, this));\n\t\t} else {\n\t\t\tthis.handleUnauthorized();\n\t\t}\n\t}\n\n\thandleUnauthorized() {\n\t\tif (PJQ.app.options.isK8) {\n\t\t\twindow.location.href = \"/signout\";\n\t\t} else {\n\t\t\twindow.location.href = \"/Signout.aspx?r=\" + encodeURIComponent(window.location.origin + '/#signin');\n\t\t}\n\t}\n};","PJQ.views.toolbars = {};\n\nPJQ.views.toolbars.BaseToolbar = PJQ.views.BaseView.extend({\n\tbeforeFirstRender: function () {\n\t\tlet $outer = _.size(this.$el) > 0 ? this.$el : $('body');\n\t\tlet $toolbarsContainer = $outer.find('#toolbarsContainer');\n\t\tif (_.size($toolbarsContainer) === 0) {\n\t\t\t$toolbarsContainer = $('<div>', {\n\t\t\t\tid: 'toolbarsContainer'\n\t\t\t});\n\t\t\t$outer.append($toolbarsContainer);\n\t\t}\n\t\tthis.setElement($toolbarsContainer);\n\t},\n\thide: function () {\n\t\tlet $animate = this.$('.toolbar');\n\t\t$animate.animate({\n\t\t\theight: '0px'\n\t\t}, 300, _.bind(function () {\n\t\t\t$animate.addClass('hidden');\n\t\t}, this));\n\t},\n\tshow: function () {\n\t\tthis.$('.toolbar').removeClass('hidden').animate({\n\t\t\theight: '50px'\n\t\t});\n\t},\n\tsave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave();\n\t\t}\n\t},\n\tclose: function () {\n\t\tif (typeof this.options.onClose === 'function') {\n\t\t\tthis.options.onClose();\n\t\t}\n\n\t\tlet $animate = this.$('.toolbar');\n\t\t$animate.animate({\n\t\t\theight: '0px'\n\t\t}, 300, _.bind(function () {\n\t\t\t$animate.addClass('hidden');\n\t\t}, this));\n\t}\n});\n\nPJQ.views.toolbars.ProfileSaveToolbar = PJQ.views.toolbars.BaseToolbar.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Profile-Save'),\n\t\thideWhenZero: true,\n\t\tonClose: null,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t'click .btn-profile-save': 'save',\n\t\t'click .btn-profile-cancel-save': 'close'\n\t},\n\tafterRender: function () {\n\t\tthis.workAreaCount = 0;\n\t\tsetTimeout(_.bind(function () {\n\t\t\tthis.listenTo(this.options.model, 'change', _.bind(this.renderChangedCount, this));\n\t\t\tthis.listenTo(this.options.workAreaMap, 'update', _.bind(this.renderChangedCount, this));\n\t\t\t_.each(this.options.workAreaMap.models, function (model) {\n\t\t\t\tif (model) {\n\t\t\t\t\tthis.workAreaCount += 1\n\t\t\t\t}\n\t\t\t}, this);\n\t\t\tthis.groupsCount = this.options.groupSelector.getGroupsData().selected.length;\n\t\t\tthis.renderChangedCount();\n\t\t}, this), 500)\n\t},\n\tautoShowToolbar: function () {\n\t\tthis.$('.btn-profile-save, .btn-profile-cancel-save').prop('disabled', false);\n\t\tlet $animate = this.$('.toolbar');\n\t\t$animate.removeClass('hidden').animate({\n\t\t\theight: '50px'\n\t\t});\n\t},\n\trenderChangedCount: function () {\n\t\tlet profileChanged = this.options.model.hasChanged(),\n\t\t\tgroupsChanged = this.options.groupSelector.getGroupsData().selected.length,\n\t\t\tnewWorkCount = this.options.workAreaMap.length,\n\t\t\t$animate = this.$('.toolbar'),\n\t\t\tisHidden = $animate.hasClass('hidden');\n\t\tif (this.options.hideWhenZero && !profileChanged && !isHidden && newWorkCount === this.workAreaCount && groupsChanged === this.groupsCount || !this.options.isEdit) {\n\t\t\tthis.$('.btn-profile-save, .btn-profile-cancel-save').prop('disabled', true);\n\t\t\tthis.close();\n\t\t}\n\t\telse if ((isHidden && profileChanged) || (isHidden && newWorkCount !== this.workAreaCount) || (isHidden && groupsChanged !== this.groupsCount)) {\n\t\t\tthis.$('.btn-profile-save, .btn-profile-cancel-save').prop('disabled', false);\n\t\t\t$animate.removeClass('hidden').animate({\n\t\t\t\theight: '50px'\n\t\t\t});\n\t\t}\n\t}\n});\n\nPJQ.views.toolbars.SettingsSaveToolbar = PJQ.views.toolbars.BaseToolbar.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Toolbar-Save'),\n\t\tvalidate: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-settings-save': 'save',\n\t\t'click .btn-settings-cancel-save': 'clearSaveModels'\n\t},\n\tbeforeFirstRender: function () {\n\t\tthis.saveArray = [];\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.renderToolbar();\n\t},\n\taddSaveModel: function (saveModel) {\n\t\tthis.saveArray = _.reject(this.saveArray, function (md) {\n\t\t\treturn md.cid === saveModel.cid\n\t\t});\n\t\tif (_.find(this.saveArray, function (md) {\n\t\t\treturn md.cid === saveModel.cid;\n\t\t}) == null) {\n\t\t\tthis.saveArray.push(saveModel);\n\t\t}\n\t\tthis.renderToolbar();\n\t},\n\tclearSaveModels: function () {\n\t\t_.each(this.saveArray, function (saveModel) {\n\t\t\tsaveModel.fetch();\n\t\t});\n\t\tthis.saveArray = [];\n\t\tthis.renderToolbar();\n\t},\n\trenderToolbar: function () {\n\t\tlet settingsCount = _.size(this.saveArray),\n\t\t\t$animate = this.$('.toolbar'),\n\t\t\tisHidden = $animate.hasClass('hidden');\n\t\tif (settingsCount === 0 && !isHidden) {\n\t\t\tthis.hide();\n\t\t}\n\t\telse if (isHidden && settingsCount > 0) {\n\t\t\tthis.show();\n\t\t}\n\t},\n\tsave: function () {\n\t\tlet callbackCounter = 0,\n\t\t\tfnCallback = _.bind(function () {\n\t\t\t\tcallbackCounter++;\n\t\t\t\tif (callbackCounter === _.size(this.saveArray)) {\n\t\t\t\t\tPJQ.notifications.notify.successNotify({\n\t\t\t\t\t\tmessage: 'Settings saved'\n\t\t\t\t\t});\n\t\t\t\t\tPJQ.app.session.fetch();\n\t\t\t\t\tthis.clearSaveModels();\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\tif (typeof this.options.validate !== 'function' || this.options.validate()) {\n\t\t\t_.each(this.saveArray, function (saveModel) {\n\t\t\t\tif (saveModel instanceof PJQ.models.users.User || saveModel instanceof PJQ.models.schedule.Settings || saveModel instanceof PJQ.models.bidForms.Settings || saveModel instanceof PJQ.models.submittals.Settings || saveModel instanceof PJQ.models.submittals.SubmittalUserSettings) {\n\t\t\t\t\tsaveModel.save(null, {\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tPJQ.app.navigator.refreshCommands();\n\t\t\t\t\t\t\tfnCallback();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (saveModel instanceof PJQ.models.rfi.Settings) {\n\t\t\t\t\tsaveModel.put(null, {\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tfnCallback();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsaveModel.patch(null, {\n\t\t\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\t\t\tfnCallback();\n\t\t\t\t\t\t}, this)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n});\n\nPJQ.views.toolbars.FilesToolbar = PJQ.views.toolbars.BaseToolbar.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Toolbar-Files'),\n\t\tpreviewImageDimension: 160,\n\t\thideWhenZero: true,\n\t\tisPhotos: false,\n\t\tonClose: _.noop\n\t},\n\tevents: {\n\t\t'click .btn-files-download': 'download',\n\t\t'click .btn-files-share': 'share',\n\t\t'click .toolbar-close': 'close'\n\t},\n\tbeforeRender: function () {\n\t\tif (this.collection == null) {\n\t\t\tthis.collection = new PJQ.collections.files.Files(null, {\n\t\t\t\tisPhotos: this.options.isPhotos\n\t\t\t});\n\t\t}\n\t\tthis.listenTo(this.collection, 'update', _.bind(this.renderSelectedCount, this));\n\t},\n\trenderData: function () {\n\t\treturn {\n\t\t\tcollection: this.collection,\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.renderSelectedCount();\n\t},\n\taddFiles: function (files) {\n\t\tthis.collection.add(files);\n\t},\n\tremoveFiles: function (files) {\n\t\tthis.collection.remove(files);\n\t},\n\trenderSelectedCount: function () {\n\t\tlet fileCount = _.size(this.collection.models),\n\t\t\t$animate = this.$('.toolbar'),\n\t\t\tisHidden = $animate.hasClass('hidden');\n\t\tif (this.options.hideWhenZero && fileCount === 0 && !isHidden) {\n\t\t\tthis.close();\n\t\t}\n\t\telse if (isHidden && fileCount > 0) {\n\t\t\t$animate.removeClass('hidden').animate({\n\t\t\t\theight: '50px'\n\t\t\t});\n\t\t}\n\t\tthis.$('.selected-files-label').html(fileCount.toString() + ' file' + (fileCount > 0 ? 's' : '') + ' selected');\n\t\tthis.$('.download-files, .btn-share').prop('disabled', fileCount === 0);\n\t},\n\tdownload: function () {\n\t\tlet fileCount = _.size(this.collection.models);\n\t\tif (fileCount > 1) {\n\t\t\tthis.collection.download();\n\t\t}\n\t\telse if (fileCount === 1) {\n\t\t\tthis.collection.models[0].download();\n\t\t}\n\t\telse {\n\t\t\t//todo: alert error\n\t\t\t//it should never get here anyway because we disable the download button when no files are selected\n\t\t}\n\t},\n\tshare: function () {\n\t\tlet project = PJQ.app.session.project;\n\t\tlet sharingModal = new PJQ.views.sharing.SharingModal({\n\t\t\tproject: project,\n\t\t\tonSave: _.bind(function (data) {\n\t\t\t\tthis.collection.share(data, project, _.bind(function (share) {\n\t\t\t\t\t//todo: show success somehow\n\t\t\t\t}, this));\n\t\t\t}, this)\n\t\t});\n\t\tthis.collection.share(null, project, function (share) {\n\t\t\tlet callback = _.bind(sharingModal.urlChanged, sharingModal);\n\t\t\tcallback(share.url);\n\t\t});\n\t},\n\tclose: function () {\n\t\tthis.collection.reset();\n\t\tthis.options.onClose();\n\t\tlet $animate = this.$('.toolbar');\n\t\t$animate.animate({\n\t\t\theight: '0px'\n\t\t}, 300, _.bind(function () {\n\t\t\t$animate.addClass('hidden');\n\t\t\tthis.$('.selected-file-count').html(0);\n\t\t}, this));\n\t}\n});\n\nPJQ.views.toolbars.ExportSelectedToolbar = PJQ.views.toolbars.BaseToolbar.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Toolbar-Export-Selected'),\n\t\tpreviewImageDimension: 160,\n\t\tselectedCount: 0,\n\t\tonExport: null,\n\t\tonClose: null\n\t},\n\tevents: {\n\t\t'click .btn-export': 'export',\n\t\t'click .toolbar-close': 'destroy'\n\t},\n\tafterRender: function () {\n\t\tthis.renderSelectedCount();\n\t\tthis.show();\n\t},\n\tupdateSelectedCount: function (newCount) {\n\t\tthis.options.selectedCount = newCount;\n\t\tthis.renderSelectedCount();\n\t},\n\trenderSelectedCount: function () {\n\t\tthis.$('.selected-label').html(this.options.selectedCount.toString() + ' selected');\n\t\tthis.$('.btn-export').prop('disabled', this.options.selectedCount === 0);\n\t},\n\texport: function () {\n\t\tif (typeof this.options.onExport === 'function') {\n\t\t\tthis.options.onExport();\n\t\t}\n\t},\n\tdestroy: function () {\n\t\tthis.hide();\n\t\tsetTimeout(_.bind(function () {\n\t\t\tthis.remove();\n\t\t}, this), 500)\n\t}\n});\n","PJQ.Tooltip = class {\n\tconstructor(el, options = {}) {\n\t\tif (el == null && _.size(options.container) > 0) {\n\t\t\tthis.$el = $('<div>', {\n\t\t\t\tclass: 'position-absolute wd-100 ht-100 left-0 top-0'\n\t\t\t});\n\t\t\toptions.container.append(this.$el);\n\t\t}\n\t\telse {\n\t\t\tthis.$el = el instanceof $ ? el : $(el);\n\t\t}\n\n\t\tif (!options.show) {\n\t\t\tthis.$el.addClass('popup-trigger');\n\t\t}\n\n\t\tthis.options = _.defaults(options, {\n\t\t\tplacement: 'auto',\n\t\t\ttrigger: options.show ? 'focus' : 'hover',\n\t\t\thtml: true,\n\t\t\tsanitize: false,\n\t\t\tallowMultiple: false,\n\t\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Tooltip-Default')\n\t\t});\n\t\tthis.init();\n\t}\n\n\tinit() {\n\t\tthis.getTemplate(_.bind(function ($tmpl) {\n\t\t\tthis.$el.popover(_.defaults({\n\t\t\t\tcontent: _.bind(function () {\n\t\t\t\t\treturn $tmpl.outerHTML();\n\t\t\t\t}, this)\n\t\t\t}, _.omit(this.options, 'template')));\n\n\t\t\tif (this.options.show) {\n\t\t\t\tthis.$el.popover('show');\n\t\t\t}\n\t\t\telse if (_.size(this.options.container) > 0) {\n\t\t\t\tlet self = this;\n\t\t\t\tthis.options.container.off('click.tooltip');\n\t\t\t\tthis.options.container.on('click.tooltip', function (e) {\n\t\t\t\t\tif ($(e.target).closest('.popup-trigger').length === 0) {\n\t\t\t\t\t\tself.options.container.children('.popover').popover('hide');\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!this.options.allowMultiple) {\n\t\t\t\t\tthis.$el.off('show.bs.popover');\n\t\t\t\t\tthis.$el.on('show.bs.popover', function () {\n\t\t\t\t\t\tself.options.container.children('.popover').not(this).popover('hide');\n\t\t\t\t\t});\n\n\t\t\t\t\tif (typeof this.options.onShow === 'function') {\n\t\t\t\t\t\tthis.options.onShow(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof this.options.afterRender === 'function') {\n\t\t\t\tthis.options.afterRender(this);\n\t\t\t}\n\t\t}, this))\n\t}\n\n\tgetTemplate(callback) {\n\t\tthis.options.template.render(this.renderData(), callback);\n\t}\n\n\trenderData() {\n\t\tif (this.options.renderData != null) {\n\t\t\tif (typeof this.options.renderData === 'function') {\n\t\t\t\treturn this.options.renderData();\n\t\t\t}\n\t\t\treturn this.options.renderData;\n\t\t}\n\t\treturn {\n\t\t\ttitle: this.options.title\n\t\t};\n\t}\n\n\tshow() {\n\t\tthis.$el.popover('show');\n\t}\n\n\thide() {\n\t\tthis.$el.popover('hide');\n\t}\n\n\tremove() {\n\t\tthis.$el.popover('dispose');\n\t\tif (_.size(this.options.container) > 0) {\n\t\t\tthis.options.container.find('.popover').remove();\n\t\t}\n\t\tthis.$el.off('show.bs.popover').off('shown.bs.popover');\n\t\tthis.options.container.off('click.tooltip');\n\t}\n};","PJQ.tours = {};\nPJQ.views.tours = {};\nPJQ.helpers.tours = {\n initTour: function () {\n if (!PJQ.app.session.get('onAccount') && !PJQ.app.session.user.get('tourDone') && PJQ.app.session.get('portalId') === PJQ.constants.panteraPortalId) {\n new PJQ.views.tours.SubscriptionTourIntro();\n }\n }\n};\n\nPJQ.tours.BaseTour = class {\n constructor(options = {}) {\n this.options = _.defaults(options, {\n onEnd: _.bind(function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'tour'\n }\n ])\n }).put().done(function () {\n }).fail(function () {\n });\n }, this),\n framework: 'bootstrap4',\n showIfUnintendedOrphan: true,\n showProgressText: false,\n showProgressBar: false,\n steps: [\n {\n element: \".nav-myprojects\",\n content: \"The Projects tab is where you can view, create, and manage all of your projects. Let's take a look at a sample project to get you familiar with some of the tools.\",\n container: '#Body',\n placement: 'auto',\n onShow: _.bind(function() {\n PJQ.app.router.navigate('myprojects', {\n trigger: true\n });\n }, this),\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projects')) {\n if (0 > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/dashboard', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".project-dashboard\",\n orphan: true,\n content: \"This is your project dashboard. It's the first thing you will see when you enter your project. Here you can get an overview for your project, see shared documents, and check the project news feed.\",\n placement: 'auto',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projects')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('myprojects', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-project\",\n content: \"Here you can navigate through all of your project tools. Next we'll take a look at Project Details.\",\n placement: 'right',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projects')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/dashboard', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/details', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-details\",\n content: \"Project Details is where you can add, view, or modify information relating to the Project. You can also add custom fields in the settings if there is other information you would like to be shown.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projects')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectMessaging')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/messaging', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-messaging\",\n content: \"Messaging is where you will manage all of your Invitations to Bid. It's extremely easy to invite people from your address book, or quickly send to a single email. Once you have an existing project you can also invite from those projects.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projectMessaging')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/details', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('privateMessaging')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/privatemessaging', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-privatemessaging\",\n content: \"Anyone who has access to this project can easily message you which can also include attachments they wish for you to see.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('privateMessaging')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.tour.prev();\n } else {\n this.tour.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectMessaging')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/messaging', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('bidForms')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/bidforms', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-bidforms\",\n content: \"Send bid forms to project participants, or add a bid form to a specific trade. You can also manage, and view any existing bid forms.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('bidForms')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('privateMessaging')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/privatemessaging', {\n trigger: true\n })\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/contacts', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-projectcontacts\",\n content: \"Here is where you will manage any of your Project Contacts. Project contacts will be anyone you will want to assign to handle tasks such as Daily Reports.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projects')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('bidForms')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/bidforms', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('drawings')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/drawings', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-drawings\",\n content: \"View and manage all of your drawings! It's easy to upload, revise, and share all of your drawings. When your drawings are uploaded, our system will automatically attempt to find the page number and name it accordingly for quick organization.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('drawings')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projects')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/contacts', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectAttachments')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/attachments', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-attachments\",\n content: \"Easily upload, organize, store, and share all of your documents. All attachments uploaded through the project can be accessed here. By default there will be a shared and private folder, but you can also add more folders as needed.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projectAttachments')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('drawings')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/drawings', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('schedule')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/schedule', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-projectschedule\",\n content: \"Scheduling is your most important tool for staying on top of your project. Add tasks with dependencies and successors and create a critical path.\",\n placement: 'bottom',\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectAttachments')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/attachments', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('photoGallery')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/photos', {\n trigger: true\n });\n }\n }, this),\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('schedule')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n },\n {\n element: \".nav-projectphotos\",\n content: \"Your Photo Gallery contains any photos uploaded throughout your project.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('photoGallery')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('schedule')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/schedule', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('rfi')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/rfi', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-rfi\",\n content: \"Send, receive, and collaborate on RFIs with other project contacts\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('rfi')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('photoGallery')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/photos', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('submittals')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/submittals', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-submittals\",\n content: \"Create, collect, and manage your submittals for the project\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('submittals')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('rfi')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/rfi', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('dailyReports')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/dailyreports', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-dailyreports\",\n content: \"Track daily, weekly, and monthly project tasks and details with your Daily Reports.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('dailyReports')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('submittals')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/submittals', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('punchList')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/punchlists', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-punchlists\",\n content: \"Assign a punch list item to one of your project contacts. They’ll receive an immediate notification!\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('punchList')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('dailyReports')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/dailyreports', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectReports')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/reports', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-projectreports\",\n content: \"View and export reports related to the project. Reports include a detailed participant list, project stats, and more!\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('projectReports')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('punchList')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/punchlists', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n PJQ.app.router.navigate('projectinvites', {\n trigger: true\n });\n }, this)\n },\n {\n element: \".nav-projectinvites\",\n content: \"The Project Invites tab is where you can view all of your Invitations to Bid from other contractors.\",\n placement: 'bottom',\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('projectReports')) {\n PJQ.app.router.navigate('projects/' + this.options.projectId + '/reports', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('contacts')) {\n PJQ.app.router.navigate('contacts', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-contacts\",\n content: \"Using the address book makes it easy to manage your contacts and add them to your projects.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('contacts')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n PJQ.app.router.navigate('projectinvites', {\n trigger: true\n });\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('documents')) {\n PJQ.app.router.navigate('documents', {\n trigger: true\n });\n }\n }, this)\n },\n {\n element: \".nav-documents\",\n content: \"Quickly view documents from all of your projects.\",\n placement: 'bottom',\n onShown: _.bind(function () {\n if (!PJQ.app.session.subscription.hasFeature('documents')) {\n if (this.previousStep > this.tour.getCurrentStepIndex()) {\n this.prev();\n } else {\n this.next();\n }\n }\n }, this),\n onPrev: _.bind(function () {\n this.setStep();\n if (PJQ.app.session.subscription.hasFeature('contacts')) {\n PJQ.app.router.navigate('contacts', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n PJQ.app.router.navigate('profile', {\n trigger: true\n });\n }, this)\n },\n {\n element: \".nav-profile\",\n content: \"Here’s where you can make sure all of your profile settings are correct. \\n\" +\n \"<br> <br> PRO TIP: Always check and make sure your Work Areas is up to date so you can receive the best leads!\\n\",\n placement: 'bottom',\n onPrev: _.bind(function () {\n this.setStep();\n if (!PJQ.app.session.subscription.hasFeature('documents')) {\n PJQ.app.router.navigate('documents', {\n trigger: true\n });\n }\n }, this),\n onNext: _.bind(function () {\n this.setStep();\n PJQ.app.router.navigate('prequal', {\n trigger: true\n });\n }, this)\n },\n {\n element: \".nav-prequal\",\n content: \"Save even more time by filling out your PreQualification details here, so you can easily share them with a General Contractor.\",\n placement: 'bottom',\n onPrev: _.bind(function () {\n this.setStep();\n PJQ.app.router.navigate('profile', {\n trigger: true\n });\n }, this)\n },\n {\n element: \".screening-dashboard-body\",\n content: \"Congratulations! You've made it to the end our your Pantera Tools tour. When you're ready, click the \\\"End Tour\\\" button below to start getting more leads!\",\n placement: 'left'\n }\n ]\n\n });\n this.start();\n }\n\n start() {\n this.tour = new Tour(this.options);\n this.tour.start(true);\n }\n\n next() {\n this.tour.next();\n }\n\n prev() {\n this.tour.prev();\n }\n\n setStep() {\n this.previousStep = this.tour.getCurrentStepIndex();\n }\n}\n\nPJQ.views.tours.SubscriptionTourIntro = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'modal-tour-intro'),\n maxWidth: 800,\n isVerticalCenter: true\n },\n events: {\n 'click .btn-start-tour': 'startTour',\n 'click .btn-skip-tour': 'skipTour'\n },\n startTour: function () {\n if (PJQ.app.session.user.get('tourDone')) {\n window.localStorage.clear();\n }\n let projectId = null,\n projects = new PJQ.collections.projects.Projects(null, {\n isSimple: false,\n status: 'ready',\n isMyProjects: true\n });\n projects.fetch({\n success: _.bind(function (data) {\n _.each(_.filter(data.models, function (model) {\n return model.get('projectName') === 'Sample Project'\n }), function (model) {\n projectId = model.get('projectId');\n })\n if (projectId != null) {\n PJQ.app.tour = new PJQ.tours.BaseTour({\n projectId: projectId\n });\n }\n else if(data.models.length > 0){\n projectId = data.models[0].get('projectId');\n if(projectId != null){\n PJQ.app.tour = new PJQ.tours.BaseTour({\n projectId: projectId\n });\n }\n }\n }, this)\n })\n this.removeModal();\n },\n skipTour: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'tour'\n }\n ])\n }).put().done(function () {\n }).fail(function () {\n });\n }\n})\n","//Models\nPJQ.models.userMessages = {};\n\nPJQ.models.userMessages.UserMessage = PJQ.models.BaseModel.extend({\n\tidAttribute: 'userMessageId',\n\tendpoint: function () {\n\t\tif (this.id > 0) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'usermessages',\n\t\t\t\t\tvalue: this.id\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\telse if (this.get('replyToMessageId') > 0) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'usermessages',\n\t\t\t\t\tvalue: this.get('replyToMessageId')\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages'\n\t\t\t}\n\t\t]);\n\t},\n\tparse: function (model) {\n\t\tif (model !== null && model !== undefined) {\n\t\t\tthis.project = model.project;\n\n\t\t\tif (model.from != null) {\n\t\t\t\tthis.from = new PJQ.models.contacts.Contact(model.from);\n\t\t\t}\n\n\t\t\tif (model.to != null) {\n\t\t\t\tthis.to = new PJQ.models.contacts.Contact(model.to);\n\t\t\t}\n\n\t\t\tthis.attachments = new PJQ.collections.files.Files(model.attachments);\n\t\t\tthis.attachments.on('update', _.bind(function () {\n\t\t\t\tthis.isDirty = true;\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.attachments = new PJQ.collections.files.Files();\n\t\t}\n\t\treturn model;\n\t},\n\tbeforeSave: function () {\n\t\tthis.set('attachments', this.attachments.getChangedModels());\n\n\t\tif (this.userMessageType != null) {\n\t\t\tthis.set('userMessageTypeId', this.userMessageType.id);\n\t\t}\n\t},\n\tupdateViewed: function(){\n\t\tthis.set('viewedOn', new Date());\n\t\tif(this.id > 0){\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'usermessages',\n\t\t\t\t\t\tvalue: this.id\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'viewed'\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}).put();\n\t\t}\n\t}\n});\n\nPJQ.models.userMessages.UserMessageType = PJQ.models.BaseModel.extend({\n\tidAttribute: 'internalMessageTypeId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'types',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t])\n\t}\n});\n\n//Collections\nPJQ.collections.userMessages = {};\n\nPJQ.collections.userMessages.UserMessages = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.userMessages.UserMessage,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: this.options.project.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages',\n\t\t\t\tvalue: this.options.userId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: _.size(this.options.view) > 0 ? this.options.view : 'inbox'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.userMessages.UserMessageThread = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.userMessages.UserMessage,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'usermessages',\n\t\t\t\tvalue: this.options.message.id\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'thread'\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.userMessages.UserMessageTypes = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.userMessages.UserMessageType,\n\tendpoint: function () {\n\t\tif (this.options.project != null && this.options.project.id > 0) {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: this.options.project.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'usermessages'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'types'\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t\telse {\n\t\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'usermessages'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'types'\n\t\t\t\t}\n\t\t\t]);\n\t\t}\n\t}\n});","//Models\nPJQ.helpers.users = {\n\tsendPasswordReset: function (username, callback) {\n\t\tlet result = {\n\t\t\tsuccess: false,\n\t\t\terror: null\n\t\t};\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'requestpasswordreset'\n\t\t\t\t}\n\t\t\t], [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: PJQ.app.session.get('masterUserId')\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tparameter:'username',\n\t\t\t\t\tvalue: username\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (data) {\n\t\t\tresult.success = data.success;\n\t\t\tif (!result.success) {\n\t\t\t\tresult.error = PJQ.Errors.auth[data.error];\n\t\t\t}\n\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t}, this)).fail(_.bind(function (xhr, err, result) {\n\t\t\tresult.error = PJQ.Errors.auth.CUSTOMER_SERVICE;\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(result);\n\t\t\t}\n\n\t\t\tnew PJQ.logging.Debug(PJQ.logging.LoggingActions.AUTH_RESET_PASSWORD, {\n\t\t\t\terror: err,\n\t\t\t\tresult: result\n\t\t\t});\n\t\t}, this));\n\t}\n};\n\nPJQ.models.users = {};\n\nPJQ.models.users.User = PJQ.models.contacts.Contact.extend({\n\tidAttribute: 'userId',\n\tdefaults: {\n\t\ttype: 'user'\n\t},\n\tendpoint: function () {\n\t\tlet params = [];\n\t\tif (this.isNew()) {\n\t\t\tparams.push(...[{\n\t\t\t\tparameter: 'username',\n\t\t\t\tvalue: this.get('username')\n\t\t\t}, {\n\t\t\t\tparameter: 'password',\n\t\t\t\tvalue: this.get('password')\n\t\t\t}]);\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'users',\n\t\t\t\tvalue: this.id < 0 ? -this.id : this.id\n\t\t\t}\n\t\t], params)\n\t},\n\tparse: function (model) {\n\t\tif (model != null) {\n\t\t\tif (PJQ.app.session != null) {\n\t\t\t\tif (model.userTypeId != null) {\n\t\t\t\t\tthis.userType = PJQ.app.session.userTypes.get(model.userTypeId);\n\t\t\t\t}\n\n\t\t\t\tif (this.userType === null) {\n\t\t\t\t\tthis.userType = PJQ.app.session.userTypes.getDefault(true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.groups == null) {\n\t\t\t\tthis.groups = new PJQ.collections.groups.Groups(model.groups, {\n\t\t\t\t\tgroupLevels: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS)\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//Override for groups being returned in a nested object\n\t\t\t\t//This is some old api stuff that will soon be deprecated\n\t\t\t\t//We will remove this when that happens\n\t\t\t\tif (model.groups != null) {\n\t\t\t\t\tmodel.groups = model.groups;\n\t\t\t\t}\n\t\t\t\tthis.groups.reset(_.size(model.groups) > 0 ? model.groups : null);\n\t\t\t\tthis.groups.options.groupLevels = PJQ.app.session ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.GROUP_LEVELS) : 1;\n\t\t\t}\n\n\t\t\tif(model.companyId == null){\n\t\t\t\tmodel.companyId = 0;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.userType = PJQ.app.session != null ? PJQ.app.session.userTypes.getDefault(true) : null;\n\t\t}\n\t\treturn model;\n\t},\n\tfetchRFISettings: function (callback) {\n\t\tif (this.rfiSettings == null) {\n\t\t\tthis.rfiSettings = new PJQ.models.rfi.Settings();\n\t\t\tthis.rfiSettings.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tcallback(this.rfiSettings);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(this.rfiSettings);\n\t\t}\n\t},\n\tsendPasswordReset: function (callback) {\n\t\tPJQ.helpers.users.sendPasswordReset(this.get('username'), function (result) {\n\t\t\tif (typeof callback === 'function') {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t});\n\t},\n\tunlock: function (callback) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users',\n\t\t\t\t\tvalue: this.id\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'unlock'\n\t\t\t\t}\n\t\t\t])\n\t\t}).put().done(_.bind(function () {\n\t\t\tthis.set('lockedOn', null);\n\t\t\tcallback(true);\n\t\t}, this)).fail(function () {\n\t\t\tcallback(false);\n\t\t});\n\t},\n\tbeforeSave: function () {\n\t\tif (this.groups) {\n\t\t\tthis.set({\n\t\t\t\tgroups: _.map(this.groups.models, function (group) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tgroupId: group.id,\n\t\t\t\t\t\tisDeleted: group.get('isDeleted')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t}\n});\n\nPJQ.models.users.UserFieldSetting = PJQ.models.BaseModel.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'user'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'fields'\n\t\t\t}\n\t\t]);\n\t}\n});\n\n//Collections\nPJQ.collections.users = {};\n\nPJQ.collections.users.Users = PJQ.collections.contacts.Contacts.extend({\n\tmodel: PJQ.models.users.User,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'users'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'isDetail',\n\t\t\t\tvalue: this.options.isDetail\n\t\t\t}\n\t\t])\n\t},\n\tgetByUserType: function (userTypeId) {\n\t\tif (userTypeId == null) {\n\t\t\treturn this.models;\n\t\t}\n\n\t\treturn _.filter(this.models, function (user) {\n\t\t\treturn userTypeId === user.get('userTypeId');\n\t\t})\n\t}\n});\n\n//Views\nPJQ.views.users = {};\n\n//Routes\nPJQ.app.addRoutes({\n\troute: 'resetpassword/:guid',\n\tname: 'resetPassword',\n\tcallback: function (guid) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'users'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'resetpassword',\n\t\t\t\t\tvalue: guid\n\t\t\t\t},\n\t\t\t])\n\t\t}).get().done(function (request) {\n\t\t\tif (request.error) {\n\t\t\t\tPJQ.app.router.signInNavigate();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (PJQ.app.module === PJQ.constants.modules.APP) {\n\t\t\t\tnew PJQ.views.auth.AppResetPassword({\n\t\t\t\t\tel: PJQ.app.$el,\n\t\t\t\t\trequest: request,\n\t\t\t\t\tonReset: function () {\n\t\t\t\t\t\tnew PJQ.views.BaseModal({\n\t\t\t\t\t\t\theader: \"Password Reset Successfully\",\n\t\t\t\t\t\t\tbody: \"Your password has been successfully reset.\",\n\t\t\t\t\t\t\tisShowSecondaryButton: false,\n\t\t\t\t\t\t\tokButtonText: 'Go To Sign In',\n\t\t\t\t\t\t\tonOk: _.bind(function () {\n\t\t\t\t\t\t\t\tPJQ.app.router.signInNavigate();\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnew PJQ.views.auth.ResetPasswordModal({\n\t\t\t\t\trequest: request\n\t\t\t\t});\n\t\t\t}\n\t\t}).fail(function () {\n\t\t\t//todo: show error - this is an invalid request id\n\t\t});\n\t}\n});\n\nPJQ.models.users.UserCustomField = PJQ.models.customFields.CustomField.extend({\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'users'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'customfields',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t},\n});\n\nPJQ.collections.users.UserCustomFields = PJQ.collections.customFields.CustomFields.extend({\n\tmodel: PJQ.models.users.UserCustomField,\n\toptions: {\n\t\tmasterUserId: null\n\t},\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'users',\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'customfields'\n\t\t\t}\n\t\t], [\n\t\t\t{\n\t\t\t\tparameter: 'masterUserId',\n\t\t\t\tvalue: this.options.masterUserId > 0 ? this.options.masterUserId : PJQ.app.session.get('masterUserId')\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.users.UserFieldSettings = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.users.UserFieldSetting,\n\tendpoint: function () {\n\t\tlet params;\n\t\tif (this.options.masterUserId > 0) {\n\t\t\tparams = [\n\t\t\t\t{\n\t\t\t\t\tparameter: 'masterUserId',\n\t\t\t\t\tvalue: this.options.masterUserId\n\t\t\t\t}\n\t\t\t];\n\t\t} else {\n\t\t\tparams = null;\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'users'\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'fields'\n\t\t\t}\n\t\t], params)\n\t}\n});","//Models\nPJQ.models.userTypes = {};\nPJQ.models.userTypes.UserType = PJQ.models.BaseModel.extend({\n\tidAttribute: 'userTypeId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'userTypes',\n\t\t\t\tvalue: this.id < 0 ? -this.id : this.id\n\t\t\t}\n\t\t])\n\t},\n\tfetchSystemPermissions: function (callback) {\n\t\tlet perm = new PJQ.models.permissions.SystemPermissions({\n\t\t\tuserTypeId: this.id\n\t\t});\n\t\tif (this.id > 0) {\n\t\t\tperm.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tcallback(perm);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(perm);\n\t\t}\n\t},\n\tfetchProjectPermissions: function (callback) {\n\t\tlet perm = new PJQ.models.permissions.ProjectPermissions({\n\t\t\tuserTypeId: this.id\n\t\t});\n\t\tif (this.id > 0) {\n\t\t\tperm.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tcallback(perm);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(perm);\n\t\t}\n\t},\n\tfetchSystemNotificationSettings: function (callback) {\n\t\tlet notificationSettings = new PJQ.models.notificationSettings.SystemNotificationSettings({\n\t\t\tuserTypeId: this.id\n\t\t});\n\t\tif (this.id > 0) {\n\t\t\tnotificationSettings.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tcallback(notificationSettings);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(notificationSettings);\n\t\t}\n\t},\n\tfetchProjectNotificationSettings: function (callback) {\n\t\tlet notificationSettings = new PJQ.models.notificationSettings.ProjectNotificationSettings({\n\t\t\tuserTypeId: this.get('userTypeId')\n\t\t});\n\t\tif (this.id > 0) {\n\t\t\tnotificationSettings.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tcallback(notificationSettings);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(notificationSettings);\n\t\t}\n\t},\n});\n\n\n//Collections\nPJQ.collections.userTypes = {};\nPJQ.collections.userTypes.UserTypes = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.userTypes.UserType,\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'userTypes'\n\t\t\t}\n\t\t])\n\t},\n\tgetDefault: function (isCompanyUser = false) {\n\t\treturn _.find(this.models, function (model) {\n\t\t\treturn isCompanyUser === model.get('isCompanyUser') && model.get('isDefault');\n\t\t});\n\t},\n\tgetById: function (id) {\n\t\treturn _.find(this.models, function (model) {\n\t\t\treturn model.id == id;\n\t\t});\n\t},\n\tgetByIsCompany: function (isCompany) {\n\t\tif (isCompany == null) {\n\t\t\treturn this.models;\n\t\t}\n\n\t\treturn _.filter(this.models, function (userType) {\n\t\t\treturn isCompany === userType.get('isCompanyUser');\n\t\t})\n\t},\n\tcopy: function (callback) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'usertypes'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'copy'\n\t\t\t\t}\n\t\t\t])\n\t\t}).post().done(_.bind(function (userTypes) {\n\t\t\tthis.reset(userTypes);\n\t\t\tcallback();\n\t\t}, this));\n\t}\n});\n","$.fn.outerHTML = function (s) {\n\treturn s ? this.before(s).remove() : jQuery(\"<p>\").append(this.eq(0).clone()).html();\n};\n\nif (typeof Object.assign != 'function') {\n\tObject.assign = function (target) {\n\t\t'use strict';\n\t\tif (target == null) {\n\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t}\n\n\t\ttarget = Object(target);\n\t\tfor (var index = 1; index < arguments.length; index++) {\n\t\t\tvar source = arguments[index];\n\t\t\tif (source != null) {\n\t\t\t\tfor (var key in source) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\t\t\t\ttarget[key] = source[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn target;\n\t};\n}\n\nwindow.onScriptError = function () {\n\t//do nothing for now\n};\n\nwindow.ValidateEmail = function (email) {\n\treturn PJQ.helpers.validators.validateEmail(email);\n};","PJQ.models.weather = {};\nPJQ.models.weather.WeatherDay = PJQ.models.BaseModel.extend({\n\tidAttribute: 'weatherId',\n\tparse: function(model){\n\t\tmodel = model ? model : {};\n\n\t\tif(model.hours != null){\n\t\t\tthis.hours = new PJQ.collection.weather.WeatherHours(model.hours);\n\t\t}\n\n\t\treturn model;\n\t},\n\tconditionIconUrl: function(){\n\t\tlet iconId = this.get('conditionIconId');\n\t\tif(iconId > 0){\n\t\t\treturn '/assets/modules2/global/images/weather/' + iconId.toString() + '.png';\n\t\t}\n\t},\n\tminTempDisplay: function(){\n\t\tlet minTemperature = this.get('minTemperature');\n\t\tif(minTemperature != null){\n\t\t\treturn parseInt(minTemperature).toString() + '°F';\n\t\t}\n\t},\n\tmaxTempDisplay: function(){\n\t\tlet maxTemperature = this.get('maxTemperature');\n\t\tif(maxTemperature != null){\n\t\t\treturn parseInt(maxTemperature).toString() + '°F';\n\t\t}\n\t}\n});\n\nPJQ.models.weather.WeatherHour = PJQ.models.BaseModel.extend({\n\tidAttribute: 'weatherHourId'\n});\n\nPJQ.collections.weather = {};\nPJQ.collections.weather.WeatherHours = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.weather.WeatherHour\n});\n\nPJQ.constants.weather = {\n\tMAX_FORECAST_DAYS: 13\n};","PJQ.models.workAreas = {};\nPJQ.models.workAreas.WorkArea = PJQ.models.BaseModel.extend({\n\tidAttribute: 'workAreaId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'contacts',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'workareas',\n\t\t\t\tvalue: this.id\n\t\t\t}\n\t\t]);\n\t},\n\tisStateWorkArea: function () {\n\t\treturn _.size(this.get('state')) > 0 && !this.isCountyWorkArea();\n\t},\n\tisCountyWorkArea: function () {\n\t\treturn _.size(this.get('county')) > 0;\n\t}\n});\n\nPJQ.models.workAreas.ContactWorkArea = PJQ.models.workAreas.WorkArea.extend({\n\tidAttribute: 'contactWorkAreaId',\n\tendpoint: function () {\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'contacts',\n\t\t\t\tvalue: this.get('contactId')\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'workareas',\n\t\t\t\tvalue: this.id > 0 ? this.get('workAreaId') : null\n\t\t\t}\n\t\t]);\n\t}\n});\n\nPJQ.collections.workAreas = {};\nPJQ.collections.workAreas.WorkAreas = PJQ.collections.BaseCollection.extend({\n\tmodel: PJQ.models.workAreas.WorkArea,\n\tendpoint: function () {\n\t\tlet queryParams = [];\n\t\tif (_.size(this.options.country) > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'country',\n\t\t\t\tvalue: this.options.country\n\t\t\t});\n\t\t}\n\t\tif (_.size(this.options.state) > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'state',\n\t\t\t\tvalue: this.options.state\n\t\t\t});\n\t\t}\n\t\tif (_.size(this.options.zip) > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'zip',\n\t\t\t\tvalue: this.options.zip\n\t\t\t});\n\n\t\t}\n\t\tif (this.options.radius > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'radius',\n\t\t\t\tvalue: this.options.radius\n\t\t\t});\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'workAreas'\n\t\t\t}\n\t\t], queryParams);\n\t},\n\tgetExistingWorkArea: function (workArea) {\n\t\treturn _.find(this.models, function (existingWorkArea) {\n\t\t\t//If the county region is already added, or the full state for the county is added, filter the work area out\n\t\t\treturn !existingWorkArea.get('isDeleted') && (existingWorkArea.get('workAreaId') === workArea.get('workAreaId') || (existingWorkArea.get('state') === workArea.get('state') && existingWorkArea.isStateWorkArea()));\n\t\t})\n\t}\n});\n\nPJQ.collections.workAreas.ContactWorkAreas = PJQ.collections.workAreas.WorkAreas.extend({\n\tmodel: PJQ.models.workAreas.ContactWorkArea,\n\tendpoint: function () {\n\t\tlet queryParams = [];\n\t\tif (_.size(this.options.zip) > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'zip',\n\t\t\t\tvalue: this.options.zip\n\t\t\t});\n\n\t\t}\n\t\tif (this.options.radius > 0) {\n\t\t\tqueryParams.push({\n\t\t\t\tparameter: 'radius',\n\t\t\t\tvalue: this.options.radius\n\t\t\t});\n\t\t}\n\t\treturn PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t{\n\t\t\t\tendpoint: 'contacts',\n\t\t\t\tvalue: this.options.contactId\n\t\t\t},\n\t\t\t{\n\t\t\t\tendpoint: 'workAreas'\n\t\t\t}\n\t\t], queryParams);\n\t}\n});\n\nPJQ.views.workAreas = {};\nPJQ.views.workAreas.WorkAreaMap = PJQ.views.BaseView.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Work-Area-Map-Inline'),\n\t\tisInline: true,\n\t\tisStacked: false,\n\t\tisEdit: false,\n\t\tisMapOnly: false,\n\t\tisSync: true,\n\t\tdefaultRadius: 50,\n\t\tmapZoom: 4,\n\t\tmapCenter: null,\n\t\tonChange: _.noop,\n\t\tonDelete: _.noop,\n\t\tonFetch: _.noop\n\t},\n\tevents: {\n\t\t'keyup .work-area-zip': 'workAreaZipInputChanged',\n\t\t'keyup .work-area-radius': 'workAreaRadiusInputChanged',\n\t\t'click .add-work-area-state-county': 'addWorkAreaByStateCounty',\n\t\t'click .add-work-area-zip': 'addWorkAreasByZipRadius',\n\t\t'click .delete-work-area': 'deleteWorkAreaEvent',\n\t\t'click .delete-all-work-areas': 'deleteAllWorkAreas',\n\t},\n\tbeforeFirstRender: function () {\n\t\tthis.options.mapCenter = typeof google === 'object' ? new google.maps.LatLng(38.6159, -100.7456) : null;\n\n\t\tif (!this.options.isInline)\n\t\t\tthis.options.template = new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Work-Area-Map');\n\n\t\tif (!(this.options.contactId > 0) && PJQ.app.session.contact != null) {\n\t\t\tthis.options.contactId = PJQ.app.session.contact.id;\n\t\t}\n\n\t\tif (this.collection == null) {\n\t\t\tthis.collection = new PJQ.collections.workAreas.ContactWorkAreas([], {\n\t\t\t\tcontactId: this.options.contactId\n\t\t\t});\n\t\t}\n\n\t\tthis.listenTo(this.collection, 'update fetch', _.bind(function () {\n\t\t\tthis.renderDeleteAllButtons();\n\t\t}, this));\n\n\t\tif (!this.options.isFetched && this.collection.options.contactId > 0) {\n\t\t\tthis.collection.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.options.isFetched = true;\n\t\t\t\t\tthis.render();\n\n\t\t\t\t\tif (typeof this.options.onFetch === 'function') {\n\t\t\t\t\t\tthis.options.onFetch();\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\t\treturn false;\n\t},\n\tbeforeRender: function () {\n\t\tthis.renderData = {\n\t\t\toptions: this.options\n\t\t};\n\t},\n\tafterRender: function () {\n\t\tthis.renderUI();\n\t},\n\trenderUI: function () {\n\t\tif (this.options.isEdit) {\n\t\t\tthis.renderInputs();\n\t\t}\n\t\tthis.renderDataTables();\n\t\tthis.renderDeleteAllButtons();\n\t\tthis.renderMap();\n\t},\n\trenderInputs: function () {\n\t\tthis.radiusSlider = new PJQ.Slider(this.$('.work-area-radius-slider'), {\n\t\t\tticks: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tticks_labels: [1, 50, 100, 150, 200, 250, 300],\n\t\t\tvalue: this.options.defaultRadius,\n\t\t\tonChange: _.bind(function (obj) {\n\t\t\t\tthis.setWorkAreaRadius(obj.newValue);\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.countryPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.work-area-country'),\n\t\t\tdefaultValue: PJQ.constants.countries[0].toUpperCase(),\n\t\t\tonChange: _.bind(function (value) {\n\t\t\t\tthis.populateStateSelect();\n\t\t\t\tif (value.toLowerCase() === 'ca') {\n\t\t\t\t\tthis.$('.work-area-county').closest('div.input-group').addClass('invisible');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.$('.work-area-county').closest('div.input-group').removeClass('invisible');\n\t\t\t\t}\n\t\t\t\tthis.workAreaStateCountyInputChanged();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.statePicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.work-area-state'),\n\t\t\tnoneSelectedText: 'State',\n\t\t\thideDisabled: false,\n\t\t\tisMultiple: true,\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.populateCountySelect();\n\t\t\t\tthis.workAreaStateCountyInputChanged();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.countyPicker = new PJQ.inputs.Selectpicker({\n\t\t\tel: this.$('.work-area-county'),\n\t\t\tnoneSelectedText: 'County',\n\t\t\tisIntChoices: true,\n\t\t\tisMultiple: true,\n\t\t\thideDisabled: false,\n\t\t\tonChange: _.bind(function () {\n\t\t\t\tthis.workAreaStateCountyInputChanged();\n\t\t\t}, this)\n\t\t});\n\n\t\tthis.populateStateSelect();\n\t},\n\tgetStates: function (country, callback) {\n\t\tif (this.states == null) {\n\t\t\tthis.states = [];\n\t\t}\n\n\t\tif (_.size(country) > 0 && this.states[country] == null) {\n\t\t\tlet workAreas = new PJQ.collections.workAreas.WorkAreas([], {\n\t\t\t\tcountry: country\n\t\t\t});\n\t\t\tworkAreas.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.states[country] = workAreas;\n\t\t\t\t\tcallback(this.states[country]);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(this.states[country]);\n\t\t}\n\t},\n\tpopulateStateSelect: function () {\n\t\tlet country = this.countryPicker.getValue();\n\t\tthis.$('select.work-area-state').empty();\n\t\tthis.$('select.work-area-state').append('<option value=\"\" disabled>State</option>');\n\t\tif (_.size(country) > 0) {\n\t\t\tthis.getStates(country, _.bind(function (states) {\n\t\t\t\t_.each(states.models, function (workArea) {\n\t\t\t\t\tthis.$('select.work-area-state').append('<option value=\"' + workArea.get('workAreaId').toString() + '\" ' + (_.find(this.collection.models, function (existingWorkArea) {\n\t\t\t\t\t\treturn existingWorkArea.get('isDeleted') !== true && existingWorkArea.get('workAreaId') === workArea.get('workAreaId');\n\t\t\t\t\t}) != null ? 'disabled' : '') + '>' + workArea.get('state') + '</option>');\n\t\t\t\t}, this);\n\t\t\t\tthis.statePicker.refresh();\n\t\t\t}, this));\n\t\t}\n\t\telse {\n\t\t\tthis.statePicker.refresh();\n\t\t}\n\t\tthis.workAreaStateCountyInputChanged();\n\t},\n\tgetCounties: function (country, state, callback) {\n\t\tif (this.counties == null) {\n\t\t\tthis.counties = [];\n\t\t}\n\n\t\tif (_.size(country) > 0 && _.size(state) > 0 && this.counties[state] == null) {\n\t\t\tlet workAreas = new PJQ.collections.workAreas.WorkAreas([], {\n\t\t\t\tcountry: country,\n\t\t\t\tstate: state\n\t\t\t});\n\t\t\tworkAreas.fetch({\n\t\t\t\tsuccess: _.bind(function () {\n\t\t\t\t\tthis.counties[state] = workAreas;\n\t\t\t\t\tcallback(this.counties[state]);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tcallback(this.counties[state]);\n\t\t}\n\t},\n\tpopulateCountySelect: function () {\n\t\tlet country = this.countryPicker.getValue(),\n\t\t\tstateVal = this.statePicker.getValue(),\n\t\t\tstateWorkArea = _.size(country) > 0 && _.size(stateVal) === 1 ? this.states[country].get(stateVal[0]) : null;\n\t\tthis.getCounties(country, stateWorkArea != null ? stateWorkArea.get('state') : null, _.bind(function (counties) {\n\t\t\tthis.$('select.work-area-county').empty();\n\t\t\tthis.$('select.work-area-county').append('<option value=\"\" disabled>County</option>');\n\t\t\tif (counties != null) {\n\t\t\t\t_.each(counties.models, function (workArea) {\n\t\t\t\t\tthis.$('select.work-area-county').append('<option value=\"' + workArea.get('workAreaId').toString() + '\" ' + (_.find(this.collection.models, function (existingWorkArea) {\n\t\t\t\t\t\treturn existingWorkArea.get('isDeleted') !== true && existingWorkArea.get('workAreaId') === workArea.get('workAreaId');\n\t\t\t\t\t}) != null ? 'disabled' : '') + '>' + workArea.get('county') + '</option>');\n\t\t\t\t}, this);\n\t\t\t}\n\t\t\tthis.countyPicker.refresh();\n\t\t}, this));\n\t\tthis.workAreaStateCountyInputChanged();\n\t},\n\trenderMap: function () {\n\t\tthis.map = new PJQ.maps.GoogleMap(this.$('.work-area-map'), {\n\t\t\tzoom: this.options.mapZoom,\n\t\t\tcenter: this.options.mapCenter\n\t\t});\n\t\tthis.renderMapLayers();\n\t\tthis.refresh();\n\t},\n\trenderDataTables: function () {\n\t\tif (this.workAreaDataTable)\n\t\t\tthis.workAreaDataTable.removeAllRows();\n\n\t\t//Go through each work area and make sure there aren't any county regions showing up where there is already a full state region\n\t\t//We don't want to delete the county regions, because they may be related to a public contact\n\t\tthis.collection.models = _.filter(this.collection.models, function (model) {\n\t\t\treturn !model.get('isDeleted') && (_.size(model.get('county')) === 0 || (_.find(this.collection.models, function (subModel) {\n\t\t\t\treturn model.id !== subModel.id && model.get('state').toLowerCase() === subModel.get('state').toLowerCase() && _.size(subModel.get('county')) === 0;\n\t\t\t}) == null));\n\t\t}, this);\n\n\t\tlet columns;\n\t\tif (this.options.isEdit) {\n\t\t\tcolumns = [\n\t\t\t\t{\"data\": \"attributes.country\", \"title\": \"Country\"},\n\t\t\t\t{\"data\": \"attributes.state\", \"title\": \"State\"},\n\t\t\t\t{\"data\": \"attributes.county\", \"title\": \"County\"},\n\t\t\t\t{\n\t\t\t\t\t\"title\": '<button type=\"button\" class=\"btn btn-danger delete-all-work-areas m-0a\"><i class=\"fal fa-trash\"></i></button>',\n\t\t\t\t\t\"defaultContent\": '<button type=\"button\" class=\"btn btn-danger delete-work-area m-0a\"><i class=\"fal fa-trash\"></i></button>',\n\t\t\t\t\t\"orderable\": false\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t\telse {\n\t\t\tcolumns = [\n\t\t\t\t{\"data\": \"attributes.country\", \"title\": \"Country\"},\n\t\t\t\t{\"data\": \"attributes.state\", \"title\": \"State\"},\n\t\t\t\t{\"data\": \"attributes.county\", \"title\": \"County\"}\n\t\t\t];\n\t\t}\n\t\tthis.workAreaDataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.work-area-data-table'),\n\t\t\tdata: _.sortBy(_.filter(this.collection.models, _.bind(function (model) {\n\t\t\t\treturn model.get('state') && model.get('state').length > 0;\n\t\t\t}, this)), function (model) {\n\t\t\t\treturn model.get('state');\n\t\t\t}),\n\t\t\tlanguage: {\n\t\t\t\temptyTable: \"No work areas added\",\n\t\t\t\tzeroRecords: \"No work areas match the search criteria\"\n\n\t\t\t},\n\t\t\trowId: \"cid\",\n\t\t\tdeferRender: true,\n\t\t\tcolumns: columns,\n\t\t\tdom: '<\"top\"<\"clear\">p>rt<\"bottom\"p<\"clear\">>'\n\t\t});\n\t},\n\trenderMapLayers: function () {\n\t\tthis.renderStateLayers();\n\t\tthis.renderCountyLayers();\n\t},\n\trenderStateLayers: function () {\n\t\tlet states = _.map(_.filter(this.collection.models, function (workArea) {\n\t\t\treturn !workArea.get('isDeleted') && workArea.isStateWorkArea()\n\t\t}), function (workArea) {\n\t\t\treturn workArea.get('state');\n\t\t});\n\t\tif (this.stateLayerGuid) {\n\t\t\tthis.map.removeMapObject(this.stateLayerGuid);\n\t\t\tthis.stateLayerGuid = null;\n\t\t}\n\t\tif (_.size(states) > 0) {\n\t\t\tthis.stateLayerGuid = this.map.addKMLStatesLayer(states);\n\t\t}\n\t},\n\trenderCountyLayers: function () {\n\t\tlet countyIds = _.map(_.filter(this.collection.models, function (workArea) {\n\t\t\treturn !workArea.get('isDeleted') && workArea.isCountyWorkArea()\n\t\t}), function (workArea) {\n\t\t\treturn workArea.get('workAreaId');\n\t\t});\n\t\tif (this.countyLayerGuid) {\n\t\t\tthis.map.removeMapObject(this.countyLayerGuid);\n\t\t\tthis.countyLayerGuid = null;\n\t\t}\n\t\tif (_.size(countyIds) > 0) {\n\t\t\tthis.countyLayerGuid = this.map.addKMLCountiesLayer(countyIds);\n\t\t}\n\t},\n\treCenter: function () {\n\t\tif (this.map) {\n\t\t\tthis.map.setCenter(this.options.mapCenter);\n\t\t}\n\t},\n\trefresh: function () {\n\t\tif (this.map) {\n\t\t\tthis.map.resize();\n\t\t}\n\t\tif (this.radiusSlider) {\n\t\t\tthis.radiusSlider.refresh();\n\t\t}\n\t},\n\tworkAreaRadiusInputChanged: function () {\n\t\tthis.setWorkAreaRadius(parseInt(this.$('.work-area-radius').val()));\n\t},\n\tsetWorkAreaRadius: function (radius) {\n\t\tif (isNaN(radius) || radius < 1)\n\t\t\tradius = 1;\n\t\telse if (radius > 300)\n\t\t\tradius = 300;\n\t\tthis.radiusSlider.setValue(radius);\n\t\t//don't set the radius input yet if the length of the value is 0 in case the user is trying to clear the input to enter a new value\n\t\tif (this.$('.work-area-radius').val().length > 0)\n\t\t\tthis.$('.work-area-radius').val(radius);\n\t},\n\tworkAreaZipInputChanged: function () {\n\t\tthis.$('.add-work-area-zip').prop('disabled', !PJQ.helpers.validators.validateZip(this.$('.work-area-zip').val()))\n\t},\n\tworkAreaStateCountyInputChanged: function () {\n\t\tlet country = this.countryPicker.getValue(),\n\t\t\tstateWorkAreaId = this.statePicker.getValue(),\n\t\t\tcountyWorkAreaId = this.countyPicker.getValue();\n\n\t\tif (_.size(country) > 0) {\n\t\t\tthis.statePicker.enable();\n\t\t}\n\t\telse {\n\t\t\tthis.statePicker.disable();\n\t\t}\n\t\tif (stateWorkAreaId > 0) {\n\t\t\tthis.countyPicker.enable();\n\t\t}\n\t\telse {\n\t\t\tthis.countyPicker.disable();\n\t\t}\n\n\t\tlet sessionContactId = PJQ.app.session.contact ? PJQ.app.session.contact.id : null;\n\t\tif ((sessionContactId === this.options.contactId && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PREVENT_NATIONWIDE_WORK_AREAS_SUB)) || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PREVENT_NATIONWIDE_WORK_AREAS_PORTAL) || PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.PREVENT_NATIONWIDE_WORK_AREAS)) {\n\t\t\tthis.$('.add-work-area-state-county').prop('disabled', !(stateWorkAreaId > 0));\n\t\t}\n\t\telse {\n\t\t\tthis.$('.add-work-area-state-county').prop('disabled', !(_.size(country) > 0 || stateWorkAreaId > 0 || countyWorkAreaId > 0))\n\t\t}\n\t},\n\taddWorkAreaByStateCounty: function () {\n\t\tlet country = this.countryPicker.getValue();\n\t\tif (_.size(country) === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet stateWorkAreaId = this.statePicker.getValue(),\n\t\t\tcountyWorkAreaId = this.countyPicker.getValue(),\n\t\t\tself = this;\n\t\tif (stateWorkAreaId == null || _.size(stateWorkAreaId) === 0) {\n\t\t\tself.addNewWorkAreas(_.filter(self.states[country].models, function (workArea) {\n\t\t\t\treturn _.indexOf((['hi', 'ak']), workArea.get('state').toLowerCase()) === -1;\n\t\t\t}));\n\t\t}\n\t\telse {\n\t\t\tlet workArea = null,\n\t\t\t\tworkAreaArray = [];\n\t\t\tif (_.size(stateWorkAreaId) === 1) {\n\t\t\t\tlet stateWorkArea = this.states[country].get(stateWorkAreaId[0]);\n\t\t\t\tif (_.size(countyWorkAreaId) > 0) {\n\t\t\t\t\t_.each(countyWorkAreaId, function(id){\n\t\t\t\t\t\tif(id) {\n\t\t\t\t\t\t\tlet countyWorkArea = this.counties[stateWorkArea.get('state')].get(id);\n\t\t\t\t\t\t\tworkAreaArray.push(countyWorkArea);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tworkArea = stateWorkArea;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (_.size(stateWorkAreaId) > 1){\n\t\t\t\t_.each(stateWorkAreaId, function(id){\n\t\t\t\t\tif(id) {\n\t\t\t\t\t\tlet stateWorkArea = this.states[country].get(id);\n\t\t\t\t\t\tworkAreaArray.push(stateWorkArea);\n\t\t\t\t\t}\n\t\t\t\t}, this)\n\t\t\t}\n\t\t\tif(_.size(workAreaArray) > 0){\n\t\t\t\tthis.addNewWorkAreas(workAreaArray)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.addNewWorkAreas([workArea]);\n\t\t\t}\n\t\t}\n\t},\n\taddWorkAreasByZipRadius: function () {\n\t\tif (this.zipRadiusError != null) {\n\t\t\tthis.zipRadiusError.destroy();\n\t\t\tthis.zipRadiusError = null;\n\t\t}\n\n\t\t//Get all the work areas (counties) for the selected zip/radius\n\t\tlet radius = this.$('.work-area-radius').val(),\n\t\t\tzip = PJQ.helpers.formatHelpers.formatZip(this.$('.work-area-zip').val()),\n\t\t\tnewWorkAreas = new PJQ.collections.workAreas.WorkAreas([], {\n\t\t\t\tzip: zip,\n\t\t\t\tradius: radius\n\t\t\t});\n\t\tnewWorkAreas.fetch({\n\t\t\tsuccess: _.bind(function () {\n\t\t\t\tlet newWorkAreaStateCount = _.size(_.uniq(_.map(newWorkAreas.models, function (newWorkArea) {\n\t\t\t\t\treturn newWorkArea.get('state');\n\t\t\t\t})));\n\t\t\t\tnewWorkAreas = new PJQ.collections.workAreas.WorkAreas(_.filter(newWorkAreas.models, _.bind(function (newWorkArea) {\n\t\t\t\t\treturn this.collection.getExistingWorkArea(newWorkArea) == null;\n\t\t\t\t}, this)));\n\t\t\t\tif (_.size(newWorkAreas.models) > 0) {\n\t\t\t\t\t//If there are counties for more than 1 state in the result\n\t\t\t\t\t//Or the preference to always show the work area picker is enabled\n\t\t\t\t\t//Then show the work area picker\n\t\t\t\t\tif (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_WORK_AREAS_ZIP_RADIUS_COUNTY_PICKER) || newWorkAreaStateCount > 1) {\n\t\t\t\t\t\tnew PJQ.views.workAreas.SelectWorkAreasModal({\n\t\t\t\t\t\t\tcollection: newWorkAreas,\n\t\t\t\t\t\t\tonSave: _.bind(function (selectedWorkAreas) {\n\t\t\t\t\t\t\t\tthis.addNewWorkAreas(selectedWorkAreas, true);\n\t\t\t\t\t\t\t}, this)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addNewWorkAreas(newWorkAreas.models, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.showZipRadiusError();\n\t\t\t\t}\n\t\t\t}, this)\n\t\t});\n\t},\n\taddNewWorkAreas: function (newWorkAreas, wasZipAdd = false) {\n\t\tlet countiesChanged = false,\n\t\t\tstatesChanged = false,\n\t\t\tnewWorkAreasArray = [];\n\t\t_.each(newWorkAreas, function (newWorkArea) {\n\t\t\tlet isStateWorkArea = newWorkArea.isStateWorkArea();\n\t\t\tif (isStateWorkArea) {\n\t\t\t\tlet existingStateCountyWorkAreas = _.filter(this.collection.models, function (existingWorkArea) {\n\t\t\t\t\treturn existingWorkArea.get('state') === newWorkArea.get('state') && !existingWorkArea.get('isDeleted');\n\t\t\t\t});\n\t\t\t\t_.each(existingStateCountyWorkAreas, _.bind(function (existingWorkArea) {\n\t\t\t\t\tthis.deleteWorkArea(this.workAreaDataTable.getRow(existingWorkArea.cid));\n\t\t\t\t\tcountiesChanged = true;\n\t\t\t\t}, this));\n\t\t\t}\n\n\t\t\tlet existingWorkArea = this.collection.getExistingWorkArea(newWorkArea);\n\t\t\tif (existingWorkArea == null) {\n\t\t\t\tcountiesChanged = newWorkArea.isCountyWorkArea() || countiesChanged;\n\t\t\t\tstatesChanged = isStateWorkArea || statesChanged;\n\n\t\t\t\tlet newContactWorkArea = new PJQ.models.workAreas.ContactWorkArea(_.defaults({contactId: this.options.contactId}, newWorkArea.toJSON()));\n\t\t\t\tthis.collection.add(newContactWorkArea);\n\t\t\t\tthis.onChange('add', newContactWorkArea);\n\t\t\t\tthis.workAreaDataTable.addRow(newContactWorkArea);\n\t\t\t\tif (this.options.isSync) {\n\t\t\t\t\tnewWorkAreasArray.push(newContactWorkArea);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (existingWorkArea.get('isDeleted')) {\n\t\t\t\texistingWorkArea.set('isDeleted', false);\n\t\t\t\tthis.onChange('add', existingWorkArea);\n\t\t\t\tthis.workAreaDataTable.addRow(existingWorkArea);\n\t\t\t}\n\t\t}, this);\n\t\tif(this.options.isSync && _.size(newWorkAreasArray) > 0){\n\t\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: this.collection.options.contactId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'workareas'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'bulk'\n\t\t\t\t}\n\t\t\t]);\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: endpoint,\n\t\t\t\tdata: {\n\t\t\t\t\tworkAreaIds: _.map(newWorkAreasArray, function (workArea) {\n\t\t\t\t\t\treturn workArea.get('workAreaId')\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).post().done(_.bind(function () {\n\n\t\t\t}, this)).fail(function () {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tif (countiesChanged) {\n\t\t\tthis.renderCountyLayers();\n\t\t}\n\t\tif (statesChanged) {\n\t\t\tthis.renderStateLayers();\n\t\t}\n\n\t\tthis.populateStateSelect();\n\t\tthis.populateCountySelect();\n\n\t\tif (wasZipAdd) {\n\t\t\tthis.resetZipEntry();\n\t\t}\n\t},\n\tshowZipRadiusError: function () {\n\t\tthis.zipRadiusError = new PJQ.Alert(this.$('.add-work-area-zip-button-container'), {\n\t\t\ttype: 'danger',\n\t\t\ttext: 'Unable to find new counties to add within the entered zip/radius',\n\t\t\tisPrepend: true,\n\t\t\tanimation: {\n\t\t\t\tin: 'fadeIn'\n\t\t\t}\n\t\t});\n\t},\n\tdeleteWorkAreaEvent: function (e) {\n\t\tlet row = this.workAreaDataTable.getRow($(e.currentTarget).parents('tr')),\n\t\t\tworkArea = row.data();\n\t\tthis.deleteWorkArea(row);\n\t\tthis.populateStateSelect();\n\t\tthis.populateCountySelect();\n\t\tif (workArea.isStateWorkArea()) {\n\t\t\tthis.renderStateLayers();\n\t\t}\n\t\telse if (workArea.isCountyWorkArea()) {\n\t\t\tthis.renderCountyLayers();\n\t\t}\n\t},\n\tdeleteAllWorkAreas: function () {\n\t\tnew PJQ.views.modals.DeleteCancel({\n\t\t\theader: \"Confirm Deletion\",\n\t\t\tbody: 'Are you sure you want to delete all work areas?',\n\t\t\tonDelete: _.bind(function () {\n\t\t\t\t_.each(_.clone(_.filter(this.collection.models, function (workArea) {\n\t\t\t\t\treturn !workArea.get('isDeleted');\n\t\t\t\t})), _.bind(function (workArea) {\n\t\t\t\t\tthis.deleteWorkArea(this.workAreaDataTable.getRow(workArea.cid));\n\t\t\t\t}, this));\n\t\t\t\tthis.populateStateSelect();\n\t\t\t\tthis.renderStateLayers();\n\t\t\t\tthis.populateCountySelect();\n\t\t\t\tthis.renderCountyLayers();\n\t\t\t}, this)\n\t\t});\n\t},\n\tdeleteWorkArea: function (row) {\n\t\tlet workArea = row.data();\n\t\tthis.workAreaDataTable.removeRow(row);\n\t\tif (this.options.isSync || workArea.isNew()) {\n\t\t\tworkArea.destroy();\n\t\t}\n\t\telse if (workArea.id > 0) {\n\t\t\tworkArea.set('isDeleted', true);\n\t\t}\n\t\tthis.onChange('delete', workArea);\n\t\tthis.options.onDelete()\n\t},\n\trenderDeleteAllButtons: function () {\n\t\tthis.$('.delete-all-work-areas').prop('disabled', _.size(this.collection.models) === 0);\n\t},\n\tresetZipEntry: function () {\n\t\tthis.$('.work-area-zip').val('');\n\t\tthis.setWorkAreaRadius(this.options.defaultRadius);\n\t\tthis.workAreaZipInputChanged();\n\t},\n\tsave: function (callback) {\n\t\t//This function is used when options.isSync == false\n\t\t//This is used by the code that constructs this view to save the work area data on some event outside the map (i.e. save contact in address book)\n\t\t//First delete the workareas that were deleted in the UI\n\t\tlet newWorkAreas = _.filter(this.collection.models, function (model) {\n\t\t\t\treturn model.isNew();\n\t\t\t}),\n\t\t\tdeletedWorkAreas = this.collection.where({isDeleted: true});\n\n\t\tlet addNewWorkAreas = _.bind(function() {\n\t\t\tif (_.size(newWorkAreas) > 0) {\n\t\t\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\t\tvalue: this.collection.options.contactId\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'workareas'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tendpoint: 'bulk'\n\t\t\t\t\t}\n\t\t\t\t]);\n\t\t\t\tnew PJQ.ajax.Request({\n\t\t\t\t\tendpoint: endpoint,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tworkAreaIds: _.map(newWorkAreas, function (workArea) {\n\t\t\t\t\t\t\treturn workArea.get('workAreaId')\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}).post().done(_.bind(function () {\n\t\t\t\t\tif (typeof callback === 'function') {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}, this)).fail(function () {\n\t\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (typeof callback === 'function') {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}, this);\n\n\t\tif (_.size(deletedWorkAreas) > 0) {\n\t\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'contacts',\n\t\t\t\t\tvalue: this.collection.options.contactId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'workareas'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'bulk'\n\t\t\t\t}\n\t\t\t]);\n\t\t\tnew PJQ.ajax.Request({\n\t\t\t\tendpoint: endpoint,\n\t\t\t\tdata: {\n\t\t\t\t\tworkAreaIds: _.map(deletedWorkAreas, function (workArea) {\n\t\t\t\t\t\treturn workArea.get('workAreaId')\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).delete().done(_.bind(function () {\n\t\t\t\tif (_.size(newWorkAreas) > 0) {\n\t\t\t\t\taddNewWorkAreas();\n\t\t\t\t}\n\t\t\t\telse if (typeof callback === 'function') {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}, this)).fail(function () {\n\t\t\t\tPJQ.notifications.notify.errorNotify({\n\t\t\t\t\tmessage: 'Something went wrong!'\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\telse\n\t\t{\n\t\t\taddNewWorkAreas();\n\t\t}\n\n\n\n\t},\n\tonChange: function (e, data) {\n\t\tthis.options.onChange({\n\t\t\tevent: e,\n\t\t\tdata: data,\n\t\t\tworkAreas: this.collection\n\t\t});\n\t},\n\tshowError: function (errorText) {\n\t\tthis.hideError();\n\t\tthis.errorAlert = new PJQ.Alert(this.$el, {\n\t\t\ttype: 'danger',\n\t\t\textraClasses: ['mt-1, mb-1'],\n\t\t\ttext: errorText,\n\t\t\tisPrepend: true\n\t\t});\n\t},\n\thideError: function () {\n\t\tif (this.errorAlert) {\n\t\t\tthis.errorAlert.destroy();\n\t\t}\n\t}\n});\n\nPJQ.views.workAreas.WorkAreaMapModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Work-Area-Map'),\n\t\tminWidth: 800,\n\t\tisSync: false,\n\t\tisEdit: true,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t\"click .btn-save\": \"save\"\n\t},\n\tafterRender: function () {\n\t\tthis.workAreaMap = new PJQ.views.workAreas.WorkAreaMap({\n\t\t\tel: this.$('.map-outer'),\n\t\t\tcollection: this.collection,\n\t\t\tisSync: this.options.isSync,\n\t\t\tisEdit: this.options.isEdit\n\t\t});\n\t},\n\tsave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave(this.workAreaMap.collection);\n\t\t}\n\t\tthis.removeModal();\n\t}\n});\n\nPJQ.views.workAreas.SelectWorkAreasModal = PJQ.views.BaseModal.extend({\n\tdefaults: {\n\t\tisSingleChoice: false,\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Modal-Work-Area-Select'),\n\t\tminWidth: 500,\n\t\tonSave: null\n\t},\n\tevents: {\n\t\t\"click .select-all-work-areas\": \"selectAllWorkAreas\",\n\t\t\"click .select-work-area\": \"selectWorkArea\",\n\t\t\"click .select-work-areas-save\": \"save\"\n\t},\n\tbeforeModalCreated: function () {\n\t\tthis.selectedWorkAreas = [];\n\t},\n\tafterRender: function () {\n\t\tthis.workAreasDataTable = new PJQ.views.dataTables.DataTable({\n\t\t\tel: this.$('.work-area-data-table'),\n\t\t\tdata: this.collection.models,\n\t\t\tlanguage: {\n\t\t\t\temptyTable: \"No work areas added\",\n\t\t\t\tzeroRecords: \"No work areas match the search criteria\"\n\t\t\t},\n\t\t\torder: [[0, \"asc\"], [1, \"asc\"]],\n\t\t\trowId: \"cid\",\n\t\t\tdeferRender: true,\n\t\t\tcolumns: [\n\t\t\t\t{\"data\": \"attributes.state\", \"title\": \"State\"},\n\t\t\t\t{\"data\": \"attributes.county\", \"title\": \"County\"},\n\t\t\t\t{\n\t\t\t\t\tdata: \"attributes.isSelected\",\n\t\t\t\t\ttitle: '<button type=\"button\" class=\"btn btn-orange select-all-work-areas m-0a\">Select All</button>',\n\t\t\t\t\torderable: false,\n\t\t\t\t\trender: function (data) {\n\t\t\t\t\t\treturn data ? '<button type=\"button\" class=\"btn btn-secondary select-work-area wd-80p m-0a\">Deselect</button>' : '<button type=\"button\" class=\"btn btn-primary select-work-area wd-80p m-0a\">Select</button>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tdom: '<\"top\"<\"clear\">p>rt<\"bottom\"p<\"clear\">>'\n\t\t});\n\t},\n\tselectAllWorkAreas: function () {\n\t\tthis.selectedWorkAreas = this.collection.models;\n\t\t_.each(this.collection.models, function (model) {\n\t\t\tmodel.set('isSelected', true);\n\t\t});\n\t\tthis.$('.select-work-area').text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n\t\tthis.selectWorkAreasChanged();\n\t},\n\tselectWorkArea: function (e) {\n\t\tlet target = $(e.currentTarget),\n\t\t\tdata = this.workAreasDataTable.getRow(target.parents('tr')).data();\n\t\tif (target.hasClass('btn-primary')) {\n\t\t\ttarget.text('Deselect').addClass('btn-secondary').removeClass('btn-primary');\n\t\t\tthis.selectedWorkAreas.push(data);\n\t\t\tdata.set('isSelected', true);\n\t\t}\n\t\telse {\n\t\t\ttarget.text('Select').addClass('btn-primary').removeClass('btn-secondary');\n\t\t\tthis.selectedWorkAreas = _(this.selectedWorkAreas).filter(function (workArea) {\n\t\t\t\treturn workArea.get('workAreaId') !== data.get('workAreaId');\n\t\t\t});\n\t\t\tdata.set('isSelected', true);\n\t\t}\n\t\tthis.selectWorkAreasChanged();\n\t},\n\tselectWorkAreasChanged: function () {\n\t\tthis.$('.select-all-work-areas').prop('disabled', _.size(this.selectedWorkAreas) === _.size(this.collection.models));\n\t\tthis.$('.select-work-areas-save').prop('disabled', _.size(this.selectedWorkAreas) === 0);\n\t},\n\tsave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave(this.selectedWorkAreas);\n\t\t}\n\t}\n});\n"]}