diff --git a/.codeclimate.yml b/.codeclimate.yml index bf42de6c512..b3bd00887bc 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -42,10 +42,6 @@ plugins: enabled: true coffeelint: enabled: true - csslint: - enabled: true - exclude_patterns: - - 'public/main.facf1c5e.chunk.css' duplication: enabled: true config: @@ -62,8 +58,6 @@ plugins: - 'lib/rspec/formatters/user_flow_formatter.rb' eslint: enabled: true - exclude_patterns: - - 'public/idscan-go.js' fixme: enabled: true exclude_patterns: diff --git a/app/controllers/idv/doc_auth_v2_controller.rb b/app/controllers/idv/doc_auth_v2_controller.rb deleted file mode 100644 index 8becbdf73b6..00000000000 --- a/app/controllers/idv/doc_auth_v2_controller.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Idv - class DocAuthV2Controller < DocAuthController - FSM_SETTINGS = { - step_url: :idv_doc_auth_v2_step_url, - final_url: :idv_review_url, - flow: Idv::Flows::DocAuthV2Flow, - analytics_id: Analytics::DOC_AUTH_V2, - }.freeze - - def flow_session - user_session['idv/doc_auth_v2'] - end - end -end diff --git a/app/controllers/idv/scan_id_acuant_controller.rb b/app/controllers/idv/scan_id_acuant_controller.rb deleted file mode 100644 index 3f5526c3eff..00000000000 --- a/app/controllers/idv/scan_id_acuant_controller.rb +++ /dev/null @@ -1,73 +0,0 @@ -module Idv - class ScanIdAcuantController < ScanIdBaseController - before_action :ensure_fully_authenticated_user_or_token_user_id - before_action :return_good_document_if_throttled_else_increment, only: [:document] - before_action :return_if_liveness_disabled, only: [:liveness] - before_action :return_if_throttled_else_increment, only: [:liveness] - - GOOD_DOCUMENT = { 'Result': 1, 'Fields': [{}] }.freeze - USER_SESSION_FLOW_ID = 'idv/doc_auth_v2'.freeze - - def subscriptions - render_json ::Acuant::Subscriptions.new.call - end - - def instance - session[:scan_id] = {} - render_json ::Acuant::Instance.new.call - end - - def image - render_json ::Acuant::Image.new(params[:instance_id]). - call(request.body.read, params[:side]) - end - - def classification - render_json ::Acuant::Classification.new.call - end - - def document - data, instance_id, pii = ::Acuant::Document.new(params[:instance_id]).call(current_user) - if pii - scan_id_session[:instance_id] = instance_id - scan_id_session[:pii] = pii - end - render_json data - end - - def field_image - render_json({}) - end - - def liveness - is_live, is_face_match = ::Acuant::LivenessPassThrough. - new(scan_id_session[:instance_id]).call(request.body.read) - scan_id_session[:liveness_pass] = is_live - scan_id_session[:facematch_pass] = is_face_match - render_json({}) - end - - def facematch - render_json({}) - end - - private - - def return_good_document_if_throttled_else_increment - render_json(GOOD_DOCUMENT) if Throttler::IsThrottledElseIncrement.call(*idv_throttle_params) - end - - def return_if_throttled_else_increment - render_json({}) if Throttler::IsThrottledElseIncrement.call(*idv_throttle_params) - end - - def return_if_liveness_disabled - render_json({}) unless FeatureManagement.liveness_checking_enabled? - end - - def ensure_fully_authenticated_user_or_token_user_id - return if token_user_id || (user_signed_in? && user_fully_authenticated?) - render json: {}, status: :unauthorized - end - end -end diff --git a/app/controllers/idv/scan_id_base_controller.rb b/app/controllers/idv/scan_id_base_controller.rb deleted file mode 100644 index 6d455986170..00000000000 --- a/app/controllers/idv/scan_id_base_controller.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Idv - class ScanIdBaseController < ApplicationController - private - - def scan_id_session - session[:scan_id] - end - - def current_user_id - token_user_id || current_user.id.to_i - end - - def token_user_id - session[:token_user_id] - end - - def idv_throttle_params - [current_user_id, :idv_acuant] - end - - def render_json(data) - return if data.nil? - render json: data - end - - def attempter_increment - Throttler::Increment.call(*idv_throttle_params) - end - - def attempter_throttled? - Throttler::IsThrottled.call(*idv_throttle_params) - end - - def selfie_live_and_matches_document? - scan_id_session[:facematch_pass] && scan_id_session[:liveness_pass] - end - - def liveness_checking_enabled? - FeatureManagement.liveness_checking_enabled? && sp_liveness_checking_required? - end - - def sp_liveness_checking_required? - ServiceProvider.from_issuer(sp_session[:issuer].to_s)&.liveness_checking_required - end - end -end diff --git a/app/controllers/idv/scan_id_controller.rb b/app/controllers/idv/scan_id_controller.rb deleted file mode 100644 index f03ea6edd72..00000000000 --- a/app/controllers/idv/scan_id_controller.rb +++ /dev/null @@ -1,100 +0,0 @@ -module Idv - class ScanIdController < ScanIdBaseController - before_action :ensure_fully_authenticated_user_or_token - before_action :ensure_user_not_throttled, only: [:new] - USER_SESSION_FLOW_ID = 'idv/doc_auth_v2'.freeze - - def new - SecureHeaders.append_content_security_policy_directives(request, - script_src: ['\'unsafe-eval\'']) - render layout: false - end - - def scan_complete - if all_checks_passed? - save_proofing_components - token_user_id ? continue_to_ssn_on_desktop : continue_to_ssn - else - idv_failure - end - clear_scan_id_session - end - - private - - def flow_session - user_session[USER_SESSION_FLOW_ID] - end - - def ensure_fully_authenticated_user_or_token - return if user_signed_in? && user_fully_authenticated? - ensure_user_id_in_session - end - - def ensure_user_id_in_session - return if token_user_id && token.blank? - result = CaptureDoc::ValidateRequestToken.new(token).call - analytics.track_event(Analytics::DOC_AUTH, result.to_h) - process_result(result) - end - - def process_result(result) - if result.success? - reset_session - session[:token_user_id] = result.extra[:for_user_id] - else - flash[:error] = t('errors.capture_doc.invalid_link') - redirect_to root_url - end - end - - def all_checks_passed? - scan_id_session && scan_id_session[:instance_id] && - (selfie_live_and_matches_document? || !liveness_checking_enabled?) - end - - def token - params[:token] - end - - def continue_to_ssn_on_desktop - CaptureDoc::UpdateAcuantToken.call(token_user_id, - scan_id_session[:instance_id]) - render :capture_complete - end - - def continue_to_ssn - flow_session[:pii_from_doc] = scan_id_session[:pii] - flow_session[:pii_from_doc]['uuid'] = current_user.uuid - user_session[USER_SESSION_FLOW_ID]['Idv::Steps::ScanIdStep'] = true - redirect_to idv_doc_auth_v2_step_url(step: :ssn) - end - - def clear_scan_id_session - session.delete(:scan_id) - session.delete(:token_user_id) - end - - def ensure_user_not_throttled - redirect_to idv_session_errors_throttled_url if attempter_throttled? - end - - def idv_failure - if attempter_throttled? - redirect_to idv_session_errors_throttled_url - else - redirect_to idv_session_errors_warning_url - end - end - - def save_proofing_components - save_proofing_component(:document_check, 'acuant') - save_proofing_component(:document_type, 'state_id') - save_proofing_component(:liveness_check, 'acuant') if selfie_live_and_matches_document? - end - - def save_proofing_component(key, value) - Db::ProofingComponent::Add.call(current_user_id, key, value) - end - end -end diff --git a/app/controllers/mobile_capture_controller.rb b/app/controllers/mobile_capture_controller.rb deleted file mode 100644 index 2ee3a7dbeb6..00000000000 --- a/app/controllers/mobile_capture_controller.rb +++ /dev/null @@ -1,8 +0,0 @@ -class MobileCaptureController < ApplicationController - def new - # required to run wasm until wasm-eval is available - SecureHeaders.append_content_security_policy_directives(request, - script_src: ['\'unsafe-eval\'']) - render layout: false - end -end diff --git a/app/services/acuant/classification.rb b/app/services/acuant/classification.rb deleted file mode 100644 index 136e77770e2..00000000000 --- a/app/services/acuant/classification.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Acuant - class Classification < AcuantBase - CLASSIFICATION_DATA = { - 'Type': { - }, - }.freeze - - def call - # use service when we accept multiple document types and dynamically decide # of sides - CLASSIFICATION_DATA - end - end -end diff --git a/app/services/acuant/document.rb b/app/services/acuant/document.rb deleted file mode 100644 index 47efea51897..00000000000 --- a/app/services/acuant/document.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Acuant - class Document < AcuantBase - ACUANT_PASS = 1 - - def call(user) - data = wrap_network_errors { assure_id.document } - return unless data - pii = extract_pii(data, user) - pii ? [data, assure_id.instance_id, pii] : nil - end - - private - - def extract_pii(data, user) - return unless data['Result'] == ACUANT_PASS - Idv::Utils::PiiFromDoc.new(data).call(user&.phone_configurations&.take&.phone) - end - end -end diff --git a/app/services/acuant/image.rb b/app/services/acuant/image.rb deleted file mode 100644 index 4004c2a129b..00000000000 --- a/app/services/acuant/image.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Acuant - class Image < AcuantBase - def call(body, side) - assure_id.post_image(body, side.to_i) - end - end -end diff --git a/app/services/acuant/instance.rb b/app/services/acuant/instance.rb deleted file mode 100644 index 495a9ce1310..00000000000 --- a/app/services/acuant/instance.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Acuant - class Instance < AcuantBase - def call - wrap_network_errors { assure_id.create_document } - end - end -end diff --git a/app/services/acuant/liveness_pass_through.rb b/app/services/acuant/liveness_pass_through.rb deleted file mode 100644 index e5ceb4c64be..00000000000 --- a/app/services/acuant/liveness_pass_through.rb +++ /dev/null @@ -1,62 +0,0 @@ -module Acuant - class LivenessPassThrough < AcuantBase - def call(liveness_body) - live_face_image = process_selfie(liveness_body) - return unless live_face_image - - face_image_from_document = fetch_face_from_document - return [true, false] unless face_image_from_document - - [true, check_face_match(face_image_from_document, live_face_image)] - end - - private - - def process_selfie(liveness_body) - liveness_data = wrap_network_errors { liveness_service.liveness(liveness_body) } - return unless liveness_data - return unless selfie_live?(liveness_data) - JSON.parse(liveness_body)['Image'] - end - - def fetch_face_from_document - data = wrap_network_errors { assure_id.face_image } - return if data.nil? - Base64.strict_encode64(data) - end - - def check_face_match(image1, image2) - data = wrap_network_errors { facematch_service.facematch(facematch_body(image1, image2)) } - return unless data - facematch_pass?(data) - end - - def facematch_pass?(data) - data['IsMatch'] - end - - def selfie_live?(data) - data['LivenessResult']['LivenessAssessment'] == 'Live' - end - - def facematch_body(image1, image2) - { 'Data': - { 'ImageOne': image1, - 'ImageTwo': image2 }, - 'Settings': - { 'SubscriptionId': Figaro.env.acuant_assure_id_subscription_id } }.to_json - end - - def liveness_service - (simulator_or_env_test? ? Idv::Acuant::FakeAssureId : Idv::Acuant::Liveness).new - end - - def facematch_service - (simulator_or_env_test? ? Idv::Acuant::FakeAssureId : Idv::Acuant::FacialMatch).new - end - - def simulator_or_env_test? - Rails.env.test? || Figaro.env.acuant_simulator == 'true' - end - end -end diff --git a/app/services/acuant/subscriptions.rb b/app/services/acuant/subscriptions.rb deleted file mode 100644 index 7cf0260985b..00000000000 --- a/app/services/acuant/subscriptions.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Acuant - class Subscriptions < AcuantBase - SUBSCRIPTION_DATA = [{ - 'DocumentProcessMode': 2, - 'Id': Figaro.env.acuant_assure_id_subscription_id, - 'IsActive': true, - 'IsDevelopment': Rails.env.development?, - 'IsTrial': false, - 'Name': '', - 'StorePII': false, - }].freeze - - def call - SUBSCRIPTION_DATA - end - end -end diff --git a/app/services/idv/acuant/assure_id.rb b/app/services/idv/acuant/assure_id.rb index fa8f8a7a117..b117897ccf8 100644 --- a/app/services/idv/acuant/assure_id.rb +++ b/app/services/idv/acuant/assure_id.rb @@ -1,4 +1,3 @@ -# rubocop:disable Metrics/ClassLength module Idv module Acuant class AssureId @@ -17,25 +16,6 @@ def initialize(cfg = default_cfg) @instance_id = nil end - def subscriptions - options = default_options.merge( - headers: accept_json, - ) - - url = '/AssureIDService/subscriptions' - - get(url, options) - end - - def classification - options = default_options.merge( - headers: content_type_json.merge(accept_json), - ) - - url = "/AssureIDService/Document/#{instance_id}/Classification" - get(url, options) - end - def create_document url = '/AssureIDService/Document/Instance' @@ -83,15 +63,6 @@ def post_image(image, side) post(url, options) end - def field_image(key) - options = default_options.merge( - headers: content_type_json.merge(accept_json), - ) - - url = "/AssureIDService/Document/#{instance_id}/Field/Image?key=#{key}" - get(url, options) - end - def document options = default_options.merge( headers: content_type_json.merge(accept_json), @@ -143,4 +114,3 @@ def default_options end end end -# rubocop:enable Metrics/ClassLength diff --git a/app/services/idv/acuant/fake_assure_id.rb b/app/services/idv/acuant/fake_assure_id.rb index 81af040e4e5..be708746fc9 100644 --- a/app/services/idv/acuant/fake_assure_id.rb +++ b/app/services/idv/acuant/fake_assure_id.rb @@ -3,8 +3,6 @@ module Acuant class FakeAssureId # rubocop:disable all FAKE_DATA = {'Result' => 1, "Fields"=>[{"DataFieldReferences"=>["408b3e9e-a9b8-413e-8357-309b1596077c", "3f57da6d-bd97-4ff3-80b1-85263731bd5f"], "DataSource"=>2, "Description"=>"The residence address of the bearer of the document.", "Id"=>"9fed25c7-9e1b-4b36-b7a3-6750d16855cb", "IsImage"=>false, "Key"=>"Address", "Name"=>"Address", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"1 FAKE RD\u2028GREAT FALLS, MT 59010"}, {"DataFieldReferences"=>["410aad46-b2d9-4988-b525-ba6cde88b33e"], "DataSource"=>2, "Description"=>"The bearer's city of residence.", "Id"=>"a4615b1d-5fac-4dba-978a-2f4e1dc407ec", "IsImage"=>false, "Key"=>"Address City", "Name"=>"Address City", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"GREAT FALLS"}, {"DataFieldReferences"=>["9ba08fb4-d59e-43e0-93dc-7d565e784d49"], "DataSource"=>2, "Description"=>"The first line of the bearer's residence address.", "Id"=>"7aa2330c-499e-4900-804b-157b3ca0fc0b", "IsImage"=>false, "Key"=>"Address Line 1", "Name"=>"Address Line 1", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"1 FAKE RD"}, {"DataFieldReferences"=>["d663b9c0-6bf6-447a-9b26-5f1bd863b94c"], "DataSource"=>2, "Description"=>"The postal code of the bearer's address.", "Id"=>"5d76df49-7db3-4e39-9829-22eefd9b5e01", "IsImage"=>false, "Key"=>"Address Postal Code", "Name"=>"Address Postal Code", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"59010"}, {"DataFieldReferences"=>["13de8a97-baba-430a-8d77-7455dc75299a"], "DataSource"=>2, "Description"=>"The bearer's state of residence.", "Id"=>"06ebee65-0be2-403a-a18b-09e515bb8a5e", "IsImage"=>false, "Key"=>"Address State", "Name"=>"Address State", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"MT"}, {"DataFieldReferences"=>["fa9fe5c0-2d07-4c13-b851-a8c43b21760a", "c8df1582-8977-410f-9cd2-c6753b8a63a0"], "DataSource"=>2, "Description"=>"The date of birth of the bearer.", "Id"=>"22d99783-d5c2-4791-b2df-c43bf228e0d0", "IsImage"=>false, "Key"=>"Birth Date", "Name"=>"Birth Date", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"datetime", "Value"=>"/Date(-985824000000)/"}, {"DataFieldReferences"=>[], "DataSource"=>7, "Description"=>"A name indicating the general type of the document.", "Id"=>"fcabb637-0c2e-4c52-a5eb-4df7ddea58c7", "IsImage"=>false, "Key"=>"Document Class Name", "Name"=>"Document Class Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"Drivers License"}, {"DataFieldReferences"=>["84bcfcdf-86c0-4ba1-b10b-473838184960", "e5f55535-8e1c-47b2-8c67-fd5485fcf999"], "DataSource"=>2, "Description"=>"The document's identifying number.", "Id"=>"2c737ae7-5080-4812-aaa6-fe1bb903c261", "IsImage"=>false, "Key"=>"Document Number", "Name"=>"Document Number", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"1111111111111"}, {"DataFieldReferences"=>["780dd3e1-b70b-4f4f-8ff9-2f645534c85c", "7ed24025-ed03-46a7-a427-f74082d4f7b6"], "DataSource"=>2, "Description"=>"The date of expiration of the document.", "Id"=>"6eacda7e-e317-47e5-979f-7fa57ae2df36", "IsImage"=>false, "Key"=>"Expiration Date", "Name"=>"Expiration Date", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"datetime", "Value"=>"/Date(1599264000000)/"}, {"DataFieldReferences"=>["76015f49-e387-403a-a8a6-0b8ec2bc382a", "67776400-edb1-4fdf-9b82-7d35f92ccb65"], "DataSource"=>2, "Description"=>"The eye color of the bearer of the document.", "Id"=>"d148556a-4eec-48b6-bbc9-01c41e942a08", "IsImage"=>false, "Key"=>"Eye Color", "Name"=>"Eye Color", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"BLACK"}, {"DataFieldReferences"=>["537ea9f4-b27a-47c2-ba54-9641545244ce"], "DataSource"=>2, "Description"=>"The first name of the bearer of the document.", "Id"=>"5bf72eb0-263d-4dea-ab3a-eb7597dfc4d3", "IsImage"=>false, "Key"=>"First Name", "Name"=>"First Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"FAKEY"}, {"DataFieldReferences"=>["024100fd-d074-4d19-87c4-8da3efb4046c", "8416f826-b1eb-43b0-b573-2c11e5f1b080"], "DataSource"=>2, "Description"=>"The full name (given name plus surname) of the bearer of the document.", "Id"=>"cacae480-ef39-4e11-8b21-e11b0f2636ba", "IsImage"=>false, "Key"=>"Full Name", "Name"=>"Full Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"FAKEY MCFAKERSON"}, {"DataFieldReferences"=>["c2304e29-0ec7-4557-b61f-d75161a697a0", "f54ee727-d193-4798-ba15-fb6d93138c01"], "DataSource"=>2, "Description"=>"The given name of the bearer of the document.", "Id"=>"26cc87fc-5286-4926-b837-dc38838df6fb", "IsImage"=>false, "Key"=>"Given Name", "Name"=>"Given Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"FAKEY"}, {"DataFieldReferences"=>["7435036b-2573-400f-80c9-a7e485b0f495", "cbca0558-dc3d-45de-a933-ece1d8f48cd4"], "DataSource"=>2, "Description"=>"The height of the bearer of the document.", "Id"=>"87bca3f8-c81c-416b-b016-1fe0577dfefb", "IsImage"=>false, "Key"=>"Height", "Name"=>"Height", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"6' 11\""}, {"DataFieldReferences"=>["de13ab78-cff3-4166-be2e-e71a10566805", "d63c1fcc-3d9b-4bd0-b69d-b093c53ec72d"], "DataSource"=>2, "Description"=>"The date the document was issued.", "Id"=>"88253b4d-8964-4013-b1bb-2efa7dd3c9fb", "IsImage"=>false, "Key"=>"Issue Date", "Name"=>"Issue Date", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"datetime", "Value"=>"/Date(1441411200000)/"}, {"DataFieldReferences"=>["8c8e1b31-bce8-4561-8eac-51fa3c7eb63a"], "DataSource"=>7, "Description"=>"The three-letter code of the issuer.", "Id"=>"2c36ec64-c365-4617-ae5a-c31c65fb28de", "IsImage"=>false, "Key"=>"Issuing State Code", "Name"=>"Issuing State Code", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"MT"}, {"DataFieldReferences"=>["d6db9dfd-587c-4289-848e-7b76e2c8b5ac"], "DataSource"=>7, "Description"=>"The name of the issuer.", "Id"=>"d8f1eb4e-046b-4475-8662-06186f3603de", "IsImage"=>false, "Key"=>"Issuing State Name", "Name"=>"Issuing State Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"Montana"}, {"DataFieldReferences"=>["faaa2435-5ec0-4ec1-b919-8c96dbc2f9b0"], "DataSource"=>2, "Description"=>"The class of a license document varies by issuer.", "Id"=>"ea95200c-c47b-41d5-a12d-93581dac8907", "IsImage"=>false, "Key"=>"License Class", "Name"=>"License Class", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"D"}, {"DataFieldReferences"=>["406ed9c2-3162-4d31-851c-3e075aa4fcea"], "DataSource"=>2, "Description"=>"The endorsements of the license.", "Id"=>"976b84d3-c4d9-4284-ac79-a249c3620298", "IsImage"=>false, "Key"=>"License Endorsements", "Name"=>"License Endorsements", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"YES"}, {"DataFieldReferences"=>["c83095a6-f8eb-40ca-8ee3-d294671f7b98"], "DataSource"=>2, "Description"=>"The restrictions on the use of the license vary by issuer.", "Id"=>"1f67031d-401e-4d5d-8b60-ad5b9f1227cb", "IsImage"=>false, "Key"=>"License Restrictions", "Name"=>"License Restrictions", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"YES"}, {"DataFieldReferences"=>["1cd51306-5aea-4b86-b09b-bcec1a9cefbc"], "DataSource"=>2, "Description"=>"The middle name of the bearer of the document.", "Id"=>"b29b9b1a-f636-4550-85d1-9a5a0f3a14b0", "IsImage"=>false, "Key"=>"Middle Name", "Name"=>"Middle Name", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>""}, {"DataFieldReferences"=>["bde1c9e7-e5c1-4889-9925-ff980ff397d4"], "DataSource"=>2, "Description"=>"The name suffix of the bearer of the document.", "Id"=>"961d69a4-b9b3-40d1-97bf-b74a68171d4f", "IsImage"=>false, "Key"=>"Name Suffix", "Name"=>"Name Suffix", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>""}, {"DataFieldReferences"=>["08b8bb03-e9fc-4a2d-9001-c6ac29aad6af"], "DataSource"=>6, "Description"=>"An image of the bearer of the document.", "Id"=>"8444e133-3667-4369-8dfc-60fc0c290b04", "IsImage"=>true, "Key"=>"Photo", "Name"=>"Photo", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"uri", "Value"=>"https://services.assureid.net/AssureIDService/Document/3899aab2-1da7-4e64-8c31-238f279663fc/Field/Image?key=Photo"}, {"DataFieldReferences"=>["829fc162-bd1a-4805-a506-d569eaabb2ef", "0ca24ca1-e5f9-4819-97ee-a5308dac1bff"], "DataSource"=>2, "Description"=>"The gender of the bearer of the document.", "Id"=>"c40cb3fd-ad4f-4242-a0eb-1e62a22d0423", "IsImage"=>false, "Key"=>"Sex", "Name"=>"Sex", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"F"}, {"DataFieldReferences"=>["221aee71-66a8-45b9-acd4-f7f1f29d3e9b"], "DataSource"=>6, "Description"=>"An image of the document holder's signature.", "Id"=>"391cd7e5-c800-4071-ad9a-a5cfb6bd7d4c", "IsImage"=>true, "Key"=>"Signature", "Name"=>"Signature", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"uri", "Value"=>"https://services.assureid.net/AssureIDService/Document/3899aab2-1da7-4e64-8c31-238f279663fc/Field/Image?key=Signature"}, {"DataFieldReferences"=>["5f8bebe3-fef2-495f-9afb-d00695e808c8", "edeb0e41-fba2-41c1-b3c9-8f463cff6a7d"], "DataSource"=>2, "Description"=>"The surname or family name of the bearer of the document.", "Id"=>"7bec55dc-43d9-4a8b-bf57-c1d5a035f70b", "IsImage"=>false, "Key"=>"Surname", "Name"=>"Surname", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"MCFAKERSON"}, {"DataFieldReferences"=>["ba3544f2-5fb7-45c5-b054-ed48dbd76e49", "f66b34d5-dd65-47da-becf-4d5e356fdd5d"], "DataSource"=>2, "Description"=>"The weight of the bearer of the document.", "Id"=>"55c8087f-5a2d-4b35-98a7-b379e6c5ebe7", "IsImage"=>false, "Key"=>"Weight", "Name"=>"Weight", "RegionReference"=>"00000000-0000-0000-0000-000000000000", "Type"=>"string", "Value"=>"99"}]} - GOOD_LIVENESS_DATA = {'LivenessResult':{'Score':99,'LivenessAssessment':'Live'},'Error':nil,'ErrorCode':nil,'TransactionId':'4a11ceed-7a54-45fa-9528-3945b51a1e23'} - BAD_LIVENESS_DATA = {'LivenessResult':{'Score':99,'LivenessAssessment':'Not Live'},'Error':nil,'ErrorCode':nil,'TransactionId':'4a11ceed-7a54-45fa-9528-3945b51a1e23'} FACEMATCH_DATA = { IsMatch: true } # rubocop:enable include Idv::Acuant::Http @@ -24,12 +22,6 @@ def document [true, FAKE_DATA.to_json] end - def classification - end - - def subscriptions - end - def create_document [true, @instance_id] end @@ -50,12 +42,6 @@ def face_image [true, 'foo'] end - def liveness(body) - return [false, ''] if body == 'network-error' - data = JSON.parse(body)['Image']=='live-selfie' ? GOOD_LIVENESS_DATA : BAD_LIVENESS_DATA - [true, data.to_json] - end - def results [true, FAKE_DATA] end diff --git a/app/services/idv/acuant/liveness_pass_through.rb b/app/services/idv/acuant/liveness_pass_through.rb deleted file mode 100644 index 67e79d92d27..00000000000 --- a/app/services/idv/acuant/liveness_pass_through.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Idv - module Acuant - class LivenessPassThrough - include Idv::Acuant::Http - - base_uri Figaro.env.acuant_passlive_url - - attr_accessor :instance_id - - def initialize(cfg = default_cfg) - @subscription_id = cfg.fetch(:subscription_id) - @authentication_params = cfg.slice(:username, :password) - end - - def liveness(body) - url = '/api/v1/liveness' - - options = default_options.merge( - headers: content_type_json.merge(accept_json), - body: body, - ) - post(url, options) - end - - private - - def default_cfg - { - subscription_id: env.acuant_assure_id_subscription_id, - username: env.acuant_assure_id_username, - password: env.acuant_assure_id_password, - } - end - - def default_options - { basic_auth: @authentication_params } - end - end - end -end diff --git a/app/services/idv/flows/doc_auth_v2_flow.rb b/app/services/idv/flows/doc_auth_v2_flow.rb deleted file mode 100644 index 9b92e0c1c70..00000000000 --- a/app/services/idv/flows/doc_auth_v2_flow.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Idv - module Flows - class DocAuthV2Flow < Flow::BaseFlow - STEPS = { - welcome: Idv::Steps::WelcomeStep, - upload: Idv::Steps::UploadStep, - send_link: Idv::Steps::SendLinkStep, - link_sent: Idv::Steps::LinkSentStep, - email_sent: Idv::Steps::EmailSentStep, - scan_id: Idv::Steps::ScanIdStep, - ssn: Idv::Steps::SsnStep, - verify: Idv::Steps::VerifyStep, - doc_success: Idv::Steps::DocSuccessStep, - }.freeze - - ACTIONS = { - reset: Idv::Actions::ResetAction, - redo_ssn: Idv::Actions::RedoSsnAction, - }.freeze - - attr_reader :idv_session # this is needed to support (and satisfy) the current LOA3 flow - - def initialize(controller, session, name) - @idv_session = self.class.session_idv(session) - super(controller, STEPS, ACTIONS, session[name]) - end - - def self.session_idv(session) - session[:idv] ||= { params: {}, step_attempts: { phone: 0 } } - end - end - end -end diff --git a/app/services/idv/steps/link_sent_step.rb b/app/services/idv/steps/link_sent_step.rb index 5861aa61ab4..3b4571a8576 100644 --- a/app/services/idv/steps/link_sent_step.rb +++ b/app/services/idv/steps/link_sent_step.rb @@ -28,7 +28,7 @@ def check_if_take_photo_with_phone_successful def mark_steps_complete %i[send_link link_sent email_sent mobile_front_image mobile_back_image front_image - back_image scan_id selfie].each do |step| + back_image selfie].each do |step| mark_step_complete(step) end end diff --git a/app/services/idv/steps/scan_id_step.rb b/app/services/idv/steps/scan_id_step.rb deleted file mode 100644 index 1209f36145f..00000000000 --- a/app/services/idv/steps/scan_id_step.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Idv - module Steps - class ScanIdStep < DocAuthBaseStep - def call; end - end - end -end diff --git a/app/services/idv/steps/send_link_step.rb b/app/services/idv/steps/send_link_step.rb index 5cf6d260c38..09222440e58 100644 --- a/app/services/idv/steps/send_link_step.rb +++ b/app/services/idv/steps/send_link_step.rb @@ -27,11 +27,7 @@ def formatted_destination_phone end def link(token) - if request.path.include?('doc_auth_v2') - idv_doc_auth_v2_step_dashes_url(step: :scan_id.to_s.dasherize, token: token) - else - idv_capture_doc_step_dashes_url(step: :mobile_front_image.to_s.dasherize, token: token) - end + idv_capture_doc_step_dashes_url(step: :mobile_front_image.to_s.dasherize, token: token) end def throttled_else_increment diff --git a/app/views/idv/doc_auth/_start_over_or_cancel.html.erb b/app/views/idv/doc_auth/_start_over_or_cancel.html.erb new file mode 100644 index 00000000000..2cb86fb6487 --- /dev/null +++ b/app/views/idv/doc_auth/_start_over_or_cancel.html.erb @@ -0,0 +1,9 @@ +
+<%= button_to( + t('doc_auth.buttons.start_over'), + idv_doc_auth_step_path(:reset), + method: :put, + class: 'btn btn-link', + form_class: 'inline-block' +) %> +<%= render 'shared/cancel', link: idv_cancel_path %> diff --git a/app/views/idv/doc_auth/_start_over_or_cancel.html.slim b/app/views/idv/doc_auth/_start_over_or_cancel.html.slim deleted file mode 100644 index dcf37164f02..00000000000 --- a/app/views/idv/doc_auth/_start_over_or_cancel.html.slim +++ /dev/null @@ -1,6 +0,0 @@ -- reset_link = request.path.include?('v2') ? idv_doc_auth_v2_step_path(:reset) : \ - idv_doc_auth_step_path(:reset) -br -= button_to(t('doc_auth.buttons.start_over'), reset_link, method: :put, - class: 'btn btn-link', form_class: 'inline-block') -= render 'shared/cancel', link: idv_cancel_path diff --git a/app/views/idv/doc_auth_v2/_back_of_state_id_image.slim b/app/views/idv/doc_auth_v2/_back_of_state_id_image.slim deleted file mode 100644 index 2ec8f120c48..00000000000 --- a/app/views/idv/doc_auth_v2/_back_of_state_id_image.slim +++ /dev/null @@ -1,3 +0,0 @@ -= image_tag(asset_url('state-id-back.svg'), height: 140) -br -br diff --git a/app/views/idv/doc_auth_v2/_error_messages.html.slim b/app/views/idv/doc_auth_v2/_error_messages.html.slim deleted file mode 100644 index 1f3da989a47..00000000000 --- a/app/views/idv/doc_auth_v2/_error_messages.html.slim +++ /dev/null @@ -1,4 +0,0 @@ -- unless flow_session[:error_message].nil? - .alert.alert-error - = flow_session[:error_message] - = render 'idv/doc_auth/in_person_proofing_option' diff --git a/app/views/idv/doc_auth_v2/_front_of_state_id_image.slim b/app/views/idv/doc_auth_v2/_front_of_state_id_image.slim deleted file mode 100644 index ac11e1895c5..00000000000 --- a/app/views/idv/doc_auth_v2/_front_of_state_id_image.slim +++ /dev/null @@ -1,3 +0,0 @@ -= image_tag(asset_url('state-id-front.svg'), height: 140) -br -br diff --git a/app/views/idv/doc_auth_v2/_in_person_proofing_option.html.slim b/app/views/idv/doc_auth_v2/_in_person_proofing_option.html.slim deleted file mode 100644 index 274cc39c91c..00000000000 --- a/app/views/idv/doc_auth_v2/_in_person_proofing_option.html.slim +++ /dev/null @@ -1,3 +0,0 @@ -- if FeatureManagement.in_person_proofing_enabled? - br - = link_to t('in_person_proofing.opt_in_link'), idv_in_person_step_path(:welcome) diff --git a/app/views/idv/doc_auth_v2/_notices.html.slim b/app/views/idv/doc_auth_v2/_notices.html.slim deleted file mode 100644 index f9c3e95ccfd..00000000000 --- a/app/views/idv/doc_auth_v2/_notices.html.slim +++ /dev/null @@ -1,2 +0,0 @@ -- if flow_session[:notice].present? - .alert.alert-notice == flow_session[:notice] diff --git a/app/views/idv/doc_auth_v2/_spinner.slim b/app/views/idv/doc_auth_v2/_spinner.slim deleted file mode 100644 index c32828e594a..00000000000 --- a/app/views/idv/doc_auth_v2/_spinner.slim +++ /dev/null @@ -1,7 +0,0 @@ -div class='pl1 sm-col sm-col-3' - .spinner[id='submit-spinner', class='hidden'] - = image_tag(asset_url('wait.gif'), - srcset: asset_url('wait.gif'), - height: 50, - width: 50, - alt: '') diff --git a/app/views/idv/doc_auth_v2/_start_over_or_cancel.html.slim b/app/views/idv/doc_auth_v2/_start_over_or_cancel.html.slim deleted file mode 100644 index f662b97c00b..00000000000 --- a/app/views/idv/doc_auth_v2/_start_over_or_cancel.html.slim +++ /dev/null @@ -1,4 +0,0 @@ -br -= button_to(t('doc_auth.buttons.start_over'), idv_doc_auth_step_path(:reset), method: :put, - class: 'btn btn-link', form_class: 'inline-block') -= render 'shared/cancel', link: idv_cancel_path diff --git a/app/views/idv/doc_auth_v2/_submit_with_spinner.slim b/app/views/idv/doc_auth_v2/_submit_with_spinner.slim deleted file mode 100644 index 426ad82699f..00000000000 --- a/app/views/idv/doc_auth_v2/_submit_with_spinner.slim +++ /dev/null @@ -1,4 +0,0 @@ -button type='submit' class='btn btn-primary btn-wide sm-col sm-col-6' - = t('forms.buttons.continue') -= render 'idv/doc_auth/spinner' -.clearfix diff --git a/app/views/idv/doc_auth_v2/_tips_and_sample.slim b/app/views/idv/doc_auth_v2/_tips_and_sample.slim deleted file mode 100644 index eb8e81eae07..00000000000 --- a/app/views/idv/doc_auth_v2/_tips_and_sample.slim +++ /dev/null @@ -1,17 +0,0 @@ -b - = t('doc_auth.tips.header_text') -ul - li - = t('doc_auth.tips.text1') - li - = t('doc_auth.tips.text2') - li - = t('doc_auth.tips.text3') - li - = t('doc_auth.tips.text4') - li - = t('doc_auth.tips.text5') - li - = t('doc_auth.tips.text6') - li - = t('doc_auth.tips.text7') diff --git a/app/views/idv/doc_auth_v2/back_image.html.slim b/app/views/idv/doc_auth_v2/back_image.html.slim deleted file mode 100644 index 2e8c373a1de..00000000000 --- a/app/views/idv/doc_auth_v2/back_image.html.slim +++ /dev/null @@ -1,28 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= render 'idv/doc_auth/error_messages', flow_session: flow_session - -= render 'idv/doc_auth/back_of_state_id_image' - -h1.h3.my0 = t('doc_auth.headings.upload_back') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-8.px1.mt2 - = f.input :image, label: false, as: 'file', required: true - = accordion('totp-info', t('doc_auth.tips.title_html'), - wrapper_css: 'mb2 col-12 fs-16p') do - = render 'idv/doc_auth/tips_and_sample' - .center - = image_tag(asset_url('state-id-sample-back.jpg'), height: 338, width: 450) - = render 'idv/doc_auth/notices', flow_session: flow_session - .mb4 id= 'target' - .mt2 - = render 'idv/doc_auth/submit_with_spinner' -br -= t('doc_auth.info.upload_image') -br - -= render 'idv/doc_auth/start_over_or_cancel' -== javascript_pack_tag 'image-preview' diff --git a/app/views/idv/doc_auth_v2/doc_success.html.slim b/app/views/idv/doc_auth_v2/doc_success.html.slim deleted file mode 100644 index 2f75c2a402d..00000000000 --- a/app/views/idv/doc_auth_v2/doc_success.html.slim +++ /dev/null @@ -1,15 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= image_tag(asset_url('state-id-confirm@3x.png'), width: 210) - -h1.h3.mb2.mt3.my0 = t('doc_auth.forms.doc_success') - -br -= form_for('', url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - - f.simple_fields_for :doc_auth do - button type='submit' class='btn btn-primary btn-wide sm-col-6 col-12' - = t('forms.buttons.continue') - -.mt2.pt1.border-top - = link_to t('links.cancel'), idv_cancel_path, class: 'h5' diff --git a/app/views/idv/doc_auth_v2/email_sent.html.slim b/app/views/idv/doc_auth_v2/email_sent.html.slim deleted file mode 100644 index baaee31caa6..00000000000 --- a/app/views/idv/doc_auth_v2/email_sent.html.slim +++ /dev/null @@ -1,7 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= image_tag(asset_url('state-id-confirm@3x.png'), width: 210) - -h1.h3.mb2.mt3.my0 = t('doc_auth.instructions.email_sent', email: current_user.email) - -= render 'idv/doc_auth/start_over_or_cancel' diff --git a/app/views/idv/doc_auth_v2/front_image.html.slim b/app/views/idv/doc_auth_v2/front_image.html.slim deleted file mode 100644 index 25c85c09371..00000000000 --- a/app/views/idv/doc_auth_v2/front_image.html.slim +++ /dev/null @@ -1,28 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= render 'idv/doc_auth/error_messages', flow_session: flow_session - -= render 'idv/doc_auth/front_of_state_id_image' - -h1.h3.my0 = t('doc_auth.headings.upload_front') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-8.px1.mt2 - = f.input :image, label: false, as: 'file', required: true - = accordion('totp-info', t('doc_auth.tips.title_html'), - wrapper_css: 'mb2 col-12 fs-16p') do - = render 'idv/doc_auth/tips_and_sample' - .center - = image_tag(asset_url('state-id-sample-front.jpg'), height: 338, width: 450) - = render 'idv/doc_auth/notices', flow_session: flow_session - .mb4 id= 'target' - .mt2 - = render 'idv/doc_auth/submit_with_spinner' -br -= t('doc_auth.info.upload_image') -br - -= render 'idv/doc_auth/start_over_or_cancel' -== javascript_pack_tag 'image-preview' diff --git a/app/views/idv/doc_auth_v2/link_sent.html.erb b/app/views/idv/doc_auth_v2/link_sent.html.erb deleted file mode 100644 index 36a868e2e16..00000000000 --- a/app/views/idv/doc_auth_v2/link_sent.html.erb +++ /dev/null @@ -1,44 +0,0 @@ -<% title t('doc_auth.titles.doc_auth') %> - - -<% if @meta_refresh && !FeatureManagement.doc_capture_polling_enabled? %> - <%= content_for(:meta_refresh) { "#{@meta_refresh}" } %> -<% end %> -<% if flow_session[:error_message] %> -

- <%= flow_session[:error_message] %> -

-<% end %> -

<%= t('doc_auth.headings.text_message') %>

- -
- -
-
- <%= image_tag asset_url('idv/phone.png') %> -
-
-

<%= t('doc_auth.info.link_sent').first %>

-

- <%= t('doc_auth.info.link_sent').last %> -

-
-
- -
- <%= - button_to( - t('forms.buttons.continue'), - url_for, - method: :put, - class: 'btn btn-primary btn-wide sm-col-6 col-12', - form_class: 'doc_capture_continue_button_form' - ) - %> -
- -<%= render 'idv/doc_auth/start_over_or_cancel' %> - -<% if FeatureManagement.doc_capture_polling_enabled? %> - <%= javascript_pack_tag 'doc_capture_polling' %> -<% end %> diff --git a/app/views/idv/doc_auth_v2/mobile_back_image.html.slim b/app/views/idv/doc_auth_v2/mobile_back_image.html.slim deleted file mode 100644 index 9bf207808ab..00000000000 --- a/app/views/idv/doc_auth_v2/mobile_back_image.html.slim +++ /dev/null @@ -1,30 +0,0 @@ --title t('doc_auth.titles.doc_auth') - -= render 'idv/doc_auth/error_messages', flow_session: flow_session - -= render 'idv/doc_auth/back_of_state_id_image' - -h1.h3.mb0 = t('doc_auth.headings.take_pic_back') - -h5.mt0 = t('doc_auth.instructions.take_pic') -ul - li = t('doc_auth.instructions.take_pic1') - li = t('doc_auth.instructions.take_pic2') - li = t('doc_auth.instructions.take_pic3') - li = t('doc_auth.instructions.take_pic4') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-9.px1 - button class='btn btn-secondary' id='take_picture' = t('doc_auth.buttons.take_picture') - = f.input :image, label: false, as: 'file', required: true, input_html: {class: 'hidden'} - = render 'idv/doc_auth/notices', flow_session: flow_session - - div id= 'target' - br - .mt4 - = render 'idv/doc_auth/submit_with_spinner' - -= render 'idv/doc_auth/start_over_or_cancel' -== javascript_pack_tag 'image-preview' diff --git a/app/views/idv/doc_auth_v2/mobile_front_image.html.slim b/app/views/idv/doc_auth_v2/mobile_front_image.html.slim deleted file mode 100644 index 86794500dfc..00000000000 --- a/app/views/idv/doc_auth_v2/mobile_front_image.html.slim +++ /dev/null @@ -1,30 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= render 'idv/doc_auth/error_messages', flow_session: flow_session - -= render 'idv/doc_auth/front_of_state_id_image' - -h1.h3.mb0 = t('doc_auth.headings.take_pic_front') - -h5.mt0 = t('doc_auth.instructions.take_pic') -ul - li = t('doc_auth.instructions.take_pic1') - li = t('doc_auth.instructions.take_pic2') - li = t('doc_auth.instructions.take_pic3') - li = t('doc_auth.instructions.take_pic4') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-8.px1 - button class='btn btn-secondary' id='take_picture' = t('doc_auth.buttons.take_picture') - = f.input :image, label: false, as: 'file', required: true, input_html: {class: 'hidden'} - = render 'idv/doc_auth/notices', flow_session: flow_session - div id= 'target' - br - .mt0 - = render 'idv/doc_auth/submit_with_spinner' -br - -= render 'idv/doc_auth/start_over_or_cancel' -== javascript_pack_tag 'image-preview' diff --git a/app/views/idv/doc_auth_v2/overview.html.erb b/app/views/idv/doc_auth_v2/overview.html.erb deleted file mode 100644 index e0a59158197..00000000000 --- a/app/views/idv/doc_auth_v2/overview.html.erb +++ /dev/null @@ -1,77 +0,0 @@ -<% if flow_session[:error_message] %> -
<%= flow_session[:error_message] %>
-<% end %> - -

<%= t('recover.overview.heading') %>

-

<%= t('recover.overview.description') %>

-

<%= t('recover.instructions.heading') %>

- - - -<%= simple_form_for :doc_auth, - url: url_for, - method: 'put', - html: { autocomplete: 'off', role: 'form', class: 'mt2' } do |f| %> -
- - <%= f.button :submit, t('recover.buttons.continue'), class: 'btn btn-primary btn-wide sm-col-6 col-6 no-auto-enable' %> -<% end %> - -
- -
- <%= link_to(t('links.cancel'), idv_cancel_path, class: 'h5') %> -
- -<%= javascript_pack_tag('clipboard') %> -<%= javascript_pack_tag('ial2-consent-button') %> diff --git a/app/views/idv/doc_auth_v2/recover.html.slim b/app/views/idv/doc_auth_v2/recover.html.slim deleted file mode 100644 index 10689a9cfdb..00000000000 --- a/app/views/idv/doc_auth_v2/recover.html.slim +++ /dev/null @@ -1,18 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= image_tag(asset_url('alert/success.svg'), width: 60) - -h1.h1.mb2.mt3.my0 = t('recover.reverify.email_confirmed') -hr -h1.h1.mb1.mt3.my0 = t('recover.reverify.reverify') -= t('recover.reverify.instructions') -br -br -= form_for('', url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - - f.simple_fields_for :doc_auth do - button type='submit' class='btn btn-primary btn-wide sm-col-6 col-12' - = t('forms.buttons.continue') - -.mt2.pt1.border-top - = link_to t('links.cancel'), idv_cancel_path, class: 'h5' diff --git a/app/views/idv/doc_auth_v2/send_link.html.slim b/app/views/idv/doc_auth_v2/send_link.html.slim deleted file mode 100644 index bd31e369f99..00000000000 --- a/app/views/idv/doc_auth_v2/send_link.html.slim +++ /dev/null @@ -1,27 +0,0 @@ -- if flow_session[:error_message] - .alert.alert-error = flow_session[:error_message] - -- title t('doc_auth.titles.doc_auth') - -h1.h3 = t('doc_auth.headings.take_picture') - -p.mt-tiny.mb3 = t('doc_auth.info.take_picture') - -p.mt-tiny.mb3.bold = t('doc_auth.info.camera_required') - -p.mt-tiny.mb3 = t('doc_auth.instructions.send_sms') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-8.px1 - / using :tel for mobile numeric keypad - = f.label :phone, label: t('idv.form.phone'), class: 'bold' - = f.input :phone, required: true, input_html: { class: 'sm-col-8' }, label: false, - wrapper_html: { class: 'mr2' } - - .mt0 - button type='submit' class='btn btn-primary btn-wide sm-col-6 col-12' - = t('forms.buttons.continue') - -= render 'idv/doc_auth/start_over_or_cancel' diff --git a/app/views/idv/doc_auth_v2/ssn.html.slim b/app/views/idv/doc_auth_v2/ssn.html.slim deleted file mode 100644 index 83e2a782519..00000000000 --- a/app/views/idv/doc_auth_v2/ssn.html.slim +++ /dev/null @@ -1,23 +0,0 @@ --title t('doc_auth.titles.doc_auth') - -h1.h3.my0 = t('doc_auth.headings.ssn') - -= simple_form_for(:doc_auth, url: url_for, method: 'PUT', - html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do |f| - .clearfix.mxn1 - .sm-col.sm-col-6.px1.mt2 - / using :tel for mobile numeric keypad - / maxlength set and includes '-' delimiters to work around cleave bug - = f.input :ssn, as: :tel, - label: t('idv.form.ssn_label_html'), required: true, - pattern: '^\d{3}-?\d{2}-?\d{4}$', - maxlength: 11, - input_html: { class: 'ssn', value: '' } - - p = flow_session[:error_message] - - .mt0 - button type='submit' class='btn btn-primary btn-wide sm-col-6 col-12' - = t('forms.buttons.continue') - -= render 'idv/doc_auth/start_over_or_cancel' diff --git a/app/views/idv/doc_auth_v2/upload.html.slim b/app/views/idv/doc_auth_v2/upload.html.slim deleted file mode 100644 index 79c23fb6dd0..00000000000 --- a/app/views/idv/doc_auth_v2/upload.html.slim +++ /dev/null @@ -1,39 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -h1.h3.mt0.mb1 = t('doc_auth.headings.upload') -= t('doc_auth.info.upload') - -.mt2.mb3 = link_to t('idv.messages.jurisdiction.no_id'), idv_jurisdiction_failure_path(:no_id) --if Figaro.env.cac_proofing_enabled == 'true' && desktop_device? - .mt2.mb3 = t('doc_auth.info.use_cac_html', link: link_to(t('doc_auth.info.use_cac_link'), - idv_cac_step_path(step: :choose_method))) -hr - -.clearfix.mt3.mb3 - .sm-col.sm-col-3 = image_tag \ - asset_url('idv/phone.png', alt: t('image_description.camera_mobile_phone')), - width: 80 - .usa-tag.caps.text-ink.bg-primary-lighter.margin-top-1.display-inline-block - = t('doc_auth.info.tag') - .sm-col.sm-col-9 - .bold.h1.margin-y-105 = t('doc_auth.headings.upload_from_phone') - = t('doc_auth.info.upload_from_phone') - br - = simple_form_for(:doc_auth, url: url_for(type: :mobile), - method: 'PUT', html: { autocomplete: 'off', role: 'form', class: 'mt2' }) do - button type='submit' class='btn btn-primary margin-top-05' - = t('doc_auth.buttons.use_phone') - -hr - -.clearfix.mt3.mb3 - .sm-col.sm-col-12 - = t('doc_auth.info.upload_from_computer') - |   - = simple_form_for(:doc_auth, url: url_for(type: :desktop), - method: 'PUT', html: { autocomplete: 'off', role: 'form', class: 'inline' }) do - button type='submit' class='btn-link' - = t('doc_auth.info.upload_computer_link') - -= render 'idv/doc_auth/start_over_or_cancel' -== javascript_pack_tag 'image-preview' diff --git a/app/views/idv/doc_auth_v2/verify.html.slim b/app/views/idv/doc_auth_v2/verify.html.slim deleted file mode 100644 index 2da748ebbbf..00000000000 --- a/app/views/idv/doc_auth_v2/verify.html.slim +++ /dev/null @@ -1,21 +0,0 @@ --title t('doc_auth.titles.doc_auth') - -h1.h3.my0 = t('doc_auth.headings.verify') -.mt3.mb2 - div = "#{t('doc_auth.forms.first_name')}: #{flow_session[:pii_from_doc][:first_name]}" - div = "#{t('doc_auth.forms.last_name')}: #{flow_session[:pii_from_doc][:last_name]}" - div = "#{t('doc_auth.forms.dob')}: #{flow_session[:pii_from_doc][:dob]}" - hr - .right = link_to(t('doc_auth.buttons.change_address'), idv_address_url) - div = "#{t('doc_auth.forms.address1')}: #{flow_session[:pii_from_doc][:address1]}" - div = "#{t('doc_auth.forms.city')}: #{flow_session[:pii_from_doc][:city]}" - div = "#{t('doc_auth.forms.state')}: #{flow_session[:pii_from_doc][:state]}" - div = "#{t('doc_auth.forms.zip_code')}: #{flow_session[:pii_from_doc][:zipcode]}" - hr - .right = button_to(t('doc_auth.buttons.change_ssn'), idv_doc_auth_step_path(step: :redo_ssn), - method: :put, class: 'btn btn-link') - = "#{t('doc_auth.forms.ssn')}: #{flow_session[:pii_from_doc][:ssn]}" - .mt4 = button_to(t('forms.buttons.continue'), url_for, method: :put, - class: 'btn btn-primary btn-wide sm-col-6 col-12') - -= render 'idv/doc_auth/start_over_or_cancel' diff --git a/app/views/idv/doc_auth_v2/welcome.html.erb b/app/views/idv/doc_auth_v2/welcome.html.erb deleted file mode 100644 index 2c6e2dcf77a..00000000000 --- a/app/views/idv/doc_auth_v2/welcome.html.erb +++ /dev/null @@ -1,95 +0,0 @@ -<% if flow_session[:error_message] %> -
<%= flow_session[:error_message] %>
-<% end %> - -

<%= t('doc_auth.headings.welcome') %>

-

<%= t('doc_auth.info.welcome') %>

-

<%= t('doc_auth.instructions.welcome') %>

- - - -<%= simple_form_for :doc_auth, - url: url_for, - method: 'put', - html: { autocomplete: 'off', role: 'form', class: 'mt2' } do |f| %> -
- - <%= f.button :submit, t('doc_auth.buttons.continue'), class: 'btn btn-primary btn-wide sm-col-6 col-6 no-auto-enable' %> -<% end %> - -
- -
- <% if user_fully_authenticated? %> - <%= link_to(cancel_link_text, account_path, class: 'h5') %> - <% else %> - <%= link_to(t('two_factor_authentication.choose_another_option'), two_factor_options_path) %> - <% end %> -
- -<%= javascript_pack_tag('clipboard') %> -<%= javascript_pack_tag('ial2-consent-button') %> diff --git a/app/views/idv/scan_id/capture_complete.html.slim b/app/views/idv/scan_id/capture_complete.html.slim deleted file mode 100644 index 43245e4a9c4..00000000000 --- a/app/views/idv/scan_id/capture_complete.html.slim +++ /dev/null @@ -1,8 +0,0 @@ -- title t('doc_auth.titles.doc_auth') - -= image_tag(asset_url('alert/success.svg'), width: 60) - -h1.h2.mb2.mt3.my0 = t('doc_auth.headings.capture_complete') -hr -h1.h2.mb2.mt3.my0 = t('doc_auth.instructions.switch_back') -= image_tag(asset_url('idv/switch.png'), width: 193) diff --git a/app/views/idv/scan_id/fail.html.erb b/app/views/idv/scan_id/fail.html.erb deleted file mode 100644 index 0e30acbadcb..00000000000 --- a/app/views/idv/scan_id/fail.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<% title t('idv.titles.hardfail', app: APP_NAME) %> - -<%= image_tag(asset_url('alert/temp-lock.svg'), width: 54) %> - -

<%= t('idv.titles.hardfail', app: APP_NAME) %>

- -

<%= t('idv.messages.hardfail', hours: Figaro.env.idv_attempt_window_in_hours) %>

diff --git a/app/views/idv/scan_id/new.html.erb b/app/views/idv/scan_id/new.html.erb deleted file mode 100644 index 4dc70909d81..00000000000 --- a/app/views/idv/scan_id/new.html.erb +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - login.gov Mobile Capture - - - <%== csrf_meta_tags %> - - - -
- - - - - diff --git a/config/application.yml.default b/config/application.yml.default index 12d9be12644..a1cfd4d4ee7 100644 --- a/config/application.yml.default +++ b/config/application.yml.default @@ -167,7 +167,6 @@ development: doc_capture_polling_enabled: 'true' domain_name: localhost:3000 email_deletion_enabled: 'true' - enable_mobile_capture: 'true' enable_rate_limiting: 'false' enable_test_routes: 'true' enable_usps_verification: 'true' @@ -278,7 +277,6 @@ production: doc_capture_polling_enabled: 'true' domain_name: login.gov email_deletion_enabled: 'false' - enable_mobile_capture: 'false' enable_rate_limiting: 'true' enable_test_routes: 'false' enable_usps_verification: 'false' @@ -385,7 +383,6 @@ test: doc_capture_polling_enabled: 'false' domain_name: www.example.com email_deletion_enabled: 'true' - enable_mobile_capture: 'true' enable_rate_limiting: 'true' enable_test_routes: 'true' enable_usps_verification: 'true' diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb index 9f60031caa3..8ce193864ff 100644 --- a/config/initializers/secure_headers.rb +++ b/config/initializers/secure_headers.rb @@ -7,7 +7,7 @@ config.x_permitted_cross_domain_policies = 'none' connect_src = ["'self'", '*.newrelic.com', '*.nr-data.net', '*.google-analytics.com', - 'sentry.io', 'services.assureid.net'] + 'services.assureid.net'] connect_src << %w[ws://localhost:3035 http://localhost:3035] if Rails.env.development? default_csp_config = { default_src: ["'self'"], @@ -15,7 +15,7 @@ # frame_ancestors: %w('self'), # CSP 2.0 only; overriden by x_frame_options in some browsers block_all_mixed_content: true, # CSP 2.0 only; connect_src: connect_src.flatten, - font_src: ["'self'", 'data:', Figaro.env.asset_host, 'fonts.gstatic.com'], + font_src: ["'self'", 'data:', Figaro.env.asset_host], img_src: [ "'self'", 'data:', @@ -43,7 +43,7 @@ config.csp = if !Rails.env.production? default_csp_config.merge( script_src: ["'self'", "'unsafe-eval'", "'unsafe-inline'"], - style_src: ["'self'", "'unsafe-inline'", 'fonts.googleapis.com'], + style_src: ["'self'", "'unsafe-inline'"], ) else default_csp_config diff --git a/config/routes.rb b/config/routes.rb index ba78ddce240..173576ff5e7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -292,7 +292,6 @@ get '/address' => 'address#new' post '/address' => 'address#update' get '/doc_auth' => 'doc_auth#index' - get '/doc_auth/scan_id' => 'idv/scan_id#new' get '/doc_auth/:step' => 'doc_auth#show', as: :doc_auth_step put '/doc_auth/:step' => 'doc_auth#update' get '/doc_auth/link_sent/poll' => 'doc_auth#doc_capture_poll' @@ -315,31 +314,6 @@ get '/cac/:step' => 'cac#show', as: :cac_step put '/cac/:step' => 'cac#update' end - if Figaro.env.enable_mobile_capture == 'true' - get '/verify/doc_auth_v2' => 'idv/doc_auth_v2#index' - get '/verify/doc_auth_v2/scan_id' => 'idv/scan_id#new' - get '/verify/doc_auth_v2/:step' => 'idv/doc_auth_v2#show', as: :idv_doc_auth_v2_step - put '/verify/doc_auth_v2/:step' => 'idv/doc_auth_v2#update' - get '/verify/doc_auth_v2/link_sent/poll' => 'idv/doc_auth_v2#doc_capture_poll' - get '/verify/doc-auth-v2/:step' => 'idv/doc_auth_v2#show', - # sometimes underscores get messed up when linked to via SMS - as: :idv_doc_auth_v2_step_dashes - - get '/scan_id' => 'idv/scan_id#new' - get '/scan_complete' => 'idv/scan_id#scan_complete' - get '/capture/photo' => 'idv/scan_id#new' - get '/capture/camera' => 'idv/scan_id#new' - get '/photo/confirm' => 'idv/scan_id#new' - get '/capture/selfie' => 'idv/scan_id#new' - get '/AssureIDService/subscriptions' => 'idv/scan_id_acuant#subscriptions' - post '/AssureIDService/Document/Instance' => 'idv/scan_id_acuant#instance' - post '/AssureIDService/Document/:instance_id/Image' => 'idv/scan_id_acuant#image' - get '/AssureIDService/Document/:instance_id/Classification' => 'idv/scan_id_acuant#classification' - get '/AssureIDService/Document/:instance_id' => 'idv/scan_id_acuant#document' - get '/AssureIDService/Document/:instance_id/Field/Image' => 'idv/scan_id_acuant#field_image' - post '/api/v1/liveness' => 'idv/scan_id_acuant#liveness' - post '/api/v1/facematch' => 'idv/scan_id_acuant#facematch' - end get '/account/verify' => 'users/verify_account#index', as: :verify_account post '/account/verify' => 'users/verify_account#create' diff --git a/public/2.59d719ca.chunk.js b/public/2.59d719ca.chunk.js deleted file mode 100644 index a007053967d..00000000000 --- a/public/2.59d719ca.chunk.js +++ /dev/null @@ -1,8 +0,0 @@ -(this["webpackJsonpidscan-go"]=this["webpackJsonpidscan-go"]||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(231)},function(e,t,n){var r=n(11),o=n(22),i=n(31),a=n(27),u=n(42),s=function e(t,n,s){var c,l,f,d,p=t&e.F,h=t&e.G,v=t&e.P,y=t&e.B,m=h?r:t&e.S?r[n]||(r[n]={}):(r[n]||{}).prototype,_=h?o:o[n]||(o[n]={}),g=_.prototype||(_.prototype={});for(c in h&&(s=n),s)f=((l=!p&&m&&void 0!==m[c])?m:s)[c],d=y&&l?u(f,r):v&&"function"==typeof f?u(Function.call,f):f,m&&a(m,c,f,t&e.U),_[c]!=f&&i(_,c,d),v&&g[c]!=f&&(g[c]=f)};r.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},function(e,t,n){e.exports=n(442)()},function(e,t,n){var r=n(5);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t){e.exports=function(e){return"object"===typeof e?null!==e:"function"===typeof e}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(u)throw u;for(var r=!1,o={},i=0;i0&&void 0!==arguments[0]?arguments[0]:"store",n=arguments[1]||t+"Subscription",o=function(e){function o(n,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,e.call(this,n,r));return i[t]=n.store,i}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(o,e),o.prototype.getChildContext=function(){var e;return(e={})[t]=this[t],e[n]=null,e},o.prototype.render=function(){return r.Children.only(this.props.children)},o}(r.Component);return o.propTypes={store:u.isRequired,children:i.a.element.isRequired},o.childContextTypes=((e={})[t]=u.isRequired,e[n]=a,e),o}var c=s(),l=n(108),f=n.n(l),d=n(15),p=n.n(d);var h=null,v={notify:function(){}};var y=function(){function e(t,n,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.store=t,this.parentSub=n,this.onStateChange=r,this.unsubscribe=null,this.listeners=v}return e.prototype.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},e.prototype.notifyNestedSubs=function(){this.listeners.notify()},e.prototype.isSubscribed=function(){return Boolean(this.unsubscribe)},e.prototype.trySubscribe=function(){this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=function(){var e=[],t=[];return{clear:function(){t=h,e=h},notify:function(){for(var n=e=t,r=0;r1&&void 0!==arguments[1]?arguments[1]:{},i=o.getDisplayName,s=void 0===i?function(e){return"ConnectAdvanced("+e+")"}:i,c=o.methodName,l=void 0===c?"connectAdvanced":c,d=o.renderCountProp,h=void 0===d?void 0:d,v=o.shouldHandleStateChanges,w=void 0===v||v,E=o.storeKey,S=void 0===E?"store":E,O=o.withRef,x=void 0!==O&&O,T=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(o,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),R=S+"Subscription",k=_++,P=((t={})[S]=u,t[R]=a,t),C=((n={})[R]=a,n);return function(t){p()("function"==typeof t,"You must pass a component to the function returned by "+l+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",o=s(n),i=m({},T,{getDisplayName:s,methodName:l,renderCountProp:h,shouldHandleStateChanges:w,storeKey:S,withRef:x,displayName:o,wrappedComponentName:n,WrappedComponent:t}),a=function(n){function a(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,n.call(this,e,t));return r.version=k,r.state={},r.renderCount=0,r.store=e[S]||t[S],r.propsMode=Boolean(e[S]),r.setWrappedInstance=r.setWrappedInstance.bind(r),p()(r.store,'Could not find "'+S+'" in either the context or props of "'+o+'". Either wrap the root component in a , or explicitly pass "'+S+'" as a prop to "'+o+'".'),r.initSelector(),r.initSubscription(),r}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(a,n),a.prototype.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[R]=t||this.context[R],e},a.prototype.componentDidMount=function(){w&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},a.prototype.componentWillReceiveProps=function(e){this.selector.run(e)},a.prototype.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},a.prototype.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=b,this.store=null,this.selector.run=b,this.selector.shouldComponentUpdate=!1},a.prototype.getWrappedInstance=function(){return p()(x,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+l+"() call."),this.wrappedInstance},a.prototype.setWrappedInstance=function(e){this.wrappedInstance=e},a.prototype.initSelector=function(){var t=e(this.store.dispatch,i);this.selector=function(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(i){n.shouldComponentUpdate=!0,n.error=i}}};return n}(t,this.store),this.selector.run(this.props)},a.prototype.initSubscription=function(){if(w){var e=(this.propsMode?this.props:this.context)[R];this.subscription=new y(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},a.prototype.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(g)):this.notifyNestedSubs()},a.prototype.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},a.prototype.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},a.prototype.addExtraProps=function(e){if(!x&&!h&&(!this.propsMode||!this.subscription))return e;var t=m({},e);return x&&(t.ref=this.setWrappedInstance),h&&(t[h]=this.renderCount++),this.propsMode&&this.subscription&&(t[R]=this.subscription),t},a.prototype.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(r.createElement)(t,this.addExtraProps(e.props))},a}(r.Component);return a.WrappedComponent=t,a.displayName=o,a.childContextTypes=C,a.contextTypes=P,a.propTypes=P,f()(a,t)}}var E=Object.prototype.hasOwnProperty;function S(e,t){return e===t?0!==e||0!==t||1/e===1/t:e!==e&&t!==t}function O(e,t){if(S(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),a=n(e,i),u=r(e,i),s=o(e,i);return(i.pure?B:W)(a,u,s,e,i)}var V=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function H(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function z(e,t){return e===t}var q=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.connectHOC,n=void 0===t?w:t,r=e.mapStateToPropsFactories,o=void 0===r?D:r,i=e.mapDispatchToPropsFactories,a=void 0===i?j:i,u=e.mergePropsFactories,s=void 0===u?Y:u,c=e.selectorFactory,l=void 0===c?G:c;return function(e,t,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},u=i.pure,c=void 0===u||u,f=i.areStatesEqual,d=void 0===f?z:f,p=i.areOwnPropsEqual,h=void 0===p?O:p,v=i.areStatePropsEqual,y=void 0===v?O:v,m=i.areMergedPropsEqual,_=void 0===m?O:m,g=$(i,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),b=H(e,o,"mapStateToProps"),w=H(t,a,"mapDispatchToProps"),E=H(r,s,"mergeProps");return n(l,V({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:b,initMapDispatchToProps:w,initMergeProps:E,pure:c,areStatesEqual:d,areOwnPropsEqual:h,areStatePropsEqual:y,areMergedPropsEqual:_},g))}}();n.d(t,"Provider",(function(){return c})),n.d(t,"createProvider",(function(){return s})),n.d(t,"connectAdvanced",(function(){return w})),n.d(t,"connect",(function(){return q}))},function(e,t,n){var r=n(126)("wks"),o=n(53),i=n(11).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){"use strict";e.exports=function(e,t,n,r,o,i,a,u){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,i,a,u],l=0;(s=new Error(t.replace(/%s/g,(function(){return c[l++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},function(e,t,n){var r=n(36),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},function(e,t,n){"use strict";e.exports=function(){}},function(e,t,n){var r=n(3),o=n(171),i=n(48),a=Object.defineProperty;t.f=n(19)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return a(e,t,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){e.exports=!n(4)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},function(e,t,n){"use strict";var r=function(){};e.exports=r},function(e,t,n){(function(t){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t&&t)||Function("return this")()}).call(this,n(23))},function(e,t){var n=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(45);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(1),o=n(4),i=n(45),a=/"/g,u=function(e,t,n,r){var o=String(i(e)),u="<"+t;return""!==n&&(u+=" "+n+'="'+String(r).replace(a,""")+'"'),u+">"+o+""};e.exports=function(e,t){var n={};n[e]=t(u),r(r.P+r.F*o((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3})),"String",n)}},function(e,t,n){"use strict";var r=n(208),o=n(453),i=Object.prototype.toString;function a(e){return"[object Array]"===i.call(e)}function u(e){return null!==e&&"object"===typeof e}function s(e){return"[object Function]"===i.call(e)}function c(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n0&&void 0!==arguments[0]?arguments[0]:{},t=e.getUserConfirmation,n=e.initialEntries,r=void 0===n?["/"]:n,i=e.initialIndex,a=void 0===i?0:i,s=e.keyLength,l=void 0===s?6:s,v=f(),y=function(e){p(P,e),P.length=P.entries.length,v.notifyListeners(P.location,P.action)},m=function(){return Math.random().toString(36).substr(2,l)},_=h(a,0,r.length-1),g=r.map((function(e){return c(e,void 0,"string"===typeof e?m():e.key||m())})),b=u,w=function(e,n){o()(!("object"===("undefined"===typeof e?"undefined":d(e))&&void 0!==e.state&&void 0!==n),"You should avoid providing a 2nd state argument to push when the 1st argument is a location-like object that already has state; it is ignored");var r=c(e,n,m(),P.location);v.confirmTransitionTo(r,"PUSH",t,(function(e){if(e){var t=P.index+1,n=P.entries.slice(0);n.length>t?n.splice(t,n.length-t,r):n.push(r),y({action:"PUSH",location:r,index:t,entries:n})}}))},E=function(e,n){o()(!("object"===("undefined"===typeof e?"undefined":d(e))&&void 0!==e.state&&void 0!==n),"You should avoid providing a 2nd state argument to replace when the 1st argument is a location-like object that already has state; it is ignored");var r=c(e,n,m(),P.location);v.confirmTransitionTo(r,"REPLACE",t,(function(e){e&&(P.entries[P.index]=r,y({action:"REPLACE",location:r}))}))},S=function(e){var n=h(P.index+e,0,P.entries.length-1),r=P.entries[n];v.confirmTransitionTo(r,"POP",t,(function(e){e?y({action:"POP",location:r,index:n}):y()}))},O=function(){return S(-1)},x=function(){return S(1)},T=function(e){var t=P.index+e;return t>=0&&t0&&void 0!==arguments[0]&&arguments[0];return v.setPrompt(e)},k=function(e){return v.appendListener(e)},P={length:g.length,action:"POP",location:g[_],index:_,entries:g,createHref:b,push:w,replace:E,go:S,goBack:O,goForward:x,canGo:T,block:R,listen:k};return P};n.d(t,"b",(function(){return v})),n.d(t,"a",(function(){return c})),n.d(t,"d",(function(){return l})),n.d(t,"c",(function(){return u}))},function(e,t){e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(79),o=n(52),i=n(29),a=n(48),u=n(28),s=n(171),c=Object.getOwnPropertyDescriptor;t.f=n(19)?c:function(e,t){if(e=i(e),t=a(t,!0),s)try{return c(e,t)}catch(n){}if(u(e,t))return o(!r.f.call(e,t),e[t])}},function(e,t,n){var r=n(1),o=n(22),i=n(4);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*i((function(){n(1)})),"Object",a)}},function(e,t,n){var r=n(42),o=n(78),i=n(24),a=n(16),u=n(371);e.exports=function(e,t){var n=1==e,s=2==e,c=3==e,l=4==e,f=6==e,d=5==e||f,p=t||u;return function(t,u,h){for(var v,y,m=i(t),_=o(m),g=r(u,h,3),b=a(_.length),w=0,E=n?p(t,b):s?p(t,0):void 0;b>w;w++)if((d||w in _)&&(y=g(v=_[w],w,m),e))if(n)E[w]=y;else if(y)switch(e){case 3:return!0;case 5:return v;case 6:return w;case 2:E.push(v)}else if(l)return!1;return f?-1:c||l?l:E}}},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return r}))},function(e,t,n){var r=n(51),o=n(72),i=n(73);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(43);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";if(n(19)){var r=n(54),o=n(11),i=n(4),a=n(1),u=n(104),s=n(149),c=n(42),l=n(64),f=n(52),d=n(31),p=n(65),h=n(36),v=n(16),y=n(204),m=n(55),_=n(48),g=n(28),b=n(80),w=n(5),E=n(24),S=n(142),O=n(56),x=n(58),T=n(57).f,R=n(144),k=n(53),P=n(14),C=n(39),M=n(95),I=n(82),N=n(195),L=n(81),A=n(98),j=n(63),D=n(145),F=n(194),U=n(18),Y=n(37),W=U.f,B=Y.f,G=o.RangeError,V=o.TypeError,$=o.Uint8Array,H=Array.prototype,z=s.ArrayBuffer,q=s.DataView,X=C(0),K=C(2),Z=C(3),J=C(4),Q=C(5),ee=C(6),te=M(!0),ne=M(!1),re=N.values,oe=N.keys,ie=N.entries,ae=H.lastIndexOf,ue=H.reduce,se=H.reduceRight,ce=H.join,le=H.sort,fe=H.slice,de=H.toString,pe=H.toLocaleString,he=P("iterator"),ve=P("toStringTag"),ye=k("typed_constructor"),me=k("def_constructor"),_e=u.CONSTR,ge=u.TYPED,be=u.VIEW,we=C(1,(function(e,t){return Te(I(e,e[me]),t)})),Ee=i((function(){return 1===new $(new Uint16Array([1]).buffer)[0]})),Se=!!$&&!!$.prototype.set&&i((function(){new $(1).set({})})),Oe=function(e,t){var n=h(e);if(n<0||n%t)throw G("Wrong offset!");return n},xe=function(e){if(w(e)&&ge in e)return e;throw V(e+" is not a typed array!")},Te=function(e,t){if(!(w(e)&&ye in e))throw V("It is not a typed array constructor!");return new e(t)},Re=function(e,t){return ke(I(e,e[me]),t)},ke=function(e,t){for(var n=0,r=t.length,o=Te(e,r);r>n;)o[n]=t[n++];return o},Pe=function(e,t,n){W(e,t,{get:function(){return this._d[n]}})},Ce=function(e){var t,n,r,o,i,a,u=E(e),s=arguments.length,l=s>1?arguments[1]:void 0,f=void 0!==l,d=R(u);if(void 0!=d&&!S(d)){for(a=d.call(u),r=[],t=0;!(i=a.next()).done;t++)r.push(i.value);u=r}for(f&&s>2&&(l=c(l,arguments[2],2)),t=0,n=v(u.length),o=Te(this,n);n>t;t++)o[t]=f?l(u[t],t):u[t];return o},Me=function(){for(var e=0,t=arguments.length,n=Te(this,t);t>e;)n[e]=arguments[e++];return n},Ie=!!$&&i((function(){pe.call(new $(1))})),Ne=function(){return pe.apply(Ie?fe.call(xe(this)):xe(this),arguments)},Le={copyWithin:function(e,t){return F.call(xe(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return J(xe(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return D.apply(xe(this),arguments)},filter:function(e){return Re(this,K(xe(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Q(xe(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ee(xe(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){X(xe(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return ne(xe(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return te(xe(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ce.apply(xe(this),arguments)},lastIndexOf:function(e){return ae.apply(xe(this),arguments)},map:function(e){return we(xe(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return ue.apply(xe(this),arguments)},reduceRight:function(e){return se.apply(xe(this),arguments)},reverse:function(){for(var e,t=xe(this).length,n=Math.floor(t/2),r=0;r1?arguments[1]:void 0)},sort:function(e){return le.call(xe(this),e)},subarray:function(e,t){var n=xe(this),r=n.length,o=m(e,r);return new(I(n,n[me]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,v((void 0===t?r:m(t,r))-o))}},Ae=function(e,t){return Re(this,fe.call(xe(this),e,t))},je=function(e){xe(this);var t=Oe(arguments[1],1),n=this.length,r=E(e),o=v(r.length),i=0;if(o+t>n)throw G("Wrong length!");for(;i255?255:255&r),o.v[p](n*t+o.o,r,Ee)}(this,n,e)},enumerable:!0})};g?(h=n((function(e,n,r,o){l(e,h,c,"_d");var i,a,u,s,f=0,p=0;if(w(n)){if(!(n instanceof z||"ArrayBuffer"==(s=b(n))||"SharedArrayBuffer"==s))return ge in n?ke(h,n):Ce.call(h,n);i=n,p=Oe(r,t);var m=n.byteLength;if(void 0===o){if(m%t)throw G("Wrong length!");if((a=m-p)<0)throw G("Wrong length!")}else if((a=v(o)*t)+p>m)throw G("Wrong length!");u=a/t}else u=y(n),i=new z(a=u*t);for(d(e,"_d",{b:i,o:p,l:a,e:u,v:new q(i)});fdocument.F=Object<\/script>"),e.close(),s=e.F;r--;)delete s.prototype[i[r]];return s()};e.exports=Object.create||function(e,t){var n;return null!==e?(u.prototype=r(e),n=new u,u.prototype=null,n[a]=e):n=s(),void 0===t?n:o(n,t)}},function(e,t,n){var r=n(180),o=n(129).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},function(e,t,n){var r=n(28),o=n(24),i=n(128)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),r(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(18).f,o=n(28),i=n(14)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){var r=n(180),o=n(129);e.exports=Object.keys||function(e){return r(e,o)}},function(e,t,n){var r=n(14)("unscopables"),o=Array.prototype;void 0==o[r]&&n(31)(o,r,{}),e.exports=function(e){o[r][e]=!0}},function(e,t,n){"use strict";var r=n(11),o=n(18),i=n(19),a=n(14)("species");e.exports=function(e){var t=r[e];i&&t&&!t[a]&&o.f(t,a,{configurable:!0,get:function(){return this}})}},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(27);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},function(e,t,n){var r=n(5);e.exports=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},function(e,t,n){"use strict";var r=n(20),o=n.n(r),i=n(15),a=n.n(i),u=n(0),s=n.n(u),c=n(2),l=n.n(c),f=n(68),d=Object.assign||function(e){for(var t=1;t or withRouter() outside a ");var c=t.route,l=(r||c.location).pathname;return Object(f.a)(l,{path:o,strict:i,exact:u,sensitive:s},c.match)},t.prototype.componentWillMount=function(){o()(!(this.props.component&&this.props.render),"You should not use and in the same route; will be ignored"),o()(!(this.props.component&&this.props.children&&!h(this.props.children)),"You should not use and in the same route; will be ignored"),o()(!(this.props.render&&this.props.children&&!h(this.props.children)),"You should not use and in the same route; will be ignored")},t.prototype.componentWillReceiveProps=function(e,t){o()(!(e.location&&!this.props.location),' elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),o()(!(!e.location&&this.props.location),' elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,o=t.render,i=this.context.router,a=i.history,u=i.route,c=i.staticContext,l={match:e,location:this.props.location||u.location,history:a,staticContext:c};return r?e?s.a.createElement(r,l):null:o?e?o(l):null:"function"===typeof n?n(l):n&&!h(n)?s.a.Children.only(n):null},t}(s.a.Component);v.propTypes={computedMatch:l.a.object,path:l.a.string,exact:l.a.bool,strict:l.a.bool,sensitive:l.a.bool,component:l.a.func,render:l.a.func,children:l.a.oneOfType([l.a.func,l.a.node]),location:l.a.object},v.contextTypes={router:l.a.shape({history:l.a.object.isRequired,route:l.a.object.isRequired,staticContext:l.a.object})},v.childContextTypes={router:l.a.object.isRequired},t.a=v},function(e,t,n){"use strict";var r=n(109),o=n.n(r),i={},a=0,u=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=i[n]||(i[n]={});if(r[e])return r[e];var u=[],s={re:o()(e,u,t),keys:u};return a<1e4&&(r[e]=s,a++),s};t.a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];"string"===typeof t&&(t={path:t});var r=t,o=r.path,i=r.exact,a=void 0!==i&&i,s=r.strict,c=void 0!==s&&s,l=r.sensitive,f=void 0!==l&&l;if(null==o)return n;var d=u(o,{end:a,strict:c,sensitive:f}),p=d.re,h=d.keys,v=p.exec(e);if(!v)return null;var y=v[0],m=v.slice(1),_=e===y;return a&&!_?null:{path:o,url:"/"===o&&""===y?"/":y,isExact:_,params:h.reduce((function(e,t,n){return e[t.name]=m[n],e}),{})}}},function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,"a",(function(){return r}))},function(e,t,n){e.exports=n(452)},,function(e,t,n){var r=n(51),o=n(157),i=n(47),a=n(116),u=Object.defineProperty;t.f=r?u:function(e,t,n){if(i(e),t=a(t,!0),i(n),o)try{return u(e,t,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){e.exports={}},function(e,t,n){var r,o,i,a=n(257),u=n(21),s=n(50),c=n(41),l=n(35),f=n(120),d=n(118),p=u.WeakMap;if(a){var h=new p,v=h.get,y=h.has,m=h.set;r=function(e,t){return m.call(h,e,t),t},o=function(e){return v.call(h,e)||{}},i=function(e){return y.call(h,e)}}else{var _=f("state");d[_]=!0,r=function(e,t){return c(e,_,t),t},o=function(e){return l(e,_)?e[_]:{}},i=function(e){return l(e,_)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=o(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},function(e,t,n){var r=n(21),o=n(121).f,i=n(41),a=n(77),u=n(114),s=n(258),c=n(261);e.exports=function(e,t){var n,l,f,d,p,h=e.target,v=e.global,y=e.stat;if(n=v?r:y?r[h]||u(h,{}):(r[h]||{}).prototype)for(l in t){if(d=t[l],f=e.noTargetGet?(p=o(n,l))&&p.value:n[l],!c(v?l:h+(y?".":"#")+l,e.forced)&&void 0!==f){if(typeof d===typeof f)continue;s(d,f)}(e.sham||f&&f.sham)&&i(d,"sham",!0),a(n,l,d,e)}}},function(e,t,n){var r=n(21),o=n(90),i=n(41),a=n(35),u=n(114),s=n(164),c=n(75),l=c.get,f=c.enforce,d=String(s).split("toString");o("inspectSource",(function(e){return s.call(e)})),(e.exports=function(e,t,n,o){var s=!!o&&!!o.unsafe,c=!!o&&!!o.enumerable,l=!!o&&!!o.noTargetGet;"function"==typeof n&&("string"!=typeof t||a(n,"name")||i(n,"name",t),f(n).source=d.join("string"==typeof t?t:"")),e!==r?(s?!l&&e[t]&&(c=!0):delete e[t],c?e[t]=n:i(e,t,n)):c?e[t]=n:u(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||s.call(this)}))},function(e,t,n){var r=n(44);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(44),o=n(14)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(n){}}(t=Object(e),o))?n:i?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t){e.exports={}},function(e,t,n){var r=n(3),o=n(43),i=n(14)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[i])?t:o(n)}},,function(e,t,n){"use strict";var r=n(109),o=n.n(r),i={},a=0,u=function(e){var t=e,n=i[t]||(i[t]={});if(n[e])return n[e];var r=o.a.compile(e);return a<1e4&&(n[e]=r,a++),r};t.a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("/"===e)return e;var n=u(e);return n(t,{pretty:!0})}},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=t.createMatchSelector=t.getAction=t.getLocation=t.routerMiddleware=t.connectRouter=t.ConnectedRouter=t.routerActions=t.goForward=t.goBack=t.go=t.replace=t.push=t.CALL_HISTORY_METHOD=t.LOCATION_CHANGE=void 0;var r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=a(n(440)),i=a(n(449));function a(e){return e&&e.__esModule?e:{default:e}}var u=P("createAll")(P("plainStructure")),s=u.LOCATION_CHANGE,c=u.CALL_HISTORY_METHOD,l=u.push,f=u.replace,d=u.go,p=u.goBack,h=u.goForward,v=u.routerActions,y=u.ConnectedRouter,m=u.connectRouter,_=u.routerMiddleware,g=u.getLocation,b=u.getAction,w=u.createMatchSelector;function E(){try{if(e)return e}catch(t){try{if(window)return window}catch(t){return this}}}t.LOCATION_CHANGE=s,t.CALL_HISTORY_METHOD=c,t.push=l,t.replace=f,t.go=d,t.goBack=p,t.goForward=h,t.routerActions=v,t.ConnectedRouter=y,t.connectRouter=m,t.routerMiddleware=_,t.getLocation=g,t.getAction=b,t.createMatchSelector=w;var S=null;function O(){if(null===S){var e=E();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),S=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return S}function x(){var e=E();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function T(){var e=O(),t=x(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}!function(){var e=E();e.__rewire_reset_all__||(e.__rewire_reset_all__=function(){e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)})}();var R="__INTENTIONAL_UNDEFINED__",k={};function P(e){var t=T();if(void 0===t[e])return function(e){switch(e){case"createAll":return o.default;case"plainStructure":return i.default}return}(e);var n=t[e];return n===R?void 0:n}function C(e,t){var n=T();if("object"!==("undefined"===typeof e?"undefined":r(e)))return n[e]=void 0===t?R:t,function(){M(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function M(e){var t=T();delete t[e],0==Object.keys(t).length&&delete x()[O]}function I(e){var t=T(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(k,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",P),e("__GetDependency__",P),e("__Rewire__",C),e("__set__",C),e("__reset__",M),e("__ResetDependency__",M),e("__with__",I)}(),t.__get__=P,t.__GetDependency__=P,t.__Rewire__=C,t.__set__=C,t.__ResetDependency__=M,t.__RewireAPI__=k,t.default=k}).call(this,n(23))},function(e,t,n){(function(e){e.exports=function(){"use strict";var t,n;function r(){return t.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e){return void 0===e}function u(e){return"number"===typeof e||"[object Number]"===Object.prototype.toString.call(e)}function s(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function c(e,t){var n,r=[];for(n=0;n>>0,r=0;r0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var U=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Y=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,W={},B={};function G(e,t,n,r){var o=r;"string"===typeof r&&(o=function(){return this[r]()}),e&&(B[e]=o),t&&(B[t[0]]=function(){return F(o.apply(this,arguments),t[1],t[2])}),n&&(B[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function V(e,t){return e.isValid()?(t=$(t,e.localeData()),W[t]=W[t]||function(e){var t,n,r,o=e.match(U);for(t=0,n=o.length;t=0&&Y.test(e);)e=e.replace(Y,r),Y.lastIndex=0,n-=1;return e}var H=/\d/,z=/\d\d/,q=/\d{3}/,X=/\d{4}/,K=/[+-]?\d{6}/,Z=/\d\d?/,J=/\d\d\d\d?/,Q=/\d\d\d\d\d\d?/,ee=/\d{1,3}/,te=/\d{1,4}/,ne=/[+-]?\d{1,6}/,re=/\d+/,oe=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,ae=/Z|[+-]\d\d(?::?\d\d)?/gi,ue=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,se={};function ce(e,t,n){se[e]=P(t)?t:function(e,r){return e&&n?n:t}}function le(e,t){return l(se,e)?se[e](t._strict,t._locale):new RegExp(fe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,o){return t||n||r||o}))))}function fe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var de={};function pe(e,t){var n,r=t;for("string"===typeof e&&(e=[e]),u(t)&&(r=function(e,n){n[t]=E(e)}),n=0;n68?1900:2e3)};var Re,ke=Pe("FullYear",!0);function Pe(e,t){return function(n){return null!=n?(Me(this,e,n),r.updateOffset(this,t),this):Ce(this,e)}}function Ce(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function Me(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&Te(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Ie(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Ie(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?Te(e)?29:28:31-r%7%2}Re=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t=0&&isFinite(u.getFullYear())&&u.setFullYear(e),u}function Ge(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function Ve(e,t,n){var r=7+t-n;return-(7+Ge(e,0,r).getUTCDay()-t)%7+r-1}function $e(e,t,n,r,o){var i,a,u=1+7*(t-1)+(7+n-r)%7+Ve(e,r,o);return u<=0?a=xe(i=e-1)+u:u>xe(e)?(i=e+1,a=u-xe(e)):(i=e,a=u),{year:i,dayOfYear:a}}function He(e,t,n){var r,o,i=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-i-1)/7)+1;return a<1?r=a+ze(o=e.year()-1,t,n):a>ze(e.year(),t,n)?(r=a-ze(e.year(),t,n),o=e.year()+1):(o=e.year(),r=a),{week:r,year:o}}function ze(e,t,n){var r=Ve(e,t,n),o=Ve(e+1,t,n);return(xe(e)-r+o)/7}G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),D("week",5),D("isoWeek",5),ce("w",Z),ce("ww",Z,z),ce("W",Z),ce("WW",Z,z),he(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=E(e)})),G("d",0,"do","day"),G("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),G("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),G("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),D("day",11),D("weekday",11),D("isoWeekday",11),ce("d",Z),ce("e",Z),ce("E",Z),ce("dd",(function(e,t){return t.weekdaysMinRegex(e)})),ce("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),ce("dddd",(function(e,t){return t.weekdaysRegex(e)})),he(["dd","ddd","dddd"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:p(n).invalidWeekday=e})),he(["d","e","E"],(function(e,t,n,r){t[r]=E(e)}));var qe="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Xe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ke="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Ze(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=d([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(o=Re.call(this._weekdaysParse,a))?o:null:"ddd"===t?-1!==(o=Re.call(this._shortWeekdaysParse,a))?o:null:-1!==(o=Re.call(this._minWeekdaysParse,a))?o:null:"dddd"===t?-1!==(o=Re.call(this._weekdaysParse,a))?o:-1!==(o=Re.call(this._shortWeekdaysParse,a))?o:-1!==(o=Re.call(this._minWeekdaysParse,a))?o:null:"ddd"===t?-1!==(o=Re.call(this._shortWeekdaysParse,a))?o:-1!==(o=Re.call(this._weekdaysParse,a))?o:-1!==(o=Re.call(this._minWeekdaysParse,a))?o:null:-1!==(o=Re.call(this._minWeekdaysParse,a))?o:-1!==(o=Re.call(this._weekdaysParse,a))?o:-1!==(o=Re.call(this._shortWeekdaysParse,a))?o:null}var Je=ue,Qe=ue,et=ue;function tt(){function e(e,t){return t.length-e.length}var t,n,r,o,i,a=[],u=[],s=[],c=[];for(t=0;t<7;t++)n=d([2e3,1]).day(t),r=this.weekdaysMin(n,""),o=this.weekdaysShort(n,""),i=this.weekdays(n,""),a.push(r),u.push(o),s.push(i),c.push(r),c.push(o),c.push(i);for(a.sort(e),u.sort(e),s.sort(e),c.sort(e),t=0;t<7;t++)u[t]=fe(u[t]),s[t]=fe(s[t]),c[t]=fe(c[t]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function nt(){return this.hours()%12||12}function rt(e,t){G(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function ot(e,t){return t._meridiemParse}G("H",["HH",2],0,"hour"),G("h",["hh",2],0,nt),G("k",["kk",2],0,(function(){return this.hours()||24})),G("hmm",0,0,(function(){return""+nt.apply(this)+F(this.minutes(),2)})),G("hmmss",0,0,(function(){return""+nt.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)})),G("Hmm",0,0,(function(){return""+this.hours()+F(this.minutes(),2)})),G("Hmmss",0,0,(function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)})),rt("a",!0),rt("A",!1),N("hour","h"),D("hour",13),ce("a",ot),ce("A",ot),ce("H",Z),ce("h",Z),ce("k",Z),ce("HH",Z,z),ce("hh",Z,z),ce("kk",Z,z),ce("hmm",J),ce("hmmss",Q),ce("Hmm",J),ce("Hmmss",Q),pe(["H","HH"],ge),pe(["k","kk"],(function(e,t,n){var r=E(e);t[ge]=24===r?0:r})),pe(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),pe(["h","hh"],(function(e,t,n){t[ge]=E(e),p(n).bigHour=!0})),pe("hmm",(function(e,t,n){var r=e.length-2;t[ge]=E(e.substr(0,r)),t[be]=E(e.substr(r)),p(n).bigHour=!0})),pe("hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[ge]=E(e.substr(0,r)),t[be]=E(e.substr(r,2)),t[we]=E(e.substr(o)),p(n).bigHour=!0})),pe("Hmm",(function(e,t,n){var r=e.length-2;t[ge]=E(e.substr(0,r)),t[be]=E(e.substr(r))})),pe("Hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[ge]=E(e.substr(0,r)),t[be]=E(e.substr(r,2)),t[we]=E(e.substr(o))}));var it,at=Pe("Hours",!0),ut={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Le,monthsShort:Ae,week:{dow:0,doy:6},weekdays:qe,weekdaysMin:Ke,weekdaysShort:Xe,meridiemParse:/[ap]\.?m?\.?/i},st={},ct={};function lt(e){return e?e.toLowerCase().replace("_","-"):e}function ft(t){var n=null;if(!st[t]&&"undefined"!==typeof e&&e&&e.exports)try{n=it._abbr,!function(){var e=new Error("Cannot find module 'undefined'");throw e.code="MODULE_NOT_FOUND",e}(),dt(n)}catch(r){}return st[t]}function dt(e,t){var n;return e&&((n=a(t)?ht(e):pt(e,t))?it=n:"undefined"!==typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),it._abbr}function pt(e,t){if(null!==t){var n,r=ut;if(t.abbr=e,null!=st[e])k("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])r=st[t.parentLocale]._config;else{if(null==(n=ft(t.parentLocale)))return ct[t.parentLocale]||(ct[t.parentLocale]=[]),ct[t.parentLocale].push({name:e,config:t}),null;r=n._config}return st[e]=new M(C(r,t)),ct[e]&&ct[e].forEach((function(e){pt(e.name,e.config)})),dt(e),st[e]}return delete st[e],null}function ht(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return it;if(!o(e)){if(t=ft(e))return t;e=[e]}return function(e){for(var t,n,r,o,i=0;i0;){if(r=ft(o.slice(0,t).join("-")))return r;if(n&&n.length>=t&&S(o,n,!0)>=t-1)break;t--}i++}return it}(e)}function vt(e){var t,n=e._a;return n&&-2===p(e).overflow&&(t=n[me]<0||n[me]>11?me:n[_e]<1||n[_e]>Ie(n[ye],n[me])?_e:n[ge]<0||n[ge]>24||24===n[ge]&&(0!==n[be]||0!==n[we]||0!==n[Ee])?ge:n[be]<0||n[be]>59?be:n[we]<0||n[we]>59?we:n[Ee]<0||n[Ee]>999?Ee:-1,p(e)._overflowDayOfYear&&(t_e)&&(t=_e),p(e)._overflowWeeks&&-1===t&&(t=Se),p(e)._overflowWeekday&&-1===t&&(t=Oe),p(e).overflow=t),e}function yt(e,t,n){return null!=e?e:null!=t?t:n}function mt(e){var t,n,o,i,a,u=[];if(!e._d){for(o=function(e){var t=new Date(r.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[_e]&&null==e._a[me]&&function(e){var t,n,r,o,i,a,u,s;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)i=1,a=4,n=yt(t.GG,e._a[ye],He(It(),1,4).year),r=yt(t.W,1),((o=yt(t.E,1))<1||o>7)&&(s=!0);else{i=e._locale._week.dow,a=e._locale._week.doy;var c=He(It(),i,a);n=yt(t.gg,e._a[ye],c.year),r=yt(t.w,c.week),null!=t.d?((o=t.d)<0||o>6)&&(s=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(s=!0)):o=i}r<1||r>ze(n,i,a)?p(e)._overflowWeeks=!0:null!=s?p(e)._overflowWeekday=!0:(u=$e(n,r,o,i,a),e._a[ye]=u.year,e._dayOfYear=u.dayOfYear)}(e),null!=e._dayOfYear&&(a=yt(e._a[ye],o[ye]),(e._dayOfYear>xe(a)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),n=Ge(a,0,e._dayOfYear),e._a[me]=n.getUTCMonth(),e._a[_e]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=u[t]=o[t];for(;t<7;t++)e._a[t]=u[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[be]&&0===e._a[we]&&0===e._a[Ee]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:Be).apply(null,u),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&"undefined"!==typeof e._w.d&&e._w.d!==i&&(p(e).weekdayMismatch=!0)}}var _t=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,bt=/Z|[+-]\d\d(?::?\d\d)?/,wt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Et=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],St=/^\/?Date\((\-?\d+)/i;function Ot(e){var t,n,r,o,i,a,u=e._i,s=_t.exec(u)||gt.exec(u);if(s){for(p(e).iso=!0,t=0,n=wt.length;t0&&p(e).unusedInput.push(a),u=u.slice(u.indexOf(n)+n.length),c+=n.length),B[i]?(n?p(e).empty=!1:p(e).unusedTokens.push(i),ve(i,n,e)):e._strict&&!n&&p(e).unusedTokens.push(i);p(e).charsLeftOver=s-c,u.length>0&&p(e).unusedInput.push(u),e._a[ge]<=12&&!0===p(e).bigHour&&e._a[ge]>0&&(p(e).bigHour=void 0),p(e).parsedDateParts=e._a.slice(0),p(e).meridiem=e._meridiem,e._a[ge]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[ge],e._meridiem),mt(e),vt(e)}else kt(e);else Ot(e)}function Ct(e){var t=e._i,n=e._f;return e._locale=e._locale||ht(e._l),null===t||void 0===n&&""===t?v({nullInput:!0}):("string"===typeof t&&(e._i=t=e._locale.preparse(t)),b(t)?new g(vt(t)):(s(t)?e._d=t:o(n)?function(e){var t,n,r,o,i;if(0===e._f.length)return p(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;othis?this:e:v()}));function At(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return It();for(n=t[0],r=1;r(i=ze(e,r,o))&&(t=i),sn.call(this,e,t,n,r,o))}function sn(e,t,n,r,o){var i=$e(e,t,n,r,o),a=Ge(i.year,0,i.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}G(0,["gg",2],0,(function(){return this.weekYear()%100})),G(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),an("gggg","weekYear"),an("ggggg","weekYear"),an("GGGG","isoWeekYear"),an("GGGGG","isoWeekYear"),N("weekYear","gg"),N("isoWeekYear","GG"),D("weekYear",1),D("isoWeekYear",1),ce("G",oe),ce("g",oe),ce("GG",Z,z),ce("gg",Z,z),ce("GGGG",te,X),ce("gggg",te,X),ce("GGGGG",ne,K),ce("ggggg",ne,K),he(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=E(e)})),he(["gg","GG"],(function(e,t,n,o){t[o]=r.parseTwoDigitYear(e)})),G("Q",0,"Qo","quarter"),N("quarter","Q"),D("quarter",7),ce("Q",H),pe("Q",(function(e,t){t[me]=3*(E(e)-1)})),G("D",["DD",2],"Do","date"),N("date","D"),D("date",9),ce("D",Z),ce("DD",Z,z),ce("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),pe(["D","DD"],_e),pe("Do",(function(e,t){t[_e]=E(e.match(Z)[0])}));var cn=Pe("Date",!0);G("DDD",["DDDD",3],"DDDo","dayOfYear"),N("dayOfYear","DDD"),D("dayOfYear",4),ce("DDD",ee),ce("DDDD",q),pe(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=E(e)})),G("m",["mm",2],0,"minute"),N("minute","m"),D("minute",14),ce("m",Z),ce("mm",Z,z),pe(["m","mm"],be);var ln=Pe("Minutes",!1);G("s",["ss",2],0,"second"),N("second","s"),D("second",15),ce("s",Z),ce("ss",Z,z),pe(["s","ss"],we);var fn,dn=Pe("Seconds",!1);for(G("S",0,0,(function(){return~~(this.millisecond()/100)})),G(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),G(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),G(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),G(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),G(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),G(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),N("millisecond","ms"),D("millisecond",16),ce("S",ee,H),ce("SS",ee,z),ce("SSS",ee,q),fn="SSSS";fn.length<=9;fn+="S")ce(fn,re);function pn(e,t){t[Ee]=E(1e3*("0."+e))}for(fn="S";fn.length<=9;fn+="S")pe(fn,pn);var hn=Pe("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var vn=g.prototype;function yn(e){return e}vn.add=Qt,vn.calendar=function(e,t){var n=e||It(),o=Gt(n,this).startOf("day"),i=r.calendarFormat(this,o)||"sameElse",a=t&&(P(t[i])?t[i].call(this,n):t[i]);return this.format(a||this.localeData().calendar(i,this,It(n)))},vn.clone=function(){return new g(this)},vn.diff=function(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=Gt(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=L(t)){case"year":i=tn(this,r)/12;break;case"month":i=tn(this,r);break;case"quarter":i=tn(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-o)/864e5;break;case"week":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:w(i)},vn.endOf=function(e){return void 0===(e=L(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))},vn.format=function(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=V(this,e);return this.localeData().postformat(t)},vn.from=function(e,t){return this.isValid()&&(b(e)&&e.isValid()||It(e).isValid())?qt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},vn.fromNow=function(e){return this.from(It(),e)},vn.to=function(e,t){return this.isValid()&&(b(e)&&e.isValid()||It(e).isValid())?qt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},vn.toNow=function(e){return this.to(It(),e)},vn.get=function(e){return P(this[e=L(e)])?this[e]():this},vn.invalidAt=function(){return p(this).overflow},vn.isAfter=function(e,t){var n=b(e)?e:It(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=L(a(t)?"millisecond":t))?this.valueOf()>n.valueOf():n.valueOf()9999?V(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):P(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",V(n,"Z")):V(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},vn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",o=t+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+o)},vn.toJSON=function(){return this.isValid()?this.toISOString():null},vn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},vn.unix=function(){return Math.floor(this.valueOf()/1e3)},vn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},vn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},vn.year=ke,vn.isLeapYear=function(){return Te(this.year())},vn.weekYear=function(e){return un.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},vn.isoWeekYear=function(e){return un.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},vn.quarter=vn.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},vn.month=Fe,vn.daysInMonth=function(){return Ie(this.year(),this.month())},vn.week=vn.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},vn.isoWeek=vn.isoWeeks=function(e){var t=He(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},vn.weeksInYear=function(){var e=this.localeData()._week;return ze(this.year(),e.dow,e.doy)},vn.isoWeeksInYear=function(){return ze(this.year(),1,4)},vn.date=cn,vn.day=vn.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!==typeof e?e:isNaN(e)?"number"===typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},vn.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},vn.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"===typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},vn.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},vn.hour=vn.hours=at,vn.minute=vn.minutes=ln,vn.second=vn.seconds=dn,vn.millisecond=vn.milliseconds=hn,vn.utcOffset=function(e,t,n){var o,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"===typeof e){if(null===(e=Bt(ae,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(o=Vt(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,"m"),i!==e&&(!t||this._changeInProgress?Jt(this,qt(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:Vt(this)},vn.utc=function(e){return this.utcOffset(0,e)},vn.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Vt(this),"m")),this},vn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"===typeof this._i){var e=Bt(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},vn.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?It(e).utcOffset():0,(this.utcOffset()-e)%60===0)},vn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},vn.isLocal=function(){return!!this.isValid()&&!this._isUTC},vn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},vn.isUtc=$t,vn.isUTC=$t,vn.zoneAbbr=function(){return this._isUTC?"UTC":""},vn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},vn.dates=x("dates accessor is deprecated. Use date instead.",cn),vn.months=x("months accessor is deprecated. Use month instead",Fe),vn.years=x("years accessor is deprecated. Use year instead",ke),vn.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!==typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),vn.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!a(this._isDSTShifted))return this._isDSTShifted;var e={};if(m(e,this),(e=Ct(e))._a){var t=e._isUTC?d(e._a):It(e._a);this._isDSTShifted=this.isValid()&&S(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}));var mn=M.prototype;function _n(e,t,n,r){var o=ht(),i=d().set(r,t);return o[n](i,e)}function gn(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||"",null!=t)return _n(e,t,n,"month");var r,o=[];for(r=0;r<12;r++)o[r]=_n(e,r,n,"month");return o}function bn(e,t,n,r){"boolean"===typeof e?(u(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,u(t)&&(n=t,t=void 0),t=t||"");var o,i=ht(),a=e?i._week.dow:0;if(null!=n)return _n(t,(n+a)%7,r,"day");var s=[];for(o=0;o<7;o++)s[o]=_n(t,(o+a)%7,r,"day");return s}mn.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return P(r)?r.call(t,n):r},mn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,(function(e){return e.slice(1)})),this._longDateFormat[e])},mn.invalidDate=function(){return this._invalidDate},mn.ordinal=function(e){return this._ordinal.replace("%d",e)},mn.preparse=yn,mn.postformat=yn,mn.relativeTime=function(e,t,n,r){var o=this._relativeTime[n];return P(o)?o(e,t,n,r):o.replace(/%d/i,e)},mn.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return P(n)?n(t):n.replace(/%s/i,t)},mn.set=function(e){var t,n;for(n in e)P(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},mn.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ne).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},mn.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ne.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},mn.monthsParse=function(e,t,n){var r,o,i;if(this._monthsParseExact)return je.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=d([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},mn.monthsRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||We.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=Ye),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},mn.monthsShortRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||We.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=Ue),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},mn.week=function(e){return He(e,this._week.dow,this._week.doy).week},mn.firstDayOfYear=function(){return this._week.doy},mn.firstDayOfWeek=function(){return this._week.dow},mn.weekdays=function(e,t){return e?o(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:o(this._weekdays)?this._weekdays:this._weekdays.standalone},mn.weekdaysMin=function(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin},mn.weekdaysShort=function(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort},mn.weekdaysParse=function(e,t,n){var r,o,i;if(this._weekdaysParseExact)return Ze.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=d([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(o,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(o,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(o,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},mn.weekdaysRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||tt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Je),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},mn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||tt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Qe),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},mn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||tt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=et),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},mn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},mn.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},dt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===E(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),r.lang=x("moment.lang is deprecated. Use moment.locale instead.",dt),r.langData=x("moment.langData is deprecated. Use moment.localeData instead.",ht);var wn=Math.abs;function En(e,t,n,r){var o=qt(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function Sn(e){return e<0?Math.floor(e):Math.ceil(e)}function On(e){return 4800*e/146097}function xn(e){return 146097*e/4800}function Tn(e){return function(){return this.as(e)}}var Rn=Tn("ms"),kn=Tn("s"),Pn=Tn("m"),Cn=Tn("h"),Mn=Tn("d"),In=Tn("w"),Nn=Tn("M"),Ln=Tn("y");function An(e){return function(){return this.isValid()?this._data[e]:NaN}}var jn=An("milliseconds"),Dn=An("seconds"),Fn=An("minutes"),Un=An("hours"),Yn=An("days"),Wn=An("months"),Bn=An("years"),Gn=Math.round,Vn={ss:44,s:45,m:45,h:22,d:26,M:11};function $n(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}var Hn=Math.abs;function zn(e){return(e>0)-(e<0)||+e}function qn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Hn(this._milliseconds)/1e3,r=Hn(this._days),o=Hn(this._months);e=w(n/60),t=w(e/60),n%=60,e%=60;var i=w(o/12),a=o%=12,u=r,s=t,c=e,l=n?n.toFixed(3).replace(/\.?0+$/,""):"",f=this.asSeconds();if(!f)return"P0D";var d=f<0?"-":"",p=zn(this._months)!==zn(f)?"-":"",h=zn(this._days)!==zn(f)?"-":"",v=zn(this._milliseconds)!==zn(f)?"-":"";return d+"P"+(i?p+i+"Y":"")+(a?p+a+"M":"")+(u?h+u+"D":"")+(s||c||l?"T":"")+(s?v+s+"H":"")+(c?v+c+"M":"")+(l?v+l+"S":"")}var Xn=Dt.prototype;return Xn.isValid=function(){return this._isValid},Xn.abs=function(){var e=this._data;return this._milliseconds=wn(this._milliseconds),this._days=wn(this._days),this._months=wn(this._months),e.milliseconds=wn(e.milliseconds),e.seconds=wn(e.seconds),e.minutes=wn(e.minutes),e.hours=wn(e.hours),e.months=wn(e.months),e.years=wn(e.years),this},Xn.add=function(e,t){return En(this,e,t,1)},Xn.subtract=function(e,t){return En(this,e,t,-1)},Xn.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=L(e))||"year"===e)return t=this._days+r/864e5,n=this._months+On(t),"month"===e?n:n/12;switch(t=this._days+Math.round(xn(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},Xn.asMilliseconds=Rn,Xn.asSeconds=kn,Xn.asMinutes=Pn,Xn.asHours=Cn,Xn.asDays=Mn,Xn.asWeeks=In,Xn.asMonths=Nn,Xn.asYears=Ln,Xn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*E(this._months/12):NaN},Xn._bubble=function(){var e,t,n,r,o,i=this._milliseconds,a=this._days,u=this._months,s=this._data;return i>=0&&a>=0&&u>=0||i<=0&&a<=0&&u<=0||(i+=864e5*Sn(xn(u)+a),a=0,u=0),s.milliseconds=i%1e3,e=w(i/1e3),s.seconds=e%60,t=w(e/60),s.minutes=t%60,n=w(t/60),s.hours=n%24,a+=w(n/24),o=w(On(a)),u+=o,a-=Sn(xn(o)),r=w(u/12),u%=12,s.days=a,s.months=u,s.years=r,this},Xn.clone=function(){return qt(this)},Xn.get=function(e){return e=L(e),this.isValid()?this[e+"s"]():NaN},Xn.milliseconds=jn,Xn.seconds=Dn,Xn.minutes=Fn,Xn.hours=Un,Xn.days=Yn,Xn.weeks=function(){return w(this.days()/7)},Xn.months=Wn,Xn.years=Bn,Xn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var r=qt(e).abs(),o=Gn(r.as("s")),i=Gn(r.as("m")),a=Gn(r.as("h")),u=Gn(r.as("d")),s=Gn(r.as("M")),c=Gn(r.as("y")),l=o<=Vn.ss&&["s",o]||o0,l[4]=n,$n.apply(null,l)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},Xn.toISOString=qn,Xn.toString=qn,Xn.toJSON=qn,Xn.locale=nn,Xn.localeData=on,Xn.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",qn),Xn.lang=rn,G("X",0,0,"unix"),G("x",0,0,"valueOf"),ce("x",oe),ce("X",/[+-]?\d+(\.\d{1,3})?/),pe("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))})),pe("x",(function(e,t,n){n._d=new Date(E(e))})),r.version="2.22.2",t=It,r.fn=vn,r.min=function(){return At("isBefore",[].slice.call(arguments,0))},r.max=function(){return At("isAfter",[].slice.call(arguments,0))},r.now=function(){return Date.now?Date.now():+new Date},r.utc=d,r.unix=function(e){return It(1e3*e)},r.months=function(e,t){return gn(e,t,"months")},r.isDate=s,r.locale=dt,r.invalid=v,r.duration=qt,r.isMoment=b,r.weekdays=function(e,t,n){return bn(e,t,n,"weekdays")},r.parseZone=function(){return It.apply(null,arguments).parseZone()},r.localeData=ht,r.isDuration=Ft,r.monthsShort=function(e,t){return gn(e,t,"monthsShort")},r.weekdaysMin=function(e,t,n){return bn(e,t,n,"weekdaysMin")},r.defineLocale=pt,r.updateLocale=function(e,t){if(null!=t){var n,r,o=ut;null!=(r=ft(e))&&(o=r._config),t=C(o,t),(n=new M(t)).parentLocale=st[e],st[e]=n,dt(e)}else null!=st[e]&&(null!=st[e].parentLocale?st[e]=st[e].parentLocale:null!=st[e]&&delete st[e]);return st[e]},r.locales=function(){return T(st)},r.weekdaysShort=function(e,t,n){return bn(e,t,n,"weekdaysShort")},r.normalizeUnits=L,r.relativeTimeRounding=function(e){return void 0===e?Gn:"function"===typeof e&&(Gn=e,!0)},r.relativeTimeThreshold=function(e,t){return void 0!==Vn[e]&&(void 0===t?Vn[e]:(Vn[e]=t,"s"===e&&(Vn.ss=t-1),!0))},r.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},r.prototype=vn,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},r}()}).call(this,n(482)(e))},function(e,t,n){e.exports=n(477)},function(e,t,n){var r=n(246);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){var r=n(111);e.exports=function(e){return Object(r(e))}},function(e,t,n){var r=n(91),o=n(249);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.3.4",mode:r?"pure":"global",copyright:"\xa9 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports=!1},function(e,t,n){var r=n(110),o=n(111);e.exports=function(e){return r(o(e))}},function(e,t,n){var r=n(256),o=n(21),i=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},function(e,t,n){var r=n(72).f,o=n(35),i=n(30)("toStringTag");e.exports=function(e,t,n){e&&!o(e=n?e:e.prototype,i)&&r(e,i,{configurable:!0,value:t})}},function(e,t,n){var r=n(29),o=n(16),i=n(55);e.exports=function(e){return function(t,n,a){var u,s=r(t),c=o(s.length),l=i(a,c);if(e&&n!=n){for(;c>l;)if((u=s[l++])!=u)return!0}else for(;c>l;l++)if((e||l in s)&&s[l]===n)return e||l||0;return!e&&-1}}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,n){var r=n(1),o=n(45),i=n(4),a=n(132),u="["+a+"]",s=RegExp("^"+u+u+"*"),c=RegExp(u+u+"*$"),l=function(e,t,n){var o={},u=i((function(){return!!a[e]()||"\u200b\x85"!="\u200b\x85"[e]()})),s=o[e]=u?t(f):a[e];n&&(o[n]=s),r(r.P+r.F*u,"String",o)},f=l.trim=function(e,t){return e=String(o(e)),1&t&&(e=e.replace(s,"")),2&t&&(e=e.replace(c,"")),e};e.exports=l},function(e,t,n){var r=n(14)("iterator"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,(function(){throw 2}))}catch(a){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i=[7],u=i[r]();u.next=function(){return{done:n=!0}},i[r]=function(){return u},e(i)}catch(a){}return n}},function(e,t,n){"use strict";var r=n(3);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},function(e,t,n){"use strict";var r=n(80),o=RegExp.prototype.exec;e.exports=function(e,t){var n=e.exec;if("function"===typeof n){var i=n.call(e,t);if("object"!==typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(e))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(e,t)}},function(e,t,n){"use strict";n(197);var r=n(27),o=n(31),i=n(4),a=n(45),u=n(14),s=n(146),c=u("species"),l=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")})),f=function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();e.exports=function(e,t,n){var d=u(e),p=!i((function(){var t={};return t[d]=function(){return 7},7!=""[e](t)})),h=p?!i((function(){var t=!1,n=/a/;return n.exec=function(){return t=!0,null},"split"===e&&(n.constructor={},n.constructor[c]=function(){return n}),n[d](""),!t})):void 0;if(!p||!h||"replace"===e&&!l||"split"===e&&!f){var v=/./[d],y=n(a,d,""[e],(function(e,t,n,r,o){return t.exec===s?p&&!o?{done:!0,value:v.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}})),m=y[0],_=y[1];r(String.prototype,e,m),o(RegExp.prototype,d,2==t?function(e,t){return _.call(e,this,t)}:function(e){return _.call(e,this)})}}},function(e,t,n){var r=n(42),o=n(192),i=n(142),a=n(3),u=n(16),s=n(144),c={},l={};(t=e.exports=function(e,t,n,f,d){var p,h,v,y,m=d?function(){return e}:s(e),_=r(n,f,t?2:1),g=0;if("function"!=typeof m)throw TypeError(e+" is not iterable!");if(i(m)){for(p=u(e.length);p>g;g++)if((y=t?_(a(h=e[g])[0],h[1]):_(e[g]))===c||y===l)return y}else for(v=m.call(e);!(h=v.next()).done;)if((y=o(v,_,h.value,t))===c||y===l)return y}).BREAK=c,t.RETURN=l},function(e,t,n){"use strict";var r=n(11),o=n(1),i=n(27),a=n(65),u=n(49),s=n(102),c=n(64),l=n(5),f=n(4),d=n(98),p=n(60),h=n(133);e.exports=function(e,t,n,v,y,m){var _=r[e],g=_,b=y?"set":"add",w=g&&g.prototype,E={},S=function(e){var t=w[e];i(w,e,"delete"==e?function(e){return!(m&&!l(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(m&&!l(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return m&&!l(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof g&&(m||w.forEach&&!f((function(){(new g).entries().next()})))){var O=new g,x=O[b](m?{}:-0,1)!=O,T=f((function(){O.has(1)})),R=d((function(e){new g(e)})),k=!m&&f((function(){for(var e=new g,t=5;t--;)e[b](t,t);return!e.has(-0)}));R||((g=t((function(t,n){c(t,g,e);var r=h(new _,t,g);return void 0!=n&&s(n,y,r[b],r),r}))).prototype=w,w.constructor=g),(T||k)&&(S("delete"),S("has"),y&&S("get")),(k||x)&&S(b),m&&w.clear&&delete w.clear}else g=v.getConstructor(t,e,y,b),a(g.prototype,n),u.NEED=!0;return p(g,e),E[e]=g,o(o.G+o.W+o.F*(g!=_),E),m||v.setStrong(g,e,y),g}},function(e,t,n){for(var r,o=n(11),i=n(31),a=n(53),u=a("typed_array"),s=a("view"),c=!(!o.ArrayBuffer||!o.DataView),l=c,f=0,d="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");f<9;)(r=o[d[f++]])?(i(r.prototype,u,!0),i(r.prototype,s,!0)):l=!1;e.exports={ABV:c,CONSTR:l,TYPED:u,VIEW:s}},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=t.LOCATION_CHANGE="@@router/LOCATION_CHANGE",o=(t.onLocationChanged=function(e,t){return{type:_("LOCATION_CHANGE"),payload:{location:e,action:t}}},t.CALL_HISTORY_METHOD="@@router/CALL_HISTORY_METHOD"),i=function(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r outside a "),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=Object(f.a)(e.to),n=Object(f.a)(this.props.to);Object(f.d)(t,n)?s()(!1,"You tried to redirect to the same route you're currently on: \""+n.pathname+n.search+'"'):this.perform()},t.prototype.computeTo=function(e){var t=e.computedMatch,n=e.to;return t?"string"===typeof n?Object(d.a)(n,t.params):p({},n,{pathname:Object(d.a)(n.pathname,t.params)}):n},t.prototype.perform=function(){var e=this.context.router.history,t=this.props.push,n=this.computeTo(this.props);t?e.push(n):e.replace(n)},t.prototype.render=function(){return null},t}(o.a.Component);h.propTypes={computedMatch:a.a.object,push:a.a.bool,from:a.a.string,to:a.a.oneOfType([a.a.string,a.a.object]).isRequired},h.defaultProps={push:!1},h.contextTypes={router:a.a.shape({history:a.a.shape({push:a.a.func.isRequired,replace:a.a.func.isRequired}).isRequired,staticContext:a.a.object}).isRequired},t.a=h},function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(2),a=n.n(i),u=n(20),s=n.n(u),c=n(15),l=n.n(c),f=n(68);var d=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){l()(this.context.router,"You should not use outside a ")},t.prototype.componentWillReceiveProps=function(e){s()(!(e.location&&!this.props.location),' elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),s()(!(!e.location&&this.props.location),' elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,r=void 0,i=void 0;return o.a.Children.forEach(t,(function(t){if(null==r&&o.a.isValidElement(t)){var a=t.props,u=a.path,s=a.exact,c=a.strict,l=a.sensitive,d=a.from,p=u||d;i=t,r=Object(f.a)(n.pathname,{path:p,exact:s,strict:c,sensitive:l},e.match)}})),r?o.a.cloneElement(i,{location:n,computedMatch:r}):null},t}(o.a.Component);d.contextTypes={router:a.a.shape({route:a.a.object.isRequired}).isRequired},d.propTypes={children:a.a.node,location:a.a.object},t.a=d},function(e,t,n){"use strict";var r={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i=Object.defineProperty,a=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,s=Object.getOwnPropertyDescriptor,c=Object.getPrototypeOf,l=c&&c(Object);e.exports=function e(t,n,f){if("string"!==typeof n){if(l){var d=c(n);d&&d!==l&&e(t,d,f)}var p=a(n);u&&(p=p.concat(u(n)));for(var h=0;h0?o(r(e),9007199254740991):0}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(21),o=n(41);e.exports=function(e,t){try{o(r,e,t)}catch(n){r[e]=t}return t}},function(e,t,n){var r=n(21),o=n(50),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},function(e,t,n){var r=n(50);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var r=n(47),o=n(160),i=n(119),a=n(118),u=n(163),s=n(115),c=n(120)("IE_PROTO"),l=function(){},f=function(){var e,t=s("iframe"),n=i.length;for(t.style.display="none",u.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write("