diff --git a/decompiler/Disasm/Register.cpp b/decompiler/Disasm/Register.cpp index 6811a2e360..8917b21fef 100644 --- a/decompiler/Disasm/Register.cpp +++ b/decompiler/Disasm/Register.cpp @@ -20,7 +20,7 @@ const bool allowed_local_gprs[Reg::MAX_GPR] = { true /*S0*/, true /*S1*/, true /*S2*/, true /*S3*/, true /*S4*/, true /*S5*/, false /*S6*/, false /*S7*/, true /*T8*/, true /*T9*/, false /*K0*/, false /*K1*/, - true /*GP*/, true /*SP*/, false /*FP*/, false /*RA*/ + true /*GP*/, true /*SP*/, false /*FP*/, true /*RA*/ }; // clang-format on } // namespace Reg diff --git a/decompiler/Function/CfgVtx.cpp b/decompiler/Function/CfgVtx.cpp index e4d3ca1cfe..3f98b6c548 100644 --- a/decompiler/Function/CfgVtx.cpp +++ b/decompiler/Function/CfgVtx.cpp @@ -477,6 +477,10 @@ bool ControlFlowGraph::is_while_loop(CfgVtx* b0, CfgVtx* b1, CfgVtx* b2) { if (!b0 || !b1 || !b2) return false; + if (b0->end_branch.asm_branch || b1->end_branch.asm_branch) { + return false; + } + // check next and prev if (b0->next != b1) return false; @@ -1243,6 +1247,10 @@ bool ControlFlowGraph::clean_up_asm_branches() { } // build new sequence replaced = true; + if (!b0->succ_branch) { + fmt::print("asm missing branch in block {}\n", b0->to_string()); + assert(false); + } m_blocks.at(b0->succ_branch->get_first_block_id())->needs_label = true; auto* new_seq = alloc(); @@ -1410,7 +1418,36 @@ bool ControlFlowGraph::clean_up_asm_branches() { old_seq->parent_claim(seq); return false; - } else { + } else if (!b0_seq && b1_seq) { + replaced = true; + if (!b0->succ_branch) { + fmt::print("bad: {}\n", b0->to_string()); + } + m_blocks.at(b0->succ_branch->get_first_block_id())->needs_label = true; + auto* old_seq = dynamic_cast(b1); + assert(old_seq); + if (b0->succ_branch) { + if (debug_asm_branch) { + fmt::print(" sbp: {}\n", !!b0->succ_branch->parent); + fmt::print(" sb: {}\n", b0->succ_branch->to_string()); + } + b0->succ_branch->replace_preds_with_and_check({b0}, nullptr); + } + + for (auto* p : b0->pred) { + p->replace_succ_and_check(b0, old_seq); + } + old_seq->pred = b0->pred; + old_seq->prev = b0->prev; + if (old_seq->prev) { + old_seq->prev->next = old_seq; + } + + old_seq->seq.insert(old_seq->seq.begin(), b0); + b0->parent_claim(old_seq); + } + + else { lg::error("unhandled sequences in clean_up_asm_branches seq: {} {}", !!b0_seq, !!b1_seq); } } @@ -1622,6 +1659,10 @@ bool ControlFlowGraph::find_cond_w_else(const CondWithElseLengthHack& hack) { return true; } + if (b0->end_branch.asm_branch) { + return true; + } + // printf("cwe try %s %s\n", c0->to_string().c_str(), b0->to_string().c_str()); // first condition should have the _option_ to fall through to first body @@ -1985,6 +2026,10 @@ bool ControlFlowGraph::find_cond_n_else() { return true; } + if (b0->end_branch.asm_branch) { + return true; + } + // printf("cne: c0 %s b0 %s\n", c0->to_string().c_str(), b0->to_string().c_str()); // first condition should have the _option_ to fall through to first body diff --git a/decompiler/IR2/AtomicOpTypeAnalysis.cpp b/decompiler/IR2/AtomicOpTypeAnalysis.cpp index 59f23b1e5b..c4cb7b8daa 100644 --- a/decompiler/IR2/AtomicOpTypeAnalysis.cpp +++ b/decompiler/IR2/AtomicOpTypeAnalysis.cpp @@ -261,10 +261,8 @@ TP_Type get_stack_type_at_constant_offset(int offset, if (offset == structure.hint.stack_offset) { // special case just getting the variable - if (structure.hint.container_type == StackStructureHint::ContainerType::NONE || - structure.hint.container_type == StackStructureHint::ContainerType::INLINE_ARRAY) { - return TP_Type::make_from_ts(coerce_to_reg_type(structure.ref_type)); - } + + return TP_Type::make_from_ts(coerce_to_reg_type(structure.ref_type)); } // Note: GOAL doesn't seem to constant propagate memory access on the stack, so the code diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index 2db0a059a2..dd1b876695 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -563,6 +563,14 @@ void Env::set_stack_structure_hints(const std::vector& hints type_info->get_in_memory_alignment()); } } break; + + case StackStructureHint::ContainerType::ARRAY: { + TypeSpec base_typespec = dts->parse_type_spec(hint.element_type); + entry.ref_type = TypeSpec("pointer", {TypeSpec(base_typespec)}); + entry.size = 1; // we assume that there is no constant propagation into this array and + // make this only trigger in get_stack_type if we hit exactly. + break; + } default: assert(false); } diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 428e65580a..153560da17 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -2621,6 +2621,10 @@ goos::Object StackStructureDefElement::to_form_internal(const Env&) const { return pretty_print::build_list(fmt::format("new 'stack-no-clear 'inline-array '{} {}", m_entry.ref_type.get_single_arg().print(), m_entry.hint.container_size)); + case StackStructureHint::ContainerType::ARRAY: + return pretty_print::build_list(fmt::format("new 'stack-no-clear 'array '{} {}", + m_entry.ref_type.get_single_arg().print(), + m_entry.hint.container_size)); default: assert(false); } diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 9e606cd051..1ad5806572 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -2140,6 +2140,23 @@ void SetFormFormElement::push_to_stack(const Env& env, FormPool& pool, FormStack fmt::print("invalid bf set: {}\n", src_as_bf_set->to_string(env)); } + // setting a bitfield to zero is wonky. + auto bfa = dynamic_cast(m_src->try_as_single_element()); + if (bfa) { + auto zero_set = bfa->get_set_field_0(env.dts->ts); + if (zero_set) { + auto field_token = DerefToken::make_field_name(zero_set->name()); + auto loc_elt = pool.alloc_element(m_dst, false, field_token); + loc_elt->inline_nested(); + auto loc = pool.alloc_single_form(nullptr, loc_elt); + loc->parent_element = this; + m_dst = loc; + auto zero = SimpleAtom::make_int_constant(0); + auto zero_form = pool.alloc_single_element_form(nullptr, zero); + m_src = zero_form; + } + } + const std::pair in_place_ops[] = { {FixedOperatorKind::ADDITION, FixedOperatorKind::ADDITION_IN_PLACE}, {FixedOperatorKind::ADDITION_PTR, FixedOperatorKind::ADDITION_PTR_IN_PLACE}, diff --git a/decompiler/IR2/bitfields.cpp b/decompiler/IR2/bitfields.cpp index 04262241a5..db63d806a2 100644 --- a/decompiler/IR2/bitfields.cpp +++ b/decompiler/IR2/bitfields.cpp @@ -379,6 +379,32 @@ std::string BitfieldAccessElement::debug_print(const Env& env) const { return result; } +std::optional BitfieldAccessElement::get_set_field_0(const TypeSystem& ts) const { + if (m_got_pcpyud) { + return {}; + } + if (m_steps.size() != 1) { + return {}; + } + + auto& step = m_steps.at(0); + if (step.kind != BitfieldManip::Kind::LOGAND_WITH_CONSTANT_INT) { + return {}; + } + + u64 mask = step.amount; + auto type = ts.lookup_type(m_type); + auto as_bitfield = dynamic_cast(type); + assert(as_bitfield); + // use the mask to figure out the field. + auto field = find_field_from_mask(ts, as_bitfield, ~mask, m_got_pcpyud); + if (field) { + return field; + } else { + return {}; + } +} + /*! * Add a step to the bitfield access. If this completes the access, returns a form representing the * access diff --git a/decompiler/IR2/bitfields.h b/decompiler/IR2/bitfields.h index 8715378b67..e828fba3c5 100644 --- a/decompiler/IR2/bitfields.h +++ b/decompiler/IR2/bitfields.h @@ -103,6 +103,8 @@ class BitfieldAccessElement : public FormElement { void push_pcpyud(const TypeSystem& ts, FormPool& pool, const Env& env); std::string debug_print(const Env& env) const; bool has_pcpyud() const { return m_got_pcpyud; } + const std::vector& steps() const { return m_steps; } + std::optional get_set_field_0(const TypeSystem& ts) const; private: bool m_got_pcpyud = false; diff --git a/decompiler/analysis/atomic_op_builder.cpp b/decompiler/analysis/atomic_op_builder.cpp index 0843955438..b6f8ea42c2 100644 --- a/decompiler/analysis/atomic_op_builder.cpp +++ b/decompiler/analysis/atomic_op_builder.cpp @@ -417,10 +417,11 @@ std::unique_ptr make_branch(const IR2_Condition& condition, const Instruction& delay, bool likely, int dest_label, - int my_idx) { + int my_idx, + bool force_asm) { assert(!likely); auto branch_delay = get_branch_delay(delay, my_idx); - if (branch_delay.is_known()) { + if (!force_asm && branch_delay.is_known()) { return std::make_unique(likely, condition, dest_label, branch_delay, my_idx); } else { auto delay_op = std::shared_ptr(convert_1_allow_asm(delay, my_idx)); @@ -989,7 +990,8 @@ std::unique_ptr convert_jalr_2(const Instruction& i0, const Instructio std::unique_ptr convert_bne_2(const Instruction& i0, const Instruction& i1, int idx, - bool likely) { + bool likely, + bool force_asm) { auto s0 = i0.get_src(0).get_reg(); auto s1 = i0.get_src(1).get_reg(); auto dest = i0.get_src(2).get_label(); @@ -1007,13 +1009,14 @@ std::unique_ptr convert_bne_2(const Instruction& i0, make_src_atom(s1, idx)); condition.make_flipped(); } - return make_branch(condition, i1, likely, dest, idx); + return make_branch(condition, i1, likely, dest, idx, force_asm); } std::unique_ptr convert_beq_2(const Instruction& i0, const Instruction& i1, int idx, - bool likely) { + bool likely, + bool force_asm) { auto s0 = i0.get_src(0).get_reg(); auto s1 = i0.get_src(1).get_reg(); auto dest = i0.get_src(2).get_label(); @@ -1038,7 +1041,7 @@ std::unique_ptr convert_beq_2(const Instruction& i0, IR2_Condition(IR2_Condition::Kind::EQUAL, make_src_atom(s0, idx), make_src_atom(s1, idx)); condition.make_flipped(); } - return make_branch(condition, i1, likely, dest, idx); + return make_branch(condition, i1, likely, dest, idx, force_asm); } std::unique_ptr convert_daddiu_2(const Instruction& i0, const Instruction& i1, int idx) { @@ -1144,6 +1147,14 @@ std::unique_ptr convert_bgez_2(const Instruction& i0, const Instructio i1, false, dest, idx); } +std::unique_ptr convert_blez_2(const Instruction& i0, const Instruction& i1, int idx) { + // blez is never emitted outside of inline asm. + auto dest = i0.get_src(1).get_label(); + return make_asm_branch(IR2_Condition(IR2_Condition::Kind::LEQ_ZERO_SIGNED, + make_src_atom(i0.get_src(0).get_reg(), idx)), + i1, false, dest, idx); +} + std::unique_ptr convert_bgtz_2(const Instruction& i0, const Instruction& i1, int idx) { // bgtz is never emitted outside of inline asm. auto dest = i0.get_src(1).get_label(); @@ -1152,7 +1163,10 @@ std::unique_ptr convert_bgtz_2(const Instruction& i0, const Instructio i1, false, dest, idx); } -std::unique_ptr convert_2(const Instruction& i0, const Instruction& i1, int idx) { +std::unique_ptr convert_2(const Instruction& i0, + const Instruction& i1, + int idx, + bool force_asm_branch) { switch (i0.kind) { case InstructionKind::DIV: return convert_division_2(i0, i1, idx, true); @@ -1161,9 +1175,9 @@ std::unique_ptr convert_2(const Instruction& i0, const Instruction& i1 case InstructionKind::JALR: return convert_jalr_2(i0, i1, idx); case InstructionKind::BNE: - return convert_bne_2(i0, i1, idx, false); + return convert_bne_2(i0, i1, idx, false, force_asm_branch); case InstructionKind::BEQ: - return convert_beq_2(i0, i1, idx, false); + return convert_beq_2(i0, i1, idx, false, force_asm_branch); case InstructionKind::DADDIU: return convert_daddiu_2(i0, i1, idx); case InstructionKind::LUI: @@ -1180,6 +1194,8 @@ std::unique_ptr convert_2(const Instruction& i0, const Instruction& i1 return convert_bgez_2(i0, i1, idx); case InstructionKind::BGTZ: return convert_bgtz_2(i0, i1, idx); + case InstructionKind::BLEZ: + return convert_blez_2(i0, i1, idx); default: return nullptr; } @@ -1326,7 +1342,7 @@ std::unique_ptr convert_slt_3(const Instruction& i0, if (i1.kind == InstructionKind::BEQ) { condition.invert(); } - result = make_branch(condition, i2, false, dest, idx); + result = make_branch(condition, i2, false, dest, idx, false); add_clobber_if_unwritten(*result, temp); return result; } else if (i1.kind == InstructionKind::DADDIU && @@ -1391,7 +1407,7 @@ std::unique_ptr convert_slti_3(const Instruction& i0, if (i1.kind == InstructionKind::BEQ) { condition.invert(); } - result = make_branch(condition, i2, false, dest, idx); + result = make_branch(condition, i2, false, dest, idx, false); add_clobber_if_unwritten(*result, temp); return result; } else if (i1.kind == InstructionKind::DADDIU && @@ -1434,7 +1450,7 @@ std::unique_ptr convert_fp_branch(const Instruction& i0, if (i1.kind == InstructionKind::BC1F) { condition.invert(); } - return make_branch(condition, i2, false, i1.get_src(0).get_label(), idx); + return make_branch(condition, i2, false, i1.get_src(0).get_label(), idx, false); } return nullptr; } @@ -1496,7 +1512,7 @@ std::unique_ptr convert_dsll32_4(const Instruction& i0, assert(i2.get_src(1).is_reg(rr0())); IR2_Condition condition(IR2_Condition::Kind::IS_NOT_PAIR, make_src_atom(arg, idx)); - auto result = make_branch(condition, i3, false, i2.get_src(2).get_label(), idx); + auto result = make_branch(condition, i3, false, i2.get_src(2).get_label(), idx, false); result->add_clobber_reg(temp); return result; } @@ -1518,7 +1534,7 @@ std::unique_ptr convert_fp_branch_with_nop(const Instruction& i0, if (i2.kind == InstructionKind::BC1F) { condition.invert(); } - return make_branch(condition, i3, false, i2.get_src(0).get_label(), idx); + return make_branch(condition, i3, false, i2.get_src(0).get_label(), idx, false); } return nullptr; } @@ -1959,7 +1975,7 @@ int convert_block_to_atomic_ops(int begin_idx, if (!converted && n_instr >= 2) { // try 2 instructions - op = convert_2(instr[0], instr[1], op_idx); + op = convert_2(instr[0], instr[1], op_idx, block_ends_in_asm_branch); if (op) { converted = true; length = 2; diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 0699db3688..deb02fc56c 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -3477,9 +3477,9 @@ ;; - Functions -(define-extern dma-buffer-add-buckets (function dma-buffer int dma-bucket)) -(define-extern dma-buffer-patch-buckets (function dma-bucket int dma-bucket)) -(define-extern dma-bucket-insert-tag (function dma-bucket bucket-id pointer (pointer dma-tag) pointer)) +(define-extern dma-buffer-add-buckets (function dma-buffer int (inline-array dma-bucket))) +(define-extern dma-buffer-patch-buckets (function (inline-array dma-bucket) int (inline-array dma-bucket))) +(define-extern dma-bucket-insert-tag (function (inline-array dma-bucket) bucket-id pointer (pointer dma-tag) pointer)) ;; ---------------------- @@ -4284,7 +4284,7 @@ (vu1-buf dma-buffer :offset 8) (debug-buf dma-buffer :offset 36) (global-buf dma-buffer :offset 40) - (bucket-group dma-bucket :offset 44) + (bucket-group (inline-array dma-bucket) :offset 44) (buffer dma-buffer 11 :offset 4) (profile-bar profile-bar 2 :offset 48) (run-time uint64 :offset 56) @@ -4838,6 +4838,11 @@ ;; - Types +(defenum vis-info-flag + :bitfield #t + :type uint32 + (waiting-for-load 30) + ) (declare-type bsp-header basic) (deftype level-vis-info (basic) ((level symbol :offset-assert 4) @@ -4852,7 +4857,7 @@ (ramdisk uint32 :offset-assert 40) (vis-bits pointer :offset-assert 44) (current-vis-string uint32 :offset-assert 48) - (vis-string uint8 :dynamic :offset-assert 52) + (vis-string uint32 :dynamic :offset-assert 52) ) :method-count-assert 9 :size-assert #x34 @@ -4967,7 +4972,7 @@ (bsp-name (_type_) symbol 13) (dummy-14 (_type_ object) memory-usage-block 14) (dummy-15 (_type_ vector) symbol 15) - (dummy-16 (_type_ uint uint) none 16) + (update-vis! (_type_ level-vis-info uint uint) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login (_type_) _type_ 19) @@ -7589,7 +7594,7 @@ :size-assert #x14 :flag-assert #xd00000014 (:methods - (dummy-9 (_type_) _type_ 9) + (login (_type_) _type_ 9) (dummy-10 (_type_ string type) art-element 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) @@ -7602,7 +7607,6 @@ :size-assert #x20 :flag-assert #xd00000020 (:methods - (dummy-9 (_type_) _type_ 9) (dummy-10 (_type_ string type) art-element 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) @@ -7624,6 +7628,7 @@ (artist-step float :offset 28) (master-art-group-name string :offset 32) (master-art-group-index int32 :offset 36) + (blerc-data (pointer uint8) :offset 40) ;; todo, this is probably something else (frames pointer :offset 44) ;; this structure doesn't exist? it's a structure with an array of joint-anim-compressed-hdr starting at offset 12 (data joint-anim-compressed :dynamic :offset-assert 48) ) @@ -7634,7 +7639,7 @@ (deftype art-group (art) ((info file-info :offset 4) - (data art-element :dynamic :offset 32) + (data art-element :dynamic :offset 32) ;; might just be art? ) :method-count-assert 15 :size-assert #x20 @@ -7869,7 +7874,7 @@ :size-assert #x18 :flag-assert #xa00000018 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -7910,6 +7915,7 @@ ((matrix-number uint8 :offset-assert 0) (matrix-dest uint8 :offset-assert 1) ) + :pack-me :method-count-assert 9 :size-assert #x2 :flag-assert #x900000002 @@ -7920,7 +7926,7 @@ (lump-four-count uint8 :offset-assert 1) (fp-qwc uint8 :offset-assert 2) (mat-xfer-count uint8 :offset-assert 3) - (mat-dest-data uint8 :dynamic :offset-assert 4) + (mat-dest-data merc-mat-dest :inline :dynamic :offset-assert 4) ) :method-count-assert 9 :size-assert #x4 @@ -7985,6 +7991,9 @@ :flag-assert #x900000010 ) +;;effect-bits: +;; 1 - swap with last effect. + (deftype merc-effect (structure) ((frag-geo merc-fragment :offset-assert 0) (frag-ctrl merc-fragment-control :offset-assert 4) @@ -7999,12 +8008,15 @@ (dummy1 uint8 :offset-assert 26) (envmap-usage uint8 :offset-assert 27) (extra-info merc-extra-info :offset-assert 28) + + ;; added + (data uint64 4 :offset 0) ) :method-count-assert 10 :size-assert #x20 :flag-assert #xa00000020 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -8053,7 +8065,7 @@ (st-vif-add uint32 :offset-assert 16) (st-int-off uint16 :offset-assert 20) (st-int-scale uint16 :offset-assert 22) - (effect-count uint32 :offset-assert 24) + (effect-count uint32 :offset-assert 24) ;; number of effects in merc-ctrl effect (blend-target-count uint32 :offset-assert 28) (fragment-count uint16 :offset-assert 32) (tri-count uint16 :offset-assert 34) @@ -8104,8 +8116,8 @@ ) (deftype merc-vu1-low-mem (structure) - ((tri-strip-gif qword :inline :offset-assert 0) - (ad-gif qword :inline :offset-assert 16) + ((tri-strip-gif gs-gif-tag :inline :offset-assert 0) ;; was qword + (ad-gif gs-gif-tag :inline :offset-assert 16) ;; was qword (hvdf-offset vector :inline :offset-assert 32) (perspective uint128 4 :offset-assert 48) (fog vector :inline :offset-assert 112) @@ -8164,7 +8176,7 @@ ;; - Functions -(define-extern merc-fragment-fp-data (function merc-fragment pointer)) +(define-extern merc-fragment-fp-data (function merc-fragment merc-fp-header)) ;; ---------------------- @@ -15256,22 +15268,22 @@ :flag-assert #x900000020 ) -; (deftype blerc-block (structure) -; ((output UNKNOWN 848 :offset-assert 0) -; (header blerc-block-header :inline :offset-assert 848) -; ) -; :method-count-assert 9 -; :size-assert #x370 -; :flag-assert #x900000370 -; ) +(deftype blerc-block (structure) + ((output uint8 848 :offset-assert 0) + (header blerc-block-header :inline :offset-assert 848) + ) + :method-count-assert 9 + :size-assert #x370 + :flag-assert #x900000370 + ) -; (deftype blerc-dcache (structure) -; ((repl-mult UNKNOWN 40 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x280 -; :flag-assert #x900000280 -; ) +(deftype blerc-dcache (structure) + ((repl-mult vector 40 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x280 + :flag-assert #x900000280 + ) (deftype blerc-globals (structure) ((first uint32 :offset-assert 0) @@ -15287,32 +15299,32 @@ :flag-assert #x900000018 ) -; (deftype blerc-context (structure) -; ((block-a blerc-block :inline :offset-assert 0) -; (dummy UNKNOWN 7312 :offset-assert 880) -; (block-b blerc-block :inline :offset-assert 8192) -; ) -; :method-count-assert 9 -; :size-assert #x2370 -; :flag-assert #x900002370 -; ) +(deftype blerc-context (structure) + ((block-a blerc-block :inline :offset-assert 0) + (dummy uint8 7312 :offset-assert 880) + (block-b blerc-block :inline :offset-assert 8192) + ) + :method-count-assert 9 + :size-assert #x2370 + :flag-assert #x900002370 + ) ;; - Functions (define-extern setup-blerc-chains-for-one-fragment function) -(define-extern setup-blerc-chains function) -(define-extern blerc-stats-init function) +(define-extern setup-blerc-chains (function merc-ctrl (pointer int16) dma-buffer none)) +(define-extern blerc-stats-init (function none)) (define-extern blerc-init (function none)) (define-extern blerc-a-fragment function) (define-extern dma-from-spr function) (define-extern merc-dma-chain-to-spr function) (define-extern blerc-execute (function none)) -(define-extern merc-blend-shape function) +(define-extern merc-blend-shape (function process-drawable object)) ;; - Unknowns -;;(define-extern *blerc-globals* object) ;; unknown type -;;(define-extern *stats-blerc* object) ;; unknown type +(define-extern *blerc-globals* blerc-globals) +(define-extern *stats-blerc* symbol) ;; ---------------------- @@ -15323,18 +15335,18 @@ ;; - Functions -(define-extern merc-vu1-init-buffer function) -(define-extern merc-vu1-initialize-chain function) -(define-extern merc-vu1-add-vu-function function) -(define-extern get-eye-block function) -(define-extern merc-stats-display function) -(define-extern merc-stats function) -(define-extern merc-edge-stats function) +(define-extern merc-vu1-init-buffer (function bucket-id gs-test int none)) +(define-extern merc-vu1-initialize-chain (function dma-gif-packet none)) +(define-extern merc-vu1-add-vu-function (function dma-packet vu-function int dma-gif-packet)) +(define-extern get-eye-block (function int int int)) +(define-extern merc-stats-display (function merc-ctrl none)) +(define-extern merc-stats (function none)) +(define-extern merc-edge-stats (function none)) (define-extern merc-vu1-init-buffers (function none)) ;; - Unknowns -;;(define-extern *merc-ctrl-header* object) ;; unknown type +(define-extern *merc-ctrl-header* merc-ctrl-header) ;; ---------------------- @@ -15821,8 +15833,8 @@ ;; - Functions -(define-extern unpack-comp-rle function) -(define-extern unpack-comp-huf function) +(define-extern unpack-comp-rle (function (pointer int8) (pointer int8) none)) +(define-extern unpack-comp-huf (function (pointer uint8) (pointer uint8) uint huf-dictionary-node none)) ;; ---------------------- @@ -15855,7 +15867,7 @@ ;; - Unknowns -;;(define-extern background-vu0-block object) ;; unknown type +(define-extern background-vu0-block vu-function) ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 85378e8650..6df1744675 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -118,7 +118,6 @@ // merc-blend-shape "setup-blerc-chains-for-one-fragment", // F: asm branching - "blerc-execute", // F: asm branching "merc-dma-chain-to-spr", // F: asm branching "blerc-a-fragment", @@ -189,11 +188,6 @@ "shadow-scissor-edges", "shadow-calc-dual-verts", - // decomp - //"(method 16 level)", // BUG: cfg fails - "unpack-comp-huf", - "unpack-comp-rle", - // background "upload-vis-bits", "background-upload-vu0", @@ -519,6 +513,11 @@ "end-perf-stat-collection": [0], "sprite-draw-distorters": [4, 5], "draw-string":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189], - "get-string-length":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50] + "get-string-length":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50], + "unpack-comp-rle":[1, 3, 5, 6], + "(method 16 level)":[ 1, 5, 13, 14, 15, 19, 26, 53], + "unpack-comp-huf":[2, 4, 5, 6, 7, 8, 9], + "blerc-execute":[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33] + } } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 745ca97576..e6c74f94d9 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1684,6 +1684,20 @@ ["L393", "rgba", true] ], + "merc-blend-shape": [ + ["L62", "(pointer int16)", true, 32] + ], + + "merc": [ + ["L50", "uint64", true], + ["L51", "uint64", true], + ["L52", "uint64", true], + ["L54", "uint64", true], + ["L53", "uint64", true], + ["L55", "uint64", true], + ["L56", "uint64", true] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index ca587ed0c5..931a681929 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1023,5 +1023,9 @@ [16, "vector"] ], + "merc-blend-shape": [ + [16, ["array", "int16", 128]] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index ccb82371ab..d15fae4484 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -152,12 +152,13 @@ ], "dma-buffer-patch-buckets": [ - [7, "a0", "pointer"], - [14, "a0", "pointer"], - [3, "a0", "dma-bucket"], - [11, "a0", "dma-bucket"], - [13, "a0", "dma-bucket"], - [19, "a0", "dma-bucket"] + [7, "a0", "(inline-array dma-bucket)"], + [8, "a3", "pointer"], + [14, "a0", "(inline-array dma-bucket)"], + [3, "a0", "(inline-array dma-bucket)"], + [11, "a0", "(inline-array dma-bucket)"], + [13, "a0", "(inline-array dma-bucket)"], + [19, "a0", "(inline-array dma-bucket)"] ], "dma-bucket-insert-tag": [ @@ -2153,5 +2154,62 @@ [31, "v1", "int"] ], + "(method 16 level)": [ + [252, "v1", "(pointer uint128)"], + [253, "a1", "(pointer uint128)"], + [255, "a0", "(pointer uint128)"], + [208, "s2", "(pointer uint8)"], + [209, "s2", "(pointer uint8)"], + [210, "s1", "(pointer uint8)"], + [217, "s2", "(pointer uint8)"], + [218, "s1", "(pointer uint8)"], + [79, "a0", "(pointer uint128)"], + [80, "v1", "(pointer uint128)"], + [257, "v1", "(pointer uint16)"], + [222, "s2", "(pointer uint8)"], + [161, "s1", "(pointer uint128)"], + [140, "s1", "(pointer uint128)"] + ], + + "unpack-comp-huf": [ + [[21, 23], "t3", "(pointer uint16)"] + ], + + "(method 9 merc-fragment)": [ + [[13,161], "s3", "adgif-shader"] + ], + + "(method 9 merc-effect)": [ + [49, "s4", "pointer"], + [50, "s5", "pointer"], + [[0, 49], "s4", "merc-fragment"], + [[0, 50], "s5", "merc-fragment-control"] + ], + + "merc-vu1-initialize-chain": [ + [[19, 47], "s5", "merc-vu1-low-mem"], + [58, "gp", "(inline-array dma-packet)"], + [[12, 18], "gp", "(pointer vif-tag)"] + ], + + "merc-vu1-init-buffer":[ + [[27, 31], "a0", "dma-packet"], + [[37, 40], "a0", "gs-gif-tag"], + [44, "a0", "(pointer gs-test)"], + [46, "a0", "(pointer gs-reg64)"], + [[55, 58], "v1", "dma-packet"] + ], + + "(method 8 merc-ctrl)": [ + [46, "s2", "pointer"], // was merc-fragment-control + [[22, 45], "s2", "merc-fragment-control"], + [[89, 93], "a1", "merc-blend-ctrl"], + [103, "a1", "pointer"] + ], + + "merc-edge-stats": [ + [[33, 35], "v1", "merc-ctrl"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 4cfc3d9937..ac65ea16eb 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3130,5 +3130,103 @@ "add-debug-outline-triangle": { "args":["enable", "bucket", "p0", "p1", "p2", "color"] }, + + "unpack-comp-rle": { + "args":["out", "in"], + "vars":{ + "v1-2":"current-input", + "a2-0":"repeated-value", + "v1-3":"copy-length", + "a2-1":"src-val" + } + }, + + "(method 16 level)": { + "args":["obj", "vis-info"], + "vars":{ + "a0-1":"cam-leaf-idx", + "v1-1":"curr-vis-str", + "s4-0":"desired-vis-str", + "s4-1":"vis-buffer", + "s3-1":"vis-load-result", + "v1-28":"dest-bits", + "a1-3":"len", + "a0-19":"bsp-bits", + "a1-5":"len-qw", + "s2-0":"lower-flag-bits", + "s1-0":"spad-start", + "s0-0":"spad-end", + "s3-2":"list-len", + "v1-49":"list-qwc", + "v0-1":"result" + } + }, + + "(method 9 merc-fragment)": { + "vars":{ + "s5-0":"fp-data", + "s4-0":"eye-ctrl", + "s3-0":"shader", + "v1-7":"eye-tex-block", + "v1-34":"eye-tex-block-2", + "v1-57":"tex", + "a0-36":"seg" + } + }, + + "(method 9 merc-effect)": { + "vars":{ + "v1-0":"data", + "v1-1":"tex", + "a0-8":"seg", + "s3-0":"frag-idx", + "s2-0":"ctrl-size", + "s1-0":"geo-size", + "s4-0":["geo", "merc-fragment"], + "s5-0":["ctrl", "merc-fragment-control"] + } + }, + + "merc-vu1-add-vu-function": { + "args":["dma", "func", "flush-mode"], + "vars": { + "v1-0":"func-data", + "a3-0":"qwc", + "a1-1":"dst", + "t0-1":"qwc-this-time" + } + }, + + "(method 8 merc-ctrl)": { + "vars": { + "s4-0":"ctrl-mem", + "s3-0":"effect-idx", + "s2-0":["fctrl", "merc-fragment-control"], + "s1-0":"frag-idx", + "v1-35":"effect-mem", + "a0-15":"effect-idx2", + "a1-9":["bctrl", "merc-blend-ctrl"], + "a2-1":"blend-frag-idx" + } + }, + + "(method 9 merc-ctrl)": { + "vars":{ + "v1-3":"seg", + "s5-0":"effect-idx", + "a0-4":"idx-with-bit1", + "a0-7":"this-effect", + "a1-5":"last-effect", + "a2-6":"copy-idx" + } + }, + + "merc-vu1-init-buffer": { + "args":["dma-bucket", "test"], + "vars": { + "gp-0":"bucket", + "s4-0":"dma-buf" + } + }, "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 0f124156a1..f450728b5c 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -1043,7 +1043,7 @@ goos::Object decompile_pair_elt(const LinkedWord& word, } else if (word.kind == LinkedWord::EMPTY_PTR) { return pretty_print::to_symbol("'()"); } else if (word.kind == LinkedWord::PLAIN_DATA && (word.data & 0b111) == 0) { - return pretty_print::to_symbol(fmt::format("(the binteger {})", word.data >> 3)); + return pretty_print::to_symbol(fmt::format("(the binteger {})", ((s32)word.data) >> 3)); } else { throw std::runtime_error(fmt::format("Pair elt did not have a good word kind")); } diff --git a/docs/gh-pages-proj/src/config/progress.json b/docs/gh-pages-proj/src/config/progress.json index ec3b73daf0..133676b9f8 100644 --- a/docs/gh-pages-proj/src/config/progress.json +++ b/docs/gh-pages-proj/src/config/progress.json @@ -2,8 +2,8 @@ "jak1": { "fileProgress": { "src_files_total": 515, - "src_files_finished": 78, - "src_files_started": 175, + "src_files_finished": 77, + "src_files_started": 178, "data_files_total": 584, "data_files_started": 4 } diff --git a/docs/index.html b/docs/index.html index 8854baa0e8..071deabd89 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -OpenGOAL Tooling
\ No newline at end of file +OpenGOAL Tooling
\ No newline at end of file diff --git a/docs/js/about.d184dbd9.js b/docs/js/about.e40bb13c.js similarity index 99% rename from docs/js/about.d184dbd9.js rename to docs/js/about.e40bb13c.js index 373022d5ce..8c69126a00 100644 --- a/docs/js/about.d184dbd9.js +++ b/docs/js/about.e40bb13c.js @@ -1,2 +1,2 @@ -(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{"0481":function(t,e,i){"use strict";var n=i("23e7"),r=i("a2bf"),a=i("7b0b"),s=i("50c4"),o=i("a691"),c=i("65f0");n({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=a(this),i=s(e.length),n=c(e,0);return n.length=r(n,e,e,i,0,void 0===t?1:o(t)),n}})},"0bc6":function(t,e,i){},"20f6":function(t,e,i){},"25a8":function(t,e,i){},"36a7":function(t,e,i){},4804:function(t,e,i){},"4b85":function(t,e,i){},"4ec9":function(t,e,i){"use strict";var n=i("6d61"),r=i("6566");t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r)},"615b":function(t,e,i){},6566:function(t,e,i){"use strict";var n=i("9bf2").f,r=i("7c73"),a=i("e2cc"),s=i("0366"),o=i("19aa"),c=i("2266"),l=i("7dd0"),u=i("2626"),h=i("83ab"),d=i("f183").fastKey,f=i("69f3"),p=f.set,v=f.getterFor;t.exports={getConstructor:function(t,e,i,l){var u=t((function(t,n){o(t,u,e),p(t,{type:e,index:r(null),first:void 0,last:void 0,size:0}),h||(t.size=0),void 0!=n&&c(n,t[l],{that:t,AS_ENTRIES:i})})),f=v(e),g=function(t,e,i){var n,r,a=f(t),s=m(t,e);return s?s.value=i:(a.last=s={index:r=d(e,!0),key:e,value:i,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=s),n&&(n.next=s),h?a.size++:t.size++,"F"!==r&&(a.index[r]=s)),t},m=function(t,e){var i,n=f(t),r=d(e);if("F"!==r)return n.index[r];for(i=n.first;i;i=i.next)if(i.key==e)return i};return a(u.prototype,{clear:function(){var t=this,e=f(t),i=e.index,n=e.first;while(n)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,i=f(e),n=m(e,t);if(n){var r=n.next,a=n.previous;delete i.index[n.index],n.removed=!0,a&&(a.next=r),r&&(r.previous=a),i.first==n&&(i.first=r),i.last==n&&(i.last=a),h?i.size--:e.size--}return!!n},forEach:function(t){var e,i=f(this),n=s(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:i.first){n(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),a(u.prototype,i?{get:function(t){var e=m(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),h&&n(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(t,e,i){var n=e+" Iterator",r=v(e),a=v(n);l(t,e,(function(t,e){p(this,{type:n,target:t,state:r(t),kind:e,last:void 0})}),(function(){var t=a(this),e=t.kind,i=t.last;while(i&&i.removed)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?"keys"==e?{value:i.key,done:!1}:"values"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?"entries":"values",!i,!0),u(e)}}},"6d61":function(t,e,i){"use strict";var n=i("23e7"),r=i("da84"),a=i("94ca"),s=i("6eeb"),o=i("f183"),c=i("2266"),l=i("19aa"),u=i("861d"),h=i("d039"),d=i("1c7e"),f=i("d44e"),p=i("7156");t.exports=function(t,e,i){var v=-1!==t.indexOf("Map"),g=-1!==t.indexOf("Weak"),m=v?"set":"add",b=r[t],y=b&&b.prototype,_=b,S={},x=function(t){var e=y[t];s(y,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:function(t,i){return e.call(this,0===t?0:t,i),this})},w=a(t,"function"!=typeof b||!(g||y.forEach&&!h((function(){(new b).entries().next()}))));if(w)_=i.getConstructor(e,t,v,m),o.enable();else if(a(t,!0)){var j=new _,O=j[m](g?{}:-0,1)!=j,k=h((function(){j.has(1)})),C=d((function(t){new b(t)})),L=!g&&h((function(){var t=new b,e=5;while(e--)t[m](e,e);return!t.has(-0)}));C||(_=e((function(e,i){l(e,_,t);var n=p(new b,e,_);return void 0!=i&&c(i,n[m],{that:n,AS_ENTRIES:v}),n})),_.prototype=y,y.constructor=_),(k||L)&&(x("delete"),x("has"),v&&x("get")),(L||O)&&x(m),g&&y.clear&&delete y.clear}return S[t]=_,n({global:!0,forced:_!=b},S),f(_,t),g||i.setStrong(_,t,v),_}},"6ece":function(t,e,i){},7435:function(t,e,i){},"7a34":function(t,e,i){},"86cc":function(t,e,i){},"87cf":function(t,e,i){t.exports=i.p+"img/logo-text-colored.5cda006b.png"},"8a79":function(t,e,i){"use strict";var n=i("23e7"),r=i("06cf").f,a=i("50c4"),s=i("577e"),o=i("5a34"),c=i("1d80"),l=i("ab13"),u=i("c430"),h="".endsWith,d=Math.min,f=l("endsWith"),p=!u&&!f&&!!function(){var t=r(String.prototype,"endsWith");return t&&!t.writable}();n({target:"String",proto:!0,forced:!p&&!f},{endsWith:function(t){var e=s(c(this));o(t);var i=arguments.length>1?arguments[1]:void 0,n=a(e.length),r=void 0===i?n:d(a(i),n),l=s(t);return h?h.call(e,l,r):e.slice(r-l.length,r)===l}})},"8d4f":function(t,e,i){},"8e4b":function(t,e,i){"use strict";i("7a34")},"8efc":function(t,e,i){},"96cf":function(t,e,i){var n=function(t){"use strict";var e,i=Object.prototype,n=i.hasOwnProperty,r="function"===typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",s=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function c(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch($){c=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var r=e&&e.prototype instanceof g?e:g,a=Object.create(r.prototype),s=new B(n||[]);return a._invoke=O(t,i,s),a}function u(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch($){return{type:"throw",arg:$}}}t.wrap=l;var h="suspendedStart",d="suspendedYield",f="executing",p="completed",v={};function g(){}function m(){}function b(){}var y={};c(y,a,(function(){return this}));var _=Object.getPrototypeOf,S=_&&_(_(E([])));S&&S!==i&&n.call(S,a)&&(y=S);var x=b.prototype=g.prototype=Object.create(y);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function j(t,e){function i(r,a,s,o){var c=u(t[r],t,a);if("throw"!==c.type){var l=c.arg,h=l.value;return h&&"object"===typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,o)}),(function(t){i("throw",t,s,o)})):e.resolve(h).then((function(t){l.value=t,s(l)}),(function(t){return i("throw",t,s,o)}))}o(c.arg)}var r;function a(t,n){function a(){return new e((function(e,r){i(t,n,e,r)}))}return r=r?r.then(a,a):a()}this._invoke=a}function O(t,e,i){var n=h;return function(r,a){if(n===f)throw new Error("Generator is already running");if(n===p){if("throw"===r)throw a;return z()}i.method=r,i.arg=a;while(1){var s=i.delegate;if(s){var o=k(s,i);if(o){if(o===v)continue;return o}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(n===h)throw n=p,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n=f;var c=u(t,e,i);if("normal"===c.type){if(n=i.done?p:d,c.arg===v)continue;return{value:c.arg,done:i.done}}"throw"===c.type&&(n=p,i.method="throw",i.arg=c.arg)}}}function k(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,"throw"===i.method){if(t.iterator["return"]&&(i.method="return",i.arg=e,k(t,i),"throw"===i.method))return v;i.method="throw",i.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var r=u(n,t.iterator,i.arg);if("throw"===r.type)return i.method="throw",i.arg=r.arg,i.delegate=null,v;var a=r.arg;return a?a.done?(i[t.resultName]=a.value,i.next=t.nextLoc,"return"!==i.method&&(i.method="next",i.arg=e),i.delegate=null,v):a:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function L(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function B(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function E(t){if(t){var i=t[a];if(i)return i.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var r=-1,s=function i(){while(++r=0;--a){var s=this.tryEntries[a],o=s.completion;if("root"===s.tryLoc)return r("end");if(s.tryLoc<=this.prev){var c=n.call(s,"catchLoc"),l=n.call(s,"finallyLoc");if(c&&l){if(this.prev=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),L(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if("throw"===n.type){var r=n.arg;L(i)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,i,n){return this.delegate={iterator:E(t),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=n}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},9911:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("link")},{link:function(t){return r(this,"a","href",t)}})},a2bf:function(t,e,i){"use strict";var n=i("e8b5"),r=i("50c4"),a=i("0366"),s=function(t,e,i,o,c,l,u,h){var d,f=c,p=0,v=!!u&&a(u,h,3);while(p0&&n(d))f=s(t,e,d,r(d.length),f,l-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[f]=d}f++}p++}return f};t.exports=s},bb51:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("v-container",{attrs:{fluid:""}},[n("v-row",{staticClass:"bg-img",attrs:{justify:"center",align:"center"}},[n("v-col",{attrs:{cols:"12",align:"center"}},[n("v-img",{attrs:{"max-height":"150","max-width":"250",src:i("87cf")}}),n("br"),n("h4",[t._v(" Reviving the Language that Brought us the Jak & Daxter Series ")]),n("br"),n("v-row",{attrs:{justify:"center"}},[n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"#project-status",rounded:"",color:"primary"}},[n("v-icon",[t._v("mdi-calendar-check")]),t._v(" Project Status ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{rounded:"",color:"secondary",href:"#recent-updates"}},[n("v-icon",[t._v("mdi-update")]),t._v(" Recent Updates ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"/jak-project/api-docs.html",target:"_blank",rounded:"",color:"deep-purple"}},[n("v-icon",[t._v("mdi-file-document")]),t._v(" Documentation ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"https://github.com/water111/jak-project",target:"_blank",rounded:"",color:"accent"}},[n("v-icon",[t._v("mdi-git")]),t._v(" Contribute ")],1)],1)],1)],1)],1),n("v-row",[n("v-container",[n("v-row",{staticStyle:{"margin-top":"3em"},attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"project-status"}},[t._v(" Project Status ")])])],1),n("v-row",{attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h2",{staticClass:"orange--text text--lighten-3"},[t._v("Jak 1 - Black Label")])])],1),n("v-row",{attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{cols:"10"}},[n("v-subheader",[t._v("Decompilation")]),n("v-progress-linear",{attrs:{color:"green","buffer-value":"0",value:t.jak1BlackLabelStatus.srcFilesFinishedValue,stream:"",height:"25"}},[t._v(" Source Files Finished - "+t._s(t.jak1BlackLabelStatus.srcFilesFinished)+" / "+t._s(t.jak1BlackLabelStatus.srcFilesTotal)+" ")]),n("br"),n("v-progress-linear",{attrs:{color:"yellow","buffer-value":"0",value:t.jak1BlackLabelStatus.srcFilesStartedValue,stream:"",height:"25"}},[t._v(" Source Files Started - "+t._s(t.jak1BlackLabelStatus.srcFilesStarted)+" / "+t._s(t.jak1BlackLabelStatus.srcFilesTotal)+" ")]),n("br"),n("v-progress-linear",{attrs:{color:"teal","buffer-value":"0",value:t.jak1BlackLabelStatus.dataFilesStartedValue,stream:"",height:"25"}},[t._v(" Data Files Started - "+t._s(t.jak1BlackLabelStatus.dataFilesStarted)+" / "+t._s(t.jak1BlackLabelStatus.dataFilesTotal)+" ")])],1)],1),n("v-row",{staticStyle:{"margin-top":"5em"},attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"recent-updates"}},[t._v(" Recent Updates ")])])],1),n("v-row",{staticStyle:{"margin-bottom":"10em"},attrs:{justify:"center"}},t._l(t.recentPRs,(function(e,i){return n("v-col",{key:"pr"-i,attrs:{cols:"4"}},[n("v-card",[n("v-card-text",{staticStyle:{"overflow-y":"auto",height:"300px"}},[n("p",{staticClass:"text-h5 orange--text text--lighten-3"},[t._v(" "+t._s(e.title)+" ")]),n("p",[t._v(" "+t._s(e.user.login)+" ")]),n("div",{staticClass:"text--primary"},[n("pre",{staticClass:"wrapped-pre"},[t._v(t._s(e.body))])])]),n("v-card-actions",[n("v-btn",{attrs:{text:"",color:"accent",href:e.html_url,target:"_blank"}},[t._v(" View Change ")])],1)],1)],1)})),1)],1)],1)],1)},r=[];i("d3b7");function a(t,e,i,n,r,a,s){try{var o=t[a](s),c=o.value}catch(l){return void i(l)}o.done?e(c):Promise.resolve(c).then(n,r)}function s(t){return function(){var e=this,i=arguments;return new Promise((function(n,r){var s=t.apply(e,i);function o(t){a(s,n,r,o,c,"next",t)}function c(t){a(s,n,r,o,c,"throw",t)}o(void 0)}))}}i("fb6a"),i("96cf");var o=i("f5f2"),c=o,l={name:"Home",components:{},data:function(){return{recentPRs:[],jak1BlackLabelStatus:{srcFilesTotal:c.jak1.fileProgress.src_files_total,srcFilesFinished:c.jak1.fileProgress.src_files_finished,srcFilesFinishedValue:c.jak1.fileProgress.src_files_finished/c.jak1.fileProgress.src_files_total*100,srcFilesStarted:c.jak1.fileProgress.src_files_started,srcFilesStartedValue:c.jak1.fileProgress.src_files_started/c.jak1.fileProgress.src_files_total*100,dataFilesTotal:c.jak1.fileProgress.data_files_total,dataFilesStarted:c.jak1.fileProgress.data_files_started,dataFilesStartedValue:c.jak1.fileProgress.data_files_started/c.jak1.fileProgress.data_files_total*100}}},mounted:function(){var t=s(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.loadRecentPRs();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{truncateString:function(t,e){return t.length<=e?t:t.slice(0,e)+"..."},loadRecentPRs:function(){var t=s(regeneratorRuntime.mark((function t(){var e,i,n,r,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,fetch("https://api.github.com/search/issues?q=repo:water111/jak-project+is:pr+is:merged&sort=updated");case 2:return e=t.sent,t.next=5,e.json();case 5:for(i=t.sent,n=9,r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"string"===typeof e.style?(Object(S["b"])("style must be an object",this),e):"string"===typeof e.class?(Object(S["b"])("class must be an object",this),e):(Object(x["d"])(t)?e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{"background-color":"".concat(t),"border-color":"".concat(t)}):t&&(e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(_["a"])({},t,!0))),e)},setTextColor:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"===typeof e.style)return Object(S["b"])("style must be an object",this),e;if("string"===typeof e.class)return Object(S["b"])("class must be an object",this),e;if(Object(x["d"])(t))e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{color:"".concat(t),"caret-color":"".concat(t)});else if(t){var i=t.toString().trim().split(" ",2),n=Object(v["a"])(i,2),r=n[0],a=n[1];e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(_["a"])({},r+"--text",!0)),a&&(e.class["text--"+a]=!0)}return e}}}),j=m["a"].extend({name:"elevatable",props:{elevation:[Number,String]},computed:{computedElevation:function(){return this.elevation},elevationClasses:function(){var t=this.computedElevation;return null==t||isNaN(parseInt(t))?{}:Object(_["a"])({},"elevation-".concat(this.elevation),!0)}}}),O=i("80d2"),k=m["a"].extend({name:"measurable",props:{height:[Number,String],maxHeight:[Number,String],maxWidth:[Number,String],minHeight:[Number,String],minWidth:[Number,String],width:[Number,String]},computed:{measurableStyles:function(){var t={},e=Object(O["d"])(this.height),i=Object(O["d"])(this.minHeight),n=Object(O["d"])(this.minWidth),r=Object(O["d"])(this.maxHeight),a=Object(O["d"])(this.maxWidth),s=Object(O["d"])(this.width);return e&&(t.height=e),i&&(t.minHeight=i),n&&(t.minWidth=n),r&&(t.maxHeight=r),a&&(t.maxWidth=a),s&&(t.width=s),t}}}),C=(i("a4d3"),i("e01a"),i("d28b"),i("3ca3"),i("ddb0"),i("06c5"));function L(t,e){var i="undefined"!==typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!i){if(Array.isArray(t)||(i=Object(C["a"])(t))||e&&t&&"number"===typeof t.length){i&&(t=i);var n=0,r=function(){};return{s:r,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,o=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){o=!0,a=t},f:function(){try{s||null==i["return"]||i["return"]()}finally{if(o)throw a}}}}i("a15b");var B=m["a"].extend({name:"roundable",props:{rounded:[Boolean,String],tile:Boolean},computed:{roundedClasses:function(){var t=[],e="string"===typeof this.rounded?String(this.rounded):!0===this.rounded;if(this.tile)t.push("rounded-0");else if("string"===typeof e){var i,n=e.split(" "),r=L(n);try{for(r.s();!(i=r.n()).done;){var a=i.value;t.push("rounded-".concat(a))}}catch(s){r.e(s)}finally{r.f()}}else e&&t.push("rounded");return t.length>0?Object(_["a"])({},t.join(" "),!0):{}}}}),E=i("7560"),z=i("58df"),$=Object(z["a"])(y,w,j,k,B,E["a"]).extend({name:"v-sheet",props:{outlined:Boolean,shaped:Boolean,tag:{type:String,default:"div"}},computed:{classes:function(){return Object(g["a"])(Object(g["a"])(Object(g["a"])({"v-sheet":!0,"v-sheet--outlined":this.outlined,"v-sheet--shaped":this.shaped},this.themeClasses),this.elevationClasses),this.roundedClasses)},styles:function(){return this.measurableStyles}},render:function(t){var e={class:this.classes,style:this.styles,on:this.listeners$};return t(this.tag,this.setBackgroundColor(this.color,e),this.$slots.default)}}),T=$;i("99af"),i("8d4f");function P(t,e){if("undefined"!==typeof window&&"IntersectionObserver"in window){var i=e.modifiers||{},n=e.value,r="object"===Object(p["a"])(n)?n:{handler:n,options:{}},a=r.handler,s=r.options,o=new IntersectionObserver((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0;if(t._observe){var r=e.some((function(t){return t.isIntersecting}));!a||i.quiet&&!t._observe.init||i.once&&!r&&t._observe.init||a(e,n,r),r&&i.once?N(t):t._observe.init=!0}}),s);t._observe={init:!1,observer:o},o.observe(t)}}function N(t){t._observe&&(t._observe.observer.unobserve(t),delete t._observe)}var R={inserted:P,unbind:N},F=R,V=w.extend({name:"v-progress-circular",directives:{intersect:F},props:{button:Boolean,indeterminate:Boolean,rotate:{type:[Number,String],default:0},size:{type:[Number,String],default:32},width:{type:[Number,String],default:4},value:{type:[Number,String],default:0}},data:function(){return{radius:20,isVisible:!0}},computed:{calculatedSize:function(){return Number(this.size)+(this.button?8:0)},circumference:function(){return 2*Math.PI*this.radius},classes:function(){return{"v-progress-circular--visible":this.isVisible,"v-progress-circular--indeterminate":this.indeterminate,"v-progress-circular--button":this.button}},normalizedValue:function(){return this.value<0?0:this.value>100?100:parseFloat(this.value)},strokeDashArray:function(){return Math.round(1e3*this.circumference)/1e3},strokeDashOffset:function(){return(100-this.normalizedValue)/100*this.circumference+"px"},strokeWidth:function(){return Number(this.width)/+this.size*this.viewBoxSize*2},styles:function(){return{height:Object(O["d"])(this.calculatedSize),width:Object(O["d"])(this.calculatedSize)}},svgStyles:function(){return{transform:"rotate(".concat(Number(this.rotate),"deg)")}},viewBoxSize:function(){return this.radius/(1-Number(this.width)/+this.size)}},methods:{genCircle:function(t,e){return this.$createElement("circle",{class:"v-progress-circular__".concat(t),attrs:{fill:"transparent",cx:2*this.viewBoxSize,cy:2*this.viewBoxSize,r:this.radius,"stroke-width":this.strokeWidth,"stroke-dasharray":this.strokeDashArray,"stroke-dashoffset":e}})},genSvg:function(){var t=[this.indeterminate||this.genCircle("underlay",0),this.genCircle("overlay",this.strokeDashOffset)];return this.$createElement("svg",{style:this.svgStyles,attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"".concat(this.viewBoxSize," ").concat(this.viewBoxSize," ").concat(2*this.viewBoxSize," ").concat(2*this.viewBoxSize)}},t)},genInfo:function(){return this.$createElement("div",{staticClass:"v-progress-circular__info"},this.$slots.default)},onObserve:function(t,e,i){this.isVisible=i}},render:function(t){return t("div",this.setTextColor(this.color,{staticClass:"v-progress-circular",attrs:{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.indeterminate?void 0:this.normalizedValue},class:this.classes,directives:[{name:"intersect",value:this.onObserve}],style:this.styles,on:this.$listeners}),[this.genSvg(),this.genInfo()])}}),I=V;function A(t,e){return function(){return Object(S["c"])("The ".concat(t," component must be used inside a ").concat(e))}}function W(t,e,i){var n=e&&i?{register:A(e,i),unregister:A(e,i)}:null;return m["a"].extend({name:"registrable-inject",inject:Object(_["a"])({},t,{default:n})})}function D(t,e,i){return W(t,e,i).extend({name:"groupable",props:{activeClass:{type:String,default:function(){if(this[t])return this[t].activeClass}},disabled:Boolean},data:function(){return{isActive:!1}},computed:{groupClasses:function(){return this.activeClass?Object(_["a"])({},this.activeClass,this.isActive):{}}},created:function(){this[t]&&this[t].register(this)},beforeDestroy:function(){this[t]&&this[t].unregister(this)},methods:{toggle:function(){this.$emit("change")}}})}D("itemGroup");function H(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"input";return m["a"].extend({name:"toggleable",model:{prop:e,event:i},props:Object(_["a"])({},e,{required:!1}),data:function(){return{isActive:!!this[e]}},watch:(t={},Object(_["a"])(t,e,(function(t){this.isActive=!!t})),Object(_["a"])(t,"isActive",(function(t){!!t!==this[e]&&this.$emit(i,t)})),t)})}H();var M={absolute:Boolean,bottom:Boolean,fixed:Boolean,left:Boolean,right:Boolean,top:Boolean};function q(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return m["a"].extend({name:"positionable",props:t.length?Object(O["f"])(M,t):M})}var G=q(),J=(i("9911"),i("5319"),i("b0c0"),i("7435"),Symbol("rippleStop")),Y=80;function X(t,e){t.style.transform=e,t.style.webkitTransform=e}function K(t,e){t.style.opacity=e.toString()}function U(t){return"TouchEvent"===t.constructor.name}function Q(t){return"KeyboardEvent"===t.constructor.name}var Z=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=0,r=0;if(!Q(t)){var a=e.getBoundingClientRect(),s=U(t)?t.touches[t.touches.length-1]:t;n=s.clientX-a.left,r=s.clientY-a.top}var o=0,c=.3;e._ripple&&e._ripple.circle?(c=.15,o=e.clientWidth/2,o=i.center?o:o+Math.sqrt(Math.pow(n-o,2)+Math.pow(r-o,2))/4):o=Math.sqrt(Math.pow(e.clientWidth,2)+Math.pow(e.clientHeight,2))/2;var l="".concat((e.clientWidth-2*o)/2,"px"),u="".concat((e.clientHeight-2*o)/2,"px"),h=i.center?l:"".concat(n-o,"px"),d=i.center?u:"".concat(r-o,"px");return{radius:o,scale:c,x:h,y:d,centerX:l,centerY:u}},tt={show:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e._ripple&&e._ripple.enabled){var n=document.createElement("span"),r=document.createElement("span");n.appendChild(r),n.className="v-ripple__container",i.class&&(n.className+=" ".concat(i.class));var a=Z(t,e,i),s=a.radius,o=a.scale,c=a.x,l=a.y,u=a.centerX,h=a.centerY,d="".concat(2*s,"px");r.className="v-ripple__animation",r.style.width=d,r.style.height=d,e.appendChild(n);var f=window.getComputedStyle(e);f&&"static"===f.position&&(e.style.position="relative",e.dataset.previousPosition="static"),r.classList.add("v-ripple__animation--enter"),r.classList.add("v-ripple__animation--visible"),X(r,"translate(".concat(c,", ").concat(l,") scale3d(").concat(o,",").concat(o,",").concat(o,")")),K(r,0),r.dataset.activated=String(performance.now()),setTimeout((function(){r.classList.remove("v-ripple__animation--enter"),r.classList.add("v-ripple__animation--in"),X(r,"translate(".concat(u,", ").concat(h,") scale3d(1,1,1)")),K(r,.25)}),0)}},hide:function(t){if(t&&t._ripple&&t._ripple.enabled){var e=t.getElementsByClassName("v-ripple__animation");if(0!==e.length){var i=e[e.length-1];if(!i.dataset.isHiding){i.dataset.isHiding="true";var n=performance.now()-Number(i.dataset.activated),r=Math.max(250-n,0);setTimeout((function(){i.classList.remove("v-ripple__animation--in"),i.classList.add("v-ripple__animation--out"),K(i,0),setTimeout((function(){var e=t.getElementsByClassName("v-ripple__animation");1===e.length&&t.dataset.previousPosition&&(t.style.position=t.dataset.previousPosition,delete t.dataset.previousPosition),i.parentNode&&t.removeChild(i.parentNode)}),300)}),r)}}}}};function et(t){return"undefined"===typeof t||!!t}function it(t){var e={},i=t.currentTarget;if(i&&i._ripple&&!i._ripple.touched&&!t[J]){if(t[J]=!0,U(t))i._ripple.touched=!0,i._ripple.isTouch=!0;else if(i._ripple.isTouch)return;if(e.center=i._ripple.centered||Q(t),i._ripple.class&&(e.class=i._ripple.class),U(t)){if(i._ripple.showTimerCommit)return;i._ripple.showTimerCommit=function(){tt.show(t,i,e)},i._ripple.showTimer=window.setTimeout((function(){i&&i._ripple&&i._ripple.showTimerCommit&&(i._ripple.showTimerCommit(),i._ripple.showTimerCommit=null)}),Y)}else tt.show(t,i,e)}}function nt(t){var e=t.currentTarget;if(e&&e._ripple){if(window.clearTimeout(e._ripple.showTimer),"touchend"===t.type&&e._ripple.showTimerCommit)return e._ripple.showTimerCommit(),e._ripple.showTimerCommit=null,void(e._ripple.showTimer=setTimeout((function(){nt(t)})));window.setTimeout((function(){e._ripple&&(e._ripple.touched=!1)})),tt.hide(e)}}function rt(t){var e=t.currentTarget;e&&e._ripple&&(e._ripple.showTimerCommit&&(e._ripple.showTimerCommit=null),window.clearTimeout(e._ripple.showTimer))}var at=!1;function st(t){at||t.keyCode!==O["j"].enter&&t.keyCode!==O["j"].space||(at=!0,it(t))}function ot(t){at=!1,nt(t)}function ct(t){!0===at&&(at=!1,nt(t))}function lt(t,e,i){var n=et(e.value);n||tt.hide(t),t._ripple=t._ripple||{},t._ripple.enabled=n;var r=e.value||{};r.center&&(t._ripple.centered=!0),r.class&&(t._ripple.class=e.value.class),r.circle&&(t._ripple.circle=r.circle),n&&!i?(t.addEventListener("touchstart",it,{passive:!0}),t.addEventListener("touchend",nt,{passive:!0}),t.addEventListener("touchmove",rt,{passive:!0}),t.addEventListener("touchcancel",nt),t.addEventListener("mousedown",it),t.addEventListener("mouseup",nt),t.addEventListener("mouseleave",nt),t.addEventListener("keydown",st),t.addEventListener("keyup",ot),t.addEventListener("blur",ct),t.addEventListener("dragstart",nt,{passive:!0})):!n&&i&&ut(t)}function ut(t){t.removeEventListener("mousedown",it),t.removeEventListener("touchstart",it),t.removeEventListener("touchend",nt),t.removeEventListener("touchmove",rt),t.removeEventListener("touchcancel",nt),t.removeEventListener("mouseup",nt),t.removeEventListener("mouseleave",nt),t.removeEventListener("keydown",st),t.removeEventListener("keyup",ot),t.removeEventListener("dragstart",nt),t.removeEventListener("blur",ct)}function ht(t,e,i){lt(t,e,!1)}function dt(t){delete t._ripple,ut(t)}function ft(t,e){if(e.value!==e.oldValue){var i=et(e.oldValue);lt(t,e,i)}}var pt={bind:ht,unbind:dt,update:ft},vt=pt,gt=m["a"].extend({name:"routable",directives:{Ripple:vt},props:{activeClass:String,append:Boolean,disabled:Boolean,exact:{type:Boolean,default:void 0},exactPath:Boolean,exactActiveClass:String,link:Boolean,href:[String,Object],to:[String,Object],nuxt:Boolean,replace:Boolean,ripple:{type:[Boolean,Object],default:null},tag:String,target:String},data:function(){return{isActive:!1,proxyClass:""}},computed:{classes:function(){var t={};return this.to||(this.activeClass&&(t[this.activeClass]=this.isActive),this.proxyClass&&(t[this.proxyClass]=this.isActive)),t},computedRipple:function(){var t;return null!=(t=this.ripple)?t:!this.disabled&&this.isClickable},isClickable:function(){return!this.disabled&&Boolean(this.isLink||this.$listeners.click||this.$listeners["!click"]||this.$attrs.tabindex)},isLink:function(){return this.to||this.href||this.link},styles:function(){return{}}},watch:{$route:"onRouteChange"},methods:{click:function(t){this.$emit("click",t)},generateRouteLink:function(){var t,e,i=this.exact,n=(t={attrs:{tabindex:"tabindex"in this.$attrs?this.$attrs.tabindex:void 0},class:this.classes,style:this.styles,props:{},directives:[{name:"ripple",value:this.computedRipple}]},Object(_["a"])(t,this.to?"nativeOn":"on",Object(g["a"])(Object(g["a"])({},this.$listeners),{},{click:this.click})),Object(_["a"])(t,"ref","link"),t);if("undefined"===typeof this.exact&&(i="/"===this.to||this.to===Object(this.to)&&"/"===this.to.path),this.to){var r=this.activeClass,a=this.exactActiveClass||r;this.proxyClass&&(r="".concat(r," ").concat(this.proxyClass).trim(),a="".concat(a," ").concat(this.proxyClass).trim()),e=this.nuxt?"nuxt-link":"router-link",Object.assign(n.props,{to:this.to,exact:i,exactPath:this.exactPath,activeClass:r,exactActiveClass:a,append:this.append,replace:this.replace})}else e=(this.href?"a":this.tag)||"div","a"===e&&this.href&&(n.attrs.href=this.href);return this.target&&(n.attrs.target=this.target),{tag:e,data:n}},onRouteChange:function(){var t=this;if(this.to&&this.$refs.link&&this.$route){var e="".concat(this.activeClass," ").concat(this.proxyClass||"").trim(),i="_vnode.data.class.".concat(e);this.$nextTick((function(){Object(O["h"])(t.$refs.link,i)&&t.toggle()}))}},toggle:function(){}}}),mt=(i("c96a"),m["a"].extend({name:"sizeable",props:{large:Boolean,small:Boolean,xLarge:Boolean,xSmall:Boolean},computed:{medium:function(){return Boolean(!this.xSmall&&!this.small&&!this.large&&!this.xLarge)},sizeableClasses:function(){return{"v-size--x-small":this.xSmall,"v-size--small":this.small,"v-size--default":this.medium,"v-size--large":this.large,"v-size--x-large":this.xLarge}}}})),bt=Object(z["a"])(T,gt,G,mt,D("btnToggle"),H("inputValue")),yt=bt.extend().extend({name:"v-btn",props:{activeClass:{type:String,default:function(){return this.btnToggle?this.btnToggle.activeClass:""}},block:Boolean,depressed:Boolean,fab:Boolean,icon:Boolean,loading:Boolean,outlined:Boolean,plain:Boolean,retainFocusOnClick:Boolean,rounded:Boolean,tag:{type:String,default:"button"},text:Boolean,tile:Boolean,type:{type:String,default:"button"},value:null},data:function(){return{proxyClass:"v-btn--active"}},computed:{classes:function(){return Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])({"v-btn":!0},gt.options.computed.classes.call(this)),{},{"v-btn--absolute":this.absolute,"v-btn--block":this.block,"v-btn--bottom":this.bottom,"v-btn--disabled":this.disabled,"v-btn--is-elevated":this.isElevated,"v-btn--fab":this.fab,"v-btn--fixed":this.fixed,"v-btn--has-bg":this.hasBg,"v-btn--icon":this.icon,"v-btn--left":this.left,"v-btn--loading":this.loading,"v-btn--outlined":this.outlined,"v-btn--plain":this.plain,"v-btn--right":this.right,"v-btn--round":this.isRound,"v-btn--rounded":this.rounded,"v-btn--router":this.to,"v-btn--text":this.text,"v-btn--tile":this.tile,"v-btn--top":this.top},this.themeClasses),this.groupClasses),this.elevationClasses),this.sizeableClasses)},computedElevation:function(){if(!this.disabled)return j.options.computed.computedElevation.call(this)},computedRipple:function(){var t,e=!this.icon&&!this.fab||{circle:!0};return!this.disabled&&(null!=(t=this.ripple)?t:e)},hasBg:function(){return!this.text&&!this.plain&&!this.outlined&&!this.icon},isElevated:function(){return Boolean(!this.icon&&!this.text&&!this.outlined&&!this.depressed&&!this.disabled&&!this.plain&&(null==this.elevation||Number(this.elevation)>0))},isRound:function(){return Boolean(this.icon||this.fab)},styles:function(){return Object(g["a"])({},this.measurableStyles)}},created:function(){var t=this,e=[["flat","text"],["outline","outlined"],["round","rounded"]];e.forEach((function(e){var i=Object(v["a"])(e,2),n=i[0],r=i[1];t.$attrs.hasOwnProperty(n)&&Object(S["a"])(n,r,t)}))},methods:{click:function(t){!this.retainFocusOnClick&&!this.fab&&t.detail&&this.$el.blur(),this.$emit("click",t),this.btnToggle&&this.toggle()},genContent:function(){return this.$createElement("span",{staticClass:"v-btn__content"},this.$slots.default)},genLoader:function(){return this.$createElement("span",{class:"v-btn__loader"},this.$slots.loader||[this.$createElement(I,{props:{indeterminate:!0,size:23,width:2}})])}},render:function(t){var e=[this.genContent(),this.loading&&this.genLoader()],i=this.generateRouteLink(),n=i.tag,r=i.data,a=this.hasBg?this.setBackgroundColor:this.setTextColor;return"button"===n&&(r.attrs.type=this.type,r.attrs.disabled=this.disabled),r.attrs.value=["string","number"].includes(Object(p["a"])(this.value))?this.value:JSON.stringify(this.value),t(n,this.disabled?r:a(this.color,r),e)}}),_t=(i("0481"),i("615b"),i("6ece"),i("b64b"),{styleList:/;(?![^(]*\))/g,styleProp:/:(.*)/});function St(t){var e,i={},n=L(t.split(_t.styleList));try{for(n.s();!(e=n.n()).done;){var r=e.value,a=r.split(_t.styleProp),s=Object(v["a"])(a,2),o=s[0],c=s[1];o=o.trim(),o&&("string"===typeof c&&(c=c.trim()),i[Object(O["a"])(o)]=c)}}catch(l){n.e(l)}finally{n.f()}return i}function xt(){var t,e={},i=arguments.length;while(i--)for(var n=0,r=Object.keys(arguments[i]);n0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length,n=new Array(i>1?i-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:"top center 0",i=arguments.length>2?arguments[2]:void 0;return{name:t,functional:!0,props:{group:{type:Boolean,default:!1},hideOnLeave:{type:Boolean,default:!1},leaveAbsolute:{type:Boolean,default:!1},mode:{type:String,default:i},origin:{type:String,default:e}},render:function(e,i){var n="transition".concat(i.props.group?"-group":""),r={props:{name:t,mode:i.props.mode},on:{beforeEnter:function(t){t.style.transformOrigin=i.props.origin,t.style.webkitTransformOrigin=i.props.origin}}};return i.props.leaveAbsolute&&(r.on.leave=kt(r.on.leave,(function(t){var e=t.offsetTop,i=t.offsetLeft,n=t.offsetWidth,r=t.offsetHeight;t._transitionInitialStyles={position:t.style.position,top:t.style.top,left:t.style.left,width:t.style.width,height:t.style.height},t.style.position="absolute",t.style.top=e+"px",t.style.left=i+"px",t.style.width=n+"px",t.style.height=r+"px"})),r.on.afterLeave=kt(r.on.afterLeave,(function(t){if(t&&t._transitionInitialStyles){var e=t._transitionInitialStyles,i=e.position,n=e.top,r=e.left,a=e.width,s=e.height;delete t._transitionInitialStyles,t.style.position=i||"",t.style.top=n||"",t.style.left=r||"",t.style.width=a||"",t.style.height=s||""}}))),i.props.hideOnLeave&&(r.on.leave=kt(r.on.leave,(function(t){t._initialDisplay=t.style.display,t.style.display="none"})),r.on.afterLeave=kt(r.on.afterLeave,(function(t){t&&(t.style.display=t._initialDisplay||"")}))),e(n,xt(i.data,r),i.children)}}}function Lt(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"in-out";return{name:t,functional:!0,props:{mode:{type:String,default:i}},render:function(i,n){return i("transition",xt(n.data,{props:{name:t},on:e}),n.children)}}}var Bt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=e?"width":"height",n="offset".concat(Object(O["o"])(i));return{beforeEnter:function(t){t._parent=t.parentNode,t._initialStyle=Object(_["a"])({transition:t.style.transition,overflow:t.style.overflow},i,t.style[i])},enter:function(e){var r=e._initialStyle;e.style.setProperty("transition","none","important"),e.style.overflow="hidden";var a="".concat(e[n],"px");e.style[i]="0",e.offsetHeight,e.style.transition=r.transition,t&&e._parent&&e._parent.classList.add(t),requestAnimationFrame((function(){e.style[i]=a}))},afterEnter:a,enterCancelled:a,leave:function(t){t._initialStyle=Object(_["a"])({transition:"",overflow:t.style.overflow},i,t.style[i]),t.style.overflow="hidden",t.style[i]="".concat(t[n],"px"),t.offsetHeight,requestAnimationFrame((function(){return t.style[i]="0"}))},afterLeave:r,leaveCancelled:r};function r(e){t&&e._parent&&e._parent.classList.remove(t),a(e)}function a(t){var e=t._initialStyle[i];t.style.overflow=t._initialStyle.overflow,null!=e&&(t.style[i]=e),delete t._initialStyle}},Et=(Ct("carousel-transition"),Ct("carousel-reverse-transition"),Ct("tab-transition"),Ct("tab-reverse-transition"),Ct("menu-transition"),Ct("fab-transition","center center","out-in"),Ct("dialog-transition"),Ct("dialog-bottom-transition"),Ct("dialog-top-transition"),Ct("fade-transition")),zt=(Ct("scale-transition"),Ct("scroll-x-transition"),Ct("scroll-x-reverse-transition"),Ct("scroll-y-transition"),Ct("scroll-y-reverse-transition"),Ct("slide-x-transition"));Ct("slide-x-reverse-transition"),Ct("slide-y-transition"),Ct("slide-y-reverse-transition"),Lt("expand-transition",Bt()),Lt("expand-x-transition",Bt("",!0));function $t(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"change";return m["a"].extend({name:"proxyable",model:{prop:t,event:e},props:Object(_["a"])({},t,{required:!1}),data:function(){return{internalLazyValue:this[t]}},computed:{internalValue:{get:function(){return this.internalLazyValue},set:function(t){t!==this.internalLazyValue&&(this.internalLazyValue=t,this.$emit(e,t))}}},watch:Object(_["a"])({},t,(function(t){this.internalLazyValue=t}))})}var Tt=$t(),Pt=Tt,Nt=Object(z["a"])(w,q(["absolute","fixed","top","bottom"]),Pt,E["a"]),Rt=Nt.extend({name:"v-progress-linear",directives:{intersect:F},props:{active:{type:Boolean,default:!0},backgroundColor:{type:String,default:null},backgroundOpacity:{type:[Number,String],default:null},bufferValue:{type:[Number,String],default:100},color:{type:String,default:"primary"},height:{type:[Number,String],default:4},indeterminate:Boolean,query:Boolean,reverse:Boolean,rounded:Boolean,stream:Boolean,striped:Boolean,value:{type:[Number,String],default:0}},data:function(){return{internalLazyValue:this.value||0,isVisible:!0}},computed:{__cachedBackground:function(){return this.$createElement("div",this.setBackgroundColor(this.backgroundColor||this.color,{staticClass:"v-progress-linear__background",style:this.backgroundStyle}))},__cachedBar:function(){return this.$createElement(this.computedTransition,[this.__cachedBarType])},__cachedBarType:function(){return this.indeterminate?this.__cachedIndeterminate:this.__cachedDeterminate},__cachedBuffer:function(){return this.$createElement("div",{staticClass:"v-progress-linear__buffer",style:this.styles})},__cachedDeterminate:function(){return this.$createElement("div",this.setBackgroundColor(this.color,{staticClass:"v-progress-linear__determinate",style:{width:Object(O["d"])(this.normalizedValue,"%")}}))},__cachedIndeterminate:function(){return this.$createElement("div",{staticClass:"v-progress-linear__indeterminate",class:{"v-progress-linear__indeterminate--active":this.active}},[this.genProgressBar("long"),this.genProgressBar("short")])},__cachedStream:function(){return this.stream?this.$createElement("div",this.setTextColor(this.color,{staticClass:"v-progress-linear__stream",style:{width:Object(O["d"])(100-this.normalizedBuffer,"%")}})):null},backgroundStyle:function(){var t,e=null==this.backgroundOpacity?this.backgroundColor?1:.3:parseFloat(this.backgroundOpacity);return t={opacity:e},Object(_["a"])(t,this.isReversed?"right":"left",Object(O["d"])(this.normalizedValue,"%")),Object(_["a"])(t,"width",Object(O["d"])(Math.max(0,this.normalizedBuffer-this.normalizedValue),"%")),t},classes:function(){return Object(g["a"])({"v-progress-linear--absolute":this.absolute,"v-progress-linear--fixed":this.fixed,"v-progress-linear--query":this.query,"v-progress-linear--reactive":this.reactive,"v-progress-linear--reverse":this.isReversed,"v-progress-linear--rounded":this.rounded,"v-progress-linear--striped":this.striped,"v-progress-linear--visible":this.isVisible},this.themeClasses)},computedTransition:function(){return this.indeterminate?Et:zt},isReversed:function(){return this.$vuetify.rtl!==this.reverse},normalizedBuffer:function(){return this.normalize(this.bufferValue)},normalizedValue:function(){return this.normalize(this.internalLazyValue)},reactive:function(){return Boolean(this.$listeners.change)},styles:function(){var t={};return this.active||(t.height=0),this.indeterminate||100===parseFloat(this.normalizedBuffer)||(t.width=Object(O["d"])(this.normalizedBuffer,"%")),t}},methods:{genContent:function(){var t=Object(O["i"])(this,"default",{value:this.internalLazyValue});return t?this.$createElement("div",{staticClass:"v-progress-linear__content"},t):null},genListeners:function(){var t=this.$listeners;return this.reactive&&(t.click=this.onClick),t},genProgressBar:function(t){return this.$createElement("div",this.setBackgroundColor(this.color,{staticClass:"v-progress-linear__indeterminate",class:Object(_["a"])({},t,!0)}))},onClick:function(t){if(this.reactive){var e=this.$el.getBoundingClientRect(),i=e.width;this.internalValue=t.offsetX/i*100}},onObserve:function(t,e,i){this.isVisible=i},normalize:function(t){return t<0?0:t>100?100:parseFloat(t)}},render:function(t){var e={staticClass:"v-progress-linear",attrs:{role:"progressbar","aria-valuemin":0,"aria-valuemax":this.normalizedBuffer,"aria-valuenow":this.indeterminate?void 0:this.normalizedValue},class:this.classes,directives:[{name:"intersect",value:this.onObserve}],style:{bottom:this.bottom?0:void 0,height:this.active?Object(O["d"])(this.height):0,top:this.top?0:void 0},on:this.genListeners()};return t("div",e,[this.__cachedStream,this.__cachedBackground,this.__cachedBuffer,this.__cachedBar,this.genContent()])}}),Ft=Rt,Vt=m["a"].extend().extend({name:"loadable",props:{loading:{type:[Boolean,String],default:!1},loaderHeight:{type:[Number,String],default:2}},methods:{genProgress:function(){return!1===this.loading?null:this.$slots.progress||this.$createElement(Ft,{props:{absolute:!0,color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,height:this.loaderHeight,indeterminate:!0}})}}}),It=Object(z["a"])(Vt,gt,T).extend({name:"v-card",props:{flat:Boolean,hover:Boolean,img:String,link:Boolean,loaderHeight:{type:[Number,String],default:4},raised:Boolean},computed:{classes:function(){return Object(g["a"])(Object(g["a"])({"v-card":!0},gt.options.computed.classes.call(this)),{},{"v-card--flat":this.flat,"v-card--hover":this.hover,"v-card--link":this.isClickable,"v-card--loading":this.loading,"v-card--disabled":this.disabled,"v-card--raised":this.raised},T.options.computed.classes.call(this))},styles:function(){var t=Object(g["a"])({},T.options.computed.styles.call(this));return this.img&&(t.background='url("'.concat(this.img,'") center center / cover no-repeat')),t}},methods:{genProgress:function(){var t=Vt.options.methods.genProgress.call(this);return t?this.$createElement("div",{staticClass:"v-card__progress",key:"progress"},[t]):null}},render:function(t){var e=this.generateRouteLink(),i=e.tag,n=e.data;return n.style=this.styles,this.isClickable&&(n.attrs=n.attrs||{},n.attrs.tabindex=0),t(i,this.setBackgroundColor(this.color,n),[this.genProgress(),this.$slots.default])}}),At=Object(O["e"])("v-card__actions"),Wt=(Object(O["e"])("v-card__subtitle"),Object(O["e"])("v-card__text")),Dt=(Object(O["e"])("v-card__title"),i("4ec9"),i("159b"),i("2ca0"),i("4b85"),["sm","md","lg","xl"]),Ht=function(){return Dt.reduce((function(t,e){return t[e]={type:[Boolean,String,Number],default:!1},t}),{})}(),Mt=function(){return Dt.reduce((function(t,e){return t["offset"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),qt=function(){return Dt.reduce((function(t,e){return t["order"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),Gt={col:Object.keys(Ht),offset:Object.keys(Mt),order:Object.keys(qt)};function Jt(t,e,i){var n=t;if(null!=i&&!1!==i){if(e){var r=e.replace(t,"");n+="-".concat(r)}return"col"!==t||""!==i&&!0!==i?(n+="-".concat(i),n.toLowerCase()):n.toLowerCase()}}var Yt=new Map,Xt=m["a"].extend({name:"v-col",functional:!0,props:Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])({cols:{type:[Boolean,String,Number],default:!1}},Ht),{},{offset:{type:[String,Number],default:null}},Mt),{},{order:{type:[String,Number],default:null}},qt),{},{alignSelf:{type:String,default:null,validator:function(t){return["auto","start","end","center","baseline","stretch"].includes(t)}},tag:{type:String,default:"div"}}),render:function(t,e){var i=e.props,n=e.data,r=e.children,a=(e.parent,"");for(var s in i)a+=String(i[s]);var o=Yt.get(a);return o||function(){var t,e;for(e in o=[],Gt)Gt[e].forEach((function(t){var n=i[t],r=Jt(e,t,n);r&&o.push(r)}));var n=o.some((function(t){return t.startsWith("col-")}));o.push((t={col:!n||!i.cols},Object(_["a"])(t,"col-".concat(i.cols),i.cols),Object(_["a"])(t,"offset-".concat(i.offset),i.offset),Object(_["a"])(t,"order-".concat(i.order),i.order),Object(_["a"])(t,"align-self-".concat(i.alignSelf),i.alignSelf),t)),Yt.set(a,o)}(),t(i.tag,xt(n,{class:o}),r)}});i("4de4"),i("20f6");function Kt(t){return m["a"].extend({name:"v-".concat(t),functional:!0,props:{id:String,tag:{type:String,default:"div"}},render:function(e,i){var n=i.props,r=i.data,a=i.children;r.staticClass="".concat(t," ").concat(r.staticClass||"").trim();var s=r.attrs;if(s){r.attrs={};var o=Object.keys(s).filter((function(t){if("slot"===t)return!1;var e=s[t];return t.startsWith("data-")?(r.attrs[t]=e,!1):e||"string"===typeof e}));o.length&&(r.staticClass+=" ".concat(o.join(" ")))}return n.id&&(r.domProps=r.domProps||{},r.domProps.id=n.id),e(n.tag,r,a)}})}var Ut,Qt=Kt("container").extend({name:"v-container",functional:!0,props:{id:String,tag:{type:String,default:"div"},fluid:{type:Boolean,default:!1}},render:function(t,e){var i,n=e.props,r=e.data,a=e.children,s=r.attrs;return s&&(r.attrs={},i=Object.keys(s).filter((function(t){if("slot"===t)return!1;var e=s[t];return t.startsWith("data-")?(r.attrs[t]=e,!1):e||"string"===typeof e}))),n.id&&(r.domProps=r.domProps||{},r.domProps.id=n.id),t(n.tag,xt(r,{staticClass:"container",class:Array({"container--fluid":n.fluid}).concat(i||[])}),a)}});i("2532"),i("7db0"),i("4804");function Zt(t){return["fas","far","fal","fab","fad","fak"].some((function(e){return t.includes(e)}))}function te(t){return/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4}(function(t){t["xSmall"]="12px",t["small"]="16px",t["default"]="24px",t["medium"]="28px",t["large"]="36px",t["xLarge"]="40px"})(Ut||(Ut={}));var ee=Object(z["a"])(y,w,mt,E["a"]).extend({name:"v-icon",props:{dense:Boolean,disabled:Boolean,left:Boolean,right:Boolean,size:[Number,String],tag:{type:String,required:!1,default:"i"}},computed:{medium:function(){return!1},hasClickListener:function(){return Boolean(this.listeners$.click||this.listeners$["!click"])}},methods:{getIcon:function(){var t="";return this.$slots.default&&(t=this.$slots.default[0].text.trim()),Object(O["n"])(this,t)},getSize:function(){var t={xSmall:this.xSmall,small:this.small,medium:this.medium,large:this.large,xLarge:this.xLarge},e=Object(O["k"])(t).find((function(e){return t[e]}));return e&&Ut[e]||Object(O["d"])(this.size)},getDefaultData:function(){return{staticClass:"v-icon notranslate",class:{"v-icon--disabled":this.disabled,"v-icon--left":this.left,"v-icon--link":this.hasClickListener,"v-icon--right":this.right,"v-icon--dense":this.dense},attrs:Object(g["a"])({"aria-hidden":!this.hasClickListener,disabled:this.hasClickListener&&this.disabled,type:this.hasClickListener?"button":void 0},this.attrs$),on:this.listeners$}},getSvgWrapperData:function(){var t=this.getSize(),e=Object(g["a"])(Object(g["a"])({},this.getDefaultData()),{},{style:t?{fontSize:t,height:t,width:t}:void 0});return this.applyColors(e),e},applyColors:function(t){t.class=Object(g["a"])(Object(g["a"])({},t.class),this.themeClasses),this.setTextColor(this.color,t)},renderFontIcon:function(t,e){var i=[],n=this.getDefaultData(),r="material-icons",a=t.indexOf("-"),s=a<=-1;s?i.push(t):(r=t.slice(0,a),Zt(r)&&(r="")),n.class[r]=!0,n.class[t]=!s;var o=this.getSize();return o&&(n.style={fontSize:o}),this.applyColors(n),e(this.hasClickListener?"button":this.tag,n,i)},renderSvgIcon:function(t,e){var i={class:"v-icon__svg",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":!0}},n=this.getSize();return n&&(i.style={fontSize:n,height:n,width:n}),e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e("svg",i,[e("path",{attrs:{d:t}})])])},renderSvgIconComponent:function(t,e){var i={class:{"v-icon__component":!0}},n=this.getSize();n&&(i.style={fontSize:n,height:n,width:n}),this.applyColors(i);var r=t.component;return i.props=t.props,i.nativeOn=i.on,e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e(r,i)])}},render:function(t){var e=this.getIcon();return"string"===typeof e?te(e)?this.renderSvgIcon(e,t):this.renderFontIcon(e,t):this.renderSvgIconComponent(e,t)}}),ie=m["a"].extend({name:"v-icon",$_wrapperFor:ee,functional:!0,render:function(t,e){var i=e.data,n=e.children,r="";return i.domProps&&(r=i.domProps.textContent||i.domProps.innerHTML||r,delete i.domProps.textContent,delete i.domProps.innerHTML),t(ee,i,r?[r]:n)}}),ne=(i("8a79"),i("8efc"),i("36a7"),Object(z["a"])(k).extend({name:"v-responsive",props:{aspectRatio:[String,Number],contentClass:String},computed:{computedAspectRatio:function(){return Number(this.aspectRatio)},aspectStyle:function(){return this.computedAspectRatio?{paddingBottom:1/this.computedAspectRatio*100+"%"}:void 0},__cachedSizer:function(){return this.aspectStyle?this.$createElement("div",{style:this.aspectStyle,staticClass:"v-responsive__sizer"}):[]}},methods:{genContent:function(){return this.$createElement("div",{staticClass:"v-responsive__content",class:this.contentClass},this.$slots.default)}},render:function(t){return t("div",{staticClass:"v-responsive",style:this.measurableStyles,on:this.$listeners},[this.__cachedSizer,this.genContent()])}})),re=ne,ae="undefined"!==typeof window&&"IntersectionObserver"in window,se=Object(z["a"])(re,E["a"]).extend({name:"v-img",directives:{intersect:F},props:{alt:String,contain:Boolean,eager:Boolean,gradient:String,lazySrc:String,options:{type:Object,default:function(){return{root:void 0,rootMargin:void 0,threshold:void 0}}},position:{type:String,default:"center center"},sizes:String,src:{type:[String,Object],default:""},srcset:String,transition:{type:[Boolean,String],default:"fade-transition"}},data:function(){return{currentSrc:"",image:null,isLoading:!0,calculatedAspectRatio:void 0,naturalWidth:void 0,hasError:!1}},computed:{computedAspectRatio:function(){return Number(this.normalisedSrc.aspect||this.calculatedAspectRatio)},normalisedSrc:function(){return this.src&&"object"===Object(p["a"])(this.src)?{src:this.src.src,srcset:this.srcset||this.src.srcset,lazySrc:this.lazySrc||this.src.lazySrc,aspect:Number(this.aspectRatio||this.src.aspect)}:{src:this.src,srcset:this.srcset,lazySrc:this.lazySrc,aspect:Number(this.aspectRatio||0)}},__cachedImage:function(){if(!(this.normalisedSrc.src||this.normalisedSrc.lazySrc||this.gradient))return[];var t=[],e=this.isLoading?this.normalisedSrc.lazySrc:this.currentSrc;this.gradient&&t.push("linear-gradient(".concat(this.gradient,")")),e&&t.push('url("'.concat(e,'")'));var i=this.$createElement("div",{staticClass:"v-image__image",class:{"v-image__image--preload":this.isLoading,"v-image__image--contain":this.contain,"v-image__image--cover":!this.contain},style:{backgroundImage:t.join(", "),backgroundPosition:this.position},key:+this.isLoading});return this.transition?this.$createElement("transition",{attrs:{name:this.transition,mode:"in-out"}},[i]):i}},watch:{src:function(){this.isLoading?this.loadImage():this.init(void 0,void 0,!0)},"$vuetify.breakpoint.width":"getSrc"},mounted:function(){this.init()},methods:{init:function(t,e,i){if(!ae||i||this.eager){if(this.normalisedSrc.lazySrc){var n=new Image;n.src=this.normalisedSrc.lazySrc,this.pollForSize(n,null)}this.normalisedSrc.src&&this.loadImage()}},onLoad:function(){this.getSrc(),this.isLoading=!1,this.$emit("load",this.src),this.image&&(this.normalisedSrc.src.endsWith(".svg")||this.normalisedSrc.src.startsWith("data:image/svg+xml"))&&(this.image.naturalHeight&&this.image.naturalWidth?(this.naturalWidth=this.image.naturalWidth,this.calculatedAspectRatio=this.image.naturalWidth/this.image.naturalHeight):this.calculatedAspectRatio=1)},onError:function(){this.hasError=!0,this.$emit("error",this.src)},getSrc:function(){this.image&&(this.currentSrc=this.image.currentSrc||this.image.src)},loadImage:function(){var t=this,e=new Image;this.image=e,e.onload=function(){e.decode?e.decode().catch((function(e){Object(S["c"])("Failed to decode image, trying to render anyway\n\n"+"src: ".concat(t.normalisedSrc.src)+(e.message?"\nOriginal error: ".concat(e.message):""),t)})).then(t.onLoad):t.onLoad()},e.onerror=this.onError,this.hasError=!1,this.sizes&&(e.sizes=this.sizes),this.normalisedSrc.srcset&&(e.srcset=this.normalisedSrc.srcset),e.src=this.normalisedSrc.src,this.$emit("loadstart",this.normalisedSrc.src),this.aspectRatio||this.pollForSize(e),this.getSrc()},pollForSize:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=function n(){var r=t.naturalHeight,a=t.naturalWidth;r||a?(e.naturalWidth=a,e.calculatedAspectRatio=a/r):t.complete||!e.isLoading||e.hasError||null==i||setTimeout(n,i)};n()},genContent:function(){var t=re.options.methods.genContent.call(this);return this.naturalWidth&&this._b(t.data,"div",{style:{width:"".concat(this.naturalWidth,"px")}}),t},__genPlaceholder:function(){if(this.$slots.placeholder){var t=this.isLoading?[this.$createElement("div",{staticClass:"v-image__placeholder"},this.$slots.placeholder)]:[];return this.transition?this.$createElement("transition",{props:{appear:!0,name:this.transition}},t):t[0]}}},render:function(t){var e=re.options.render.call(this,t),i=xt(e.data,{staticClass:"v-image",attrs:{"aria-label":this.alt,role:this.alt?"img":void 0},class:this.themeClasses,directives:ae?[{name:"intersect",modifiers:{once:!0},value:{handler:this.init,options:this.options}}]:void 0});return e.children=[this.__cachedSizer,this.__cachedImage,this.__genPlaceholder(),this.genContent()],t(e.tag,i,e.children)}}),oe=["sm","md","lg","xl"],ce=["start","end","center"];function le(t,e){return oe.reduce((function(i,n){return i[t+Object(O["o"])(n)]=e(),i}),{})}var ue=function(t){return[].concat(ce,["baseline","stretch"]).includes(t)},he=le("align",(function(){return{type:String,default:null,validator:ue}})),de=function(t){return[].concat(ce,["space-between","space-around"]).includes(t)},fe=le("justify",(function(){return{type:String,default:null,validator:de}})),pe=function(t){return[].concat(ce,["space-between","space-around","stretch"]).includes(t)},ve=le("alignContent",(function(){return{type:String,default:null,validator:pe}})),ge={align:Object.keys(he),justify:Object.keys(fe),alignContent:Object.keys(ve)},me={align:"align",justify:"justify",alignContent:"align-content"};function be(t,e,i){var n=me[t];if(null!=i){if(e){var r=e.replace(t,"");n+="-".concat(r)}return n+="-".concat(i),n.toLowerCase()}}var ye=new Map,_e=m["a"].extend({name:"v-row",functional:!0,props:Object(g["a"])(Object(g["a"])(Object(g["a"])({tag:{type:String,default:"div"},dense:Boolean,noGutters:Boolean,align:{type:String,default:null,validator:ue}},he),{},{justify:{type:String,default:null,validator:de}},fe),{},{alignContent:{type:String,default:null,validator:pe}},ve),render:function(t,e){var i=e.props,n=e.data,r=e.children,a="";for(var s in i)a+=String(i[s]);var o=ye.get(a);return o||function(){var t,e;for(e in o=[],ge)ge[e].forEach((function(t){var n=i[t],r=be(e,t,n);r&&o.push(r)}));o.push((t={"no-gutters":i.noGutters,"row--dense":i.dense},Object(_["a"])(t,"align-".concat(i.align),i.align),Object(_["a"])(t,"justify-".concat(i.justify),i.justify),Object(_["a"])(t,"align-content-".concat(i.alignContent),i.alignContent),t)),ye.set(a,o)}(),t(i.tag,xt(n,{staticClass:"row",class:o}),r)}}),Se=(i("0bc6"),Object(z["a"])(E["a"]).extend({name:"v-subheader",props:{inset:Boolean},render:function(t){return t("div",{staticClass:"v-subheader",class:Object(g["a"])({"v-subheader--inset":this.inset},this.themeClasses),attrs:this.$attrs,on:this.$listeners},this.$slots.default)}})),xe=Object(h["a"])(u,n,r,!1,null,"6003c7cf",null);e["default"]=xe.exports;f()(xe,{VBtn:yt,VCard:It,VCardActions:At,VCardText:Wt,VCol:Xt,VContainer:Qt,VIcon:ie,VImg:se,VProgressLinear:Rt,VRow:_e,VSubheader:Se})},c7cd:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("fixed")},{fixed:function(){return r(this,"tt","","")}})},c96a:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("small")},{small:function(){return r(this,"small","","")}})},f5f2:function(t){t.exports=JSON.parse('{"jak1":{"fileProgress":{"src_files_total":515,"src_files_finished":78,"src_files_started":175,"data_files_total":584,"data_files_started":4}}}')}}]); -//# sourceMappingURL=about.d184dbd9.js.map \ No newline at end of file +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["about"],{"0481":function(t,e,i){"use strict";var n=i("23e7"),r=i("a2bf"),a=i("7b0b"),s=i("50c4"),o=i("a691"),c=i("65f0");n({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=a(this),i=s(e.length),n=c(e,0);return n.length=r(n,e,e,i,0,void 0===t?1:o(t)),n}})},"0bc6":function(t,e,i){},"20f6":function(t,e,i){},"25a8":function(t,e,i){},"36a7":function(t,e,i){},4804:function(t,e,i){},"4b85":function(t,e,i){},"4ec9":function(t,e,i){"use strict";var n=i("6d61"),r=i("6566");t.exports=n("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),r)},"615b":function(t,e,i){},6566:function(t,e,i){"use strict";var n=i("9bf2").f,r=i("7c73"),a=i("e2cc"),s=i("0366"),o=i("19aa"),c=i("2266"),l=i("7dd0"),u=i("2626"),h=i("83ab"),d=i("f183").fastKey,f=i("69f3"),p=f.set,v=f.getterFor;t.exports={getConstructor:function(t,e,i,l){var u=t((function(t,n){o(t,u,e),p(t,{type:e,index:r(null),first:void 0,last:void 0,size:0}),h||(t.size=0),void 0!=n&&c(n,t[l],{that:t,AS_ENTRIES:i})})),f=v(e),g=function(t,e,i){var n,r,a=f(t),s=m(t,e);return s?s.value=i:(a.last=s={index:r=d(e,!0),key:e,value:i,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=s),n&&(n.next=s),h?a.size++:t.size++,"F"!==r&&(a.index[r]=s)),t},m=function(t,e){var i,n=f(t),r=d(e);if("F"!==r)return n.index[r];for(i=n.first;i;i=i.next)if(i.key==e)return i};return a(u.prototype,{clear:function(){var t=this,e=f(t),i=e.index,n=e.first;while(n)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete i[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:t.size=0},delete:function(t){var e=this,i=f(e),n=m(e,t);if(n){var r=n.next,a=n.previous;delete i.index[n.index],n.removed=!0,a&&(a.next=r),r&&(r.previous=a),i.first==n&&(i.first=r),i.last==n&&(i.last=a),h?i.size--:e.size--}return!!n},forEach:function(t){var e,i=f(this),n=s(t,arguments.length>1?arguments[1]:void 0,3);while(e=e?e.next:i.first){n(e.value,e.key,this);while(e&&e.removed)e=e.previous}},has:function(t){return!!m(this,t)}}),a(u.prototype,i?{get:function(t){var e=m(this,t);return e&&e.value},set:function(t,e){return g(this,0===t?0:t,e)}}:{add:function(t){return g(this,t=0===t?0:t,t)}}),h&&n(u.prototype,"size",{get:function(){return f(this).size}}),u},setStrong:function(t,e,i){var n=e+" Iterator",r=v(e),a=v(n);l(t,e,(function(t,e){p(this,{type:n,target:t,state:r(t),kind:e,last:void 0})}),(function(){var t=a(this),e=t.kind,i=t.last;while(i&&i.removed)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?"keys"==e?{value:i.key,done:!1}:"values"==e?{value:i.value,done:!1}:{value:[i.key,i.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})}),i?"entries":"values",!i,!0),u(e)}}},"6d61":function(t,e,i){"use strict";var n=i("23e7"),r=i("da84"),a=i("94ca"),s=i("6eeb"),o=i("f183"),c=i("2266"),l=i("19aa"),u=i("861d"),h=i("d039"),d=i("1c7e"),f=i("d44e"),p=i("7156");t.exports=function(t,e,i){var v=-1!==t.indexOf("Map"),g=-1!==t.indexOf("Weak"),m=v?"set":"add",b=r[t],y=b&&b.prototype,_=b,S={},x=function(t){var e=y[t];s(y,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!u(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(g&&!u(t))&&e.call(this,0===t?0:t)}:function(t,i){return e.call(this,0===t?0:t,i),this})},w=a(t,"function"!=typeof b||!(g||y.forEach&&!h((function(){(new b).entries().next()}))));if(w)_=i.getConstructor(e,t,v,m),o.enable();else if(a(t,!0)){var j=new _,O=j[m](g?{}:-0,1)!=j,k=h((function(){j.has(1)})),C=d((function(t){new b(t)})),L=!g&&h((function(){var t=new b,e=5;while(e--)t[m](e,e);return!t.has(-0)}));C||(_=e((function(e,i){l(e,_,t);var n=p(new b,e,_);return void 0!=i&&c(i,n[m],{that:n,AS_ENTRIES:v}),n})),_.prototype=y,y.constructor=_),(k||L)&&(x("delete"),x("has"),v&&x("get")),(L||O)&&x(m),g&&y.clear&&delete y.clear}return S[t]=_,n({global:!0,forced:_!=b},S),f(_,t),g||i.setStrong(_,t,v),_}},"6ece":function(t,e,i){},7435:function(t,e,i){},"7a34":function(t,e,i){},"86cc":function(t,e,i){},"87cf":function(t,e,i){t.exports=i.p+"img/logo-text-colored.5cda006b.png"},"8a79":function(t,e,i){"use strict";var n=i("23e7"),r=i("06cf").f,a=i("50c4"),s=i("577e"),o=i("5a34"),c=i("1d80"),l=i("ab13"),u=i("c430"),h="".endsWith,d=Math.min,f=l("endsWith"),p=!u&&!f&&!!function(){var t=r(String.prototype,"endsWith");return t&&!t.writable}();n({target:"String",proto:!0,forced:!p&&!f},{endsWith:function(t){var e=s(c(this));o(t);var i=arguments.length>1?arguments[1]:void 0,n=a(e.length),r=void 0===i?n:d(a(i),n),l=s(t);return h?h.call(e,l,r):e.slice(r-l.length,r)===l}})},"8d4f":function(t,e,i){},"8e4b":function(t,e,i){"use strict";i("7a34")},"8efc":function(t,e,i){},"96cf":function(t,e,i){var n=function(t){"use strict";var e,i=Object.prototype,n=i.hasOwnProperty,r="function"===typeof Symbol?Symbol:{},a=r.iterator||"@@iterator",s=r.asyncIterator||"@@asyncIterator",o=r.toStringTag||"@@toStringTag";function c(t,e,i){return Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch($){c=function(t,e,i){return t[e]=i}}function l(t,e,i,n){var r=e&&e.prototype instanceof g?e:g,a=Object.create(r.prototype),s=new B(n||[]);return a._invoke=O(t,i,s),a}function u(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch($){return{type:"throw",arg:$}}}t.wrap=l;var h="suspendedStart",d="suspendedYield",f="executing",p="completed",v={};function g(){}function m(){}function b(){}var y={};c(y,a,(function(){return this}));var _=Object.getPrototypeOf,S=_&&_(_(E([])));S&&S!==i&&n.call(S,a)&&(y=S);var x=b.prototype=g.prototype=Object.create(y);function w(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function j(t,e){function i(r,a,s,o){var c=u(t[r],t,a);if("throw"!==c.type){var l=c.arg,h=l.value;return h&&"object"===typeof h&&n.call(h,"__await")?e.resolve(h.__await).then((function(t){i("next",t,s,o)}),(function(t){i("throw",t,s,o)})):e.resolve(h).then((function(t){l.value=t,s(l)}),(function(t){return i("throw",t,s,o)}))}o(c.arg)}var r;function a(t,n){function a(){return new e((function(e,r){i(t,n,e,r)}))}return r=r?r.then(a,a):a()}this._invoke=a}function O(t,e,i){var n=h;return function(r,a){if(n===f)throw new Error("Generator is already running");if(n===p){if("throw"===r)throw a;return z()}i.method=r,i.arg=a;while(1){var s=i.delegate;if(s){var o=k(s,i);if(o){if(o===v)continue;return o}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(n===h)throw n=p,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n=f;var c=u(t,e,i);if("normal"===c.type){if(n=i.done?p:d,c.arg===v)continue;return{value:c.arg,done:i.done}}"throw"===c.type&&(n=p,i.method="throw",i.arg=c.arg)}}}function k(t,i){var n=t.iterator[i.method];if(n===e){if(i.delegate=null,"throw"===i.method){if(t.iterator["return"]&&(i.method="return",i.arg=e,k(t,i),"throw"===i.method))return v;i.method="throw",i.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var r=u(n,t.iterator,i.arg);if("throw"===r.type)return i.method="throw",i.arg=r.arg,i.delegate=null,v;var a=r.arg;return a?a.done?(i[t.resultName]=a.value,i.next=t.nextLoc,"return"!==i.method&&(i.method="next",i.arg=e),i.delegate=null,v):a:(i.method="throw",i.arg=new TypeError("iterator result is not an object"),i.delegate=null,v)}function C(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function L(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function B(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(C,this),this.reset(!0)}function E(t){if(t){var i=t[a];if(i)return i.call(t);if("function"===typeof t.next)return t;if(!isNaN(t.length)){var r=-1,s=function i(){while(++r=0;--a){var s=this.tryEntries[a],o=s.completion;if("root"===s.tryLoc)return r("end");if(s.tryLoc<=this.prev){var c=n.call(s,"catchLoc"),l=n.call(s,"finallyLoc");if(c&&l){if(this.prev=0;--i){var r=this.tryEntries[i];if(r.tryLoc<=this.prev&&n.call(r,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),L(i),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if("throw"===n.type){var r=n.arg;L(i)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(t,i,n){return this.delegate={iterator:E(t),resultName:i,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}(t.exports);try{regeneratorRuntime=n}catch(r){"object"===typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},9911:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("link")},{link:function(t){return r(this,"a","href",t)}})},a2bf:function(t,e,i){"use strict";var n=i("e8b5"),r=i("50c4"),a=i("0366"),s=function(t,e,i,o,c,l,u,h){var d,f=c,p=0,v=!!u&&a(u,h,3);while(p0&&n(d))f=s(t,e,d,r(d.length),f,l-1)-1;else{if(f>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[f]=d}f++}p++}return f};t.exports=s},bb51:function(t,e,i){"use strict";i.r(e);var n=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("v-container",{attrs:{fluid:""}},[n("v-row",{staticClass:"bg-img",attrs:{justify:"center",align:"center"}},[n("v-col",{attrs:{cols:"12",align:"center"}},[n("v-img",{attrs:{"max-height":"150","max-width":"250",src:i("87cf")}}),n("br"),n("h4",[t._v(" Reviving the Language that Brought us the Jak & Daxter Series ")]),n("br"),n("v-row",{attrs:{justify:"center"}},[n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"#project-status",rounded:"",color:"primary"}},[n("v-icon",[t._v("mdi-calendar-check")]),t._v(" Project Status ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{rounded:"",color:"secondary",href:"#recent-updates"}},[n("v-icon",[t._v("mdi-update")]),t._v(" Recent Updates ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"/jak-project/api-docs.html",target:"_blank",rounded:"",color:"deep-purple"}},[n("v-icon",[t._v("mdi-file-document")]),t._v(" Documentation ")],1)],1),n("v-col",{attrs:{cols:"auto"}},[n("v-btn",{attrs:{href:"https://github.com/water111/jak-project",target:"_blank",rounded:"",color:"accent"}},[n("v-icon",[t._v("mdi-git")]),t._v(" Contribute ")],1)],1)],1)],1)],1),n("v-row",[n("v-container",[n("v-row",{staticStyle:{"margin-top":"3em"},attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"project-status"}},[t._v(" Project Status ")])])],1),n("v-row",{attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h2",{staticClass:"orange--text text--lighten-3"},[t._v("Jak 1 - Black Label")])])],1),n("v-row",{attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{cols:"10"}},[n("v-subheader",[t._v("Decompilation")]),n("v-progress-linear",{attrs:{color:"green","buffer-value":"0",value:t.jak1BlackLabelStatus.srcFilesFinishedValue,stream:"",height:"25"}},[t._v(" Source Files Finished - "+t._s(t.jak1BlackLabelStatus.srcFilesFinished)+" / "+t._s(t.jak1BlackLabelStatus.srcFilesTotal)+" ")]),n("br"),n("v-progress-linear",{attrs:{color:"yellow","buffer-value":"0",value:t.jak1BlackLabelStatus.srcFilesStartedValue,stream:"",height:"25"}},[t._v(" Source Files Started - "+t._s(t.jak1BlackLabelStatus.srcFilesStarted)+" / "+t._s(t.jak1BlackLabelStatus.srcFilesTotal)+" ")]),n("br"),n("v-progress-linear",{attrs:{color:"teal","buffer-value":"0",value:t.jak1BlackLabelStatus.dataFilesStartedValue,stream:"",height:"25"}},[t._v(" Data Files Started - "+t._s(t.jak1BlackLabelStatus.dataFilesStarted)+" / "+t._s(t.jak1BlackLabelStatus.dataFilesTotal)+" ")])],1)],1),n("v-row",{staticStyle:{"margin-top":"5em"},attrs:{align:"center",justify:"center"}},[n("v-col",{attrs:{align:"center"}},[n("h1",{staticClass:"orange--text text--darken-1",attrs:{id:"recent-updates"}},[t._v(" Recent Updates ")])])],1),n("v-row",{staticStyle:{"margin-bottom":"10em"},attrs:{justify:"center"}},t._l(t.recentPRs,(function(e,i){return n("v-col",{key:"pr"-i,attrs:{cols:"4"}},[n("v-card",[n("v-card-text",{staticStyle:{"overflow-y":"auto",height:"300px"}},[n("p",{staticClass:"text-h5 orange--text text--lighten-3"},[t._v(" "+t._s(e.title)+" ")]),n("p",[t._v(" "+t._s(e.user.login)+" ")]),n("div",{staticClass:"text--primary"},[n("pre",{staticClass:"wrapped-pre"},[t._v(t._s(e.body))])])]),n("v-card-actions",[n("v-btn",{attrs:{text:"",color:"accent",href:e.html_url,target:"_blank"}},[t._v(" View Change ")])],1)],1)],1)})),1)],1)],1)],1)},r=[];i("d3b7");function a(t,e,i,n,r,a,s){try{var o=t[a](s),c=o.value}catch(l){return void i(l)}o.done?e(c):Promise.resolve(c).then(n,r)}function s(t){return function(){var e=this,i=arguments;return new Promise((function(n,r){var s=t.apply(e,i);function o(t){a(s,n,r,o,c,"next",t)}function c(t){a(s,n,r,o,c,"throw",t)}o(void 0)}))}}i("fb6a"),i("96cf");var o=i("f5f2"),c=o,l={name:"Home",components:{},data:function(){return{recentPRs:[],jak1BlackLabelStatus:{srcFilesTotal:c.jak1.fileProgress.src_files_total,srcFilesFinished:c.jak1.fileProgress.src_files_finished,srcFilesFinishedValue:c.jak1.fileProgress.src_files_finished/c.jak1.fileProgress.src_files_total*100,srcFilesStarted:c.jak1.fileProgress.src_files_started,srcFilesStartedValue:c.jak1.fileProgress.src_files_started/c.jak1.fileProgress.src_files_total*100,dataFilesTotal:c.jak1.fileProgress.data_files_total,dataFilesStarted:c.jak1.fileProgress.data_files_started,dataFilesStartedValue:c.jak1.fileProgress.data_files_started/c.jak1.fileProgress.data_files_total*100}}},mounted:function(){var t=s(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,this.loadRecentPRs();case 2:case"end":return t.stop()}}),t,this)})));function e(){return t.apply(this,arguments)}return e}(),methods:{truncateString:function(t,e){return t.length<=e?t:t.slice(0,e)+"..."},loadRecentPRs:function(){var t=s(regeneratorRuntime.mark((function t(){var e,i,n,r,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,fetch("https://api.github.com/search/issues?q=repo:water111/jak-project+is:pr+is:merged&sort=updated");case 2:return e=t.sent,t.next=5,e.json();case 5:for(i=t.sent,n=9,r=0;r1&&void 0!==arguments[1]?arguments[1]:{};return"string"===typeof e.style?(Object(S["b"])("style must be an object",this),e):"string"===typeof e.class?(Object(S["b"])("class must be an object",this),e):(Object(x["d"])(t)?e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{"background-color":"".concat(t),"border-color":"".concat(t)}):t&&(e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(_["a"])({},t,!0))),e)},setTextColor:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"===typeof e.style)return Object(S["b"])("style must be an object",this),e;if("string"===typeof e.class)return Object(S["b"])("class must be an object",this),e;if(Object(x["d"])(t))e.style=Object(g["a"])(Object(g["a"])({},e.style),{},{color:"".concat(t),"caret-color":"".concat(t)});else if(t){var i=t.toString().trim().split(" ",2),n=Object(v["a"])(i,2),r=n[0],a=n[1];e.class=Object(g["a"])(Object(g["a"])({},e.class),{},Object(_["a"])({},r+"--text",!0)),a&&(e.class["text--"+a]=!0)}return e}}}),j=m["a"].extend({name:"elevatable",props:{elevation:[Number,String]},computed:{computedElevation:function(){return this.elevation},elevationClasses:function(){var t=this.computedElevation;return null==t||isNaN(parseInt(t))?{}:Object(_["a"])({},"elevation-".concat(this.elevation),!0)}}}),O=i("80d2"),k=m["a"].extend({name:"measurable",props:{height:[Number,String],maxHeight:[Number,String],maxWidth:[Number,String],minHeight:[Number,String],minWidth:[Number,String],width:[Number,String]},computed:{measurableStyles:function(){var t={},e=Object(O["d"])(this.height),i=Object(O["d"])(this.minHeight),n=Object(O["d"])(this.minWidth),r=Object(O["d"])(this.maxHeight),a=Object(O["d"])(this.maxWidth),s=Object(O["d"])(this.width);return e&&(t.height=e),i&&(t.minHeight=i),n&&(t.minWidth=n),r&&(t.maxHeight=r),a&&(t.maxWidth=a),s&&(t.width=s),t}}}),C=(i("a4d3"),i("e01a"),i("d28b"),i("3ca3"),i("ddb0"),i("06c5"));function L(t,e){var i="undefined"!==typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!i){if(Array.isArray(t)||(i=Object(C["a"])(t))||e&&t&&"number"===typeof t.length){i&&(t=i);var n=0,r=function(){};return{s:r,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,o=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){o=!0,a=t},f:function(){try{s||null==i["return"]||i["return"]()}finally{if(o)throw a}}}}i("a15b");var B=m["a"].extend({name:"roundable",props:{rounded:[Boolean,String],tile:Boolean},computed:{roundedClasses:function(){var t=[],e="string"===typeof this.rounded?String(this.rounded):!0===this.rounded;if(this.tile)t.push("rounded-0");else if("string"===typeof e){var i,n=e.split(" "),r=L(n);try{for(r.s();!(i=r.n()).done;){var a=i.value;t.push("rounded-".concat(a))}}catch(s){r.e(s)}finally{r.f()}}else e&&t.push("rounded");return t.length>0?Object(_["a"])({},t.join(" "),!0):{}}}}),E=i("7560"),z=i("58df"),$=Object(z["a"])(y,w,j,k,B,E["a"]).extend({name:"v-sheet",props:{outlined:Boolean,shaped:Boolean,tag:{type:String,default:"div"}},computed:{classes:function(){return Object(g["a"])(Object(g["a"])(Object(g["a"])({"v-sheet":!0,"v-sheet--outlined":this.outlined,"v-sheet--shaped":this.shaped},this.themeClasses),this.elevationClasses),this.roundedClasses)},styles:function(){return this.measurableStyles}},render:function(t){var e={class:this.classes,style:this.styles,on:this.listeners$};return t(this.tag,this.setBackgroundColor(this.color,e),this.$slots.default)}}),T=$;i("99af"),i("8d4f");function P(t,e){if("undefined"!==typeof window&&"IntersectionObserver"in window){var i=e.modifiers||{},n=e.value,r="object"===Object(p["a"])(n)?n:{handler:n,options:{}},a=r.handler,s=r.options,o=new IntersectionObserver((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0;if(t._observe){var r=e.some((function(t){return t.isIntersecting}));!a||i.quiet&&!t._observe.init||i.once&&!r&&t._observe.init||a(e,n,r),r&&i.once?N(t):t._observe.init=!0}}),s);t._observe={init:!1,observer:o},o.observe(t)}}function N(t){t._observe&&(t._observe.observer.unobserve(t),delete t._observe)}var R={inserted:P,unbind:N},F=R,V=w.extend({name:"v-progress-circular",directives:{intersect:F},props:{button:Boolean,indeterminate:Boolean,rotate:{type:[Number,String],default:0},size:{type:[Number,String],default:32},width:{type:[Number,String],default:4},value:{type:[Number,String],default:0}},data:function(){return{radius:20,isVisible:!0}},computed:{calculatedSize:function(){return Number(this.size)+(this.button?8:0)},circumference:function(){return 2*Math.PI*this.radius},classes:function(){return{"v-progress-circular--visible":this.isVisible,"v-progress-circular--indeterminate":this.indeterminate,"v-progress-circular--button":this.button}},normalizedValue:function(){return this.value<0?0:this.value>100?100:parseFloat(this.value)},strokeDashArray:function(){return Math.round(1e3*this.circumference)/1e3},strokeDashOffset:function(){return(100-this.normalizedValue)/100*this.circumference+"px"},strokeWidth:function(){return Number(this.width)/+this.size*this.viewBoxSize*2},styles:function(){return{height:Object(O["d"])(this.calculatedSize),width:Object(O["d"])(this.calculatedSize)}},svgStyles:function(){return{transform:"rotate(".concat(Number(this.rotate),"deg)")}},viewBoxSize:function(){return this.radius/(1-Number(this.width)/+this.size)}},methods:{genCircle:function(t,e){return this.$createElement("circle",{class:"v-progress-circular__".concat(t),attrs:{fill:"transparent",cx:2*this.viewBoxSize,cy:2*this.viewBoxSize,r:this.radius,"stroke-width":this.strokeWidth,"stroke-dasharray":this.strokeDashArray,"stroke-dashoffset":e}})},genSvg:function(){var t=[this.indeterminate||this.genCircle("underlay",0),this.genCircle("overlay",this.strokeDashOffset)];return this.$createElement("svg",{style:this.svgStyles,attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"".concat(this.viewBoxSize," ").concat(this.viewBoxSize," ").concat(2*this.viewBoxSize," ").concat(2*this.viewBoxSize)}},t)},genInfo:function(){return this.$createElement("div",{staticClass:"v-progress-circular__info"},this.$slots.default)},onObserve:function(t,e,i){this.isVisible=i}},render:function(t){return t("div",this.setTextColor(this.color,{staticClass:"v-progress-circular",attrs:{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.indeterminate?void 0:this.normalizedValue},class:this.classes,directives:[{name:"intersect",value:this.onObserve}],style:this.styles,on:this.$listeners}),[this.genSvg(),this.genInfo()])}}),I=V;function A(t,e){return function(){return Object(S["c"])("The ".concat(t," component must be used inside a ").concat(e))}}function W(t,e,i){var n=e&&i?{register:A(e,i),unregister:A(e,i)}:null;return m["a"].extend({name:"registrable-inject",inject:Object(_["a"])({},t,{default:n})})}function D(t,e,i){return W(t,e,i).extend({name:"groupable",props:{activeClass:{type:String,default:function(){if(this[t])return this[t].activeClass}},disabled:Boolean},data:function(){return{isActive:!1}},computed:{groupClasses:function(){return this.activeClass?Object(_["a"])({},this.activeClass,this.isActive):{}}},created:function(){this[t]&&this[t].register(this)},beforeDestroy:function(){this[t]&&this[t].unregister(this)},methods:{toggle:function(){this.$emit("change")}}})}D("itemGroup");function H(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"input";return m["a"].extend({name:"toggleable",model:{prop:e,event:i},props:Object(_["a"])({},e,{required:!1}),data:function(){return{isActive:!!this[e]}},watch:(t={},Object(_["a"])(t,e,(function(t){this.isActive=!!t})),Object(_["a"])(t,"isActive",(function(t){!!t!==this[e]&&this.$emit(i,t)})),t)})}H();var M={absolute:Boolean,bottom:Boolean,fixed:Boolean,left:Boolean,right:Boolean,top:Boolean};function q(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return m["a"].extend({name:"positionable",props:t.length?Object(O["f"])(M,t):M})}var G=q(),J=(i("9911"),i("5319"),i("b0c0"),i("7435"),Symbol("rippleStop")),Y=80;function X(t,e){t.style.transform=e,t.style.webkitTransform=e}function K(t,e){t.style.opacity=e.toString()}function U(t){return"TouchEvent"===t.constructor.name}function Q(t){return"KeyboardEvent"===t.constructor.name}var Z=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=0,r=0;if(!Q(t)){var a=e.getBoundingClientRect(),s=U(t)?t.touches[t.touches.length-1]:t;n=s.clientX-a.left,r=s.clientY-a.top}var o=0,c=.3;e._ripple&&e._ripple.circle?(c=.15,o=e.clientWidth/2,o=i.center?o:o+Math.sqrt(Math.pow(n-o,2)+Math.pow(r-o,2))/4):o=Math.sqrt(Math.pow(e.clientWidth,2)+Math.pow(e.clientHeight,2))/2;var l="".concat((e.clientWidth-2*o)/2,"px"),u="".concat((e.clientHeight-2*o)/2,"px"),h=i.center?l:"".concat(n-o,"px"),d=i.center?u:"".concat(r-o,"px");return{radius:o,scale:c,x:h,y:d,centerX:l,centerY:u}},tt={show:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e._ripple&&e._ripple.enabled){var n=document.createElement("span"),r=document.createElement("span");n.appendChild(r),n.className="v-ripple__container",i.class&&(n.className+=" ".concat(i.class));var a=Z(t,e,i),s=a.radius,o=a.scale,c=a.x,l=a.y,u=a.centerX,h=a.centerY,d="".concat(2*s,"px");r.className="v-ripple__animation",r.style.width=d,r.style.height=d,e.appendChild(n);var f=window.getComputedStyle(e);f&&"static"===f.position&&(e.style.position="relative",e.dataset.previousPosition="static"),r.classList.add("v-ripple__animation--enter"),r.classList.add("v-ripple__animation--visible"),X(r,"translate(".concat(c,", ").concat(l,") scale3d(").concat(o,",").concat(o,",").concat(o,")")),K(r,0),r.dataset.activated=String(performance.now()),setTimeout((function(){r.classList.remove("v-ripple__animation--enter"),r.classList.add("v-ripple__animation--in"),X(r,"translate(".concat(u,", ").concat(h,") scale3d(1,1,1)")),K(r,.25)}),0)}},hide:function(t){if(t&&t._ripple&&t._ripple.enabled){var e=t.getElementsByClassName("v-ripple__animation");if(0!==e.length){var i=e[e.length-1];if(!i.dataset.isHiding){i.dataset.isHiding="true";var n=performance.now()-Number(i.dataset.activated),r=Math.max(250-n,0);setTimeout((function(){i.classList.remove("v-ripple__animation--in"),i.classList.add("v-ripple__animation--out"),K(i,0),setTimeout((function(){var e=t.getElementsByClassName("v-ripple__animation");1===e.length&&t.dataset.previousPosition&&(t.style.position=t.dataset.previousPosition,delete t.dataset.previousPosition),i.parentNode&&t.removeChild(i.parentNode)}),300)}),r)}}}}};function et(t){return"undefined"===typeof t||!!t}function it(t){var e={},i=t.currentTarget;if(i&&i._ripple&&!i._ripple.touched&&!t[J]){if(t[J]=!0,U(t))i._ripple.touched=!0,i._ripple.isTouch=!0;else if(i._ripple.isTouch)return;if(e.center=i._ripple.centered||Q(t),i._ripple.class&&(e.class=i._ripple.class),U(t)){if(i._ripple.showTimerCommit)return;i._ripple.showTimerCommit=function(){tt.show(t,i,e)},i._ripple.showTimer=window.setTimeout((function(){i&&i._ripple&&i._ripple.showTimerCommit&&(i._ripple.showTimerCommit(),i._ripple.showTimerCommit=null)}),Y)}else tt.show(t,i,e)}}function nt(t){var e=t.currentTarget;if(e&&e._ripple){if(window.clearTimeout(e._ripple.showTimer),"touchend"===t.type&&e._ripple.showTimerCommit)return e._ripple.showTimerCommit(),e._ripple.showTimerCommit=null,void(e._ripple.showTimer=setTimeout((function(){nt(t)})));window.setTimeout((function(){e._ripple&&(e._ripple.touched=!1)})),tt.hide(e)}}function rt(t){var e=t.currentTarget;e&&e._ripple&&(e._ripple.showTimerCommit&&(e._ripple.showTimerCommit=null),window.clearTimeout(e._ripple.showTimer))}var at=!1;function st(t){at||t.keyCode!==O["j"].enter&&t.keyCode!==O["j"].space||(at=!0,it(t))}function ot(t){at=!1,nt(t)}function ct(t){!0===at&&(at=!1,nt(t))}function lt(t,e,i){var n=et(e.value);n||tt.hide(t),t._ripple=t._ripple||{},t._ripple.enabled=n;var r=e.value||{};r.center&&(t._ripple.centered=!0),r.class&&(t._ripple.class=e.value.class),r.circle&&(t._ripple.circle=r.circle),n&&!i?(t.addEventListener("touchstart",it,{passive:!0}),t.addEventListener("touchend",nt,{passive:!0}),t.addEventListener("touchmove",rt,{passive:!0}),t.addEventListener("touchcancel",nt),t.addEventListener("mousedown",it),t.addEventListener("mouseup",nt),t.addEventListener("mouseleave",nt),t.addEventListener("keydown",st),t.addEventListener("keyup",ot),t.addEventListener("blur",ct),t.addEventListener("dragstart",nt,{passive:!0})):!n&&i&&ut(t)}function ut(t){t.removeEventListener("mousedown",it),t.removeEventListener("touchstart",it),t.removeEventListener("touchend",nt),t.removeEventListener("touchmove",rt),t.removeEventListener("touchcancel",nt),t.removeEventListener("mouseup",nt),t.removeEventListener("mouseleave",nt),t.removeEventListener("keydown",st),t.removeEventListener("keyup",ot),t.removeEventListener("dragstart",nt),t.removeEventListener("blur",ct)}function ht(t,e,i){lt(t,e,!1)}function dt(t){delete t._ripple,ut(t)}function ft(t,e){if(e.value!==e.oldValue){var i=et(e.oldValue);lt(t,e,i)}}var pt={bind:ht,unbind:dt,update:ft},vt=pt,gt=m["a"].extend({name:"routable",directives:{Ripple:vt},props:{activeClass:String,append:Boolean,disabled:Boolean,exact:{type:Boolean,default:void 0},exactPath:Boolean,exactActiveClass:String,link:Boolean,href:[String,Object],to:[String,Object],nuxt:Boolean,replace:Boolean,ripple:{type:[Boolean,Object],default:null},tag:String,target:String},data:function(){return{isActive:!1,proxyClass:""}},computed:{classes:function(){var t={};return this.to||(this.activeClass&&(t[this.activeClass]=this.isActive),this.proxyClass&&(t[this.proxyClass]=this.isActive)),t},computedRipple:function(){var t;return null!=(t=this.ripple)?t:!this.disabled&&this.isClickable},isClickable:function(){return!this.disabled&&Boolean(this.isLink||this.$listeners.click||this.$listeners["!click"]||this.$attrs.tabindex)},isLink:function(){return this.to||this.href||this.link},styles:function(){return{}}},watch:{$route:"onRouteChange"},methods:{click:function(t){this.$emit("click",t)},generateRouteLink:function(){var t,e,i=this.exact,n=(t={attrs:{tabindex:"tabindex"in this.$attrs?this.$attrs.tabindex:void 0},class:this.classes,style:this.styles,props:{},directives:[{name:"ripple",value:this.computedRipple}]},Object(_["a"])(t,this.to?"nativeOn":"on",Object(g["a"])(Object(g["a"])({},this.$listeners),{},{click:this.click})),Object(_["a"])(t,"ref","link"),t);if("undefined"===typeof this.exact&&(i="/"===this.to||this.to===Object(this.to)&&"/"===this.to.path),this.to){var r=this.activeClass,a=this.exactActiveClass||r;this.proxyClass&&(r="".concat(r," ").concat(this.proxyClass).trim(),a="".concat(a," ").concat(this.proxyClass).trim()),e=this.nuxt?"nuxt-link":"router-link",Object.assign(n.props,{to:this.to,exact:i,exactPath:this.exactPath,activeClass:r,exactActiveClass:a,append:this.append,replace:this.replace})}else e=(this.href?"a":this.tag)||"div","a"===e&&this.href&&(n.attrs.href=this.href);return this.target&&(n.attrs.target=this.target),{tag:e,data:n}},onRouteChange:function(){var t=this;if(this.to&&this.$refs.link&&this.$route){var e="".concat(this.activeClass," ").concat(this.proxyClass||"").trim(),i="_vnode.data.class.".concat(e);this.$nextTick((function(){Object(O["h"])(t.$refs.link,i)&&t.toggle()}))}},toggle:function(){}}}),mt=(i("c96a"),m["a"].extend({name:"sizeable",props:{large:Boolean,small:Boolean,xLarge:Boolean,xSmall:Boolean},computed:{medium:function(){return Boolean(!this.xSmall&&!this.small&&!this.large&&!this.xLarge)},sizeableClasses:function(){return{"v-size--x-small":this.xSmall,"v-size--small":this.small,"v-size--default":this.medium,"v-size--large":this.large,"v-size--x-large":this.xLarge}}}})),bt=Object(z["a"])(T,gt,G,mt,D("btnToggle"),H("inputValue")),yt=bt.extend().extend({name:"v-btn",props:{activeClass:{type:String,default:function(){return this.btnToggle?this.btnToggle.activeClass:""}},block:Boolean,depressed:Boolean,fab:Boolean,icon:Boolean,loading:Boolean,outlined:Boolean,plain:Boolean,retainFocusOnClick:Boolean,rounded:Boolean,tag:{type:String,default:"button"},text:Boolean,tile:Boolean,type:{type:String,default:"button"},value:null},data:function(){return{proxyClass:"v-btn--active"}},computed:{classes:function(){return Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])({"v-btn":!0},gt.options.computed.classes.call(this)),{},{"v-btn--absolute":this.absolute,"v-btn--block":this.block,"v-btn--bottom":this.bottom,"v-btn--disabled":this.disabled,"v-btn--is-elevated":this.isElevated,"v-btn--fab":this.fab,"v-btn--fixed":this.fixed,"v-btn--has-bg":this.hasBg,"v-btn--icon":this.icon,"v-btn--left":this.left,"v-btn--loading":this.loading,"v-btn--outlined":this.outlined,"v-btn--plain":this.plain,"v-btn--right":this.right,"v-btn--round":this.isRound,"v-btn--rounded":this.rounded,"v-btn--router":this.to,"v-btn--text":this.text,"v-btn--tile":this.tile,"v-btn--top":this.top},this.themeClasses),this.groupClasses),this.elevationClasses),this.sizeableClasses)},computedElevation:function(){if(!this.disabled)return j.options.computed.computedElevation.call(this)},computedRipple:function(){var t,e=!this.icon&&!this.fab||{circle:!0};return!this.disabled&&(null!=(t=this.ripple)?t:e)},hasBg:function(){return!this.text&&!this.plain&&!this.outlined&&!this.icon},isElevated:function(){return Boolean(!this.icon&&!this.text&&!this.outlined&&!this.depressed&&!this.disabled&&!this.plain&&(null==this.elevation||Number(this.elevation)>0))},isRound:function(){return Boolean(this.icon||this.fab)},styles:function(){return Object(g["a"])({},this.measurableStyles)}},created:function(){var t=this,e=[["flat","text"],["outline","outlined"],["round","rounded"]];e.forEach((function(e){var i=Object(v["a"])(e,2),n=i[0],r=i[1];t.$attrs.hasOwnProperty(n)&&Object(S["a"])(n,r,t)}))},methods:{click:function(t){!this.retainFocusOnClick&&!this.fab&&t.detail&&this.$el.blur(),this.$emit("click",t),this.btnToggle&&this.toggle()},genContent:function(){return this.$createElement("span",{staticClass:"v-btn__content"},this.$slots.default)},genLoader:function(){return this.$createElement("span",{class:"v-btn__loader"},this.$slots.loader||[this.$createElement(I,{props:{indeterminate:!0,size:23,width:2}})])}},render:function(t){var e=[this.genContent(),this.loading&&this.genLoader()],i=this.generateRouteLink(),n=i.tag,r=i.data,a=this.hasBg?this.setBackgroundColor:this.setTextColor;return"button"===n&&(r.attrs.type=this.type,r.attrs.disabled=this.disabled),r.attrs.value=["string","number"].includes(Object(p["a"])(this.value))?this.value:JSON.stringify(this.value),t(n,this.disabled?r:a(this.color,r),e)}}),_t=(i("0481"),i("615b"),i("6ece"),i("b64b"),{styleList:/;(?![^(]*\))/g,styleProp:/:(.*)/});function St(t){var e,i={},n=L(t.split(_t.styleList));try{for(n.s();!(e=n.n()).done;){var r=e.value,a=r.split(_t.styleProp),s=Object(v["a"])(a,2),o=s[0],c=s[1];o=o.trim(),o&&("string"===typeof c&&(c=c.trim()),i[Object(O["a"])(o)]=c)}}catch(l){n.e(l)}finally{n.f()}return i}function xt(){var t,e={},i=arguments.length;while(i--)for(var n=0,r=Object.keys(arguments[i]);n0&&void 0!==arguments[0]?arguments[0]:[],i=arguments.length,n=new Array(i>1?i-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:"top center 0",i=arguments.length>2?arguments[2]:void 0;return{name:t,functional:!0,props:{group:{type:Boolean,default:!1},hideOnLeave:{type:Boolean,default:!1},leaveAbsolute:{type:Boolean,default:!1},mode:{type:String,default:i},origin:{type:String,default:e}},render:function(e,i){var n="transition".concat(i.props.group?"-group":""),r={props:{name:t,mode:i.props.mode},on:{beforeEnter:function(t){t.style.transformOrigin=i.props.origin,t.style.webkitTransformOrigin=i.props.origin}}};return i.props.leaveAbsolute&&(r.on.leave=kt(r.on.leave,(function(t){var e=t.offsetTop,i=t.offsetLeft,n=t.offsetWidth,r=t.offsetHeight;t._transitionInitialStyles={position:t.style.position,top:t.style.top,left:t.style.left,width:t.style.width,height:t.style.height},t.style.position="absolute",t.style.top=e+"px",t.style.left=i+"px",t.style.width=n+"px",t.style.height=r+"px"})),r.on.afterLeave=kt(r.on.afterLeave,(function(t){if(t&&t._transitionInitialStyles){var e=t._transitionInitialStyles,i=e.position,n=e.top,r=e.left,a=e.width,s=e.height;delete t._transitionInitialStyles,t.style.position=i||"",t.style.top=n||"",t.style.left=r||"",t.style.width=a||"",t.style.height=s||""}}))),i.props.hideOnLeave&&(r.on.leave=kt(r.on.leave,(function(t){t._initialDisplay=t.style.display,t.style.display="none"})),r.on.afterLeave=kt(r.on.afterLeave,(function(t){t&&(t.style.display=t._initialDisplay||"")}))),e(n,xt(i.data,r),i.children)}}}function Lt(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"in-out";return{name:t,functional:!0,props:{mode:{type:String,default:i}},render:function(i,n){return i("transition",xt(n.data,{props:{name:t},on:e}),n.children)}}}var Bt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=e?"width":"height",n="offset".concat(Object(O["o"])(i));return{beforeEnter:function(t){t._parent=t.parentNode,t._initialStyle=Object(_["a"])({transition:t.style.transition,overflow:t.style.overflow},i,t.style[i])},enter:function(e){var r=e._initialStyle;e.style.setProperty("transition","none","important"),e.style.overflow="hidden";var a="".concat(e[n],"px");e.style[i]="0",e.offsetHeight,e.style.transition=r.transition,t&&e._parent&&e._parent.classList.add(t),requestAnimationFrame((function(){e.style[i]=a}))},afterEnter:a,enterCancelled:a,leave:function(t){t._initialStyle=Object(_["a"])({transition:"",overflow:t.style.overflow},i,t.style[i]),t.style.overflow="hidden",t.style[i]="".concat(t[n],"px"),t.offsetHeight,requestAnimationFrame((function(){return t.style[i]="0"}))},afterLeave:r,leaveCancelled:r};function r(e){t&&e._parent&&e._parent.classList.remove(t),a(e)}function a(t){var e=t._initialStyle[i];t.style.overflow=t._initialStyle.overflow,null!=e&&(t.style[i]=e),delete t._initialStyle}},Et=(Ct("carousel-transition"),Ct("carousel-reverse-transition"),Ct("tab-transition"),Ct("tab-reverse-transition"),Ct("menu-transition"),Ct("fab-transition","center center","out-in"),Ct("dialog-transition"),Ct("dialog-bottom-transition"),Ct("dialog-top-transition"),Ct("fade-transition")),zt=(Ct("scale-transition"),Ct("scroll-x-transition"),Ct("scroll-x-reverse-transition"),Ct("scroll-y-transition"),Ct("scroll-y-reverse-transition"),Ct("slide-x-transition"));Ct("slide-x-reverse-transition"),Ct("slide-y-transition"),Ct("slide-y-reverse-transition"),Lt("expand-transition",Bt()),Lt("expand-x-transition",Bt("",!0));function $t(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"value",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"change";return m["a"].extend({name:"proxyable",model:{prop:t,event:e},props:Object(_["a"])({},t,{required:!1}),data:function(){return{internalLazyValue:this[t]}},computed:{internalValue:{get:function(){return this.internalLazyValue},set:function(t){t!==this.internalLazyValue&&(this.internalLazyValue=t,this.$emit(e,t))}}},watch:Object(_["a"])({},t,(function(t){this.internalLazyValue=t}))})}var Tt=$t(),Pt=Tt,Nt=Object(z["a"])(w,q(["absolute","fixed","top","bottom"]),Pt,E["a"]),Rt=Nt.extend({name:"v-progress-linear",directives:{intersect:F},props:{active:{type:Boolean,default:!0},backgroundColor:{type:String,default:null},backgroundOpacity:{type:[Number,String],default:null},bufferValue:{type:[Number,String],default:100},color:{type:String,default:"primary"},height:{type:[Number,String],default:4},indeterminate:Boolean,query:Boolean,reverse:Boolean,rounded:Boolean,stream:Boolean,striped:Boolean,value:{type:[Number,String],default:0}},data:function(){return{internalLazyValue:this.value||0,isVisible:!0}},computed:{__cachedBackground:function(){return this.$createElement("div",this.setBackgroundColor(this.backgroundColor||this.color,{staticClass:"v-progress-linear__background",style:this.backgroundStyle}))},__cachedBar:function(){return this.$createElement(this.computedTransition,[this.__cachedBarType])},__cachedBarType:function(){return this.indeterminate?this.__cachedIndeterminate:this.__cachedDeterminate},__cachedBuffer:function(){return this.$createElement("div",{staticClass:"v-progress-linear__buffer",style:this.styles})},__cachedDeterminate:function(){return this.$createElement("div",this.setBackgroundColor(this.color,{staticClass:"v-progress-linear__determinate",style:{width:Object(O["d"])(this.normalizedValue,"%")}}))},__cachedIndeterminate:function(){return this.$createElement("div",{staticClass:"v-progress-linear__indeterminate",class:{"v-progress-linear__indeterminate--active":this.active}},[this.genProgressBar("long"),this.genProgressBar("short")])},__cachedStream:function(){return this.stream?this.$createElement("div",this.setTextColor(this.color,{staticClass:"v-progress-linear__stream",style:{width:Object(O["d"])(100-this.normalizedBuffer,"%")}})):null},backgroundStyle:function(){var t,e=null==this.backgroundOpacity?this.backgroundColor?1:.3:parseFloat(this.backgroundOpacity);return t={opacity:e},Object(_["a"])(t,this.isReversed?"right":"left",Object(O["d"])(this.normalizedValue,"%")),Object(_["a"])(t,"width",Object(O["d"])(Math.max(0,this.normalizedBuffer-this.normalizedValue),"%")),t},classes:function(){return Object(g["a"])({"v-progress-linear--absolute":this.absolute,"v-progress-linear--fixed":this.fixed,"v-progress-linear--query":this.query,"v-progress-linear--reactive":this.reactive,"v-progress-linear--reverse":this.isReversed,"v-progress-linear--rounded":this.rounded,"v-progress-linear--striped":this.striped,"v-progress-linear--visible":this.isVisible},this.themeClasses)},computedTransition:function(){return this.indeterminate?Et:zt},isReversed:function(){return this.$vuetify.rtl!==this.reverse},normalizedBuffer:function(){return this.normalize(this.bufferValue)},normalizedValue:function(){return this.normalize(this.internalLazyValue)},reactive:function(){return Boolean(this.$listeners.change)},styles:function(){var t={};return this.active||(t.height=0),this.indeterminate||100===parseFloat(this.normalizedBuffer)||(t.width=Object(O["d"])(this.normalizedBuffer,"%")),t}},methods:{genContent:function(){var t=Object(O["i"])(this,"default",{value:this.internalLazyValue});return t?this.$createElement("div",{staticClass:"v-progress-linear__content"},t):null},genListeners:function(){var t=this.$listeners;return this.reactive&&(t.click=this.onClick),t},genProgressBar:function(t){return this.$createElement("div",this.setBackgroundColor(this.color,{staticClass:"v-progress-linear__indeterminate",class:Object(_["a"])({},t,!0)}))},onClick:function(t){if(this.reactive){var e=this.$el.getBoundingClientRect(),i=e.width;this.internalValue=t.offsetX/i*100}},onObserve:function(t,e,i){this.isVisible=i},normalize:function(t){return t<0?0:t>100?100:parseFloat(t)}},render:function(t){var e={staticClass:"v-progress-linear",attrs:{role:"progressbar","aria-valuemin":0,"aria-valuemax":this.normalizedBuffer,"aria-valuenow":this.indeterminate?void 0:this.normalizedValue},class:this.classes,directives:[{name:"intersect",value:this.onObserve}],style:{bottom:this.bottom?0:void 0,height:this.active?Object(O["d"])(this.height):0,top:this.top?0:void 0},on:this.genListeners()};return t("div",e,[this.__cachedStream,this.__cachedBackground,this.__cachedBuffer,this.__cachedBar,this.genContent()])}}),Ft=Rt,Vt=m["a"].extend().extend({name:"loadable",props:{loading:{type:[Boolean,String],default:!1},loaderHeight:{type:[Number,String],default:2}},methods:{genProgress:function(){return!1===this.loading?null:this.$slots.progress||this.$createElement(Ft,{props:{absolute:!0,color:!0===this.loading||""===this.loading?this.color||"primary":this.loading,height:this.loaderHeight,indeterminate:!0}})}}}),It=Object(z["a"])(Vt,gt,T).extend({name:"v-card",props:{flat:Boolean,hover:Boolean,img:String,link:Boolean,loaderHeight:{type:[Number,String],default:4},raised:Boolean},computed:{classes:function(){return Object(g["a"])(Object(g["a"])({"v-card":!0},gt.options.computed.classes.call(this)),{},{"v-card--flat":this.flat,"v-card--hover":this.hover,"v-card--link":this.isClickable,"v-card--loading":this.loading,"v-card--disabled":this.disabled,"v-card--raised":this.raised},T.options.computed.classes.call(this))},styles:function(){var t=Object(g["a"])({},T.options.computed.styles.call(this));return this.img&&(t.background='url("'.concat(this.img,'") center center / cover no-repeat')),t}},methods:{genProgress:function(){var t=Vt.options.methods.genProgress.call(this);return t?this.$createElement("div",{staticClass:"v-card__progress",key:"progress"},[t]):null}},render:function(t){var e=this.generateRouteLink(),i=e.tag,n=e.data;return n.style=this.styles,this.isClickable&&(n.attrs=n.attrs||{},n.attrs.tabindex=0),t(i,this.setBackgroundColor(this.color,n),[this.genProgress(),this.$slots.default])}}),At=Object(O["e"])("v-card__actions"),Wt=(Object(O["e"])("v-card__subtitle"),Object(O["e"])("v-card__text")),Dt=(Object(O["e"])("v-card__title"),i("4ec9"),i("159b"),i("2ca0"),i("4b85"),["sm","md","lg","xl"]),Ht=function(){return Dt.reduce((function(t,e){return t[e]={type:[Boolean,String,Number],default:!1},t}),{})}(),Mt=function(){return Dt.reduce((function(t,e){return t["offset"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),qt=function(){return Dt.reduce((function(t,e){return t["order"+Object(O["o"])(e)]={type:[String,Number],default:null},t}),{})}(),Gt={col:Object.keys(Ht),offset:Object.keys(Mt),order:Object.keys(qt)};function Jt(t,e,i){var n=t;if(null!=i&&!1!==i){if(e){var r=e.replace(t,"");n+="-".concat(r)}return"col"!==t||""!==i&&!0!==i?(n+="-".concat(i),n.toLowerCase()):n.toLowerCase()}}var Yt=new Map,Xt=m["a"].extend({name:"v-col",functional:!0,props:Object(g["a"])(Object(g["a"])(Object(g["a"])(Object(g["a"])({cols:{type:[Boolean,String,Number],default:!1}},Ht),{},{offset:{type:[String,Number],default:null}},Mt),{},{order:{type:[String,Number],default:null}},qt),{},{alignSelf:{type:String,default:null,validator:function(t){return["auto","start","end","center","baseline","stretch"].includes(t)}},tag:{type:String,default:"div"}}),render:function(t,e){var i=e.props,n=e.data,r=e.children,a=(e.parent,"");for(var s in i)a+=String(i[s]);var o=Yt.get(a);return o||function(){var t,e;for(e in o=[],Gt)Gt[e].forEach((function(t){var n=i[t],r=Jt(e,t,n);r&&o.push(r)}));var n=o.some((function(t){return t.startsWith("col-")}));o.push((t={col:!n||!i.cols},Object(_["a"])(t,"col-".concat(i.cols),i.cols),Object(_["a"])(t,"offset-".concat(i.offset),i.offset),Object(_["a"])(t,"order-".concat(i.order),i.order),Object(_["a"])(t,"align-self-".concat(i.alignSelf),i.alignSelf),t)),Yt.set(a,o)}(),t(i.tag,xt(n,{class:o}),r)}});i("4de4"),i("20f6");function Kt(t){return m["a"].extend({name:"v-".concat(t),functional:!0,props:{id:String,tag:{type:String,default:"div"}},render:function(e,i){var n=i.props,r=i.data,a=i.children;r.staticClass="".concat(t," ").concat(r.staticClass||"").trim();var s=r.attrs;if(s){r.attrs={};var o=Object.keys(s).filter((function(t){if("slot"===t)return!1;var e=s[t];return t.startsWith("data-")?(r.attrs[t]=e,!1):e||"string"===typeof e}));o.length&&(r.staticClass+=" ".concat(o.join(" ")))}return n.id&&(r.domProps=r.domProps||{},r.domProps.id=n.id),e(n.tag,r,a)}})}var Ut,Qt=Kt("container").extend({name:"v-container",functional:!0,props:{id:String,tag:{type:String,default:"div"},fluid:{type:Boolean,default:!1}},render:function(t,e){var i,n=e.props,r=e.data,a=e.children,s=r.attrs;return s&&(r.attrs={},i=Object.keys(s).filter((function(t){if("slot"===t)return!1;var e=s[t];return t.startsWith("data-")?(r.attrs[t]=e,!1):e||"string"===typeof e}))),n.id&&(r.domProps=r.domProps||{},r.domProps.id=n.id),t(n.tag,xt(r,{staticClass:"container",class:Array({"container--fluid":n.fluid}).concat(i||[])}),a)}});i("2532"),i("7db0"),i("4804");function Zt(t){return["fas","far","fal","fab","fad","fak"].some((function(e){return t.includes(e)}))}function te(t){return/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4}(function(t){t["xSmall"]="12px",t["small"]="16px",t["default"]="24px",t["medium"]="28px",t["large"]="36px",t["xLarge"]="40px"})(Ut||(Ut={}));var ee=Object(z["a"])(y,w,mt,E["a"]).extend({name:"v-icon",props:{dense:Boolean,disabled:Boolean,left:Boolean,right:Boolean,size:[Number,String],tag:{type:String,required:!1,default:"i"}},computed:{medium:function(){return!1},hasClickListener:function(){return Boolean(this.listeners$.click||this.listeners$["!click"])}},methods:{getIcon:function(){var t="";return this.$slots.default&&(t=this.$slots.default[0].text.trim()),Object(O["n"])(this,t)},getSize:function(){var t={xSmall:this.xSmall,small:this.small,medium:this.medium,large:this.large,xLarge:this.xLarge},e=Object(O["k"])(t).find((function(e){return t[e]}));return e&&Ut[e]||Object(O["d"])(this.size)},getDefaultData:function(){return{staticClass:"v-icon notranslate",class:{"v-icon--disabled":this.disabled,"v-icon--left":this.left,"v-icon--link":this.hasClickListener,"v-icon--right":this.right,"v-icon--dense":this.dense},attrs:Object(g["a"])({"aria-hidden":!this.hasClickListener,disabled:this.hasClickListener&&this.disabled,type:this.hasClickListener?"button":void 0},this.attrs$),on:this.listeners$}},getSvgWrapperData:function(){var t=this.getSize(),e=Object(g["a"])(Object(g["a"])({},this.getDefaultData()),{},{style:t?{fontSize:t,height:t,width:t}:void 0});return this.applyColors(e),e},applyColors:function(t){t.class=Object(g["a"])(Object(g["a"])({},t.class),this.themeClasses),this.setTextColor(this.color,t)},renderFontIcon:function(t,e){var i=[],n=this.getDefaultData(),r="material-icons",a=t.indexOf("-"),s=a<=-1;s?i.push(t):(r=t.slice(0,a),Zt(r)&&(r="")),n.class[r]=!0,n.class[t]=!s;var o=this.getSize();return o&&(n.style={fontSize:o}),this.applyColors(n),e(this.hasClickListener?"button":this.tag,n,i)},renderSvgIcon:function(t,e){var i={class:"v-icon__svg",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",role:"img","aria-hidden":!0}},n=this.getSize();return n&&(i.style={fontSize:n,height:n,width:n}),e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e("svg",i,[e("path",{attrs:{d:t}})])])},renderSvgIconComponent:function(t,e){var i={class:{"v-icon__component":!0}},n=this.getSize();n&&(i.style={fontSize:n,height:n,width:n}),this.applyColors(i);var r=t.component;return i.props=t.props,i.nativeOn=i.on,e(this.hasClickListener?"button":"span",this.getSvgWrapperData(),[e(r,i)])}},render:function(t){var e=this.getIcon();return"string"===typeof e?te(e)?this.renderSvgIcon(e,t):this.renderFontIcon(e,t):this.renderSvgIconComponent(e,t)}}),ie=m["a"].extend({name:"v-icon",$_wrapperFor:ee,functional:!0,render:function(t,e){var i=e.data,n=e.children,r="";return i.domProps&&(r=i.domProps.textContent||i.domProps.innerHTML||r,delete i.domProps.textContent,delete i.domProps.innerHTML),t(ee,i,r?[r]:n)}}),ne=(i("8a79"),i("8efc"),i("36a7"),Object(z["a"])(k).extend({name:"v-responsive",props:{aspectRatio:[String,Number],contentClass:String},computed:{computedAspectRatio:function(){return Number(this.aspectRatio)},aspectStyle:function(){return this.computedAspectRatio?{paddingBottom:1/this.computedAspectRatio*100+"%"}:void 0},__cachedSizer:function(){return this.aspectStyle?this.$createElement("div",{style:this.aspectStyle,staticClass:"v-responsive__sizer"}):[]}},methods:{genContent:function(){return this.$createElement("div",{staticClass:"v-responsive__content",class:this.contentClass},this.$slots.default)}},render:function(t){return t("div",{staticClass:"v-responsive",style:this.measurableStyles,on:this.$listeners},[this.__cachedSizer,this.genContent()])}})),re=ne,ae="undefined"!==typeof window&&"IntersectionObserver"in window,se=Object(z["a"])(re,E["a"]).extend({name:"v-img",directives:{intersect:F},props:{alt:String,contain:Boolean,eager:Boolean,gradient:String,lazySrc:String,options:{type:Object,default:function(){return{root:void 0,rootMargin:void 0,threshold:void 0}}},position:{type:String,default:"center center"},sizes:String,src:{type:[String,Object],default:""},srcset:String,transition:{type:[Boolean,String],default:"fade-transition"}},data:function(){return{currentSrc:"",image:null,isLoading:!0,calculatedAspectRatio:void 0,naturalWidth:void 0,hasError:!1}},computed:{computedAspectRatio:function(){return Number(this.normalisedSrc.aspect||this.calculatedAspectRatio)},normalisedSrc:function(){return this.src&&"object"===Object(p["a"])(this.src)?{src:this.src.src,srcset:this.srcset||this.src.srcset,lazySrc:this.lazySrc||this.src.lazySrc,aspect:Number(this.aspectRatio||this.src.aspect)}:{src:this.src,srcset:this.srcset,lazySrc:this.lazySrc,aspect:Number(this.aspectRatio||0)}},__cachedImage:function(){if(!(this.normalisedSrc.src||this.normalisedSrc.lazySrc||this.gradient))return[];var t=[],e=this.isLoading?this.normalisedSrc.lazySrc:this.currentSrc;this.gradient&&t.push("linear-gradient(".concat(this.gradient,")")),e&&t.push('url("'.concat(e,'")'));var i=this.$createElement("div",{staticClass:"v-image__image",class:{"v-image__image--preload":this.isLoading,"v-image__image--contain":this.contain,"v-image__image--cover":!this.contain},style:{backgroundImage:t.join(", "),backgroundPosition:this.position},key:+this.isLoading});return this.transition?this.$createElement("transition",{attrs:{name:this.transition,mode:"in-out"}},[i]):i}},watch:{src:function(){this.isLoading?this.loadImage():this.init(void 0,void 0,!0)},"$vuetify.breakpoint.width":"getSrc"},mounted:function(){this.init()},methods:{init:function(t,e,i){if(!ae||i||this.eager){if(this.normalisedSrc.lazySrc){var n=new Image;n.src=this.normalisedSrc.lazySrc,this.pollForSize(n,null)}this.normalisedSrc.src&&this.loadImage()}},onLoad:function(){this.getSrc(),this.isLoading=!1,this.$emit("load",this.src),this.image&&(this.normalisedSrc.src.endsWith(".svg")||this.normalisedSrc.src.startsWith("data:image/svg+xml"))&&(this.image.naturalHeight&&this.image.naturalWidth?(this.naturalWidth=this.image.naturalWidth,this.calculatedAspectRatio=this.image.naturalWidth/this.image.naturalHeight):this.calculatedAspectRatio=1)},onError:function(){this.hasError=!0,this.$emit("error",this.src)},getSrc:function(){this.image&&(this.currentSrc=this.image.currentSrc||this.image.src)},loadImage:function(){var t=this,e=new Image;this.image=e,e.onload=function(){e.decode?e.decode().catch((function(e){Object(S["c"])("Failed to decode image, trying to render anyway\n\n"+"src: ".concat(t.normalisedSrc.src)+(e.message?"\nOriginal error: ".concat(e.message):""),t)})).then(t.onLoad):t.onLoad()},e.onerror=this.onError,this.hasError=!1,this.sizes&&(e.sizes=this.sizes),this.normalisedSrc.srcset&&(e.srcset=this.normalisedSrc.srcset),e.src=this.normalisedSrc.src,this.$emit("loadstart",this.normalisedSrc.src),this.aspectRatio||this.pollForSize(e),this.getSrc()},pollForSize:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=function n(){var r=t.naturalHeight,a=t.naturalWidth;r||a?(e.naturalWidth=a,e.calculatedAspectRatio=a/r):t.complete||!e.isLoading||e.hasError||null==i||setTimeout(n,i)};n()},genContent:function(){var t=re.options.methods.genContent.call(this);return this.naturalWidth&&this._b(t.data,"div",{style:{width:"".concat(this.naturalWidth,"px")}}),t},__genPlaceholder:function(){if(this.$slots.placeholder){var t=this.isLoading?[this.$createElement("div",{staticClass:"v-image__placeholder"},this.$slots.placeholder)]:[];return this.transition?this.$createElement("transition",{props:{appear:!0,name:this.transition}},t):t[0]}}},render:function(t){var e=re.options.render.call(this,t),i=xt(e.data,{staticClass:"v-image",attrs:{"aria-label":this.alt,role:this.alt?"img":void 0},class:this.themeClasses,directives:ae?[{name:"intersect",modifiers:{once:!0},value:{handler:this.init,options:this.options}}]:void 0});return e.children=[this.__cachedSizer,this.__cachedImage,this.__genPlaceholder(),this.genContent()],t(e.tag,i,e.children)}}),oe=["sm","md","lg","xl"],ce=["start","end","center"];function le(t,e){return oe.reduce((function(i,n){return i[t+Object(O["o"])(n)]=e(),i}),{})}var ue=function(t){return[].concat(ce,["baseline","stretch"]).includes(t)},he=le("align",(function(){return{type:String,default:null,validator:ue}})),de=function(t){return[].concat(ce,["space-between","space-around"]).includes(t)},fe=le("justify",(function(){return{type:String,default:null,validator:de}})),pe=function(t){return[].concat(ce,["space-between","space-around","stretch"]).includes(t)},ve=le("alignContent",(function(){return{type:String,default:null,validator:pe}})),ge={align:Object.keys(he),justify:Object.keys(fe),alignContent:Object.keys(ve)},me={align:"align",justify:"justify",alignContent:"align-content"};function be(t,e,i){var n=me[t];if(null!=i){if(e){var r=e.replace(t,"");n+="-".concat(r)}return n+="-".concat(i),n.toLowerCase()}}var ye=new Map,_e=m["a"].extend({name:"v-row",functional:!0,props:Object(g["a"])(Object(g["a"])(Object(g["a"])({tag:{type:String,default:"div"},dense:Boolean,noGutters:Boolean,align:{type:String,default:null,validator:ue}},he),{},{justify:{type:String,default:null,validator:de}},fe),{},{alignContent:{type:String,default:null,validator:pe}},ve),render:function(t,e){var i=e.props,n=e.data,r=e.children,a="";for(var s in i)a+=String(i[s]);var o=ye.get(a);return o||function(){var t,e;for(e in o=[],ge)ge[e].forEach((function(t){var n=i[t],r=be(e,t,n);r&&o.push(r)}));o.push((t={"no-gutters":i.noGutters,"row--dense":i.dense},Object(_["a"])(t,"align-".concat(i.align),i.align),Object(_["a"])(t,"justify-".concat(i.justify),i.justify),Object(_["a"])(t,"align-content-".concat(i.alignContent),i.alignContent),t)),ye.set(a,o)}(),t(i.tag,xt(n,{staticClass:"row",class:o}),r)}}),Se=(i("0bc6"),Object(z["a"])(E["a"]).extend({name:"v-subheader",props:{inset:Boolean},render:function(t){return t("div",{staticClass:"v-subheader",class:Object(g["a"])({"v-subheader--inset":this.inset},this.themeClasses),attrs:this.$attrs,on:this.$listeners},this.$slots.default)}})),xe=Object(h["a"])(u,n,r,!1,null,"6003c7cf",null);e["default"]=xe.exports;f()(xe,{VBtn:yt,VCard:It,VCardActions:At,VCardText:Wt,VCol:Xt,VContainer:Qt,VIcon:ie,VImg:se,VProgressLinear:Rt,VRow:_e,VSubheader:Se})},c7cd:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("fixed")},{fixed:function(){return r(this,"tt","","")}})},c96a:function(t,e,i){"use strict";var n=i("23e7"),r=i("857a"),a=i("af03");n({target:"String",proto:!0,forced:a("small")},{small:function(){return r(this,"small","","")}})},f5f2:function(t){t.exports=JSON.parse('{"jak1":{"fileProgress":{"src_files_total":515,"src_files_finished":77,"src_files_started":178,"data_files_total":584,"data_files_started":4}}}')}}]); +//# sourceMappingURL=about.e40bb13c.js.map \ No newline at end of file diff --git a/docs/js/about.d184dbd9.js.map b/docs/js/about.e40bb13c.js.map similarity index 99% rename from docs/js/about.d184dbd9.js.map rename to docs/js/about.e40bb13c.js.map index 8875a0e11a..53d9a82925 100644 --- a/docs/js/about.d184dbd9.js.map +++ b/docs/js/about.e40bb13c.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./src/assets/img/logo-text-colored.png","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./src/views/Home.vue?6e6e","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///./node_modules/core-js/internals/flatten-into-array.js","webpack:///./src/views/Home.vue?00f9","webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./src/progress.js","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?493c","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///../../../src/mixins/colorable/index.ts","webpack:///../../../src/mixins/elevatable/index.ts","webpack:///../../../src/mixins/measurable/index.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack:///../../../src/mixins/roundable/index.ts","webpack:///../../../src/components/VSheet/VSheet.ts","webpack:///../../../src/components/VSheet/index.ts","webpack:///../../../src/directives/intersect/index.ts","webpack:///../../../src/components/VProgressCircular/VProgressCircular.ts","webpack:///../../../src/components/VProgressCircular/index.ts","webpack:///../../../src/mixins/registrable/index.ts","webpack:///../../../src/mixins/groupable/index.ts","webpack:///../../../src/mixins/toggleable/index.ts","webpack:///../../../src/mixins/positionable/index.ts","webpack:///../../../src/directives/ripple/index.ts","webpack:///../../../src/mixins/routable/index.ts","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///../../../src/components/VBtn/VBtn.ts","webpack:///../../src/util/mergeData.ts","webpack:///../../../src/components/transitions/createTransition.ts","webpack:///../../../src/components/transitions/expand-transition.ts","webpack:///../../../src/components/transitions/index.ts","webpack:///../../../src/mixins/proxyable/index.ts","webpack:///../../../src/components/VProgressLinear/VProgressLinear.ts","webpack:///../../../src/components/VProgressLinear/index.ts","webpack:///../../../src/mixins/loadable/index.ts","webpack:///../../../src/components/VCard/VCard.ts","webpack:///../../../src/components/VCard/index.ts","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VSubheader/VSubheader.ts","webpack:///./src/views/Home.vue?1dce","webpack:///./node_modules/core-js/modules/es.string.fixed.js","webpack:///./node_modules/core-js/modules/es.string.small.js"],"names":["$","flattenIntoArray","toObject","toLength","toInteger","arraySpeciesCreate","target","proto","flat","depthArg","arguments","length","undefined","O","this","sourceLen","A","collection","collectionStrong","module","exports","init","defineProperty","f","create","redefineAll","bind","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","set","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","C","that","iterable","type","index","first","last","size","AS_ENTRIES","getInternalState","define","key","value","previous","state","entry","getEntry","next","removed","prototype","clear","data","prev","forEach","callbackfn","boundFunction","has","get","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","done","global","isForced","redefine","InternalMetadataModule","isObject","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","indexOf","IS_WEAK","NativeConstructor","NativePrototype","Constructor","exported","fixMethod","KEY","nativeMethod","call","REPLACE","entries","enable","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","constructor","forced","getOwnPropertyDescriptor","toString","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","$endsWith","endsWith","min","Math","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","String","writable","searchString","endPosition","len","end","search","slice","runtime","Op","Object","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","obj","enumerable","configurable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iteratorMethod","isNaN","i","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","charAt","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","createHTML","forcedStringHTMLMethod","link","url","isArray","original","source","start","depth","mapper","thisArg","element","targetIndex","sourceIndex","mapFn","_vm","_h","$createElement","_c","_self","attrs","staticClass","_v","staticStyle","jak1BlackLabelStatus","srcFilesFinishedValue","_s","srcFilesFinished","srcFilesTotal","srcFilesStartedValue","srcFilesStarted","dataFilesStartedValue","dataFilesStarted","dataFilesTotal","_l","pr","title","user","login","body","html_url","staticRenderFns","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","apply","projectProgress","require","components","recentPRs","mounted","methods","truncateString","str","num","loadRecentPRs","makeWatcher","$data","val","attrs$","listeners$","created","immediate","props","color","setBackgroundColor","console","setTextColor","colorName","elevation","Number","computed","computedElevation","elevationClasses","parseInt","height","maxHeight","maxWidth","minHeight","minWidth","width","measurableStyles","styles","_createForOfIteratorHelper","o","allowArrayLike","it","Array","unsupportedIterableToArray","F","s","n","e","_e","normalCompletion","didErr","step","_e2","rounded","Boolean","tile","roundedClasses","composite","mixins","outlined","shaped","tag","default","classes","render","class","style","on","h","$slots","inserted","window","modifiers","binding","handler","options","observer","IntersectionObserver","el","isIntersecting","unbind","observe","Intersect","directives","intersect","button","indeterminate","rotate","radius","isVisible","calculatedSize","circumference","normalizedValue","parseFloat","strokeDashArray","strokeDashOffset","strokeWidth","svgStyles","transform","viewBoxSize","genCircle","fill","cx","cy","r","offset","genSvg","children","xmlns","viewBox","genInfo","onObserve","role","$listeners","generateWarning","child","defaultImpl","register","unregister","parent","inject","activeClass","namespace","disabled","isActive","groupClasses","beforeDestroy","toggle","factory","prop","event","model","required","watch","$emit","availableProps","absolute","bottom","fixed","left","right","top","selected","rippleStop","DELAY_RIPPLE","opacity","isTouchEvent","isKeyboardEvent","calculate","localX","localY","scale","centerX","centerY","x","y","ripples","show","container","document","animation","performance","setTimeout","hide","diff","delay","isRippleEnabled","rippleShow","rippleHide","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyboardRippleHide","focusRippleHide","updateRipple","enabled","passive","removeListeners","directive","update","wasEnabled","Ripple","append","exact","exactPath","exactActiveClass","href","to","nuxt","replace","ripple","proxyClass","computedRipple","isClickable","isLink","$attrs","$route","click","generateRouteLink","tabindex","path","onRouteChange","$refs","large","small","xLarge","xSmall","medium","sizeableClasses","baseMixins","btnToggle","block","depressed","fab","icon","loading","plain","retainFocusOnClick","text","defaultRipple","circle","hasBg","isElevated","isRound","breakingProps","replacement","$el","genContent","genLoader","loader","setColor","includes","JSON","pattern","styleList","styleProp","parseStyle","styleMap","mergeTarget","mergeClasses","mergeStyles","mergeListeners","dest","mergeTransitions","origin","functional","group","hideOnLeave","leaveAbsolute","mode","beforeEnter","offsetHeight","position","offsetTop","offsetLeft","offsetWidth","mergeData","functions","expandedParentClass","sizeProperty","offsetProperty","transition","overflow","enter","initialStyle","requestAnimationFrame","afterEnter","enterCancelled","leave","afterLeave","leaveCancelled","resetStyles","VFadeTransition","createSimpleTransition","VSlideXTransition","createJavascriptTransition","internalLazyValue","internalValue","Proxyable","active","backgroundColor","backgroundOpacity","bufferValue","query","stream","striped","__cachedBackground","backgroundStyle","__cachedBar","__cachedBarType","__cachedBuffer","__cachedDeterminate","__cachedIndeterminate","genProgressBar","__cachedStream","isReversed","normalizedBuffer","themeClasses","computedTransition","$vuetify","rtl","normalize","reactive","slot","genListeners","listeners","onClick","loaderHeight","genProgress","progress","hover","img","raised","VCardActions","VCardText","breakpoints","breakpointProps","offsetProps","orderProps","propMap","col","order","breakpointClass","className","breakpoint","cache","cols","alignSelf","validator","cacheKey","classList","hasColClasses","id","fluid","isFontAwesome5","some","iconType","isSvgPath","test","SIZE_MAP","dense","hasClickListener","getIcon","iconName","getSize","sizes","explicitSize","getDefaultData","getSvgWrapperData","fontSize","wrapperData","applyColors","renderFontIcon","newChildren","delimiterIndex","isMaterialIcon","renderSvgIcon","svgData","d","renderSvgIconComponent","component","$_wrapperFor","aspectRatio","contentClass","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","hasIntersect","alt","contain","eager","gradient","lazySrc","root","rootMargin","threshold","src","srcset","currentSrc","image","isLoading","calculatedAspectRatio","naturalWidth","hasError","normalisedSrc","aspect","__cachedImage","backgroundImage","backgroundPosition","loadImage","lazyImg","onLoad","startsWith","naturalHeight","onError","getSrc","pollForSize","timeout","poll","content","__genPlaceholder","placeholder","appear","node","once","ALIGNMENT","makeProps","prefix","def","alignValidator","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","align","justify","alignContent","classMap","noGutters","inset","VBtn","VCard","VCol","VContainer","VIcon","VImg","VProgressLinear","VRow","VSubheader"],"mappings":"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","file":"js/about.d184dbd9.js","sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://tc39.es/ecma262/#sec-array.prototype.flat\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var nativeMethod = NativePrototype[KEY];\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n nativeMethod.call(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n nativeMethod.call(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","module.exports = __webpack_public_path__ + \"img/logo-text-colored.5cda006b.png\";","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\nvar $endsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = toString(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=6003c7cf&scoped=true&lang=css&\"","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{staticClass:\"bg-img\",attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"12\",\"align\":\"center\"}},[_c('v-img',{attrs:{\"max-height\":\"150\",\"max-width\":\"250\",\"src\":require(\"@/assets/img/logo-text-colored.png\")}}),_c('br'),_c('h4',[_vm._v(\" Reviving the Language that Brought us the Jak & Daxter Series \")]),_c('br'),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"#project-status\",\"rounded\":\"\",\"color\":\"primary\"}},[_c('v-icon',[_vm._v(\"mdi-calendar-check\")]),_vm._v(\" Project Status \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"rounded\":\"\",\"color\":\"secondary\",\"href\":\"#recent-updates\"}},[_c('v-icon',[_vm._v(\"mdi-update\")]),_vm._v(\" Recent Updates \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"/jak-project/api-docs.html\",\"target\":\"_blank\",\"rounded\":\"\",\"color\":\"deep-purple\"}},[_c('v-icon',[_vm._v(\"mdi-file-document\")]),_vm._v(\" Documentation \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"https://github.com/water111/jak-project\",\"target\":\"_blank\",\"rounded\":\"\",\"color\":\"accent\"}},[_c('v-icon',[_vm._v(\"mdi-git\")]),_vm._v(\" Contribute \")],1)],1)],1)],1)],1),_c('v-row',[_c('v-container',[_c('v-row',{staticStyle:{\"margin-top\":\"3em\"},attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h1',{staticClass:\"orange--text text--darken-1\",attrs:{\"id\":\"project-status\"}},[_vm._v(\" Project Status \")])])],1),_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h2',{staticClass:\"orange--text text--lighten-3\"},[_vm._v(\"Jak 1 - Black Label\")])])],1),_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"10\"}},[_c('v-subheader',[_vm._v(\"Decompilation\")]),_c('v-progress-linear',{attrs:{\"color\":\"green\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.srcFilesFinishedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Source Files Finished - \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesFinished)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesTotal)+\" \")]),_c('br'),_c('v-progress-linear',{attrs:{\"color\":\"yellow\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.srcFilesStartedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Source Files Started - \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesStarted)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesTotal)+\" \")]),_c('br'),_c('v-progress-linear',{attrs:{\"color\":\"teal\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.dataFilesStartedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Data Files Started - \"+_vm._s(_vm.jak1BlackLabelStatus.dataFilesStarted)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.dataFilesTotal)+\" \")])],1)],1),_c('v-row',{staticStyle:{\"margin-top\":\"5em\"},attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h1',{staticClass:\"orange--text text--darken-1\",attrs:{\"id\":\"recent-updates\"}},[_vm._v(\" Recent Updates \")])])],1),_c('v-row',{staticStyle:{\"margin-bottom\":\"10em\"},attrs:{\"justify\":\"center\"}},_vm._l((_vm.recentPRs),function(pr,index){return _c('v-col',{key:'pr' - index,attrs:{\"cols\":\"4\"}},[_c('v-card',[_c('v-card-text',{staticStyle:{\"overflow-y\":\"auto\",\"height\":\"300px\"}},[_c('p',{staticClass:\"text-h5 orange--text text--lighten-3\"},[_vm._v(\" \"+_vm._s(pr.title)+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(pr.user.login)+\" \")]),_c('div',{staticClass:\"text--primary\"},[_c('pre',{staticClass:\"wrapped-pre\"},[_vm._v(_vm._s(pr.body))])])]),_c('v-card-actions',[_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"accent\",\"href\":pr.html_url,\"target\":\"_blank\"}},[_vm._v(\" View Change \")])],1)],1)],1)}),1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","const projectProgress = require('./config/progress.json')\n\nexport default projectProgress\n","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import Vue, { WatchHandler } from 'vue'\n\n/**\n * This mixin provides `attrs$` and `listeners$` to work around\n * vue bug https://github.com/vuejs/vue/issues/10115\n */\n\nfunction makeWatcher (property: string): ThisType & WatchHandler {\n return function (this: Vue, val, oldVal) {\n for (const attr in oldVal) {\n if (!Object.prototype.hasOwnProperty.call(val, attr)) {\n this.$delete(this.$data[property], attr)\n }\n }\n for (const attr in val) {\n this.$set(this.$data[property], attr, val[attr])\n }\n }\n}\n\nexport default Vue.extend({\n data: () => ({\n attrs$: {} as Dictionary,\n listeners$: {} as Dictionary,\n }),\n\n created () {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n // Make sure to use `attrs$` instead of `$attrs` (confusing right?)\n this.$watch('$attrs', makeWatcher('attrs$'), { immediate: true })\n this.$watch('$listeners', makeWatcher('listeners$'), { immediate: true })\n },\n})\n","import Vue from 'vue'\nimport { VNodeData } from 'vue/types/vnode'\nimport { consoleError } from '../../util/console'\nimport { isCssColor } from '../../util/colorUtils'\n\nexport default Vue.extend({\n name: 'colorable',\n\n props: {\n color: String,\n },\n\n methods: {\n setBackgroundColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (typeof data.style === 'string') {\n // istanbul ignore next\n consoleError('style must be an object', this)\n // istanbul ignore next\n return data\n }\n if (typeof data.class === 'string') {\n // istanbul ignore next\n consoleError('class must be an object', this)\n // istanbul ignore next\n return data\n }\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n 'background-color': `${color}`,\n 'border-color': `${color}`,\n }\n } else if (color) {\n data.class = {\n ...data.class,\n [color]: true,\n }\n }\n\n return data\n },\n\n setTextColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (typeof data.style === 'string') {\n // istanbul ignore next\n consoleError('style must be an object', this)\n // istanbul ignore next\n return data\n }\n if (typeof data.class === 'string') {\n // istanbul ignore next\n consoleError('class must be an object', this)\n // istanbul ignore next\n return data\n }\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n color: `${color}`,\n 'caret-color': `${color}`,\n }\n } else if (color) {\n const [colorName, colorModifier] = color.toString().trim().split(' ', 2) as (string | undefined)[]\n data.class = {\n ...data.class,\n [colorName + '--text']: true,\n }\n if (colorModifier) {\n data.class['text--' + colorModifier] = true\n }\n }\n return data\n },\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'elevatable',\n\n props: {\n elevation: [Number, String],\n },\n\n computed: {\n computedElevation (): string | number | undefined {\n return this.elevation\n },\n elevationClasses (): Record {\n const elevation = this.computedElevation\n\n if (elevation == null) return {}\n if (isNaN(parseInt(elevation))) return {}\n return { [`elevation-${this.elevation}`]: true }\n },\n },\n})\n","// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'roundable',\n\n props: {\n rounded: [Boolean, String],\n tile: Boolean,\n },\n\n computed: {\n roundedClasses (): Record {\n const composite = []\n const rounded = typeof this.rounded === 'string'\n ? String(this.rounded)\n : this.rounded === true\n\n if (this.tile) {\n composite.push('rounded-0')\n } else if (typeof rounded === 'string') {\n const values = rounded.split(' ')\n\n for (const value of values) {\n composite.push(`rounded-${value}`)\n }\n } else if (rounded) {\n composite.push('rounded')\n }\n\n return composite.length > 0 ? {\n [composite.join(' ')]: true,\n } : {}\n },\n },\n})\n","// Styles\nimport './VSheet.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Measurable from '../../mixins/measurable'\nimport Roundable from '../../mixins/roundable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n Colorable,\n Elevatable,\n Measurable,\n Roundable,\n Themeable\n).extend({\n name: 'v-sheet',\n\n props: {\n outlined: Boolean,\n shaped: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-sheet': true,\n 'v-sheet--outlined': this.outlined,\n 'v-sheet--shaped': this.shaped,\n ...this.themeClasses,\n ...this.elevationClasses,\n ...this.roundedClasses,\n }\n },\n styles (): object {\n return this.measurableStyles\n },\n },\n\n render (h): VNode {\n const data = {\n class: this.classes,\n style: this.styles,\n on: this.listeners$,\n }\n\n return h(\n this.tag,\n this.setBackgroundColor(this.color, data),\n this.$slots.default\n )\n },\n})\n","import VSheet from './VSheet'\n\nexport { VSheet }\nexport default VSheet\n","import { VNodeDirective } from 'vue/types/vnode'\n\ntype ObserveHandler = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n isIntersecting: boolean,\n) => void\n\ninterface ObserveVNodeDirective extends Omit {\n value?: ObserveHandler | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers?: {\n once?: boolean\n quiet?: boolean\n }\n}\n\nfunction inserted (el: HTMLElement, binding: ObserveVNodeDirective) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) return\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } = typeof value === 'object'\n ? value\n : { handler: value, options: {} }\n const observer = new IntersectionObserver((\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n /* istanbul ignore if */\n if (!el._observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n el._observe.init\n ) && (\n !modifiers.once ||\n isIntersecting ||\n !el._observe.init\n )\n ) {\n handler(entries, observer, isIntersecting)\n }\n\n if (isIntersecting && modifiers.once) unbind(el)\n else el._observe.init = true\n }, options)\n\n el._observe = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unbind (el: HTMLElement) {\n /* istanbul ignore if */\n if (!el._observe) return\n\n el._observe.observer.unobserve(el)\n delete el._observe\n}\n\nexport const Intersect = {\n inserted,\n unbind,\n}\n\nexport default Intersect\n","// Styles\nimport './VProgressCircular.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utils\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\n\n/* @vue/component */\nexport default Colorable.extend({\n name: 'v-progress-circular',\n\n directives: { intersect },\n\n props: {\n button: Boolean,\n indeterminate: Boolean,\n rotate: {\n type: [Number, String],\n default: 0,\n },\n size: {\n type: [Number, String],\n default: 32,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data: () => ({\n radius: 20,\n isVisible: true,\n }),\n\n computed: {\n calculatedSize (): number {\n return Number(this.size) + (this.button ? 8 : 0)\n },\n\n circumference (): number {\n return 2 * Math.PI * this.radius\n },\n\n classes (): object {\n return {\n 'v-progress-circular--visible': this.isVisible,\n 'v-progress-circular--indeterminate': this.indeterminate,\n 'v-progress-circular--button': this.button,\n }\n },\n\n normalizedValue (): number {\n if (this.value < 0) {\n return 0\n }\n\n if (this.value > 100) {\n return 100\n }\n\n return parseFloat(this.value)\n },\n\n strokeDashArray (): number {\n return Math.round(this.circumference * 1000) / 1000\n },\n\n strokeDashOffset (): string {\n return ((100 - this.normalizedValue) / 100) * this.circumference + 'px'\n },\n\n strokeWidth (): number {\n return Number(this.width) / +this.size * this.viewBoxSize * 2\n },\n\n styles (): object {\n return {\n height: convertToUnit(this.calculatedSize),\n width: convertToUnit(this.calculatedSize),\n }\n },\n\n svgStyles (): object {\n return {\n transform: `rotate(${Number(this.rotate)}deg)`,\n }\n },\n\n viewBoxSize (): number {\n return this.radius / (1 - Number(this.width) / +this.size)\n },\n },\n\n methods: {\n genCircle (name: string, offset: string | number): VNode {\n return this.$createElement('circle', {\n class: `v-progress-circular__${name}`,\n attrs: {\n fill: 'transparent',\n cx: 2 * this.viewBoxSize,\n cy: 2 * this.viewBoxSize,\n r: this.radius,\n 'stroke-width': this.strokeWidth,\n 'stroke-dasharray': this.strokeDashArray,\n 'stroke-dashoffset': offset,\n },\n })\n },\n genSvg (): VNode {\n const children = [\n this.indeterminate || this.genCircle('underlay', 0),\n this.genCircle('overlay', this.strokeDashOffset),\n ] as VNodeChildren\n\n return this.$createElement('svg', {\n style: this.svgStyles,\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: `${this.viewBoxSize} ${this.viewBoxSize} ${2 * this.viewBoxSize} ${2 * this.viewBoxSize}`,\n },\n }, children)\n },\n genInfo (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-circular__info',\n }, this.$slots.default)\n },\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n this.isVisible = isIntersecting\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-circular',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n directives: [{\n name: 'intersect',\n value: this.onObserve,\n }],\n style: this.styles,\n on: this.$listeners,\n }), [\n this.genSvg(),\n this.genInfo(),\n ])\n },\n})\n","import VProgressCircular from './VProgressCircular'\n\nexport { VProgressCircular }\nexport default VProgressCircular\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable = VueConstructor : {\n register (...props: any[]): void\n unregister (self: any): void\n }\n}>\n\nexport function inject<\n T extends string, C extends VueConstructor | null = null\n> (namespace: T, child?: string, parent?: string): Registrable {\n const defaultImpl = child && parent ? {\n register: generateWarning(child, parent),\n unregister: generateWarning(child, parent),\n } : null\n\n return Vue.extend({\n name: 'registrable-inject',\n\n inject: {\n [namespace]: {\n default: defaultImpl,\n },\n },\n })\n}\n\nexport function provide (namespace: string, self = false) {\n return Vue.extend({\n name: 'registrable-provide',\n\n provide (): object {\n return {\n [namespace]: self ? this : {\n register: (this as any).register,\n unregister: (this as any).unregister,\n },\n }\n },\n })\n}\n","// Mixins\nimport { Registrable, inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { ExtractVue } from '../../util/mixins'\nimport { VueConstructor } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type Groupable = VueConstructor> & {\n activeClass: string\n isActive: boolean\n disabled: boolean\n groupClasses: object\n toggle (): void\n}>\n\nexport function factory (\n namespace: T,\n child?: string,\n parent?: string\n): Groupable {\n return RegistrableInject(namespace, child, parent).extend({\n name: 'groupable',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this[namespace]) return undefined\n\n return this[namespace].activeClass\n },\n } as any as PropValidator,\n disabled: Boolean,\n },\n\n data () {\n return {\n isActive: false,\n }\n },\n\n computed: {\n groupClasses (): object {\n if (!this.activeClass) return {}\n\n return {\n [this.activeClass]: this.isActive,\n }\n },\n },\n\n created () {\n this[namespace] && (this[namespace] as any).register(this)\n },\n\n beforeDestroy () {\n this[namespace] && (this[namespace] as any).unregister(this)\n },\n\n methods: {\n toggle () {\n this.$emit('change')\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n","import Vue, { VueConstructor } from 'vue'\n\nexport type Toggleable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Toggleable\nexport function factory (prop = 'value', event = 'input') {\n return Vue.extend({\n name: 'toggleable',\n\n model: { prop, event },\n\n props: {\n [prop]: { required: false },\n },\n\n data () {\n return {\n isActive: !!this[prop],\n }\n },\n\n watch: {\n [prop] (val) {\n this.isActive = !!val\n },\n isActive (val) {\n !!val !== this[prop] && this.$emit(event, val)\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n","import Vue from 'vue'\nimport { filterObjectOnKeys } from '../../util/helpers'\nimport { OptionsVue, VueConstructor } from 'vue/types/vue'\n\nconst availableProps = {\n absolute: Boolean,\n bottom: Boolean,\n fixed: Boolean,\n left: Boolean,\n right: Boolean,\n top: Boolean,\n}\ntype props = Record\n\nexport type Positionable = VueConstructor\n\nexport function factory (selected?: S[]): Positionable\nexport function factory (selected: undefined): OptionsVue\nexport function factory (selected: any[] = []): any {\n return Vue.extend({\n name: 'positionable',\n props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps,\n })\n}\n\nexport default factory()\n\n// Add a `*` before the second `/`\n/* Tests /\nlet single = factory(['top']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet some = factory(['top', 'bottom']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet all = factory().extend({\n created () {\n this.top\n this.bottom\n this.absolute\n this.foobar\n }\n})\n/**/\n","// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue'\n\nconst rippleStop = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [rippleStop]?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n el.style.opacity = value.toString()\n}\n\nexport interface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple && el._ripple.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el._ripple || !el._ripple.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n opacity(animation, 0)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n opacity(animation, 0.25)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el || !el._ripple || !el._ripple.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n opacity(animation, 0)\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n animation.parentNode && el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement\n\n if (!element || !element._ripple || element._ripple.touched || e[rippleStop]) return\n\n // Don't allow the event to trigger ripples on any other elements\n e[rippleStop] = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element && element._ripple && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element || !element._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element || !element._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple === true) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: VNodeDirective, wasEnabled: boolean) {\n const enabled = isRippleEnabled(binding.value)\n if (!enabled) {\n ripples.hide(el)\n }\n el._ripple = el._ripple || {}\n el._ripple.enabled = enabled\n const value = binding.value || {}\n if (value.center) {\n el._ripple.centered = true\n }\n if (value.class) {\n el._ripple.class = binding.value.class\n }\n if (value.circle) {\n el._ripple.circle = value.circle\n }\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction directive (el: HTMLElement, binding: VNodeDirective, node: VNode) {\n updateRipple(el, binding, false)\n\n if (process.env.NODE_ENV === 'development') {\n // warn if an inline element is used, waiting for el to be in the DOM first\n node.context && node.context.$nextTick(() => {\n const computed = window.getComputedStyle(el)\n if (computed && computed.display === 'inline') {\n const context = (node as any).fnOptions ? [(node as any).fnOptions, node.context] : [node.componentInstance]\n consoleWarn('v-ripple can only be used on block-level elements', ...context)\n }\n })\n }\n}\n\nfunction unbind (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction update (el: HTMLElement, binding: VNodeDirective) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple = {\n bind: directive,\n unbind,\n update,\n}\n\nexport default Ripple\n","import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n\n const path = `_vnode.data.class.${activeClass}`\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (getObjectValueByPath(this.$refs.link, path)) {\n this.toggle()\n }\n })\n },\n toggle: () => { /* noop */ },\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'sizeable',\n\n props: {\n large: Boolean,\n small: Boolean,\n xLarge: Boolean,\n xSmall: Boolean,\n },\n\n computed: {\n medium (): boolean {\n return Boolean(\n !this.xSmall &&\n !this.small &&\n !this.large &&\n !this.xLarge\n )\n },\n sizeableClasses (): object {\n return {\n 'v-size--x-small': this.xSmall,\n 'v-size--small': this.small,\n 'v-size--default': this.medium,\n 'v-size--large': this.large,\n 'v-size--x-large': this.xLarge,\n }\n },\n },\n})\n","// Styles\nimport './VBtn.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VProgressCircular from '../VProgressCircular'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Elevatable from '../../mixins/elevatable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator, PropType } from 'vue/types/options'\nimport { RippleOptions } from '../../directives/ripple'\n\nconst baseMixins = mixins(\n VSheet,\n Routable,\n Positionable,\n Sizeable,\n GroupableFactory('btnToggle'),\n ToggleableFactory('inputValue')\n /* @vue/component */\n)\ninterface options extends ExtractVue {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-btn',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.btnToggle) return ''\n\n return this.btnToggle.activeClass\n },\n } as any as PropValidator,\n block: Boolean,\n depressed: Boolean,\n fab: Boolean,\n icon: Boolean,\n loading: Boolean,\n outlined: Boolean,\n plain: Boolean,\n retainFocusOnClick: Boolean,\n rounded: Boolean,\n tag: {\n type: String,\n default: 'button',\n },\n text: Boolean,\n tile: Boolean,\n type: {\n type: String,\n default: 'button',\n },\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-btn--active',\n }),\n\n computed: {\n classes (): any {\n return {\n 'v-btn': true,\n ...Routable.options.computed.classes.call(this),\n 'v-btn--absolute': this.absolute,\n 'v-btn--block': this.block,\n 'v-btn--bottom': this.bottom,\n 'v-btn--disabled': this.disabled,\n 'v-btn--is-elevated': this.isElevated,\n 'v-btn--fab': this.fab,\n 'v-btn--fixed': this.fixed,\n 'v-btn--has-bg': this.hasBg,\n 'v-btn--icon': this.icon,\n 'v-btn--left': this.left,\n 'v-btn--loading': this.loading,\n 'v-btn--outlined': this.outlined,\n 'v-btn--plain': this.plain,\n 'v-btn--right': this.right,\n 'v-btn--round': this.isRound,\n 'v-btn--rounded': this.rounded,\n 'v-btn--router': this.to,\n 'v-btn--text': this.text,\n 'v-btn--tile': this.tile,\n 'v-btn--top': this.top,\n ...this.themeClasses,\n ...this.groupClasses,\n ...this.elevationClasses,\n ...this.sizeableClasses,\n }\n },\n computedElevation (): string | number | undefined {\n if (this.disabled) return undefined\n\n return Elevatable.options.computed.computedElevation.call(this)\n },\n computedRipple (): RippleOptions | boolean {\n const defaultRipple = this.icon || this.fab ? { circle: true } : true\n if (this.disabled) return false\n else return this.ripple ?? defaultRipple\n },\n hasBg (): boolean {\n return !this.text && !this.plain && !this.outlined && !this.icon\n },\n isElevated (): boolean {\n return Boolean(\n !this.icon &&\n !this.text &&\n !this.outlined &&\n !this.depressed &&\n !this.disabled &&\n !this.plain &&\n (this.elevation == null || Number(this.elevation) > 0)\n )\n },\n isRound (): boolean {\n return Boolean(\n this.icon ||\n this.fab\n )\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n }\n },\n },\n\n created () {\n const breakingProps = [\n ['flat', 'text'],\n ['outline', 'outlined'],\n ['round', 'rounded'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n // TODO: Remove this in v3\n !this.retainFocusOnClick && !this.fab && e.detail && this.$el.blur()\n this.$emit('click', e)\n\n this.btnToggle && this.toggle()\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-btn__content',\n }, this.$slots.default)\n },\n genLoader (): VNode {\n return this.$createElement('span', {\n class: 'v-btn__loader',\n }, this.$slots.loader || [this.$createElement(VProgressCircular, {\n props: {\n indeterminate: true,\n size: 23,\n width: 2,\n },\n })])\n },\n },\n\n render (h): VNode {\n const children = [\n this.genContent(),\n this.loading && this.genLoader(),\n ]\n const { tag, data } = this.generateRouteLink()\n const setColor = this.hasBg\n ? this.setBackgroundColor\n : this.setTextColor\n\n if (tag === 'button') {\n data.attrs!.type = this.type\n data.attrs!.disabled = this.disabled\n }\n data.attrs!.value = ['string', 'number'].includes(typeof this.value)\n ? this.value\n : JSON.stringify(this.value)\n\n return h(tag, this.disabled ? data : setColor(this.color, data), children)\n },\n})\n","/**\n * @copyright 2017 Alex Regan\n * @license MIT\n * @see https://github.com/alexsasharegan/vue-functional-data-merge\n */\n/* eslint-disable max-statements */\nimport { VNodeData } from 'vue'\nimport { camelize, wrapInArray } from './helpers'\n\nconst pattern = {\n styleList: /;(?![^(]*\\))/g,\n styleProp: /:(.*)/,\n} as const\n\nfunction parseStyle (style: string) {\n const styleMap: Dictionary = {}\n\n for (const s of style.split(pattern.styleList)) {\n let [key, val] = s.split(pattern.styleProp)\n key = key.trim()\n if (!key) {\n continue\n }\n // May be undefined if the `key: value` pair is incomplete.\n if (typeof val === 'string') {\n val = val.trim()\n }\n styleMap[camelize(key)] = val\n }\n\n return styleMap\n}\n\n/**\n * Intelligently merges data for createElement.\n * Merges arguments left to right, preferring the right argument.\n * Returns new VNodeData object.\n */\nexport default function mergeData (...vNodeData: VNodeData[]): VNodeData\nexport default function mergeData (): VNodeData {\n const mergeTarget: VNodeData & Dictionary = {}\n let i: number = arguments.length\n let prop: string\n\n // Allow for variadic argument length.\n while (i--) {\n // Iterate through the data properties and execute merge strategies\n // Object.keys eliminates need for hasOwnProperty call\n for (prop of Object.keys(arguments[i])) {\n switch (prop) {\n // Array merge strategy (array concatenation)\n case 'class':\n case 'directives':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeClasses(mergeTarget[prop], arguments[i][prop])\n }\n break\n case 'style':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeStyles(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Space delimited string concatenation strategy\n case 'staticClass':\n if (!arguments[i][prop]) {\n break\n }\n if (mergeTarget[prop] === undefined) {\n mergeTarget[prop] = ''\n }\n if (mergeTarget[prop]) {\n // Not an empty string, so concatenate\n mergeTarget[prop] += ' '\n }\n mergeTarget[prop] += arguments[i][prop].trim()\n break\n // Object, the properties of which to merge via array merge strategy (array concatenation).\n // Callback merge strategy merges callbacks to the beginning of the array,\n // so that the last defined callback will be invoked first.\n // This is done since to mimic how Object.assign merging\n // uses the last given value to assign.\n case 'on':\n case 'nativeOn':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeListeners(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Object merge strategy\n case 'attrs':\n case 'props':\n case 'domProps':\n case 'scopedSlots':\n case 'staticStyle':\n case 'hook':\n case 'transition':\n if (!arguments[i][prop]) {\n break\n }\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = {}\n }\n mergeTarget[prop] = { ...arguments[i][prop], ...mergeTarget[prop] }\n break\n // Reassignment strategy (no merge)\n default: // slot, key, ref, tag, show, keepAlive\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = arguments[i][prop]\n }\n }\n }\n }\n\n return mergeTarget\n}\n\nexport function mergeStyles (\n target: undefined | string | object[] | object,\n source: undefined | string | object[] | object\n) {\n if (!target) return source\n if (!source) return target\n\n target = wrapInArray(typeof target === 'string' ? parseStyle(target) : target)\n\n return (target as object[]).concat(typeof source === 'string' ? parseStyle(source) : source)\n}\n\nexport function mergeClasses (target: any, source: any) {\n if (!source) return target\n if (!target) return source\n\n return target ? wrapInArray(target).concat(source) : source\n}\n\nexport function mergeListeners (...args: [\n { [key: string]: Function | Function[] } | undefined,\n { [key: string]: Function | Function[] } | undefined\n]) {\n if (!args[0]) return args[1]\n if (!args[1]) return args[0]\n\n const dest: { [key: string]: Function | Function[] } = {}\n\n for (let i = 2; i--;) {\n const arg = args[i]\n for (const event in arg) {\n if (!arg[event]) continue\n\n if (dest[event]) {\n // Merge current listeners before (because we are iterating backwards).\n // Note that neither \"target\" or \"source\" must be altered.\n dest[event] = ([] as Function[]).concat(arg[event], dest[event])\n } else {\n // Straight assign.\n dest[event] = arg[event]\n }\n }\n }\n\n return dest\n}\n","import { FunctionalComponentOptions, VNode, VNodeData } from 'vue'\nimport mergeData from '../../util/mergeData'\n\nfunction mergeTransitions (\n dest: Function | Function[] = [],\n ...transitions: (Function | Function[])[]\n) {\n /* eslint-disable-next-line no-array-constructor */\n return Array().concat(dest, ...transitions)\n}\n\nexport function createSimpleTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n group: {\n type: Boolean,\n default: false,\n },\n hideOnLeave: {\n type: Boolean,\n default: false,\n },\n leaveAbsolute: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n render (h, context): VNode {\n const tag = `transition${context.props.group ? '-group' : ''}`\n const data: VNodeData = {\n props: {\n name,\n mode: context.props.mode,\n },\n on: {\n beforeEnter (el: HTMLElement) {\n el.style.transformOrigin = context.props.origin\n el.style.webkitTransformOrigin = context.props.origin\n },\n },\n }\n\n if (context.props.leaveAbsolute) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = el\n el._transitionInitialStyles = {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n }\n el.style.position = 'absolute'\n el.style.top = offsetTop + 'px'\n el.style.left = offsetLeft + 'px'\n el.style.width = offsetWidth + 'px'\n el.style.height = offsetHeight + 'px'\n })\n data.on!.afterLeave = mergeTransitions(data.on!.afterLeave, (el?: HTMLElement) => {\n if (el && el._transitionInitialStyles) {\n const { position, top, left, width, height } = el._transitionInitialStyles\n delete el._transitionInitialStyles\n el.style.position = position || ''\n el.style.top = top || ''\n el.style.left = left || ''\n el.style.width = width || ''\n el.style.height = height || ''\n }\n })\n }\n if (context.props.hideOnLeave) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => {\n (el as any)._initialDisplay = el.style.display\n el.style.display = 'none'\n })\n data.on!.afterLeave = mergeTransitions(data.on!.afterLeave, (el?: HTMLElement) => {\n if (el) el.style.display = (el as any)._initialDisplay || ''\n })\n }\n\n return h(tag, mergeData(context.data, data), context.children)\n },\n }\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record,\n mode = 'in-out'\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n mode: {\n type: String,\n default: mode,\n },\n },\n\n render (h, context): VNode {\n return h(\n 'transition',\n mergeData(context.data, {\n props: { name },\n on: functions,\n }),\n context.children\n )\n },\n }\n}\n","import { upperFirst } from '../../util/helpers'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle?: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'\n\n return {\n beforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n enter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle!\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n afterEnter: resetStyles,\n enterCancelled: resetStyles,\n\n leave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n afterLeave,\n leaveCancelled: afterLeave,\n }\n\n function afterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle![sizeProperty]\n el.style.overflow = el._initialStyle!.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import {\n createSimpleTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VDialogTopTransition = createSimpleTransition('dialog-top-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VScrollXTransition = createSimpleTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createSimpleTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport default {\n $_vuetify_subcomponents: {\n VCarouselTransition,\n VCarouselReverseTransition,\n VDialogTransition,\n VDialogBottomTransition,\n VDialogTopTransition,\n VFabTransition,\n VFadeTransition,\n VMenuTransition,\n VScaleTransition,\n VScrollXTransition,\n VScrollXReverseTransition,\n VScrollYTransition,\n VScrollYReverseTransition,\n VSlideXTransition,\n VSlideXReverseTransition,\n VSlideYTransition,\n VSlideYReverseTransition,\n VTabReverseTransition,\n VTabTransition,\n VExpandTransition,\n VExpandXTransition,\n },\n}\n","import Vue, { VueConstructor } from 'vue'\n\nexport type Proxyable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Proxyable\nexport function factory (\n prop = 'value',\n event = 'change'\n) {\n return Vue.extend({\n name: 'proxyable',\n\n model: {\n prop,\n event,\n },\n\n props: {\n [prop]: {\n required: false,\n },\n },\n\n data () {\n return {\n internalLazyValue: this[prop] as unknown,\n }\n },\n\n computed: {\n internalValue: {\n get (): unknown {\n return this.internalLazyValue\n },\n set (val: any) {\n if (val === this.internalLazyValue) return\n\n this.internalLazyValue = val\n\n this.$emit(event, val)\n },\n },\n },\n\n watch: {\n [prop] (val) {\n this.internalLazyValue = val\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Proxyable = factory()\n\nexport default Proxyable\n","import './VProgressLinear.sass'\n\n// Components\nimport {\n VFadeTransition,\n VSlideXTransition,\n} from '../transitions'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { FunctionalComponentOptions } from 'vue/types'\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n PositionableFactory(['absolute', 'fixed', 'top', 'bottom']),\n Proxyable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-progress-linear',\n\n directives: { intersect },\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n backgroundColor: {\n type: String,\n default: null,\n },\n backgroundOpacity: {\n type: [Number, String],\n default: null,\n },\n bufferValue: {\n type: [Number, String],\n default: 100,\n },\n color: {\n type: String,\n default: 'primary',\n },\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n query: Boolean,\n reverse: Boolean,\n rounded: Boolean,\n stream: Boolean,\n striped: Boolean,\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data () {\n return {\n internalLazyValue: this.value || 0,\n isVisible: true,\n }\n },\n\n computed: {\n __cachedBackground (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {\n staticClass: 'v-progress-linear__background',\n style: this.backgroundStyle,\n }))\n },\n __cachedBar (): VNode {\n return this.$createElement(this.computedTransition, [this.__cachedBarType])\n },\n __cachedBarType (): VNode {\n return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate\n },\n __cachedBuffer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__buffer',\n style: this.styles,\n })\n },\n __cachedDeterminate (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: `v-progress-linear__determinate`,\n style: {\n width: convertToUnit(this.normalizedValue, '%'),\n },\n }))\n },\n __cachedIndeterminate (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n 'v-progress-linear__indeterminate--active': this.active,\n },\n }, [\n this.genProgressBar('long'),\n this.genProgressBar('short'),\n ])\n },\n __cachedStream (): VNode | null {\n if (!this.stream) return null\n\n return this.$createElement('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-linear__stream',\n style: {\n width: convertToUnit(100 - this.normalizedBuffer, '%'),\n },\n }))\n },\n backgroundStyle (): object {\n const backgroundOpacity = this.backgroundOpacity == null\n ? (this.backgroundColor ? 1 : 0.3)\n : parseFloat(this.backgroundOpacity)\n\n return {\n opacity: backgroundOpacity,\n [this.isReversed ? 'right' : 'left']: convertToUnit(this.normalizedValue, '%'),\n width: convertToUnit(Math.max(0, this.normalizedBuffer - this.normalizedValue), '%'),\n }\n },\n classes (): object {\n return {\n 'v-progress-linear--absolute': this.absolute,\n 'v-progress-linear--fixed': this.fixed,\n 'v-progress-linear--query': this.query,\n 'v-progress-linear--reactive': this.reactive,\n 'v-progress-linear--reverse': this.isReversed,\n 'v-progress-linear--rounded': this.rounded,\n 'v-progress-linear--striped': this.striped,\n 'v-progress-linear--visible': this.isVisible,\n ...this.themeClasses,\n }\n },\n computedTransition (): FunctionalComponentOptions {\n return this.indeterminate ? VFadeTransition : VSlideXTransition\n },\n isReversed (): boolean {\n return this.$vuetify.rtl !== this.reverse\n },\n normalizedBuffer (): number {\n return this.normalize(this.bufferValue)\n },\n normalizedValue (): number {\n return this.normalize(this.internalLazyValue)\n },\n reactive (): boolean {\n return Boolean(this.$listeners.change)\n },\n styles (): object {\n const styles: Record = {}\n\n if (!this.active) {\n styles.height = 0\n }\n\n if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {\n styles.width = convertToUnit(this.normalizedBuffer, '%')\n }\n\n return styles\n },\n },\n\n methods: {\n genContent () {\n const slot = getSlot(this, 'default', { value: this.internalLazyValue })\n\n if (!slot) return null\n\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__content',\n }, slot)\n },\n genListeners () {\n const listeners = this.$listeners\n\n if (this.reactive) {\n listeners.click = this.onClick\n }\n\n return listeners\n },\n genProgressBar (name: 'long' | 'short') {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n [name]: true,\n },\n }))\n },\n onClick (e: MouseEvent) {\n if (!this.reactive) return\n\n const { width } = this.$el.getBoundingClientRect()\n\n this.internalValue = e.offsetX / width * 100\n },\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n this.isVisible = isIntersecting\n },\n normalize (value: string | number) {\n if (value < 0) return 0\n if (value > 100) return 100\n return parseFloat(value)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-progress-linear',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': this.normalizedBuffer,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n directives: [{\n name: 'intersect',\n value: this.onObserve,\n }],\n style: {\n bottom: this.bottom ? 0 : undefined,\n height: this.active ? convertToUnit(this.height) : 0,\n top: this.top ? 0 : undefined,\n },\n on: this.genListeners(),\n }\n\n return h('div', data, [\n this.__cachedStream,\n this.__cachedBackground,\n this.__cachedBuffer,\n this.__cachedBar,\n this.genContent(),\n ])\n },\n})\n","import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n","import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../../components/VProgressLinear'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false,\n },\n loaderHeight: {\n type: [Number, String],\n default: 2,\n },\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return this.$slots.progress || this.$createElement(VProgressLinear, {\n props: {\n absolute: true,\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: this.loaderHeight,\n indeterminate: true,\n },\n })\n },\n },\n})\n","// Styles\nimport './VCard.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\nimport Routable from '../../mixins/routable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Loadable,\n Routable,\n VSheet\n).extend({\n name: 'v-card',\n\n props: {\n flat: Boolean,\n hover: Boolean,\n img: String,\n link: Boolean,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n raised: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-card': true,\n ...Routable.options.computed.classes.call(this),\n 'v-card--flat': this.flat,\n 'v-card--hover': this.hover,\n 'v-card--link': this.isClickable,\n 'v-card--loading': this.loading,\n 'v-card--disabled': this.disabled,\n 'v-card--raised': this.raised,\n ...VSheet.options.computed.classes.call(this),\n }\n },\n styles (): object {\n const style: Dictionary = {\n ...VSheet.options.computed.styles.call(this),\n }\n\n if (this.img) {\n style.background = `url(\"${this.img}\") center center / cover no-repeat`\n }\n\n return style\n },\n },\n\n methods: {\n genProgress () {\n const render = Loadable.options.methods.genProgress.call(this)\n\n if (!render) return null\n\n return this.$createElement('div', {\n staticClass: 'v-card__progress',\n key: 'progress',\n }, [render])\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.style = this.styles\n\n if (this.isClickable) {\n data.attrs = data.attrs || {}\n data.attrs.tabindex = 0\n }\n\n return h(tag, this.setBackgroundColor(this.color, data), [\n this.genProgress(),\n this.$slots.default,\n ])\n },\n})\n","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","import './VGrid.sass'\n\nimport Vue, { VNode, PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-col',\n functional: true,\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n tag: {\n type: String,\n default: 'div',\n },\n },\n render (h, { props, data, children, parent }): VNode {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('col-'))\n\n classList.push({\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: !hasColClasses || !props.cols,\n [`col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(props.tag, mergeData(data, { class: classList }), children)\n },\n})\n","// Types\nimport Vue, { VNode } from 'vue'\n\nexport default function VGrid (name: string) {\n /* @vue/component */\n return Vue.extend({\n name: `v-${name}`,\n\n functional: true,\n\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n render (h, { props, data, children }): VNode {\n data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n const classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n\n if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(props.tag, data, children)\n },\n })\n}\n","import './_grid.sass'\nimport './VGrid.sass'\n\nimport Grid from './grid'\n\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default Grid('container').extend({\n name: 'v-container',\n functional: true,\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n fluid: {\n type: Boolean,\n default: false,\n },\n },\n render (h, { props, data, children }) {\n let classes\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'container',\n class: Array({\n 'container--fluid': props.fluid,\n }).concat(classes || []),\n }),\n children\n )\n },\n})\n","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","import './VResponsive.sass'\n\n// Mixins\nimport Measurable, { NumberOrNumberString } from '../../mixins/measurable'\n\n// Types\nimport { VNode } from 'vue'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Measurable).extend({\n name: 'v-responsive',\n\n props: {\n aspectRatio: [String, Number] as NumberOrNumberString,\n contentClass: String,\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.aspectRatio)\n },\n aspectStyle (): object | undefined {\n return this.computedAspectRatio\n ? { paddingBottom: (1 / this.computedAspectRatio) * 100 + '%' }\n : undefined\n },\n __cachedSizer (): VNode | [] {\n if (!this.aspectStyle) return []\n\n return this.$createElement('div', {\n style: this.aspectStyle,\n staticClass: 'v-responsive__sizer',\n })\n },\n },\n\n methods: {\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-responsive__content',\n class: this.contentClass,\n }, this.$slots.default)\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-responsive',\n style: this.measurableStyles,\n on: this.$listeners,\n }, [\n this.__cachedSizer,\n this.genContent(),\n ])\n },\n})\n","import VResponsive from './VResponsive'\n\nexport { VResponsive }\nexport default VResponsive\n","// Styles\nimport './VImg.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VResponsive from '../VResponsive'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport mergeData from '../../util/mergeData'\nimport { consoleWarn } from '../../util/console'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src: string\n srcset?: string\n lazySrc: string\n aspect: number\n}\n\nconst hasIntersect = typeof window !== 'undefined' && 'IntersectionObserver' in window\n\n/* @vue/component */\nexport default mixins(\n VResponsive,\n Themeable,\n).extend({\n name: 'v-img',\n\n directives: { intersect },\n\n props: {\n alt: String,\n contain: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n } as PropValidator,\n position: {\n type: String,\n default: 'center center',\n },\n sizes: String,\n src: {\n type: [String, Object],\n default: '',\n } as PropValidator,\n srcset: String,\n transition: {\n type: [Boolean, String],\n default: 'fade-transition',\n },\n },\n\n data () {\n return {\n currentSrc: '', // Set from srcset\n image: null as HTMLImageElement | null,\n isLoading: true,\n calculatedAspectRatio: undefined as number | undefined,\n naturalWidth: undefined as number | undefined,\n hasError: false,\n }\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio)\n },\n normalisedSrc (): srcObject {\n return this.src && typeof this.src === 'object'\n ? {\n src: this.src.src,\n srcset: this.srcset || this.src.srcset,\n lazySrc: this.lazySrc || this.src.lazySrc,\n aspect: Number(this.aspectRatio || this.src.aspect),\n } : {\n src: this.src,\n srcset: this.srcset,\n lazySrc: this.lazySrc,\n aspect: Number(this.aspectRatio || 0),\n }\n },\n __cachedImage (): VNode | [] {\n if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc || this.gradient)) return []\n\n const backgroundImage: string[] = []\n const src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc\n\n if (this.gradient) backgroundImage.push(`linear-gradient(${this.gradient})`)\n if (src) backgroundImage.push(`url(\"${src}\")`)\n\n const image = this.$createElement('div', {\n staticClass: 'v-image__image',\n class: {\n 'v-image__image--preload': this.isLoading,\n 'v-image__image--contain': this.contain,\n 'v-image__image--cover': !this.contain,\n },\n style: {\n backgroundImage: backgroundImage.join(', '),\n backgroundPosition: this.position,\n },\n key: +this.isLoading,\n })\n\n /* istanbul ignore if */\n if (!this.transition) return image\n\n return this.$createElement('transition', {\n attrs: {\n name: this.transition,\n mode: 'in-out',\n },\n }, [image])\n },\n },\n\n watch: {\n src () {\n // Force re-init when src changes\n if (!this.isLoading) this.init(undefined, undefined, true)\n else this.loadImage()\n },\n '$vuetify.breakpoint.width': 'getSrc',\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init (\n entries?: IntersectionObserverEntry[],\n observer?: IntersectionObserver,\n isIntersecting?: boolean\n ) {\n // If the current browser supports the intersection\n // observer api, the image is not observable, and\n // the eager prop isn't being used, do not load\n if (\n hasIntersect &&\n !isIntersecting &&\n !this.eager\n ) return\n\n if (this.normalisedSrc.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = this.normalisedSrc.lazySrc\n this.pollForSize(lazyImg, null)\n }\n /* istanbul ignore else */\n if (this.normalisedSrc.src) this.loadImage()\n },\n onLoad () {\n this.getSrc()\n this.isLoading = false\n this.$emit('load', this.src)\n\n if (\n this.image &&\n (this.normalisedSrc.src.endsWith('.svg') || this.normalisedSrc.src.startsWith('data:image/svg+xml'))\n ) {\n if (this.image.naturalHeight && this.image.naturalWidth) {\n this.naturalWidth = this.image.naturalWidth\n this.calculatedAspectRatio = this.image.naturalWidth / this.image.naturalHeight\n } else {\n this.calculatedAspectRatio = 1\n }\n }\n },\n onError () {\n this.hasError = true\n this.$emit('error', this.src)\n },\n getSrc () {\n /* istanbul ignore else */\n if (this.image) this.currentSrc = this.image.currentSrc || this.image.src\n },\n loadImage () {\n const image = new Image()\n this.image = image\n\n image.onload = () => {\n /* istanbul ignore if */\n if (image.decode) {\n image.decode().catch((err: DOMException) => {\n consoleWarn(\n `Failed to decode image, trying to render anyway\\n\\n` +\n `src: ${this.normalisedSrc.src}` +\n (err.message ? `\\nOriginal error: ${err.message}` : ''),\n this\n )\n }).then(this.onLoad)\n } else {\n this.onLoad()\n }\n }\n image.onerror = this.onError\n\n this.hasError = false\n this.sizes && (image.sizes = this.sizes)\n this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n image.src = this.normalisedSrc.src\n this.$emit('loadstart', this.normalisedSrc.src)\n\n this.aspectRatio || this.pollForSize(image)\n this.getSrc()\n },\n pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight, naturalWidth } = img\n\n if (naturalHeight || naturalWidth) {\n this.naturalWidth = naturalWidth\n this.calculatedAspectRatio = naturalWidth / naturalHeight\n } else if (!img.complete && this.isLoading && !this.hasError && timeout != null) {\n setTimeout(poll, timeout)\n }\n }\n\n poll()\n },\n genContent () {\n const content: VNode = VResponsive.options.methods.genContent.call(this)\n if (this.naturalWidth) {\n this._b(content.data!, 'div', {\n style: { width: `${this.naturalWidth}px` },\n })\n }\n\n return content\n },\n __genPlaceholder (): VNode | void {\n if (this.$slots.placeholder) {\n const placeholder = this.isLoading\n ? [this.$createElement('div', {\n staticClass: 'v-image__placeholder',\n }, this.$slots.placeholder)]\n : []\n\n if (!this.transition) return placeholder[0]\n\n return this.$createElement('transition', {\n props: {\n appear: true,\n name: this.transition,\n },\n }, placeholder)\n }\n },\n },\n\n render (h): VNode {\n const node = VResponsive.options.render.call(this, h)\n\n const data = mergeData(node.data!, {\n staticClass: 'v-image',\n attrs: {\n 'aria-label': this.alt,\n role: this.alt ? 'img' : undefined,\n },\n class: this.themeClasses,\n // Only load intersect directive if it\n // will work in the current browser.\n directives: hasIntersect\n ? [{\n name: 'intersect',\n modifiers: { once: true },\n value: {\n handler: this.init,\n options: this.options,\n },\n }]\n : undefined,\n })\n\n node.children = [\n this.__cachedSizer,\n this.__cachedImage,\n this.__genPlaceholder(),\n this.genContent(),\n ] as VNode[]\n\n return h(node.tag, data, node.children)\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","// Styles\nimport './VSubheader.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-subheader',\n\n props: {\n inset: Boolean,\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-subheader',\n class: {\n 'v-subheader--inset': this.inset,\n ...this.themeClasses,\n },\n attrs: this.$attrs,\n on: this.$listeners,\n }, this.$slots.default)\n },\n})\n","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=6003c7cf&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=6003c7cf&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6003c7cf\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCol,VContainer,VIcon,VImg,VProgressLinear,VRow,VSubheader})\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fixed` method\n// https://tc39.es/ecma262/#sec-string.prototype.fixed\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, {\n fixed: function fixed() {\n return createHTML(this, 'tt', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.small` method\n// https://tc39.es/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.array.flat.js","webpack:///./node_modules/core-js/modules/es.map.js","webpack:///./node_modules/core-js/internals/collection-strong.js","webpack:///./node_modules/core-js/internals/collection.js","webpack:///./src/assets/img/logo-text-colored.png","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./src/views/Home.vue?6e6e","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///./node_modules/core-js/internals/flatten-into-array.js","webpack:///./src/views/Home.vue?00f9","webpack:///./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///./src/progress.js","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?493c","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///../../../src/mixins/colorable/index.ts","webpack:///../../../src/mixins/elevatable/index.ts","webpack:///../../../src/mixins/measurable/index.ts","webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack:///../../../src/mixins/roundable/index.ts","webpack:///../../../src/components/VSheet/VSheet.ts","webpack:///../../../src/components/VSheet/index.ts","webpack:///../../../src/directives/intersect/index.ts","webpack:///../../../src/components/VProgressCircular/VProgressCircular.ts","webpack:///../../../src/components/VProgressCircular/index.ts","webpack:///../../../src/mixins/registrable/index.ts","webpack:///../../../src/mixins/groupable/index.ts","webpack:///../../../src/mixins/toggleable/index.ts","webpack:///../../../src/mixins/positionable/index.ts","webpack:///../../../src/directives/ripple/index.ts","webpack:///../../../src/mixins/routable/index.ts","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///../../../src/components/VBtn/VBtn.ts","webpack:///../../src/util/mergeData.ts","webpack:///../../../src/components/transitions/createTransition.ts","webpack:///../../../src/components/transitions/expand-transition.ts","webpack:///../../../src/components/transitions/index.ts","webpack:///../../../src/mixins/proxyable/index.ts","webpack:///../../../src/components/VProgressLinear/VProgressLinear.ts","webpack:///../../../src/components/VProgressLinear/index.ts","webpack:///../../../src/mixins/loadable/index.ts","webpack:///../../../src/components/VCard/VCard.ts","webpack:///../../../src/components/VCard/index.ts","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///../../../src/components/VGrid/grid.ts","webpack:///../../../src/components/VGrid/VContainer.ts","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VSubheader/VSubheader.ts","webpack:///./src/views/Home.vue?1dce","webpack:///./node_modules/core-js/modules/es.string.fixed.js","webpack:///./node_modules/core-js/modules/es.string.small.js"],"names":["$","flattenIntoArray","toObject","toLength","toInteger","arraySpeciesCreate","target","proto","flat","depthArg","arguments","length","undefined","O","this","sourceLen","A","collection","collectionStrong","module","exports","init","defineProperty","f","create","redefineAll","bind","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","set","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","C","that","iterable","type","index","first","last","size","AS_ENTRIES","getInternalState","define","key","value","previous","state","entry","getEntry","next","removed","prototype","clear","data","prev","forEach","callbackfn","boundFunction","has","get","add","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","done","global","isForced","redefine","InternalMetadataModule","isObject","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","common","indexOf","IS_WEAK","NativeConstructor","NativePrototype","Constructor","exported","fixMethod","KEY","nativeMethod","call","REPLACE","entries","enable","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","constructor","forced","getOwnPropertyDescriptor","toString","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","$endsWith","endsWith","min","Math","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","String","writable","searchString","endPosition","len","end","search","slice","runtime","Op","Object","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","obj","enumerable","configurable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","makeInvokeMethod","tryCatch","fn","arg","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","method","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iteratorMethod","isNaN","i","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","charAt","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","createHTML","forcedStringHTMLMethod","link","url","isArray","original","source","start","depth","mapper","thisArg","element","targetIndex","sourceIndex","mapFn","_vm","_h","$createElement","_c","_self","attrs","staticClass","_v","staticStyle","jak1BlackLabelStatus","srcFilesFinishedValue","_s","srcFilesFinished","srcFilesTotal","srcFilesStartedValue","srcFilesStarted","dataFilesStartedValue","dataFilesStarted","dataFilesTotal","_l","pr","title","user","login","body","html_url","staticRenderFns","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","apply","projectProgress","require","components","recentPRs","mounted","methods","truncateString","str","num","loadRecentPRs","makeWatcher","$data","val","attrs$","listeners$","created","immediate","props","color","setBackgroundColor","console","setTextColor","colorName","elevation","Number","computed","computedElevation","elevationClasses","parseInt","height","maxHeight","maxWidth","minHeight","minWidth","width","measurableStyles","styles","_createForOfIteratorHelper","o","allowArrayLike","it","Array","unsupportedIterableToArray","F","s","n","e","_e","normalCompletion","didErr","step","_e2","rounded","Boolean","tile","roundedClasses","composite","mixins","outlined","shaped","tag","default","classes","render","class","style","on","h","$slots","inserted","window","modifiers","binding","handler","options","observer","IntersectionObserver","el","isIntersecting","unbind","observe","Intersect","directives","intersect","button","indeterminate","rotate","radius","isVisible","calculatedSize","circumference","normalizedValue","parseFloat","strokeDashArray","strokeDashOffset","strokeWidth","svgStyles","transform","viewBoxSize","genCircle","fill","cx","cy","r","offset","genSvg","children","xmlns","viewBox","genInfo","onObserve","role","$listeners","generateWarning","child","defaultImpl","register","unregister","parent","inject","activeClass","namespace","disabled","isActive","groupClasses","beforeDestroy","toggle","factory","prop","event","model","required","watch","$emit","availableProps","absolute","bottom","fixed","left","right","top","selected","rippleStop","DELAY_RIPPLE","opacity","isTouchEvent","isKeyboardEvent","calculate","localX","localY","scale","centerX","centerY","x","y","ripples","show","container","document","animation","performance","setTimeout","hide","diff","delay","isRippleEnabled","rippleShow","rippleHide","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyboardRippleHide","focusRippleHide","updateRipple","enabled","passive","removeListeners","directive","update","wasEnabled","Ripple","append","exact","exactPath","exactActiveClass","href","to","nuxt","replace","ripple","proxyClass","computedRipple","isClickable","isLink","$attrs","$route","click","generateRouteLink","tabindex","path","onRouteChange","$refs","large","small","xLarge","xSmall","medium","sizeableClasses","baseMixins","btnToggle","block","depressed","fab","icon","loading","plain","retainFocusOnClick","text","defaultRipple","circle","hasBg","isElevated","isRound","breakingProps","replacement","$el","genContent","genLoader","loader","setColor","includes","JSON","pattern","styleList","styleProp","parseStyle","styleMap","mergeTarget","mergeClasses","mergeStyles","mergeListeners","dest","mergeTransitions","origin","functional","group","hideOnLeave","leaveAbsolute","mode","beforeEnter","offsetHeight","position","offsetTop","offsetLeft","offsetWidth","mergeData","functions","expandedParentClass","sizeProperty","offsetProperty","transition","overflow","enter","initialStyle","requestAnimationFrame","afterEnter","enterCancelled","leave","afterLeave","leaveCancelled","resetStyles","VFadeTransition","createSimpleTransition","VSlideXTransition","createJavascriptTransition","internalLazyValue","internalValue","Proxyable","active","backgroundColor","backgroundOpacity","bufferValue","query","stream","striped","__cachedBackground","backgroundStyle","__cachedBar","__cachedBarType","__cachedBuffer","__cachedDeterminate","__cachedIndeterminate","genProgressBar","__cachedStream","isReversed","normalizedBuffer","themeClasses","computedTransition","$vuetify","rtl","normalize","reactive","slot","genListeners","listeners","onClick","loaderHeight","genProgress","progress","hover","img","raised","VCardActions","VCardText","breakpoints","breakpointProps","offsetProps","orderProps","propMap","col","order","breakpointClass","className","breakpoint","cache","cols","alignSelf","validator","cacheKey","classList","hasColClasses","id","fluid","isFontAwesome5","some","iconType","isSvgPath","test","SIZE_MAP","dense","hasClickListener","getIcon","iconName","getSize","sizes","explicitSize","getDefaultData","getSvgWrapperData","fontSize","wrapperData","applyColors","renderFontIcon","newChildren","delimiterIndex","isMaterialIcon","renderSvgIcon","svgData","d","renderSvgIconComponent","component","$_wrapperFor","aspectRatio","contentClass","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","hasIntersect","alt","contain","eager","gradient","lazySrc","root","rootMargin","threshold","src","srcset","currentSrc","image","isLoading","calculatedAspectRatio","naturalWidth","hasError","normalisedSrc","aspect","__cachedImage","backgroundImage","backgroundPosition","loadImage","lazyImg","onLoad","startsWith","naturalHeight","onError","getSrc","pollForSize","timeout","poll","content","__genPlaceholder","placeholder","appear","node","once","ALIGNMENT","makeProps","prefix","def","alignValidator","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","align","justify","alignContent","classMap","noGutters","inset","VBtn","VCard","VCol","VContainer","VIcon","VImg","VProgressLinear","VRow","VSubheader"],"mappings":"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","file":"js/about.e40bb13c.js","sourcesContent":["'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://tc39.es/ecma262/#sec-array.prototype.flat\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var nativeMethod = NativePrototype[KEY];\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n nativeMethod.call(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n nativeMethod.call(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, Constructor, CONSTRUCTOR_NAME);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","module.exports = __webpack_public_path__ + \"img/logo-text-colored.5cda006b.png\";","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\nvar $endsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = toString(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=6003c7cf&scoped=true&lang=css&\"","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg, 3) : false;\n var element;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length');\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',{staticClass:\"bg-img\",attrs:{\"justify\":\"center\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"12\",\"align\":\"center\"}},[_c('v-img',{attrs:{\"max-height\":\"150\",\"max-width\":\"250\",\"src\":require(\"@/assets/img/logo-text-colored.png\")}}),_c('br'),_c('h4',[_vm._v(\" Reviving the Language that Brought us the Jak & Daxter Series \")]),_c('br'),_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"#project-status\",\"rounded\":\"\",\"color\":\"primary\"}},[_c('v-icon',[_vm._v(\"mdi-calendar-check\")]),_vm._v(\" Project Status \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"rounded\":\"\",\"color\":\"secondary\",\"href\":\"#recent-updates\"}},[_c('v-icon',[_vm._v(\"mdi-update\")]),_vm._v(\" Recent Updates \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"/jak-project/api-docs.html\",\"target\":\"_blank\",\"rounded\":\"\",\"color\":\"deep-purple\"}},[_c('v-icon',[_vm._v(\"mdi-file-document\")]),_vm._v(\" Documentation \")],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"href\":\"https://github.com/water111/jak-project\",\"target\":\"_blank\",\"rounded\":\"\",\"color\":\"accent\"}},[_c('v-icon',[_vm._v(\"mdi-git\")]),_vm._v(\" Contribute \")],1)],1)],1)],1)],1),_c('v-row',[_c('v-container',[_c('v-row',{staticStyle:{\"margin-top\":\"3em\"},attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h1',{staticClass:\"orange--text text--darken-1\",attrs:{\"id\":\"project-status\"}},[_vm._v(\" Project Status \")])])],1),_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h2',{staticClass:\"orange--text text--lighten-3\"},[_vm._v(\"Jak 1 - Black Label\")])])],1),_c('v-row',{attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"10\"}},[_c('v-subheader',[_vm._v(\"Decompilation\")]),_c('v-progress-linear',{attrs:{\"color\":\"green\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.srcFilesFinishedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Source Files Finished - \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesFinished)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesTotal)+\" \")]),_c('br'),_c('v-progress-linear',{attrs:{\"color\":\"yellow\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.srcFilesStartedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Source Files Started - \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesStarted)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.srcFilesTotal)+\" \")]),_c('br'),_c('v-progress-linear',{attrs:{\"color\":\"teal\",\"buffer-value\":\"0\",\"value\":_vm.jak1BlackLabelStatus.dataFilesStartedValue,\"stream\":\"\",\"height\":\"25\"}},[_vm._v(\" Data Files Started - \"+_vm._s(_vm.jak1BlackLabelStatus.dataFilesStarted)+\" / \"+_vm._s(_vm.jak1BlackLabelStatus.dataFilesTotal)+\" \")])],1)],1),_c('v-row',{staticStyle:{\"margin-top\":\"5em\"},attrs:{\"align\":\"center\",\"justify\":\"center\"}},[_c('v-col',{attrs:{\"align\":\"center\"}},[_c('h1',{staticClass:\"orange--text text--darken-1\",attrs:{\"id\":\"recent-updates\"}},[_vm._v(\" Recent Updates \")])])],1),_c('v-row',{staticStyle:{\"margin-bottom\":\"10em\"},attrs:{\"justify\":\"center\"}},_vm._l((_vm.recentPRs),function(pr,index){return _c('v-col',{key:'pr' - index,attrs:{\"cols\":\"4\"}},[_c('v-card',[_c('v-card-text',{staticStyle:{\"overflow-y\":\"auto\",\"height\":\"300px\"}},[_c('p',{staticClass:\"text-h5 orange--text text--lighten-3\"},[_vm._v(\" \"+_vm._s(pr.title)+\" \")]),_c('p',[_vm._v(\" \"+_vm._s(pr.user.login)+\" \")]),_c('div',{staticClass:\"text--primary\"},[_c('pre',{staticClass:\"wrapped-pre\"},[_vm._v(_vm._s(pr.body))])])]),_c('v-card-actions',[_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"accent\",\"href\":pr.html_url,\"target\":\"_blank\"}},[_vm._v(\" View Change \")])],1)],1)],1)}),1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","const projectProgress = require('./config/progress.json')\n\nexport default projectProgress\n","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import Vue, { WatchHandler } from 'vue'\n\n/**\n * This mixin provides `attrs$` and `listeners$` to work around\n * vue bug https://github.com/vuejs/vue/issues/10115\n */\n\nfunction makeWatcher (property: string): ThisType & WatchHandler {\n return function (this: Vue, val, oldVal) {\n for (const attr in oldVal) {\n if (!Object.prototype.hasOwnProperty.call(val, attr)) {\n this.$delete(this.$data[property], attr)\n }\n }\n for (const attr in val) {\n this.$set(this.$data[property], attr, val[attr])\n }\n }\n}\n\nexport default Vue.extend({\n data: () => ({\n attrs$: {} as Dictionary,\n listeners$: {} as Dictionary,\n }),\n\n created () {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n // Make sure to use `attrs$` instead of `$attrs` (confusing right?)\n this.$watch('$attrs', makeWatcher('attrs$'), { immediate: true })\n this.$watch('$listeners', makeWatcher('listeners$'), { immediate: true })\n },\n})\n","import Vue from 'vue'\nimport { VNodeData } from 'vue/types/vnode'\nimport { consoleError } from '../../util/console'\nimport { isCssColor } from '../../util/colorUtils'\n\nexport default Vue.extend({\n name: 'colorable',\n\n props: {\n color: String,\n },\n\n methods: {\n setBackgroundColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (typeof data.style === 'string') {\n // istanbul ignore next\n consoleError('style must be an object', this)\n // istanbul ignore next\n return data\n }\n if (typeof data.class === 'string') {\n // istanbul ignore next\n consoleError('class must be an object', this)\n // istanbul ignore next\n return data\n }\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n 'background-color': `${color}`,\n 'border-color': `${color}`,\n }\n } else if (color) {\n data.class = {\n ...data.class,\n [color]: true,\n }\n }\n\n return data\n },\n\n setTextColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (typeof data.style === 'string') {\n // istanbul ignore next\n consoleError('style must be an object', this)\n // istanbul ignore next\n return data\n }\n if (typeof data.class === 'string') {\n // istanbul ignore next\n consoleError('class must be an object', this)\n // istanbul ignore next\n return data\n }\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n color: `${color}`,\n 'caret-color': `${color}`,\n }\n } else if (color) {\n const [colorName, colorModifier] = color.toString().trim().split(' ', 2) as (string | undefined)[]\n data.class = {\n ...data.class,\n [colorName + '--text']: true,\n }\n if (colorModifier) {\n data.class['text--' + colorModifier] = true\n }\n }\n return data\n },\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'elevatable',\n\n props: {\n elevation: [Number, String],\n },\n\n computed: {\n computedElevation (): string | number | undefined {\n return this.elevation\n },\n elevationClasses (): Record {\n const elevation = this.computedElevation\n\n if (elevation == null) return {}\n if (isNaN(parseInt(elevation))) return {}\n return { [`elevation-${this.elevation}`]: true }\n },\n },\n})\n","// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'roundable',\n\n props: {\n rounded: [Boolean, String],\n tile: Boolean,\n },\n\n computed: {\n roundedClasses (): Record {\n const composite = []\n const rounded = typeof this.rounded === 'string'\n ? String(this.rounded)\n : this.rounded === true\n\n if (this.tile) {\n composite.push('rounded-0')\n } else if (typeof rounded === 'string') {\n const values = rounded.split(' ')\n\n for (const value of values) {\n composite.push(`rounded-${value}`)\n }\n } else if (rounded) {\n composite.push('rounded')\n }\n\n return composite.length > 0 ? {\n [composite.join(' ')]: true,\n } : {}\n },\n },\n})\n","// Styles\nimport './VSheet.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Measurable from '../../mixins/measurable'\nimport Roundable from '../../mixins/roundable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n Colorable,\n Elevatable,\n Measurable,\n Roundable,\n Themeable\n).extend({\n name: 'v-sheet',\n\n props: {\n outlined: Boolean,\n shaped: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-sheet': true,\n 'v-sheet--outlined': this.outlined,\n 'v-sheet--shaped': this.shaped,\n ...this.themeClasses,\n ...this.elevationClasses,\n ...this.roundedClasses,\n }\n },\n styles (): object {\n return this.measurableStyles\n },\n },\n\n render (h): VNode {\n const data = {\n class: this.classes,\n style: this.styles,\n on: this.listeners$,\n }\n\n return h(\n this.tag,\n this.setBackgroundColor(this.color, data),\n this.$slots.default\n )\n },\n})\n","import VSheet from './VSheet'\n\nexport { VSheet }\nexport default VSheet\n","import { VNodeDirective } from 'vue/types/vnode'\n\ntype ObserveHandler = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n isIntersecting: boolean,\n) => void\n\ninterface ObserveVNodeDirective extends Omit {\n value?: ObserveHandler | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers?: {\n once?: boolean\n quiet?: boolean\n }\n}\n\nfunction inserted (el: HTMLElement, binding: ObserveVNodeDirective) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) return\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } = typeof value === 'object'\n ? value\n : { handler: value, options: {} }\n const observer = new IntersectionObserver((\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n /* istanbul ignore if */\n if (!el._observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n el._observe.init\n ) && (\n !modifiers.once ||\n isIntersecting ||\n !el._observe.init\n )\n ) {\n handler(entries, observer, isIntersecting)\n }\n\n if (isIntersecting && modifiers.once) unbind(el)\n else el._observe.init = true\n }, options)\n\n el._observe = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unbind (el: HTMLElement) {\n /* istanbul ignore if */\n if (!el._observe) return\n\n el._observe.observer.unobserve(el)\n delete el._observe\n}\n\nexport const Intersect = {\n inserted,\n unbind,\n}\n\nexport default Intersect\n","// Styles\nimport './VProgressCircular.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utils\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeChildren } from 'vue'\n\n/* @vue/component */\nexport default Colorable.extend({\n name: 'v-progress-circular',\n\n directives: { intersect },\n\n props: {\n button: Boolean,\n indeterminate: Boolean,\n rotate: {\n type: [Number, String],\n default: 0,\n },\n size: {\n type: [Number, String],\n default: 32,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data: () => ({\n radius: 20,\n isVisible: true,\n }),\n\n computed: {\n calculatedSize (): number {\n return Number(this.size) + (this.button ? 8 : 0)\n },\n\n circumference (): number {\n return 2 * Math.PI * this.radius\n },\n\n classes (): object {\n return {\n 'v-progress-circular--visible': this.isVisible,\n 'v-progress-circular--indeterminate': this.indeterminate,\n 'v-progress-circular--button': this.button,\n }\n },\n\n normalizedValue (): number {\n if (this.value < 0) {\n return 0\n }\n\n if (this.value > 100) {\n return 100\n }\n\n return parseFloat(this.value)\n },\n\n strokeDashArray (): number {\n return Math.round(this.circumference * 1000) / 1000\n },\n\n strokeDashOffset (): string {\n return ((100 - this.normalizedValue) / 100) * this.circumference + 'px'\n },\n\n strokeWidth (): number {\n return Number(this.width) / +this.size * this.viewBoxSize * 2\n },\n\n styles (): object {\n return {\n height: convertToUnit(this.calculatedSize),\n width: convertToUnit(this.calculatedSize),\n }\n },\n\n svgStyles (): object {\n return {\n transform: `rotate(${Number(this.rotate)}deg)`,\n }\n },\n\n viewBoxSize (): number {\n return this.radius / (1 - Number(this.width) / +this.size)\n },\n },\n\n methods: {\n genCircle (name: string, offset: string | number): VNode {\n return this.$createElement('circle', {\n class: `v-progress-circular__${name}`,\n attrs: {\n fill: 'transparent',\n cx: 2 * this.viewBoxSize,\n cy: 2 * this.viewBoxSize,\n r: this.radius,\n 'stroke-width': this.strokeWidth,\n 'stroke-dasharray': this.strokeDashArray,\n 'stroke-dashoffset': offset,\n },\n })\n },\n genSvg (): VNode {\n const children = [\n this.indeterminate || this.genCircle('underlay', 0),\n this.genCircle('overlay', this.strokeDashOffset),\n ] as VNodeChildren\n\n return this.$createElement('svg', {\n style: this.svgStyles,\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: `${this.viewBoxSize} ${this.viewBoxSize} ${2 * this.viewBoxSize} ${2 * this.viewBoxSize}`,\n },\n }, children)\n },\n genInfo (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-circular__info',\n }, this.$slots.default)\n },\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n this.isVisible = isIntersecting\n },\n },\n\n render (h): VNode {\n return h('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-circular',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n directives: [{\n name: 'intersect',\n value: this.onObserve,\n }],\n style: this.styles,\n on: this.$listeners,\n }), [\n this.genSvg(),\n this.genInfo(),\n ])\n },\n})\n","import VProgressCircular from './VProgressCircular'\n\nexport { VProgressCircular }\nexport default VProgressCircular\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable = VueConstructor : {\n register (...props: any[]): void\n unregister (self: any): void\n }\n}>\n\nexport function inject<\n T extends string, C extends VueConstructor | null = null\n> (namespace: T, child?: string, parent?: string): Registrable {\n const defaultImpl = child && parent ? {\n register: generateWarning(child, parent),\n unregister: generateWarning(child, parent),\n } : null\n\n return Vue.extend({\n name: 'registrable-inject',\n\n inject: {\n [namespace]: {\n default: defaultImpl,\n },\n },\n })\n}\n\nexport function provide (namespace: string, self = false) {\n return Vue.extend({\n name: 'registrable-provide',\n\n provide (): object {\n return {\n [namespace]: self ? this : {\n register: (this as any).register,\n unregister: (this as any).unregister,\n },\n }\n },\n })\n}\n","// Mixins\nimport { Registrable, inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { ExtractVue } from '../../util/mixins'\nimport { VueConstructor } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type Groupable = VueConstructor> & {\n activeClass: string\n isActive: boolean\n disabled: boolean\n groupClasses: object\n toggle (): void\n}>\n\nexport function factory (\n namespace: T,\n child?: string,\n parent?: string\n): Groupable {\n return RegistrableInject(namespace, child, parent).extend({\n name: 'groupable',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this[namespace]) return undefined\n\n return this[namespace].activeClass\n },\n } as any as PropValidator,\n disabled: Boolean,\n },\n\n data () {\n return {\n isActive: false,\n }\n },\n\n computed: {\n groupClasses (): object {\n if (!this.activeClass) return {}\n\n return {\n [this.activeClass]: this.isActive,\n }\n },\n },\n\n created () {\n this[namespace] && (this[namespace] as any).register(this)\n },\n\n beforeDestroy () {\n this[namespace] && (this[namespace] as any).unregister(this)\n },\n\n methods: {\n toggle () {\n this.$emit('change')\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n","import Vue, { VueConstructor } from 'vue'\n\nexport type Toggleable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Toggleable\nexport function factory (prop = 'value', event = 'input') {\n return Vue.extend({\n name: 'toggleable',\n\n model: { prop, event },\n\n props: {\n [prop]: { required: false },\n },\n\n data () {\n return {\n isActive: !!this[prop],\n }\n },\n\n watch: {\n [prop] (val) {\n this.isActive = !!val\n },\n isActive (val) {\n !!val !== this[prop] && this.$emit(event, val)\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n","import Vue from 'vue'\nimport { filterObjectOnKeys } from '../../util/helpers'\nimport { OptionsVue, VueConstructor } from 'vue/types/vue'\n\nconst availableProps = {\n absolute: Boolean,\n bottom: Boolean,\n fixed: Boolean,\n left: Boolean,\n right: Boolean,\n top: Boolean,\n}\ntype props = Record\n\nexport type Positionable = VueConstructor\n\nexport function factory (selected?: S[]): Positionable\nexport function factory (selected: undefined): OptionsVue\nexport function factory (selected: any[] = []): any {\n return Vue.extend({\n name: 'positionable',\n props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps,\n })\n}\n\nexport default factory()\n\n// Add a `*` before the second `/`\n/* Tests /\nlet single = factory(['top']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet some = factory(['top', 'bottom']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet all = factory().extend({\n created () {\n this.top\n this.bottom\n this.absolute\n this.foobar\n }\n})\n/**/\n","// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue'\n\nconst rippleStop = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [rippleStop]?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n el.style.opacity = value.toString()\n}\n\nexport interface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple && el._ripple.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el._ripple || !el._ripple.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n opacity(animation, 0)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n opacity(animation, 0.25)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el || !el._ripple || !el._ripple.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n opacity(animation, 0)\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n animation.parentNode && el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement\n\n if (!element || !element._ripple || element._ripple.touched || e[rippleStop]) return\n\n // Don't allow the event to trigger ripples on any other elements\n e[rippleStop] = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element && element._ripple && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element || !element._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element || !element._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple === true) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: VNodeDirective, wasEnabled: boolean) {\n const enabled = isRippleEnabled(binding.value)\n if (!enabled) {\n ripples.hide(el)\n }\n el._ripple = el._ripple || {}\n el._ripple.enabled = enabled\n const value = binding.value || {}\n if (value.center) {\n el._ripple.centered = true\n }\n if (value.class) {\n el._ripple.class = binding.value.class\n }\n if (value.circle) {\n el._ripple.circle = value.circle\n }\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction directive (el: HTMLElement, binding: VNodeDirective, node: VNode) {\n updateRipple(el, binding, false)\n\n if (process.env.NODE_ENV === 'development') {\n // warn if an inline element is used, waiting for el to be in the DOM first\n node.context && node.context.$nextTick(() => {\n const computed = window.getComputedStyle(el)\n if (computed && computed.display === 'inline') {\n const context = (node as any).fnOptions ? [(node as any).fnOptions, node.context] : [node.componentInstance]\n consoleWarn('v-ripple can only be used on block-level elements', ...context)\n }\n })\n }\n}\n\nfunction unbind (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction update (el: HTMLElement, binding: VNodeDirective) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple = {\n bind: directive,\n unbind,\n update,\n}\n\nexport default Ripple\n","import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n\n const path = `_vnode.data.class.${activeClass}`\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (getObjectValueByPath(this.$refs.link, path)) {\n this.toggle()\n }\n })\n },\n toggle: () => { /* noop */ },\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'sizeable',\n\n props: {\n large: Boolean,\n small: Boolean,\n xLarge: Boolean,\n xSmall: Boolean,\n },\n\n computed: {\n medium (): boolean {\n return Boolean(\n !this.xSmall &&\n !this.small &&\n !this.large &&\n !this.xLarge\n )\n },\n sizeableClasses (): object {\n return {\n 'v-size--x-small': this.xSmall,\n 'v-size--small': this.small,\n 'v-size--default': this.medium,\n 'v-size--large': this.large,\n 'v-size--x-large': this.xLarge,\n }\n },\n },\n})\n","// Styles\nimport './VBtn.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Components\nimport VProgressCircular from '../VProgressCircular'\n\n// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Elevatable from '../../mixins/elevatable'\nimport Positionable from '../../mixins/positionable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator, PropType } from 'vue/types/options'\nimport { RippleOptions } from '../../directives/ripple'\n\nconst baseMixins = mixins(\n VSheet,\n Routable,\n Positionable,\n Sizeable,\n GroupableFactory('btnToggle'),\n ToggleableFactory('inputValue')\n /* @vue/component */\n)\ninterface options extends ExtractVue {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-btn',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.btnToggle) return ''\n\n return this.btnToggle.activeClass\n },\n } as any as PropValidator,\n block: Boolean,\n depressed: Boolean,\n fab: Boolean,\n icon: Boolean,\n loading: Boolean,\n outlined: Boolean,\n plain: Boolean,\n retainFocusOnClick: Boolean,\n rounded: Boolean,\n tag: {\n type: String,\n default: 'button',\n },\n text: Boolean,\n tile: Boolean,\n type: {\n type: String,\n default: 'button',\n },\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-btn--active',\n }),\n\n computed: {\n classes (): any {\n return {\n 'v-btn': true,\n ...Routable.options.computed.classes.call(this),\n 'v-btn--absolute': this.absolute,\n 'v-btn--block': this.block,\n 'v-btn--bottom': this.bottom,\n 'v-btn--disabled': this.disabled,\n 'v-btn--is-elevated': this.isElevated,\n 'v-btn--fab': this.fab,\n 'v-btn--fixed': this.fixed,\n 'v-btn--has-bg': this.hasBg,\n 'v-btn--icon': this.icon,\n 'v-btn--left': this.left,\n 'v-btn--loading': this.loading,\n 'v-btn--outlined': this.outlined,\n 'v-btn--plain': this.plain,\n 'v-btn--right': this.right,\n 'v-btn--round': this.isRound,\n 'v-btn--rounded': this.rounded,\n 'v-btn--router': this.to,\n 'v-btn--text': this.text,\n 'v-btn--tile': this.tile,\n 'v-btn--top': this.top,\n ...this.themeClasses,\n ...this.groupClasses,\n ...this.elevationClasses,\n ...this.sizeableClasses,\n }\n },\n computedElevation (): string | number | undefined {\n if (this.disabled) return undefined\n\n return Elevatable.options.computed.computedElevation.call(this)\n },\n computedRipple (): RippleOptions | boolean {\n const defaultRipple = this.icon || this.fab ? { circle: true } : true\n if (this.disabled) return false\n else return this.ripple ?? defaultRipple\n },\n hasBg (): boolean {\n return !this.text && !this.plain && !this.outlined && !this.icon\n },\n isElevated (): boolean {\n return Boolean(\n !this.icon &&\n !this.text &&\n !this.outlined &&\n !this.depressed &&\n !this.disabled &&\n !this.plain &&\n (this.elevation == null || Number(this.elevation) > 0)\n )\n },\n isRound (): boolean {\n return Boolean(\n this.icon ||\n this.fab\n )\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n }\n },\n },\n\n created () {\n const breakingProps = [\n ['flat', 'text'],\n ['outline', 'outlined'],\n ['round', 'rounded'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n // TODO: Remove this in v3\n !this.retainFocusOnClick && !this.fab && e.detail && this.$el.blur()\n this.$emit('click', e)\n\n this.btnToggle && this.toggle()\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-btn__content',\n }, this.$slots.default)\n },\n genLoader (): VNode {\n return this.$createElement('span', {\n class: 'v-btn__loader',\n }, this.$slots.loader || [this.$createElement(VProgressCircular, {\n props: {\n indeterminate: true,\n size: 23,\n width: 2,\n },\n })])\n },\n },\n\n render (h): VNode {\n const children = [\n this.genContent(),\n this.loading && this.genLoader(),\n ]\n const { tag, data } = this.generateRouteLink()\n const setColor = this.hasBg\n ? this.setBackgroundColor\n : this.setTextColor\n\n if (tag === 'button') {\n data.attrs!.type = this.type\n data.attrs!.disabled = this.disabled\n }\n data.attrs!.value = ['string', 'number'].includes(typeof this.value)\n ? this.value\n : JSON.stringify(this.value)\n\n return h(tag, this.disabled ? data : setColor(this.color, data), children)\n },\n})\n","/**\n * @copyright 2017 Alex Regan\n * @license MIT\n * @see https://github.com/alexsasharegan/vue-functional-data-merge\n */\n/* eslint-disable max-statements */\nimport { VNodeData } from 'vue'\nimport { camelize, wrapInArray } from './helpers'\n\nconst pattern = {\n styleList: /;(?![^(]*\\))/g,\n styleProp: /:(.*)/,\n} as const\n\nfunction parseStyle (style: string) {\n const styleMap: Dictionary = {}\n\n for (const s of style.split(pattern.styleList)) {\n let [key, val] = s.split(pattern.styleProp)\n key = key.trim()\n if (!key) {\n continue\n }\n // May be undefined if the `key: value` pair is incomplete.\n if (typeof val === 'string') {\n val = val.trim()\n }\n styleMap[camelize(key)] = val\n }\n\n return styleMap\n}\n\n/**\n * Intelligently merges data for createElement.\n * Merges arguments left to right, preferring the right argument.\n * Returns new VNodeData object.\n */\nexport default function mergeData (...vNodeData: VNodeData[]): VNodeData\nexport default function mergeData (): VNodeData {\n const mergeTarget: VNodeData & Dictionary = {}\n let i: number = arguments.length\n let prop: string\n\n // Allow for variadic argument length.\n while (i--) {\n // Iterate through the data properties and execute merge strategies\n // Object.keys eliminates need for hasOwnProperty call\n for (prop of Object.keys(arguments[i])) {\n switch (prop) {\n // Array merge strategy (array concatenation)\n case 'class':\n case 'directives':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeClasses(mergeTarget[prop], arguments[i][prop])\n }\n break\n case 'style':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeStyles(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Space delimited string concatenation strategy\n case 'staticClass':\n if (!arguments[i][prop]) {\n break\n }\n if (mergeTarget[prop] === undefined) {\n mergeTarget[prop] = ''\n }\n if (mergeTarget[prop]) {\n // Not an empty string, so concatenate\n mergeTarget[prop] += ' '\n }\n mergeTarget[prop] += arguments[i][prop].trim()\n break\n // Object, the properties of which to merge via array merge strategy (array concatenation).\n // Callback merge strategy merges callbacks to the beginning of the array,\n // so that the last defined callback will be invoked first.\n // This is done since to mimic how Object.assign merging\n // uses the last given value to assign.\n case 'on':\n case 'nativeOn':\n if (arguments[i][prop]) {\n mergeTarget[prop] = mergeListeners(mergeTarget[prop], arguments[i][prop])\n }\n break\n // Object merge strategy\n case 'attrs':\n case 'props':\n case 'domProps':\n case 'scopedSlots':\n case 'staticStyle':\n case 'hook':\n case 'transition':\n if (!arguments[i][prop]) {\n break\n }\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = {}\n }\n mergeTarget[prop] = { ...arguments[i][prop], ...mergeTarget[prop] }\n break\n // Reassignment strategy (no merge)\n default: // slot, key, ref, tag, show, keepAlive\n if (!mergeTarget[prop]) {\n mergeTarget[prop] = arguments[i][prop]\n }\n }\n }\n }\n\n return mergeTarget\n}\n\nexport function mergeStyles (\n target: undefined | string | object[] | object,\n source: undefined | string | object[] | object\n) {\n if (!target) return source\n if (!source) return target\n\n target = wrapInArray(typeof target === 'string' ? parseStyle(target) : target)\n\n return (target as object[]).concat(typeof source === 'string' ? parseStyle(source) : source)\n}\n\nexport function mergeClasses (target: any, source: any) {\n if (!source) return target\n if (!target) return source\n\n return target ? wrapInArray(target).concat(source) : source\n}\n\nexport function mergeListeners (...args: [\n { [key: string]: Function | Function[] } | undefined,\n { [key: string]: Function | Function[] } | undefined\n]) {\n if (!args[0]) return args[1]\n if (!args[1]) return args[0]\n\n const dest: { [key: string]: Function | Function[] } = {}\n\n for (let i = 2; i--;) {\n const arg = args[i]\n for (const event in arg) {\n if (!arg[event]) continue\n\n if (dest[event]) {\n // Merge current listeners before (because we are iterating backwards).\n // Note that neither \"target\" or \"source\" must be altered.\n dest[event] = ([] as Function[]).concat(arg[event], dest[event])\n } else {\n // Straight assign.\n dest[event] = arg[event]\n }\n }\n }\n\n return dest\n}\n","import { FunctionalComponentOptions, VNode, VNodeData } from 'vue'\nimport mergeData from '../../util/mergeData'\n\nfunction mergeTransitions (\n dest: Function | Function[] = [],\n ...transitions: (Function | Function[])[]\n) {\n /* eslint-disable-next-line no-array-constructor */\n return Array().concat(dest, ...transitions)\n}\n\nexport function createSimpleTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n group: {\n type: Boolean,\n default: false,\n },\n hideOnLeave: {\n type: Boolean,\n default: false,\n },\n leaveAbsolute: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n render (h, context): VNode {\n const tag = `transition${context.props.group ? '-group' : ''}`\n const data: VNodeData = {\n props: {\n name,\n mode: context.props.mode,\n },\n on: {\n beforeEnter (el: HTMLElement) {\n el.style.transformOrigin = context.props.origin\n el.style.webkitTransformOrigin = context.props.origin\n },\n },\n }\n\n if (context.props.leaveAbsolute) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = el\n el._transitionInitialStyles = {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n }\n el.style.position = 'absolute'\n el.style.top = offsetTop + 'px'\n el.style.left = offsetLeft + 'px'\n el.style.width = offsetWidth + 'px'\n el.style.height = offsetHeight + 'px'\n })\n data.on!.afterLeave = mergeTransitions(data.on!.afterLeave, (el?: HTMLElement) => {\n if (el && el._transitionInitialStyles) {\n const { position, top, left, width, height } = el._transitionInitialStyles\n delete el._transitionInitialStyles\n el.style.position = position || ''\n el.style.top = top || ''\n el.style.left = left || ''\n el.style.width = width || ''\n el.style.height = height || ''\n }\n })\n }\n if (context.props.hideOnLeave) {\n data.on!.leave = mergeTransitions(data.on!.leave, (el: HTMLElement) => {\n (el as any)._initialDisplay = el.style.display\n el.style.display = 'none'\n })\n data.on!.afterLeave = mergeTransitions(data.on!.afterLeave, (el?: HTMLElement) => {\n if (el) el.style.display = (el as any)._initialDisplay || ''\n })\n }\n\n return h(tag, mergeData(context.data, data), context.children)\n },\n }\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record,\n mode = 'in-out'\n): FunctionalComponentOptions {\n return {\n name,\n\n functional: true,\n\n props: {\n mode: {\n type: String,\n default: mode,\n },\n },\n\n render (h, context): VNode {\n return h(\n 'transition',\n mergeData(context.data, {\n props: { name },\n on: functions,\n }),\n context.children\n )\n },\n }\n}\n","import { upperFirst } from '../../util/helpers'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle?: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = `offset${upperFirst(sizeProperty)}` as 'offsetHeight' | 'offsetWidth'\n\n return {\n beforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n enter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle!\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n afterEnter: resetStyles,\n enterCancelled: resetStyles,\n\n leave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n afterLeave,\n leaveCancelled: afterLeave,\n }\n\n function afterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle![sizeProperty]\n el.style.overflow = el._initialStyle!.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import {\n createSimpleTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createSimpleTransition('carousel-transition')\nexport const VCarouselReverseTransition = createSimpleTransition('carousel-reverse-transition')\nexport const VTabTransition = createSimpleTransition('tab-transition')\nexport const VTabReverseTransition = createSimpleTransition('tab-reverse-transition')\nexport const VMenuTransition = createSimpleTransition('menu-transition')\nexport const VFabTransition = createSimpleTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogTransition = createSimpleTransition('dialog-transition')\nexport const VDialogBottomTransition = createSimpleTransition('dialog-bottom-transition')\nexport const VDialogTopTransition = createSimpleTransition('dialog-top-transition')\nexport const VFadeTransition = createSimpleTransition('fade-transition')\nexport const VScaleTransition = createSimpleTransition('scale-transition')\nexport const VScrollXTransition = createSimpleTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createSimpleTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createSimpleTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createSimpleTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createSimpleTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createSimpleTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createSimpleTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createSimpleTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport default {\n $_vuetify_subcomponents: {\n VCarouselTransition,\n VCarouselReverseTransition,\n VDialogTransition,\n VDialogBottomTransition,\n VDialogTopTransition,\n VFabTransition,\n VFadeTransition,\n VMenuTransition,\n VScaleTransition,\n VScrollXTransition,\n VScrollXReverseTransition,\n VScrollYTransition,\n VScrollYReverseTransition,\n VSlideXTransition,\n VSlideXReverseTransition,\n VSlideYTransition,\n VSlideYReverseTransition,\n VTabReverseTransition,\n VTabTransition,\n VExpandTransition,\n VExpandXTransition,\n },\n}\n","import Vue, { VueConstructor } from 'vue'\n\nexport type Proxyable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Proxyable\nexport function factory (\n prop = 'value',\n event = 'change'\n) {\n return Vue.extend({\n name: 'proxyable',\n\n model: {\n prop,\n event,\n },\n\n props: {\n [prop]: {\n required: false,\n },\n },\n\n data () {\n return {\n internalLazyValue: this[prop] as unknown,\n }\n },\n\n computed: {\n internalValue: {\n get (): unknown {\n return this.internalLazyValue\n },\n set (val: any) {\n if (val === this.internalLazyValue) return\n\n this.internalLazyValue = val\n\n this.$emit(event, val)\n },\n },\n },\n\n watch: {\n [prop] (val) {\n this.internalLazyValue = val\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Proxyable = factory()\n\nexport default Proxyable\n","import './VProgressLinear.sass'\n\n// Components\nimport {\n VFadeTransition,\n VSlideXTransition,\n} from '../transitions'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { FunctionalComponentOptions } from 'vue/types'\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Colorable,\n PositionableFactory(['absolute', 'fixed', 'top', 'bottom']),\n Proxyable,\n Themeable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-progress-linear',\n\n directives: { intersect },\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n backgroundColor: {\n type: String,\n default: null,\n },\n backgroundOpacity: {\n type: [Number, String],\n default: null,\n },\n bufferValue: {\n type: [Number, String],\n default: 100,\n },\n color: {\n type: String,\n default: 'primary',\n },\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n query: Boolean,\n reverse: Boolean,\n rounded: Boolean,\n stream: Boolean,\n striped: Boolean,\n value: {\n type: [Number, String],\n default: 0,\n },\n },\n\n data () {\n return {\n internalLazyValue: this.value || 0,\n isVisible: true,\n }\n },\n\n computed: {\n __cachedBackground (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {\n staticClass: 'v-progress-linear__background',\n style: this.backgroundStyle,\n }))\n },\n __cachedBar (): VNode {\n return this.$createElement(this.computedTransition, [this.__cachedBarType])\n },\n __cachedBarType (): VNode {\n return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate\n },\n __cachedBuffer (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__buffer',\n style: this.styles,\n })\n },\n __cachedDeterminate (): VNode {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: `v-progress-linear__determinate`,\n style: {\n width: convertToUnit(this.normalizedValue, '%'),\n },\n }))\n },\n __cachedIndeterminate (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n 'v-progress-linear__indeterminate--active': this.active,\n },\n }, [\n this.genProgressBar('long'),\n this.genProgressBar('short'),\n ])\n },\n __cachedStream (): VNode | null {\n if (!this.stream) return null\n\n return this.$createElement('div', this.setTextColor(this.color, {\n staticClass: 'v-progress-linear__stream',\n style: {\n width: convertToUnit(100 - this.normalizedBuffer, '%'),\n },\n }))\n },\n backgroundStyle (): object {\n const backgroundOpacity = this.backgroundOpacity == null\n ? (this.backgroundColor ? 1 : 0.3)\n : parseFloat(this.backgroundOpacity)\n\n return {\n opacity: backgroundOpacity,\n [this.isReversed ? 'right' : 'left']: convertToUnit(this.normalizedValue, '%'),\n width: convertToUnit(Math.max(0, this.normalizedBuffer - this.normalizedValue), '%'),\n }\n },\n classes (): object {\n return {\n 'v-progress-linear--absolute': this.absolute,\n 'v-progress-linear--fixed': this.fixed,\n 'v-progress-linear--query': this.query,\n 'v-progress-linear--reactive': this.reactive,\n 'v-progress-linear--reverse': this.isReversed,\n 'v-progress-linear--rounded': this.rounded,\n 'v-progress-linear--striped': this.striped,\n 'v-progress-linear--visible': this.isVisible,\n ...this.themeClasses,\n }\n },\n computedTransition (): FunctionalComponentOptions {\n return this.indeterminate ? VFadeTransition : VSlideXTransition\n },\n isReversed (): boolean {\n return this.$vuetify.rtl !== this.reverse\n },\n normalizedBuffer (): number {\n return this.normalize(this.bufferValue)\n },\n normalizedValue (): number {\n return this.normalize(this.internalLazyValue)\n },\n reactive (): boolean {\n return Boolean(this.$listeners.change)\n },\n styles (): object {\n const styles: Record = {}\n\n if (!this.active) {\n styles.height = 0\n }\n\n if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {\n styles.width = convertToUnit(this.normalizedBuffer, '%')\n }\n\n return styles\n },\n },\n\n methods: {\n genContent () {\n const slot = getSlot(this, 'default', { value: this.internalLazyValue })\n\n if (!slot) return null\n\n return this.$createElement('div', {\n staticClass: 'v-progress-linear__content',\n }, slot)\n },\n genListeners () {\n const listeners = this.$listeners\n\n if (this.reactive) {\n listeners.click = this.onClick\n }\n\n return listeners\n },\n genProgressBar (name: 'long' | 'short') {\n return this.$createElement('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-progress-linear__indeterminate',\n class: {\n [name]: true,\n },\n }))\n },\n onClick (e: MouseEvent) {\n if (!this.reactive) return\n\n const { width } = this.$el.getBoundingClientRect()\n\n this.internalValue = e.offsetX / width * 100\n },\n onObserve (entries: IntersectionObserverEntry[], observer: IntersectionObserver, isIntersecting: boolean) {\n this.isVisible = isIntersecting\n },\n normalize (value: string | number) {\n if (value < 0) return 0\n if (value > 100) return 100\n return parseFloat(value)\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-progress-linear',\n attrs: {\n role: 'progressbar',\n 'aria-valuemin': 0,\n 'aria-valuemax': this.normalizedBuffer,\n 'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue,\n },\n class: this.classes,\n directives: [{\n name: 'intersect',\n value: this.onObserve,\n }],\n style: {\n bottom: this.bottom ? 0 : undefined,\n height: this.active ? convertToUnit(this.height) : 0,\n top: this.top ? 0 : undefined,\n },\n on: this.genListeners(),\n }\n\n return h('div', data, [\n this.__cachedStream,\n this.__cachedBackground,\n this.__cachedBuffer,\n this.__cachedBar,\n this.genContent(),\n ])\n },\n})\n","import VProgressLinear from './VProgressLinear'\n\nexport { VProgressLinear }\nexport default VProgressLinear\n","import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../../components/VProgressLinear'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false,\n },\n loaderHeight: {\n type: [Number, String],\n default: 2,\n },\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return this.$slots.progress || this.$createElement(VProgressLinear, {\n props: {\n absolute: true,\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: this.loaderHeight,\n indeterminate: true,\n },\n })\n },\n },\n})\n","// Styles\nimport './VCard.sass'\n\n// Extensions\nimport VSheet from '../VSheet'\n\n// Mixins\nimport Loadable from '../../mixins/loadable'\nimport Routable from '../../mixins/routable'\n\n// Helpers\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Loadable,\n Routable,\n VSheet\n).extend({\n name: 'v-card',\n\n props: {\n flat: Boolean,\n hover: Boolean,\n img: String,\n link: Boolean,\n loaderHeight: {\n type: [Number, String],\n default: 4,\n },\n raised: Boolean,\n },\n\n computed: {\n classes (): object {\n return {\n 'v-card': true,\n ...Routable.options.computed.classes.call(this),\n 'v-card--flat': this.flat,\n 'v-card--hover': this.hover,\n 'v-card--link': this.isClickable,\n 'v-card--loading': this.loading,\n 'v-card--disabled': this.disabled,\n 'v-card--raised': this.raised,\n ...VSheet.options.computed.classes.call(this),\n }\n },\n styles (): object {\n const style: Dictionary = {\n ...VSheet.options.computed.styles.call(this),\n }\n\n if (this.img) {\n style.background = `url(\"${this.img}\") center center / cover no-repeat`\n }\n\n return style\n },\n },\n\n methods: {\n genProgress () {\n const render = Loadable.options.methods.genProgress.call(this)\n\n if (!render) return null\n\n return this.$createElement('div', {\n staticClass: 'v-card__progress',\n key: 'progress',\n }, [render])\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.style = this.styles\n\n if (this.isClickable) {\n data.attrs = data.attrs || {}\n data.attrs.tabindex = 0\n }\n\n return h(tag, this.setBackgroundColor(this.color, data), [\n this.genProgress(),\n this.$slots.default,\n ])\n },\n})\n","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","import './VGrid.sass'\n\nimport Vue, { VNode, PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-col',\n functional: true,\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n tag: {\n type: String,\n default: 'div',\n },\n },\n render (h, { props, data, children, parent }): VNode {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('col-'))\n\n classList.push({\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: !hasColClasses || !props.cols,\n [`col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(props.tag, mergeData(data, { class: classList }), children)\n },\n})\n","// Types\nimport Vue, { VNode } from 'vue'\n\nexport default function VGrid (name: string) {\n /* @vue/component */\n return Vue.extend({\n name: `v-${name}`,\n\n functional: true,\n\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n render (h, { props, data, children }): VNode {\n data.staticClass = (`${name} ${data.staticClass || ''}`).trim()\n\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n const classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n\n if (classes.length) data.staticClass += ` ${classes.join(' ')}`\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(props.tag, data, children)\n },\n })\n}\n","import './_grid.sass'\nimport './VGrid.sass'\n\nimport Grid from './grid'\n\nimport mergeData from '../../util/mergeData'\n\n/* @vue/component */\nexport default Grid('container').extend({\n name: 'v-container',\n functional: true,\n props: {\n id: String,\n tag: {\n type: String,\n default: 'div',\n },\n fluid: {\n type: Boolean,\n default: false,\n },\n },\n render (h, { props, data, children }) {\n let classes\n const { attrs } = data\n if (attrs) {\n // reset attrs to extract utility clases like pa-3\n data.attrs = {}\n classes = Object.keys(attrs).filter(key => {\n // TODO: Remove once resolved\n // https://github.com/vuejs/vue/issues/7841\n if (key === 'slot') return false\n\n const value = attrs[key]\n\n // add back data attributes like data-test=\"foo\" but do not\n // add them as classes\n if (key.startsWith('data-')) {\n data.attrs![key] = value\n return false\n }\n\n return value || typeof value === 'string'\n })\n }\n\n if (props.id) {\n data.domProps = data.domProps || {}\n data.domProps.id = props.id\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'container',\n class: Array({\n 'container--fluid': props.fluid,\n }).concat(classes || []),\n }),\n children\n )\n },\n})\n","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","import './VResponsive.sass'\n\n// Mixins\nimport Measurable, { NumberOrNumberString } from '../../mixins/measurable'\n\n// Types\nimport { VNode } from 'vue'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Measurable).extend({\n name: 'v-responsive',\n\n props: {\n aspectRatio: [String, Number] as NumberOrNumberString,\n contentClass: String,\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.aspectRatio)\n },\n aspectStyle (): object | undefined {\n return this.computedAspectRatio\n ? { paddingBottom: (1 / this.computedAspectRatio) * 100 + '%' }\n : undefined\n },\n __cachedSizer (): VNode | [] {\n if (!this.aspectStyle) return []\n\n return this.$createElement('div', {\n style: this.aspectStyle,\n staticClass: 'v-responsive__sizer',\n })\n },\n },\n\n methods: {\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-responsive__content',\n class: this.contentClass,\n }, this.$slots.default)\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-responsive',\n style: this.measurableStyles,\n on: this.$listeners,\n }, [\n this.__cachedSizer,\n this.genContent(),\n ])\n },\n})\n","import VResponsive from './VResponsive'\n\nexport { VResponsive }\nexport default VResponsive\n","// Styles\nimport './VImg.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VResponsive from '../VResponsive'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport mergeData from '../../util/mergeData'\nimport { consoleWarn } from '../../util/console'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src: string\n srcset?: string\n lazySrc: string\n aspect: number\n}\n\nconst hasIntersect = typeof window !== 'undefined' && 'IntersectionObserver' in window\n\n/* @vue/component */\nexport default mixins(\n VResponsive,\n Themeable,\n).extend({\n name: 'v-img',\n\n directives: { intersect },\n\n props: {\n alt: String,\n contain: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n } as PropValidator,\n position: {\n type: String,\n default: 'center center',\n },\n sizes: String,\n src: {\n type: [String, Object],\n default: '',\n } as PropValidator,\n srcset: String,\n transition: {\n type: [Boolean, String],\n default: 'fade-transition',\n },\n },\n\n data () {\n return {\n currentSrc: '', // Set from srcset\n image: null as HTMLImageElement | null,\n isLoading: true,\n calculatedAspectRatio: undefined as number | undefined,\n naturalWidth: undefined as number | undefined,\n hasError: false,\n }\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio)\n },\n normalisedSrc (): srcObject {\n return this.src && typeof this.src === 'object'\n ? {\n src: this.src.src,\n srcset: this.srcset || this.src.srcset,\n lazySrc: this.lazySrc || this.src.lazySrc,\n aspect: Number(this.aspectRatio || this.src.aspect),\n } : {\n src: this.src,\n srcset: this.srcset,\n lazySrc: this.lazySrc,\n aspect: Number(this.aspectRatio || 0),\n }\n },\n __cachedImage (): VNode | [] {\n if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc || this.gradient)) return []\n\n const backgroundImage: string[] = []\n const src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc\n\n if (this.gradient) backgroundImage.push(`linear-gradient(${this.gradient})`)\n if (src) backgroundImage.push(`url(\"${src}\")`)\n\n const image = this.$createElement('div', {\n staticClass: 'v-image__image',\n class: {\n 'v-image__image--preload': this.isLoading,\n 'v-image__image--contain': this.contain,\n 'v-image__image--cover': !this.contain,\n },\n style: {\n backgroundImage: backgroundImage.join(', '),\n backgroundPosition: this.position,\n },\n key: +this.isLoading,\n })\n\n /* istanbul ignore if */\n if (!this.transition) return image\n\n return this.$createElement('transition', {\n attrs: {\n name: this.transition,\n mode: 'in-out',\n },\n }, [image])\n },\n },\n\n watch: {\n src () {\n // Force re-init when src changes\n if (!this.isLoading) this.init(undefined, undefined, true)\n else this.loadImage()\n },\n '$vuetify.breakpoint.width': 'getSrc',\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init (\n entries?: IntersectionObserverEntry[],\n observer?: IntersectionObserver,\n isIntersecting?: boolean\n ) {\n // If the current browser supports the intersection\n // observer api, the image is not observable, and\n // the eager prop isn't being used, do not load\n if (\n hasIntersect &&\n !isIntersecting &&\n !this.eager\n ) return\n\n if (this.normalisedSrc.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = this.normalisedSrc.lazySrc\n this.pollForSize(lazyImg, null)\n }\n /* istanbul ignore else */\n if (this.normalisedSrc.src) this.loadImage()\n },\n onLoad () {\n this.getSrc()\n this.isLoading = false\n this.$emit('load', this.src)\n\n if (\n this.image &&\n (this.normalisedSrc.src.endsWith('.svg') || this.normalisedSrc.src.startsWith('data:image/svg+xml'))\n ) {\n if (this.image.naturalHeight && this.image.naturalWidth) {\n this.naturalWidth = this.image.naturalWidth\n this.calculatedAspectRatio = this.image.naturalWidth / this.image.naturalHeight\n } else {\n this.calculatedAspectRatio = 1\n }\n }\n },\n onError () {\n this.hasError = true\n this.$emit('error', this.src)\n },\n getSrc () {\n /* istanbul ignore else */\n if (this.image) this.currentSrc = this.image.currentSrc || this.image.src\n },\n loadImage () {\n const image = new Image()\n this.image = image\n\n image.onload = () => {\n /* istanbul ignore if */\n if (image.decode) {\n image.decode().catch((err: DOMException) => {\n consoleWarn(\n `Failed to decode image, trying to render anyway\\n\\n` +\n `src: ${this.normalisedSrc.src}` +\n (err.message ? `\\nOriginal error: ${err.message}` : ''),\n this\n )\n }).then(this.onLoad)\n } else {\n this.onLoad()\n }\n }\n image.onerror = this.onError\n\n this.hasError = false\n this.sizes && (image.sizes = this.sizes)\n this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n image.src = this.normalisedSrc.src\n this.$emit('loadstart', this.normalisedSrc.src)\n\n this.aspectRatio || this.pollForSize(image)\n this.getSrc()\n },\n pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight, naturalWidth } = img\n\n if (naturalHeight || naturalWidth) {\n this.naturalWidth = naturalWidth\n this.calculatedAspectRatio = naturalWidth / naturalHeight\n } else if (!img.complete && this.isLoading && !this.hasError && timeout != null) {\n setTimeout(poll, timeout)\n }\n }\n\n poll()\n },\n genContent () {\n const content: VNode = VResponsive.options.methods.genContent.call(this)\n if (this.naturalWidth) {\n this._b(content.data!, 'div', {\n style: { width: `${this.naturalWidth}px` },\n })\n }\n\n return content\n },\n __genPlaceholder (): VNode | void {\n if (this.$slots.placeholder) {\n const placeholder = this.isLoading\n ? [this.$createElement('div', {\n staticClass: 'v-image__placeholder',\n }, this.$slots.placeholder)]\n : []\n\n if (!this.transition) return placeholder[0]\n\n return this.$createElement('transition', {\n props: {\n appear: true,\n name: this.transition,\n },\n }, placeholder)\n }\n },\n },\n\n render (h): VNode {\n const node = VResponsive.options.render.call(this, h)\n\n const data = mergeData(node.data!, {\n staticClass: 'v-image',\n attrs: {\n 'aria-label': this.alt,\n role: this.alt ? 'img' : undefined,\n },\n class: this.themeClasses,\n // Only load intersect directive if it\n // will work in the current browser.\n directives: hasIntersect\n ? [{\n name: 'intersect',\n modifiers: { once: true },\n value: {\n handler: this.init,\n options: this.options,\n },\n }]\n : undefined,\n })\n\n node.children = [\n this.__cachedSizer,\n this.__cachedImage,\n this.__genPlaceholder(),\n this.genContent(),\n ] as VNode[]\n\n return h(node.tag, data, node.children)\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","// Styles\nimport './VSubheader.sass'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-subheader',\n\n props: {\n inset: Boolean,\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-subheader',\n class: {\n 'v-subheader--inset': this.inset,\n ...this.themeClasses,\n },\n attrs: this.$attrs,\n on: this.$listeners,\n }, this.$slots.default)\n },\n})\n","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=6003c7cf&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=6003c7cf&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6003c7cf\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSubheader } from 'vuetify/lib/components/VSubheader';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCol,VContainer,VIcon,VImg,VProgressLinear,VRow,VSubheader})\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fixed` method\n// https://tc39.es/ecma262/#sec-string.prototype.fixed\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, {\n fixed: function fixed() {\n return createHTML(this, 'tt', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.small` method\n// https://tc39.es/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/js/app.111e4ffc.js b/docs/js/app.31269103.js similarity index 97% rename from docs/js/app.111e4ffc.js rename to docs/js/app.31269103.js index 782430b632..bbff1cbb8a 100644 --- a/docs/js/app.111e4ffc.js +++ b/docs/js/app.31269103.js @@ -1,2 +1,2 @@ -(function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],s=0,p=[];s\n \n \n \n \n \n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=78a82666&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VMain})\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: { dark: true },\n})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'Home',\n component: () => import(/* webpackChunkName: \"about\" */ '../views/Home.vue')\n },\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport App from './App.vue'\nimport vuetify from './plugins/vuetify';\nimport router from './router'\n\nVue.config.productionTip = false\n\nnew Vue({\n vuetify,\n router,\n render: h => h(App)\n}).$mount('#app')\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7fea","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/plugins/vuetify.js","webpack:///./src/router/index.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","staticRenderFns","components","component","VApp","VMain","Vue","use","Vuetify","theme","dark","VueRouter","routes","path","router","base","process","config","productionTip","vuetify","render","h","App","$mount"],"mappings":"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","file":"js/app.31269103.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"about\":\"about\"}[chunkId]||chunkId) + \".\" + {\"about\":\"e40bb13c\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"about\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"about\":\"about\"}[chunkId]||chunkId) + \".\" + {\"about\":\"c2633d65\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/jak-project/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-main',[_c('router-view')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=78a82666&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VMain})\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: { dark: true },\n})\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\nVue.use(VueRouter)\n\nconst routes = [\n {\n path: '/',\n name: 'Home',\n component: () => import(/* webpackChunkName: \"about\" */ '../views/Home.vue')\n },\n]\n\nconst router = new VueRouter({\n mode: 'history',\n base: process.env.BASE_URL,\n routes\n})\n\nexport default router\n","import Vue from 'vue'\nimport App from './App.vue'\nimport vuetify from './plugins/vuetify';\nimport router from './router'\n\nVue.config.productionTip = false\n\nnew Vue({\n vuetify,\n router,\n render: h => h(App)\n}).$mount('#app')\n"],"sourceRoot":""} \ No newline at end of file diff --git a/goal_src/engine/camera/cam-update.gc b/goal_src/engine/camera/cam-update.gc index 3200e2ab5d..6cb8eec59a 100644 --- a/goal_src/engine/camera/cam-update.gc +++ b/goal_src/engine/camera/cam-update.gc @@ -187,48 +187,36 @@ (if (!= (-> s5-1 all-visible?) 'loading) (set! (-> s5-1 all-visible?) #f) ) - (let* ((a0-19 s5-1) - (t9-2 (method-of-object a0-19 dummy-16)) - (a1-17 s4-0) - (a2-1 (-> s4-0 ramdisk)) - ) - (-> s4-0 string-block) - (when (t9-2 a0-19 (the-as uint a1-17) a2-1) - (countdown (v1-40 8) - (let ((a0-22 (-> s5-1 vis-info v1-40))) - (when a0-22 - (if (!= a0-22 s4-0) - (set! (-> a0-22 current-vis-string) (the-as uint -1)) - ) + (when + (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (-> s4-0 string-block)) + (countdown (v1-40 8) + (let ((a0-22 (-> s5-1 vis-info v1-40))) + (when a0-22 + (if (!= a0-22 s4-0) + (set! (-> a0-22 current-vis-string) (the-as uint -1)) ) ) ) - (set! (-> s5-1 all-visible?) #f) ) + (set! (-> s5-1 all-visible?) #f) ) ) (a0-16 (if (!= (-> s5-1 all-visible?) 'loading) (set! (-> s5-1 all-visible?) #f) ) - (let* ((a0-24 s5-1) - (t9-3 (method-of-object a0-24 dummy-16)) - (a1-21 s3-0) - (a2-2 (-> s3-0 ramdisk)) - ) - (-> s3-0 string-block) - (when (t9-3 a0-24 (the-as uint a1-21) a2-2) - (countdown (v1-50 8) - (let ((a0-27 (-> s5-1 vis-info v1-50))) - (when a0-27 - (if (!= a0-27 s3-0) - (set! (-> a0-27 current-vis-string) (the-as uint -1)) - ) + (when + (update-vis! s5-1 s3-0 (-> s3-0 ramdisk) (-> s3-0 string-block)) + (countdown (v1-50 8) + (let ((a0-27 (-> s5-1 vis-info v1-50))) + (when a0-27 + (if (!= a0-27 s3-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) ) ) ) - (set! (-> s5-1 all-visible?) #f) ) + (set! (-> s5-1 all-visible?) #f) ) ) ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) diff --git a/goal_src/engine/data/art-h.gc b/goal_src/engine/data/art-h.gc index a4b61e2ad7..9988f2d0c5 100644 --- a/goal_src/engine/data/art-h.gc +++ b/goal_src/engine/data/art-h.gc @@ -128,7 +128,7 @@ :size-assert #x14 :flag-assert #xd00000014 (:methods - (dummy-9 (_type_) _type_ 9) + (login (_type_) _type_ 9) (dummy-10 (_type_ string type) art-element 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) @@ -141,7 +141,6 @@ :size-assert #x20 :flag-assert #xd00000020 (:methods - (dummy-9 (_type_) _type_ 9) (dummy-10 (_type_ string type) art-element 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) @@ -163,6 +162,7 @@ (artist-step float :offset 28) (master-art-group-name string :offset 32) (master-art-group-index int32 :offset 36) + (blerc-data (pointer uint8) :offset 40) ;; todo, this is probably something else (frames pointer :offset 44) (data joint-anim-compressed :dynamic) ) diff --git a/goal_src/engine/dma/dma-bucket.gc b/goal_src/engine/dma/dma-bucket.gc index 651dc76dce..3e51532885 100644 --- a/goal_src/engine/dma/dma-bucket.gc +++ b/goal_src/engine/dma/dma-bucket.gc @@ -54,31 +54,30 @@ ) ;; update base ptr of dma-buffer to point after the buckets. (set! (-> dma-buf base) (the-as pointer current-bucket)) - initial-bucket + (the (inline-array dma-bucket) initial-bucket) ) ) - -(defun dma-buffer-patch-buckets ((bucket dma-bucket) (count int)) +(defun dma-buffer-patch-buckets ((bucket (inline-array dma-bucket)) (count int)) "After adding all data to buckets, call this to stitch together the chains for - count consecutive buckets" + count consecutive buckets" (when (nonzero? bucket) (dotimes (i count) ;; set last tag's address to the next bucket. - (set! (-> bucket last 0 addr) (the-as int (&+ (the-as pointer bucket) 16))) + (set! (-> bucket 0 last 0 addr) (the-as int (the-as pointer (-> bucket 1)))) ;; clear last pointer. - (set! (-> bucket last) (the-as (pointer dma-tag) 0)) + (set! (-> bucket 0 last) (the-as (pointer dma-tag) 0)) ;; next bucket - (set! bucket (&+ bucket 16)) + (set! bucket (the-as (inline-array dma-bucket) (-> bucket 1))) ) ) bucket ) -(defun dma-bucket-insert-tag ((base dma-bucket) (idx bucket-id) (tag-start pointer) (tag-end (pointer dma-tag))) - "Add a dma chain to the idx bucket" +(defun dma-bucket-insert-tag ((base (inline-array dma-bucket)) (idx bucket-id) (tag-start pointer) (tag-end (pointer dma-tag))) + "Add a DMA chain to the bucket" ;; find the bucket - (let ((bucket (the-as dma-bucket (&+ base (the-as uint (shl idx 4)))))) + (let ((bucket (-> base idx))) ;; update our last bucket to point to this one. ;; this is abusing the dma-bucket type to set the "addr" field of the dma-tag. (set! (-> (the-as dma-bucket (-> bucket last)) next) (the-as uint tag-start)) @@ -87,3 +86,4 @@ ) tag-start ) + diff --git a/goal_src/engine/draw/drawable.gc b/goal_src/engine/draw/drawable.gc index 85892e58e2..3f4e373396 100644 --- a/goal_src/engine/draw/drawable.gc +++ b/goal_src/engine/draw/drawable.gc @@ -232,9 +232,7 @@ ) ;; add the buckets - (set! (-> new-frame bucket-group) - (the-as dma-bucket (dma-buffer-add-buckets (-> new-frame calc-buf) 69)) - ) + (set! (-> new-frame bucket-group)(dma-buffer-add-buckets (-> new-frame calc-buf) 69)) ) ;; initialize the debug bucket diff --git a/goal_src/engine/gfx/eye-h.gc b/goal_src/engine/gfx/eye-h.gc index db04ac9ac6..3e288bf6ae 100644 --- a/goal_src/engine/gfx/eye-h.gc +++ b/goal_src/engine/gfx/eye-h.gc @@ -66,3 +66,5 @@ (set! (-> *eye-control-array* data v1-5 random-time) (the-as uint 60)) (set! (-> *eye-control-array* data v1-5 blink) 0.0) ) + +(define-extern get-eye-block (function int int int)) \ No newline at end of file diff --git a/goal_src/engine/gfx/font.gc b/goal_src/engine/gfx/font.gc index 3c8aefc303..d5af44ea98 100644 --- a/goal_src/engine/gfx/font.gc +++ b/goal_src/engine/gfx/font.gc @@ -5,9 +5,11 @@ ;; name in dgo: font ;; dgos: GAME, ENGINE +;; Font asm macros: +;; these could likely be reimplemented within the OpenGOAL compiler and be faster. + (defmacro .sll (result in sa) `(set! ,result (sext32 (the-as int (shl (logand ,in #xffffffff) ,sa)))) - ;`(set! ,result (shl (the-as int ,in) ,sa)) ) (defmacro .movz (result value check original) @@ -18,6 +20,8 @@ ) (defmacro .movz-128 (result value check original) + "movz, but keeps the upper 64 bits of a 128-bit register the same. + This is undocumented, but the game depends on it." `(let ((temp (new 'stack 'array 'uint64 2))) (set! (-> (the (pointer uint128) temp)) ,original) (if (= ,check 0) @@ -47,7 +51,6 @@ (defmacro .addu (result a b) `(set! ,result (sext32 (logand (+ (the-as int ,a) (the-as int ,b)) #xffffffff))) - ;`(set! ,result (+ (the-as int ,a) (the-as int ,b))) ) (defmacro sext32 (in) @@ -55,15 +58,12 @@ ) (defmacro .sra (result in sa) - ;;`(set! ,result (sext32 (logand #xffffffff (sar (the-as int ,in) ,sa)))) `(set! ,result (sext32 (sar (logand #xffffffff (the-as int ,in)) ,sa))) - ;`(sar (the-as int ,in) ,sa) ) -;; definition for symbol *font12-table*, type (inline-array vector) -(define - *font12-table* +;; font vertex table. +(define *font12-table* (new 'static 'inline-array vector 250 (new 'static 'vector :x 0.0039 :y 0.0019 :z 1.0 :w 15.0) (new 'static 'vector :x 0.0976 :y 0.0019 :z 1.0 :w 15.0) @@ -318,9 +318,7 @@ ) ) -;; definition for symbol *font24-table*, type (inline-array vector) -(define - *font24-table* +(define *font24-table* (new 'static 'inline-array vector 289 (new 'static 'vector :x 0.0039 :y 0.0019 :z 1.0 :w 12.0) (new 'static 'vector :x 0.0976 :y 0.0019 :z 1.0 :w 12.0) @@ -614,153 +612,27 @@ ) ) -(defmacro print-vf (vf &key (name #f)) - "Print out a vf register as a vector." - `(let ((temp (new 'stack 'vector))) - (.svf temp ,vf) - ,(if name - `(format 0 "~A: ~`vector`P~%" (quote ,name) temp) - `(format 0 "~`vector`P~%" temp) - ) - ) - ) - (defun draw-string ((str-in string) (context dma-buffer) (arg2 font-context)) + "Draw a string. Writes dma to the given buffer." (local-vars - (r0 uint128) - (v0-0 float) - (a0-2 int) - (font-table-12 (inline-array vector)) - (a3-6 (inline-array vector)) - (a3-8 (inline-array vector)) - (t0-1 int) - (q-hi-tmpl uint128) - (color-array-prod int) - (q-verts-2t uint128) - (q-verts-2 uint128) - (q-verts-3t uint128) - (q-verts-3 uint128) - (t4-6 int) - (fc-cr uint) - (t4-16 int) - (t4-17 int) - (t4-18 float) - (t4-19 int) - (t4-23 int) - (t4-32 int) - (t4-33 int) - (t4-36 uint128) - (t4-37 uint128) - (q-verts-1t uint128) - (q-verts-1 uint128) - (not-sc-lit1 uint) - (not-sc-~ uint) - (t5-6 int) - (t5-7 int) - (t5-9 int) - (t5-10 uint) - (t5-11 uint) - (t5-13 int) - (t5-14 int) - (t5-17 int) - (t5-18 int) - (t5-19 float) - (t5-20 int) - (t5-23 uint128) - (t5-24 uint) - (t5-25 uint) - (t5-27 int) - (t5-28 int) - (t5-32 uint128) - (t5-33 uint128) - (t5-35 uint128) - (t5-36 uint128) - (t5-39 int) - (t5-40 int) - (t5-41 float) - (t5-42 int) - (t5-45 uint128) - (q-verts-0t uint128) - (q-verts-0 uint128) - (t6-3 uint) - (t6-4 uint) - (t6-5 uint) - (t6-6 uint) - (t6-7 uint) - (t6-10 uint) - (t6-11 uint) - (t6-12 uint) - (t6-13 uint) - (t6-14 uint) - (t6-16 uint) - (t6-20 uint) - (t6-21 uint) - (t6-22 uint) - (t6-23 uint) - (t6-24 uint) - (t6-28 uint128) - (t6-29 uint128) - (t6-31 uint) - (t7-0 uint) - (t7-2 uint) - (t7-3 uint) - (t7-4 uint) - (t7-5 uint) - (t7-6 uint) - (t7-7 uint) - (t7-8 uint) - (t7-9 uint) - (t7-10 uint) - (t7-11 uint) - (t7-12 uint) - (t7-13 uint) - (t7-14 uint) - (t7-15 uint) - (t7-16 uint) - (t7-17 uint) - (t7-18 uint) - (t7-20 uint) - (t7-21 uint) - (t7-22 uint) - (t7-23 uint) - (t7-24 uint) - (t7-25 uint) - (t7-26 uint) - (t7-27 uint) - (t7-28 uint) - (t7-29 uint) - (t7-30 uint) - (t7-31 uint) - (t7-32 uint) - (t7-33 uint) - (t7-34 uint) - (t7-35 uint) - (t7-36 uint) - (t7-38 uint) - (t7-39 uint) - (t7-40 uint) - (t7-41 uint) - (t7-42 uint) - (t7-43 uint) - (t7-44 uint) - (t7-45 uint) - (t7-46 uint) - (t7-47 uint) - (t7-48 uint) - (t7-49 uint) - (t7-50 uint) - (t7-51 uint) - (t7-52 uint) - (t7-53 uint) - (t8-0 uint) - (t8-1 int) - (t8-2 uint) - (t8-3 int) - (t8-4 uint) - (t8-5 int) - (f31-0 none) - ) + (r0 uint128) (v0-0 float) (a0-2 int) (font-table-12 (inline-array vector)) (a3-6 (inline-array vector)) + (a3-8 (inline-array vector)) (t0-1 int) (q-hi-tmpl uint128) (color-array-prod int) (q-verts-2t uint128) + (q-verts-2 uint128) (q-verts-3t uint128) (q-verts-3 uint128) (t4-6 int) (fc-cr uint) (t4-16 int) (t4-17 int) + (t4-18 float) (t4-19 int) (t4-23 int) (t4-32 int) (t4-33 int) (t4-36 uint128) (t4-37 uint128) (q-verts-1t uint128) + (q-verts-1 uint128) (not-sc-lit1 uint) (not-sc-~ uint) (t5-6 int) (t5-7 int) (t5-9 int) (t5-10 uint) (t5-11 uint) + (t5-13 int) (t5-14 int) (t5-17 int) (t5-18 int) (t5-19 float) (t5-20 int) (t5-23 uint128) (t5-24 uint) (t5-25 uint) + (t5-27 int) (t5-28 int) (t5-32 uint128) (t5-33 uint128) (t5-35 uint128) (t5-36 uint128) (t5-39 int) (t5-40 int) + (t5-41 float) (t5-42 int) (t5-45 uint128) (q-verts-0t uint128) (q-verts-0 uint128) (t6-3 uint) (t6-4 uint) (t6-5 uint) + (t6-6 uint) (t6-7 uint) (t6-10 uint) (t6-11 uint) (t6-12 uint) (t6-13 uint) (t6-14 uint) (t6-16 uint) (t6-20 uint) + (t6-21 uint) (t6-22 uint) (t6-23 uint) (t6-24 uint) (t6-28 uint128) (t6-29 uint128) (t6-31 uint) (t7-0 uint) + (t7-2 uint) (t7-3 uint) (t7-4 uint) (t7-5 uint) (t7-6 uint) (t7-7 uint) (t7-8 uint) (t7-9 uint) (t7-10 uint) + (t7-11 uint) (t7-12 uint) (t7-13 uint) (t7-14 uint) (t7-15 uint) (t7-16 uint) (t7-17 uint) (t7-18 uint) (t7-20 uint) + (t7-21 uint) (t7-22 uint) (t7-23 uint) (t7-24 uint) (t7-25 uint) (t7-26 uint) (t7-27 uint) (t7-28 uint) (t7-29 uint) + (t7-30 uint) (t7-31 uint) (t7-32 uint) (t7-33 uint) (t7-34 uint) (t7-35 uint) (t7-36 uint) (t7-38 uint) (t7-39 uint) + (t7-40 uint) (t7-41 uint) (t7-42 uint) (t7-43 uint) (t7-44 uint) (t7-45 uint) (t7-46 uint) (t7-47 uint) (t7-48 uint) + (t7-49 uint) (t7-50 uint) (t7-51 uint) (t7-52 uint) (t7-53 uint) (t8-0 uint) (t8-1 int) (t8-2 uint) (t8-3 int) + (t8-4 uint) (t8-5 int)) (set! r0 (the-as uint128 0)) (rlet ((acc :class vf) @@ -795,1269 +667,968 @@ (vf8 :class vf) (vf9 :class vf) ) - (init-vf0-vector) - (let ((v1-0 *math-camera*)) - (.lvf vf26 (&-> v1-0 hvdf-off quad)) - (.lvf vf27 (&-> v1-0 hvdf-off quad)) - ) - (.add.w.vf vf26 vf26 vf0 :mask #b11) - (.add.w.vf vf26 vf26 vf0 :mask #b1) - (let ((v1-1 (-> arg2 mat))) - (.lvf vf25 (&-> arg2 context-vec quad)) - (.lvf vf23 (&-> arg2 origin quad)) - (.lvf vf24 (&-> arg2 origin quad)) - (.lvf vf28 (&-> v1-1 vector 0 quad)) - (.lvf vf29 (&-> v1-1 vector 1 quad)) - (.lvf vf30 (&-> v1-1 vector 2 quad)) - (.lvf vf31 (&-> v1-1 vector 3 quad)) - ) - (let ((v1-3 *video-parms*)) - (.lvf vf1 (+ (the-as int v1-3) 64)) - ) - (.mul.vf vf25 vf25 vf1 :mask #b11) - (.mul.vf vf23 vf23 vf1 :mask #b11) - (.mul.vf vf24 vf24 vf1 :mask #b11) - (let ((fw *font-work*)) - (set! (-> fw buf) context) - (let ((dma-out (-> context base))) - (set! (-> fw str-ptr) (the-as uint str-in)) - (let ((flags (-> arg2 flags-signed))) - (.mov.vf vf1 vf0) - (.mov.vf vf2 vf0) - (.mov.vf vf3 vf0) - (.mov.vf vf4 vf0) - (set! (-> fw flags) (the-as font-flags flags)) - (.lvf vf16 (&-> fw size-st1 quad)) - (.lvf vf17 (&-> fw size-st2 quad)) - (.lvf vf18 (&-> fw size-st3 quad)) - (let ((has-flag-size24 (logand flags 32))) - (nop!) - (b! - (nonzero? has-flag-size24) - cfg-2 - :delay - (set! font-table-12 *font12-table*) + (init-vf0-vector) + (let ((v1-0 *math-camera*)) + (.lvf vf26 (&-> v1-0 hvdf-off quad)) + (.lvf vf27 (&-> v1-0 hvdf-off quad)) + ) + (.add.w.vf vf26 vf26 vf0 :mask #b11) + (.add.w.vf vf26 vf26 vf0 :mask #b1) + (let ((v1-1 (-> arg2 mat))) + (.lvf vf25 (&-> arg2 context-vec quad)) + (.lvf vf23 (&-> arg2 origin quad)) + (.lvf vf24 (&-> arg2 origin quad)) + (.lvf vf28 (&-> v1-1 vector 0 quad)) + (.lvf vf29 (&-> v1-1 vector 1 quad)) + (.lvf vf30 (&-> v1-1 vector 2 quad)) + (.lvf vf31 (&-> v1-1 vector 3 quad)) + ) + (let ((v1-3 *video-parms*)) + (.lvf vf1 (+ (the-as int v1-3) 64)) + ) + (.mul.vf vf25 vf25 vf1 :mask #b11) + (.mul.vf vf23 vf23 vf1 :mask #b11) + (.mul.vf vf24 vf24 vf1 :mask #b11) + (let ((fw *font-work*)) + (set! (-> fw buf) context) + (let ((dma-out (-> context base))) + (set! (-> fw str-ptr) (the-as uint str-in)) + (let ((flags (-> arg2 flags-signed))) + (.mov.vf vf1 vf0) + (.mov.vf vf2 vf0) + (.mov.vf vf3 vf0) + (.mov.vf vf4 vf0) + (set! (-> fw flags) (the-as uint flags)) + (.lvf vf16 (&-> fw size-st1 quad)) + (.lvf vf17 (&-> fw size-st2 quad)) + (.lvf vf18 (&-> fw size-st3 quad)) + (let ((has-flag-size24 (logand flags 32))) + (b! + (nonzero? has-flag-size24) + cfg-2 + :delay + (set! font-table-12 *font12-table*) + ) + ) + (let ((font-table-to-use font-table-12)) + (.lvf vf13 (&-> fw size1-small quad)) + (.lvf vf14 (&-> fw size2-small quad)) + (.lvf vf15 (&-> fw size3-small quad)) + (let ((q-lo-tmpl (-> fw small-font-lo-tmpl-qw))) + (b! #t cfg-3 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) + (label cfg-2) + (set! font-table-to-use *font24-table*) + (.lvf vf13 (&-> fw size1-large quad)) + (.lvf vf14 (&-> fw size2-large quad)) + (.lvf vf15 (&-> fw size3-large quad)) + (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) + (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw)) + (label cfg-3) + (let ((in-color (-> arg2 color-s32))) + (set! (-> fw last-color-32) in-color) + (.sll color-array-prod in-color 4) + ) + (let ((fw+col (the-as object (+ color-array-prod (the-as int fw))))) + (let ((q-verts-0p (the-as uint128 (-> (the-as (pointer uint32) fw+col) 496)))) + (let ((q-verts-1p (the-as uint128 (-> (the-as (pointer uint32) fw+col) 497)))) + (.pextlb q-verts-0t r0 q-verts-0p) + (let ((q-verts-2p (the-as uint128 (-> (the-as (pointer uint32) fw+col) 498)))) + (.pextlh q-verts-0 r0 q-verts-0t) + (let ((q-verts-3p (the-as uint128 (-> (the-as (pointer uint32) fw+col) 499)))) + (.pextlb q-verts-1t r0 q-verts-1p) + (set! (-> fw current-verts color 0 quad) (the-as uint128 q-verts-0)) + (.pextlh q-verts-1 r0 q-verts-1t) + (set! (-> fw dest-verts color 0 quad) (the-as uint128 q-verts-0)) + (.pextlb q-verts-2t r0 q-verts-2p) + (set! (-> fw current-verts color 1 quad) (the-as uint128 q-verts-1)) + (.pextlh q-verts-2 r0 q-verts-2t) + (set! (-> fw dest-verts color 1 quad) (the-as uint128 q-verts-1)) + (.pextlb q-verts-3t r0 q-verts-3p) + ) + ) + ) + ) + ) + (set! (-> fw current-verts color 2 quad) (the-as uint128 q-verts-2)) + (.pextlh q-verts-3 r0 q-verts-3t) + (set! (-> fw dest-verts color 2 quad) (the-as uint128 q-verts-2)) + (set! (-> fw current-verts color 3 quad) (the-as uint128 q-verts-3)) + (set! (-> fw dest-verts color 3 quad) (the-as uint128 q-verts-3)) + (let ((fw2 (the-as object fw))) + (label cfg-4) + (let ((str-char (-> (the-as (pointer uint8) str-in) 4))) + (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) + (b! (zero? str-char) cfg-67 :delay (set! not-sc-lit1 (+ str-char -1))) + (b! (zero? not-sc-lit1) cfg-54 + :delay (set! not-sc-~ (+ str-char -126)) + ) + (b! (nonzero? not-sc-~) cfg-55) + (set! str-char (-> (the-as (pointer uint8) str-in) 4)) + (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) + (let ((t5-5 0) + (t6-2 0) + ) + (b! (zero? str-char) cfg-67 :delay (set! t7-0 (+ str-char -43))) + (.movz t5-6 str-char t7-0 t5-5) + (let ((t7-1 (+ str-char -45))) + (.movz t5-7 str-char t7-1 t5-6) + ) + (b! (nonzero? t5-7) cfg-15 :delay (set! t7-2 (+ str-char -121))) + (b! (zero? t7-2) cfg-52 :delay (set! t6-3 (+ str-char -89))) + (b! (zero? t6-3) cfg-52 :delay (set! t6-4 (+ str-char -122))) + (b! (zero? t6-4) cfg-53 :delay (set! t6-5 (+ str-char -90))) + (b! (zero? t6-5) cfg-53 :delay (set! t6-6 (+ str-char -48))) + (b! (< (the-as int t6-6) 0) + cfg-55 + :delay (set! t6-7 (+ str-char -57)) + ) + (b! (> (the-as int t6-7) 0) + cfg-55 + :delay (set! t6-2 (the-as int (+ str-char -48))) + ) + (label cfg-15) + (set! str-char (-> (the-as (pointer uint8) str-in) 4)) + (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) + (b! (zero? str-char) cfg-67 :delay (set! t7-3 (+ str-char -110))) + (b! (zero? t7-3) cfg-33 :delay (set! t7-4 (+ str-char -78))) + (b! (zero? t7-4) cfg-33 :delay (set! t7-5 (+ str-char -108))) + (b! (zero? t7-5) cfg-4 :delay (set! t7-6 (+ str-char -76))) + (b! (zero? t7-6) cfg-4 :delay (set! t7-7 (+ str-char -119))) + (b! (zero? t7-7) cfg-4 :delay (set! t7-8 (+ str-char -87))) + (b! (zero? t7-8) cfg-4 :delay (set! t7-9 (+ str-char -107))) + (b! (zero? t7-9) cfg-36 :delay (set! t7-10 (+ str-char -75))) + (b! (zero? t7-10) cfg-36 :delay (set! t7-11 (+ str-char -106))) + (b! (zero? t7-11) cfg-38 :delay (set! t7-12 (+ str-char -74))) + (b! (zero? t7-12) cfg-38 :delay (set! t7-13 (+ str-char -104))) + (b! (zero? t7-13) cfg-42 :delay (set! t7-14 (+ str-char -72))) + (b! (zero? t7-14) cfg-42 :delay (set! t7-15 (+ str-char -118))) + (b! (zero? t7-15) cfg-47 :delay (set! t7-16 (+ str-char -86))) + (b! (zero? t7-16) cfg-47 :delay (set! t7-17 (+ str-char -48))) + (b! (< (the-as int t7-17) 0) + cfg-55 + :delay (set! t8-0 (+ str-char -57)) + ) + (b! (> (the-as int t8-0) 0) cfg-55 :delay (.sll t8-1 t6-2 2)) + (let ((t4-5 (+ t6-2 t8-1))) + (.sll t4-6 t4-5 1) + ) + (b! #t cfg-15 :delay (set! t6-2 (+ t4-6 t7-17))) + (label cfg-33) + (b! (nonzero? t6-2) cfg-35 :delay (set! t0-1 -33)) + (set! font-table-to-use *font12-table*) + (.lvf vf13 (&-> fw size1-small quad)) + (.lvf vf14 (&-> fw size2-small quad)) + (.lvf vf15 (&-> fw size3-small quad)) + (set! flags (logand flags t0-1)) + (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) + (b! #t cfg-4 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) + (label cfg-35) + (set! font-table-to-use *font24-table*) + (.lvf vf13 (&-> fw size1-large quad)) + (.lvf vf14 (&-> fw size2-large quad)) + (.lvf vf15 (&-> fw size3-large quad)) + (set! flags (logior flags 32)) + (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) + (b! #t cfg-4 :delay (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw))) + (label cfg-36) + (let ((t4-7 -3)) + (b! (zero? t6-2) cfg-4 :delay (set! flags (logand flags t4-7))) + ) + (b! #t cfg-4 :delay (set! flags (logior flags 2))) + (label cfg-38) + (let ((t4-8 -21) + (t5-8 (+ t6-2 -2)) + ) + (b! (zero? t6-2) cfg-4 :delay (set! flags (logand flags t4-8))) + (b! (zero? t5-8) cfg-41) + ) + (b! #t cfg-4 :delay (set! flags (logior flags 16))) + (label cfg-41) + (b! #t cfg-4 :delay (set! flags (logior flags 4))) + (label cfg-42) + (.mov vf1 t6-2) + (let ((t4-9 (+ t5-7 -45))) + (b! (zero? t5-7) cfg-46 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-9) cfg-45) + ) + (b! #t cfg-4 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-45) + (b! #t cfg-4 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-46) + (b! #t cfg-4 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) + (label cfg-47) + (.mov vf1 t6-2) + ) + (let ((t4-10 (+ t5-7 -45))) + (b! (zero? t5-7) cfg-51 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-10) cfg-50) + ) + (b! #t cfg-4 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-50) + (b! #t cfg-4 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-51) + (b! #t cfg-4 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) + (label cfg-52) + (b! #t cfg-4 :delay (.svf (&-> fw save quad) vf23)) + (label cfg-53) + (b! #t cfg-4 :delay (.lvf vf23 (&-> fw save quad))) + (label cfg-54) + (let ((t4-11 (-> (the-as (pointer uint8) str-in) 4))) + (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) + (.add.vf vf4 vf23 vf15 :mask #b111) + (let ((t4-12 (logand t4-11 127))) + (.sub.vf vf1 vf25 vf23) + (let ((t4-13 (+ t4-12 255))) + (b! #t cfg-62 :delay (.sll t5-9 t4-13 4)) + ) + ) + ) + (label cfg-55) + (.add.vf vf4 vf23 vf15 :mask #b111) + (.sll t5-9 str-char 4) + (.sub.vf vf1 vf25 vf23) + (b! (= str-char 10) cfg-57 :delay (set! fc-cr (+ str-char -13))) + ) + (b! (nonzero? fc-cr) cfg-62) + (label cfg-57) + (.sub.vf vf1 vf23 vf24) + (b! (logtest? flags 16) cfg-60 :delay (set! t4-16 (logand flags 4))) + (b! (nonzero? t4-16) cfg-61) + (.add.x.vf vf23 vf0 vf24 :mask #b1) + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + (.add.w.vf vf23 vf23 vf15 :mask #b10) + (b! + #t + cfg-4 + :delay + (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) + ) + (label cfg-60) + (.sub.vf vf23 vf24 vf1 :mask #b1) + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + (.add.x.vf vf23 vf0 vf24 :mask #b1) + (.add.w.vf vf23 vf23 vf15 :mask #b10) + (b! + #t + cfg-4 + :delay + (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) + ) + (label cfg-61) + (.mul.w.vf vf1 vf1 vf16 :mask #b1) + (.sub.vf vf23 vf24 vf1 :mask #b1) + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + (.add.x.vf vf23 vf0 vf24 :mask #b1) + (.add.w.vf vf23 vf23 vf15 :mask #b10) + (b! + #t + cfg-4 + :delay + (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) + ) + (label cfg-62) + (.addu t4-17 t5-9 font-table-to-use) + (.lvf vf5 (+ t4-17 -256)) + (.mov t4-18 vf1) + (b! (< (the-as int t4-18) 0) cfg-67 :delay (.sra t4-19 t4-18 31)) + (.mul.vf vf19 vf5 vf13) + (b! (zero? (logand flags 2)) cfg-65) + (b! #t cfg-66 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) + (label cfg-65) + (.add.w.vf vf23 vf23 vf14 :mask #b1) + (label cfg-66) + (b! #t cfg-4) + (label cfg-67) + (.sub.vf vf1 vf23 vf24) + (b! (logtest? flags 16) cfg-70 :delay (set! a0-2 (logand flags 4))) + (b! (nonzero? a0-2) cfg-71) + (.add.x.vf vf23 vf0 vf24 :mask #b1) + (b! + #t + cfg-72 + :delay + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + ) + (label cfg-70) + (.sub.vf vf23 vf24 vf1 :mask #b1) + (b! + #t + cfg-72 + :delay + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + ) + (label cfg-71) + (.mul.w.vf vf1 vf1 vf16 :mask #b1) + (.sub.vf vf23 vf24 vf1 :mask #b1) + (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) + ) + (label cfg-72) + (let ((a0-3 (-> fw flags-signed))) + (let ((t2-1 (the-as object fw)) + (t3-7 (-> fw str-ptr-signed)) + ) + (.lvf vf23 (&-> (the-as font-work t2-1) justify 0 quad)) + (label cfg-73) + (let ((t4-21 (-> t3-7 4))) + (set! t3-7 (&-> t3-7 1)) + (b! (zero? t4-21) cfg-131 :delay (set! t5-10 (+ t4-21 -1))) + (b! (zero? t5-10) cfg-121 :delay (set! t5-11 (+ t4-21 -126))) + (b! (nonzero? t5-11) cfg-122) + (set! t4-21 (-> t3-7 4)) + (set! t3-7 (&-> t3-7 1)) + (let ((t5-12 0) + (t6-9 0) + ) + (b! (zero? t4-21) cfg-131 :delay (set! t7-18 (+ t4-21 -43))) + (.movz t5-13 t4-21 t7-18 t5-12) + (let ((t7-19 (+ t4-21 -45))) + (.movz t5-14 t4-21 t7-19 t5-13) + ) + (b! (nonzero? t5-14) cfg-84 :delay (set! t7-20 (+ t4-21 -121))) + (b! (zero? t7-20) cfg-119 :delay (set! t6-10 (+ t4-21 -89))) + (b! (zero? t6-10) cfg-119 :delay (set! t6-11 (+ t4-21 -122))) + (b! (zero? t6-11) cfg-120 :delay (set! t6-12 (+ t4-21 -90))) + (b! (zero? t6-12) cfg-120 :delay (set! t6-13 (+ t4-21 -48))) + (b! + (< (the-as int t6-13) 0) + cfg-122 + :delay + (set! t6-14 (+ t4-21 -57)) + ) + (b! + (> (the-as int t6-14) 0) + cfg-122 + :delay + (set! t6-9 (the-as int (+ t4-21 -48))) + ) + (label cfg-84) + (set! t4-21 (-> t3-7 4)) + (set! t3-7 (&-> t3-7 1)) + (b! (zero? t4-21) cfg-131 :delay (set! t7-21 (+ t4-21 -110))) + (b! (zero? t7-21) cfg-102 :delay (set! t7-22 (+ t4-21 -78))) + (b! (zero? t7-22) cfg-102 :delay (set! t7-23 (+ t4-21 -108))) + (b! (zero? t7-23) cfg-73 :delay (set! t7-24 (+ t4-21 -76))) + (b! (zero? t7-24) cfg-73 :delay (set! t7-25 (+ t4-21 -119))) + (b! (zero? t7-25) cfg-105 :delay (set! t7-26 (+ t4-21 -87))) + (b! (zero? t7-26) cfg-105 :delay (set! t7-27 (+ t4-21 -107))) + (b! (zero? t7-27) cfg-107 :delay (set! t7-28 (+ t4-21 -75))) + (b! (zero? t7-28) cfg-107 :delay (set! t7-29 (+ t4-21 -106))) + (b! (zero? t7-29) cfg-73 :delay (set! t7-30 (+ t4-21 -74))) + (b! (zero? t7-30) cfg-73 :delay (set! t7-31 (+ t4-21 -104))) + (b! (zero? t7-31) cfg-109 :delay (set! t7-32 (+ t4-21 -72))) + (b! (zero? t7-32) cfg-109 :delay (set! t7-33 (+ t4-21 -118))) + (b! (zero? t7-33) cfg-114 :delay (set! t7-34 (+ t4-21 -86))) + (b! (zero? t7-34) cfg-114 :delay (set! t7-35 (+ t4-21 -48))) + (b! + (< (the-as int t7-35) 0) + cfg-122 + :delay + (set! t8-2 (+ t4-21 -57)) + ) + (b! (> (the-as int t8-2) 0) cfg-122 :delay (.sll t8-3 t6-9 2)) + (let ((t4-22 (+ t6-9 t8-3))) + (.sll t4-23 t4-22 1) + ) + (b! #t cfg-84 :delay (set! t6-9 (+ t4-23 t7-35))) + (label cfg-102) + (b! (nonzero? t6-9) cfg-104 :delay (set! a3-6 *font12-table*)) + (set! font-table-to-use a3-6) + (let ((t0-2 -33)) + (.lvf vf13 (&-> fw size1-small quad)) + (.lvf vf14 (&-> fw size2-small quad)) + (.lvf vf15 (&-> fw size3-small quad)) + (set! a0-3 (logand a0-3 t0-2)) + ) + (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) + (b! #t cfg-73 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) + (label cfg-104) + (set! font-table-to-use *font24-table*) + (.lvf vf13 (&-> fw size1-large quad)) + (.lvf vf14 (&-> fw size2-large quad)) + (.lvf vf15 (&-> fw size3-large quad)) + (set! a0-3 (logior a0-3 32)) + (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) + (b! #t cfg-73 :delay (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw))) + (label cfg-105) + (let ((t4-24 -2)) + (b! (zero? t6-9) cfg-73 :delay (set! a0-3 (logand a0-3 t4-24))) + ) + (b! #t cfg-73 :delay (set! a0-3 (logior a0-3 1))) + (label cfg-107) + (let ((t4-25 -3)) + (b! (zero? t6-9) cfg-73 :delay (set! a0-3 (logand a0-3 t4-25))) + ) + (b! #t cfg-73 :delay (set! a0-3 (logior a0-3 2))) + (label cfg-109) + (.mov vf1 t6-9) + (let ((t4-26 (+ t5-14 -45))) + (b! (zero? t5-14) cfg-113 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-26) cfg-112) + ) + (b! #t cfg-73 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-112) + (b! #t cfg-73 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-113) + (b! #t cfg-73 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) + (label cfg-114) + (.mov vf1 t6-9) + ) + (let ((t4-27 (+ t5-14 -45))) + (b! (zero? t5-14) cfg-118 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-27) cfg-117) + ) + (b! #t cfg-73 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-117) + (b! #t cfg-73 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-118) + (b! #t cfg-73 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) + (label cfg-119) + (b! #t cfg-73 :delay (.svf (&-> fw save quad) vf23)) + (label cfg-120) + (b! #t cfg-73 :delay (.lvf vf23 (&-> fw save quad))) + (label cfg-121) + (set! t4-21 (-> t3-7 4)) + (set! t3-7 (&-> t3-7 1)) + (.add.vf vf4 vf23 vf15 :mask #b111) + (let ((t5-15 (logand t4-21 127))) + (.sub.vf vf1 vf25 vf23) + (let ((t5-16 (+ t5-15 255))) + (b! #t cfg-125 :delay (.sll t5-17 t5-16 4)) + ) + ) + (label cfg-122) + (.add.vf vf4 vf23 vf15 :mask #b111) + (.sll t5-17 t4-21 4) + (.sub.vf vf1 vf25 vf23) + (b! (= t4-21 10) cfg-124 :delay (set! t6-16 (+ t4-21 -13))) + (b! (nonzero? t6-16) cfg-125 :delay (logand a0-3 1)) + (label cfg-124) + (set! t2-1 (&-> (the-as (pointer uint64) t2-1) 2)) + (b! + #t + cfg-73 + :delay + (.lvf vf23 (+ (the-as int t2-1) 944)) + ) + (label cfg-125) + (.addu t5-18 t5-17 font-table-to-use) + (.lvf vf5 (+ t5-18 -256)) + (.mov t5-19 vf1) + (b! + (< (the-as int t5-19) 0) + cfg-131 + :delay + (.add.vf vf6 vf5 vf16 :mask #b111) + ) + (.sra t5-20 t5-19 31) + (.add.vf vf7 vf5 vf17 :mask #b111) + (b! (< t5-20 0) cfg-73 :delay (.add.vf vf8 vf5 vf18 :mask #b111)) + (.add.vf vf1 vf23 vf0 :mask #b111) + (.add.vf vf2 vf23 vf13 :mask #b111) + (.svf (&-> fw current-verts tex-st 0 quad) vf5) + (.add.vf vf3 vf23 vf14 :mask #b111) + (.svf (&-> fw current-verts tex-st 1 quad) vf6) + (.mul.vf vf19 vf5 vf13) + (.svf (&-> fw current-verts tex-st 2 quad) vf7) + (.svf (&-> fw current-verts tex-st 3 quad) vf8) + (.svf (&-> fw current-verts pos 0 quad) vf1) + (.svf (&-> fw current-verts pos 1 quad) vf2) + (.svf (&-> fw current-verts pos 2 quad) vf3) + (.svf (&-> fw current-verts pos 3 quad) vf4) + (.lvf vf1 (&-> fw current-verts pos 0 quad)) + (.lvf vf2 (&-> fw current-verts pos 1 quad)) + (.mul.w.vf acc vf31 vf0) + (.lvf vf3 (&-> fw current-verts pos 2 quad)) + (.add.mul.x.vf acc vf28 vf1 acc) + (.lvf vf4 (&-> fw current-verts pos 3 quad)) + (.add.mul.y.vf acc vf29 vf1 acc) + (.add.mul.z.vf vf1 vf30 vf1 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf2 acc) + (.add.mul.y.vf acc vf29 vf2 acc) + (.add.mul.z.vf vf2 vf30 vf2 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf3 acc) + (.add.mul.y.vf acc vf29 vf3 acc) + (.add.mul.z.vf vf3 vf30 vf3 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf4 acc) + (.add.mul.y.vf acc vf29 vf4 acc) + (.add.mul.z.vf vf4 vf30 vf4 acc) + (.div.vf Q vf25 vf1 :fsf #b10 :ftf #b11) + (let ((t5-21 (-> fw char-tmpl dma-vif quad))) + (let ((t6-18 (-> fw char-tmpl quad 1))) + (set! (-> (the-as (pointer uint128) dma-out) 0) t5-21) + (set! (-> (the-as (pointer uint128) dma-out) 1) t6-18) + ) + ) + (.lvf vf5 (&-> fw current-verts tex-st 0 quad)) + (let ((t5-22 q-lo-tmpl)) + (.lvf vf6 (&-> fw current-verts tex-st 1 quad)) + (let ((t4-28 (logand t4-21 128))) + (.lvf vf7 (&-> fw current-verts tex-st 2 quad)) + ;; note: this relies on (somewhat) undefined behavior that the upper 64-bits of a + ;; gpr aren't changed during movn. + (.movn-128 t5-23 q-hi-tmpl t4-28 t5-22) + ) + ) + ) + ) + (.mul.vf vf1 vf1 Q :mask #b111) + (set! (-> (the-as (pointer uint128) dma-out) 2) (the-as uint128 t5-23)) + (.mul.vf vf5 vf5 Q :mask #b111) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf2 :fsf #b10 :ftf #b11) + (.lvf vf8 (&-> fw current-verts tex-st 3 quad)) + (.add.vf vf1 vf1 vf26) + (.lvf vf9 (&-> fw color-shadow quad)) + (vftoi4.xyzw vf1 vf1) + (.mul.vf vf2 vf2 Q :mask #b111) + (.mul.vf vf6 vf6 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 3) vf5) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf3 :fsf #b10 :ftf #b11) + (.svf (&-> (the-as (pointer uint128) dma-out) 4) vf9) + (.svf (&-> (the-as (pointer uint128) dma-out) 5) vf1) + (.add.vf vf2 vf2 vf26) + (vftoi4.xyzw vf2 vf2) + (.mul.vf vf3 vf3 Q :mask #b111) + (.mul.vf vf7 vf7 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 6) vf6) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf4 :fsf #b10 :ftf #b11) + (.svf (&-> (the-as (pointer uint128) dma-out) 7) vf9) + (.svf (&-> (the-as (pointer uint128) dma-out) 8) vf2) + (.add.vf vf3 vf3 vf26) + (vftoi4.xyzw vf3 vf3) + (.mul.vf vf4 vf4 Q :mask #b111) + (.mul.vf vf8 vf8 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 9) vf7) + (.svf (&-> (the-as (pointer uint128) dma-out) 10) vf9) + (.add.vf vf4 vf4 vf26) + (.svf (&-> (the-as (pointer uint128) dma-out) 11) vf3) + (let ((t4-29 (logand a0-3 2))) + (b! (zero? t4-29) cfg-129) + ) + ) + (b! #t cfg-130 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) + (label cfg-129) + (.add.w.vf vf23 vf23 vf14 :mask #b1) + (label cfg-130) + (vftoi4.xyzw vf4 vf4) + (.svf (&-> (the-as (pointer uint128) dma-out) 12) vf8) + (.svf (&-> (the-as (pointer uint128) dma-out) 13) vf9) + (.svf (&-> (the-as (pointer uint128) dma-out) 14) vf4) + (b! + #t + cfg-73 + :delay + (set! dma-out (&-> (the-as (pointer uint128) dma-out) 15)) + ) + (label cfg-131) + (let ((a0-4 (-> fw flags-signed))) + (let ((t2-2 (the-as object fw)) + (t3-8 (-> fw str-ptr-signed)) + ) + (.lvf vf23 (&-> (the-as font-work t2-2) justify 0 quad)) + (label cfg-132) + (let ((t4-30 (-> t3-8 4))) + (set! t3-8 (&-> t3-8 1)) + (b! (zero? t4-30) cfg-189 :delay (set! t5-24 (+ t4-30 -1))) + (b! (zero? t5-24) cfg-179 :delay (set! t5-25 (+ t4-30 -126))) + (b! (nonzero? t5-25) cfg-180) + (set! t4-30 (-> t3-8 4)) + (set! t3-8 (&-> t3-8 1)) + (let ((t5-26 0) + (t6-19 0) + ) + (b! (zero? t4-30) cfg-189 :delay (set! t7-36 (+ t4-30 -43))) + (.movz t5-27 t4-30 t7-36 t5-26) + (let ((t7-37 (+ t4-30 -45))) + (.movz t5-28 t4-30 t7-37 t5-27) + ) + (b! (nonzero? t5-28) cfg-143 :delay (set! t7-38 (+ t4-30 -121))) + (b! (zero? t7-38) cfg-177 :delay (set! t6-20 (+ t4-30 -89))) + (b! (zero? t6-20) cfg-177 :delay (set! t6-21 (+ t4-30 -122))) + (b! (zero? t6-21) cfg-178 :delay (set! t6-22 (+ t4-30 -90))) + (b! (zero? t6-22) cfg-178 :delay (set! t6-23 (+ t4-30 -48))) + (b! + (< (the-as int t6-23) 0) + cfg-180 + :delay + (set! t6-24 (+ t4-30 -57)) + ) + (b! + (> (the-as int t6-24) 0) + cfg-180 + :delay + (set! t6-19 (the-as int (+ t4-30 -48))) + ) + (label cfg-143) + (set! t4-30 (-> t3-8 4)) + (set! t3-8 (&-> t3-8 1)) + (b! (zero? t4-30) cfg-189 :delay (set! t7-39 (+ t4-30 -110))) + (b! (zero? t7-39) cfg-161 :delay (set! t7-40 (+ t4-30 -78))) + (b! (zero? t7-40) cfg-161 :delay (set! t7-41 (+ t4-30 -108))) + (b! (zero? t7-41) cfg-164 :delay (set! t7-42 (+ t4-30 -76))) + (b! (zero? t7-42) cfg-164 :delay (set! t7-43 (+ t4-30 -119))) + (b! (zero? t7-43) cfg-132 :delay (set! t7-44 (+ t4-30 -87))) + (b! (zero? t7-44) cfg-132 :delay (set! t7-45 (+ t4-30 -107))) + (b! (zero? t7-45) cfg-165 :delay (set! t7-46 (+ t4-30 -75))) + (b! (zero? t7-46) cfg-165 :delay (set! t7-47 (+ t4-30 -106))) + (b! (zero? t7-47) cfg-132 :delay (set! t7-48 (+ t4-30 -74))) + (b! (zero? t7-48) cfg-132 :delay (set! t7-49 (+ t4-30 -104))) + (b! (zero? t7-49) cfg-167 :delay (set! t7-50 (+ t4-30 -72))) + (b! (zero? t7-50) cfg-167 :delay (set! t7-51 (+ t4-30 -118))) + (b! (zero? t7-51) cfg-172 :delay (set! t7-52 (+ t4-30 -86))) + (b! (zero? t7-52) cfg-172 :delay (set! t7-53 (+ t4-30 -48))) + (b! + (< (the-as int t7-53) 0) + cfg-180 + :delay + (set! t8-4 (+ t4-30 -57)) + ) + (b! (> (the-as int t8-4) 0) cfg-180 :delay (.sll t8-5 t6-19 2)) + (let ((t4-31 (+ t6-19 t8-5))) + (.sll t4-32 t4-31 1) + ) + (b! #t cfg-143 :delay (set! t6-19 (+ t4-32 t7-53))) + (label cfg-161) + (b! (nonzero? t6-19) cfg-163 :delay (set! a3-8 *font12-table*)) + (set! font-table-to-use a3-8) + (let ((t0-3 -33)) + (.lvf vf13 (&-> fw size1-small quad)) + (.lvf vf14 (&-> fw size2-small quad)) + (.lvf vf15 (&-> fw size3-small quad)) + (set! a0-4 (logand a0-4 t0-3)) + ) + (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) + (b! + #t + cfg-132 + :delay + (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw)) + ) + (label cfg-163) + (set! font-table-to-use *font24-table*) + (.lvf vf13 (&-> fw size1-large quad)) + (.lvf vf14 (&-> fw size2-large quad)) + (.lvf vf15 (&-> fw size3-large quad)) + (set! a0-4 (logior a0-4 32)) + (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) + (b! + #t + cfg-132 + :delay + (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw)) + ) + (label cfg-164) + (set! (-> fw last-color-32) t6-19) + (.sll t4-33 t6-19 4) + (let ((t5-29 (-> fw current-verts color 0 quad)) + (t4-34 (the-as object (+ t4-33 (the-as int fw)))) + ) + (let ((t6-25 (-> fw current-verts color 1 quad))) + (set! (-> fw src-verts color 0 quad) t5-29) + (set! (-> fw src-verts color 1 quad) t6-25) + ) + (let ((t5-30 (-> fw current-verts color 2 quad))) + (let ((t6-26 (-> fw current-verts color 3 quad))) + (set! (-> fw src-verts color 2 quad) t5-30) + (set! (-> fw src-verts color 3 quad) t6-26) + ) + ) + (let ((t6-27 (the-as uint128 (deref uint32 (+ (the-as int t4-34) 1984))))) + (let + ((t5-31 + (the-as + uint128 + (-> (the-as font-work t4-34) color-table 0 color 1) + ) + ) + ) + (.pextlb t6-28 r0 t6-27) + (.pextlh t6-29 r0 t6-28) + (.pextlb t5-32 r0 t5-31) + ) + ) + (set! (-> fw current-verts color 0 quad) (the-as uint128 t6-29)) + (.pextlh t5-33 r0 t5-32) + (set! (-> fw dest-verts color 0 quad) (the-as uint128 t6-29)) + (set! (-> fw current-verts color 1 quad) (the-as uint128 t5-33)) + (set! (-> fw dest-verts color 1 quad) (the-as uint128 t5-33)) + (let + ((t5-34 + (the-as + uint128 + (-> (the-as font-work t4-34) color-table 0 color 2) + ) + ) + ) + (let + ((t4-35 + (the-as + uint128 + (-> (the-as font-work t4-34) color-table 0 color 3) + ) + ) + ) + (.pextlb t5-35 r0 t5-34) + (.pextlh t5-36 r0 t5-35) + (.pextlb t4-36 r0 t4-35) + ) + ) + ) + (set! (-> fw current-verts color 2 quad) (the-as uint128 t5-36)) + (.pextlh t4-37 r0 t4-36) + (set! (-> fw dest-verts color 2 quad) (the-as uint128 t5-36)) + (set! (-> fw current-verts color 3 quad) (the-as uint128 t4-37)) + (b! + #t + cfg-132 + :delay + (set! + (-> fw dest-verts color 3 quad) + (the-as uint128 (the-as int t4-37)) + ) + ) + (label cfg-165) + (let ((t4-38 -3)) + (b! (zero? t6-19) cfg-132 :delay (set! a0-4 (logand a0-4 t4-38))) + ) + (b! #t cfg-132 :delay (set! a0-4 (logior a0-4 2))) + (label cfg-167) + (.mov vf1 t6-19) + (let ((t4-39 (+ t5-28 -45))) + (b! (zero? t5-28) cfg-171 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-39) cfg-170) + ) + (b! #t cfg-132 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-170) + (b! #t cfg-132 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-171) + (b! #t cfg-132 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) + (label cfg-172) + (.mov vf1 t6-19) + ) + (let ((t4-40 (+ t5-28 -45))) + (b! (zero? t5-28) cfg-176 :delay (.itof.vf vf1 vf1)) + (b! (zero? t4-40) cfg-175) + ) + (b! #t cfg-132 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-175) + (b! #t cfg-132 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) + (label cfg-176) + (b! #t cfg-132 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) + (label cfg-177) + (let ((t4-41 (-> fw last-color-32))) + (.lvf vf9 (&-> fw current-verts color 0 quad)) + (.lvf vf10 (&-> fw current-verts color 1 quad)) + (.lvf vf11 (&-> fw current-verts color 2 quad)) + (.lvf vf12 (&-> fw current-verts color 3 quad)) + (set! (-> fw save-last-color-32) t4-41) + ) + (.svf (&-> fw save-color 0 quad) vf9) + (.svf (&-> fw save-color 1 quad) vf10) + (.svf (&-> fw save-color 2 quad) vf11) + (.svf (&-> fw save-color 3 quad) vf12) + (b! #t cfg-132 :delay (.svf (&-> fw save quad) vf23)) + (label cfg-178) + (let ((t4-42 (-> fw save-last-color-32))) + (.lvf vf9 (&-> fw save-color 0 quad)) + (.lvf vf10 (&-> fw save-color 1 quad)) + (.lvf vf11 (&-> fw save-color 2 quad)) + (.lvf vf12 (&-> fw save-color 3 quad)) + (set! (-> fw last-color-32) t4-42) + ) + (.svf (&-> fw current-verts color 0 quad) vf9) + (.svf (&-> fw dest-verts color 0 quad) vf9) + (.svf (&-> fw current-verts color 1 quad) vf10) + (.svf (&-> fw dest-verts color 1 quad) vf10) + (.svf (&-> fw current-verts color 2 quad) vf11) + (.svf (&-> fw dest-verts color 2 quad) vf11) + (.svf (&-> fw current-verts color 3 quad) vf12) + (.svf (&-> fw dest-verts color 3 quad) vf12) + (b! #t cfg-132 :delay (.lvf vf23 (&-> fw save quad))) + (label cfg-179) + (set! t4-30 (-> t3-8 4)) + (set! t3-8 (&-> t3-8 1)) + (.add.vf vf4 vf23 vf15 :mask #b111) + (let ((t5-37 (logand t4-30 127))) + (.sub.vf vf1 vf25 vf23) + (let ((t5-38 (+ t5-37 255))) + (b! #t cfg-183 :delay (.sll t5-39 t5-38 4)) + ) + ) + (label cfg-180) + (.add.vf vf4 vf23 vf15 :mask #b111) + (.sll t5-39 t4-30 4) + (.sub.vf vf1 vf25 vf23) + (b! (= t4-30 10) cfg-182 :delay (set! t6-31 (+ t4-30 -13))) + (b! (nonzero? t6-31) cfg-183) + (label cfg-182) + (set! t2-2 (&-> (the-as (pointer uint64) t2-2) 2)) + (b! + #t + cfg-132 + :delay + (.lvf vf23 (+ (the-as int t2-2) 944)) + ) + (label cfg-183) + (.addu t5-40 t5-39 font-table-to-use) + (.lvf vf5 (+ t5-40 -256)) + (.mov t5-41 vf1) + (b! + (< (the-as int t5-41) 0) + cfg-189 + :delay + (.add.vf vf6 vf5 vf16 :mask #b111) + ) + (.sra t5-42 t5-41 31) + (.add.vf vf7 vf5 vf17 :mask #b111) + (b! (< t5-42 0) cfg-132 :delay (.add.vf vf8 vf5 vf18 :mask #b111)) + (.add.vf vf1 vf23 vf0 :mask #b111) + (.add.vf vf2 vf23 vf13 :mask #b111) + (.add.vf vf3 vf23 vf14 :mask #b111) + (.svf (&-> fw current-verts tex-st 0 quad) vf5) + (.add.vf vf4 vf23 vf15 :mask #b111) + (.svf (&-> fw current-verts tex-st 1 quad) vf6) + (.mul.vf vf19 vf5 vf13) + (.svf (&-> fw current-verts tex-st 2 quad) vf7) + (.svf (&-> fw current-verts tex-st 3 quad) vf8) + (.svf (&-> fw current-verts pos 0 quad) vf1) + (.svf (&-> fw current-verts pos 1 quad) vf2) + (.svf (&-> fw current-verts pos 2 quad) vf3) + (.svf (&-> fw current-verts pos 3 quad) vf4) + (.lvf vf1 (&-> fw current-verts pos 0 quad)) + (.lvf vf2 (&-> fw current-verts pos 1 quad)) + (.mul.w.vf acc vf31 vf0) + (.lvf vf3 (&-> fw current-verts pos 2 quad)) + (.add.mul.x.vf acc vf28 vf1 acc) + (.lvf vf4 (&-> fw current-verts pos 3 quad)) + (.add.mul.y.vf acc vf29 vf1 acc) + (.add.mul.z.vf vf1 vf30 vf1 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf2 acc) + (.add.mul.y.vf acc vf29 vf2 acc) + (.add.mul.z.vf vf2 vf30 vf2 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf3 acc) + (.add.mul.y.vf acc vf29 vf3 acc) + (.add.mul.z.vf vf3 vf30 vf3 acc) + (.mul.w.vf acc vf31 vf0) + (.add.mul.x.vf acc vf28 vf4 acc) + (.add.mul.y.vf acc vf29 vf4 acc) + (.add.mul.z.vf vf4 vf30 vf4 acc) + (.div.vf Q vf25 vf1 :fsf #b10 :ftf #b11) + (let ((t5-43 (-> fw char-tmpl dma-vif quad))) + (let ((t6-32 (-> fw char-tmpl quad 1))) + (set! (-> (the-as (pointer uint128) dma-out) 0) t5-43) + (set! (-> (the-as (pointer uint128) dma-out) 1) t6-32) + ) + ) + (.lvf vf5 (&-> fw current-verts tex-st 0 quad)) + (let ((t5-44 q-lo-tmpl)) + (.lvf vf6 (&-> fw current-verts tex-st 1 quad)) + (let ((t4-43 (logand t4-30 128))) + (.lvf vf7 (&-> fw current-verts tex-st 2 quad)) + (.movn-128 t5-45 q-hi-tmpl t4-43 t5-44) + ) + ) + ) + ) + (.mul.vf vf1 vf1 Q :mask #b111) + (set! (-> (the-as (pointer uint128) dma-out) 2) (the uint128 t5-45)) + (.mul.vf vf5 vf5 Q :mask #b111) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf2 :fsf #b10 :ftf #b11) + (.lvf vf8 (&-> fw current-verts tex-st 3 quad)) + (.add.vf vf1 vf1 vf27) + (.lvf vf9 (&-> fw current-verts color 0 quad)) + (.lvf vf10 (&-> fw current-verts color 1 quad)) + (.lvf vf11 (&-> fw current-verts color 2 quad)) + (vftoi4.xyzw vf1 vf1) + (.mul.vf vf2 vf2 Q :mask #b111) + (.mul.vf vf6 vf6 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 3) vf5) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf3 :fsf #b10 :ftf #b11) + (.svf (&-> (the-as (pointer uint128) dma-out) 4) vf9) + (.lvf vf12 (&-> fw current-verts color 3 quad)) + (.svf (&-> (the-as (pointer uint128) dma-out) 5) vf1) + (.add.vf vf2 vf2 vf27) + (vftoi4.xyzw vf2 vf2) + (.mul.vf vf3 vf3 Q :mask #b111) + (.mul.vf vf7 vf7 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 6) vf6) + (.nop.vf) + (.nop.vf) + (.div.vf Q vf25 vf4 :fsf #b10 :ftf #b11) + (.svf (&-> (the-as (pointer uint128) dma-out) 7) vf10) + (.svf (&-> (the-as (pointer uint128) dma-out) 8) vf2) + (.add.vf vf3 vf3 vf27) + (vftoi4.xyzw vf3 vf3) + (.mul.vf vf4 vf4 Q :mask #b111) + (.mul.vf vf8 vf8 Q :mask #b111) + (.svf (&-> (the-as (pointer uint128) dma-out) 9) vf7) + (.svf (&-> (the-as (pointer uint128) dma-out) 10) vf11) + (.add.vf vf4 vf4 vf27) + ;;(s.vf! (+ dma-out 176) vf3) + (.svf (+ (the-as int dma-out) 176) vf3) + (let ((t4-44 (logand a0-4 2))) + (b! (zero? t4-44) cfg-187) + ) + ) + ) + ) + ) + (b! #t cfg-188 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) + (label cfg-187) + (.add.w.vf vf23 vf23 vf14 :mask #b1) + (label cfg-188) + (vftoi4.xyzw vf4 vf4) + ;;(s.vf! (+ dma-out 192) vf8) + (.svf (+ (the-as int dma-out) 192) vf8) + ;;(s.vf! (+ dma-out 208) vf12) + (.svf (+ (the-as int dma-out) 208) vf12) + ;;(s.vf! (+ dma-out 224) vf4) + (.svf (+ (the-as int dma-out) 224) vf4) + (b! #t cfg-132 :delay (set! dma-out (&+ dma-out 240))) + (label cfg-189) + (let ((v1-6 (-> fw buf))) + ;;(s.w! (+ v1-6 4) dma-out) + (set! (-> (the-as (pointer pointer) v1-6) 1) dma-out) + ) + ) + ) + (.lvf vf24 (&-> arg2 origin quad)) + (.sub.vf vf23 vf23 vf24) + (.mov v0-0 vf23) + v0-0 ) - ) - (let ((font-table-to-use font-table-12)) - (nop!) - (.lvf vf13 (&-> fw size1-small quad)) - (nop!) - (.lvf vf14 (&-> fw size2-small quad)) - (nop!) - (.lvf vf15 (&-> fw size3-small quad)) - (nop!) - (let ((q-lo-tmpl (-> fw small-font-lo-tmpl-qw))) - (b! #t cfg-3 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) - (label cfg-2) - (nop!) - (set! font-table-to-use *font24-table*) - (nop!) - (.lvf vf13 (&-> fw size1-large quad)) - (nop!) - (.lvf vf14 (&-> fw size2-large quad)) - (nop!) - (.lvf vf15 (&-> fw size3-large quad)) - (nop!) - (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) - (nop!) - (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw)) - (label cfg-3) - (let ((in-color (-> arg2 color-s32))) - (nop!) - (set! (-> fw last-color-32) in-color) - (nop!) - (.sll color-array-prod in-color 4) - ) - (nop!) - (let ((fw+col (the-as object (+ color-array-prod (the-as int fw))))) - (nop!) - (nop!) - (let - ((q-verts-0p - (the-as uint128 (-> (the-as (pointer uint32) fw+col) 496)) - ) - ) - (nop!) - (let - ((q-verts-1p - (the-as uint128 (-> (the-as (pointer uint32) fw+col) 497)) - ) - ) - (.pextlb q-verts-0t r0 q-verts-0p) - (let - ((q-verts-2p - (the-as uint128 (-> (the-as (pointer uint32) fw+col) 498)) - ) - ) - (.pextlh q-verts-0 r0 q-verts-0t) - (let - ((q-verts-3p - (the-as uint128 (-> (the-as (pointer uint32) fw+col) 499)) - ) - ) - (.pextlb q-verts-1t r0 q-verts-1p) - (set! - (-> fw current-verts color 0 quad) - (the-as uint128 q-verts-0) - ) - (.pextlh q-verts-1 r0 q-verts-1t) - (set! (-> fw dest-verts color 0 quad) (the-as uint128 q-verts-0)) - (.pextlb q-verts-2t r0 q-verts-2p) - (set! - (-> fw current-verts color 1 quad) - (the-as uint128 q-verts-1) - ) - (.pextlh q-verts-2 r0 q-verts-2t) - (set! (-> fw dest-verts color 1 quad) (the-as uint128 q-verts-1)) - (.pextlb q-verts-3t r0 q-verts-3p) - ) - ) - ) - ) - ) - (set! (-> fw current-verts color 2 quad) (the-as uint128 q-verts-2)) - (.pextlh q-verts-3 r0 q-verts-3t) - (set! (-> fw dest-verts color 2 quad) (the-as uint128 q-verts-2)) - (nop!) - (set! (-> fw current-verts color 3 quad) (the-as uint128 q-verts-3)) - (nop!) - (set! (-> fw dest-verts color 3 quad) (the-as uint128 q-verts-3)) - (let ((fw2 (the-as object fw))) - (nop!) - (label cfg-4) - (let ((str-char (-> (the-as (pointer uint8) str-in) 4))) - (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) - (b! (zero? str-char) cfg-67 :delay (set! not-sc-lit1 (+ str-char -1))) - (b! - (zero? not-sc-lit1) - cfg-54 - :delay - (set! not-sc-~ (+ str-char -126)) - ) - (b! (nonzero? not-sc-~) cfg-55) - (set! str-char (-> (the-as (pointer uint8) str-in) 4)) - (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) - (let ((t5-5 0) - (t6-2 0) - ) - (b! (zero? str-char) cfg-67 :delay (set! t7-0 (+ str-char -43))) - (.movz t5-6 str-char t7-0 t5-5) - (let ((t7-1 (+ str-char -45))) - (.movz t5-7 str-char t7-1 t5-6) - ) - (nop!) - (b! (nonzero? t5-7) cfg-15 :delay (set! t7-2 (+ str-char -121))) - (b! (zero? t7-2) cfg-52 :delay (set! t6-3 (+ str-char -89))) - (b! (zero? t6-3) cfg-52 :delay (set! t6-4 (+ str-char -122))) - (b! (zero? t6-4) cfg-53 :delay (set! t6-5 (+ str-char -90))) - (b! (zero? t6-5) cfg-53 :delay (set! t6-6 (+ str-char -48))) - (b! - (< (the-as int t6-6) 0) - cfg-55 - :delay - (set! t6-7 (+ str-char -57)) - ) - (b! - (> (the-as int t6-7) 0) - cfg-55 - :delay - (set! t6-2 (the-as int (+ str-char -48))) - ) - (label cfg-15) - (set! str-char (-> (the-as (pointer uint8) str-in) 4)) - (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) - (b! (zero? str-char) cfg-67 :delay (set! t7-3 (+ str-char -110))) - (b! (zero? t7-3) cfg-33 :delay (set! t7-4 (+ str-char -78))) - (b! (zero? t7-4) cfg-33 :delay (set! t7-5 (+ str-char -108))) - (b! (zero? t7-5) cfg-4 :delay (set! t7-6 (+ str-char -76))) - (b! (zero? t7-6) cfg-4 :delay (set! t7-7 (+ str-char -119))) - (b! (zero? t7-7) cfg-4 :delay (set! t7-8 (+ str-char -87))) - (b! (zero? t7-8) cfg-4 :delay (set! t7-9 (+ str-char -107))) - (b! (zero? t7-9) cfg-36 :delay (set! t7-10 (+ str-char -75))) - (b! (zero? t7-10) cfg-36 :delay (set! t7-11 (+ str-char -106))) - (b! (zero? t7-11) cfg-38 :delay (set! t7-12 (+ str-char -74))) - (b! (zero? t7-12) cfg-38 :delay (set! t7-13 (+ str-char -104))) - (b! (zero? t7-13) cfg-42 :delay (set! t7-14 (+ str-char -72))) - (b! (zero? t7-14) cfg-42 :delay (set! t7-15 (+ str-char -118))) - (b! (zero? t7-15) cfg-47 :delay (set! t7-16 (+ str-char -86))) - (b! (zero? t7-16) cfg-47 :delay (set! t7-17 (+ str-char -48))) - (b! - (< (the-as int t7-17) 0) - cfg-55 - :delay - (set! t8-0 (+ str-char -57)) - ) - (b! (> (the-as int t8-0) 0) cfg-55 :delay (.sll t8-1 t6-2 2)) - (let ((t4-5 (+ t6-2 t8-1))) - (nop!) - (.sll t4-6 t4-5 1) - ) - (nop!) - (b! #t cfg-15 :delay (set! t6-2 (+ t4-6 t7-17))) - (label cfg-33) - (b! (nonzero? t6-2) cfg-35 :delay (set! t0-1 -33)) - (set! font-table-to-use *font12-table*) - (.lvf vf13 (&-> fw size1-small quad)) - (nop!) - (.lvf vf14 (&-> fw size2-small quad)) - (nop!) - (.lvf vf15 (&-> fw size3-small quad)) - (set! flags (logand flags t0-1)) - (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) - (b! #t cfg-4 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) - (label cfg-35) - (nop!) - (set! font-table-to-use *font24-table*) - (nop!) - (.lvf vf13 (&-> fw size1-large quad)) - (nop!) - (.lvf vf14 (&-> fw size2-large quad)) - (nop!) - (.lvf vf15 (&-> fw size3-large quad)) - (set! flags (logior flags 32)) - (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) - (b! #t cfg-4 :delay (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw))) - (label cfg-36) - (let ((t4-7 -3)) - (nop!) - (b! (zero? t6-2) cfg-4 :delay (set! flags (logand flags t4-7))) - ) - (b! #t cfg-4 :delay (set! flags (logior flags 2))) - (label cfg-38) - (let ((t4-8 -21) - (t5-8 (+ t6-2 -2)) - ) - (b! (zero? t6-2) cfg-4 :delay (set! flags (logand flags t4-8))) - (b! (zero? t5-8) cfg-41) - ) - (b! #t cfg-4 :delay (set! flags (logior flags 16))) - (label cfg-41) - (b! #t cfg-4 :delay (set! flags (logior flags 4))) - (label cfg-42) - (.mov vf1 t6-2) - (let ((t4-9 (+ t5-7 -45))) - (b! (zero? t5-7) cfg-46 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-9) cfg-45) - ) - (b! #t cfg-4 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-45) - (b! #t cfg-4 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-46) - (b! #t cfg-4 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) - (label cfg-47) - (.mov vf1 t6-2) - ) - (let ((t4-10 (+ t5-7 -45))) - (b! (zero? t5-7) cfg-51 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-10) cfg-50) - ) - (b! #t cfg-4 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-50) - (b! #t cfg-4 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-51) - (b! #t cfg-4 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) - (label cfg-52) - (b! #t cfg-4 :delay (.svf (&-> fw save quad) vf23)) - (label cfg-53) - (b! #t cfg-4 :delay (.lvf vf23 (&-> fw save quad))) - (label cfg-54) - (let ((t4-11 (-> (the-as (pointer uint8) str-in) 4))) - (set! str-in (the-as string (&-> (the-as (pointer uint8) str-in) 1))) - (.add.vf vf4 vf23 vf15 :mask #b111) - (let ((t4-12 (logand t4-11 127))) - (.sub.vf vf1 vf25 vf23) - (let ((t4-13 (+ t4-12 255))) - (b! #t cfg-62 :delay (.sll t5-9 t4-13 4)) - ) - ) - ) - (label cfg-55) - (.add.vf vf4 vf23 vf15 :mask #b111) - (.sll t5-9 str-char 4) - (.sub.vf vf1 vf25 vf23) - (b! (= str-char 10) cfg-57 :delay (set! fc-cr (+ str-char -13))) - ) - (b! (nonzero? fc-cr) cfg-62) - (label cfg-57) - (.sub.vf vf1 vf23 vf24) - (b! (logtest? flags 16) cfg-60 :delay (set! t4-16 (logand flags 4))) - (b! (nonzero? t4-16) cfg-61) - (.add.x.vf vf23 vf0 vf24 :mask #b1) - (nop!) - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - (.add.w.vf vf23 vf23 vf15 :mask #b10) - (b! - #t - cfg-4 - :delay - (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) - ) - (label cfg-60) - (.sub.vf vf23 vf24 vf1 :mask #b1) - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - (.add.x.vf vf23 vf0 vf24 :mask #b1) - (.add.w.vf vf23 vf23 vf15 :mask #b10) - (b! - #t - cfg-4 - :delay - (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) - ) - (label cfg-61) - (.mul.w.vf vf1 vf1 vf16 :mask #b1) - (nop!) - (.sub.vf vf23 vf24 vf1 :mask #b1) - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - (.add.x.vf vf23 vf0 vf24 :mask #b1) - (.add.w.vf vf23 vf23 vf15 :mask #b10) - (b! - #t - cfg-4 - :delay - (set! fw2 (-> (the-as font-work fw2) font-tmpl gif)) - ) - (label cfg-62) - (.addu t4-17 t5-9 font-table-to-use) - (nop!) - (.lvf vf5 (+ t4-17 -256)) - (.mov t4-18 vf1) - (b! (< (the-as int t4-18) 0) cfg-67 :delay (.sra t4-19 t4-18 31)) - (.mul.vf vf19 vf5 vf13) - (b! (zero? (logand flags 2)) cfg-65) - (b! #t cfg-66 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) - (label cfg-65) - (nop!) - (.add.w.vf vf23 vf23 vf14 :mask #b1) - (label cfg-66) - (b! #t cfg-4) - (label cfg-67) - (.sub.vf vf1 vf23 vf24) - (b! (logtest? flags 16) cfg-70 :delay (set! a0-2 (logand flags 4))) - (b! (nonzero? a0-2) cfg-71) - (.add.x.vf vf23 vf0 vf24 :mask #b1) - (nop!) - (b! - #t - cfg-72 - :delay - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - ) - (label cfg-70) - (.sub.vf vf23 vf24 vf1 :mask #b1) - (nop!) - (b! - #t - cfg-72 - :delay - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - ) - (label cfg-71) - (.mul.w.vf vf1 vf1 vf16 :mask #b1) - (nop!) - (.sub.vf vf23 vf24 vf1 :mask #b1) - (.svf (&-> (the-as font-work fw2) justify 0 quad) vf23) - ) - (label cfg-72) - (let ((a0-3 (-> fw flags-signed))) - (let ((t2-1 (the-as object fw)) - (t3-7 (-> fw str-ptr-signed)) - ) - (.lvf vf23 (&-> (the-as font-work t2-1) justify 0 quad)) - (label cfg-73) - (let ((t4-21 (-> t3-7 4))) - (set! t3-7 (&-> t3-7 1)) - (b! (zero? t4-21) cfg-131 :delay (set! t5-10 (+ t4-21 -1))) - (b! (zero? t5-10) cfg-121 :delay (set! t5-11 (+ t4-21 -126))) - (b! (nonzero? t5-11) cfg-122) - (set! t4-21 (-> t3-7 4)) - (set! t3-7 (&-> t3-7 1)) - (let ((t5-12 0) - (t6-9 0) - ) - (b! (zero? t4-21) cfg-131 :delay (set! t7-18 (+ t4-21 -43))) - (.movz t5-13 t4-21 t7-18 t5-12) - (let ((t7-19 (+ t4-21 -45))) - (.movz t5-14 t4-21 t7-19 t5-13) - ) - (nop!) - (b! (nonzero? t5-14) cfg-84 :delay (set! t7-20 (+ t4-21 -121))) - (b! (zero? t7-20) cfg-119 :delay (set! t6-10 (+ t4-21 -89))) - (b! (zero? t6-10) cfg-119 :delay (set! t6-11 (+ t4-21 -122))) - (b! (zero? t6-11) cfg-120 :delay (set! t6-12 (+ t4-21 -90))) - (b! (zero? t6-12) cfg-120 :delay (set! t6-13 (+ t4-21 -48))) - (b! - (< (the-as int t6-13) 0) - cfg-122 - :delay - (set! t6-14 (+ t4-21 -57)) - ) - (b! - (> (the-as int t6-14) 0) - cfg-122 - :delay - (set! t6-9 (the-as int (+ t4-21 -48))) - ) - (label cfg-84) - (set! t4-21 (-> t3-7 4)) - (set! t3-7 (&-> t3-7 1)) - (b! (zero? t4-21) cfg-131 :delay (set! t7-21 (+ t4-21 -110))) - (b! (zero? t7-21) cfg-102 :delay (set! t7-22 (+ t4-21 -78))) - (b! (zero? t7-22) cfg-102 :delay (set! t7-23 (+ t4-21 -108))) - (b! (zero? t7-23) cfg-73 :delay (set! t7-24 (+ t4-21 -76))) - (b! (zero? t7-24) cfg-73 :delay (set! t7-25 (+ t4-21 -119))) - (b! (zero? t7-25) cfg-105 :delay (set! t7-26 (+ t4-21 -87))) - (b! (zero? t7-26) cfg-105 :delay (set! t7-27 (+ t4-21 -107))) - (b! (zero? t7-27) cfg-107 :delay (set! t7-28 (+ t4-21 -75))) - (b! (zero? t7-28) cfg-107 :delay (set! t7-29 (+ t4-21 -106))) - (b! (zero? t7-29) cfg-73 :delay (set! t7-30 (+ t4-21 -74))) - (b! (zero? t7-30) cfg-73 :delay (set! t7-31 (+ t4-21 -104))) - (b! (zero? t7-31) cfg-109 :delay (set! t7-32 (+ t4-21 -72))) - (b! (zero? t7-32) cfg-109 :delay (set! t7-33 (+ t4-21 -118))) - (b! (zero? t7-33) cfg-114 :delay (set! t7-34 (+ t4-21 -86))) - (b! (zero? t7-34) cfg-114 :delay (set! t7-35 (+ t4-21 -48))) - (b! - (< (the-as int t7-35) 0) - cfg-122 - :delay - (set! t8-2 (+ t4-21 -57)) - ) - (b! (> (the-as int t8-2) 0) cfg-122 :delay (.sll t8-3 t6-9 2)) - (let ((t4-22 (+ t6-9 t8-3))) - (nop!) - (.sll t4-23 t4-22 1) - ) - (nop!) - (b! #t cfg-84 :delay (set! t6-9 (+ t4-23 t7-35))) - (label cfg-102) - (b! (nonzero? t6-9) cfg-104 :delay (set! a3-6 *font12-table*)) - (set! font-table-to-use a3-6) - (let ((t0-2 -33)) - (.lvf vf13 (&-> fw size1-small quad)) - (nop!) - (.lvf vf14 (&-> fw size2-small quad)) - (nop!) - (.lvf vf15 (&-> fw size3-small quad)) - (set! a0-3 (logand a0-3 t0-2)) - ) - (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) - (b! #t cfg-73 :delay (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw))) - (label cfg-104) - (nop!) - (set! font-table-to-use *font24-table*) - (nop!) - (.lvf vf13 (&-> fw size1-large quad)) - (nop!) - (.lvf vf14 (&-> fw size2-large quad)) - (nop!) - (.lvf vf15 (&-> fw size3-large quad)) - (set! a0-3 (logior a0-3 32)) - (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) - (b! #t cfg-73 :delay (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw))) - (label cfg-105) - (let ((t4-24 -2)) - (nop!) - (b! (zero? t6-9) cfg-73 :delay (set! a0-3 (logand a0-3 t4-24))) - ) - (b! #t cfg-73 :delay (set! a0-3 (logior a0-3 1))) - (label cfg-107) - (let ((t4-25 -3)) - (nop!) - (b! (zero? t6-9) cfg-73 :delay (set! a0-3 (logand a0-3 t4-25))) - ) - (b! #t cfg-73 :delay (set! a0-3 (logior a0-3 2))) - (label cfg-109) - (.mov vf1 t6-9) - (let ((t4-26 (+ t5-14 -45))) - (b! (zero? t5-14) cfg-113 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-26) cfg-112) - ) - (b! #t cfg-73 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-112) - (b! #t cfg-73 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-113) - (b! #t cfg-73 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) - (label cfg-114) - (.mov vf1 t6-9) - ) - (let ((t4-27 (+ t5-14 -45))) - (b! (zero? t5-14) cfg-118 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-27) cfg-117) - ) - (b! #t cfg-73 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-117) - (b! #t cfg-73 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-118) - (b! #t cfg-73 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) - (label cfg-119) - (b! #t cfg-73 :delay (.svf (&-> fw save quad) vf23)) - (label cfg-120) - (b! #t cfg-73 :delay (.lvf vf23 (&-> fw save quad))) - (label cfg-121) - (set! t4-21 (-> t3-7 4)) - (set! t3-7 (&-> t3-7 1)) - (.add.vf vf4 vf23 vf15 :mask #b111) - (let ((t5-15 (logand t4-21 127))) - (.sub.vf vf1 vf25 vf23) - (let ((t5-16 (+ t5-15 255))) - (b! #t cfg-125 :delay (.sll t5-17 t5-16 4)) - ) - ) - (label cfg-122) - (.add.vf vf4 vf23 vf15 :mask #b111) - (.sll t5-17 t4-21 4) - (.sub.vf vf1 vf25 vf23) - (b! (= t4-21 10) cfg-124 :delay (set! t6-16 (+ t4-21 -13))) - (b! (nonzero? t6-16) cfg-125 :delay (logand a0-3 1)) - (label cfg-124) - (set! t2-1 (&-> (the-as (pointer uint64) t2-1) 2)) - (nop!) - (b! - #t - cfg-73 - :delay - (.lvf vf23 (+ (the-as int t2-1) 944)) - ) - (label cfg-125) - (.addu t5-18 t5-17 font-table-to-use) - (nop!) - (.lvf vf5 (+ t5-18 -256)) - (.mov t5-19 vf1) - (b! - (< (the-as int t5-19) 0) - cfg-131 - :delay - (.add.vf vf6 vf5 vf16 :mask #b111) - ) - (.sra t5-20 t5-19 31) - (.add.vf vf7 vf5 vf17 :mask #b111) - (b! (< t5-20 0) cfg-73 :delay (.add.vf vf8 vf5 vf18 :mask #b111)) - (.add.vf vf1 vf23 vf0 :mask #b111) - (nop!) - (.add.vf vf2 vf23 vf13 :mask #b111) - (.svf (&-> fw current-verts tex-st 0 quad) vf5) - (.add.vf vf3 vf23 vf14 :mask #b111) - (.svf (&-> fw current-verts tex-st 1 quad) vf6) - (.mul.vf vf19 vf5 vf13) - (.svf (&-> fw current-verts tex-st 2 quad) vf7) - (nop!) - (.svf (&-> fw current-verts tex-st 3 quad) vf8) - (nop!) - (.svf (&-> fw current-verts pos 0 quad) vf1) - (nop!) - (.svf (&-> fw current-verts pos 1 quad) vf2) - (nop!) - (.svf (&-> fw current-verts pos 2 quad) vf3) - (nop!) - (.svf (&-> fw current-verts pos 3 quad) vf4) - (.lvf vf1 (&-> fw current-verts pos 0 quad)) - (nop!) - (.lvf vf2 (&-> fw current-verts pos 1 quad)) - (.mul.w.vf acc vf31 vf0) - (.lvf vf3 (&-> fw current-verts pos 2 quad)) - (.add.mul.x.vf acc vf28 vf1 acc) - (.lvf vf4 (&-> fw current-verts pos 3 quad)) - (.add.mul.y.vf acc vf29 vf1 acc) - (nop!) - (.add.mul.z.vf vf1 vf30 vf1 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf2 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf2 acc) - (nop!) - (.add.mul.z.vf vf2 vf30 vf2 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf3 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf3 acc) - (nop!) - (.add.mul.z.vf vf3 vf30 vf3 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf4 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf4 acc) - (nop!) - (.add.mul.z.vf vf4 vf30 vf4 acc) - (.div.vf Q vf25 vf1 :fsf #b10 :ftf #b11) - (let ((t5-21 (-> fw char-tmpl dma-vif quad))) - (nop!) - (let ((t6-18 (-> fw char-tmpl quad 1))) - (nop!) - (set! (-> (the-as (pointer uint128) dma-out) 0) t5-21) - (nop!) - (set! (-> (the-as (pointer uint128) dma-out) 1) t6-18) - ) - ) - (.lvf vf5 (&-> fw current-verts tex-st 0 quad)) - (let ((t5-22 q-lo-tmpl)) - (.lvf vf6 (&-> fw current-verts tex-st 1 quad)) - (let ((t4-28 (logand t4-21 128))) - (.lvf vf7 (&-> fw current-verts tex-st 2 quad)) - ;; note: this relies on (somewhat) undefined behavior that the upper 64-bits of a - ;; gpr aren't changed during movn. - (.movn-128 t5-23 q-hi-tmpl t4-28 t5-22) - ) - ) - ) - ) - (.mul.vf vf1 vf1 Q :mask #b111) - (set! (-> (the-as (pointer uint128) dma-out) 2) (the-as uint128 t5-23)) - (.mul.vf vf5 vf5 Q :mask #b111) - (nop!) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf2 :fsf #b10 :ftf #b11) - (nop!) - (.lvf vf8 (&-> fw current-verts tex-st 3 quad)) - (nop!) - (.add.vf vf1 vf1 vf26) - (nop!) - (.lvf vf9 (&-> fw color-shadow quad)) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (vftoi4.xyzw vf1 vf1) - (nop!) - (.mul.vf vf2 vf2 Q :mask #b111) - (nop!) - (.mul.vf vf6 vf6 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 3) vf5) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf3 :fsf #b10 :ftf #b11) - (.svf (&-> (the-as (pointer uint128) dma-out) 4) vf9) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 5) vf1) - (.add.vf vf2 vf2 vf26) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (vftoi4.xyzw vf2 vf2) - (nop!) - (.mul.vf vf3 vf3 Q :mask #b111) - (nop!) - (.mul.vf vf7 vf7 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 6) vf6) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf4 :fsf #b10 :ftf #b11) - (.svf (&-> (the-as (pointer uint128) dma-out) 7) vf9) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 8) vf2) - (.add.vf vf3 vf3 vf26) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (vftoi4.xyzw vf3 vf3) - (nop!) - (.mul.vf vf4 vf4 Q :mask #b111) - (nop!) - (.mul.vf vf8 vf8 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 9) vf7) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 10) vf9) - (.add.vf vf4 vf4 vf26) - (.svf (&-> (the-as (pointer uint128) dma-out) 11) vf3) - (let ((t4-29 (logand a0-3 2))) - (nop!) - (b! (zero? t4-29) cfg-129) - ) - ) - (b! #t cfg-130 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) - (label cfg-129) - (nop!) - (.add.w.vf vf23 vf23 vf14 :mask #b1) - (label cfg-130) - (vftoi4.xyzw vf4 vf4) - (nop!) - (nop!) - (nop!) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 12) vf8) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 13) vf9) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 14) vf4) - (b! - #t - cfg-73 - :delay - (set! dma-out (&-> (the-as (pointer uint128) dma-out) 15)) - ) - (label cfg-131) - (let ((a0-4 (-> fw flags-signed))) - (let ((t2-2 (the-as object fw)) - (t3-8 (-> fw str-ptr-signed)) - ) - (.lvf vf23 (&-> (the-as font-work t2-2) justify 0 quad)) - (label cfg-132) - (let ((t4-30 (-> t3-8 4))) - (set! t3-8 (&-> t3-8 1)) - (b! (zero? t4-30) cfg-189 :delay (set! t5-24 (+ t4-30 -1))) - (b! (zero? t5-24) cfg-179 :delay (set! t5-25 (+ t4-30 -126))) - (b! (nonzero? t5-25) cfg-180) - (set! t4-30 (-> t3-8 4)) - (set! t3-8 (&-> t3-8 1)) - (let ((t5-26 0) - (t6-19 0) - ) - (b! (zero? t4-30) cfg-189 :delay (set! t7-36 (+ t4-30 -43))) - (.movz t5-27 t4-30 t7-36 t5-26) - (let ((t7-37 (+ t4-30 -45))) - (.movz t5-28 t4-30 t7-37 t5-27) - ) - (nop!) - (b! (nonzero? t5-28) cfg-143 :delay (set! t7-38 (+ t4-30 -121))) - (b! (zero? t7-38) cfg-177 :delay (set! t6-20 (+ t4-30 -89))) - (b! (zero? t6-20) cfg-177 :delay (set! t6-21 (+ t4-30 -122))) - (b! (zero? t6-21) cfg-178 :delay (set! t6-22 (+ t4-30 -90))) - (b! (zero? t6-22) cfg-178 :delay (set! t6-23 (+ t4-30 -48))) - (b! - (< (the-as int t6-23) 0) - cfg-180 - :delay - (set! t6-24 (+ t4-30 -57)) - ) - (b! - (> (the-as int t6-24) 0) - cfg-180 - :delay - (set! t6-19 (the-as int (+ t4-30 -48))) - ) - (label cfg-143) - (set! t4-30 (-> t3-8 4)) - (set! t3-8 (&-> t3-8 1)) - (b! (zero? t4-30) cfg-189 :delay (set! t7-39 (+ t4-30 -110))) - (b! (zero? t7-39) cfg-161 :delay (set! t7-40 (+ t4-30 -78))) - (b! (zero? t7-40) cfg-161 :delay (set! t7-41 (+ t4-30 -108))) - (b! (zero? t7-41) cfg-164 :delay (set! t7-42 (+ t4-30 -76))) - (b! (zero? t7-42) cfg-164 :delay (set! t7-43 (+ t4-30 -119))) - (b! (zero? t7-43) cfg-132 :delay (set! t7-44 (+ t4-30 -87))) - (b! (zero? t7-44) cfg-132 :delay (set! t7-45 (+ t4-30 -107))) - (b! (zero? t7-45) cfg-165 :delay (set! t7-46 (+ t4-30 -75))) - (b! (zero? t7-46) cfg-165 :delay (set! t7-47 (+ t4-30 -106))) - (b! (zero? t7-47) cfg-132 :delay (set! t7-48 (+ t4-30 -74))) - (b! (zero? t7-48) cfg-132 :delay (set! t7-49 (+ t4-30 -104))) - (b! (zero? t7-49) cfg-167 :delay (set! t7-50 (+ t4-30 -72))) - (b! (zero? t7-50) cfg-167 :delay (set! t7-51 (+ t4-30 -118))) - (b! (zero? t7-51) cfg-172 :delay (set! t7-52 (+ t4-30 -86))) - (b! (zero? t7-52) cfg-172 :delay (set! t7-53 (+ t4-30 -48))) - (b! - (< (the-as int t7-53) 0) - cfg-180 - :delay - (set! t8-4 (+ t4-30 -57)) - ) - (b! (> (the-as int t8-4) 0) cfg-180 :delay (.sll t8-5 t6-19 2)) - (let ((t4-31 (+ t6-19 t8-5))) - (nop!) - (.sll t4-32 t4-31 1) - ) - (nop!) - (b! #t cfg-143 :delay (set! t6-19 (+ t4-32 t7-53))) - (label cfg-161) - (b! (nonzero? t6-19) cfg-163 :delay (set! a3-8 *font12-table*)) - (set! font-table-to-use a3-8) - (let ((t0-3 -33)) - (.lvf vf13 (&-> fw size1-small quad)) - (nop!) - (.lvf vf14 (&-> fw size2-small quad)) - (nop!) - (.lvf vf15 (&-> fw size3-small quad)) - (set! a0-4 (logand a0-4 t0-3)) - ) - (set! q-lo-tmpl (-> fw small-font-lo-tmpl-qw)) - (b! - #t - cfg-132 - :delay - (set! q-hi-tmpl (-> fw small-font-hi-tmpl-qw)) - ) - (label cfg-163) - (nop!) - (set! font-table-to-use *font24-table*) - (nop!) - (.lvf vf13 (&-> fw size1-large quad)) - (nop!) - (.lvf vf14 (&-> fw size2-large quad)) - (nop!) - (.lvf vf15 (&-> fw size3-large quad)) - (set! a0-4 (logior a0-4 32)) - (set! q-lo-tmpl (-> fw large-font-lo-tmpl-qw)) - (b! - #t - cfg-132 - :delay - (set! q-hi-tmpl (-> fw large-font-hi-tmpl-qw)) - ) - (label cfg-164) - (nop!) - (set! (-> fw last-color-32) t6-19) - (.sll t4-33 t6-19 4) - (let ((t5-29 (-> fw current-verts color 0 quad)) - (t4-34 (the-as object (+ t4-33 (the-as int fw)))) - ) - (let ((t6-25 (-> fw current-verts color 1 quad))) - (nop!) - (set! (-> fw src-verts color 0 quad) t5-29) - (nop!) - (set! (-> fw src-verts color 1 quad) t6-25) - ) - (nop!) - (let ((t5-30 (-> fw current-verts color 2 quad))) - (nop!) - (let ((t6-26 (-> fw current-verts color 3 quad))) - (nop!) - (set! (-> fw src-verts color 2 quad) t5-30) - (nop!) - (set! (-> fw src-verts color 3 quad) t6-26) - ) - ) - (nop!) - (let ((t6-27 (the-as uint128 (deref uint32 (+ (the-as int t4-34) 1984))))) - (nop!) - (let - ((t5-31 - (the-as - uint128 - (-> (the-as font-work t4-34) color-table 0 color 1) - ) - ) - ) - (.pextlb t6-28 r0 t6-27) - (.mov r0 f31-0) - (.pextlh t6-29 r0 t6-28) - (.mov r0 f31-0) - (.pextlb t5-32 r0 t5-31) - ) - ) - (set! (-> fw current-verts color 0 quad) (the-as uint128 t6-29)) - (.pextlh t5-33 r0 t5-32) - (set! (-> fw dest-verts color 0 quad) (the-as uint128 t6-29)) - (nop!) - (set! (-> fw current-verts color 1 quad) (the-as uint128 t5-33)) - (nop!) - (set! (-> fw dest-verts color 1 quad) (the-as uint128 t5-33)) - (nop!) - (let - ((t5-34 - (the-as - uint128 - (-> (the-as font-work t4-34) color-table 0 color 2) - ) - ) - ) - (nop!) - (let - ((t4-35 - (the-as - uint128 - (-> (the-as font-work t4-34) color-table 0 color 3) - ) - ) - ) - (.pextlb t5-35 r0 t5-34) - (.mov r0 f31-0) - (.pextlh t5-36 r0 t5-35) - (.mov r0 f31-0) - (.pextlb t4-36 r0 t4-35) - ) - ) - ) - (set! (-> fw current-verts color 2 quad) (the-as uint128 t5-36)) - (.pextlh t4-37 r0 t4-36) - (set! (-> fw dest-verts color 2 quad) (the-as uint128 t5-36)) - (nop!) - (set! (-> fw current-verts color 3 quad) (the-as uint128 t4-37)) - (b! - #t - cfg-132 - :delay - (set! - (-> fw dest-verts color 3 quad) - (the-as uint128 (the-as int t4-37)) - ) - ) - (label cfg-165) - (let ((t4-38 -3)) - (nop!) - (b! (zero? t6-19) cfg-132 :delay (set! a0-4 (logand a0-4 t4-38))) - ) - (b! #t cfg-132 :delay (set! a0-4 (logior a0-4 2))) - (label cfg-167) - (.mov vf1 t6-19) - (let ((t4-39 (+ t5-28 -45))) - (b! (zero? t5-28) cfg-171 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-39) cfg-170) - ) - (b! #t cfg-132 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-170) - (b! #t cfg-132 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-171) - (b! #t cfg-132 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) - (label cfg-172) - (.mov vf1 t6-19) - ) - (let ((t4-40 (+ t5-28 -45))) - (b! (zero? t5-28) cfg-176 :delay (.itof.vf vf1 vf1)) - (b! (zero? t4-40) cfg-175) - ) - (b! #t cfg-132 :delay (.add.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-175) - (b! #t cfg-132 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b10)) - (label cfg-176) - (b! #t cfg-132 :delay (.add.x.vf vf23 vf0 vf1 :mask #b10)) - (label cfg-177) - (nop!) - (let ((t4-41 (-> fw last-color-32))) - (nop!) - (.lvf vf9 (&-> fw current-verts color 0 quad)) - (nop!) - (.lvf vf10 (&-> fw current-verts color 1 quad)) - (nop!) - (.lvf vf11 (&-> fw current-verts color 2 quad)) - (nop!) - (.lvf vf12 (&-> fw current-verts color 3 quad)) - (nop!) - (set! (-> fw save-last-color-32) t4-41) - ) - (nop!) - (.svf (&-> fw save-color 0 quad) vf9) - (nop!) - (.svf (&-> fw save-color 1 quad) vf10) - (nop!) - (.svf (&-> fw save-color 2 quad) vf11) - (nop!) - (.svf (&-> fw save-color 3 quad) vf12) - (b! #t cfg-132 :delay (.svf (&-> fw save quad) vf23)) - (label cfg-178) - (nop!) - (let ((t4-42 (-> fw save-last-color-32))) - (nop!) - (.lvf vf9 (&-> fw save-color 0 quad)) - (nop!) - (.lvf vf10 (&-> fw save-color 1 quad)) - (nop!) - (.lvf vf11 (&-> fw save-color 2 quad)) - (nop!) - (.lvf vf12 (&-> fw save-color 3 quad)) - (nop!) - (set! (-> fw last-color-32) t4-42) - ) - (nop!) - (.svf (&-> fw current-verts color 0 quad) vf9) - (nop!) - (.svf (&-> fw dest-verts color 0 quad) vf9) - (nop!) - (.svf (&-> fw current-verts color 1 quad) vf10) - (nop!) - (.svf (&-> fw dest-verts color 1 quad) vf10) - (nop!) - (.svf (&-> fw current-verts color 2 quad) vf11) - (nop!) - (.svf (&-> fw dest-verts color 2 quad) vf11) - (nop!) - (.svf (&-> fw current-verts color 3 quad) vf12) - (nop!) - (.svf (&-> fw dest-verts color 3 quad) vf12) - (b! #t cfg-132 :delay (.lvf vf23 (&-> fw save quad))) - (label cfg-179) - (set! t4-30 (-> t3-8 4)) - (set! t3-8 (&-> t3-8 1)) - (.add.vf vf4 vf23 vf15 :mask #b111) - (let ((t5-37 (logand t4-30 127))) - (.sub.vf vf1 vf25 vf23) - (let ((t5-38 (+ t5-37 255))) - (b! #t cfg-183 :delay (.sll t5-39 t5-38 4)) - ) - ) - (label cfg-180) - (.add.vf vf4 vf23 vf15 :mask #b111) - (.sll t5-39 t4-30 4) - (.sub.vf vf1 vf25 vf23) - (b! (= t4-30 10) cfg-182 :delay (set! t6-31 (+ t4-30 -13))) - (b! (nonzero? t6-31) cfg-183) - (label cfg-182) - (set! t2-2 (&-> (the-as (pointer uint64) t2-2) 2)) - (nop!) - (b! - #t - cfg-132 - :delay - (.lvf vf23 (+ (the-as int t2-2) 944)) - ) - (label cfg-183) - (.addu t5-40 t5-39 font-table-to-use) - (nop!) - (.lvf vf5 (+ t5-40 -256)) - (.mov t5-41 vf1) - (b! - (< (the-as int t5-41) 0) - cfg-189 - :delay - (.add.vf vf6 vf5 vf16 :mask #b111) - ) - (.sra t5-42 t5-41 31) - (.add.vf vf7 vf5 vf17 :mask #b111) - (b! (< t5-42 0) cfg-132 :delay (.add.vf vf8 vf5 vf18 :mask #b111)) - (.add.vf vf1 vf23 vf0 :mask #b111) - (nop!) - (.add.vf vf2 vf23 vf13 :mask #b111) - (nop!) - (.add.vf vf3 vf23 vf14 :mask #b111) - (.svf (&-> fw current-verts tex-st 0 quad) vf5) - (.add.vf vf4 vf23 vf15 :mask #b111) - (.svf (&-> fw current-verts tex-st 1 quad) vf6) - (.mul.vf vf19 vf5 vf13) - (.svf (&-> fw current-verts tex-st 2 quad) vf7) - (nop!) - (.svf (&-> fw current-verts tex-st 3 quad) vf8) - (nop!) - (.svf (&-> fw current-verts pos 0 quad) vf1) - (nop!) - (.svf (&-> fw current-verts pos 1 quad) vf2) - (nop!) - (.svf (&-> fw current-verts pos 2 quad) vf3) - (nop!) - (.svf (&-> fw current-verts pos 3 quad) vf4) - (.lvf vf1 (&-> fw current-verts pos 0 quad)) - (nop!) - (.lvf vf2 (&-> fw current-verts pos 1 quad)) - (.mul.w.vf acc vf31 vf0) - (.lvf vf3 (&-> fw current-verts pos 2 quad)) - (.add.mul.x.vf acc vf28 vf1 acc) - (.lvf vf4 (&-> fw current-verts pos 3 quad)) - (.add.mul.y.vf acc vf29 vf1 acc) - (nop!) - (.add.mul.z.vf vf1 vf30 vf1 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf2 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf2 acc) - (nop!) - (.add.mul.z.vf vf2 vf30 vf2 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf3 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf3 acc) - (nop!) - (.add.mul.z.vf vf3 vf30 vf3 acc) - (nop!) - (.mul.w.vf acc vf31 vf0) - (nop!) - (.add.mul.x.vf acc vf28 vf4 acc) - (nop!) - (.add.mul.y.vf acc vf29 vf4 acc) - (nop!) - (.add.mul.z.vf vf4 vf30 vf4 acc) - (.div.vf Q vf25 vf1 :fsf #b10 :ftf #b11) - (let ((t5-43 (-> fw char-tmpl dma-vif quad))) - (nop!) - (let ((t6-32 (-> fw char-tmpl quad 1))) - (nop!) - (set! (-> (the-as (pointer uint128) dma-out) 0) t5-43) - (nop!) - (set! (-> (the-as (pointer uint128) dma-out) 1) t6-32) - ) - ) - (.lvf vf5 (&-> fw current-verts tex-st 0 quad)) - (let ((t5-44 q-lo-tmpl)) - (.lvf vf6 (&-> fw current-verts tex-st 1 quad)) - (let ((t4-43 (logand t4-30 128))) - (.lvf vf7 (&-> fw current-verts tex-st 2 quad)) - (.movn-128 t5-45 q-hi-tmpl t4-43 t5-44) - ) - ) - ) - ) - (.mul.vf vf1 vf1 Q :mask #b111) - (set! (-> (the-as (pointer uint128) dma-out) 2) (the uint128 t5-45)) - (.mul.vf vf5 vf5 Q :mask #b111) - (nop!) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf2 :fsf #b10 :ftf #b11) - (nop!) - (.lvf vf8 (&-> fw current-verts tex-st 3 quad)) - (nop!) - (.add.vf vf1 vf1 vf27) - (nop!) - (.lvf vf9 (&-> fw current-verts color 0 quad)) - (nop!) - (.lvf vf10 (&-> fw current-verts color 1 quad)) - (nop!) - (.lvf vf11 (&-> fw current-verts color 2 quad)) - (nop!) - (vftoi4.xyzw vf1 vf1) - (nop!) - (.mul.vf vf2 vf2 Q :mask #b111) - (nop!) - (.mul.vf vf6 vf6 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 3) vf5) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf3 :fsf #b10 :ftf #b11) - (.svf (&-> (the-as (pointer uint128) dma-out) 4) vf9) - (.lvf vf12 (&-> fw current-verts color 3 quad)) - (.svf (&-> (the-as (pointer uint128) dma-out) 5) vf1) - (.add.vf vf2 vf2 vf27) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (vftoi4.xyzw vf2 vf2) - (nop!) - (.mul.vf vf3 vf3 Q :mask #b111) - (nop!) - (.mul.vf vf7 vf7 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 6) vf6) - (.nop.vf) - (nop!) - (.nop.vf) - (nop!) - (.div.vf Q vf25 vf4 :fsf #b10 :ftf #b11) - (.svf (&-> (the-as (pointer uint128) dma-out) 7) vf10) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 8) vf2) - (.add.vf vf3 vf3 vf27) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (nop!) - (vftoi4.xyzw vf3 vf3) - (nop!) - (.mul.vf vf4 vf4 Q :mask #b111) - (nop!) - (.mul.vf vf8 vf8 Q :mask #b111) - (.svf (&-> (the-as (pointer uint128) dma-out) 9) vf7) - (nop!) - (.svf (&-> (the-as (pointer uint128) dma-out) 10) vf11) - (.add.vf vf4 vf4 vf27) - ;;(s.vf! (+ dma-out 176) vf3) - (.svf (+ (the-as int dma-out) 176) vf3) - (let ((t4-44 (logand a0-4 2))) - (nop!) - (b! (zero? t4-44) cfg-187) - ) - ) - ) - ) - ) - (b! #t cfg-188 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) - (label cfg-187) - (nop!) - (.add.w.vf vf23 vf23 vf14 :mask #b1) - (label cfg-188) - (vftoi4.xyzw vf4 vf4) - (nop!) - (nop!) - (nop!) - (nop!) - ;;(s.vf! (+ dma-out 192) vf8) - (.svf (+ (the-as int dma-out) 192) vf8) - (nop!) - ;;(s.vf! (+ dma-out 208) vf12) - (.svf (+ (the-as int dma-out) 208) vf12) - (nop!) - ;;(s.vf! (+ dma-out 224) vf4) - (.svf (+ (the-as int dma-out) 224) vf4) - (b! #t cfg-132 :delay (set! dma-out (&+ dma-out 240))) - (label cfg-189) - (let ((v1-6 (-> fw buf))) - ;;(s.w! (+ v1-6 4) dma-out) - (set! (-> (the-as (pointer pointer) v1-6) 1) dma-out) - ) - ) - ) - (.lvf vf24 (&-> arg2 origin quad)) - (.sub.vf vf23 vf23 vf24) - (.mov v0-0 vf23) - v0-0 - ) ) -;; definition for function draw-string-adv -;; INFO: Return type mismatch float vs none. -(defun draw-string-adv ((arg0 string) (arg1 dma-buffer) (arg2 font-context)) - (+! (-> arg2 origin x) (draw-string arg0 arg1 arg2)) +(defun draw-string-adv ((str string) (buf dma-buffer) (ctxt font-context)) + "Draw a string and advance the position of the context." + (+! (-> ctxt origin x) (draw-string str buf ctxt)) (none) ) (defun get-string-length ((arg0 string) (arg1 font-context)) + "Get the length of a string, in pixels" (local-vars - (v0-0 float) - (a2-1 (inline-array vector)) - (a2-4 (inline-array vector)) - (a3-2 int) - (a3-9 uint) - (a3-10 int) - (t0-0 uint) - (t0-1 uint) - (t0-3 int) - (t0-4 int) - (t0-5 int) - (t1-1 uint) - (t1-2 uint) - (t1-3 uint) - (t1-4 uint) - (t1-5 uint) - (t2-0 uint) - (t2-2 uint) - (t2-3 uint) - (t2-4 uint) - (t2-5 uint) - (t2-6 uint) - (t2-7 uint) - (t2-8 uint) - (t2-9 uint) - (t2-10 uint) - (t2-11 uint) - (t2-12 uint) - (t2-13 uint) - (t2-14 uint) - (t2-15 uint) - (t2-16 uint) - (t2-17 uint) - (t3-0 uint) - (t3-1 int) - ) + (v0-0 float) (a2-1 (inline-array vector)) (a2-4 (inline-array vector)) (a3-2 int) (a3-9 uint) + (a3-10 int) (t0-0 uint) (t0-1 uint) (t0-3 int) (t0-4 int) (t0-5 int) (t1-1 uint) (t1-2 uint) + (t1-3 uint) (t1-4 uint) (t1-5 uint) (t2-0 uint) (t2-2 uint) (t2-3 uint) (t2-4 uint) (t2-5 uint) + (t2-6 uint) (t2-7 uint) (t2-8 uint) (t2-9 uint) (t2-10 uint) (t2-11 uint) (t2-12 uint) (t2-13 uint) + (t2-14 uint) (t2-15 uint) (t2-16 uint) (t2-17 uint) (t3-0 uint) (t3-1 int) + ) (rlet ((vf0 :class vf) (vf1 :class vf) (vf13 :class vf) @@ -2068,183 +1639,163 @@ (vf25 :class vf) (vf5 :class vf) ) - (init-vf0-vector) - (.lvf vf25 (&-> arg1 context-vec quad)) - (.lvf vf23 (&-> arg1 origin quad)) - (.lvf vf24 (&-> arg1 origin quad)) - (let ((v1-0 (-> arg1 flags-signed))) - (let ((a1-2 *video-parms*)) - (.lvf vf1 (+ (the-as int a1-2) 64)) - ) - (.mul.vf vf25 vf25 vf1 :mask #b11) - (.mul.vf vf23 vf23 vf1 :mask #b11) - (.mul.vf vf24 vf24 vf1 :mask #b11) - (let ((a1-4 *font-work*)) - (set! (-> a1-4 str-ptr) (the-as uint arg0)) - (set! (-> a1-4 flags) (the-as font-flags v1-0)) - (.mov.vf vf1 vf0) - (let ((a2-0 (logand v1-0 32))) - (nop!) - (b! (nonzero? a2-0) cfg-2 :delay (set! a2-1 *font12-table*)) - ) - (let ((a2-2 a2-1)) - (nop!) - (.lvf vf13 (&-> a1-4 size1-small quad)) - (b! #t cfg-3 :delay (.lvf vf14 (&-> a1-4 size2-small quad))) - (label cfg-2) - (nop!) - (set! a2-2 *font24-table*) - (nop!) - (.lvf vf13 (&-> a1-4 size1-large quad)) - (nop!) - (.lvf vf14 (&-> a1-4 size2-large quad)) - (label cfg-3) - (let ((a3-0 (-> (the-as (pointer uint8) arg0) 4))) - (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) - (b! (zero? a3-0) cfg-51 :delay (set! t0-0 (+ a3-0 -1))) - (b! (zero? t0-0) cfg-44 :delay (set! t0-1 (+ a3-0 -126))) - (b! (nonzero? t0-1) cfg-45) - (set! a3-0 (-> (the-as (pointer uint8) arg0) 4)) - (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) - 0 - (let ((t1-0 0)) - (b! (zero? a3-0) cfg-51 :delay (set! t2-0 (+ a3-0 -43))) - (.movz t0-3 a3-0 t2-0 0) ;; TODO Wrong - (let ((t2-1 (+ a3-0 -45))) - (.movz t0-4 a3-0 t2-1 0 );; TODO wrong - ) - (nop!) - (b! (nonzero? t0-4) cfg-14 :delay (set! t2-2 (+ a3-0 -121))) - (b! (zero? t2-2) cfg-42 :delay (set! t1-1 (+ a3-0 -89))) - (b! (zero? t1-1) cfg-42 :delay (set! t1-2 (+ a3-0 -122))) - (b! (zero? t1-2) cfg-43 :delay (set! t1-3 (+ a3-0 -90))) - (b! (zero? t1-3) cfg-43 :delay (set! t1-4 (+ a3-0 -48))) - (b! (< (the-as int t1-4) 0) cfg-45 :delay (set! t1-5 (+ a3-0 -57))) - (b! - (> (the-as int t1-5) 0) - cfg-45 - :delay - (set! t1-0 (the-as int (+ a3-0 -48))) - ) - (label cfg-14) - (set! a3-0 (-> (the-as (pointer uint8) arg0) 4)) - (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) - (b! (zero? a3-0) cfg-51 :delay (set! t2-3 (+ a3-0 -110))) - (b! (zero? t2-3) cfg-32 :delay (set! t2-4 (+ a3-0 -78))) - (b! (zero? t2-4) cfg-32 :delay (set! t2-5 (+ a3-0 -108))) - (b! (zero? t2-5) cfg-3 :delay (set! t2-6 (+ a3-0 -76))) - (b! (zero? t2-6) cfg-3 :delay (set! t2-7 (+ a3-0 -119))) - (b! (zero? t2-7) cfg-3 :delay (set! t2-8 (+ a3-0 -87))) - (b! (zero? t2-8) cfg-3 :delay (set! t2-9 (+ a3-0 -107))) - (b! (zero? t2-9) cfg-35 :delay (set! t2-10 (+ a3-0 -75))) - (b! (zero? t2-10) cfg-35 :delay (set! t2-11 (+ a3-0 -106))) - (b! (zero? t2-11) cfg-3 :delay (set! t2-12 (+ a3-0 -74))) - (b! (zero? t2-12) cfg-3 :delay (set! t2-13 (+ a3-0 -104))) - (b! (zero? t2-13) cfg-37 :delay (set! t2-14 (+ a3-0 -72))) - (b! (zero? t2-14) cfg-37 :delay (set! t2-15 (+ a3-0 -118))) - (b! (zero? t2-15) cfg-3 :delay (set! t2-16 (+ a3-0 -86))) - (b! (zero? t2-16) cfg-3 :delay (set! t2-17 (+ a3-0 -48))) - (b! (< (the-as int t2-17) 0) cfg-45 :delay (set! t3-0 (+ a3-0 -57))) - (b! (> (the-as int t3-0) 0) cfg-45 :delay (.sll t3-1 t1-0 2)) - (let ((a3-1 (+ t1-0 t3-1))) - (nop!) - (.sll a3-2 a3-1 1) - ) - (nop!) - (b! #t cfg-14 :delay (set! t1-0 (+ a3-2 t2-17))) - (label cfg-32) - (b! (nonzero? t1-0) cfg-34 :delay (set! a2-4 *font12-table*)) - (set! a2-2 a2-4) - (let ((a3-3 -33)) - (.lvf vf13 (&-> a1-4 size1-small quad)) - (nop!) - (.lvf vf14 (&-> a1-4 size2-small quad)) - (b! #t cfg-3 :delay (set! v1-0 (logand v1-0 a3-3))) - ) - (label cfg-34) - (nop!) - (set! a2-2 *font24-table*) - (nop!) - (.lvf vf13 (&-> a1-4 size1-large quad)) - (nop!) - (.lvf vf14 (&-> a1-4 size2-large quad)) - (b! #t cfg-3 :delay (set! v1-0 (logior v1-0 32))) - (label cfg-35) - (let ((a3-4 -3)) - (nop!) - (b! (zero? t1-0) cfg-3 :delay (set! v1-0 (logand v1-0 a3-4))) - ) - (b! #t cfg-3 :delay (set! v1-0 (logior v1-0 2))) - (label cfg-37) - (.mov vf1 t1-0) - ) - (let ((a3-5 (+ t0-4 -45))) - (b! (zero? t0-4) cfg-41 :delay (.itof.vf vf1 vf1)) - (b! (zero? a3-5) cfg-40) - ) - (b! #t cfg-3 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-40) - (b! #t cfg-3 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) - (label cfg-41) - (b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) - (label cfg-42) - (b! #t cfg-3 :delay (.svf (&-> a1-4 save quad) vf23)) - (label cfg-43) - (b! #t cfg-3 :delay (.lvf vf23 (&-> a1-4 save quad))) - (label cfg-44) - (let ((a3-6 (-> (the-as (pointer uint8) arg0) 4))) - (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) - (nop!) - (let ((a3-7 (logand a3-6 127))) - (nop!) - (let ((a3-8 (+ a3-7 255))) - (b! #t cfg-48 :delay (.sll t0-5 a3-8 4)) + (init-vf0-vector) + (.lvf vf25 (&-> arg1 context-vec quad)) + (.lvf vf23 (&-> arg1 origin quad)) + (.lvf vf24 (&-> arg1 origin quad)) + (let ((v1-0 (-> arg1 flags-signed))) + (let ((a1-2 *video-parms*)) + (.lvf vf1 (+ (the-as int a1-2) 64)) + ) + (.mul.vf vf25 vf25 vf1 :mask #b11) + (.mul.vf vf23 vf23 vf1 :mask #b11) + (.mul.vf vf24 vf24 vf1 :mask #b11) + (let ((a1-4 *font-work*)) + (set! (-> a1-4 str-ptr) (the-as uint arg0)) + (set! (-> a1-4 flags) (the-as uint v1-0)) + (.mov.vf vf1 vf0) + (let ((a2-0 (logand v1-0 32))) + (b! (nonzero? a2-0) cfg-2 :delay (set! a2-1 *font12-table*)) + ) + (let ((a2-2 a2-1)) + (.lvf vf13 (&-> a1-4 size1-small quad)) + (b! #t cfg-3 :delay (.lvf vf14 (&-> a1-4 size2-small quad))) + (label cfg-2) + (set! a2-2 *font24-table*) + (.lvf vf13 (&-> a1-4 size1-large quad)) + (.lvf vf14 (&-> a1-4 size2-large quad)) + (label cfg-3) + (let ((a3-0 (-> (the-as (pointer uint8) arg0) 4))) + (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) + (b! (zero? a3-0) cfg-51 :delay (set! t0-0 (+ a3-0 -1))) + (b! (zero? t0-0) cfg-44 :delay (set! t0-1 (+ a3-0 -126))) + (b! (nonzero? t0-1) cfg-45) + (set! a3-0 (-> (the-as (pointer uint8) arg0) 4)) + (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) + 0 + (let ((t1-0 0)) + (b! (zero? a3-0) cfg-51 :delay (set! t2-0 (+ a3-0 -43))) + (.movz t0-3 a3-0 t2-0 0) ;; TODO Wrong + (let ((t2-1 (+ a3-0 -45))) + (.movz t0-4 a3-0 t2-1 0 );; TODO wrong + ) + (b! (nonzero? t0-4) cfg-14 :delay (set! t2-2 (+ a3-0 -121))) + (b! (zero? t2-2) cfg-42 :delay (set! t1-1 (+ a3-0 -89))) + (b! (zero? t1-1) cfg-42 :delay (set! t1-2 (+ a3-0 -122))) + (b! (zero? t1-2) cfg-43 :delay (set! t1-3 (+ a3-0 -90))) + (b! (zero? t1-3) cfg-43 :delay (set! t1-4 (+ a3-0 -48))) + (b! (< (the-as int t1-4) 0) cfg-45 :delay (set! t1-5 (+ a3-0 -57))) + (b! + (> (the-as int t1-5) 0) + cfg-45 + :delay + (set! t1-0 (the-as int (+ a3-0 -48))) + ) + (label cfg-14) + (set! a3-0 (-> (the-as (pointer uint8) arg0) 4)) + (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) + (b! (zero? a3-0) cfg-51 :delay (set! t2-3 (+ a3-0 -110))) + (b! (zero? t2-3) cfg-32 :delay (set! t2-4 (+ a3-0 -78))) + (b! (zero? t2-4) cfg-32 :delay (set! t2-5 (+ a3-0 -108))) + (b! (zero? t2-5) cfg-3 :delay (set! t2-6 (+ a3-0 -76))) + (b! (zero? t2-6) cfg-3 :delay (set! t2-7 (+ a3-0 -119))) + (b! (zero? t2-7) cfg-3 :delay (set! t2-8 (+ a3-0 -87))) + (b! (zero? t2-8) cfg-3 :delay (set! t2-9 (+ a3-0 -107))) + (b! (zero? t2-9) cfg-35 :delay (set! t2-10 (+ a3-0 -75))) + (b! (zero? t2-10) cfg-35 :delay (set! t2-11 (+ a3-0 -106))) + (b! (zero? t2-11) cfg-3 :delay (set! t2-12 (+ a3-0 -74))) + (b! (zero? t2-12) cfg-3 :delay (set! t2-13 (+ a3-0 -104))) + (b! (zero? t2-13) cfg-37 :delay (set! t2-14 (+ a3-0 -72))) + (b! (zero? t2-14) cfg-37 :delay (set! t2-15 (+ a3-0 -118))) + (b! (zero? t2-15) cfg-3 :delay (set! t2-16 (+ a3-0 -86))) + (b! (zero? t2-16) cfg-3 :delay (set! t2-17 (+ a3-0 -48))) + (b! (< (the-as int t2-17) 0) cfg-45 :delay (set! t3-0 (+ a3-0 -57))) + (b! (> (the-as int t3-0) 0) cfg-45 :delay (.sll t3-1 t1-0 2)) + (let ((a3-1 (+ t1-0 t3-1))) + (.sll a3-2 a3-1 1) + ) + (b! #t cfg-14 :delay (set! t1-0 (+ a3-2 t2-17))) + (label cfg-32) + (b! (nonzero? t1-0) cfg-34 :delay (set! a2-4 *font12-table*)) + (set! a2-2 a2-4) + (let ((a3-3 -33)) + (.lvf vf13 (&-> a1-4 size1-small quad)) + (.lvf vf14 (&-> a1-4 size2-small quad)) + (b! #t cfg-3 :delay (set! v1-0 (logand v1-0 a3-3))) + ) + (label cfg-34) + (set! a2-2 *font24-table*) + (.lvf vf13 (&-> a1-4 size1-large quad)) + (.lvf vf14 (&-> a1-4 size2-large quad)) + (b! #t cfg-3 :delay (set! v1-0 (logior v1-0 32))) + (label cfg-35) + (let ((a3-4 -3)) + (b! (zero? t1-0) cfg-3 :delay (set! v1-0 (logand v1-0 a3-4))) + ) + (b! #t cfg-3 :delay (set! v1-0 (logior v1-0 2))) + (label cfg-37) + (.mov vf1 t1-0) + ) + (let ((a3-5 (+ t0-4 -45))) + (b! (zero? t0-4) cfg-41 :delay (.itof.vf vf1 vf1)) + (b! (zero? a3-5) cfg-40) + ) + (b! #t cfg-3 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-40) + (b! #t cfg-3 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1)) + (label cfg-41) + (b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1)) + (label cfg-42) + (b! #t cfg-3 :delay (.svf (&-> a1-4 save quad) vf23)) + (label cfg-43) + (b! #t cfg-3 :delay (.lvf vf23 (&-> a1-4 save quad))) + (label cfg-44) + (let ((a3-6 (-> (the-as (pointer uint8) arg0) 4))) + (set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1))) + (let ((a3-7 (logand a3-6 127))) + (let ((a3-8 (+ a3-7 255))) + (b! #t cfg-48 :delay (.sll t0-5 a3-8 4)) + ) + ) + ) + (label cfg-45) + (.sll t0-5 a3-0 4) + (b! (= a3-0 10) cfg-47 :delay (set! a3-9 (+ a3-0 -13))) + ) + (b! (nonzero? a3-9) cfg-48) + (label cfg-47) + (b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf24 :mask #b1)) + (label cfg-48) + (.addu a3-10 t0-5 a2-2) + ) + ) + (.lvf vf5 (+ a3-10 -256)) + (.mul.vf vf19 vf5 vf13) + (b! (zero? (logand v1-0 2)) cfg-50) ) - ) + (b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) + (label cfg-50) + (b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf14 :mask #b1)) + (label cfg-51) + (.sub.vf vf23 vf23 vf24) + (.mov v0-0 vf23) + v0-0 ) - (label cfg-45) - (nop!) - (.sll t0-5 a3-0 4) - (nop!) - (b! (= a3-0 10) cfg-47 :delay (set! a3-9 (+ a3-0 -13))) - ) - (b! (nonzero? a3-9) cfg-48) - (label cfg-47) - (b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf24 :mask #b1)) - (label cfg-48) - (.addu a3-10 t0-5 a2-2) - ) - ) - (nop!) - (.lvf vf5 (+ a3-10 -256)) - (nop!) - (.mul.vf vf19 vf5 vf13) - (b! (zero? (logand v1-0 2)) cfg-50) - ) - (b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1)) - (label cfg-50) - (b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf14 :mask #b1)) - (label cfg-51) - (.sub.vf vf23 vf23 vf24) - (.mov v0-0 vf23) - v0-0 - ) ) -(defun draw-string-xy ((arg0 string) (arg1 dma-buffer) (arg2 int) (arg3 int) (arg4 font-color) (arg5 font-flags)) - ;(format #t "call to ds: ~A~%" arg0) - (let ((a2-2 (new 'stack 'font-context - *font-default-matrix* - arg2 - arg3 - 0.0 - arg4 - arg5 - ) - ) +(defun draw-string-xy ((str string) (buf dma-buffer) (x int) (y int) (color font-color) (flags int)) + "Draw a string at the given xy location." + (let ((context (new 'stack 'font-context + *font-default-matrix* + x + y + 0.0 + color + (the-as uint flags) + ) + ) ) - ;;(format 0 "len is ~f~%" (get-string-length arg0 a2-2)) - (draw-string arg0 arg1 a2-2) + (draw-string str buf context) ) (none) ) diff --git a/goal_src/engine/gfx/hw/display-h.gc b/goal_src/engine/gfx/hw/display-h.gc index f9d01521e7..29c02cd541 100644 --- a/goal_src/engine/gfx/hw/display-h.gc +++ b/goal_src/engine/gfx/hw/display-h.gc @@ -74,7 +74,7 @@ (vu1-buf dma-buffer :offset 8) (debug-buf dma-buffer :offset 36) (global-buf dma-buffer :offset 40) - (bucket-group dma-bucket :offset 44) + (bucket-group (inline-array dma-bucket) :offset 44) (buffer dma-buffer 11 :offset 4) (profile-bar profile-bar 2 :offset 48) (run-time uint64 :offset 56) diff --git a/goal_src/engine/gfx/hw/vu1-user-h.gc b/goal_src/engine/gfx/hw/vu1-user-h.gc index ade528b5a1..7856a8b201 100644 --- a/goal_src/engine/gfx/hw/vu1-user-h.gc +++ b/goal_src/engine/gfx/hw/vu1-user-h.gc @@ -8,8 +8,8 @@ ;; VU1 renderers are enabled/disabled with a bitmask. ;; I believe this is renderers which can be enabled/disabled in the debug menu? -(define *vu1-enable-user-menu* - #x1FFFF8) +;; 1024 = merc +(define *vu1-enable-user-menu* #x1FFFF8) ;; by default, all off. ;; the menu renderers get copied to this on each frame diff --git a/goal_src/engine/gfx/merc/merc-blend-shape.gc b/goal_src/engine/gfx/merc/merc-blend-shape.gc index 93ed9243b2..f09bb80e96 100644 --- a/goal_src/engine/gfx/merc/merc-blend-shape.gc +++ b/goal_src/engine/gfx/merc/merc-blend-shape.gc @@ -5,3 +5,118 @@ ;; name in dgo: merc-blend-shape ;; dgos: GAME, ENGINE +;; The merc-blend-shape renderer does face animations. +;; This is missing most functions right now, but just has the types that we need for +;; looking into merc. + +(define *stats-blerc* #f) + +(deftype blerc-block-header (structure) + ((tag generic-merc-tag :inline :offset-assert 0) + (vtx-count uint32 :offset-assert 16) + (overlap uint32 :offset-assert 20) + (lump-dest uint32 :offset-assert 24) + (lump-qwc uint32 :offset-assert 28) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype blerc-block (structure) + ((output uint8 848 :offset-assert 0) + (header blerc-block-header :inline :offset-assert 848) + ) + :method-count-assert 9 + :size-assert #x370 + :flag-assert #x900000370 + ) + +(deftype blerc-dcache (structure) + ((repl-mult vector 40 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x280 + :flag-assert #x900000280 + ) + +(deftype blerc-globals (structure) + ((first uint32 :offset-assert 0) + (next uint32 :offset-assert 4) + (min-val int16 :offset-assert 8) + (max-val int16 :offset-assert 10) + (fragment-count int32 :offset-assert 12) + (vtx-count int32 :offset-assert 16) + (target-vtx-count int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +(define *blerc-globals* (new 'global 'blerc-globals)) + +(deftype blerc-context (structure) + ((block-a blerc-block :inline :offset-assert 0) + (dummy uint8 7312 :offset-assert 880) + (block-b blerc-block :inline :offset-assert 8192) + ) + :method-count-assert 9 + :size-assert #x2370 + :flag-assert #x900002370 + ) + +(defun-debug blerc-stats-init () + (when *stats-blerc* + (when (nonzero? (-> *blerc-globals* fragment-count)) + (format *stdcon* "~%BLERC (merc blend target) STATS~%") + (format *stdcon* " ~D fragments, ~D vertices~%" + (-> *blerc-globals* fragment-count) + (-> *blerc-globals* vtx-count) + ) + (format *stdcon* " ~D blend target computations (~F average)~%" + (-> *blerc-globals* target-vtx-count) + (/ (the float (-> *blerc-globals* target-vtx-count)) + (the float (-> *blerc-globals* vtx-count)) + ) + ) + (if (< (-> *blerc-globals* min-val) 0) + (format *stdcon* "MINIMUM OUT OF RANGE: ~D~%" (-> *blerc-globals* min-val)) + ) + (if (< 255 (-> *blerc-globals* max-val)) + (format *stdcon* "MAXIMUM OUT OF RANGE: ~D~%" (-> *blerc-globals* max-val)) + ) + ) + (let ((a0-7 *blerc-globals*)) + (set! (-> a0-7 min-val) 255) + (set! (-> a0-7 max-val) 0) + (set! (-> a0-7 fragment-count) 0) + (set! (-> a0-7 vtx-count) 0) + (set! (-> a0-7 target-vtx-count) 0) + ) + ) + 0 + (none) + ) + +(defun blerc-init () + (blerc-stats-init) + (let ((v1-0 *blerc-globals*)) + (set! (-> v1-0 first) (the-as uint 0)) + (set! (-> v1-0 next) (the-as uint 0)) + ) + 0 + (none) + ) + +;; todo blerc-a-fragment (unused) + +;; todo dma-from-spr (unused) + +;; todo merc-dma-chain-to-spr (unused) + +;; todo blerc-execute + +;; todo merc-blend-shape + +;; todo setup-blerc-chains \ No newline at end of file diff --git a/goal_src/engine/gfx/merc/merc-h.gc b/goal_src/engine/gfx/merc/merc-h.gc index bd750d92d7..4e289fc4ff 100644 --- a/goal_src/engine/gfx/merc/merc-h.gc +++ b/goal_src/engine/gfx/merc/merc-h.gc @@ -19,6 +19,7 @@ (set! (-> ripple-merc-query heap-base) 16) +;; header to fragments uploaded to VU. (deftype merc-byte-header (structure) ((srcdest-off uint8 :offset-assert 0) (rgba-off uint8 :offset-assert 1) @@ -40,6 +41,12 @@ :flag-assert #x900000017 ) +;; merc VU fragment. +;; The mm-quadword-size includes the header. +;; The data itself is split into two parts: +;; - ?? +;; - fp data, containing a merc-fp-data then "fp" data. +;; the merc-fragment-fp-data function will get a pointer to fp data. (deftype merc-fragment (structure) ((header merc-byte-header :inline :offset-assert 0) (rest uint8 1 :offset-assert 23) @@ -48,7 +55,7 @@ :size-assert #x18 :flag-assert #xa00000018 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -71,11 +78,13 @@ :flag-assert #x90000000c ) +;; header for fp data within a fragment. Is included in fp data. +;; adgifs come right after the header (deftype merc-fp-header (structure) ((x-add float :offset-assert 0) (y-add float :offset-assert 4) (z-add float :offset-assert 8) - (shader-cnt uint8 :offset-assert 12) + (shader-cnt uint8 :offset-assert 12) ;; number of adgifs (kick-info-offset uint8 :offset-assert 13) (kick-info-step uint8 :offset-assert 14) (hword-cnt uint8 :offset-assert 15) @@ -87,24 +96,27 @@ (defun merc-fragment-fp-data ((arg0 merc-fragment)) "Get the floating-point data of a merc-fragment" - (the pointer (&+ arg0 (the-as uint (shl (-> arg0 header mm-quadword-fp-off) 4)))) + (the merc-fp-header (&+ arg0 (the-as uint (shl (-> arg0 header mm-quadword-fp-off) 4)))) ) (deftype merc-mat-dest (structure) ((matrix-number uint8 :offset-assert 0) (matrix-dest uint8 :offset-assert 1) ) + :pack-me :method-count-assert 9 :size-assert #x2 :flag-assert #x900000002 ) +;; some info about a merc fragment that will stay on the EE. +;; the merc-effect contains a ref to one of these (deftype merc-fragment-control (structure) ((unsigned-four-count uint8 :offset-assert 0) (lump-four-count uint8 :offset-assert 1) (fp-qwc uint8 :offset-assert 2) (mat-xfer-count uint8 :offset-assert 3) - (mat-dest-data uint8 :dynamic :offset-assert 4) + (mat-dest-data merc-mat-dest :inline :dynamic :offset-assert 4) ) :method-count-assert 9 :size-assert #x4 @@ -188,12 +200,15 @@ (dummy1 uint8 :offset-assert 26) (envmap-usage uint8 :offset-assert 27) (extra-info merc-extra-info :offset-assert 28) + + ;; added + (data uint64 4 :offset 0) ) :method-count-assert 10 :size-assert #x20 :flag-assert #xa00000020 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -234,6 +249,8 @@ :flag-assert #x900000008 ) + +;; metadata for merc art (deftype merc-ctrl-header (structure) ((xyz-scale float :offset-assert 0) (st-magic uint32 :offset-assert 4) @@ -282,6 +299,7 @@ ;; field xyz-scale is a float printed as hex? ) +;; the actual merc art object. (deftype merc-ctrl (art-element) ((num-joints int32 :offset 20) (header merc-ctrl-header :inline :offset-assert 32) @@ -293,8 +311,8 @@ ) (deftype merc-vu1-low-mem (structure) - ((tri-strip-gif qword :inline :offset-assert 0) - (ad-gif qword :inline :offset-assert 16) + ((tri-strip-gif gs-gif-tag :inline :offset-assert 0) ;; was qword + (ad-gif gs-gif-tag :inline :offset-assert 16) ;; was qword (hvdf-offset vector :inline :offset-assert 32) (perspective uint128 4 :offset-assert 48) (fog vector :inline :offset-assert 112) diff --git a/goal_src/engine/gfx/merc/merc-vu1.gc b/goal_src/engine/gfx/merc/merc-vu1.gc index ffe1eb5016..323abca808 100644 --- a/goal_src/engine/gfx/merc/merc-vu1.gc +++ b/goal_src/engine/gfx/merc/merc-vu1.gc @@ -6,3 +6,5 @@ ;; dgos: GAME, ENGINE ;; all this contains is the merc-vu1-block + +(define merc-vu1-block (the vu-function 0)) \ No newline at end of file diff --git a/goal_src/engine/gfx/merc/merc.gc b/goal_src/engine/gfx/merc/merc.gc index aa84dc70be..d4b2591b54 100644 --- a/goal_src/engine/gfx/merc/merc.gc +++ b/goal_src/engine/gfx/merc/merc.gc @@ -5,6 +5,683 @@ ;; name in dgo: merc ;; dgos: GAME, ENGINE -(defun merc-vu1-init-buffers () - ;; TODO stub +;; This file contains the EE code for MERC +;; The merc renderer is used to draw characters and other dynamic things. +;; It supports a number of effects and can interact with other renderers. +;; It's the most complicated renderer in the game and its code uses almost the entire VU1 code memory. + +;; The interface with the rest of the art world is merc-ctrl, which is an art-element. +;; It contains a merc-ctrl-header which has the metadata. +;; It also has an array of merc-effects which contain the actual data. + +;; contains the header for the currently logging-in thing. +(define *merc-ctrl-header* (the-as merc-ctrl-header #f)) + +(defmethod asize-of merc-fragment ((obj merc-fragment)) + "Get the size in memory of a merc-fragment" + (the-as int (* (-> obj header mm-quadword-size) 16)) + ) + +(defmethod login-adgifs merc-fragment ((obj merc-fragment)) + "Set up a merc-fragment. Does adgifs and eye stuff" + (let* ((fp-data (merc-fragment-fp-data obj)) + (eye-ctrl + (the-as merc-eye-ctrl (if (nonzero? (-> *merc-ctrl-header* eye-ctrl)) + (-> *merc-ctrl-header* eye-ctrl) + (the-as merc-eye-ctrl #f) + ) + ) + ) + (shader (the-as adgif-shader (&+ fp-data 16))) + ) + (dotimes (s2-0 (the-as int (-> fp-data shader-cnt))) + (cond + ((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf06f00)) + ;; eye slot 0 + (adgif-shader-login shader) + (let ((eye-tex-block (get-eye-block (-> eye-ctrl eye-slot) 0))) + (set! (-> shader tex0 tbp0) eye-tex-block) + ) + (set! (-> shader tex0 tw) 5) + (set! (-> shader tex0 th) 5) + (set! (-> shader tex0 tcc) 1) + (set! (-> shader tex0 tbw) 1) + (set! (-> shader tex0 psm) 0) + (set! (-> shader tex1 mxl) 0) + (set! (-> shader clamp) + (new 'static 'gs-clamp + :wms (gs-tex-wrap-mode clamp) + :wmt (gs-tex-wrap-mode clamp) + :maxu #x1f + :maxv #x1f + ) + ) + ) + ((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf07000)) + ;; eye slot 1 + (adgif-shader-login shader) + (let ((eye-tex-block-2 (get-eye-block (-> eye-ctrl eye-slot) 1))) + (set! (-> shader tex0 tbp0) eye-tex-block-2) + ) + (set! (-> shader tex0 tw) 5) + (set! (-> shader tex0 th) 5) + (set! (-> shader tex0 tcc) 1) + (set! (-> shader tex0 tbw) 1) + (set! (-> shader tex0 psm) 0) + (set! (-> shader tex1 mxl) 0) + (set! (-> shader clamp) + (new 'static 'gs-clamp + :wms (gs-tex-wrap-mode clamp) + :wmt (gs-tex-wrap-mode clamp) + :maxu #x1f + :maxv #x1f + ) + ) + ) + (else + ;; normal. just login and set tex masks. + (let ((tex (adgif-shader-login shader))) + (when tex + (dotimes (seg 3) + (logior! (-> *merc-ctrl-header* masks seg) (-> tex masks seg)) + ) + ) + ) + ) + ) + (&+! shader 80) + ) + ) + (none) + ) + +(defmethod inspect merc-fragment-control ((obj merc-fragment-control)) + "Debug print a merc-fragment-control" + (format #t "[~8x] ~A~%" obj 'merc-fragment-control) + (format #t "~Tunsigned-four-count: ~D~%" (-> obj unsigned-four-count)) + (format #t "~Tlump-four-count: ~D~%" (-> obj lump-four-count)) + (format #t "~Tfp-qwc: ~D~%" (-> obj fp-qwc)) + (format #t "~Tmat-xfer-count: ~D~%" (-> obj mat-xfer-count)) + (dotimes (s5-0 (the-as int (-> obj mat-xfer-count))) + (format #t "~Tmat-dest-data[~d]:~%" s5-0) + (format #t "~T~Tmatrix-number: ~D~%"(-> obj mat-dest-data s5-0 matrix-number)) + (format #t "~T~Tmatrix-dest: ~D~%" (-> obj mat-dest-data s5-0 matrix-dest)) + ) + obj + ) + +(defmethod login-adgifs merc-effect ((obj merc-effect)) + "Login everything for this merc-effect." + + ;; login adgifs, if we have them. + (let ((data (-> obj extra-info))) + (when (nonzero? data) + (when (nonzero? (-> data shader-offset)) + (let ((tex (adgif-shader-login + (the-as + adgif-shader + (+ (the-as uint data) (* (-> data shader-offset) 16)) + ) + ) + ) + ) + (when tex + (dotimes (seg 3) + (logior! (-> *merc-ctrl-header* masks seg) (-> tex masks seg)) + ) + ) + ) + ) + ) + ) + + ;; login fragment geometry and control. ctrls don't need logins + (let ((ctrl (-> obj frag-ctrl)) + (geo (-> obj frag-geo)) + ) + (dotimes (frag-idx (the-as int (-> obj frag-count))) + (let ((ctrl-size (asize-of ctrl))) + (let ((geo-size (asize-of geo))) + (login-adgifs geo) + (set! geo (the-as merc-fragment (&+ (the-as pointer geo) geo-size))) + ) + (set! ctrl (the-as merc-fragment-control (&+ (the-as pointer ctrl) ctrl-size))) + ) + ) + ) + (none) + ) + +(defmethod inspect merc-ctrl ((obj merc-ctrl)) + "Print a merc-ctrl" + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tnum-joints: ~D~%" (-> obj num-joints)) + (format #t "~Textra: ~A~%" (-> obj extra)) + (inspect (-> obj header)) + (dotimes (s5-0 (the-as int (-> obj header effect-count))) + (inspect (-> obj effect s5-0)) + ) + obj + ) + +(defmethod mem-usage merc-ctrl ((obj merc-ctrl) (arg0 memory-usage-block) (arg1 int)) + "Compute memory usage stats for a merc-ctrl" + + ;; do extra + (if (-> obj extra) + (mem-usage (-> obj extra) arg0 arg1) + ) + + ;; do merc ctrls in each effect: + (let ((ctrl-mem (+ 32 80 (* (-> obj header effect-count) 32)))) + (dotimes (effect-idx (the-as int (-> obj header effect-count))) + (let ((fctrl (-> obj effect effect-idx frag-ctrl))) + (dotimes (frag-idx (the-as int (-> obj effect effect-idx frag-count))) + (set! ctrl-mem (+ ctrl-mem + (* (shr (+ (-> fctrl unsigned-four-count) 3) 2) 16) + (* (shr (+ (-> fctrl lump-four-count) 3) 2) 16) + (* (-> fctrl fp-qwc) 16) + (asize-of fctrl) + ) + ) + (set! fctrl (the-as merc-fragment-control (&+ (the-as pointer fctrl) (asize-of fctrl)))) + ) + ) + ) + (set! (-> arg0 length) (max 76 (-> arg0 length))) + (set! (-> arg0 data 75 name) "merc-ctrl") + (+! (-> arg0 data 75 count) 1) + (+! (-> arg0 data 75 used) ctrl-mem) + (+! (-> arg0 data 75 total) (logand -16 (+ ctrl-mem 15))) + ) + + ;; do effect blend shapes + (let ((effect-mem 0)) + (dotimes (effect-idx2 (the-as int (-> obj header effect-count))) + (when (nonzero? (-> obj effect effect-idx2 blend-frag-count)) + (let ((bctrl (-> obj effect effect-idx2 blend-ctrl))) + (dotimes (blend-frag-idx (the-as int (-> obj effect effect-idx2 blend-frag-count)) ) + (let ((v1-36 (+ effect-mem + (* (+ (-> bctrl nonzero-index-count) 1) + (the-as uint (logand (+ (* (the-as uint 6) (-> bctrl blend-vtx-count)) 15) #xfff0)) + ) + ) + ) + ) + (set! effect-mem (the-as int (+ (-> obj header blend-target-count) 2 v1-36))) + ) + (set! bctrl (the-as merc-blend-ctrl (&+ (the-as pointer bctrl) (+ (-> obj header blend-target-count) 2)))) + ) + ) + ) + ) + (when (nonzero? effect-mem) + (set! (-> arg0 length) (max 78 (-> arg0 length))) + (set! (-> arg0 data 77 name) "blend-shape") + (+! (-> arg0 data 77 count) 1) + (+! (-> arg0 data 77 used) effect-mem) + (+! (-> arg0 data 77 total) (logand -16 (+ effect-mem 15))) + ) + ) + + ;; do eyes. + (when (nonzero? (-> obj header eye-ctrl)) + (let ((a0-28 (-> obj header eye-ctrl))) + (set! (-> arg0 length) (max 109 (-> arg0 length))) + (set! (-> arg0 data 108 name) "eye-anim") + (+! (-> arg0 data 108 count) 1) + (let ((v1-47 (asize-of a0-28))) + (+! (-> arg0 data 108 used) v1-47) + (+! (-> arg0 data 108 total) (logand -16 (+ v1-47 15))) + ) + ) + ) + obj + ) + +(defmethod login merc-ctrl ((obj merc-ctrl)) + "Log in a merc-ctrl." + + ;; so we can find it + (set! *merc-ctrl-header* (-> obj header)) + + ;; clear masks. logging in will set these for textures we need. + (dotimes (v1-1 3) + (set! (-> *merc-ctrl-header* masks v1-1) (the-as uint 0)) + ) + + ;; login the effects + (dotimes (effect-idx (the-as int (-> obj header effect-count))) + (login-adgifs (-> obj effect effect-idx)) + ) + + ;; some weird hack to swap two effects. + (let ((idx-with-bit1 -1) + (a1-1 (-> obj header effect-count)) + ) + (dotimes (v1-11 (the-as int a1-1)) + (if (logtest? (-> obj effect v1-11 effect-bits) 2) + (set! idx-with-bit1 v1-11) + ) + ) + (when (!= idx-with-bit1 -1) + (let ((v1-16 4) + (this-effect (-> obj effect idx-with-bit1)) + (last-effect (-> obj effect (+ a1-1 -1))) + ) + (dotimes (copy-idx v1-16) + (let ((a3-2 (-> this-effect data copy-idx))) + (set! (-> this-effect data copy-idx) (-> last-effect data copy-idx)) + (set! (-> last-effect data copy-idx) a3-2) + ) + ) + ) + ) + ) + + ;; login eye. + (cond + ((zero? (logand -65536 (the-as int (-> obj header eye-ctrl)))) + ;; no idea what this is for. + (set! (-> obj header eye-ctrl) (the-as merc-eye-ctrl 0)) + 0 + ) + (else + (let ((s5-1 (-> obj header eye-ctrl))) + ;; login and set masks + (dotimes (s4-0 3) + (let ((v1-25 (adgif-shader-login (-> s5-1 shader s4-0)))) + (when v1-25 + (dotimes (a0-11 3) + (logior! (-> *merc-ctrl-header* masks a0-11) (-> v1-25 masks a0-11)) + ) + ) + ) + ) + ) + ) + ) + obj + ) + +(defun-debug merc-stats-display ((arg0 merc-ctrl)) + "Print debug stats to #t." + (format #t "~30s:" (-> arg0 name)) + (let ((s5-0 (-> arg0 header st-int-scale)) + (s4-0 (ash 1 (- 12 (the-as int (-> arg0 header st-int-scale))))) + ) + (format #t " ST ~3D, " s4-0) + (cond + ((>= s5-0 (the-as uint 5)) + (format #t "RANGE ~D+," (/ 128 s4-0)) + ) + ((= s5-0 4) + (format #t "RANGE 0.5+,") + ) + ) + ) + (dotimes (s5-1 (the-as int (-> arg0 header effect-count))) + (let ((s3-0 (-> arg0 effect s5-1))) + (if (nonzero? s5-1) + (format #t "~48s " " ") + ) + (let ((a2-4 (-> s3-0 frag-count)) + (s4-1 (-> s3-0 tri-count)) + (f30-0 (the float (-> s3-0 frag-count))) + (f28-0 (the float (-> s3-0 dvert-count))) + (f26-0 (the float (-> s3-0 tri-count))) + ) + (if (>= (/ (+ 50.0 f28-0) f30-0) 50.0) + (format #t "~3D frags, ~2,,1f dverts/frag " a2-4 (/ f28-0 f30-0)) + (format #t "~3D frags, ~2,,1f ******/**** " a2-4 (/ f28-0 f30-0)) + ) + (format #t "(~4D tris, striplen ~2,,2f, ~2,,1f tris/frag)~%" + s4-1 + (/ (* 2.0 f26-0) (- f28-0 f26-0)) + (/ f26-0 f30-0) + ) + ) + ) + ) + (none) + ) + +(defun-debug merc-stats () + "Iterate through all merc-ctrls and print." + + (dotimes (gp-0 3) ;; levels + (let ((s5-0 (-> *level* level gp-0 art-group))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 art-group-array length)) ;; art-groups + (let ((s3-0 (-> s5-0 art-group-array s4-0))) + (dotimes (s2-0 (-> s3-0 length)) ;; arts + (let* ((s1-0 (-> s3-0 data s2-0)) + (a0-3 (if (and (nonzero? s1-0) (type-type? (-> s1-0 type) merc-ctrl)) + s1-0 + ) + ) + ) + (if a0-3 + (merc-stats-display (the-as merc-ctrl a0-3)) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defun-debug merc-edge-stats () + "Print the longest edges in each." + (dotimes (gp-0 3) + (let ((s5-0 (-> *level* level gp-0 art-group))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 art-group-array length)) + (let ((s3-0 (-> s5-0 art-group-array s4-0))) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((s1-0 (-> s3-0 data s2-0)) + (v1-10 + (if (and (nonzero? s1-0) (type-type? (-> s1-0 type) merc-ctrl)) + s1-0 + ) + ) + ) + (if v1-10 + (format + #t + "~30s: ~f~%" + (-> (the-as merc-ctrl v1-10) name) + (-> (the-as merc-ctrl v1-10) header longest-edge) + ) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defun merc-vu1-add-vu-function ((dma dma-packet) (func vu-function) (flush-mode int)) + "Add a function to a dma chain. Return pointer to chain after the upload data." + (let ((func-data (&-> func data 4)) + (qwc (-> func qlength)) + (dst (-> func origin)) + ) + (while (> qwc 0) + (let ((qwc-this-time (min 127 qwc))) ;; only 127 at a time + (set! (-> dma dma) + (new 'static 'dma-tag + :id (dma-tag-id ref) + :qwc qwc-this-time + :addr (the-as int func-data) + ) + ) + (set! (-> dma vif0) (new 'static 'vif-tag :cmd (if (zero? flush-mode) (vif-cmd flushe) (vif-cmd flusha)))) + (set! (-> dma vif1) + (new 'static 'vif-tag + :cmd (vif-cmd mpg) + :num (* qwc-this-time 2) + :imm dst + ) + ) + (&+! dma 16) + (&+! func-data (* qwc-this-time 16)) + (set! qwc (- qwc qwc-this-time)) + (+! dst (* qwc-this-time 2)) + ) + ) + ) + (the-as dma-gif-packet dma) + ) + +(defun merc-vu1-initialize-chain ((arg0 dma-gif-packet)) + "Initialize a merc chain." + ;; upload the function. + (let ((gp-0 (the-as object (merc-vu1-add-vu-function (the-as dma-packet arg0) merc-vu1-block 1)))) + ;; now set up the VIF. + (set! (-> (the-as dma-gif-packet gp-0) dma-vif dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt))) + (set! (-> (the-as dma-gif-packet gp-0) dma-vif vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl))) + (set! (-> (the-as dma-gif-packet gp-0) dma-vif vif1) (new 'static 'vif-tag :cmd (vif-cmd stmod))) + (set! (-> (the-as (pointer vif-tag) gp-0) 4) (new 'static 'vif-tag :imm #x1ba :cmd (vif-cmd base))) + (set! (-> (the-as (pointer vif-tag) gp-0) 5) (new 'static 'vif-tag :imm #xfe46 :cmd (vif-cmd offset))) + (set! (-> (the-as (pointer vif-tag) gp-0) 6) (new 'static 'vif-tag)) + + ;; upload VU low memory + (set! (-> (the-as (pointer vif-tag) gp-0) 7) (new 'static 'vif-tag :num #x8 :cmd (vif-cmd unpack-v4-32))) + + ;; template: + (let ((s5-0 (the-as merc-vu1-low-mem (&+ (the-as dma-gif-packet gp-0) 32)))) + (set! (-> s5-0 tri-strip-gif tag) + (new 'static 'gif-tag64 + :pre #x1 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :iip #x1 :tme #x1 :fge #x1) + :nreg #x3 + ) + ) + (set! (-> s5-0 tri-strip-gif regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id st) + :regs1 (gif-reg-id rgbaq) + :regs2 (gif-reg-id xyzf2) + ) + ) + ;; what is this, they snuck something in here... + (set! (-> s5-0 tri-strip-gif word 3) + (shr (make-u128 0 (shl #x303e4000 32)) 32) + ) + + (set! (-> s5-0 ad-gif tag) (new 'static 'gif-tag64 :nloop #x5 :nreg #x1)) + (set! (-> s5-0 ad-gif regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d))) + (set! (-> s5-0 hvdf-offset quad) (-> *math-camera* hvdf-off quad)) + + (quad-copy! (-> s5-0 perspective) (the-as pointer (-> *math-camera* perspective)) 4) + (set-vector! + (-> s5-0 fog) + (-> *math-camera* pfog0) + (-> *math-camera* fog-min) + (-> *math-camera* fog-max) + 0.0 + ) + ) + ;; end. + (let ((v1-20 (-> (the-as (inline-array dma-packet) gp-0) 10))) + (set! (-> v1-20 dma) (new 'static 'dma-tag :id (dma-tag-id cnt))) + (set! (-> v1-20 vif0) (new 'static 'vif-tag)) + (set! (-> v1-20 vif1) (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1 :imm #x0)) + (&+ v1-20 16) + ) + ) + (none) + ) + + +(defun merc-vu1-init-buffer ((dma-bucket bucket-id) (test gs-test) (arg2 int)) + "Setup merc DMA buffer." + + ;; This function works differently from most and splices to the beginning of the bucket, as + ;; drawing has already put stuff in buckets. + ;; The advantage of this is that we can check if nothing was drawn, then skip this. + ;; NOTE: This runs as part of display-frame-finish, so after previous DMA is synced. + + ;; grab out bucket directly. + (let ((bucket (-> *display* frames (-> *display* on-screen) frame bucket-group dma-bucket))) + ;; only if we draw anything. + (when (!= bucket (-> bucket last)) + (let* ((dma-buf (-> *display* frames (-> *display* on-screen) frame global-buf)) + (draw-data-start (-> dma-buf base)) ;; remember old beginning + ) + ;; set the beginning to be the merc init stuff. + (set! (-> dma-buf base) + (the-as pointer (merc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base))) ) + ) + ;; some other merc setup for the GS. + (let* ((v1-8 dma-buf) + (a0-6 (the-as object (-> v1-8 base))) + ) + (set! (-> (the-as dma-packet a0-6) dma) (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt))) + (set! (-> (the-as dma-packet a0-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet a0-6) vif1) + (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1) + ) + (set! (-> v1-8 base) (&+ (the-as pointer a0-6) 16)) + ) + (let* ((v1-9 dma-buf) + (a0-8 (the-as object (-> v1-9 base))) + ) + (set! (-> (the-as gs-gif-tag a0-8) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1)) + (set! (-> (the-as gs-gif-tag a0-8) regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id a+d) + :regs1 (gif-reg-id a+d) + :regs2 (gif-reg-id a+d) + :regs3 (gif-reg-id a+d) + :regs4 (gif-reg-id a+d) + :regs5 (gif-reg-id a+d) + :regs6 (gif-reg-id a+d) + :regs7 (gif-reg-id a+d) + :regs8 (gif-reg-id a+d) + :regs9 (gif-reg-id a+d) + :regs10 (gif-reg-id a+d) + :regs11 (gif-reg-id a+d) + :regs12 (gif-reg-id a+d) + :regs13 (gif-reg-id a+d) + :regs14 (gif-reg-id a+d) + :regs15 (gif-reg-id a+d) + ) + ) + (set! (-> v1-9 base) (&+ (the-as pointer a0-8) 16)) + ) + (let* ((v1-10 dma-buf) + (a0-10 (-> v1-10 base)) + ) + (set! (-> (the-as (pointer gs-test) a0-10) 0) test) + (set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 test-1)) + (set! (-> v1-10 base) (&+ a0-10 16)) + ) + + ;; terminate as normal + (let ((v1-11 (the-as object (-> dma-buf base)))) + (set! (-> (the-as dma-packet v1-11) dma) + (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)) + ) + (set! (-> (the-as dma-packet v1-11) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-11) vif1) (new 'static 'vif-tag)) + (set! (-> dma-buf base) (&+ (the-as pointer v1-11) 16)) + ) + + ;; but splice the existing chain. + (set! (-> bucket next) (the-as uint draw-data-start)) + ) + ) + ) + 0 + (none) + ) + +(defun merc-vu1-init-buffers () + "Setup merc DMA buffers. Call this _after_ drawing." + (when (logtest? *vu1-enable-user* 1024) + (merc-vu1-init-buffer + (bucket-id bucket-10) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-49) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-17) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-52) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-45) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-55) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-58) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x80 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-61) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x80 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + ) + 0 + (none) ) diff --git a/goal_src/engine/level/level-h.gc b/goal_src/engine/level/level-h.gc index 07b58e332b..847e5fb8de 100644 --- a/goal_src/engine/level/level-h.gc +++ b/goal_src/engine/level/level-h.gc @@ -9,6 +9,12 @@ (defconstant LEVEL_COUNT 2) ;; there are two levels in memory! +(defenum vis-info-flag + :bitfield #t + :type uint32 + (waiting-for-load 30) + ) + ;; Information related to visibility data for a level. ;; Unclear why there are 8 of these per level. ;; Perhaps there are up to 8 "chunks" of the visibility loaded at a single time? @@ -27,7 +33,7 @@ (ramdisk uint32 :offset-assert 40) (vis-bits pointer :offset-assert 44) (current-vis-string uint32 :offset-assert 48) - (vis-string uint8 :dynamic :offset-assert 52) + (vis-string uint32 :dynamic :offset-assert 52) ) :method-count-assert 9 :size-assert #x34 @@ -152,7 +158,7 @@ (bsp-name (_type_) symbol 13) (dummy-14 (_type_ object) memory-usage-block 14) (dummy-15 (_type_ vector) symbol 15) - (dummy-16 (_type_ uint uint) none 16) + (update-vis! (_type_ level-vis-info uint uint) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login (_type_) _type_ 19) diff --git a/goal_src/engine/level/level.gc b/goal_src/engine/level/level.gc index 2810daa1ac..a51603071f 100644 --- a/goal_src/engine/level/level.gc +++ b/goal_src/engine/level/level.gc @@ -573,7 +573,7 @@ (let ((v1-39 (- (the-as uint current-login-pos) (the-as uint (-> level-drawable-trees length))))) (when (< (the-as int v1-39) (-> loaded-level art-group art-group-array length)) (let ((s2-2 (-> loaded-level art-group art-group-array v1-39))) - (dummy-9 s2-2) + (login s2-2) (if (dummy-12 s2-2) (link-art! s2-2) ) diff --git a/goal_src/engine/load/decomp.gc b/goal_src/engine/load/decomp.gc index 9858672255..72e359bbae 100644 --- a/goal_src/engine/load/decomp.gc +++ b/goal_src/engine/load/decomp.gc @@ -5,3 +5,309 @@ ;; name in dgo: decomp ;; dgos: GAME, ENGINE +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; decompression functions +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun unpack-comp-rle ((out (pointer int8)) (in (pointer int8))) + "Unpack run-length-encoded data. Has sections of repeated values, then normally copied." + (local-vars (current-input int) (copy-length int)) + (nop!) + (while #t + (while #t + + ;; read the input and see what kind it is, based on number. + (set! current-input (-> in 0)) + (set! in (&-> in 1)) + (b! (<= current-input 0) cfg-5 :delay (nop!)) + + ;; it's a repated value, loop to copy it. + (let ((repeated-value (-> in 0))) + (set! in (&-> in 1)) + (label cfg-3) + (set! (-> out 0) repeated-value) + ) + (set! out (&-> out 1)) + (b! (> current-input 0) cfg-3 :delay (set! current-input (+ current-input -1))) + ) + + (label cfg-5) + ;; check for end + (b! (zero? current-input) cfg-8 :delay (set! copy-length (- current-input))) + + ;; copy + (label cfg-6) + (let ((src-val (-> in 0))) + (set! in (&-> in 1)) + (set! (-> out 0) src-val) + ) + (+! copy-length -1) + (b! (> copy-length 0) cfg-6 :delay (set! out (&-> out 1))) + ) + (label cfg-8) + 0 + (none) + ) + + +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(defun unpack-comp-huf ((dst (pointer uint8)) (src (pointer uint8)) (arg2 uint) (dict huf-dictionary-node)) + "Unpack data compressed with huffman encoding." + (local-vars (t1-1 uint) (t3-2 object)) + (let ((t1-0 (-> dict zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> dict one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> src 0))) + (set! src (&-> src 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (.sra v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (+ t3-1 a2-1))) + ) + (b! (zero? t2-1) cfg-10 + :delay (set! t1-0 (-> (the-as (pointer uint16) t3-2) 0)) + ) + ) + (b! (nonzero? v1-4) cfg-2 + :delay (set! t2-0 (-> (the-as (pointer uint16) t3-2) 1)) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> dst 0) t1-1) + (set! dst (&-> dst 1)) + (nop!) + (set! t1-0 (-> dict zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> dict one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +(defmethod update-vis! level ((obj level) (vis-info level-vis-info) (arg1 uint) (arg2 uint)) + (local-vars (t0-3 uint128) (vis-buffer object)) + + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) ;; current bsp leaf of camera + (curr-vis-str (-> vis-info current-vis-string)) ;; currently loaded vis-string. + (desired-vis-str (-> vis-info vis-string cam-leaf-idx)) ;; vis-string ptr for what we want. + ) + ;; oops + 0 + (+ 16 #x70000000) + (+ 2064 #x70000000) + + ;; wait on ramdisk load, or do nothing because we already have the right stuff. + (when (= curr-vis-str desired-vis-str) + ;; we match. but are we loading? + (cond + ((logtest? (vis-info-flag waiting-for-load) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + ;; loading, and ramdisk not done, return #f, we don't have vis. + (return #f) + ) + ;; we are done loading. Jump to code that sets it up. + (logclear! (-> vis-info flags) (vis-info-flag waiting-for-load)) + (set! vis-buffer (-> obj vis-buffer)) + (b! #t cfg-27 :delay (nop!)) + ) + (else + ;; matched, and loaded! + (return #t) + ) + ) + ) + + ;; wait for any pending load to finish. + (when (logtest? (vis-info-flag waiting-for-load) (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (logclear! (-> vis-info flags) (vis-info-flag waiting-for-load)) + ) + + ;; not sure what this does yet. + (set! (-> vis-info current-vis-string) desired-vis-str) + (b! (logtest? #x20000000 (-> vis-info flags)) cfg-15) + (set! vis-buffer (the-as (pointer uint8) (+ arg2 desired-vis-str))) + (b! #t cfg-27 :delay (nop!)) + (label cfg-15) + + ;; start a ramdisk load. + (let ((vis-load-result (vis-load obj))) + (b! (nonzero? vis-load-result) cfg-21) + (let* ((dest-bits (-> vis-info vis-bits)) + (len (-> obj bsp visible-list-length)) + (bsp-bits (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (len-qw (/ (+ len 15) 16)) + ) + (dotimes (a2-1 len-qw) + (set! + (-> (the-as (pointer uint128) dest-bits) 0) + (-> (the-as (pointer uint128) bsp-bits) 0) + ) + (&+! dest-bits 16) + (set! bsp-bits (&-> (the-as (pointer uint16) bsp-bits) 8)) + ) + ) + (let ((result #f)) + (b! #t cfg-55 :delay (nop!)) + (the-as none 0) + (label cfg-21) + (when (check-busy *ramdisk-rpc*) + (set! (-> vis-info current-vis-string) (the-as uint -1)) + (set! (-> obj all-visible?) 'loading) + (if (= *cheat-mode* 'debug) + (format *stdcon* "Ramdisk loading~%") + ) + (return #f) + ) + (set! (-> vis-info flags) (logior (-> vis-info flags) #x40000000)) + (ramdisk-load + (the-as int vis-load-result) + desired-vis-str + (the-as uint 2048) + (-> obj vis-buffer) + ) + (set! result #f) + (b! #t cfg-55 :delay (nop!)) + + + ;; setup loaded + (label cfg-27) + (let ((lower-flag-bits (the-as int (logand #x1fffffff (-> vis-info flags)))) + (spad-start (the-as object (+ 16 #x70000000))) + (spad-end (+ 2064 #x70000000)) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as vis-info-flag lower-flag-bits)) + (let ((list-qwc (/ (+ list-len 15) 16))) + (dotimes (a0-28 list-qwc) + (set! + (-> (the-as (pointer uint128) spad-start) a0-28) + (the-as uint128 0) + ) + ) + ) + (mem-copy! + (the-as pointer spad-start) + (the-as pointer vis-buffer) + list-len + ) + ) + (while (nonzero? lower-flag-bits) + (case (logand lower-flag-bits 7) + ((1) + (let ((v1-55 (/ (+ list-len 15) 16))) + (dotimes (a0-32 v1-55) + (set! (-> (the-as (pointer uint128) spad-start) a0-32) (the-as uint128 0)) + ) + ) + (dummy-16 + (-> obj bsp drawable-trees) + (the-as int spad-start) + (the-as object vis-buffer) + ) + ) + ((2) + (unpack-comp-rle + (the-as (pointer int8) spad-start) + (the-as (pointer int8) vis-buffer) + ) + ) + ((3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buffer) + (-> vis-info dictionary) + (the-as huf-dictionary-node + (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4) + ) + ) + ) + ) + (set! vis-buffer (the-as (pointer uint8) (the-as int spad-start))) + (set! spad-start spad-end) + (set! spad-end (the-as int vis-buffer)) + (.sra lower-flag-bits lower-flag-bits 3) + ) + (let ((s2-1 (the-as object vis-buffer)) + (s1-1 (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (v1-67 #f) + ) + (dotimes (s0-1 list-len) + (when (!= (logand (-> (the-as (pointer uint8) s2-1) 0) + (-> (the-as (pointer uint8) s1-1) 0) + ) + (-> (the-as (pointer uint8) s2-1) 0) + ) + (format #t "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> (the-as (pointer uint8) s2-1) 0) + (-> (the-as (pointer uint8) s1-1) 0) + ) + (set! v1-67 #t) + ) + (set! s2-1 (&-> (the-as (pointer uint8) s2-1) 1)) + (set! s1-1 (&+ (the-as (pointer uint16) s1-1) 1)) + ) + (when v1-67 + (format #t "src = #x~x dest = #x~x ~s ~s~%" + (the-as object vis-buffer) + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((v1-71 (the-as object vis-buffer)) + (a0-47 (-> vis-info vis-bits)) + (a1-22 (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (a2-11 (/ (+ list-len 15) 16)) + ) + (dotimes (a3-8 a2-11) + (let ((t0-2 (-> (the-as (pointer uint128) v1-71) 0)) + (t1-1 (-> (the-as (pointer uint128) a1-22) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) a0-47) 0) t0-3) + (&+! a0-47 16) + (set! v1-71 (&-> (the-as (pointer uint16) v1-71) 8)) + (set! a1-22 (&-> (the-as (pointer uint16) a1-22) 8)) + ) + ) + ) + (set! result #t) + (label cfg-55) + result + ) + ) + ) + ) \ No newline at end of file diff --git a/goal_src/engine/load/loader.gc b/goal_src/engine/load/loader.gc index 9b119d6374..f812361ebe 100644 --- a/goal_src/engine/load/loader.gc +++ b/goal_src/engine/load/loader.gc @@ -134,7 +134,7 @@ )|# (let ((s5-0 (the-as art (loado arg0 arg1)))) (if (type-type? (-> s5-0 type) art) - (dummy-9 s5-0) + (login s5-0) (the-as art #f) ) ) @@ -164,7 +164,7 @@ (the-as art-group #f) ) (else - (dummy-9 s3-1) + (login s3-1) ) ) ) @@ -461,7 +461,7 @@ (set! (-> obj status) 'error) ) (else - (dummy-9 s4-0) + (login s4-0) (set! (-> obj status) 'locked) ;; make file ready to be used ) ) diff --git a/test/decompiler/reference/decompiler-macros.gc b/test/decompiler/reference/decompiler-macros.gc index c9c60c8d6a..13c91d1b6c 100644 --- a/test/decompiler/reference/decompiler-macros.gc +++ b/test/decompiler/reference/decompiler-macros.gc @@ -330,3 +330,11 @@ ) ) ) + +(defmacro sext32 (in) + `(sar (shl ,in 32) 32) + ) + +(defmacro .sra (result in sa) + `(set! ,result (sext32 (sar (logand #xffffffff (the-as int ,in)) ,sa))) + ) diff --git a/test/decompiler/reference/engine/camera/cam-update_REF.gc b/test/decompiler/reference/engine/camera/cam-update_REF.gc index 09dfbc149d..2a32604ffa 100644 --- a/test/decompiler/reference/engine/camera/cam-update_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-update_REF.gc @@ -183,48 +183,36 @@ (if (!= (-> s5-1 all-visible?) 'loading) (set! (-> s5-1 all-visible?) #f) ) - (let* ((a0-19 s5-1) - (t9-2 (method-of-object a0-19 dummy-16)) - (a1-17 s4-0) - (a2-1 (-> s4-0 ramdisk)) - ) - (-> s4-0 string-block) - (when (t9-2 a0-19 (the-as uint a1-17) a2-1) - (countdown (v1-40 8) - (let ((a0-22 (-> s5-1 vis-info v1-40))) - (when a0-22 - (if (!= a0-22 s4-0) - (set! (-> a0-22 current-vis-string) (the-as uint -1)) - ) + (when + (update-vis! s5-1 s4-0 (-> s4-0 ramdisk) (-> s4-0 string-block)) + (countdown (v1-40 8) + (let ((a0-22 (-> s5-1 vis-info v1-40))) + (when a0-22 + (if (!= a0-22 s4-0) + (set! (-> a0-22 current-vis-string) (the-as uint -1)) ) ) ) - (set! (-> s5-1 all-visible?) #f) ) + (set! (-> s5-1 all-visible?) #f) ) ) (a0-16 (if (!= (-> s5-1 all-visible?) 'loading) (set! (-> s5-1 all-visible?) #f) ) - (let* ((a0-24 s5-1) - (t9-3 (method-of-object a0-24 dummy-16)) - (a1-21 s3-0) - (a2-2 (-> s3-0 ramdisk)) - ) - (-> s3-0 string-block) - (when (t9-3 a0-24 (the-as uint a1-21) a2-2) - (countdown (v1-50 8) - (let ((a0-27 (-> s5-1 vis-info v1-50))) - (when a0-27 - (if (!= a0-27 s3-0) - (set! (-> a0-27 current-vis-string) (the-as uint -1)) - ) + (when + (update-vis! s5-1 s3-0 (-> s3-0 ramdisk) (-> s3-0 string-block)) + (countdown (v1-50 8) + (let ((a0-27 (-> s5-1 vis-info v1-50))) + (when a0-27 + (if (!= a0-27 s3-0) + (set! (-> a0-27 current-vis-string) (the-as uint -1)) ) ) ) - (set! (-> s5-1 all-visible?) #f) ) + (set! (-> s5-1 all-visible?) #f) ) ) ((and (= (-> s5-1 all-visible?) 'loading) (-> *level* play?)) diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index 93dcf58407..6b3ebf6979 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -228,7 +228,7 @@ :size-assert #x14 :flag-assert #xd00000014 (:methods - (dummy-9 (_type_) _type_ 9) + (login (_type_) _type_ 9) (dummy-10 (_type_ string type) art-element 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) @@ -279,6 +279,7 @@ (artist-step float :offset 28) (master-art-group-name string :offset 32) (master-art-group-index int32 :offset 36) + (blerc-data (pointer uint8) :offset 40) (frames pointer :offset 44) (data joint-anim-compressed :dynamic :offset-assert 48) ) diff --git a/test/decompiler/reference/engine/debug/stats-h_REF.gc b/test/decompiler/reference/engine/debug/stats-h_REF.gc index 69674b773a..8e73699ff6 100644 --- a/test/decompiler/reference/engine/debug/stats-h_REF.gc +++ b/test/decompiler/reference/engine/debug/stats-h_REF.gc @@ -130,7 +130,7 @@ (local-vars (r0-0 none)) (let ((v1-0 (-> obj ctrl))) (+! (-> obj count) 1) - (b! (zero? v1-0) cfg-2) + (b! (zero? v1-0) cfg-2 :delay (nop!)) (.mtc0 Perf r0-0) (.sync.l) (.sync.p) @@ -156,7 +156,7 @@ ;; WARN: Unsupported inline assembly instruction kind - [mfpc v1, pcr1] (defmethod read! perf-stat ((obj perf-stat)) (local-vars (r0-0 none) (v1-1 int) (v1-3 int)) - (b! (zero? (-> obj ctrl)) cfg-2) + (b! (zero? (-> obj ctrl)) cfg-2 :delay (nop!)) (.mtc0 Perf r0-0) (.sync.l) (.sync.p) diff --git a/test/decompiler/reference/engine/dma/dma-bucket_REF.gc b/test/decompiler/reference/engine/dma/dma-bucket_REF.gc index ab976d0527..d62694ba01 100644 --- a/test/decompiler/reference/engine/dma/dma-bucket_REF.gc +++ b/test/decompiler/reference/engine/dma/dma-bucket_REF.gc @@ -2,7 +2,7 @@ (in-package goal) ;; definition for function dma-buffer-add-buckets -;; INFO: Return type mismatch pointer vs dma-bucket. +;; INFO: Return type mismatch pointer vs (inline-array dma-bucket). (defun dma-buffer-add-buckets ((dma-buf dma-buffer) (count int)) (let ((v0-0 (-> dma-buf base))) (let ((current-bucket (the-as dma-bucket v0-0))) @@ -22,17 +22,17 @@ ) (set! (-> dma-buf base) (the-as pointer current-bucket)) ) - (the-as dma-bucket v0-0) + (the-as (inline-array dma-bucket) v0-0) ) ) ;; definition for function dma-buffer-patch-buckets -(defun dma-buffer-patch-buckets ((bucket dma-bucket) (count int)) +(defun dma-buffer-patch-buckets ((bucket (inline-array dma-bucket)) (count int)) (when (nonzero? bucket) (dotimes (i count) - (set! (-> bucket last 0 addr) (the-as int (&+ (the-as pointer bucket) 16))) - (set! (-> bucket last) (the-as (pointer dma-tag) 0)) - (set! bucket (the-as dma-bucket (&+ (the-as pointer bucket) 16))) + (set! (-> bucket 0 last 0 addr) (the-as int (the-as pointer (-> bucket 1)))) + (set! (-> bucket 0 last) (the-as (pointer dma-tag) 0)) + (set! bucket (the-as (inline-array dma-bucket) (-> bucket 1))) ) ) bucket @@ -41,12 +41,12 @@ ;; definition for function dma-bucket-insert-tag (defun dma-bucket-insert-tag - ((base dma-bucket) + ((base (inline-array dma-bucket)) (idx bucket-id) (tag-start pointer) (tag-end (pointer dma-tag)) ) - (let ((bucket (the-as dma-bucket (+ (the-as uint base) (* idx 16))))) + (let ((bucket (-> base idx))) (set! (-> (the-as dma-bucket (-> bucket last)) next) (the-as uint tag-start)) (set! (-> bucket last) tag-end) ) diff --git a/test/decompiler/reference/engine/geometry/geometry_REF.gc b/test/decompiler/reference/engine/geometry/geometry_REF.gc index b519658710..aea1ef8e0e 100644 --- a/test/decompiler/reference/engine/geometry/geometry_REF.gc +++ b/test/decompiler/reference/engine/geometry/geometry_REF.gc @@ -823,7 +823,7 @@ ) (goto cfg-24) (label cfg-17) - (b! (nonzero? v1-10) cfg-22) + (b! (nonzero? v1-10) cfg-22 :delay (nop!)) (let ((f30-1 (vector-segment-distance-point! @@ -1117,7 +1117,7 @@ (b! (> f1-2 arg2) cfg-4) (b! (>= arg2 f2-0) cfg-4 :delay (set! v0-0 a2-1)) ) - (b! #t cfg-11) + (b! #t cfg-11 :delay (nop!)) (label cfg-4) (let ((a1-1 arg1) (a0-1 (+ arg0 1)) @@ -1135,7 +1135,7 @@ (set! v0-0 a2-3) ) ) - (b! (= v0-0 v1-3) cfg-11) + (b! (= v0-0 v1-3) cfg-11 :delay (nop!)) ) (nop!) (nop!) @@ -1255,7 +1255,7 @@ (b! (> f1-4 f0-3) cfg-4) (b! (>= f0-3 f2-3) cfg-4 :delay (set! s3-0 t1-1)) ) - (b! #t cfg-11) + (b! #t cfg-11 :delay (nop!)) (label cfg-4) (let ((a3-2 a3-1) (a1-2 (+ a1-1 1)) @@ -1273,7 +1273,7 @@ (set! s3-0 t1-3) ) ) - (b! (= s3-0 a0-4) cfg-11) + (b! (= s3-0 a0-4) cfg-11 :delay (nop!)) ) ) (nop!) diff --git a/test/decompiler/reference/engine/gfx/hw/display-h_REF.gc b/test/decompiler/reference/engine/gfx/hw/display-h_REF.gc index aea4733a27..921c97e646 100644 --- a/test/decompiler/reference/engine/gfx/hw/display-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/hw/display-h_REF.gc @@ -85,14 +85,14 @@ ;; definition of type display-frame (deftype display-frame (basic) - ((calc-buf dma-buffer :offset 8) - (vu1-buf dma-buffer :offset 8) - (debug-buf dma-buffer :offset 36) - (global-buf dma-buffer :offset 40) - (bucket-group dma-bucket :offset 44) - (buffer dma-buffer 11 :offset 4) - (profile-bar profile-bar 2 :offset 48) - (run-time uint64 :offset 56) + ((calc-buf dma-buffer :offset 8) + (vu1-buf dma-buffer :offset 8) + (debug-buf dma-buffer :offset 36) + (global-buf dma-buffer :offset 40) + (bucket-group (inline-array dma-bucket) :offset 44) + (buffer dma-buffer 11 :offset 4) + (profile-bar profile-bar 2 :offset 48) + (run-time uint64 :offset 56) ) :method-count-assert 9 :size-assert #x40 diff --git a/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc b/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc index 28a2980c42..e3c01641ed 100644 --- a/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/merc/merc-h_REF.gc @@ -81,7 +81,7 @@ :size-assert #x18 :flag-assert #xa00000018 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -160,10 +160,10 @@ ) ;; definition for function merc-fragment-fp-data -;; INFO: Return type mismatch int vs pointer. +;; INFO: Return type mismatch int vs merc-fp-header. (defun merc-fragment-fp-data ((arg0 merc-fragment)) (the-as - pointer + merc-fp-header (+ (the-as uint arg0) (* (-> arg0 header mm-quadword-fp-off) 16)) ) ) @@ -173,6 +173,7 @@ ((matrix-number uint8 :offset-assert 0) (matrix-dest uint8 :offset-assert 1) ) + :pack-me :method-count-assert 9 :size-assert #x2 :flag-assert #x900000002 @@ -188,11 +189,11 @@ ;; definition of type merc-fragment-control (deftype merc-fragment-control (structure) - ((unsigned-four-count uint8 :offset-assert 0) - (lump-four-count uint8 :offset-assert 1) - (fp-qwc uint8 :offset-assert 2) - (mat-xfer-count uint8 :offset-assert 3) - (mat-dest-data uint8 :dynamic :offset-assert 4) + ((unsigned-four-count uint8 :offset-assert 0) + (lump-four-count uint8 :offset-assert 1) + (fp-qwc uint8 :offset-assert 2) + (mat-xfer-count uint8 :offset-assert 3) + (mat-dest-data merc-mat-dest :inline :dynamic :offset-assert 4) ) :method-count-assert 9 :size-assert #x4 @@ -200,6 +201,7 @@ ) ;; definition for method 3 of type merc-fragment-control +;; INFO: this function exists in multiple non-identical object files (defmethod inspect merc-fragment-control ((obj merc-fragment-control)) (format #t "[~8x] ~A~%" obj 'merc-fragment-control) (format #t "~Tunsigned-four-count: ~D~%" (-> obj unsigned-four-count)) @@ -344,25 +346,26 @@ ;; definition of type merc-effect (deftype merc-effect (structure) - ((frag-geo merc-fragment :offset-assert 0) - (frag-ctrl merc-fragment-control :offset-assert 4) - (blend-data merc-blend-data :offset-assert 8) - (blend-ctrl merc-blend-ctrl :offset-assert 12) - (dummy0 uint8 :offset-assert 16) - (effect-bits uint8 :offset-assert 17) - (frag-count uint16 :offset-assert 18) - (blend-frag-count uint16 :offset-assert 20) - (tri-count uint16 :offset-assert 22) - (dvert-count uint16 :offset-assert 24) - (dummy1 uint8 :offset-assert 26) - (envmap-usage uint8 :offset-assert 27) - (extra-info merc-extra-info :offset-assert 28) + ((frag-geo merc-fragment :offset-assert 0) + (frag-ctrl merc-fragment-control :offset-assert 4) + (blend-data merc-blend-data :offset-assert 8) + (blend-ctrl merc-blend-ctrl :offset-assert 12) + (dummy0 uint8 :offset-assert 16) + (effect-bits uint8 :offset-assert 17) + (frag-count uint16 :offset-assert 18) + (blend-frag-count uint16 :offset-assert 20) + (tri-count uint16 :offset-assert 22) + (dvert-count uint16 :offset-assert 24) + (dummy1 uint8 :offset-assert 26) + (envmap-usage uint8 :offset-assert 27) + (extra-info merc-extra-info :offset-assert 28) + (data uint64 4 :offset 0) ) :method-count-assert 10 :size-assert #x20 :flag-assert #xa00000020 (:methods - (dummy-9 () none 9) + (login-adgifs (_type_) none 9) ) ) @@ -569,6 +572,7 @@ ) ;; definition for method 3 of type merc-ctrl +;; INFO: this function exists in multiple non-identical object files (defmethod inspect merc-ctrl ((obj merc-ctrl)) (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tname: ~A~%" (-> obj name)) @@ -582,11 +586,11 @@ ;; definition of type merc-vu1-low-mem (deftype merc-vu1-low-mem (structure) - ((tri-strip-gif qword :inline :offset-assert 0) - (ad-gif qword :inline :offset-assert 16) - (hvdf-offset vector :inline :offset-assert 32) - (perspective uint128 4 :offset-assert 48) - (fog vector :inline :offset-assert 112) + ((tri-strip-gif gs-gif-tag :inline :offset-assert 0) + (ad-gif gs-gif-tag :inline :offset-assert 16) + (hvdf-offset vector :inline :offset-assert 32) + (perspective uint128 4 :offset-assert 48) + (fog vector :inline :offset-assert 112) ) :method-count-assert 9 :size-assert #x80 diff --git a/test/decompiler/reference/engine/gfx/merc/merc_REF.gc b/test/decompiler/reference/engine/gfx/merc/merc_REF.gc new file mode 100644 index 0000000000..b98ca7d9b2 --- /dev/null +++ b/test/decompiler/reference/engine/gfx/merc/merc_REF.gc @@ -0,0 +1,758 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *merc-ctrl-header*, type merc-ctrl-header +(define *merc-ctrl-header* (the-as merc-ctrl-header #f)) + +;; definition for method 5 of type merc-fragment +;; INFO: Return type mismatch uint vs int. +(defmethod asize-of merc-fragment ((obj merc-fragment)) + (the-as int (* (-> obj header mm-quadword-size) 16)) + ) + +;; definition for method 9 of type merc-fragment +;; INFO: Return type mismatch merc-fragment vs none. +(defmethod login-adgifs merc-fragment ((obj merc-fragment)) + (let* ((fp-data (merc-fragment-fp-data obj)) + (eye-ctrl + (the-as merc-eye-ctrl (if (nonzero? (-> *merc-ctrl-header* eye-ctrl)) + (-> *merc-ctrl-header* eye-ctrl) + (the-as merc-eye-ctrl #f) + ) + ) + ) + (shader (the-as adgif-shader (&+ fp-data 16))) + ) + (dotimes (s2-0 (the-as int (-> fp-data shader-cnt))) + (cond + ((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf06f00)) + (adgif-shader-login shader) + (let ((eye-tex-block (get-eye-block (-> eye-ctrl eye-slot) 0))) + (set! (-> shader tex0 tbp0) eye-tex-block) + ) + (set! (-> shader tex0 tw) 5) + (set! (-> shader tex0 th) 5) + (set! (-> shader tex0 tcc) 1) + (set! (-> shader tex0 tbw) 1) + (set! (-> shader tex0 psm) 0) + (set! (-> shader tex1 mxl) 0) + (set! + (-> shader clamp) + (new 'static 'gs-clamp + :wms (gs-tex-wrap-mode clamp) + :wmt (gs-tex-wrap-mode clamp) + :maxu #x1f + :maxv #x1f + ) + ) + ) + ((and eye-ctrl (= (logand -256 (-> shader texture-id)) #x1cf07000)) + (adgif-shader-login shader) + (let ((eye-tex-block-2 (get-eye-block (-> eye-ctrl eye-slot) 1))) + (set! (-> shader tex0 tbp0) eye-tex-block-2) + ) + (set! (-> shader tex0 tw) 5) + (set! (-> shader tex0 th) 5) + (set! (-> shader tex0 tcc) 1) + (set! (-> shader tex0 tbw) 1) + (set! (-> shader tex0 psm) 0) + (set! (-> shader tex1 mxl) 0) + (set! + (-> shader clamp) + (new 'static 'gs-clamp + :wms (gs-tex-wrap-mode clamp) + :wmt (gs-tex-wrap-mode clamp) + :maxu #x1f + :maxv #x1f + ) + ) + ) + (else + (let ((tex (adgif-shader-login shader))) + (when tex + (dotimes (seg 3) + (logior! (-> *merc-ctrl-header* masks seg) (-> tex masks seg)) + ) + ) + ) + ) + ) + (&+! shader 80) + ) + ) + (none) + ) + +;; definition for method 5 of type merc-fragment-control +;; INFO: Return type mismatch uint vs int. +(defmethod asize-of merc-fragment-control ((obj merc-fragment-control)) + (the-as int (+ (* (-> obj mat-xfer-count) 2) 4)) + ) + +;; definition for method 3 of type merc-fragment-control +;; INFO: this function exists in multiple non-identical object files +(defmethod inspect merc-fragment-control ((obj merc-fragment-control)) + (format #t "[~8x] ~A~%" obj 'merc-fragment-control) + (format #t "~Tunsigned-four-count: ~D~%" (-> obj unsigned-four-count)) + (format #t "~Tlump-four-count: ~D~%" (-> obj lump-four-count)) + (format #t "~Tfp-qwc: ~D~%" (-> obj fp-qwc)) + (format #t "~Tmat-xfer-count: ~D~%" (-> obj mat-xfer-count)) + (dotimes (s5-0 (the-as int (-> obj mat-xfer-count))) + (format #t "~Tmat-dest-data[~d]:~%" s5-0) + (format + #t + "~T~Tmatrix-number: ~D~%" + (-> obj mat-dest-data s5-0 matrix-number) + ) + (format #t "~T~Tmatrix-dest: ~D~%" (-> obj mat-dest-data s5-0 matrix-dest)) + ) + obj + ) + +;; definition for method 9 of type merc-effect +;; INFO: Return type mismatch merc-effect vs none. +(defmethod login-adgifs merc-effect ((obj merc-effect)) + (let ((data (-> obj extra-info))) + (when (nonzero? data) + (when (nonzero? (-> data shader-offset)) + (let + ((tex + (adgif-shader-login + (the-as + adgif-shader + (+ (the-as uint data) (* (-> data shader-offset) 16)) + ) + ) + ) + ) + (when tex + (dotimes (seg 3) + (logior! (-> *merc-ctrl-header* masks seg) (-> tex masks seg)) + ) + ) + ) + ) + ) + ) + (let ((ctrl (-> obj frag-ctrl)) + (geo (-> obj frag-geo)) + ) + (dotimes (frag-idx (the-as int (-> obj frag-count))) + (let ((ctrl-size (asize-of ctrl))) + (let ((geo-size (asize-of geo))) + (login-adgifs geo) + (set! geo (the-as merc-fragment (&+ (the-as pointer geo) geo-size))) + ) + (set! + ctrl + (the-as merc-fragment-control (&+ (the-as pointer ctrl) ctrl-size)) + ) + ) + ) + ) + (none) + ) + +;; definition for method 3 of type merc-ctrl +;; INFO: this function exists in multiple non-identical object files +(defmethod inspect merc-ctrl ((obj merc-ctrl)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tnum-joints: ~D~%" (-> obj num-joints)) + (format #t "~Textra: ~A~%" (-> obj extra)) + (inspect (-> obj header)) + (dotimes (s5-0 (the-as int (-> obj header effect-count))) + (inspect (-> obj effect s5-0)) + ) + obj + ) + +;; definition for method 8 of type merc-ctrl +(defmethod + mem-usage + merc-ctrl + ((obj merc-ctrl) (arg0 memory-usage-block) (arg1 int)) + (if (-> obj extra) + (mem-usage (-> obj extra) arg0 arg1) + ) + (let ((ctrl-mem (+ 32 80 (* (-> obj header effect-count) 32)))) + (dotimes (effect-idx (the-as int (-> obj header effect-count))) + (let ((fctrl (-> obj effect effect-idx frag-ctrl))) + (dotimes (frag-idx (the-as int (-> obj effect effect-idx frag-count))) + (set! + ctrl-mem + (+ + ctrl-mem + (* (shr (+ (-> fctrl unsigned-four-count) 3) 2) 16) + (* (shr (+ (-> fctrl lump-four-count) 3) 2) 16) + (* (-> fctrl fp-qwc) 16) + (asize-of fctrl) + ) + ) + (set! + fctrl + (the-as + merc-fragment-control + (&+ (the-as pointer fctrl) (asize-of fctrl)) + ) + ) + ) + ) + ) + (set! (-> arg0 length) (max 76 (-> arg0 length))) + (set! (-> arg0 data 75 name) "merc-ctrl") + (+! (-> arg0 data 75 count) 1) + (+! (-> arg0 data 75 used) ctrl-mem) + (+! (-> arg0 data 75 total) (logand -16 (+ ctrl-mem 15))) + ) + (let ((effect-mem 0)) + (dotimes (effect-idx2 (the-as int (-> obj header effect-count))) + (when (nonzero? (-> obj effect effect-idx2 blend-frag-count)) + (let ((bctrl (-> obj effect effect-idx2 blend-ctrl))) + (dotimes + (blend-frag-idx + (the-as int (-> obj effect effect-idx2 blend-frag-count)) + ) + (let + ((v1-36 + (+ + effect-mem + (* + (+ (-> bctrl nonzero-index-count) 1) + (the-as + uint + (logand + (+ (* (the-as uint 6) (-> bctrl blend-vtx-count)) 15) + #xfff0 + ) + ) + ) + ) + ) + ) + (set! + effect-mem + (the-as int (+ (-> obj header blend-target-count) 2 v1-36)) + ) + ) + (set! + bctrl + (the-as + merc-blend-ctrl + (&+ (the-as pointer bctrl) (+ (-> obj header blend-target-count) 2)) + ) + ) + ) + ) + ) + ) + (when (nonzero? effect-mem) + (set! (-> arg0 length) (max 78 (-> arg0 length))) + (set! (-> arg0 data 77 name) "blend-shape") + (+! (-> arg0 data 77 count) 1) + (+! (-> arg0 data 77 used) effect-mem) + (+! (-> arg0 data 77 total) (logand -16 (+ effect-mem 15))) + ) + ) + (when (nonzero? (-> obj header eye-ctrl)) + (let ((a0-28 (-> obj header eye-ctrl))) + (set! (-> arg0 length) (max 109 (-> arg0 length))) + (set! (-> arg0 data 108 name) "eye-anim") + (+! (-> arg0 data 108 count) 1) + (let ((v1-47 (asize-of a0-28))) + (+! (-> arg0 data 108 used) v1-47) + (+! (-> arg0 data 108 total) (logand -16 (+ v1-47 15))) + ) + ) + ) + obj + ) + +;; definition for method 9 of type merc-ctrl +(defmethod login merc-ctrl ((obj merc-ctrl)) + (set! *merc-ctrl-header* (-> obj header)) + (dotimes (v1-1 3) + (set! (-> *merc-ctrl-header* masks v1-1) (the-as uint 0)) + ) + (dotimes (effect-idx (the-as int (-> obj header effect-count))) + (login-adgifs (-> obj effect effect-idx)) + ) + (let ((idx-with-bit1 -1) + (a1-1 (-> obj header effect-count)) + ) + (dotimes (v1-11 (the-as int a1-1)) + (if (logtest? (-> obj effect v1-11 effect-bits) 2) + (set! idx-with-bit1 v1-11) + ) + ) + (when (!= idx-with-bit1 -1) + (let ((v1-16 4) + (this-effect (-> obj effect idx-with-bit1)) + (last-effect (-> obj effect (+ a1-1 -1))) + ) + (dotimes (copy-idx v1-16) + (let ((a3-2 (-> this-effect data copy-idx))) + (set! (-> this-effect data copy-idx) (-> last-effect data copy-idx)) + (set! (-> last-effect data copy-idx) a3-2) + ) + ) + ) + ) + ) + (cond + ((zero? (logand -65536 (the-as int (-> obj header eye-ctrl)))) + (set! (-> obj header eye-ctrl) (the-as merc-eye-ctrl 0)) + 0 + ) + (else + (let ((s5-1 (-> obj header eye-ctrl))) + (dotimes (s4-0 3) + (let ((v1-25 (adgif-shader-login (-> s5-1 shader s4-0)))) + (when v1-25 + (dotimes (a0-11 3) + (logior! (-> *merc-ctrl-header* masks a0-11) (-> v1-25 masks a0-11)) + ) + ) + ) + ) + ) + ) + ) + obj + ) + +;; definition (debug) for function merc-stats-display +;; INFO: Return type mismatch symbol vs none. +(defun-debug merc-stats-display ((arg0 merc-ctrl)) + (format #t "~30s:" (-> arg0 name)) + (let ((s5-0 (-> arg0 header st-int-scale)) + (s4-0 (ash 1 (- 12 (the-as int (-> arg0 header st-int-scale))))) + ) + (format #t " ST ~3D, " s4-0) + (cond + ((>= s5-0 (the-as uint 5)) + (format #t "RANGE ~D+," (/ 128 s4-0)) + ) + ((= s5-0 4) + (format #t "RANGE 0.5+,") + ) + ) + ) + (dotimes (s5-1 (the-as int (-> arg0 header effect-count))) + (let ((s3-0 (-> arg0 effect s5-1))) + (if (nonzero? s5-1) + (format #t "~48s " " ") + ) + (let ((a2-4 (-> s3-0 frag-count)) + (s4-1 (-> s3-0 tri-count)) + (f30-0 (the float (-> s3-0 frag-count))) + (f28-0 (the float (-> s3-0 dvert-count))) + (f26-0 (the float (-> s3-0 tri-count))) + ) + (if (>= (/ (+ 50.0 f28-0) f30-0) 50.0) + (format #t "~3D frags, ~2,,1f dverts/frag " a2-4 (/ f28-0 f30-0)) + (format #t "~3D frags, ~2,,1f ******/**** " a2-4 (/ f28-0 f30-0)) + ) + (format + #t + "(~4D tris, striplen ~2,,2f, ~2,,1f tris/frag)~%" + s4-1 + (/ (* 2.0 f26-0) (- f28-0 f26-0)) + (/ f26-0 f30-0) + ) + ) + ) + ) + (none) + ) + +;; definition (debug) for function merc-stats +;; INFO: Return type mismatch int vs none. +(defun-debug merc-stats () + (dotimes (gp-0 3) + (let ((s5-0 (-> *level* level gp-0 art-group))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 art-group-array length)) + (let ((s3-0 (-> s5-0 art-group-array s4-0))) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((s1-0 (-> s3-0 data s2-0)) + (a0-3 + (if (and (nonzero? s1-0) (type-type? (-> s1-0 type) merc-ctrl)) + s1-0 + ) + ) + ) + (if a0-3 + (merc-stats-display (the-as merc-ctrl a0-3)) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition (debug) for function merc-edge-stats +;; INFO: Return type mismatch int vs none. +(defun-debug merc-edge-stats () + (dotimes (gp-0 3) + (let ((s5-0 (-> *level* level gp-0 art-group))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 art-group-array length)) + (let ((s3-0 (-> s5-0 art-group-array s4-0))) + (dotimes (s2-0 (-> s3-0 length)) + (let* ((s1-0 (-> s3-0 data s2-0)) + (v1-10 + (if (and (nonzero? s1-0) (type-type? (-> s1-0 type) merc-ctrl)) + s1-0 + ) + ) + ) + (if v1-10 + (format + #t + "~30s: ~f~%" + (-> (the-as merc-ctrl v1-10) name) + (-> (the-as merc-ctrl v1-10) header longest-edge) + ) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function merc-vu1-add-vu-function +;; INFO: Return type mismatch dma-packet vs dma-gif-packet. +(defun + merc-vu1-add-vu-function + ((dma dma-packet) (func vu-function) (flush-mode int)) + (let ((func-data (&-> func data 4)) + (qwc (-> func qlength)) + (dst (-> func origin)) + ) + (while (> qwc 0) + (let ((qwc-this-time (min 127 qwc))) + (set! + (-> dma dma) + (new 'static 'dma-tag + :id (dma-tag-id ref) + :qwc qwc-this-time + :addr (the-as int func-data) + ) + ) + (set! + (-> dma vif0) + (new 'static 'vif-tag :cmd (if (zero? flush-mode) 16 19)) + ) + (set! + (-> dma vif1) + (new 'static 'vif-tag + :cmd (vif-cmd mpg) + :num (* qwc-this-time 2) + :imm dst + ) + ) + (&+! dma 16) + (&+! func-data (* qwc-this-time 16)) + (set! qwc (- qwc qwc-this-time)) + (+! dst (* qwc-this-time 2)) + ) + ) + ) + (the-as dma-gif-packet dma) + ) + +;; definition for function merc-vu1-initialize-chain +;; INFO: Return type mismatch dma-packet vs none. +;; Used lq/sq +(defun merc-vu1-initialize-chain ((arg0 dma-gif-packet)) + (let + ((gp-0 + (the-as + object + (merc-vu1-add-vu-function (the-as dma-packet arg0) merc-vu1-block 1) + ) + ) + ) + (set! + (-> (the-as dma-gif-packet gp-0) dma-vif dma) + (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)) + ) + (set! + (-> (the-as dma-gif-packet gp-0) dma-vif vif0) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! + (-> (the-as dma-gif-packet gp-0) dma-vif vif1) + (new 'static 'vif-tag :cmd (vif-cmd stmod)) + ) + (set! + (-> (the-as (pointer vif-tag) gp-0) 4) + (new 'static 'vif-tag :imm #x1ba :cmd (vif-cmd base)) + ) + (set! + (-> (the-as (pointer vif-tag) gp-0) 5) + (new 'static 'vif-tag :imm #xfe46 :cmd (vif-cmd offset)) + ) + (set! (-> (the-as (pointer vif-tag) gp-0) 6) (new 'static 'vif-tag)) + (set! + (-> (the-as (pointer vif-tag) gp-0) 7) + (new 'static 'vif-tag :num #x8 :cmd (vif-cmd unpack-v4-32)) + ) + (let ((s5-0 (the-as merc-vu1-low-mem (&+ (the-as dma-gif-packet gp-0) 32)))) + (set! + (-> s5-0 tri-strip-gif tag) + (new 'static 'gif-tag64 + :pre #x1 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :iip #x1 :tme #x1 :fge #x1) + :nreg #x3 + ) + ) + (set! + (-> s5-0 tri-strip-gif regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id st) + :regs1 (gif-reg-id rgbaq) + :regs2 (gif-reg-id xyzf2) + ) + ) + (set! + (-> s5-0 tri-strip-gif word 3) + (shr (make-u128 0 (shl #x303e4000 32)) 32) + ) + (set! (-> s5-0 ad-gif tag) (new 'static 'gif-tag64 :nloop #x5 :nreg #x1)) + (set! + (-> s5-0 ad-gif regs) + (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d)) + ) + (set! (-> s5-0 hvdf-offset quad) (-> *math-camera* hvdf-off quad)) + (quad-copy! + (-> s5-0 perspective) + (the-as pointer (-> *math-camera* perspective)) + 4 + ) + (set-vector! + (-> s5-0 fog) + (-> *math-camera* pfog0) + (-> *math-camera* fog-min) + (-> *math-camera* fog-max) + 0.0 + ) + ) + (let ((v1-20 (-> (the-as (inline-array dma-packet) gp-0) 10))) + (set! (-> v1-20 dma) (new 'static 'dma-tag :id (dma-tag-id cnt))) + (set! (-> v1-20 vif0) (new 'static 'vif-tag)) + (set! + (-> v1-20 vif1) + (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1 :imm #x0) + ) + (&+ v1-20 16) + ) + ) + (none) + ) + +;; definition for function merc-vu1-init-buffer +;; INFO: Return type mismatch int vs none. +(defun merc-vu1-init-buffer ((dma-bucket bucket-id) (test gs-test) (arg2 int)) + (let + ((bucket + (-> + *display* + frames + (-> *display* on-screen) + frame + bucket-group + dma-bucket + ) + ) + ) + (when (!= bucket (-> bucket last)) + (let* + ((dma-buf (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-1 (-> dma-buf base)) + ) + (set! + (-> dma-buf base) + (the-as + pointer + (merc-vu1-initialize-chain (the-as dma-gif-packet (-> dma-buf base))) + ) + ) + (let* ((v1-8 dma-buf) + (a0-6 (the-as object (-> v1-8 base))) + ) + (set! + (-> (the-as dma-packet a0-6) dma) + (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)) + ) + (set! (-> (the-as dma-packet a0-6) vif0) (new 'static 'vif-tag)) + (set! + (-> (the-as dma-packet a0-6) vif1) + (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1) + ) + (set! (-> v1-8 base) (&+ (the-as pointer a0-6) 16)) + ) + (let* ((v1-9 dma-buf) + (a0-8 (the-as object (-> v1-9 base))) + ) + (set! + (-> (the-as gs-gif-tag a0-8) tag) + (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1) + ) + (set! + (-> (the-as gs-gif-tag a0-8) regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id a+d) + :regs1 (gif-reg-id a+d) + :regs2 (gif-reg-id a+d) + :regs3 (gif-reg-id a+d) + :regs4 (gif-reg-id a+d) + :regs5 (gif-reg-id a+d) + :regs6 (gif-reg-id a+d) + :regs7 (gif-reg-id a+d) + :regs8 (gif-reg-id a+d) + :regs9 (gif-reg-id a+d) + :regs10 (gif-reg-id a+d) + :regs11 (gif-reg-id a+d) + :regs12 (gif-reg-id a+d) + :regs13 (gif-reg-id a+d) + :regs14 (gif-reg-id a+d) + :regs15 (gif-reg-id a+d) + ) + ) + (set! (-> v1-9 base) (&+ (the-as pointer a0-8) 16)) + ) + (let* ((v1-10 dma-buf) + (a0-10 (-> v1-10 base)) + ) + (set! (-> (the-as (pointer gs-test) a0-10) 0) test) + (set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 test-1)) + (set! (-> v1-10 base) (&+ a0-10 16)) + ) + (let ((v1-11 (the-as object (-> dma-buf base)))) + (set! + (-> (the-as dma-packet v1-11) dma) + (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)) + ) + (set! (-> (the-as dma-packet v1-11) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-11) vif1) (new 'static 'vif-tag)) + (set! (-> dma-buf base) (&+ (the-as pointer v1-11) 16)) + ) + (set! (-> bucket next) (the-as uint s3-1)) + ) + ) + ) + 0 + (none) + ) + +;; definition for function merc-vu1-init-buffers +;; INFO: Return type mismatch int vs none. +(defun merc-vu1-init-buffers () + (when (logtest? *vu1-enable-user* 1024) + (merc-vu1-init-buffer + (bucket-id bucket-10) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-49) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-17) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-52) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-45) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-55) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-58) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x80 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (merc-vu1-init-buffer + (bucket-id bucket-61) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x80 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/engine/gfx/sprite/sprite-distort_REF.gc b/test/decompiler/reference/engine/gfx/sprite/sprite-distort_REF.gc index de12a512f3..321f7d810c 100644 --- a/test/decompiler/reference/engine/gfx/sprite/sprite-distort_REF.gc +++ b/test/decompiler/reference/engine/gfx/sprite/sprite-distort_REF.gc @@ -304,7 +304,7 @@ (.mul.vf vf10 vf1 vf8) (.div.vf Q vf0 vf10 :fsf #b11 :ftf #b11) (TODO.VCLIP vf10 vf10) - (b! (zero? (-> sv-16 flag)) cfg-21) + (b! (zero? (-> sv-16 flag)) cfg-21 :delay (nop!)) (.wait.vf) (.mul.vf vf1 vf1 Q :mask #b111) (.mul.vf vf2 vf2 Q :mask #b111) @@ -510,7 +510,3 @@ (none) ) ) - - - - diff --git a/test/decompiler/reference/engine/gfx/texture_REF.gc b/test/decompiler/reference/engine/gfx/texture_REF.gc index 2973fb802d..45e920a202 100644 --- a/test/decompiler/reference/engine/gfx/texture_REF.gc +++ b/test/decompiler/reference/engine/gfx/texture_REF.gc @@ -3227,7 +3227,7 @@ (.subu a3-10 t0-0 (the-as int a3-9)) (let ((t0-2 (+ (-> arg1 mip-shift) -1))) (nop!) - (b! (zero? t0-2) cfg-2) + (b! (zero? t0-2) cfg-2 :delay (nop!)) ) (let* ((t0-3 (+ a3-10 -4)) (a3-11 (* a3-10 16)) diff --git a/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc b/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc index 36689ee293..1bd3915b80 100644 --- a/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc +++ b/test/decompiler/reference/engine/gfx/tfrag/subdivide_REF.gc @@ -456,7 +456,7 @@ (a0-76 (-> v1-31 0 ctrl)) ) (+! (-> v1-31 0 count) 1) - (b! (zero? a0-76) cfg-28) + (b! (zero? a0-76) cfg-28 :delay (nop!)) (.mtc0 Perf r0-0) (.sync.l) (.sync.p) @@ -484,7 +484,7 @@ (defun-debug end-perf-stat-collection () (local-vars (r0-0 none) (a0-1 int) (a0-3 int)) (let ((v1-1 (-> *perf-stats* data))) - (b! (zero? (-> v1-1 0 ctrl)) cfg-2) + (b! (zero? (-> v1-1 0 ctrl)) cfg-2 :delay (nop!)) (.mtc0 Perf r0-0) (.sync.l) (.sync.p) diff --git a/test/decompiler/reference/engine/gfx/vis/bsp_REF.gc b/test/decompiler/reference/engine/gfx/vis/bsp_REF.gc index 61677279e3..f7c1c88de0 100644 --- a/test/decompiler/reference/engine/gfx/vis/bsp_REF.gc +++ b/test/decompiler/reference/engine/gfx/vis/bsp_REF.gc @@ -593,7 +593,12 @@ (table-data-end (&+ table-data-ptr (* table-size 8))) ) (label cfg-2) - (b! (= (the-as object table-data-start) table-data-end) cfg-8) + (b! + (= (the-as object table-data-start) table-data-end) + cfg-8 + :delay + (nop!) + ) (let ((midpoint (the-as @@ -616,17 +621,14 @@ (- (-> (the-as (pointer int32) midpoint) 0) (the-as int masked-tex-id)) ) ) - (b! (zero? diff) cfg-7) + (b! (zero? diff) cfg-7 :delay (nop!)) (b! (< diff 0) cfg-6 :delay (nop!)) ) (b! #t cfg-2 :delay - (set! - table-data-end - (the-as (pointer uint64) (the-as (pointer uint64) midpoint)) - ) + (set! table-data-end (the-as (pointer uint64) midpoint)) ) (label cfg-6) (b! diff --git a/test/decompiler/reference/engine/level/level-h_REF.gc b/test/decompiler/reference/engine/level/level-h_REF.gc index e1444e95bf..f552b591c1 100644 --- a/test/decompiler/reference/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/engine/level/level-h_REF.gc @@ -15,7 +15,7 @@ (ramdisk uint32 :offset-assert 40) (vis-bits pointer :offset-assert 44) (current-vis-string uint32 :offset-assert 48) - (vis-string uint8 :dynamic :offset-assert 52) + (vis-string uint32 :dynamic :offset-assert 52) ) :method-count-assert 9 :size-assert #x34 @@ -192,7 +192,7 @@ (bsp-name (_type_) symbol 13) (dummy-14 (_type_ object) memory-usage-block 14) (dummy-15 (_type_ vector) symbol 15) - (dummy-16 (_type_ uint uint) none 16) + (update-vis! (_type_ level-vis-info uint uint) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) (login (_type_) _type_ 19) diff --git a/test/decompiler/reference/engine/load/decomp_REF.gc b/test/decompiler/reference/engine/load/decomp_REF.gc new file mode 100644 index 0000000000..81dfd1d7f3 --- /dev/null +++ b/test/decompiler/reference/engine/load/decomp_REF.gc @@ -0,0 +1,334 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function unpack-comp-rle +;; INFO: Return type mismatch int vs none. +(defun unpack-comp-rle ((out (pointer int8)) (in (pointer int8))) + (local-vars (current-input int) (copy-length int)) + (nop!) + (while #t + (while #t + (set! current-input (-> in 0)) + (set! in (&-> in 1)) + (b! (<= current-input 0) cfg-5 :delay (nop!)) + (let ((repeated-value (-> in 0))) + (set! in (&-> in 1)) + (label cfg-3) + (nop!) + (nop!) + (nop!) + (nop!) + (set! (-> out 0) repeated-value) + ) + (set! out (&-> out 1)) + (b! + (> current-input 0) + cfg-3 + :delay + (set! current-input (+ current-input -1)) + ) + ) + (label cfg-5) + (b! (zero? current-input) cfg-8 :delay (set! copy-length (- current-input))) + (label cfg-6) + (let ((src-val (-> in 0))) + (set! in (&-> in 1)) + (nop!) + (nop!) + (set! (-> out 0) src-val) + ) + (+! copy-length -1) + (b! (> copy-length 0) cfg-6 :delay (set! out (&-> out 1))) + ) + (label cfg-8) + 0 + (none) + ) + +;; definition of type huf-dictionary-node +(deftype huf-dictionary-node (structure) + ((zero uint16 :offset-assert 0) + (one uint16 :offset-assert 2) + ) + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type huf-dictionary-node +(defmethod inspect huf-dictionary-node ((obj huf-dictionary-node)) + (format #t "[~8x] ~A~%" obj 'huf-dictionary-node) + (format #t "~Tzero: ~D~%" (-> obj zero)) + (format #t "~Tone: ~D~%" (-> obj one)) + obj + ) + +;; definition for function unpack-comp-huf +;; INFO: Return type mismatch int vs none. +;; WARN: Unsupported inline assembly instruction kind - [sra v1, v1, 1] +(defun + unpack-comp-huf + ((arg0 (pointer uint8)) + (arg1 (pointer uint8)) + (arg2 uint) + (arg3 huf-dictionary-node) + ) + (local-vars (t1-1 uint) (t3-2 object)) + (nop!) + (let ((t1-0 (-> arg3 zero)) + (a2-1 (+ arg2 -1028)) + (t2-0 (-> arg3 one)) + ) + (nop!) + (label cfg-1) + (let ((v1-4 128)) + (nop!) + (let ((t0-0 (-> arg1 0))) + (set! arg1 (&-> arg1 1)) + (label cfg-2) + (let ((t3-0 (logand t0-0 v1-4))) + (.sra v1-4 v1-4 1) + (b! (zero? t3-0) cfg-4 :delay (set! t1-1 t1-0)) + ) + ) + (nop!) + (set! t1-1 t2-0) + (label cfg-4) + (let ((t2-1 (+ t1-1 -256))) + (let ((t3-1 (* t1-1 4))) + (b! (< (the-as int t2-1) 0) cfg-8 :delay (set! t3-2 (+ t3-1 a2-1))) + ) + (b! + (zero? t2-1) + cfg-10 + :delay + (set! t1-0 (-> (the-as (pointer uint16) t3-2) 0)) + ) + ) + (b! + (nonzero? v1-4) + cfg-2 + :delay + (set! t2-0 (-> (the-as (pointer uint16) t3-2) 1)) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-8) + (set! (-> arg0 0) t1-1) + (set! arg0 (&-> arg0 1)) + (nop!) + (set! t1-0 (-> arg3 zero)) + (b! (nonzero? v1-4) cfg-2 :delay (set! t2-0 (-> arg3 one))) + ) + ) + (b! #t cfg-1 :delay (nop!)) + (label cfg-10) + (nop!) + (nop!) + 0 + (none) + ) + +;; definition for method 16 of type level +;; WARN: Unsupported inline assembly instruction kind - [sra s2, s2, 3] +;; Used lq/sq +(defmethod + update-vis! + level + ((obj level) (vis-info level-vis-info) (arg1 uint) (arg2 uint)) + (local-vars (t0-3 uint128) (vis-buffer object)) + (let* ((cam-leaf-idx (-> vis-info from-bsp current-leaf-idx)) + (curr-vis-str (-> vis-info current-vis-string)) + (desired-vis-str (-> vis-info vis-string cam-leaf-idx)) + ) + 0 + (+ 16 #x70000000) + (+ 2064 #x70000000) + (when (= curr-vis-str desired-vis-str) + (b! + (zero? (logand #x40000000 (-> vis-info flags))) + cfg-6 + :delay + (empty-form) + ) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (set! (-> vis-info flags) (logand -1073741825 (-> vis-info flags))) + (set! vis-buffer (-> obj vis-buffer)) + (b! #t cfg-27 :delay (nop!)) + (label cfg-6) + (return #t) + ) + (when (logtest? #x40000000 (-> vis-info flags)) + (if (check-busy *ramdisk-rpc*) + (return #f) + ) + (set! (-> vis-info flags) (logand -1073741825 (-> vis-info flags))) + ) + (set! (-> vis-info current-vis-string) desired-vis-str) + (b! (logtest? #x20000000 (-> vis-info flags)) cfg-15 :delay (empty-form)) + (set! vis-buffer (+ arg2 desired-vis-str)) + (b! #t cfg-27 :delay (nop!)) + (label cfg-15) + (let ((vis-load-result (vis-load obj))) + (b! (nonzero? vis-load-result) cfg-21 :delay (empty-form)) + (let* ((dest-bits (-> vis-info vis-bits)) + (len (-> obj bsp visible-list-length)) + (bsp-bits (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (len-qw (/ (+ len 15) 16)) + ) + (dotimes (a2-1 len-qw) + (set! + (-> (the-as (pointer uint128) dest-bits) 0) + (-> (the-as (pointer uint128) bsp-bits) 0) + ) + (&+! dest-bits 16) + (set! bsp-bits (&-> (the-as (pointer uint16) bsp-bits) 8)) + ) + ) + (let ((result #f)) + (b! #t cfg-55 :delay (nop!)) + (the-as none 0) + (label cfg-21) + (when (check-busy *ramdisk-rpc*) + (set! (-> vis-info current-vis-string) (the-as uint -1)) + (set! (-> obj all-visible?) 'loading) + (if (= *cheat-mode* 'debug) + (format *stdcon* "Ramdisk loading~%") + ) + (return #f) + ) + (set! (-> vis-info flags) (logior #x40000000 (-> vis-info flags))) + (ramdisk-load + (the-as int vis-load-result) + desired-vis-str + (the-as uint 2048) + (-> obj vis-buffer) + ) + (set! result #f) + (b! #t cfg-55 :delay (nop!)) + (label cfg-27) + (let + ((lower-flag-bits (the-as int (logand #x1fffffff (-> vis-info flags)))) + (spad-start (the-as object (+ 16 #x70000000))) + (spad-end (+ 2064 #x70000000)) + (list-len (-> obj bsp visible-list-length)) + ) + (when (zero? (the-as uint lower-flag-bits)) + (let ((list-qwc (/ (+ list-len 15) 16))) + (dotimes (a0-28 list-qwc) + (set! + (-> (the-as (pointer uint128) spad-start) a0-28) + (the-as uint128 0) + ) + ) + ) + (mem-copy! + (the-as pointer spad-start) + (the-as pointer vis-buffer) + list-len + ) + ) + (while (nonzero? lower-flag-bits) + (case (logand lower-flag-bits 7) + ((1) + (let ((v1-55 (/ (+ list-len 15) 16))) + (dotimes (a0-32 v1-55) + (set! + (-> (the-as (pointer uint128) spad-start) a0-32) + (the-as uint128 0) + ) + ) + ) + (dummy-16 + (-> obj bsp drawable-trees) + (the-as int spad-start) + vis-buffer + ) + ) + ((2) + (unpack-comp-rle + (the-as (pointer int8) spad-start) + (the-as (pointer int8) vis-buffer) + ) + ) + ((3) + (unpack-comp-huf + (the-as (pointer uint8) spad-start) + (the-as (pointer uint8) vis-buffer) + (-> vis-info dictionary) + (the-as + huf-dictionary-node + (+ (-> vis-info dictionary) (-> vis-info dictionary-length) -4) + ) + ) + ) + ) + (set! vis-buffer (the-as int spad-start)) + (set! spad-start spad-end) + (set! spad-end (the-as int vis-buffer)) + (.sra lower-flag-bits lower-flag-bits 3) + ) + (let ((s2-1 vis-buffer) + (s1-1 (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (v1-67 #f) + ) + (dotimes (s0-1 list-len) + (when + (!= + (logand + (-> (the-as (pointer uint8) s2-1) 0) + (-> (the-as (pointer uint8) s1-1) 0) + ) + (-> (the-as (pointer uint8) s2-1) 0) + ) + (format + #t + "ERROR: illegal vis bits set [byte ~X] ~X -> ~X~%" + s0-1 + (-> (the-as (pointer uint8) s2-1) 0) + (-> (the-as (pointer uint8) s1-1) 0) + ) + (set! v1-67 #t) + ) + (set! s2-1 (&-> (the-as (pointer uint8) s2-1) 1)) + (set! s1-1 (&+ (the-as (pointer uint16) s1-1) 1)) + ) + (when v1-67 + (format + #t + "src = #x~x dest = #x~x ~s ~s~%" + vis-buffer + (-> vis-info vis-bits) + (-> vis-info level) + (-> vis-info from-level) + ) + (format #t "leaf-index = ~d~%" (-> vis-info from-bsp current-leaf-idx)) + 0 + ) + ) + (let ((v1-71 vis-buffer) + (a0-47 (-> vis-info vis-bits)) + (a1-22 (the-as (pointer uinteger) (-> obj bsp all-visible-list))) + (a2-11 (/ (+ list-len 15) 16)) + ) + (dotimes (a3-8 a2-11) + (let ((t0-2 (-> (the-as (pointer uint128) v1-71) 0)) + (t1-1 (-> (the-as (pointer uint128) a1-22) 0)) + ) + (.pand t0-3 t0-2 t1-1) + ) + (set! (-> (the-as (pointer uint128) a0-47) 0) t0-3) + (&+! a0-47 16) + (set! v1-71 (&-> (the-as (pointer uint16) v1-71) 8)) + (set! a1-22 (&-> (the-as (pointer uint16) a1-22) 8)) + ) + ) + ) + (set! result #t) + (label cfg-55) + result + ) + ) + ) + ) diff --git a/test/decompiler/reference/engine/load/loader_REF.gc b/test/decompiler/reference/engine/load/loader_REF.gc index 7d52b956c5..320375eb6d 100644 --- a/test/decompiler/reference/engine/load/loader_REF.gc +++ b/test/decompiler/reference/engine/load/loader_REF.gc @@ -140,7 +140,7 @@ ) (let ((s5-0 (loado arg0 arg1))) (the-as art (if (type-type? (-> (the-as art s5-0) type) art) - (dummy-9 (the-as art s5-0)) + (login (the-as art s5-0)) (the-as art #f) ) ) @@ -190,7 +190,7 @@ (the-as art-group #f) ) (else - (dummy-9 s3-1) + (login s3-1) ) ) ) @@ -545,7 +545,7 @@ (set! (-> obj status) 'error) ) (else - (dummy-9 s4-0) + (login s4-0) (set! (-> obj status) 'locked) ) )